1- package car
1+ package car_test
22
33import (
44 "bytes"
@@ -12,10 +12,7 @@ import (
1212 format "github.com/ipfs/go-ipld-format"
1313 "github.com/ipfs/go-merkledag"
1414 dstest "github.com/ipfs/go-merkledag/test"
15- basicnode "github.com/ipld/go-ipld-prime/node/basic"
16- "github.com/ipld/go-ipld-prime/traversal/selector"
17- "github.com/ipld/go-ipld-prime/traversal/selector/builder"
18- "github.com/stretchr/testify/require"
15+ car "github.com/ipld/go-car"
1916)
2017
2118func assertAddNodes (t * testing.T , ds format.DAGService , nds ... format.Node ) {
@@ -46,12 +43,12 @@ func TestRoundtrip(t *testing.T) {
4643 assertAddNodes (t , dserv , a , b , c , nd1 , nd2 , nd3 )
4744
4845 buf := new (bytes.Buffer )
49- if err := WriteCar (context .Background (), dserv , []cid.Cid {nd3 .Cid ()}, buf ); err != nil {
46+ if err := car . WriteCar (context .Background (), dserv , []cid.Cid {nd3 .Cid ()}, buf ); err != nil {
5047 t .Fatal (err )
5148 }
5249
5350 bserv := dstest .Bserv ()
54- ch , err := LoadCar (bserv .Blockstore (), buf )
51+ ch , err := car . LoadCar (bserv .Blockstore (), buf )
5552 if err != nil {
5653 t .Fatal (err )
5754 }
@@ -77,111 +74,15 @@ func TestRoundtrip(t *testing.T) {
7774 }
7875}
7976
80- func TestRoundtripSelective (t * testing.T ) {
81- sourceBserv := dstest .Bserv ()
82- sourceBs := sourceBserv .Blockstore ()
83- dserv := merkledag .NewDAGService (sourceBserv )
84- a := merkledag .NewRawNode ([]byte ("aaaa" ))
85- b := merkledag .NewRawNode ([]byte ("bbbb" ))
86- c := merkledag .NewRawNode ([]byte ("cccc" ))
87-
88- nd1 := & merkledag.ProtoNode {}
89- nd1 .AddNodeLink ("cat" , a )
90-
91- nd2 := & merkledag.ProtoNode {}
92- nd2 .AddNodeLink ("first" , nd1 )
93- nd2 .AddNodeLink ("dog" , b )
94- nd2 .AddNodeLink ("repeat" , nd1 )
95-
96- nd3 := & merkledag.ProtoNode {}
97- nd3 .AddNodeLink ("second" , nd2 )
98- nd3 .AddNodeLink ("bear" , c )
99-
100- assertAddNodes (t , dserv , a , b , c , nd1 , nd2 , nd3 )
101-
102- ssb := builder .NewSelectorSpecBuilder (basicnode .Prototype .Any )
103-
104- // the graph assembled above looks as follows, in order:
105- // nd3 -> [c, nd2 -> [nd1 -> a, b, nd1 -> a]]
106- // this selector starts at n3, and traverses a link at index 1 (nd2, the second link, zero indexed)
107- // it then recursively traverses all of its children
108- // the only node skipped is 'c' -- link at index 0 immediately below nd3
109- // the purpose is simply to show we are not writing the entire merkledag underneath
110- // nd3
111- selector := ssb .ExploreFields (func (efsb builder.ExploreFieldsSpecBuilder ) {
112- efsb .Insert ("Links" ,
113- ssb .ExploreIndex (1 , ssb .ExploreRecursive (selector .RecursionLimitNone (), ssb .ExploreAll (ssb .ExploreRecursiveEdge ()))))
114- }).Node ()
115-
116- sc := NewSelectiveCar (context .Background (), sourceBs , []Dag {{Root : nd3 .Cid (), Selector : selector }})
117-
118- // write car in one step
119- buf := new (bytes.Buffer )
120- blockCount := 0
121- var oneStepBlocks []Block
122- err := sc .Write (buf , func (block Block ) error {
123- oneStepBlocks = append (oneStepBlocks , block )
124- blockCount ++
125- return nil
126- })
127- require .Equal (t , blockCount , 5 )
128- require .NoError (t , err )
129-
130- // create a new builder for two-step write
131- sc2 := NewSelectiveCar (context .Background (), sourceBs , []Dag {{Root : nd3 .Cid (), Selector : selector }})
132-
133- // write car in two steps
134- var twoStepBlocks []Block
135- scp , err := sc2 .Prepare (func (block Block ) error {
136- twoStepBlocks = append (twoStepBlocks , block )
137- return nil
138- })
139- require .NoError (t , err )
140- buf2 := new (bytes.Buffer )
141- err = scp .Dump (buf2 )
142- require .NoError (t , err )
143-
144- // verify preparation step correctly assesed length and blocks
145- require .Equal (t , scp .Size (), uint64 (buf .Len ()))
146- require .Equal (t , len (scp .Cids ()), blockCount )
147-
148- // verify equal data written by both methods
149- require .Equal (t , buf .Bytes (), buf2 .Bytes ())
150-
151- // verify equal blocks were passed to user block hook funcs
152- require .Equal (t , oneStepBlocks , twoStepBlocks )
153-
154- // readout car and verify contents
155- bserv := dstest .Bserv ()
156- ch , err := LoadCar (bserv .Blockstore (), buf )
157- require .NoError (t , err )
158- require .Equal (t , len (ch .Roots ), 1 )
159-
160- require .True (t , ch .Roots [0 ].Equals (nd3 .Cid ()))
161-
162- bs := bserv .Blockstore ()
163- for _ , nd := range []format.Node {a , b , nd1 , nd2 , nd3 } {
164- has , err := bs .Has (nd .Cid ())
165- require .NoError (t , err )
166- require .True (t , has )
167- }
168-
169- for _ , nd := range []format.Node {c } {
170- has , err := bs .Has (nd .Cid ())
171- require .NoError (t , err )
172- require .False (t , has )
173- }
174- }
175-
17677func TestEOFHandling (t * testing.T ) {
17778 // fixture is a clean single-block, single-root CAR
17879 fixture , err := hex .DecodeString ("3aa265726f6f747381d82a58250001711220151fe9e73c6267a7060c6f6c4cca943c236f4b196723489608edb42a8b8fa80b6776657273696f6e012c01711220151fe9e73c6267a7060c6f6c4cca943c236f4b196723489608edb42a8b8fa80ba165646f646779f5" )
17980 if err != nil {
18081 t .Fatal (err )
18182 }
18283
183- load := func (t * testing.T , byts []byte ) * CarReader {
184- cr , err := NewCarReader (bytes .NewReader (byts ))
84+ load := func (t * testing.T , byts []byte ) * car. CarReader {
85+ cr , err := car . NewCarReader (bytes .NewReader (byts ))
18586 if err != nil {
18687 t .Fatal (err )
18788 }
@@ -294,7 +195,7 @@ func TestBadHeaders(t *testing.T) {
294195 if err != nil {
295196 t .Fatal (err )
296197 }
297- _ , err = NewCarReader (bytes .NewReader (fixture ))
198+ _ , err = car . NewCarReader (bytes .NewReader (fixture ))
298199 return err
299200 }
300201
0 commit comments