Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 70 additions & 1 deletion grovedb/src/tests.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
use std::{
ops::{Deref, DerefMut},
os::unix::fs::chroot,
};

use merk::test_utils::TempMerk;
Expand Down Expand Up @@ -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();
Expand Down