@@ -3,6 +3,7 @@ package unixfsproof
33import (
44 "bytes"
55 "context"
6+ "fmt"
67 "io"
78 "math/rand"
89 "testing"
@@ -14,14 +15,14 @@ import (
1415 "github.com/stretchr/testify/require"
1516)
1617
17- func TestMakeProof (t * testing.T ) {
18- dserv := testu . GetDAGServ ()
18+ func TestProofVerify (t * testing.T ) {
19+ t . Parallel ()
1920
21+ dserv := testu .GetDAGServ ()
2022 r := rand .New (rand .NewSource (22 ))
2123 data := make ([]byte , 100000 )
2224 _ , err := io .ReadFull (r , data )
2325 require .NoError (t , err )
24-
2526 in := bytes .NewReader (data )
2627 opts := testu .UseCidV1
2728 dbp := h.DagBuilderParams {
@@ -30,19 +31,51 @@ func TestMakeProof(t *testing.T) {
3031 CidBuilder : opts .Prefix ,
3132 RawLeaves : opts .RawLeavesUsed ,
3233 }
33-
34- db , err := dbp .New (chunker .NewSizeSplitter (in , 256 ))
34+ chunkSize := int64 ( 256 )
35+ db , err := dbp .New (chunker .NewSizeSplitter (in , chunkSize ))
3536 require .NoError (t , err )
3637 node , err := balanced .Layout (db )
3738 require .NoError (t , err )
3839
39- offset := uint64 (50000 )
40- ctx , cls := context .WithCancel (context .Background ())
41- defer cls ()
42- proof , err := CreateProof (ctx , node .Cid (), offset , dserv )
43- require .NoError (t , err )
40+ tests := []struct {
41+ proofOffset uint64
42+ verifOffset uint64
43+ ok bool
44+ }{
45+ // Correct proofs.
46+ {proofOffset : 40 , verifOffset : 40 , ok : true },
47+ {proofOffset : 500 , verifOffset : 500 , ok : true },
48+ {proofOffset : 6000 , verifOffset : 6000 , ok : true },
49+ {proofOffset : 70000 , verifOffset : 70000 , ok : true },
4450
45- ok , err := ValidateProof (ctx , node .Cid (), offset , proof )
46- require .NoError (t , err )
47- require .True (t , ok )
51+ // Correct proof due to being in same block
52+ {proofOffset : 40 , verifOffset : 41 , ok : true },
53+ {proofOffset : 41 , verifOffset : 40 , ok : true },
54+
55+ // Indirectly correct proofs; this should work unless we change
56+ // the verification to not allow unvisited blocks; not clear if that's
57+ // entirely useful.
58+ {proofOffset : 868 , verifOffset : 1124 , ok : true },
59+
60+ // Definitely wrong proofs.
61+ {proofOffset : 40 , verifOffset : 50000 , ok : false },
62+ {proofOffset : 70000 , verifOffset : 10 , ok : false },
63+ }
64+
65+ for _ , test := range tests {
66+ test := test
67+ tname := fmt .Sprintf ("%d %d" , test .proofOffset , test .verifOffset )
68+
69+ t .Run (tname , func (t * testing.T ) {
70+ ctx , cls := context .WithCancel (context .Background ())
71+ defer cls ()
72+ proof , err := CreateProof (ctx , node .Cid (), test .proofOffset , dserv )
73+ require .NoError (t , err )
74+
75+ ok , err := ValidateProof (ctx , node .Cid (), test .verifOffset , proof )
76+ require .NoError (t , err )
77+
78+ require .Equal (t , test .ok , ok )
79+ })
80+ }
4881}
0 commit comments