@@ -855,6 +855,88 @@ suite "SyncManager test suite":
855
855
sq.inpSlot == finishSlot
856
856
sq.outSlot == finishSlot
857
857
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
+
858
940
asyncTest " [SyncQueue# & " & $ kind & " ] Combination of missing parent " &
859
941
" and good blocks [3 peers] test" :
860
942
let
0 commit comments