@@ -263,10 +263,10 @@ describe('block listener', () => {
263
263
264
264
await startListener . completePromise ;
265
265
sinon . assert . calledWith ( stub , eventService ) ;
266
- sinon . assert . neverCalledWith ( stub , sinon . match . any , sinon . match . has ( 'startBlock' , sinon . match . number ) ) ;
266
+ sinon . assert . neverCalledWith ( stub , sinon . match . any , sinon . match . has ( 'startBlock' , sinon . match . defined ) ) ;
267
267
} ) ;
268
268
269
- it ( 'errors trigger reconnect of event service with next block as start block if events received' , async ( ) => {
269
+ it ( 'errors trigger reconnect of event service with last received block as start block if events received' , async ( ) => {
270
270
await network . addBlockListener ( listener , listenerOptions ) ;
271
271
const startListener = testUtils . newAsyncListener < void > ( ) ;
272
272
const stub = sinon . stub ( eventServiceManager , 'startEventService' ) . callsFake ( ( ) => startListener ( ) ) ;
@@ -275,7 +275,28 @@ describe('block listener', () => {
275
275
eventService . sendError ( new Error ( 'DISCONNECT' ) ) ;
276
276
277
277
await startListener . completePromise ;
278
- sinon . assert . calledWith ( stub , eventService , sinon . match . has ( 'startBlock' , Long . fromNumber ( 2 ) ) ) ;
278
+ sinon . assert . calledWith ( stub , eventService , sinon . match . has ( 'startBlock' , Long . ONE ) ) ;
279
+ } ) ;
280
+
281
+ it ( 'listener does not receive old blocks on reconnect' , async ( ) => {
282
+ listener = testUtils . newAsyncListener < BlockEvent > ( 2 ) ;
283
+ const event1 = newFilteredBlockEventInfo ( 1 ) ;
284
+ const event2 = newFilteredBlockEventInfo ( 2 ) ;
285
+ const startListener = testUtils . newAsyncListener < void > ( 2 ) ;
286
+ const stub = sinon . stub ( eventServiceManager , 'startEventService' ) . callsFake ( ( ) => startListener ( ) ) ;
287
+
288
+ await network . addBlockListener ( listener , listenerOptions ) ;
289
+ eventService . sendEvent ( event1 ) ;
290
+ eventService . sendError ( new Error ( 'DISCONNECT' ) ) ;
291
+
292
+ await startListener . completePromise ;
293
+
294
+ eventService . sendEvent ( event1 ) ;
295
+ eventService . sendEvent ( event2 ) ;
296
+
297
+ const actual = await listener . completePromise ;
298
+ const blockNumbers = actual . map ( ( e ) => e . blockNumber ) ;
299
+ expect ( blockNumbers ) . to . deep . equal ( [ event1 . blockNumber , event2 . blockNumber ] ) ;
279
300
} ) ;
280
301
281
302
it ( 'listener changing event data does not affect other listeners' , async ( ) => {
@@ -325,13 +346,22 @@ describe('block listener', () => {
325
346
} ) ;
326
347
327
348
describe ( 'replay' , ( ) => {
328
- it ( 'replay listener sends start block to event service' , async ( ) => {
349
+ it ( 'replay listener sends (startBlock - 1) to event service' , async ( ) => {
329
350
const stub = sinon . stub ( eventServiceManager , 'startEventService' ) ;
330
351
331
- listenerOptions . startBlock = 2 ;
352
+ listenerOptions . startBlock = 1 ;
353
+ await network . addBlockListener ( listener , listenerOptions ) ;
354
+
355
+ sinon . assert . calledWith ( stub , eventService , sinon . match . has ( 'startBlock' , Long . ZERO ) ) ;
356
+ } ) ;
357
+
358
+ it ( 'replay listener does not send start block less than zero to event service' , async ( ) => {
359
+ const stub = sinon . stub ( eventServiceManager , 'startEventService' ) ;
360
+
361
+ listenerOptions . startBlock = 0 ;
332
362
await network . addBlockListener ( listener , listenerOptions ) ;
333
363
334
- sinon . assert . calledWith ( stub , eventService , sinon . match . has ( 'startBlock' , Long . fromNumber ( 2 ) ) ) ;
364
+ sinon . assert . calledWith ( stub , eventService , sinon . match . has ( 'startBlock' , Long . ZERO ) ) ;
335
365
} ) ;
336
366
337
367
it ( 'replay listener does not receive events earlier than start block' , async ( ) => {
@@ -449,27 +479,27 @@ describe('block listener', () => {
449
479
expect ( actual . blockNumber ) . to . equal ( event . blockNumber ) ;
450
480
} ) ;
451
481
452
- it ( 'checkpoint listener sends block number to event service' , async ( ) => {
482
+ it ( 'checkpoint listener sends ( block number - 1) to event service' , async ( ) => {
453
483
const stub = sinon . stub ( eventServiceManager , 'startEventService' ) ;
454
484
const checkpointer = new StubCheckpointer ( ) ;
455
485
await checkpointer . setBlockNumber ( Long . fromNumber ( 2 ) ) ;
456
486
457
487
listenerOptions . checkpointer = checkpointer ;
458
488
await network . addBlockListener ( listener , listenerOptions ) ;
459
489
460
- sinon . assert . calledWith ( stub , eventService , sinon . match . has ( 'startBlock' , Long . fromNumber ( 2 ) ) ) ;
490
+ sinon . assert . calledWith ( stub , eventService , sinon . match . has ( 'startBlock' , Long . ONE ) ) ;
461
491
} ) ;
462
492
463
493
it ( 'checkpoint block number takes precedence over startBlock option' , async ( ) => {
464
494
const stub = sinon . stub ( eventServiceManager , 'startEventService' ) ;
465
495
const checkpointer = new StubCheckpointer ( ) ;
466
- await checkpointer . setBlockNumber ( Long . fromNumber ( 2 ) ) ;
496
+ await checkpointer . setBlockNumber ( Long . ONE ) ;
467
497
468
498
listenerOptions . checkpointer = checkpointer ;
469
- listenerOptions . startBlock = 1 ;
499
+ listenerOptions . startBlock = 10 ;
470
500
await network . addBlockListener ( listener , listenerOptions ) ;
471
501
472
- sinon . assert . calledWith ( stub , eventService , sinon . match . has ( 'startBlock' , Long . fromNumber ( 2 ) ) ) ;
502
+ sinon . assert . calledWith ( stub , eventService , sinon . match . has ( 'startBlock' , Long . ZERO ) ) ;
473
503
} ) ;
474
504
475
505
it ( 'checkpoint listener receives events from checkpoint block number' , async ( ) => {
0 commit comments