Skip to content

Commit ac5fc79

Browse files
committed
consisstency verify fuzztest
1 parent 77df88e commit ac5fc79

1 file changed

Lines changed: 39 additions & 0 deletions

File tree

testonly/tree_fuzz_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,45 @@ func FuzzConsistencyProofAndVerify(f *testing.F) {
4444
})
4545
}
4646

47+
// Compute and verify subtree consistency proofs
48+
func FuzzSubtreeConsistencyProofAndVerify(f *testing.F) {
49+
for tSize := 1; tSize <= 8; tSize++ {
50+
for size := 1; size <= tSize; size++ {
51+
for end := 1; end <= tSize; end++ {
52+
for begin := range end {
53+
f.Add(uint64(tSize), uint64(size), uint64(begin), uint64(end))
54+
}
55+
}
56+
}
57+
}
58+
f.Fuzz(func(t *testing.T, treeSize, size, begin, end uint64) {
59+
// necessary to restrict size for compile_native_go_fuzzer
60+
if size >= math.MaxUint16 {
61+
return
62+
}
63+
if size > treeSize {
64+
return
65+
}
66+
if err := isSubtreeValid(begin, end); err != nil {
67+
return
68+
}
69+
t.Logf("treeSize=%d, size=%d, begin=%d, end=%d", treeSize, size, begin, end)
70+
if begin > end || end > size {
71+
return
72+
}
73+
tree := newTree(genEntries(treeSize))
74+
p, err := tree.SubtreeConsistencyProof(begin, end, size)
75+
t.Logf("proof=%v", p)
76+
if err != nil {
77+
t.Error(err)
78+
}
79+
err = proof.VerifySubtreeConsistency(tree.hasher, begin, end, size, p, tree.SubtreeHashAt(begin, end), tree.HashAt(size))
80+
if err != nil {
81+
t.Error(err)
82+
}
83+
})
84+
}
85+
4786
// Compute and verify inclusion proofs
4887
func FuzzInclusionProofAndVerify(f *testing.F) {
4988
for size := range 8 + 1 {

0 commit comments

Comments
 (0)