@@ -855,6 +855,88 @@ suite "SyncManager test suite":
855855 sq.inpSlot == finishSlot
856856 sq.outSlot == finishSlot
857857
858+ asyncTest " [SyncQueue# & " & $ kind & " ] Empty responses should not " &
859+ " be accounted [3 peers] test" :
860+ var emptyResponse: seq [ref ForkedSignedBeaconBlock ]
861+ let
862+ scenario =
863+ case kind
864+ of SyncQueueKind .Forward :
865+ [
866+ (Slot (0 ) .. Slot (31 ), Opt .none (VerifierError )),
867+ (Slot (32 ) .. Slot (63 ), Opt .none (VerifierError )),
868+ (Slot (64 ) .. Slot (95 ), Opt .none (VerifierError )),
869+ (Slot (96 ) .. Slot (127 ), Opt .none (VerifierError )),
870+ (Slot (128 ) .. Slot (159 ), Opt .none (VerifierError ))
871+ ]
872+ of SyncQueueKind .Backward :
873+ [
874+ (Slot (128 ) .. Slot (159 ), Opt .none (VerifierError )),
875+ (Slot (96 ) .. Slot (127 ), Opt .none (VerifierError )),
876+ (Slot (64 ) .. Slot (95 ), Opt .none (VerifierError )),
877+ (Slot (32 ) .. Slot (63 ), Opt .none (VerifierError )),
878+ (Slot (0 ) .. Slot (31 ), Opt .none (VerifierError ))
879+ ]
880+ verifier = setupVerifier (kind, scenario)
881+ sq =
882+ case kind
883+ of SyncQueueKind .Forward :
884+ SyncQueue .init (SomeTPeer , kind, Slot (0 ), Slot (159 ),
885+ 32 'u64 , # 32 slots per request
886+ 3 , # 3 concurrent requests
887+ 2 , # 2 failures allowed
888+ getStaticSlotCb (Slot (0 )),
889+ verifier.collector)
890+ of SyncQueueKind .Backward :
891+ SyncQueue .init (SomeTPeer , kind, Slot (159 ), Slot (0 ),
892+ 32 'u64 , # 32 slots per request
893+ 3 , # 3 concurrent requests
894+ 2 , # 2 failures allowed
895+ getStaticSlotCb (Slot (159 )),
896+ verifier.collector)
897+ slots =
898+ case kind
899+ of SyncQueueKind .Forward :
900+ @ [Slot (0 ), Slot (32 ), Slot (64 ), Slot (96 ), Slot (128 )]
901+ of SyncQueueKind .Backward :
902+ @ [Slot (128 ), Slot (96 ), Slot (64 ), Slot (32 ), Slot (0 )]
903+ peer1 = SomeTPeer .init (" 1" )
904+ peer2 = SomeTPeer .init (" 2" )
905+ peer3 = SomeTPeer .init (" 3" )
906+
907+ let
908+ r11 = sq.pop (Slot (159 ), peer1)
909+ r21 = sq.pop (Slot (159 ), peer2)
910+ await sq.push (r11, emptyResponse, Opt .none (seq [BlobSidecars ]))
911+ let
912+ r12 = sq.pop (Slot (159 ), peer1)
913+ r13 = sq.pop (Slot (159 ), peer1)
914+ # This should not raise an assertion, as the previously sent empty
915+ # response should not be taken into account.
916+ r14 = sq.pop (Slot (159 ), peer1)
917+
918+ expect AssertionError :
919+ let r1e {.used .} = sq.pop (Slot (159 ), peer1)
920+
921+ check:
922+ r11.data.slot == slots[0 ]
923+ r12.data.slot == slots[1 ]
924+ r13.data.slot == slots[2 ]
925+ r14.data.slot == slots[3 ]
926+
927+ # Scenario requires some finish steps
928+ await sq.push (r21, createChain (r21.data), Opt .none (seq [BlobSidecars ]))
929+ let r22 = sq.pop (Slot (159 ), peer2)
930+ await sq.push (r22, createChain (r22.data), Opt .none (seq [BlobSidecars ]))
931+ let r23 = sq.pop (Slot (159 ), peer2)
932+ await sq.push (r23, createChain (r23.data), Opt .none (seq [BlobSidecars ]))
933+ let r24 = sq.pop (Slot (159 ), peer2)
934+ await sq.push (r24, createChain (r24.data), Opt .none (seq [BlobSidecars ]))
935+ let r35 = sq.pop (Slot (159 ), peer3)
936+ await sq.push (r35, createChain (r35.data), Opt .none (seq [BlobSidecars ]))
937+
938+ await noCancel wait (verifier.verifier, 2 .seconds)
939+
858940 asyncTest " [SyncQueue# & " & $ kind & " ] Combination of missing parent " &
859941 " and good blocks [3 peers] test" :
860942 let
0 commit comments