diff options
Diffstat (limited to 'chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id_manager_test.cc')
-rw-r--r-- | chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id_manager_test.cc | 107 |
1 files changed, 85 insertions, 22 deletions
diff --git a/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id_manager_test.cc b/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id_manager_test.cc index 1c2657dc581..dbd239f026d 100644 --- a/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id_manager_test.cc +++ b/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id_manager_test.cc @@ -64,8 +64,10 @@ class TestPeerIssuedConnectionIdManagerVisitor bool SendNewConnectionId(const QuicNewConnectionIdFrame& /*frame*/) override { return false; } - void OnNewConnectionIdIssued( - const QuicConnectionId& /*connection_id*/) override {} + bool MaybeReserveConnectionId(const QuicConnectionId&) override { + return false; + } + void OnSelfIssuedConnectionIdRetired( const QuicConnectionId& /*connection_id*/) override {} @@ -522,7 +524,7 @@ class TestSelfIssuedConnectionIdManagerVisitor MOCK_METHOD(bool, SendNewConnectionId, (const QuicNewConnectionIdFrame& frame), (override)); - MOCK_METHOD(void, OnNewConnectionIdIssued, + MOCK_METHOD(bool, MaybeReserveConnectionId, (const QuicConnectionId& connection_id), (override)); MOCK_METHOD(void, OnSelfIssuedConnectionIdRetired, (const QuicConnectionId& connection_id), (override)); @@ -568,7 +570,8 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, QuicConnectionId cid5 = cid_manager_.GenerateNewConnectionId(cid4); // Sends CID #1 to peer. - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(cid1)); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(cid1)) + .WillOnce(Return(true)); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(ExpectedNewConnectionIdFrame(cid1, 1u, 0u))) .WillOnce(Return(true)); @@ -578,7 +581,8 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, // Peer retires CID #0; // Sends CID #2 and asks peer to retire CIDs prior to #1. // Outcome: (#1, #2) are active. - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(cid2)); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(cid2)) + .WillOnce(Return(true)); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(ExpectedNewConnectionIdFrame(cid2, 2u, 1u))) .WillOnce(Return(true)); @@ -593,7 +597,8 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, // Peer retires CID #1; // Sends CID #3 and asks peer to retire CIDs prior to #2. // Outcome: (#2, #3) are active. - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(cid3)); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(cid3)) + .WillOnce(Return(true)); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(ExpectedNewConnectionIdFrame(cid3, 3u, 2u))) .WillOnce(Return(true)); @@ -608,7 +613,8 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, // Peer retires CID #2; // Sends CID #4 and asks peer to retire CIDs prior to #3. // Outcome: (#3, #4) are active. - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(cid4)); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(cid4)) + .WillOnce(Return(true)); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(ExpectedNewConnectionIdFrame(cid4, 4u, 3u))) .WillOnce(Return(true)); @@ -623,7 +629,8 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, // Peer retires CID #3; // Sends CID #5 and asks peer to retire CIDs prior to #4. // Outcome: (#4, #5) are active. - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(cid5)); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(cid5)) + .WillOnce(Return(true)); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(ExpectedNewConnectionIdFrame(cid5, 5u, 4u))) .WillOnce(Return(true)); @@ -644,7 +651,8 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, QuicConnectionId cid4 = cid_manager_.GenerateNewConnectionId(cid3); // Sends CID #1 to peer. - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(cid1)); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(cid1)) + .WillOnce(Return(true)); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(ExpectedNewConnectionIdFrame(cid1, 1u, 0u))) .WillOnce(Return(true)); @@ -654,7 +662,8 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, // Peer retires CID #1; // Sends CID #2 and asks peer to retire CIDs prior to #0. // Outcome: (#0, #2) are active. - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(cid2)); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(cid2)) + .WillOnce(Return(true)); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(ExpectedNewConnectionIdFrame(cid2, 2u, 0u))) .WillOnce(Return(true)); @@ -678,7 +687,8 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, // Peer retires CID #0; // Sends CID #3 and asks peer to retire CIDs prior to #2. // Outcome: (#2, #3) are active. - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(cid3)); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(cid3)) + .WillOnce(Return(true)); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(ExpectedNewConnectionIdFrame(cid3, 3u, 2u))) .WillOnce(Return(true)); @@ -693,7 +703,8 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, // Peer retires CID #3; // Sends CID #4 and asks peer to retire CIDs prior to #2. // Outcome: (#2, #4) are active. - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(cid4)); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(cid4)) + .WillOnce(Return(true)); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(ExpectedNewConnectionIdFrame(cid4, 4u, 2u))) .WillOnce(Return(true)); @@ -720,7 +731,9 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, QuicConnectionId cid1 = cid_manager_.GenerateNewConnectionId(cid0); QuicConnectionId cid2 = cid_manager_.GenerateNewConnectionId(cid1); QuicConnectionId cid3 = cid_manager_.GenerateNewConnectionId(cid2); - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(_)).Times(3); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(_)) + .Times(3) + .WillRepeatedly(Return(true)); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(_)) .Times(3) .WillRepeatedly(Return(true)); @@ -777,7 +790,9 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, QuicConnectionId cid1 = cid_manager_.GenerateNewConnectionId(cid0); QuicConnectionId cid2 = cid_manager_.GenerateNewConnectionId(cid1); QuicConnectionId cid3 = cid_manager_.GenerateNewConnectionId(cid2); - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(_)).Times(3); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(_)) + .Times(3) + .WillRepeatedly(Return(true)); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(_)) .Times(3) .WillRepeatedly(Return(true)); @@ -834,7 +849,9 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, QuicConnectionId cid2 = cid_manager_.GenerateNewConnectionId(cid1); QuicConnectionId cid3 = cid_manager_.GenerateNewConnectionId(cid2); QuicConnectionId cid; - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(_)).Times(3); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(_)) + .Times(3) + .WillRepeatedly(Return(true)); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(_)) .Times(3) .WillRepeatedly(Return(true)); @@ -893,7 +910,8 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, QuicConnectionId cid1 = cid_manager_.GenerateNewConnectionId(cid0); // CID #1 is sent to peer. - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(_)).Times(1); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(_)) + .WillOnce(Return(true)); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(_)) .WillOnce(Return(true)); cid_manager_.MaybeSendNewConnectionIds(); @@ -909,7 +927,8 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, TEST_F(QuicSelfIssuedConnectionIdManagerTest, ErrorWhenTooManyConnectionIdWaitingToBeRetired) { // CID #0 & #1 are issued. - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(_)); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(_)) + .WillOnce(Return(true)); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(_)) .WillOnce(Return(true)); cid_manager_.MaybeSendNewConnectionIds(); @@ -918,7 +937,8 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, QuicConnectionId last_connection_id = cid_manager_.GenerateNewConnectionId(initial_connection_id_); for (int i = 0; i < 8; ++i) { - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(_)); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(_)) + .WillOnce(Return(true)); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(_)); QuicRetireConnectionIdFrame retire_cid_frame; retire_cid_frame.sequence_number = i; @@ -937,17 +957,60 @@ TEST_F(QuicSelfIssuedConnectionIdManagerTest, IsError(QUIC_TOO_MANY_CONNECTION_ID_WAITING_TO_RETIRE)); } +TEST_F(QuicSelfIssuedConnectionIdManagerTest, CannotIssueNewCidDueToVisitor) { + QuicConnectionId cid0 = initial_connection_id_; + QuicConnectionId cid1 = cid_manager_.GenerateNewConnectionId(cid0); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(cid1)) + .WillOnce(Return(false)); + if (GetQuicReloadableFlag(quic_check_cid_collision_when_issue_new_cid)) { + EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(_)).Times(0); + } else { + EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(_)).Times(1); + } + cid_manager_.MaybeSendNewConnectionIds(); +} + +TEST_F(QuicSelfIssuedConnectionIdManagerTest, + CannotIssueNewCidUponRetireConnectionIdDueToVisitor) { + QuicConnectionId cid0 = initial_connection_id_; + QuicConnectionId cid1 = cid_manager_.GenerateNewConnectionId(cid0); + QuicConnectionId cid2 = cid_manager_.GenerateNewConnectionId(cid1); + // CID #0 & #1 are issued. + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(cid1)) + .WillOnce(Return(true)); + EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(_)) + .WillOnce(Return(true)); + cid_manager_.MaybeSendNewConnectionIds(); + + // CID #2 is not issued. + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(cid2)) + .WillOnce(Return(false)); + if (GetQuicReloadableFlag(quic_check_cid_collision_when_issue_new_cid)) { + EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(_)).Times(0); + } else { + EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(_)).Times(1); + } + QuicRetireConnectionIdFrame retire_cid_frame; + retire_cid_frame.sequence_number = 1; + ASSERT_THAT(cid_manager_.OnRetireConnectionIdFrame( + retire_cid_frame, pto_delay_, &error_details_), + IsQuicNoError()); +} + TEST_F(QuicSelfIssuedConnectionIdManagerTest, DoNotIssueConnectionIdVoluntarilyIfOneHasIssuedForPerferredAddress) { QuicConnectionId cid0 = initial_connection_id_; QuicConnectionId cid1 = cid_manager_.GenerateNewConnectionId(cid0); - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(cid1)); - ASSERT_THAT(cid_manager_.IssueNewConnectionIdForPreferredAddress(), - ExpectedNewConnectionIdFrame(cid1, 1u, 0u)); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(cid1)) + .WillOnce(Return(true)); + absl::optional<QuicNewConnectionIdFrame> new_cid_frame = + cid_manager_.MaybeIssueNewConnectionIdForPreferredAddress(); + ASSERT_TRUE(new_cid_frame.has_value()); + ASSERT_THAT(*new_cid_frame, ExpectedNewConnectionIdFrame(cid1, 1u, 0u)); EXPECT_THAT(cid_manager_.GetUnretiredConnectionIds(), ElementsAre(cid0, cid1)); - EXPECT_CALL(cid_manager_visitor_, OnNewConnectionIdIssued(_)).Times(0); + EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(_)).Times(0); EXPECT_CALL(cid_manager_visitor_, SendNewConnectionId(_)).Times(0); cid_manager_.MaybeSendNewConnectionIds(); } |