@@ -259,6 +259,84 @@ func TestResponseAssemblerIgnoreBlocks(t *testing.T) {
259
259
260
260
}
261
261
262
+ func TestResponseAssemblerSkipFirstBlocks (t * testing.T ) {
263
+ ctx := context .Background ()
264
+ ctx , cancel := context .WithTimeout (ctx , 10 * time .Second )
265
+ defer cancel ()
266
+ p := testutil .GeneratePeers (1 )[0 ]
267
+ requestID1 := graphsync .RequestID (rand .Int31 ())
268
+ requestID2 := graphsync .RequestID (rand .Int31 ())
269
+ blks := testutil .GenerateBlocksOfSize (5 , 100 )
270
+ links := make ([]ipld.Link , 0 , len (blks ))
271
+ for _ , block := range blks {
272
+ links = append (links , cidlink.Link {Cid : block .Cid ()})
273
+ }
274
+ fph := newFakePeerHandler (ctx , t )
275
+ responseAssembler := New (ctx , fph )
276
+
277
+ responseAssembler .SkipFirstBlocks (p , requestID1 , 3 )
278
+
279
+ var bd1 , bd2 , bd3 , bd4 , bd5 graphsync.BlockData
280
+ err := responseAssembler .Transaction (p , requestID1 , func (b ResponseBuilder ) error {
281
+ bd1 = b .SendResponse (links [0 ], blks [0 ].RawData ())
282
+ return nil
283
+ })
284
+ require .NoError (t , err )
285
+
286
+ assertSentNotOnWire (t , bd1 , blks [0 ])
287
+ fph .RefuteBlocks ()
288
+ fph .AssertResponses (expectedResponses {requestID1 : graphsync .PartialResponse })
289
+
290
+ err = responseAssembler .Transaction (p , requestID2 , func (b ResponseBuilder ) error {
291
+ bd1 = b .SendResponse (links [0 ], blks [0 ].RawData ())
292
+ return nil
293
+ })
294
+ require .NoError (t , err )
295
+ fph .AssertResponses (expectedResponses {
296
+ requestID2 : graphsync .PartialResponse ,
297
+ })
298
+
299
+ err = responseAssembler .Transaction (p , requestID1 , func (b ResponseBuilder ) error {
300
+ bd2 = b .SendResponse (links [1 ], blks [1 ].RawData ())
301
+ bd3 = b .SendResponse (links [2 ], blks [2 ].RawData ())
302
+ return nil
303
+ })
304
+ require .NoError (t , err )
305
+
306
+ assertSentNotOnWire (t , bd1 , blks [0 ])
307
+ assertSentNotOnWire (t , bd2 , blks [1 ])
308
+ assertSentNotOnWire (t , bd3 , blks [2 ])
309
+
310
+ fph .RefuteBlocks ()
311
+ fph .AssertResponses (expectedResponses {
312
+ requestID1 : graphsync .PartialResponse ,
313
+ })
314
+ err = responseAssembler .Transaction (p , requestID1 , func (b ResponseBuilder ) error {
315
+ bd4 = b .SendResponse (links [3 ], blks [3 ].RawData ())
316
+ bd5 = b .SendResponse (links [4 ], blks [4 ].RawData ())
317
+ b .FinishRequest ()
318
+ return nil
319
+ })
320
+ require .NoError (t , err )
321
+
322
+ assertSentOnWire (t , bd4 , blks [3 ])
323
+ assertSentOnWire (t , bd5 , blks [4 ])
324
+
325
+ fph .AssertBlocks (blks [3 ], blks [4 ])
326
+ fph .AssertResponses (expectedResponses {requestID1 : graphsync .RequestCompletedFull })
327
+
328
+ err = responseAssembler .Transaction (p , requestID2 , func (b ResponseBuilder ) error {
329
+ b .SendResponse (links [3 ], blks [3 ].RawData ())
330
+ b .FinishRequest ()
331
+ return nil
332
+ })
333
+ require .NoError (t , err )
334
+
335
+ fph .AssertBlocks (blks [3 ])
336
+ fph .AssertResponses (expectedResponses {requestID2 : graphsync .RequestCompletedFull })
337
+
338
+ }
339
+
262
340
func TestResponseAssemblerDupKeys (t * testing.T ) {
263
341
ctx := context .Background ()
264
342
ctx , cancel := context .WithTimeout (ctx , 10 * time .Second )
0 commit comments