| 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 |