From 822c9cb77e73de988dc20af13a8ad90fffef1b52 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 18 Oct 2024 02:37:24 +0200 Subject: [PATCH 1/8] tests setup: mock structures and get_first_32_bytes --- storage/src/merkle_tree_public/merkle_tree.rs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/storage/src/merkle_tree_public/merkle_tree.rs b/storage/src/merkle_tree_public/merkle_tree.rs index ac933ea..643fb21 100644 --- a/storage/src/merkle_tree_public/merkle_tree.rs +++ b/storage/src/merkle_tree_public/merkle_tree.rs @@ -95,3 +95,29 @@ impl HashStorageMerkleTree { self.tree.commit(); } } + +#[cfg(test)] +mod tests { + use super::*; + + // Mock implementation of TreeLeavItem trait for testing + #[derive(Debug, Clone, PartialEq, Eq, Hash)] + struct MockTransaction { + pub hash: TreeHashType, + } + + impl TreeLeavItem for MockTransaction { + fn hash(&self) -> TreeHashType { + self.hash + } + } + + fn get_first_32_bytes(s: &str) -> [u8; 32] { + let mut buffer = [0u8; 32]; + let bytes = s.as_bytes(); + let len = std::cmp::min(32, bytes.len()); + + buffer[..len].copy_from_slice(&bytes[..len]); + buffer + } +} From dc058c666b5d6caf17a689f4eafa98a2a13ccbdc Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 18 Oct 2024 02:37:47 +0200 Subject: [PATCH 2/8] add test_new_merkle_tree --- storage/src/merkle_tree_public/merkle_tree.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/storage/src/merkle_tree_public/merkle_tree.rs b/storage/src/merkle_tree_public/merkle_tree.rs index 643fb21..c8fbd34 100644 --- a/storage/src/merkle_tree_public/merkle_tree.rs +++ b/storage/src/merkle_tree_public/merkle_tree.rs @@ -120,4 +120,15 @@ mod tests { buffer[..len].copy_from_slice(&bytes[..len]); buffer } + + #[test] + fn test_new_merkle_tree() { + let tx1 = MockTransaction { hash: get_first_32_bytes("tx1") }; + let tx2 = MockTransaction { hash: get_first_32_bytes("tx2") }; + + let tree = HashStorageMerkleTree::new(vec![tx1.clone(), tx2.clone()]); + + assert_eq!(tree.leaves.len(), 2); + assert!(tree.get_root().is_some()); + } } From 7b9d1bafafcf00709ffca68ef1d3e1b95705fbb9 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 18 Oct 2024 02:38:06 +0200 Subject: [PATCH 3/8] add test_get_tx --- storage/src/merkle_tree_public/merkle_tree.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/storage/src/merkle_tree_public/merkle_tree.rs b/storage/src/merkle_tree_public/merkle_tree.rs index c8fbd34..08a4981 100644 --- a/storage/src/merkle_tree_public/merkle_tree.rs +++ b/storage/src/merkle_tree_public/merkle_tree.rs @@ -131,4 +131,15 @@ mod tests { assert_eq!(tree.leaves.len(), 2); assert!(tree.get_root().is_some()); } + + #[test] + fn test_get_tx() { + let tx1 = MockTransaction { hash: get_first_32_bytes("tx1") }; + let tx2 = MockTransaction { hash: get_first_32_bytes("tx2") }; + + let tree = HashStorageMerkleTree::new(vec![tx1.clone(), tx2.clone()]); + + assert_eq!(tree.get_tx(tx1.hash()), Some(&tx1)); + assert_eq!(tree.get_tx(tx2.hash()), Some(&tx2)); + } } From 994e8ff802e98344bf711170ef98465ad1129cdb Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 18 Oct 2024 02:38:35 +0200 Subject: [PATCH 4/8] add test_get_proof --- storage/src/merkle_tree_public/merkle_tree.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/storage/src/merkle_tree_public/merkle_tree.rs b/storage/src/merkle_tree_public/merkle_tree.rs index 08a4981..e30928b 100644 --- a/storage/src/merkle_tree_public/merkle_tree.rs +++ b/storage/src/merkle_tree_public/merkle_tree.rs @@ -142,4 +142,15 @@ mod tests { assert_eq!(tree.get_tx(tx1.hash()), Some(&tx1)); assert_eq!(tree.get_tx(tx2.hash()), Some(&tx2)); } + + #[test] + fn test_get_proof() { + let tx1 = MockTransaction { hash: get_first_32_bytes("tx1") }; + let tx2 = MockTransaction { hash: get_first_32_bytes("tx2") }; + + let tree = HashStorageMerkleTree::new(vec![tx1.clone(), tx2.clone()]); + + let proof = tree.get_proof(tx1.hash()); + assert!(proof.is_some()); + } } From 8d2da05c3cec5fb3916faa0ce7d310cfb2bbdac4 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 18 Oct 2024 02:38:49 +0200 Subject: [PATCH 5/8] add test_add_tx --- storage/src/merkle_tree_public/merkle_tree.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/storage/src/merkle_tree_public/merkle_tree.rs b/storage/src/merkle_tree_public/merkle_tree.rs index e30928b..6b7d35f 100644 --- a/storage/src/merkle_tree_public/merkle_tree.rs +++ b/storage/src/merkle_tree_public/merkle_tree.rs @@ -153,4 +153,16 @@ mod tests { let proof = tree.get_proof(tx1.hash()); assert!(proof.is_some()); } + + #[test] + fn test_add_tx() { + let tx1 = MockTransaction { hash: get_first_32_bytes("tx1") }; + let tx2 = MockTransaction { hash: get_first_32_bytes("tx2") }; + + let mut tree = HashStorageMerkleTree::new(vec![tx1.clone()]); + + tree.add_tx(tx2.clone()); + assert_eq!(tree.leaves.len(), 2); + assert_eq!(tree.get_tx(tx2.hash()), Some(&tx2)); + } } From 7a567ea3302b8cd25ba6676031cf2ce22d557d62 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 18 Oct 2024 02:39:01 +0200 Subject: [PATCH 6/8] add test_add_tx_multiple --- storage/src/merkle_tree_public/merkle_tree.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/storage/src/merkle_tree_public/merkle_tree.rs b/storage/src/merkle_tree_public/merkle_tree.rs index 6b7d35f..0f63f6c 100644 --- a/storage/src/merkle_tree_public/merkle_tree.rs +++ b/storage/src/merkle_tree_public/merkle_tree.rs @@ -165,4 +165,18 @@ mod tests { assert_eq!(tree.leaves.len(), 2); assert_eq!(tree.get_tx(tx2.hash()), Some(&tx2)); } + + #[test] + fn test_add_tx_multiple() { + let tx1 = MockTransaction { hash: get_first_32_bytes("tx1") }; + let tx2 = MockTransaction { hash: get_first_32_bytes("tx2") }; + let tx3 = MockTransaction { hash: get_first_32_bytes("tx3") }; + + let mut tree = HashStorageMerkleTree::new(vec![tx1.clone()]); + tree.add_tx_multiple(vec![tx2.clone(), tx3.clone()]); + + assert_eq!(tree.leaves.len(), 3); + assert_eq!(tree.get_tx(tx2.hash()), Some(&tx2)); + assert_eq!(tree.get_tx(tx3.hash()), Some(&tx3)); + } } From cc0f05946f718d04238c0fca34dd5e04b78dbbe0 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 18 Oct 2024 02:39:11 +0200 Subject: [PATCH 7/8] add test_get_proof_multiple --- storage/src/merkle_tree_public/merkle_tree.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/storage/src/merkle_tree_public/merkle_tree.rs b/storage/src/merkle_tree_public/merkle_tree.rs index 0f63f6c..73e9e75 100644 --- a/storage/src/merkle_tree_public/merkle_tree.rs +++ b/storage/src/merkle_tree_public/merkle_tree.rs @@ -179,4 +179,16 @@ mod tests { assert_eq!(tree.get_tx(tx2.hash()), Some(&tx2)); assert_eq!(tree.get_tx(tx3.hash()), Some(&tx3)); } + + #[test] + fn test_get_proof_multiple() { + let tx1 = MockTransaction { hash: get_first_32_bytes("tx1") }; + let tx2 = MockTransaction { hash: get_first_32_bytes("tx2") }; + let tx3 = MockTransaction { hash: get_first_32_bytes("tx3") }; + + let tree = HashStorageMerkleTree::new(vec![tx1.clone(), tx2.clone(), tx3.clone()]); + let proof = tree.get_proof_multiple(&[tx1.hash(), tx2.hash()]); + + assert!(proof.is_some()); + } } From 535bb1011ecffac2dc73b75bd5174a150fc2690b Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 18 Oct 2024 10:42:18 +0200 Subject: [PATCH 8/8] fmt --- storage/src/merkle_tree_public/merkle_tree.rs | 58 ++++++++++++++----- 1 file changed, 43 insertions(+), 15 deletions(-) diff --git a/storage/src/merkle_tree_public/merkle_tree.rs b/storage/src/merkle_tree_public/merkle_tree.rs index 73e9e75..16d185e 100644 --- a/storage/src/merkle_tree_public/merkle_tree.rs +++ b/storage/src/merkle_tree_public/merkle_tree.rs @@ -116,15 +116,19 @@ mod tests { let mut buffer = [0u8; 32]; let bytes = s.as_bytes(); let len = std::cmp::min(32, bytes.len()); - + buffer[..len].copy_from_slice(&bytes[..len]); buffer } #[test] fn test_new_merkle_tree() { - let tx1 = MockTransaction { hash: get_first_32_bytes("tx1") }; - let tx2 = MockTransaction { hash: get_first_32_bytes("tx2") }; + let tx1 = MockTransaction { + hash: get_first_32_bytes("tx1"), + }; + let tx2 = MockTransaction { + hash: get_first_32_bytes("tx2"), + }; let tree = HashStorageMerkleTree::new(vec![tx1.clone(), tx2.clone()]); @@ -134,8 +138,12 @@ mod tests { #[test] fn test_get_tx() { - let tx1 = MockTransaction { hash: get_first_32_bytes("tx1") }; - let tx2 = MockTransaction { hash: get_first_32_bytes("tx2") }; + let tx1 = MockTransaction { + hash: get_first_32_bytes("tx1"), + }; + let tx2 = MockTransaction { + hash: get_first_32_bytes("tx2"), + }; let tree = HashStorageMerkleTree::new(vec![tx1.clone(), tx2.clone()]); @@ -145,8 +153,12 @@ mod tests { #[test] fn test_get_proof() { - let tx1 = MockTransaction { hash: get_first_32_bytes("tx1") }; - let tx2 = MockTransaction { hash: get_first_32_bytes("tx2") }; + let tx1 = MockTransaction { + hash: get_first_32_bytes("tx1"), + }; + let tx2 = MockTransaction { + hash: get_first_32_bytes("tx2"), + }; let tree = HashStorageMerkleTree::new(vec![tx1.clone(), tx2.clone()]); @@ -156,8 +168,12 @@ mod tests { #[test] fn test_add_tx() { - let tx1 = MockTransaction { hash: get_first_32_bytes("tx1") }; - let tx2 = MockTransaction { hash: get_first_32_bytes("tx2") }; + let tx1 = MockTransaction { + hash: get_first_32_bytes("tx1"), + }; + let tx2 = MockTransaction { + hash: get_first_32_bytes("tx2"), + }; let mut tree = HashStorageMerkleTree::new(vec![tx1.clone()]); @@ -168,9 +184,15 @@ mod tests { #[test] fn test_add_tx_multiple() { - let tx1 = MockTransaction { hash: get_first_32_bytes("tx1") }; - let tx2 = MockTransaction { hash: get_first_32_bytes("tx2") }; - let tx3 = MockTransaction { hash: get_first_32_bytes("tx3") }; + let tx1 = MockTransaction { + hash: get_first_32_bytes("tx1"), + }; + let tx2 = MockTransaction { + hash: get_first_32_bytes("tx2"), + }; + let tx3 = MockTransaction { + hash: get_first_32_bytes("tx3"), + }; let mut tree = HashStorageMerkleTree::new(vec![tx1.clone()]); tree.add_tx_multiple(vec![tx2.clone(), tx3.clone()]); @@ -182,9 +204,15 @@ mod tests { #[test] fn test_get_proof_multiple() { - let tx1 = MockTransaction { hash: get_first_32_bytes("tx1") }; - let tx2 = MockTransaction { hash: get_first_32_bytes("tx2") }; - let tx3 = MockTransaction { hash: get_first_32_bytes("tx3") }; + let tx1 = MockTransaction { + hash: get_first_32_bytes("tx1"), + }; + let tx2 = MockTransaction { + hash: get_first_32_bytes("tx2"), + }; + let tx3 = MockTransaction { + hash: get_first_32_bytes("tx3"), + }; let tree = HashStorageMerkleTree::new(vec![tx1.clone(), tx2.clone(), tx3.clone()]); let proof = tree.get_proof_multiple(&[tx1.hash(), tx2.hash()]);