OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/core/quic_multipath_sent_packet_manager.h" | 5 #include "net/quic/core/quic_multipath_sent_packet_manager.h" |
6 | 6 |
7 #include "net/quic/core/quic_bug_tracker.h" | 7 #include "net/quic/core/quic_bug_tracker.h" |
8 #include "net/quic/test_tools/quic_multipath_sent_packet_manager_peer.h" | 8 #include "net/quic/test_tools/quic_multipath_sent_packet_manager_peer.h" |
9 #include "net/quic/test_tools/quic_test_utils.h" | 9 #include "net/quic/test_tools/quic_test_utils.h" |
10 #include "net/test/gtest_util.h" | 10 #include "net/test/gtest_util.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 QuicMultipathSentPacketManagerTest() | 29 QuicMultipathSentPacketManagerTest() |
30 : manager_0_(new StrictMock<MockSentPacketManager>), | 30 : manager_0_(new StrictMock<MockSentPacketManager>), |
31 manager_1_(new StrictMock<MockSentPacketManager>), | 31 manager_1_(new StrictMock<MockSentPacketManager>), |
32 manager_2_(new StrictMock<MockSentPacketManager>), | 32 manager_2_(new StrictMock<MockSentPacketManager>), |
33 multipath_manager_(manager_0_, &delegate_) { | 33 multipath_manager_(manager_0_, &delegate_) { |
34 // Paths 0 and 1 are active, and path 2 is closing. | 34 // Paths 0 and 1 are active, and path 2 is closing. |
35 QuicMultipathSentPacketManagerPeer::AddPathWithActiveState( | 35 QuicMultipathSentPacketManagerPeer::AddPathWithActiveState( |
36 &multipath_manager_, manager_1_); | 36 &multipath_manager_, manager_1_); |
37 QuicMultipathSentPacketManagerPeer::AddPathWithCloseState( | 37 QuicMultipathSentPacketManagerPeer::AddPathWithCloseState( |
38 &multipath_manager_, manager_2_); | 38 &multipath_manager_, manager_2_); |
39 FLAGS_quic_always_log_bugs_for_tests = true; | |
40 } | 39 } |
41 | 40 |
42 ~QuicMultipathSentPacketManagerTest() override {} | 41 ~QuicMultipathSentPacketManagerTest() override {} |
43 | 42 |
44 MockSentPacketManager* manager_0_; | 43 MockSentPacketManager* manager_0_; |
45 MockSentPacketManager* manager_1_; | 44 MockSentPacketManager* manager_1_; |
46 MockSentPacketManager* manager_2_; | 45 MockSentPacketManager* manager_2_; |
47 QuicMultipathSentPacketManager multipath_manager_; | 46 QuicMultipathSentPacketManager multipath_manager_; |
48 MockClock clock_; | 47 MockClock clock_; |
49 StrictMock<MockConnectionCloseDelegate> delegate_; | 48 StrictMock<MockConnectionCloseDelegate> delegate_; |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 EXPECT_TRUE(multipath_manager_.HasUnackedPackets()); | 148 EXPECT_TRUE(multipath_manager_.HasUnackedPackets()); |
150 } | 149 } |
151 | 150 |
152 TEST_F(QuicMultipathSentPacketManagerTest, GetLeastUnacked) { | 151 TEST_F(QuicMultipathSentPacketManagerTest, GetLeastUnacked) { |
153 EXPECT_CALL(*manager_0_, GetLeastUnacked(kDefaultPathId)).WillOnce(Return(2)); | 152 EXPECT_CALL(*manager_0_, GetLeastUnacked(kDefaultPathId)).WillOnce(Return(2)); |
154 EXPECT_CALL(*manager_1_, GetLeastUnacked(kTestPathId1)).WillOnce(Return(3)); | 153 EXPECT_CALL(*manager_1_, GetLeastUnacked(kTestPathId1)).WillOnce(Return(3)); |
155 EXPECT_CALL(*manager_2_, GetLeastUnacked(kTestPathId2)).WillOnce(Return(4)); | 154 EXPECT_CALL(*manager_2_, GetLeastUnacked(kTestPathId2)).WillOnce(Return(4)); |
156 EXPECT_EQ(2u, multipath_manager_.GetLeastUnacked(kDefaultPathId)); | 155 EXPECT_EQ(2u, multipath_manager_.GetLeastUnacked(kDefaultPathId)); |
157 EXPECT_EQ(3u, multipath_manager_.GetLeastUnacked(kTestPathId1)); | 156 EXPECT_EQ(3u, multipath_manager_.GetLeastUnacked(kTestPathId1)); |
158 EXPECT_EQ(4u, multipath_manager_.GetLeastUnacked(kTestPathId2)); | 157 EXPECT_EQ(4u, multipath_manager_.GetLeastUnacked(kTestPathId2)); |
159 EXPECT_DFATAL(multipath_manager_.GetLeastUnacked(kTestPathId3), ""); | 158 EXPECT_QUIC_BUG(multipath_manager_.GetLeastUnacked(kTestPathId3), ""); |
160 } | 159 } |
161 | 160 |
162 TEST_F(QuicMultipathSentPacketManagerTest, OnPacketSent) { | 161 TEST_F(QuicMultipathSentPacketManagerTest, OnPacketSent) { |
163 SerializedPacket packet0(kDefaultPathId, 1, PACKET_6BYTE_PACKET_NUMBER, | 162 SerializedPacket packet0(kDefaultPathId, 1, PACKET_6BYTE_PACKET_NUMBER, |
164 nullptr, 1250, 0u, false, false); | 163 nullptr, 1250, 0u, false, false); |
165 SerializedPacket packet1(kTestPathId1, 1, PACKET_6BYTE_PACKET_NUMBER, nullptr, | 164 SerializedPacket packet1(kTestPathId1, 1, PACKET_6BYTE_PACKET_NUMBER, nullptr, |
166 1250, 0u, false, false); | 165 1250, 0u, false, false); |
167 SerializedPacket packet2(kTestPathId2, 1, PACKET_6BYTE_PACKET_NUMBER, nullptr, | 166 SerializedPacket packet2(kTestPathId2, 1, PACKET_6BYTE_PACKET_NUMBER, nullptr, |
168 1250, 0u, false, false); | 167 1250, 0u, false, false); |
169 SerializedPacket packet3(kTestPathId3, 1, PACKET_6BYTE_PACKET_NUMBER, nullptr, | 168 SerializedPacket packet3(kTestPathId3, 1, PACKET_6BYTE_PACKET_NUMBER, nullptr, |
170 1250, 0u, false, false); | 169 1250, 0u, false, false); |
171 EXPECT_CALL(*manager_0_, | 170 EXPECT_CALL(*manager_0_, |
172 OnPacketSent(&packet0, kInvalidPathId, 0, clock_.Now(), | 171 OnPacketSent(&packet0, kInvalidPathId, 0, clock_.Now(), |
173 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA)); | 172 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA)); |
174 multipath_manager_.OnPacketSent(&packet0, kInvalidPathId, 0, clock_.Now(), | 173 multipath_manager_.OnPacketSent(&packet0, kInvalidPathId, 0, clock_.Now(), |
175 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 174 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
176 EXPECT_CALL(*manager_1_, | 175 EXPECT_CALL(*manager_1_, |
177 OnPacketSent(&packet1, kInvalidPathId, 0, clock_.Now(), | 176 OnPacketSent(&packet1, kInvalidPathId, 0, clock_.Now(), |
178 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA)); | 177 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA)); |
179 multipath_manager_.OnPacketSent(&packet1, kInvalidPathId, 0, clock_.Now(), | 178 multipath_manager_.OnPacketSent(&packet1, kInvalidPathId, 0, clock_.Now(), |
180 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 179 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
181 EXPECT_CALL(*manager_2_, OnPacketSent(_, _, _, _, _, _)).Times(0); | 180 EXPECT_CALL(*manager_2_, OnPacketSent(_, _, _, _, _, _)).Times(0); |
182 EXPECT_CALL(delegate_, | 181 EXPECT_CALL(delegate_, |
183 OnUnrecoverableError(QUIC_MULTIPATH_PATH_NOT_ACTIVE, _, _)); | 182 OnUnrecoverableError(QUIC_MULTIPATH_PATH_NOT_ACTIVE, _, _)); |
184 EXPECT_DFATAL(multipath_manager_.OnPacketSent( | 183 EXPECT_QUIC_BUG(multipath_manager_.OnPacketSent( |
185 &packet2, kInvalidPathId, 0, clock_.Now(), | 184 &packet2, kInvalidPathId, 0, clock_.Now(), |
186 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA), | 185 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA), |
187 ""); | 186 ""); |
188 EXPECT_CALL(delegate_, | 187 EXPECT_CALL(delegate_, |
189 OnUnrecoverableError(QUIC_MULTIPATH_PATH_DOES_NOT_EXIST, _, _)); | 188 OnUnrecoverableError(QUIC_MULTIPATH_PATH_DOES_NOT_EXIST, _, _)); |
190 EXPECT_DFATAL(multipath_manager_.OnPacketSent( | 189 EXPECT_QUIC_BUG(multipath_manager_.OnPacketSent( |
191 &packet3, kInvalidPathId, 0, clock_.Now(), | 190 &packet3, kInvalidPathId, 0, clock_.Now(), |
192 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA), | 191 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA), |
193 ""); | 192 ""); |
194 } | 193 } |
195 | 194 |
196 TEST_F(QuicMultipathSentPacketManagerTest, OnRetransmissionTimeout) { | 195 TEST_F(QuicMultipathSentPacketManagerTest, OnRetransmissionTimeout) { |
197 QuicTime time0 = clock_.Now() + QuicTime::Delta::FromMilliseconds(50); | 196 QuicTime time0 = clock_.Now() + QuicTime::Delta::FromMilliseconds(50); |
198 QuicTime time1 = clock_.Now() + QuicTime::Delta::FromMilliseconds(100); | 197 QuicTime time1 = clock_.Now() + QuicTime::Delta::FromMilliseconds(100); |
199 EXPECT_CALL(*manager_0_, GetRetransmissionTime()).WillOnce(Return(time0)); | 198 EXPECT_CALL(*manager_0_, GetRetransmissionTime()).WillOnce(Return(time0)); |
200 EXPECT_CALL(*manager_1_, GetRetransmissionTime()).WillOnce(Return(time1)); | 199 EXPECT_CALL(*manager_1_, GetRetransmissionTime()).WillOnce(Return(time1)); |
201 EXPECT_CALL(*manager_0_, OnRetransmissionTimeout()); | 200 EXPECT_CALL(*manager_0_, OnRetransmissionTimeout()); |
202 multipath_manager_.OnRetransmissionTimeout(); | 201 multipath_manager_.OnRetransmissionTimeout(); |
203 } | 202 } |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 EXPECT_CALL(*manager_2_, CancelRetransmissionsForStream(1)); | 260 EXPECT_CALL(*manager_2_, CancelRetransmissionsForStream(1)); |
262 multipath_manager_.CancelRetransmissionsForStream(1); | 261 multipath_manager_.CancelRetransmissionsForStream(1); |
263 } | 262 } |
264 | 263 |
265 TEST_F(QuicMultipathSentPacketManagerTest, OnConnectionMigration) { | 264 TEST_F(QuicMultipathSentPacketManagerTest, OnConnectionMigration) { |
266 EXPECT_CALL(*manager_0_, OnConnectionMigration(kDefaultPathId, PORT_CHANGE)); | 265 EXPECT_CALL(*manager_0_, OnConnectionMigration(kDefaultPathId, PORT_CHANGE)); |
267 EXPECT_CALL(*manager_2_, OnConnectionMigration(_, _)).Times(0); | 266 EXPECT_CALL(*manager_2_, OnConnectionMigration(_, _)).Times(0); |
268 multipath_manager_.OnConnectionMigration(kDefaultPathId, PORT_CHANGE); | 267 multipath_manager_.OnConnectionMigration(kDefaultPathId, PORT_CHANGE); |
269 EXPECT_CALL(delegate_, | 268 EXPECT_CALL(delegate_, |
270 OnUnrecoverableError(QUIC_MULTIPATH_PATH_NOT_ACTIVE, _, _)); | 269 OnUnrecoverableError(QUIC_MULTIPATH_PATH_NOT_ACTIVE, _, _)); |
271 EXPECT_DFATAL( | 270 EXPECT_QUIC_BUG( |
272 multipath_manager_.OnConnectionMigration(kTestPathId2, PORT_CHANGE), ""); | 271 multipath_manager_.OnConnectionMigration(kTestPathId2, PORT_CHANGE), ""); |
273 EXPECT_CALL(delegate_, | 272 EXPECT_CALL(delegate_, |
274 OnUnrecoverableError(QUIC_MULTIPATH_PATH_DOES_NOT_EXIST, _, _)); | 273 OnUnrecoverableError(QUIC_MULTIPATH_PATH_DOES_NOT_EXIST, _, _)); |
275 EXPECT_DFATAL( | 274 EXPECT_QUIC_BUG( |
276 multipath_manager_.OnConnectionMigration(kTestPathId3, PORT_CHANGE), ""); | 275 multipath_manager_.OnConnectionMigration(kTestPathId3, PORT_CHANGE), ""); |
277 } | 276 } |
278 | 277 |
279 TEST_F(QuicMultipathSentPacketManagerTest, IsHandshakeConfirmed) { | 278 TEST_F(QuicMultipathSentPacketManagerTest, IsHandshakeConfirmed) { |
280 EXPECT_CALL(*manager_0_, IsHandshakeConfirmed()).WillOnce(Return(true)); | 279 EXPECT_CALL(*manager_0_, IsHandshakeConfirmed()).WillOnce(Return(true)); |
281 EXPECT_TRUE(multipath_manager_.IsHandshakeConfirmed()); | 280 EXPECT_TRUE(multipath_manager_.IsHandshakeConfirmed()); |
282 } | 281 } |
283 | 282 |
284 TEST_F(QuicMultipathSentPacketManagerTest, SetDebugDelegate) { | 283 TEST_F(QuicMultipathSentPacketManagerTest, SetDebugDelegate) { |
285 EXPECT_CALL(*manager_0_, SetDebugDelegate(nullptr)); | 284 EXPECT_CALL(*manager_0_, SetDebugDelegate(nullptr)); |
286 EXPECT_CALL(*manager_1_, SetDebugDelegate(nullptr)); | 285 EXPECT_CALL(*manager_1_, SetDebugDelegate(nullptr)); |
287 EXPECT_CALL(*manager_2_, SetDebugDelegate(nullptr)); | 286 EXPECT_CALL(*manager_2_, SetDebugDelegate(nullptr)); |
288 multipath_manager_.SetDebugDelegate(nullptr); | 287 multipath_manager_.SetDebugDelegate(nullptr); |
289 } | 288 } |
290 | 289 |
291 TEST_F(QuicMultipathSentPacketManagerTest, GetLargestObserved) { | 290 TEST_F(QuicMultipathSentPacketManagerTest, GetLargestObserved) { |
292 EXPECT_CALL(*manager_0_, GetLargestObserved(kDefaultPathId)) | 291 EXPECT_CALL(*manager_0_, GetLargestObserved(kDefaultPathId)) |
293 .WillOnce(Return(10)); | 292 .WillOnce(Return(10)); |
294 EXPECT_CALL(*manager_1_, GetLargestObserved(kTestPathId1)) | 293 EXPECT_CALL(*manager_1_, GetLargestObserved(kTestPathId1)) |
295 .WillOnce(Return(11)); | 294 .WillOnce(Return(11)); |
296 EXPECT_CALL(*manager_2_, GetLargestObserved(kTestPathId2)) | 295 EXPECT_CALL(*manager_2_, GetLargestObserved(kTestPathId2)) |
297 .WillOnce(Return(12)); | 296 .WillOnce(Return(12)); |
298 EXPECT_EQ(10u, multipath_manager_.GetLargestObserved(kDefaultPathId)); | 297 EXPECT_EQ(10u, multipath_manager_.GetLargestObserved(kDefaultPathId)); |
299 EXPECT_EQ(11u, multipath_manager_.GetLargestObserved(kTestPathId1)); | 298 EXPECT_EQ(11u, multipath_manager_.GetLargestObserved(kTestPathId1)); |
300 EXPECT_EQ(12u, multipath_manager_.GetLargestObserved(kTestPathId2)); | 299 EXPECT_EQ(12u, multipath_manager_.GetLargestObserved(kTestPathId2)); |
301 EXPECT_DFATAL(multipath_manager_.GetLargestObserved(kTestPathId3), ""); | 300 EXPECT_QUIC_BUG(multipath_manager_.GetLargestObserved(kTestPathId3), ""); |
302 } | 301 } |
303 | 302 |
304 TEST_F(QuicMultipathSentPacketManagerTest, GetLargestSentPacket) { | 303 TEST_F(QuicMultipathSentPacketManagerTest, GetLargestSentPacket) { |
305 EXPECT_CALL(*manager_0_, GetLargestSentPacket(kDefaultPathId)) | 304 EXPECT_CALL(*manager_0_, GetLargestSentPacket(kDefaultPathId)) |
306 .WillOnce(Return(10)); | 305 .WillOnce(Return(10)); |
307 EXPECT_CALL(*manager_1_, GetLargestSentPacket(kTestPathId1)) | 306 EXPECT_CALL(*manager_1_, GetLargestSentPacket(kTestPathId1)) |
308 .WillOnce(Return(11)); | 307 .WillOnce(Return(11)); |
309 EXPECT_CALL(*manager_2_, GetLargestSentPacket(kTestPathId2)) | 308 EXPECT_CALL(*manager_2_, GetLargestSentPacket(kTestPathId2)) |
310 .WillOnce(Return(12)); | 309 .WillOnce(Return(12)); |
311 EXPECT_EQ(10u, multipath_manager_.GetLargestSentPacket(kDefaultPathId)); | 310 EXPECT_EQ(10u, multipath_manager_.GetLargestSentPacket(kDefaultPathId)); |
312 EXPECT_EQ(11u, multipath_manager_.GetLargestSentPacket(kTestPathId1)); | 311 EXPECT_EQ(11u, multipath_manager_.GetLargestSentPacket(kTestPathId1)); |
313 EXPECT_EQ(12u, multipath_manager_.GetLargestSentPacket(kTestPathId2)); | 312 EXPECT_EQ(12u, multipath_manager_.GetLargestSentPacket(kTestPathId2)); |
314 EXPECT_DFATAL(multipath_manager_.GetLargestSentPacket(kTestPathId3), ""); | 313 EXPECT_QUIC_BUG(multipath_manager_.GetLargestSentPacket(kTestPathId3), ""); |
315 } | 314 } |
316 | 315 |
317 TEST_F(QuicMultipathSentPacketManagerTest, GetLeastPacketAwaitedByPeer) { | 316 TEST_F(QuicMultipathSentPacketManagerTest, GetLeastPacketAwaitedByPeer) { |
318 EXPECT_CALL(*manager_0_, GetLeastPacketAwaitedByPeer(kDefaultPathId)) | 317 EXPECT_CALL(*manager_0_, GetLeastPacketAwaitedByPeer(kDefaultPathId)) |
319 .WillOnce(Return(10)); | 318 .WillOnce(Return(10)); |
320 EXPECT_CALL(*manager_1_, GetLeastPacketAwaitedByPeer(kTestPathId1)) | 319 EXPECT_CALL(*manager_1_, GetLeastPacketAwaitedByPeer(kTestPathId1)) |
321 .WillOnce(Return(11)); | 320 .WillOnce(Return(11)); |
322 EXPECT_CALL(*manager_2_, GetLeastPacketAwaitedByPeer(kTestPathId2)) | 321 EXPECT_CALL(*manager_2_, GetLeastPacketAwaitedByPeer(kTestPathId2)) |
323 .WillOnce(Return(12)); | 322 .WillOnce(Return(12)); |
324 EXPECT_EQ(10u, | 323 EXPECT_EQ(10u, |
325 multipath_manager_.GetLeastPacketAwaitedByPeer(kDefaultPathId)); | 324 multipath_manager_.GetLeastPacketAwaitedByPeer(kDefaultPathId)); |
326 EXPECT_EQ(11u, multipath_manager_.GetLeastPacketAwaitedByPeer(kTestPathId1)); | 325 EXPECT_EQ(11u, multipath_manager_.GetLeastPacketAwaitedByPeer(kTestPathId1)); |
327 EXPECT_EQ(12u, multipath_manager_.GetLeastPacketAwaitedByPeer(kTestPathId2)); | 326 EXPECT_EQ(12u, multipath_manager_.GetLeastPacketAwaitedByPeer(kTestPathId2)); |
328 EXPECT_DFATAL(multipath_manager_.GetLeastPacketAwaitedByPeer(kTestPathId3), | 327 EXPECT_QUIC_BUG(multipath_manager_.GetLeastPacketAwaitedByPeer(kTestPathId3), |
329 ""); | 328 ""); |
330 } | 329 } |
331 | 330 |
332 TEST_F(QuicMultipathSentPacketManagerTest, SetNetworkChangeVisitor) { | 331 TEST_F(QuicMultipathSentPacketManagerTest, SetNetworkChangeVisitor) { |
333 EXPECT_CALL(*manager_0_, SetNetworkChangeVisitor(nullptr)); | 332 EXPECT_CALL(*manager_0_, SetNetworkChangeVisitor(nullptr)); |
334 EXPECT_CALL(*manager_1_, SetNetworkChangeVisitor(nullptr)); | 333 EXPECT_CALL(*manager_1_, SetNetworkChangeVisitor(nullptr)); |
335 multipath_manager_.SetNetworkChangeVisitor(nullptr); | 334 multipath_manager_.SetNetworkChangeVisitor(nullptr); |
336 } | 335 } |
337 | 336 |
338 TEST_F(QuicMultipathSentPacketManagerTest, InSlowStart) { | 337 TEST_F(QuicMultipathSentPacketManagerTest, InSlowStart) { |
339 EXPECT_CALL(*manager_0_, InSlowStart()).WillOnce(Return(true)); | 338 EXPECT_CALL(*manager_0_, InSlowStart()).WillOnce(Return(true)); |
(...skipping 13 matching lines...) Expand all Loading... |
353 TEST_F(QuicMultipathSentPacketManagerTest, OnApplicationLimited) { | 352 TEST_F(QuicMultipathSentPacketManagerTest, OnApplicationLimited) { |
354 EXPECT_CALL(*manager_0_, OnApplicationLimited()).Times(1); | 353 EXPECT_CALL(*manager_0_, OnApplicationLimited()).Times(1); |
355 EXPECT_CALL(*manager_1_, OnApplicationLimited()).Times(1); | 354 EXPECT_CALL(*manager_1_, OnApplicationLimited()).Times(1); |
356 EXPECT_CALL(*manager_2_, OnApplicationLimited()).Times(0); | 355 EXPECT_CALL(*manager_2_, OnApplicationLimited()).Times(0); |
357 multipath_manager_.OnApplicationLimited(); | 356 multipath_manager_.OnApplicationLimited(); |
358 } | 357 } |
359 | 358 |
360 } // namespace | 359 } // namespace |
361 } // namespace test | 360 } // namespace test |
362 } // namespace net | 361 } // namespace net |
OLD | NEW |