@@ -35,8 +35,11 @@ void shouldResendExistingWhoAreYouWhenInWhoAreYouSentState() {
3535 final NodeSession session = mock (NodeSession .class );
3636 when (session .getState ()).thenReturn (SessionState .WHOAREYOU_SENT );
3737
38- final Envelope envelope = envelopeWith (session , createOrdinaryPacket ());
39- handler .handle (envelope );
38+ final OrdinaryMessagePacket packet = createOrdinaryPacket ();
39+ final Bytes12 nonce = packet .getHeader ().getStaticHeader ().getNonce ();
40+ when (session .getPendingWhoAreYouNonce ()).thenReturn (Optional .of (nonce ));
41+
42+ handler .handle (envelopeWith (session , packet ));
4043
4144 verify (session ).resendOutgoingWhoAreYou ();
4245 verify (session , never ()).sendOutgoingWhoAreYou (any ());
@@ -48,11 +51,34 @@ void shouldNotChangeStateWhenResendingInWhoAreYouSentState() {
4851 final NodeSession session = mock (NodeSession .class );
4952 when (session .getState ()).thenReturn (SessionState .WHOAREYOU_SENT );
5053
51- handler .handle (envelopeWith (session , createOrdinaryPacket ()));
54+ final OrdinaryMessagePacket packet = createOrdinaryPacket ();
55+ final Bytes12 nonce = packet .getHeader ().getStaticHeader ().getNonce ();
56+ when (session .getPendingWhoAreYouNonce ()).thenReturn (Optional .of (nonce ));
57+
58+ handler .handle (envelopeWith (session , packet ));
5259
5360 verify (session , never ()).setState (any ());
5461 }
5562
63+ @ Test
64+ void shouldSendNewWhoAreYouWhenInWhoAreYouSentStateButDifferentNonce () {
65+ final NodeSession session = mock (NodeSession .class );
66+ when (session .getState ()).thenReturn (SessionState .WHOAREYOU_SENT );
67+ when (session .getNodeRecord ()).thenReturn (Optional .empty ());
68+ // Pending WhoAreYou was for a different nonce
69+ when (session .getPendingWhoAreYouNonce ())
70+ .thenReturn (Optional .of (Bytes12 .wrap (Bytes .random (12 ))));
71+
72+ final OrdinaryMessagePacket packet = createOrdinaryPacket ();
73+ handler .handle (envelopeWith (session , packet ));
74+
75+ verify (session , never ()).resendOutgoingWhoAreYou ();
76+ final ArgumentCaptor <WhoAreYouPacket > captor = ArgumentCaptor .forClass (WhoAreYouPacket .class );
77+ verify (session ).sendOutgoingWhoAreYou (captor .capture ());
78+ final Bytes12 expectedNonce = packet .getHeader ().getStaticHeader ().getNonce ();
79+ assertThat (captor .getValue ().getHeader ().getStaticHeader ().getNonce ()).isEqualTo (expectedNonce );
80+ }
81+
5682 @ Test
5783 void shouldSendNewWhoAreYouWithIncomingNonceWhenInInitialState () {
5884 final NodeSession session = mock (NodeSession .class );
0 commit comments