From c2737a28c52aaeda952631c9634cb45ef9540ab7 Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 14 Jun 2024 17:14:57 +0200 Subject: [PATCH] test: cryptarchia ledger error cases - LedgerError::InvalidSlot --- ledger/cryptarchia-ledger/src/lib.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ledger/cryptarchia-ledger/src/lib.rs b/ledger/cryptarchia-ledger/src/lib.rs index 8a1dd848..9d59dbb3 100644 --- a/ledger/cryptarchia-ledger/src/lib.rs +++ b/ledger/cryptarchia-ledger/src/lib.rs @@ -771,4 +771,31 @@ pub mod tests { // Test ser/de of compact representation for Commitment assert_tokens(&commitment.compact(), &[Token::BorrowedBytes(&[0; 32])]); } + + #[test] + fn test_cryptarchia_ledger_error_cases() { + let coin = coin(0); + let commitment = coin.commitment(); + let (ledger, genesis) = ledger(&[commitment]); + + let ledger_state = ledger.state(&genesis).unwrap().clone(); + let ledger_config = ledger.config(); + + let slot = Slot::genesis() + 10; + let ledger_state2 = ledger_state + .update_epoch_state::(slot, ledger_config) + .expect("Ledger needs to move forward"); + + let slot2 = Slot::genesis() + 1; + let update_epoch_err = ledger_state2 + .update_epoch_state::(slot2, ledger_config) + .err(); + + // Time cannot flow backwards + match update_epoch_err { + Some(LedgerError::InvalidSlot { parent, block }) + if parent == slot && block == slot2 => {} + _ => panic!("Error does not match the LedgerError::InvalidSlot pattern"), + }; + } }