summaryrefslogtreecommitdiff
path: root/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id_manager_test.cc
diff options
context:
space:
mode:
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.cc107
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();
}