| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/tools/quic/quic_time_wait_list_manager.h" | 5 #include "net/tools/quic/quic_time_wait_list_manager.h" |
| 6 | 6 |
| 7 #include <errno.h> | 7 #include <errno.h> |
| 8 | 8 |
| 9 #include "net/quic/crypto/crypto_protocol.h" | 9 #include "net/quic/crypto/crypto_protocol.h" |
| 10 #include "net/quic/crypto/null_encrypter.h" | 10 #include "net/quic/crypto/null_encrypter.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 using testing::Return; | 28 using testing::Return; |
| 29 using testing::SetArgPointee; | 29 using testing::SetArgPointee; |
| 30 using testing::Truly; | 30 using testing::Truly; |
| 31 | 31 |
| 32 namespace net { | 32 namespace net { |
| 33 namespace tools { | 33 namespace tools { |
| 34 namespace test { | 34 namespace test { |
| 35 | 35 |
| 36 class QuicTimeWaitListManagerPeer { | 36 class QuicTimeWaitListManagerPeer { |
| 37 public: | 37 public: |
| 38 static QuicVersion version(QuicTimeWaitListManager* manager) { | |
| 39 return manager->framer_.version(); | |
| 40 } | |
| 41 | |
| 42 static bool is_write_blocked(QuicTimeWaitListManager* manager) { | 38 static bool is_write_blocked(QuicTimeWaitListManager* manager) { |
| 43 return manager->is_write_blocked_; | 39 return manager->is_write_blocked_; |
| 44 } | 40 } |
| 45 | 41 |
| 46 static bool ShouldSendResponse(QuicTimeWaitListManager* manager, | 42 static bool ShouldSendResponse(QuicTimeWaitListManager* manager, |
| 47 int received_packet_count) { | 43 int received_packet_count) { |
| 48 return manager->ShouldSendResponse(received_packet_count); | 44 return manager->ShouldSendResponse(received_packet_count); |
| 49 } | 45 } |
| 50 | 46 |
| 51 static QuicTime::Delta time_wait_period(QuicTimeWaitListManager* manager) { | 47 static QuicTime::Delta time_wait_period(QuicTimeWaitListManager* manager) { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 void AddGuid(QuicGuid guid, | 88 void AddGuid(QuicGuid guid, |
| 93 QuicVersion version, | 89 QuicVersion version, |
| 94 QuicEncryptedPacket* packet) { | 90 QuicEncryptedPacket* packet) { |
| 95 time_wait_list_manager_.AddGuidToTimeWait(guid, version, packet); | 91 time_wait_list_manager_.AddGuidToTimeWait(guid, version, packet); |
| 96 } | 92 } |
| 97 | 93 |
| 98 bool IsGuidInTimeWait(QuicGuid guid) { | 94 bool IsGuidInTimeWait(QuicGuid guid) { |
| 99 return time_wait_list_manager_.IsGuidInTimeWait(guid); | 95 return time_wait_list_manager_.IsGuidInTimeWait(guid); |
| 100 } | 96 } |
| 101 | 97 |
| 102 void ProcessPacket(QuicGuid guid, const QuicEncryptedPacket& packet) { | 98 void ProcessPacket(QuicGuid guid, QuicPacketSequenceNumber sequence_number) { |
| 103 time_wait_list_manager_.ProcessPacket(server_address_, | 99 time_wait_list_manager_.ProcessPacket(server_address_, |
| 104 client_address_, | 100 client_address_, |
| 105 guid, | 101 guid, |
| 106 packet); | 102 sequence_number); |
| 107 } | 103 } |
| 108 | 104 |
| 109 QuicEncryptedPacket* ConstructEncryptedPacket( | 105 QuicEncryptedPacket* ConstructEncryptedPacket( |
| 110 EncryptionLevel level, | 106 EncryptionLevel level, |
| 111 QuicGuid guid, | 107 QuicGuid guid, |
| 112 QuicPacketSequenceNumber sequence_number) { | 108 QuicPacketSequenceNumber sequence_number) { |
| 113 QuicPacketHeader header; | 109 QuicPacketHeader header; |
| 114 header.public_header.guid = guid; | 110 header.public_header.guid = guid; |
| 115 header.public_header.guid_length = PACKET_8BYTE_GUID; | 111 header.public_header.guid_length = PACKET_8BYTE_GUID; |
| 116 header.public_header.version_flag = false; | 112 header.public_header.version_flag = false; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 130 framer_.BuildUnsizedDataPacket(header, frames).packet); | 126 framer_.BuildUnsizedDataPacket(header, frames).packet); |
| 131 EXPECT_TRUE(packet != NULL); | 127 EXPECT_TRUE(packet != NULL); |
| 132 QuicEncryptedPacket* encrypted = framer_.EncryptPacket(ENCRYPTION_NONE, | 128 QuicEncryptedPacket* encrypted = framer_.EncryptPacket(ENCRYPTION_NONE, |
| 133 sequence_number, | 129 sequence_number, |
| 134 *packet); | 130 *packet); |
| 135 EXPECT_TRUE(encrypted != NULL); | 131 EXPECT_TRUE(encrypted != NULL); |
| 136 return encrypted; | 132 return encrypted; |
| 137 } | 133 } |
| 138 | 134 |
| 139 MockFakeTimeEpollServer epoll_server_; | 135 MockFakeTimeEpollServer epoll_server_; |
| 140 MockPacketWriter writer_; | 136 testing::StrictMock<MockPacketWriter> writer_; |
| 141 QuicTimeWaitListManager time_wait_list_manager_; | 137 QuicTimeWaitListManager time_wait_list_manager_; |
| 142 QuicFramer framer_; | 138 QuicFramer framer_; |
| 143 QuicGuid guid_; | 139 QuicGuid guid_; |
| 144 IPEndPoint server_address_; | 140 IPEndPoint server_address_; |
| 145 IPEndPoint client_address_; | 141 IPEndPoint client_address_; |
| 146 }; | 142 }; |
| 147 | 143 |
| 148 class ValidatePublicResetPacketPredicate | 144 class ValidatePublicResetPacketPredicate |
| 149 : public MatcherInterface<const std::tr1::tuple<const char*, int> > { | 145 : public MatcherInterface<const std::tr1::tuple<const char*, int> > { |
| 150 public: | 146 public: |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 EXPECT_TRUE(IsGuidInTimeWait(guid_)); | 189 EXPECT_TRUE(IsGuidInTimeWait(guid_)); |
| 194 } | 190 } |
| 195 | 191 |
| 196 TEST_F(QuicTimeWaitListManagerTest, SendConnectionClose) { | 192 TEST_F(QuicTimeWaitListManagerTest, SendConnectionClose) { |
| 197 size_t kConnectionCloseLength = 100; | 193 size_t kConnectionCloseLength = 100; |
| 198 AddGuid(guid_, | 194 AddGuid(guid_, |
| 199 net::test::QuicVersionMax(), | 195 net::test::QuicVersionMax(), |
| 200 new QuicEncryptedPacket( | 196 new QuicEncryptedPacket( |
| 201 new char[kConnectionCloseLength], kConnectionCloseLength, true)); | 197 new char[kConnectionCloseLength], kConnectionCloseLength, true)); |
| 202 const int kRandomSequenceNumber = 1; | 198 const int kRandomSequenceNumber = 1; |
| 203 scoped_ptr<QuicEncryptedPacket> packet( | |
| 204 ConstructEncryptedPacket(ENCRYPTION_NONE, guid_, kRandomSequenceNumber)); | |
| 205 EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength, | 199 EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength, |
| 206 server_address_.address(), | 200 server_address_.address(), |
| 207 client_address_, | 201 client_address_, |
| 208 &time_wait_list_manager_)) | 202 &time_wait_list_manager_)) |
| 209 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); | 203 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); |
| 210 | 204 |
| 211 ProcessPacket(guid_, *packet); | 205 ProcessPacket(guid_, kRandomSequenceNumber); |
| 212 } | 206 } |
| 213 | 207 |
| 214 TEST_F(QuicTimeWaitListManagerTest, SendPublicReset) { | 208 TEST_F(QuicTimeWaitListManagerTest, SendPublicReset) { |
| 215 AddGuid(guid_); | 209 AddGuid(guid_); |
| 216 const int kRandomSequenceNumber = 1; | 210 const int kRandomSequenceNumber = 1; |
| 217 scoped_ptr<QuicEncryptedPacket> packet( | |
| 218 ConstructEncryptedPacket(ENCRYPTION_NONE, guid_, kRandomSequenceNumber)); | |
| 219 EXPECT_CALL(writer_, WritePacket(_, _, | 211 EXPECT_CALL(writer_, WritePacket(_, _, |
| 220 server_address_.address(), | 212 server_address_.address(), |
| 221 client_address_, | 213 client_address_, |
| 222 &time_wait_list_manager_)) | 214 &time_wait_list_manager_)) |
| 223 .With(Args<0, 1>(PublicResetPacketEq(guid_, | 215 .With(Args<0, 1>(PublicResetPacketEq(guid_, |
| 224 kRandomSequenceNumber))) | 216 kRandomSequenceNumber))) |
| 225 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length()))); | 217 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0))); |
| 226 | 218 |
| 227 ProcessPacket(guid_, *packet); | 219 ProcessPacket(guid_, kRandomSequenceNumber); |
| 228 } | |
| 229 | |
| 230 TEST_F(QuicTimeWaitListManagerTest, SendPublicResetUndecryptable) { | |
| 231 AddGuid(guid_); | |
| 232 const int kRandomSequenceNumber = 1; | |
| 233 scoped_ptr<QuicEncryptedPacket> packet( | |
| 234 ConstructEncryptedPacket( | |
| 235 ENCRYPTION_INITIAL, guid_, kRandomSequenceNumber)); | |
| 236 EXPECT_CALL(writer_, WritePacket(_, _, | |
| 237 server_address_.address(), | |
| 238 client_address_, | |
| 239 &time_wait_list_manager_)) | |
| 240 .With(Args<0, 1>(PublicResetPacketEq(guid_, | |
| 241 kRandomSequenceNumber))) | |
| 242 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length()))); | |
| 243 | |
| 244 ProcessPacket(guid_, *packet); | |
| 245 } | |
| 246 | |
| 247 TEST_F(QuicTimeWaitListManagerTest, DropInvalidPacket) { | |
| 248 AddGuid(guid_); | |
| 249 const char buffer[] = "invalid"; | |
| 250 QuicEncryptedPacket packet(buffer, arraysize(buffer)); | |
| 251 // Will get called for a valid packet since received packet count = 1 (2 ^ 0). | |
| 252 EXPECT_CALL(writer_, WritePacket(_, _, _, _, _)).Times(0); | |
| 253 ProcessPacket(guid_, packet); | |
| 254 } | |
| 255 | |
| 256 TEST_F(QuicTimeWaitListManagerTest, DropPublicResetPacket) { | |
| 257 AddGuid(guid_); | |
| 258 QuicPublicResetPacket packet; | |
| 259 packet.public_header.guid = guid_; | |
| 260 packet.public_header.version_flag = false; | |
| 261 packet.public_header.reset_flag = true; | |
| 262 packet.rejected_sequence_number = 239191; | |
| 263 packet.nonce_proof = 1010101; | |
| 264 scoped_ptr<QuicEncryptedPacket> public_reset_packet( | |
| 265 QuicFramer::BuildPublicResetPacket(packet)); | |
| 266 // Will get called for a data packet since received packet count = 1 (2 ^ 0). | |
| 267 EXPECT_CALL(writer_, WritePacket(_, _, _, _, _)).Times(0); | |
| 268 ProcessPacket(guid_, *public_reset_packet); | |
| 269 } | 220 } |
| 270 | 221 |
| 271 TEST_F(QuicTimeWaitListManagerTest, SendPublicResetWithExponentialBackOff) { | 222 TEST_F(QuicTimeWaitListManagerTest, SendPublicResetWithExponentialBackOff) { |
| 272 AddGuid(guid_); | 223 AddGuid(guid_); |
| 273 for (int sequence_number = 1; sequence_number < 101; ++sequence_number) { | 224 for (int sequence_number = 1; sequence_number < 101; ++sequence_number) { |
| 274 scoped_ptr<QuicEncryptedPacket> packet( | |
| 275 ConstructEncryptedPacket(ENCRYPTION_NONE, guid_, sequence_number)); | |
| 276 if ((sequence_number & (sequence_number - 1)) == 0) { | 225 if ((sequence_number & (sequence_number - 1)) == 0) { |
| 277 EXPECT_CALL(writer_, WritePacket(_, _, _, _, _)) | 226 EXPECT_CALL(writer_, WritePacket(_, _, _, _, _)) |
| 278 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); | 227 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); |
| 279 } | 228 } |
| 280 ProcessPacket(guid_, *packet); | 229 ProcessPacket(guid_, sequence_number); |
| 281 // Send public reset with exponential back off. | 230 // Send public reset with exponential back off. |
| 282 if ((sequence_number & (sequence_number - 1)) == 0) { | 231 if ((sequence_number & (sequence_number - 1)) == 0) { |
| 283 EXPECT_TRUE(QuicTimeWaitListManagerPeer::ShouldSendResponse( | 232 EXPECT_TRUE(QuicTimeWaitListManagerPeer::ShouldSendResponse( |
| 284 &time_wait_list_manager_, sequence_number)); | 233 &time_wait_list_manager_, sequence_number)); |
| 285 } else { | 234 } else { |
| 286 EXPECT_FALSE(QuicTimeWaitListManagerPeer::ShouldSendResponse( | 235 EXPECT_FALSE(QuicTimeWaitListManagerPeer::ShouldSendResponse( |
| 287 &time_wait_list_manager_, sequence_number)); | 236 &time_wait_list_manager_, sequence_number)); |
| 288 } | 237 } |
| 289 } | 238 } |
| 290 } | 239 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 scoped_ptr<QuicEncryptedPacket> packet( | 279 scoped_ptr<QuicEncryptedPacket> packet( |
| 331 ConstructEncryptedPacket(ENCRYPTION_NONE, guid, sequence_number)); | 280 ConstructEncryptedPacket(ENCRYPTION_NONE, guid, sequence_number)); |
| 332 // Let first write through. | 281 // Let first write through. |
| 333 EXPECT_CALL(writer_, WritePacket(_, _, | 282 EXPECT_CALL(writer_, WritePacket(_, _, |
| 334 server_address_.address(), | 283 server_address_.address(), |
| 335 client_address_, | 284 client_address_, |
| 336 &time_wait_list_manager_)) | 285 &time_wait_list_manager_)) |
| 337 .With(Args<0, 1>(PublicResetPacketEq(guid, | 286 .With(Args<0, 1>(PublicResetPacketEq(guid, |
| 338 sequence_number))) | 287 sequence_number))) |
| 339 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length()))); | 288 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length()))); |
| 340 ProcessPacket(guid, *packet); | 289 ProcessPacket(guid, sequence_number); |
| 341 EXPECT_FALSE( | 290 EXPECT_FALSE( |
| 342 QuicTimeWaitListManagerPeer::is_write_blocked(&time_wait_list_manager_)); | 291 QuicTimeWaitListManagerPeer::is_write_blocked(&time_wait_list_manager_)); |
| 343 | 292 |
| 344 // write block for the next packet. | 293 // write block for the next packet. |
| 345 EXPECT_CALL(writer_, WritePacket(_, _, | 294 EXPECT_CALL(writer_, WritePacket(_, _, |
| 346 server_address_.address(), | 295 server_address_.address(), |
| 347 client_address_, | 296 client_address_, |
| 348 &time_wait_list_manager_)) | 297 &time_wait_list_manager_)) |
| 349 .With(Args<0, 1>(PublicResetPacketEq(guid, | 298 .With(Args<0, 1>(PublicResetPacketEq(guid, |
| 350 sequence_number))) | 299 sequence_number))) |
| 351 .WillOnce(Return(WriteResult(WRITE_STATUS_BLOCKED, EAGAIN))); | 300 .WillOnce(Return(WriteResult(WRITE_STATUS_BLOCKED, EAGAIN))); |
| 352 ProcessPacket(guid, *packet); | 301 ProcessPacket(guid, sequence_number); |
| 353 // 3rd packet. No public reset should be sent; | 302 // 3rd packet. No public reset should be sent; |
| 354 ProcessPacket(guid, *packet); | 303 ProcessPacket(guid, sequence_number); |
| 355 EXPECT_TRUE( | 304 EXPECT_TRUE( |
| 356 QuicTimeWaitListManagerPeer::is_write_blocked(&time_wait_list_manager_)); | 305 QuicTimeWaitListManagerPeer::is_write_blocked(&time_wait_list_manager_)); |
| 357 | 306 |
| 358 // write packet should not be called since already write blocked but the | 307 // write packet should not be called since already write blocked but the |
| 359 // should be queued. | 308 // should be queued. |
| 360 QuicGuid other_guid = 2; | 309 QuicGuid other_guid = 2; |
| 361 AddGuid(other_guid); | 310 AddGuid(other_guid); |
| 362 QuicPacketSequenceNumber other_sequence_number = 23423; | 311 QuicPacketSequenceNumber other_sequence_number = 23423; |
| 363 scoped_ptr<QuicEncryptedPacket> other_packet( | 312 scoped_ptr<QuicEncryptedPacket> other_packet( |
| 364 ConstructEncryptedPacket( | 313 ConstructEncryptedPacket( |
| 365 ENCRYPTION_NONE, other_guid, other_sequence_number)); | 314 ENCRYPTION_NONE, other_guid, other_sequence_number)); |
| 366 EXPECT_CALL(writer_, WritePacket(_, _, _, _, _)) | 315 EXPECT_CALL(writer_, WritePacket(_, _, _, _, _)) |
| 367 .Times(0); | 316 .Times(0); |
| 368 ProcessPacket(other_guid, *other_packet); | 317 ProcessPacket(other_guid, other_sequence_number); |
| 369 | 318 |
| 370 // Now expect all the write blocked public reset packets to be sent again. | 319 // Now expect all the write blocked public reset packets to be sent again. |
| 371 EXPECT_CALL(writer_, WritePacket(_, _, | 320 EXPECT_CALL(writer_, WritePacket(_, _, |
| 372 server_address_.address(), | 321 server_address_.address(), |
| 373 client_address_, | 322 client_address_, |
| 374 &time_wait_list_manager_)) | 323 &time_wait_list_manager_)) |
| 375 .With(Args<0, 1>(PublicResetPacketEq(guid, | 324 .With(Args<0, 1>(PublicResetPacketEq(guid, |
| 376 sequence_number))) | 325 sequence_number))) |
| 377 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length()))); | 326 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length()))); |
| 378 EXPECT_CALL(writer_, WritePacket(_, _, | 327 EXPECT_CALL(writer_, WritePacket(_, _, |
| 379 server_address_.address(), | 328 server_address_.address(), |
| 380 client_address_, | 329 client_address_, |
| 381 &time_wait_list_manager_)) | 330 &time_wait_list_manager_)) |
| 382 .With(Args<0, 1>(PublicResetPacketEq(other_guid, | 331 .With(Args<0, 1>(PublicResetPacketEq(other_guid, |
| 383 other_sequence_number))) | 332 other_sequence_number))) |
| 384 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, | 333 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, |
| 385 other_packet->length()))); | 334 other_packet->length()))); |
| 386 time_wait_list_manager_.OnCanWrite(); | 335 time_wait_list_manager_.OnCanWrite(); |
| 387 EXPECT_FALSE( | 336 EXPECT_FALSE( |
| 388 QuicTimeWaitListManagerPeer::is_write_blocked(&time_wait_list_manager_)); | 337 QuicTimeWaitListManagerPeer::is_write_blocked(&time_wait_list_manager_)); |
| 389 } | 338 } |
| 390 | 339 |
| 391 TEST_F(QuicTimeWaitListManagerTest, MakeSureFramerUsesCorrectVersion) { | |
| 392 const int kRandomSequenceNumber = 1; | |
| 393 scoped_ptr<QuicEncryptedPacket> packet; | |
| 394 | |
| 395 AddGuid(guid_, net::test::QuicVersionMin(), NULL); | |
| 396 framer_.set_version(net::test::QuicVersionMin()); | |
| 397 packet.reset( | |
| 398 ConstructEncryptedPacket(ENCRYPTION_NONE, guid_, kRandomSequenceNumber)); | |
| 399 | |
| 400 // Reset packet should be written, using the minimum quic version. | |
| 401 EXPECT_CALL(writer_, WritePacket(_, _, _, _, _)).Times(1) | |
| 402 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0))); | |
| 403 ProcessPacket(guid_, *packet); | |
| 404 EXPECT_EQ(QuicTimeWaitListManagerPeer::version(&time_wait_list_manager_), | |
| 405 net::test::QuicVersionMin()); | |
| 406 | |
| 407 // New guid | |
| 408 ++guid_; | |
| 409 | |
| 410 AddGuid(guid_, net::test::QuicVersionMax(), NULL); | |
| 411 framer_.set_version(net::test::QuicVersionMax()); | |
| 412 packet.reset( | |
| 413 ConstructEncryptedPacket(ENCRYPTION_NONE, guid_, kRandomSequenceNumber)); | |
| 414 | |
| 415 // Reset packet should be written, using the maximum quic version. | |
| 416 EXPECT_CALL(writer_, WritePacket(_, _, _, _, _)).Times(1) | |
| 417 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0))); | |
| 418 ProcessPacket(guid_, *packet); | |
| 419 EXPECT_EQ(QuicTimeWaitListManagerPeer::version(&time_wait_list_manager_), | |
| 420 net::test::QuicVersionMax()); | |
| 421 } | |
| 422 | |
| 423 TEST_F(QuicTimeWaitListManagerTest, GetQuicVersionFromMap) { | 340 TEST_F(QuicTimeWaitListManagerTest, GetQuicVersionFromMap) { |
| 424 const int kGuid1 = 123; | 341 const int kGuid1 = 123; |
| 425 const int kGuid2 = 456; | 342 const int kGuid2 = 456; |
| 426 const int kGuid3 = 789; | 343 const int kGuid3 = 789; |
| 427 | 344 |
| 428 AddGuid(kGuid1, net::test::QuicVersionMin(), NULL); | 345 AddGuid(kGuid1, net::test::QuicVersionMin(), NULL); |
| 429 AddGuid(kGuid2, net::test::QuicVersionMax(), NULL); | 346 AddGuid(kGuid2, net::test::QuicVersionMax(), NULL); |
| 430 AddGuid(kGuid3, net::test::QuicVersionMax(), NULL); | 347 AddGuid(kGuid3, net::test::QuicVersionMax(), NULL); |
| 431 | 348 |
| 432 EXPECT_EQ(net::test::QuicVersionMin(), | 349 EXPECT_EQ(net::test::QuicVersionMin(), |
| 433 QuicTimeWaitListManagerPeer::GetQuicVersionFromGuid( | 350 QuicTimeWaitListManagerPeer::GetQuicVersionFromGuid( |
| 434 &time_wait_list_manager_, kGuid1)); | 351 &time_wait_list_manager_, kGuid1)); |
| 435 EXPECT_EQ(net::test::QuicVersionMax(), | 352 EXPECT_EQ(net::test::QuicVersionMax(), |
| 436 QuicTimeWaitListManagerPeer::GetQuicVersionFromGuid( | 353 QuicTimeWaitListManagerPeer::GetQuicVersionFromGuid( |
| 437 &time_wait_list_manager_, kGuid2)); | 354 &time_wait_list_manager_, kGuid2)); |
| 438 EXPECT_EQ(net::test::QuicVersionMax(), | 355 EXPECT_EQ(net::test::QuicVersionMax(), |
| 439 QuicTimeWaitListManagerPeer::GetQuicVersionFromGuid( | 356 QuicTimeWaitListManagerPeer::GetQuicVersionFromGuid( |
| 440 &time_wait_list_manager_, kGuid3)); | 357 &time_wait_list_manager_, kGuid3)); |
| 441 } | 358 } |
| 442 | 359 |
| 443 } // namespace | 360 } // namespace |
| 444 } // namespace test | 361 } // namespace test |
| 445 } // namespace tools | 362 } // namespace tools |
| 446 } // namespace net | 363 } // namespace net |
| OLD | NEW |