Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(366)

Side by Side Diff: net/tools/quic/quic_dispatcher_test.cc

Issue 2516033003: Landing Recent QUIC changes until Mon Nov 14 04:43:50 2016 +0000 (Closed)
Patch Set: Remove unused UpdatePacketGapSentHistogram() function. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/tools/quic/quic_dispatcher.cc ('k') | net/tools/quic/quic_in_memory_cache_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/tools/quic/quic_dispatcher.h" 5 #include "net/tools/quic/quic_dispatcher.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <ostream> 8 #include <ostream>
9 #include <string> 9 #include <string>
10 10
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _, _)) 530 EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _, _))
531 .Times(1); 531 .Times(1);
532 // A packet whose packet number is one to large to be allowed to start a 532 // A packet whose packet number is one to large to be allowed to start a
533 // connection. 533 // connection.
534 ProcessPacket(client_address, connection_id, true, false, SerializeCHLO(), 534 ProcessPacket(client_address, connection_id, true, false, SerializeCHLO(),
535 PACKET_8BYTE_CONNECTION_ID, PACKET_6BYTE_PACKET_NUMBER, 535 PACKET_8BYTE_CONNECTION_ID, PACKET_6BYTE_PACKET_NUMBER,
536 kDefaultPathId, 536 kDefaultPathId,
537 QuicDispatcher::kMaxReasonableInitialPacketNumber + 1); 537 QuicDispatcher::kMaxReasonableInitialPacketNumber + 1);
538 } 538 }
539 539
540 TEST_F(QuicDispatcherTest, SupportedVersionsChangeInFlight) {
541 DCHECK_EQ(3u, arraysize(kSupportedQuicVersions));
542 FLAGS_quic_fix_version_manager = true;
543 FLAGS_quic_enable_version_36_v3 = true;
544 IPEndPoint client_address(Loopback4(), 1);
545 server_address_ = IPEndPoint(Any4(), 5);
546 QuicConnectionId connection_id = 1;
547
548 EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address))
549 .Times(0);
550 ProcessPacket(client_address, connection_id, true,
551 static_cast<QuicVersion>(QuicVersionMin() - 1), SerializeCHLO(),
552 PACKET_8BYTE_CONNECTION_ID, PACKET_6BYTE_PACKET_NUMBER, 1);
553 ++connection_id;
554 EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address))
555 .WillOnce(testing::Return(CreateSession(
556 dispatcher_.get(), config_, connection_id, client_address,
557 &mock_helper_, &mock_alarm_factory_, &crypto_config_,
558 QuicDispatcherPeer::GetCache(dispatcher_.get()), &session1_)));
559 EXPECT_CALL(*reinterpret_cast<MockQuicConnection*>(session1_->connection()),
560 ProcessUdpPacket(_, _, _))
561 .WillOnce(testing::WithArgs<2>(
562 Invoke(CreateFunctor(&QuicDispatcherTest::ValidatePacket,
563 base::Unretained(this), connection_id))));
564 ProcessPacket(client_address, connection_id, true, QuicVersionMin(),
565 SerializeCHLO(), PACKET_8BYTE_CONNECTION_ID,
566 PACKET_6BYTE_PACKET_NUMBER, 1);
567 ++connection_id;
568 EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address))
569 .WillOnce(testing::Return(CreateSession(
570 dispatcher_.get(), config_, connection_id, client_address,
571 &mock_helper_, &mock_alarm_factory_, &crypto_config_,
572 QuicDispatcherPeer::GetCache(dispatcher_.get()), &session1_)));
573 EXPECT_CALL(*reinterpret_cast<MockQuicConnection*>(session1_->connection()),
574 ProcessUdpPacket(_, _, _))
575 .WillOnce(testing::WithArgs<2>(
576 Invoke(CreateFunctor(&QuicDispatcherTest::ValidatePacket,
577 base::Unretained(this), connection_id))));
578 ProcessPacket(client_address, connection_id, true, QuicVersionMax(),
579 SerializeCHLO(), PACKET_8BYTE_CONNECTION_ID,
580 PACKET_6BYTE_PACKET_NUMBER, 1);
581 // Turn off version 36.
582 FLAGS_quic_enable_version_36_v3 = false;
583 ++connection_id;
584 EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address))
585 .Times(0);
586 ProcessPacket(client_address, connection_id, true, QUIC_VERSION_36,
587 SerializeCHLO(), PACKET_8BYTE_CONNECTION_ID,
588 PACKET_6BYTE_PACKET_NUMBER, 1);
589
590 // Turn on version 36.
591 FLAGS_quic_enable_version_36_v3 = true;
592 ++connection_id;
593 EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address))
594 .WillOnce(testing::Return(CreateSession(
595 dispatcher_.get(), config_, connection_id, client_address,
596 &mock_helper_, &mock_alarm_factory_, &crypto_config_,
597 QuicDispatcherPeer::GetCache(dispatcher_.get()), &session1_)));
598 EXPECT_CALL(*reinterpret_cast<MockQuicConnection*>(session1_->connection()),
599 ProcessUdpPacket(_, _, _))
600 .WillOnce(testing::WithArgs<2>(
601 Invoke(CreateFunctor(&QuicDispatcherTest::ValidatePacket,
602 base::Unretained(this), connection_id))));
603 ProcessPacket(client_address, connection_id, true, QUIC_VERSION_35,
604 SerializeCHLO(), PACKET_8BYTE_CONNECTION_ID,
605 PACKET_6BYTE_PACKET_NUMBER, 1);
606 }
607
540 // Enables mocking of the handshake-confirmation for stateless rejects. 608 // Enables mocking of the handshake-confirmation for stateless rejects.
541 class MockQuicCryptoServerStream : public QuicCryptoServerStream { 609 class MockQuicCryptoServerStream : public QuicCryptoServerStream {
542 public: 610 public:
543 MockQuicCryptoServerStream(const QuicCryptoServerConfig& crypto_config, 611 MockQuicCryptoServerStream(const QuicCryptoServerConfig& crypto_config,
544 QuicCompressedCertsCache* compressed_certs_cache, 612 QuicCompressedCertsCache* compressed_certs_cache,
545 QuicServerSessionBase* session, 613 QuicServerSessionBase* session,
546 QuicCryptoServerStream::Helper* helper) 614 QuicCryptoServerStream::Helper* helper)
547 : QuicCryptoServerStream(&crypto_config, 615 : QuicCryptoServerStream(&crypto_config,
548 compressed_certs_cache, 616 compressed_certs_cache,
549 FLAGS_enable_quic_stateless_reject_support, 617 FLAGS_enable_quic_stateless_reject_support,
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
1057 } 1125 }
1058 1126
1059 // A dispatcher whose stateless rejector will always ACCEPTs CHLO. 1127 // A dispatcher whose stateless rejector will always ACCEPTs CHLO.
1060 class BufferedPacketStoreTest 1128 class BufferedPacketStoreTest
1061 : public QuicDispatcherTest, 1129 : public QuicDispatcherTest,
1062 public ::testing::WithParamInterface<BufferedPacketStoreTestParams> { 1130 public ::testing::WithParamInterface<BufferedPacketStoreTestParams> {
1063 public: 1131 public:
1064 BufferedPacketStoreTest() 1132 BufferedPacketStoreTest()
1065 : QuicDispatcherTest(), 1133 : QuicDispatcherTest(),
1066 client_addr_(Loopback4(), 1234), 1134 client_addr_(Loopback4(), 1234),
1067 proof_(new QuicCryptoProof) { 1135 signed_config_(new QuicSignedServerConfig) {
1068 FLAGS_quic_use_cheap_stateless_rejects = 1136 FLAGS_quic_use_cheap_stateless_rejects =
1069 GetParam().support_cheap_stateless_reject; 1137 GetParam().support_cheap_stateless_reject;
1070 FLAGS_enable_quic_stateless_reject_support = 1138 FLAGS_enable_quic_stateless_reject_support =
1071 GetParam().enable_stateless_rejects_via_flag; 1139 GetParam().enable_stateless_rejects_via_flag;
1072 } 1140 }
1073 1141
1074 void SetUp() override { 1142 void SetUp() override {
1075 QuicDispatcherTest::SetUp(); 1143 QuicDispatcherTest::SetUp();
1076 clock_ = QuicDispatcherPeer::GetHelper(dispatcher_.get())->GetClock(); 1144 clock_ = QuicDispatcherPeer::GetHelper(dispatcher_.get())->GetClock();
1077 1145
1078 QuicVersion version = AllSupportedVersions().front(); 1146 QuicVersion version = AllSupportedVersions().front();
1079 CryptoHandshakeMessage chlo = CryptoTestUtils::GenerateDefaultInchoateCHLO( 1147 CryptoHandshakeMessage chlo = CryptoTestUtils::GenerateDefaultInchoateCHLO(
1080 clock_, version, &crypto_config_); 1148 clock_, version, &crypto_config_);
1081 chlo.SetVector(net::kCOPT, net::QuicTagVector{net::kSREJ}); 1149 chlo.SetVector(net::kCOPT, net::QuicTagVector{net::kSREJ});
1082 // Pass an inchoate CHLO. 1150 // Pass an inchoate CHLO.
1083 CryptoTestUtils::GenerateFullCHLO( 1151 CryptoTestUtils::GenerateFullCHLO(
1084 chlo, &crypto_config_, server_ip_, client_addr_, version, clock_, 1152 chlo, &crypto_config_, server_ip_, client_addr_, version, clock_,
1085 proof_, QuicDispatcherPeer::GetCache(dispatcher_.get()), &full_chlo_); 1153 signed_config_, QuicDispatcherPeer::GetCache(dispatcher_.get()),
1154 &full_chlo_);
1086 } 1155 }
1087 1156
1088 string SerializeFullCHLO() { 1157 string SerializeFullCHLO() {
1089 return full_chlo_.GetSerialized().AsStringPiece().as_string(); 1158 return full_chlo_.GetSerialized().AsStringPiece().as_string();
1090 } 1159 }
1091 1160
1092 protected: 1161 protected:
1093 IPAddress server_ip_; 1162 IPAddress server_ip_;
1094 IPEndPoint client_addr_; 1163 IPEndPoint client_addr_;
1095 scoped_refptr<QuicCryptoProof> proof_; 1164 scoped_refptr<QuicSignedServerConfig> signed_config_;
1096 const QuicClock* clock_; 1165 const QuicClock* clock_;
1097 CryptoHandshakeMessage full_chlo_; 1166 CryptoHandshakeMessage full_chlo_;
1098 }; 1167 };
1099 1168
1100 INSTANTIATE_TEST_CASE_P( 1169 INSTANTIATE_TEST_CASE_P(
1101 BufferedPacketStoreTests, 1170 BufferedPacketStoreTests,
1102 BufferedPacketStoreTest, 1171 BufferedPacketStoreTest,
1103 ::testing::ValuesIn(GetBufferedPacketStoreTestParams())); 1172 ::testing::ValuesIn(GetBufferedPacketStoreTestParams()));
1104 1173
1105 TEST_P(BufferedPacketStoreTest, ProcessNonChloPacketsUptoLimitAndProcessChlo) { 1174 TEST_P(BufferedPacketStoreTest, ProcessNonChloPacketsUptoLimitAndProcessChlo) {
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
1505 1574
1506 // Test which exercises the async GetProof codepaths, especially in the context 1575 // Test which exercises the async GetProof codepaths, especially in the context
1507 // of stateless rejection. 1576 // of stateless rejection.
1508 class AsyncGetProofTest : public QuicDispatcherTest { 1577 class AsyncGetProofTest : public QuicDispatcherTest {
1509 public: 1578 public:
1510 AsyncGetProofTest() 1579 AsyncGetProofTest()
1511 : QuicDispatcherTest( 1580 : QuicDispatcherTest(
1512 std::unique_ptr<FakeProofSource>(new FakeProofSource())), 1581 std::unique_ptr<FakeProofSource>(new FakeProofSource())),
1513 client_addr_(net::test::Loopback4(), 1234), 1582 client_addr_(net::test::Loopback4(), 1234),
1514 crypto_config_peer_(&crypto_config_), 1583 crypto_config_peer_(&crypto_config_),
1515 proof_(new QuicCryptoProof) { 1584 signed_config_(new QuicSignedServerConfig) {
1516 FLAGS_enable_async_get_proof = true; 1585 FLAGS_enable_async_get_proof = true;
1517 FLAGS_enable_quic_stateless_reject_support = true; 1586 FLAGS_enable_quic_stateless_reject_support = true;
1518 FLAGS_quic_use_cheap_stateless_rejects = true; 1587 FLAGS_quic_use_cheap_stateless_rejects = true;
1519 FLAGS_quic_create_session_after_insertion = true; 1588 FLAGS_quic_create_session_after_insertion = true;
1520 } 1589 }
1521 1590
1522 void SetUp() override { 1591 void SetUp() override {
1523 QuicDispatcherTest::SetUp(); 1592 QuicDispatcherTest::SetUp();
1524 1593
1525 clock_ = QuicDispatcherPeer::GetHelper(dispatcher_.get())->GetClock(); 1594 clock_ = QuicDispatcherPeer::GetHelper(dispatcher_.get())->GetClock();
1526 QuicVersion version = AllSupportedVersions().front(); 1595 QuicVersion version = AllSupportedVersions().front();
1527 chlo_ = CryptoTestUtils::GenerateDefaultInchoateCHLO(clock_, version, 1596 chlo_ = CryptoTestUtils::GenerateDefaultInchoateCHLO(clock_, version,
1528 &crypto_config_); 1597 &crypto_config_);
1529 chlo_.SetVector(net::kCOPT, net::QuicTagVector{net::kSREJ}); 1598 chlo_.SetVector(net::kCOPT, net::QuicTagVector{net::kSREJ});
1530 // Pass an inchoate CHLO. 1599 // Pass an inchoate CHLO.
1531 CryptoTestUtils::GenerateFullCHLO( 1600 CryptoTestUtils::GenerateFullCHLO(
1532 chlo_, &crypto_config_, server_ip_, client_addr_, version, clock_, 1601 chlo_, &crypto_config_, server_ip_, client_addr_, version, clock_,
1533 proof_, QuicDispatcherPeer::GetCache(dispatcher_.get()), &full_chlo_); 1602 signed_config_, QuicDispatcherPeer::GetCache(dispatcher_.get()),
1603 &full_chlo_);
1534 1604
1535 GetFakeProofSource()->Activate(); 1605 GetFakeProofSource()->Activate();
1536 } 1606 }
1537 1607
1538 FakeProofSource* GetFakeProofSource() const { 1608 FakeProofSource* GetFakeProofSource() const {
1539 return static_cast<FakeProofSource*>(crypto_config_peer_.GetProofSource()); 1609 return static_cast<FakeProofSource*>(crypto_config_peer_.GetProofSource());
1540 } 1610 }
1541 1611
1542 string SerializeFullCHLO() { 1612 string SerializeFullCHLO() {
1543 return full_chlo_.GetSerialized().AsStringPiece().as_string(); 1613 return full_chlo_.GetSerialized().AsStringPiece().as_string();
(...skipping 29 matching lines...) Expand all
1573 CHECK(ok); 1643 CHECK(ok);
1574 return session; 1644 return session;
1575 } 1645 }
1576 1646
1577 protected: 1647 protected:
1578 const IPEndPoint client_addr_; 1648 const IPEndPoint client_addr_;
1579 1649
1580 private: 1650 private:
1581 QuicCryptoServerConfigPeer crypto_config_peer_; 1651 QuicCryptoServerConfigPeer crypto_config_peer_;
1582 IPAddress server_ip_; 1652 IPAddress server_ip_;
1583 scoped_refptr<QuicCryptoProof> proof_; 1653 scoped_refptr<QuicSignedServerConfig> signed_config_;
1584 const QuicClock* clock_; 1654 const QuicClock* clock_;
1585 CryptoHandshakeMessage chlo_; 1655 CryptoHandshakeMessage chlo_;
1586 CryptoHandshakeMessage full_chlo_; 1656 CryptoHandshakeMessage full_chlo_;
1587 1657
1588 struct SessionInfo { 1658 struct SessionInfo {
1589 TestQuicSpdyServerSession* session; 1659 TestQuicSpdyServerSession* session;
1590 std::unique_ptr<MockQuicCryptoServerStream> crypto_stream; 1660 std::unique_ptr<MockQuicCryptoServerStream> crypto_stream;
1591 }; 1661 };
1592 std::map<QuicConnectionId, SessionInfo> sessions_; 1662 std::map<QuicConnectionId, SessionInfo> sessions_;
1593 }; 1663 };
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
1984 check.Call(2); 2054 check.Call(2);
1985 GetFakeProofSource()->InvokePendingCallback(0); 2055 GetFakeProofSource()->InvokePendingCallback(0);
1986 ASSERT_EQ(GetFakeProofSource()->NumPendingCallbacks(), 0); 2056 ASSERT_EQ(GetFakeProofSource()->NumPendingCallbacks(), 0);
1987 EXPECT_FALSE(store->HasBufferedPackets(conn_id)); 2057 EXPECT_FALSE(store->HasBufferedPackets(conn_id));
1988 EXPECT_FALSE(time_wait_list_manager_->IsConnectionIdInTimeWait(conn_id)); 2058 EXPECT_FALSE(time_wait_list_manager_->IsConnectionIdInTimeWait(conn_id));
1989 } 2059 }
1990 2060
1991 } // namespace 2061 } // namespace
1992 } // namespace test 2062 } // namespace test
1993 } // namespace net 2063 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/quic_dispatcher.cc ('k') | net/tools/quic/quic_in_memory_cache_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698