7  (net/luminis/quic/send/AbstractSenderTest()Vnet/luminis/quic/test/TestClock   $net/luminis/quic/send/SenderImplTestclock!Lnet/luminis/quic/test/TestClock;java/net/DatagramSocket  org/mockito/Mockitomock%(Ljava/lang/Class;)Ljava/lang/Object;  socketLjava/net/DatagramSocket;java/net/InetSocketAddress example.com ! "(Ljava/lang/String;I)V$#net/luminis/quic/QuicConnectionImpl #& '(getDestinationConnectionId()[B * +,when:(Ljava/lang/Object;)Lorg/mockito/stubbing/OngoingStubbing; ./0 1,$org/mockito/stubbing/OngoingStubbing thenReturn #3 4(getSourceConnectionId #6 78 getIdleTimer()Lnet/luminis/quic/IdleTimer;:net/luminis/quic/IdleTimer<net/luminis/quic/log/NullLogger ; 9? @E(Lnet/luminis/quic/QuicConnectionImpl;Lnet/luminis/quic/log/Logger;)VB)net/luminis/quic/crypto/ConnectionSecrets DEF GHnet/luminis/quic/TestUtils createKeys ()Lnet/luminis/quic/crypto/Aead;J net/luminis/quic/EncryptionLevel L Many AO PQ getOwnAeadB(Lnet/luminis/quic/EncryptionLevel;)Lnet/luminis/quic/crypto/Aead;S net/luminis/quic/send/SenderImplUnet/luminis/quic/VersionHolder WXY Z[net/luminis/quic/Version getDefault()Lnet/luminis/quic/Version; T] ^(Lnet/luminis/quic/Version;)V `ab cdjava/lang/IntegervalueOf(I)Ljava/lang/Integer; Rf g(Ljava/time/Clock;Lnet/luminis/quic/VersionHolder;ILjava/net/DatagramSocket;Ljava/net/InetSocketAddress;Lnet/luminis/quic/QuicConnectionImpl;Ljava/lang/Integer;Lnet/luminis/quic/log/Logger;)V i jksender"Lnet/luminis/quic/send/SenderImpl; mno pqjava/lang/ObjectgetClass()Ljava/lang/Class;sconnectionSecrets uvw xyjava/lang/ClassgetDeclaredField-(Ljava/lang/String;)Ljava/lang/reflect/Field; {|} ~!net/luminis/quic/test/FieldSettersetField@(Ljava/lang/Object;Ljava/lang/reflect/Field;Ljava/lang/Object;)V R enableAllLevels  net/luminis/quic/PnSpaceAppLnet/luminis/quic/PnSpace; R sendAck(Lnet/luminis/quic/PnSpace;I)V R packetProcessed(Z)V R determineMaximumWaitTime()J  org/assertj/core/api/Assertions assertThat,(J)Lorg/assertj/core/api/AbstractLongAssert;1  cjava/lang/Long(J)Ljava/lang/Long;3  'org/assertj/core/api/AbstractLongAssert isBetweenK(Ljava/lang/Long;Ljava/lang/Long;)Lorg/assertj/core/api/AbstractLongAssert;)net/luminis/quic/packet/ShortHeaderPacket"net/luminis/quic/frame/StreamFrame (I[BZ)V A(Lnet/luminis/quic/Version;[BLnet/luminis/quic/frame/QuicFrame;)V setPacketNumber(J)Vnet/luminis/quic/send/SendItem '(Lnet/luminis/quic/packet/QuicPacket;)V  java/util/Listof$(Ljava/lang/Object;)Ljava/util/List; R send(Ljava/util/List;)V  6(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List; R  getStatistics(()Lnet/luminis/quic/send/SendStatistics;  $net/luminis/quic/send/SendStatistics datagramsSent()I /(I)Lorg/assertj/core/api/AbstractIntegerAssert;  *org/assertj/core/api/AbstractIntegerAssert isEqualTo  packetsSent  bytesSent!net/luminis/quic/test/FieldReadersendRequestQueue .(Ljava/lang/Object;Ljava/lang/reflect/Field;)V read()Ljava/lang/Object;)[Lnet/luminis/quic/send/SendRequestQueue; Initialtest R discard/(Lnet/luminis/quic/PnSpace;Ljava/lang/String;)V I "Lnet/luminis/quic/EncryptionLevel; R    sendProbe%(Lnet/luminis/quic/EncryptionLevel;)V I ordinal  &net/luminis/quic/send/SendRequestQueuehasProbe()Z  /(Z)Lorg/assertj/core/api/AbstractBooleanAssert;  *org/assertj/core/api/AbstractBooleanAssertisFalse.()Lorg/assertj/core/api/AbstractBooleanAssert; I ! Handshake # $setupMockPacketAssember R& '(setAntiAmplificationLimit(I)V R* + sendIfAny -./ 01org/mockito/ArgumentCaptorforClass/(Ljava/lang/Class;)Lorg/mockito/ArgumentCaptor; 3 45packetAssembler-Lnet/luminis/quic/send/GlobalPacketAssembler; 7 89 atLeastOnce-()Lorg/mockito/verification/VerificationMode; ; <=verifyQ(Ljava/lang/Object;Lorg/mockito/verification/VerificationMode;)Ljava/lang/Object;?+net/luminis/quic/send/GlobalPacketAssembler A BanyInt -D Ecapture `G HintValueJ[B >L MNassemble(II[B[B)Ljava/util/List; -P QgetValue S TA(Ljava/lang/Integer;)Lorg/assertj/core/api/AbstractIntegerAssert; V WisLessThanOrEqualTo Y Z(IJ[BZ)V I\  R^ _G(Lnet/luminis/quic/frame/QuicFrame;Lnet/luminis/quic/EncryptionLevel;)V Ra bflush d eftimes.(I)Lorg/mockito/verification/VerificationMode;hjava/net/DatagramPacket j k(Ljava/net/DatagramPacket;)Vmnet/luminis/quic/MockPacketo lq r(IILjava/lang/String;)V >t uvnextDelayedSendTime()Ljava/util/Optional; xyz {vjava/util/Optionalempty4 R~ doLoopIteration  9never net/luminis/quic/frame/PingFrame   <&(Ljava/lang/Object;)Ljava/lang/Object;"net/luminis/quic/frame/CryptoFrame  (Lnet/luminis/quic/Version;[B)V R  5(Ljava/util/List;Lnet/luminis/quic/EncryptionLevel;)VCodeLineNumberTableLocalVariableTablethis&Lnet/luminis/quic/send/SenderImplTest;initObjectUnderTest peerAddressLjava/net/InetSocketAddress; connection%Lnet/luminis/quic/QuicConnectionImpl;+Lnet/luminis/quic/crypto/ConnectionSecrets;aeadLnet/luminis/quic/crypto/Aead; Exceptionsjava/lang/ExceptionRuntimeVisibleAnnotations"Lorg/junit/jupiter/api/BeforeEach;1whenAckWithDelayIsQueuedSenderIsWakedUpAfterDelaydelayJLorg/junit/jupiter/api/Test;senderStatisticsShouldWorkpacket1+Lnet/luminis/quic/packet/ShortHeaderPacket;packet2%addingProbeToDiscardedSpaceDiscardsIt senderQueues@whenAntiAmplificationLimitNotReachedAssemblerIsCalledWithNoLimitpacketSizeCaptorLorg/mockito/ArgumentCaptor;LocalVariableTypeTable1Lorg/mockito/ArgumentCaptor;7whenAntiAmplificationLimitIsReachedNothingIsSentAnymoreiI StackMapTablejava/lang/NoSuchFieldException;whenNothingIsQueuedNothingIsSentWhenPacketProcessedIsCalledLorg/junit/jupiter/api/Timeout;valueunitLjava/util/concurrent/TimeUnit; MILLISECONDS.whenPacketProcessedIsCalledQueuedFramesAreSent0probeIsSentImmediatelyEvenWhenSenderIsNotFlushed8probeWithDataIsSentImmediatelyEvenWhenSenderIsNotFlushed SourceFileSenderImplTest.java jk45 /*/ S *Y *Y L##M,%)-W,2)-W,5)9Y,;Y=>-WAANC:-IKIN)-W*RY* TYV\*+,d_;Y=eh*h*hlrt-z6 8 9:$;-<==M>i@rAwBDEF4$-r_swZ8*h*h2*h*h@WKNOR#S7T8#" YVYLLYVY M+*hY++ɶ,˶*hY+Y,Ͷ*hжԸW*hжW*hжW. XY7Z>[P\W]^^x`abc 7ZY*h*hltL*h*h + 2W+ 2Whj+m5pGqYrZ<]*"*h%*h)`,L*26:>@+C`FIKIIKIKW+O`RUWwx{~K\]B Bf*h*h%< '*hYLhLX[]*h`*h)*c:gKgi& 7=DKe*f )$y*>>2*2@@IKIIKIK)YlYnp-W*2s)w-W*h*hl|t*2z M`x y_)*h*h}*:gKgi( )Jeq7*hY]*h*h}*gKgi 6 7Jei/*h*h[ *h}*gKgi. /Je{A*h*hYVp[*h}*gKgi#*@ AJe