@@ -50,61 +50,73 @@ func TestStreamCar(t *testing.T) {
5050 }
5151
5252 testCases := []struct {
53- name string
54- selector datamodel.Node
55- root cid.Cid
56- lsys linking.LinkSystem
57- validate func (t * testing.T , r io.Reader )
53+ name string
54+ selector datamodel.Node
55+ root cid.Cid
56+ lsys linking.LinkSystem
57+ expectedBytes int64
58+ expectedBlocks int64
59+ validate func (t * testing.T , r io.Reader )
5860 }{
5961 {
60- name : "chain: all blocks" ,
61- selector : selectorparse .CommonSelector_ExploreAllRecursively ,
62- root : tbc .TipLink .(cidlink.Link ).Cid ,
63- lsys : chainLsys ,
62+ name : "chain: all blocks" ,
63+ selector : selectorparse .CommonSelector_ExploreAllRecursively ,
64+ root : tbc .TipLink .(cidlink.Link ).Cid ,
65+ lsys : chainLsys ,
66+ expectedBytes : sizeOf (allChainBlocks ),
67+ expectedBlocks : 100 ,
6468 validate : func (t * testing.T , r io.Reader ) {
6569 root , blks := carToBlocks (t , r )
6670 require .Equal (t , tbc .TipLink .(cidlink.Link ).Cid , root )
6771 require .Equal (t , allChainBlocks , blks )
6872 },
6973 },
7074 {
71- name : "chain: just root" ,
72- selector : selectorparse .CommonSelector_MatchPoint ,
73- root : tbc .TipLink .(cidlink.Link ).Cid ,
74- lsys : chainLsys ,
75+ name : "chain: just root" ,
76+ selector : selectorparse .CommonSelector_MatchPoint ,
77+ root : tbc .TipLink .(cidlink.Link ).Cid ,
78+ lsys : chainLsys ,
79+ expectedBytes : sizeOf (allChainBlocks [:1 ]),
80+ expectedBlocks : 1 ,
7581 validate : func (t * testing.T , r io.Reader ) {
7682 root , blks := carToBlocks (t , r )
7783 require .Equal (t , tbc .TipLink .(cidlink.Link ).Cid , root )
7884 require .Equal (t , []blocks.Block {allChainBlocks [0 ]}, blks )
7985 },
8086 },
8187 {
82- name : "unixfs file" ,
83- selector : selectorparse .CommonSelector_ExploreAllRecursively ,
84- root : fileEnt .Root ,
85- lsys : fileLsys ,
88+ name : "unixfs file" ,
89+ selector : selectorparse .CommonSelector_ExploreAllRecursively ,
90+ root : fileEnt .Root ,
91+ lsys : fileLsys ,
92+ expectedBytes : sizeOfDirEnt (fileEnt , fileLsys ),
93+ expectedBlocks : int64 (len (fileEnt .SelfCids )),
8694 validate : func (t * testing.T , r io.Reader ) {
8795 root , blks := carToBlocks (t , r )
8896 require .Equal (t , fileEnt .Root , root )
8997 require .ElementsMatch (t , fileEnt .SelfCids , blkCids (blks ))
9098 },
9199 },
92100 {
93- name : "unixfs directory" ,
94- selector : selectorparse .CommonSelector_ExploreAllRecursively ,
95- root : dirEnt .Root ,
96- lsys : dirLsys ,
101+ name : "unixfs directory" ,
102+ selector : selectorparse .CommonSelector_ExploreAllRecursively ,
103+ root : dirEnt .Root ,
104+ lsys : dirLsys ,
105+ expectedBytes : sizeOfDirEnt (dirEnt , dirLsys ),
106+ expectedBlocks : blocksInDirEnt (dirEnt ),
97107 validate : func (t * testing.T , r io.Reader ) {
98108 root , blks := carToBlocks (t , r )
99109 require .Equal (t , dirEnt .Root , root )
100110 require .ElementsMatch (t , entCids (dirEnt ), blkCids (blks ))
101111 },
102112 },
103113 {
104- name : "unixfs sharded directory" ,
105- selector : selectorparse .CommonSelector_ExploreAllRecursively ,
106- root : shardedDirEnt .Root ,
107- lsys : shardedDirLsys ,
114+ name : "unixfs sharded directory" ,
115+ selector : selectorparse .CommonSelector_ExploreAllRecursively ,
116+ root : shardedDirEnt .Root ,
117+ lsys : shardedDirLsys ,
118+ expectedBytes : sizeOfDirEnt (shardedDirEnt , shardedDirLsys ),
119+ expectedBlocks : blocksInDirEnt (shardedDirEnt ),
108120 validate : func (t * testing.T , r io.Reader ) {
109121 root , blks := carToBlocks (t , r )
110122 require .Equal (t , shardedDirEnt .Root , root )
@@ -118,8 +130,10 @@ func TestStreamCar(t *testing.T) {
118130 t .Run (tc .name , func (t * testing.T ) {
119131 req := require .New (t )
120132 var buf bytes.Buffer
121- err := frisbii .StreamCar (ctx , tc .lsys , tc .root , tc .selector , & buf , false )
133+ byts , blks , err := frisbii .StreamCar (ctx , tc .lsys , tc .root , tc .selector , & buf , false )
122134 req .NoError (err )
135+ req .Equal (tc .expectedBytes , byts )
136+ req .Equal (tc .expectedBlocks , blks )
123137 tc .validate (t , & buf )
124138 })
125139 }
@@ -200,3 +214,33 @@ func GenerateNoDupes(gen func() unixfs.DirEntry) unixfs.DirEntry {
200214 }
201215 }
202216}
217+
218+ func sizeOf (blks []blocks.Block ) int64 {
219+ var size int64
220+ for _ , blk := range blks {
221+ size += int64 (len (blk .RawData ()))
222+ }
223+ return size
224+ }
225+ func sizeOfDirEnt (dirEnt unixfs.DirEntry , ls linking.LinkSystem ) int64 {
226+ var size int64
227+ for _ , c := range dirEnt .SelfCids {
228+ blk , err := ls .LoadRaw (linking.LinkContext {}, cidlink.Link {Cid : c })
229+ if err != nil {
230+ panic (err )
231+ }
232+ size += int64 (len (blk ))
233+ }
234+ for _ , c := range dirEnt .Children {
235+ size += sizeOfDirEnt (c , ls )
236+ }
237+ return size
238+ }
239+
240+ func blocksInDirEnt (dirEnt unixfs.DirEntry ) int64 {
241+ size := int64 (len (dirEnt .SelfCids ))
242+ for _ , c := range dirEnt .Children {
243+ size += blocksInDirEnt (c )
244+ }
245+ return size
246+ }
0 commit comments