From 46f0faf007d4788a4d30f065e454c105a3d8a6fa Mon Sep 17 00:00:00 2001 From: Joseph Livesey Date: Fri, 3 Mar 2023 10:01:57 -0500 Subject: [PATCH] test(commit_store): add tests for get_batch_by_transaction Signed-off-by: Joseph Livesey --- validator/src/journal/commit_store.rs | 72 +++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/validator/src/journal/commit_store.rs b/validator/src/journal/commit_store.rs index bd92f28ad7..bab88a031e 100644 --- a/validator/src/journal/commit_store.rs +++ b/validator/src/journal/commit_store.rs @@ -577,3 +577,75 @@ impl ChainReader for CommitStore { .map_err(|err| ChainReadError::GeneralReadError(format!("{:?}", err))) } } + +#[cfg(test)] +mod tests { + use sawdb::error::DatabaseError; + + #[derive(Clone, Debug, PartialEq)] + pub struct TestBatch { + // pub header_signature: String, + // pub transactions: Vec, + // pub signer_public_key: String, + pub transaction_ids: Vec, + // pub trace: bool, + + // pub header_bytes: Vec, + } + + pub struct TestBlock { + // pub header_signature: String, + pub batches: Vec, + // pub state_root_hash: String, + // pub consensus: Vec, + // pub batch_ids: Vec, + // pub signer_public_key: String, + // pub previous_block_id: String, + // pub block_num: u64, + + // pub header_bytes: Vec, + } + + // Copies logic of `sawtooth_validator::journal::commit_store::CommitStore::get_batch_by_transaction` + fn mock_get_batch_by_transaction( + transaction_id: &str, + block: TestBlock, + ) -> Result { + // self.get_by_transaction_id(transaction_id) + // .and_then(|block| { + block + .batches + .into_iter() + .skip_while(|batch| { + batch + .transaction_ids + .iter() + .any(|txn_id| txn_id == transaction_id) + }) + .next() + .ok_or_else(|| DatabaseError::CorruptionError("Transaction index corrupted".into())) + // }) + } + + #[test] + fn test_get_batch_by_transaction_ok() { + let block = TestBlock { + batches: vec![TestBatch { + transaction_ids: vec!["1".to_string()], + }], + }; + let transaction_id = "1"; + assert!(mock_get_batch_by_transaction(transaction_id, block).is_ok()); + } + + #[test] + fn test_get_batch_by_transaction_should_err() { + let block = TestBlock { + batches: vec![TestBatch { + transaction_ids: vec!["1".to_string()], + }], + }; + let transaction_id = "nope"; + assert!(mock_get_batch_by_transaction(transaction_id, block).is_err()); + } +}