From 5a3ed97be3255de73d12baa6f21f004d4f41b56f Mon Sep 17 00:00:00 2001 From: Wisdom Ogwu Date: Wed, 29 Dec 2021 15:23:21 +0100 Subject: [PATCH] written test for range proof --- grovedb/src/tests.rs | 71 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/grovedb/src/tests.rs b/grovedb/src/tests.rs index b68bd14c4..b90842cef 100644 --- a/grovedb/src/tests.rs +++ b/grovedb/src/tests.rs @@ -1,6 +1,5 @@ use std::{ ops::{Deref, DerefMut}, - os::unix::fs::chroot, }; use merk::test_utils::TempMerk; @@ -587,6 +586,76 @@ fn test_successful_proof_verification() { assert_eq!(elem, Element::Item(b"value3".to_vec())); } +#[test] +fn test_range_proofs() { + let mut temp_db = make_grovedb(); + temp_db + .insert(&[TEST_LEAF], b"innertree".to_vec(), Element::empty_tree()) + .expect("successful subtree insert"); + temp_db + .insert( + &[TEST_LEAF, b"innertree"], + b"key1".to_vec(), + Element::Item(b"value1".to_vec()), + ) + .expect("successful subtree insert"); + temp_db + .insert( + &[TEST_LEAF, b"innertree"], + b"key2".to_vec(), + Element::Item(b"value2".to_vec()), + ) + .expect("successful subtree insert"); + temp_db + .insert( + &[TEST_LEAF, b"innertree"], + b"key3".to_vec(), + Element::Item(b"value3".to_vec()), + ) + .expect("successful subtree insert"); + temp_db + .insert( + &[TEST_LEAF, b"innertree"], + b"key4".to_vec(), + Element::Item(b"value4".to_vec()), + ) + .expect("successful subtree insert"); + temp_db + .insert( + &[TEST_LEAF, b"innertree"], + b"key5".to_vec(), + Element::Item(b"value5".to_vec()), + ) + .expect("successful subtree insert"); + + let mut query = Query::new(); + let start = b"key2".to_vec(); + let end = b"key4".to_vec(); + query.insert_range(start..end); + + let proof = temp_db.proof(vec![ + PathQuery{ + path: &[TEST_LEAF, b"innertree"], + query, + }, + ]).unwrap(); + + let (root_hash, result_maps) = GroveDb::execute_proof(proof).unwrap(); + assert_eq!(temp_db.root_tree.root().unwrap(), root_hash); + + let path_as_vec = GroveDb::compress_subtree_key(&[TEST_LEAF, b"innertree"], None); + let result_map = result_maps.get(&path_as_vec).unwrap(); + + // key1 should not be in result map + assert_eq!(result_map.get(b"key1").is_err(), true); + // key2 and key3 should exist in result map + // check that it exists and contains a value + assert_eq!(result_map.get(b"key2").unwrap().is_some(), true); + assert_eq!(result_map.get(b"key3").unwrap().is_some(), true); + // key4 should not exist in result map (didn't use range_inclusive) + assert_eq!(result_map.get(b"key4").unwrap().is_some(), false); +} + #[test] fn test_checkpoint() { let mut db = make_grovedb();