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

Side by Side Diff: net/quic/core/quic_crypto_server_stream_test.cc

Issue 2671333004: Convert class-full-of-statics CryptoTestUtils into a namespace (Closed)
Patch Set: Created 3 years, 10 months 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/quic/core/quic_crypto_server_stream.h ('k') | net/quic/core/quic_crypto_stream_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/quic/core/quic_crypto_server_stream.h" 5 #include "net/quic/core/quic_crypto_server_stream.h"
6 6
7 #include <map> 7 #include <map>
8 #include <memory> 8 #include <memory>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 }; 52 };
53 53
54 namespace { 54 namespace {
55 55
56 const char kServerHostname[] = "test.example.com"; 56 const char kServerHostname[] = "test.example.com";
57 const uint16_t kServerPort = 443; 57 const uint16_t kServerPort = 443;
58 58
59 class QuicCryptoServerStreamTest : public ::testing::TestWithParam<bool> { 59 class QuicCryptoServerStreamTest : public ::testing::TestWithParam<bool> {
60 public: 60 public:
61 QuicCryptoServerStreamTest() 61 QuicCryptoServerStreamTest()
62 : QuicCryptoServerStreamTest(CryptoTestUtils::ProofSourceForTesting()) {} 62 : QuicCryptoServerStreamTest(crypto_test_utils::ProofSourceForTesting()) {
63 }
63 64
64 explicit QuicCryptoServerStreamTest(std::unique_ptr<ProofSource> proof_source) 65 explicit QuicCryptoServerStreamTest(std::unique_ptr<ProofSource> proof_source)
65 : server_crypto_config_(QuicCryptoServerConfig::TESTING, 66 : server_crypto_config_(QuicCryptoServerConfig::TESTING,
66 QuicRandom::GetInstance(), 67 QuicRandom::GetInstance(),
67 std::move(proof_source)), 68 std::move(proof_source)),
68 server_compressed_certs_cache_( 69 server_compressed_certs_cache_(
69 QuicCompressedCertsCache::kQuicCompressedCertsCacheSize), 70 QuicCompressedCertsCache::kQuicCompressedCertsCacheSize),
70 server_id_(kServerHostname, kServerPort, PRIVACY_MODE_DISABLED), 71 server_id_(kServerHostname, kServerPort, PRIVACY_MODE_DISABLED),
71 client_crypto_config_(CryptoTestUtils::ProofVerifierForTesting()) { 72 client_crypto_config_(crypto_test_utils::ProofVerifierForTesting()) {
72 FLAGS_quic_reloadable_flag_enable_quic_stateless_reject_support = false; 73 FLAGS_quic_reloadable_flag_enable_quic_stateless_reject_support = false;
73 } 74 }
74 75
75 void Initialize() { InitializeServer(); } 76 void Initialize() { InitializeServer(); }
76 77
77 ~QuicCryptoServerStreamTest() override { 78 ~QuicCryptoServerStreamTest() override {
78 // Ensure that anything that might reference |helpers_| is destroyed before 79 // Ensure that anything that might reference |helpers_| is destroyed before
79 // |helpers_| is destroyed. 80 // |helpers_| is destroyed.
80 server_session_.reset(); 81 server_session_.reset();
81 client_session_.reset(); 82 client_session_.reset();
82 helpers_.clear(); 83 helpers_.clear();
83 alarm_factories_.clear(); 84 alarm_factories_.clear();
84 } 85 }
85 86
86 // Initializes the crypto server stream state for testing. May be 87 // Initializes the crypto server stream state for testing. May be
87 // called multiple times. 88 // called multiple times.
88 void InitializeServer() { 89 void InitializeServer() {
89 TestQuicSpdyServerSession* server_session = nullptr; 90 TestQuicSpdyServerSession* server_session = nullptr;
90 helpers_.push_back(QuicMakeUnique<MockQuicConnectionHelper>()); 91 helpers_.push_back(QuicMakeUnique<MockQuicConnectionHelper>());
91 alarm_factories_.push_back(QuicMakeUnique<MockAlarmFactory>()); 92 alarm_factories_.push_back(QuicMakeUnique<MockAlarmFactory>());
92 CreateServerSessionForTest( 93 CreateServerSessionForTest(
93 server_id_, QuicTime::Delta::FromSeconds(100000), supported_versions_, 94 server_id_, QuicTime::Delta::FromSeconds(100000), supported_versions_,
94 helpers_.back().get(), alarm_factories_.back().get(), 95 helpers_.back().get(), alarm_factories_.back().get(),
95 &server_crypto_config_, &server_compressed_certs_cache_, 96 &server_crypto_config_, &server_compressed_certs_cache_,
96 &server_connection_, &server_session); 97 &server_connection_, &server_session);
97 CHECK(server_session); 98 CHECK(server_session);
98 server_session_.reset(server_session); 99 server_session_.reset(server_session);
99 CryptoTestUtils::FakeServerOptions options; 100 crypto_test_utils::FakeServerOptions options;
100 options.token_binding_params = QuicTagVector{kTB10}; 101 options.token_binding_params = QuicTagVector{kTB10};
101 CryptoTestUtils::SetupCryptoServerConfigForTest( 102 crypto_test_utils::SetupCryptoServerConfigForTest(
102 server_connection_->clock(), server_connection_->random_generator(), 103 server_connection_->clock(), server_connection_->random_generator(),
103 &server_crypto_config_, options); 104 &server_crypto_config_, options);
104 } 105 }
105 106
106 QuicCryptoServerStream* server_stream() { 107 QuicCryptoServerStream* server_stream() {
107 return server_session_->GetCryptoStream(); 108 return server_session_->GetCryptoStream();
108 } 109 }
109 110
110 QuicCryptoClientStream* client_stream() { 111 QuicCryptoClientStream* client_stream() {
111 return client_session_->GetCryptoStream(); 112 return client_session_->GetCryptoStream();
(...skipping 15 matching lines...) Expand all
127 } 128 }
128 129
129 void ConstructHandshakeMessage() { 130 void ConstructHandshakeMessage() {
130 CryptoFramer framer; 131 CryptoFramer framer;
131 message_data_.reset(framer.ConstructHandshakeMessage(message_)); 132 message_data_.reset(framer.ConstructHandshakeMessage(message_));
132 } 133 }
133 134
134 int CompleteCryptoHandshake() { 135 int CompleteCryptoHandshake() {
135 CHECK(server_connection_); 136 CHECK(server_connection_);
136 CHECK(server_session_ != nullptr); 137 CHECK(server_session_ != nullptr);
137 return CryptoTestUtils::HandshakeWithFakeClient( 138 return crypto_test_utils::HandshakeWithFakeClient(
138 helpers_.back().get(), alarm_factories_.back().get(), 139 helpers_.back().get(), alarm_factories_.back().get(),
139 server_connection_, server_stream(), server_id_, client_options_); 140 server_connection_, server_stream(), server_id_, client_options_);
140 } 141 }
141 142
142 // Performs a single round of handshake message-exchange between the 143 // Performs a single round of handshake message-exchange between the
143 // client and server. 144 // client and server.
144 void AdvanceHandshakeWithFakeClient() { 145 void AdvanceHandshakeWithFakeClient() {
145 CHECK(server_connection_); 146 CHECK(server_connection_);
146 CHECK(client_session_ != nullptr); 147 CHECK(client_session_ != nullptr);
147 148
148 EXPECT_CALL(*client_session_, OnProofValid(_)).Times(testing::AnyNumber()); 149 EXPECT_CALL(*client_session_, OnProofValid(_)).Times(testing::AnyNumber());
149 client_stream()->CryptoConnect(); 150 client_stream()->CryptoConnect();
150 CryptoTestUtils::AdvanceHandshake(client_connection_, client_stream(), 0, 151 crypto_test_utils::AdvanceHandshake(client_connection_, client_stream(), 0,
151 server_connection_, server_stream(), 0); 152 server_connection_, server_stream(), 0);
152 } 153 }
153 154
154 protected: 155 protected:
155 QuicFlagSaver flags_; // Save/restore all QUIC flag values. 156 QuicFlagSaver flags_; // Save/restore all QUIC flag values.
156 157
157 // Every connection gets its own MockQuicConnectionHelper and 158 // Every connection gets its own MockQuicConnectionHelper and
158 // MockAlarmFactory, tracked separately from the server and client state so 159 // MockAlarmFactory, tracked separately from the server and client state so
159 // their lifetimes persist through the whole test. 160 // their lifetimes persist through the whole test.
160 std::vector<std::unique_ptr<MockQuicConnectionHelper>> helpers_; 161 std::vector<std::unique_ptr<MockQuicConnectionHelper>> helpers_;
161 std::vector<std::unique_ptr<MockAlarmFactory>> alarm_factories_; 162 std::vector<std::unique_ptr<MockAlarmFactory>> alarm_factories_;
162 163
163 // Server state. 164 // Server state.
164 PacketSavingConnection* server_connection_; 165 PacketSavingConnection* server_connection_;
165 std::unique_ptr<TestQuicSpdyServerSession> server_session_; 166 std::unique_ptr<TestQuicSpdyServerSession> server_session_;
166 QuicCryptoServerConfig server_crypto_config_; 167 QuicCryptoServerConfig server_crypto_config_;
167 QuicCompressedCertsCache server_compressed_certs_cache_; 168 QuicCompressedCertsCache server_compressed_certs_cache_;
168 QuicServerId server_id_; 169 QuicServerId server_id_;
169 170
170 // Client state. 171 // Client state.
171 PacketSavingConnection* client_connection_; 172 PacketSavingConnection* client_connection_;
172 QuicCryptoClientConfig client_crypto_config_; 173 QuicCryptoClientConfig client_crypto_config_;
173 std::unique_ptr<TestQuicSpdyClientSession> client_session_; 174 std::unique_ptr<TestQuicSpdyClientSession> client_session_;
174 175
175 CryptoHandshakeMessage message_; 176 CryptoHandshakeMessage message_;
176 std::unique_ptr<QuicData> message_data_; 177 std::unique_ptr<QuicData> message_data_;
177 CryptoTestUtils::FakeClientOptions client_options_; 178 crypto_test_utils::FakeClientOptions client_options_;
178 179
179 // Which QUIC versions the client and server support. 180 // Which QUIC versions the client and server support.
180 QuicVersionVector supported_versions_ = AllSupportedVersions(); 181 QuicVersionVector supported_versions_ = AllSupportedVersions();
181 }; 182 };
182 183
183 INSTANTIATE_TEST_CASE_P(Tests, QuicCryptoServerStreamTest, testing::Bool()); 184 INSTANTIATE_TEST_CASE_P(Tests, QuicCryptoServerStreamTest, testing::Bool());
184 185
185 TEST_P(QuicCryptoServerStreamTest, NotInitiallyConected) { 186 TEST_P(QuicCryptoServerStreamTest, NotInitiallyConected) {
186 Initialize(); 187 Initialize();
187 EXPECT_FALSE(server_stream()->encryption_established()); 188 EXPECT_FALSE(server_stream()->encryption_established());
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 // information. 333 // information.
333 AdvanceHandshakeWithFakeClient(); 334 AdvanceHandshakeWithFakeClient();
334 335
335 // Now do another handshake, hopefully in 0-RTT. 336 // Now do another handshake, hopefully in 0-RTT.
336 QUIC_LOG(INFO) << "Resetting for 0-RTT handshake attempt"; 337 QUIC_LOG(INFO) << "Resetting for 0-RTT handshake attempt";
337 InitializeFakeClient(/* supports_stateless_rejects= */ false); 338 InitializeFakeClient(/* supports_stateless_rejects= */ false);
338 InitializeServer(); 339 InitializeServer();
339 340
340 client_stream()->CryptoConnect(); 341 client_stream()->CryptoConnect();
341 342
342 CryptoTestUtils::CommunicateHandshakeMessages( 343 crypto_test_utils::CommunicateHandshakeMessages(
343 client_connection_, client_stream(), server_connection_, server_stream()); 344 client_connection_, client_stream(), server_connection_, server_stream());
344 345
345 EXPECT_EQ(1, client_stream()->num_sent_client_hellos()); 346 EXPECT_EQ(1, client_stream()->num_sent_client_hellos());
346 } 347 }
347 348
348 TEST_P(QuicCryptoServerStreamTest, FailByPolicy) { 349 TEST_P(QuicCryptoServerStreamTest, FailByPolicy) {
349 Initialize(); 350 Initialize();
350 InitializeFakeClient(/* supports_stateless_rejects= */ false); 351 InitializeFakeClient(/* supports_stateless_rejects= */ false);
351 352
352 EXPECT_CALL(*server_session_->helper(), CanAcceptClientHello(_, _, _)) 353 EXPECT_CALL(*server_session_->helper(), CanAcceptClientHello(_, _, _))
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 // An attempt to send a SCUP before completing handshake should fail. 411 // An attempt to send a SCUP before completing handshake should fail.
411 Initialize(); 412 Initialize();
412 413
413 server_stream()->SendServerConfigUpdate(nullptr); 414 server_stream()->SendServerConfigUpdate(nullptr);
414 EXPECT_EQ(0, server_stream()->NumServerConfigUpdateMessagesSent()); 415 EXPECT_EQ(0, server_stream()->NumServerConfigUpdateMessagesSent());
415 } 416 }
416 417
417 TEST_P(QuicCryptoServerStreamTest, SendSCUPAfterHandshakeComplete) { 418 TEST_P(QuicCryptoServerStreamTest, SendSCUPAfterHandshakeComplete) {
418 // Do not send MAX_HEADER_LIST_SIZE SETTING frame. 419 // Do not send MAX_HEADER_LIST_SIZE SETTING frame.
419 // TODO(fayang): This SETTING frame cannot be decrypted and 420 // TODO(fayang): This SETTING frame cannot be decrypted and
420 // CryptoTestUtils::MovePackets stops processing parsing following packets. 421 // crypto_test_utils::MovePackets stops processing parsing following packets.
421 // Actually, crypto stream test should use QuicSession instead of 422 // Actually, crypto stream test should use QuicSession instead of
422 // QuicSpdySession (b/32366134). 423 // QuicSpdySession (b/32366134).
423 FLAGS_quic_reloadable_flag_quic_send_max_header_list_size = false; 424 FLAGS_quic_reloadable_flag_quic_send_max_header_list_size = false;
424 Initialize(); 425 Initialize();
425 426
426 InitializeFakeClient(/* supports_stateless_rejects= */ false); 427 InitializeFakeClient(/* supports_stateless_rejects= */ false);
427 428
428 // Do a first handshake in order to prime the client config with the server's 429 // Do a first handshake in order to prime the client config with the server's
429 // information. 430 // information.
430 AdvanceHandshakeWithFakeClient(); 431 AdvanceHandshakeWithFakeClient();
431 432
432 // Now do another handshake, with the blocking SHLO connection option. 433 // Now do another handshake, with the blocking SHLO connection option.
433 InitializeServer(); 434 InitializeServer();
434 InitializeFakeClient(/* supports_stateless_rejects= */ false); 435 InitializeFakeClient(/* supports_stateless_rejects= */ false);
435 AdvanceHandshakeWithFakeClient(); 436 AdvanceHandshakeWithFakeClient();
436 437
437 // Send a SCUP message and ensure that the client was able to verify it. 438 // Send a SCUP message and ensure that the client was able to verify it.
438 EXPECT_CALL(*client_connection_, CloseConnection(_, _, _)).Times(0); 439 EXPECT_CALL(*client_connection_, CloseConnection(_, _, _)).Times(0);
439 server_stream()->SendServerConfigUpdate(nullptr); 440 server_stream()->SendServerConfigUpdate(nullptr);
440 CryptoTestUtils::AdvanceHandshake(client_connection_, client_stream(), 1, 441 crypto_test_utils::AdvanceHandshake(client_connection_, client_stream(), 1,
441 server_connection_, server_stream(), 1); 442 server_connection_, server_stream(), 1);
442 443
443 EXPECT_EQ(1, server_stream()->NumServerConfigUpdateMessagesSent()); 444 EXPECT_EQ(1, server_stream()->NumServerConfigUpdateMessagesSent());
444 EXPECT_EQ(1, client_stream()->num_scup_messages_received()); 445 EXPECT_EQ(1, client_stream()->num_scup_messages_received());
445 } 446 }
446 447
447 TEST_P(QuicCryptoServerStreamTest, DoesPeerSupportStatelessRejects) { 448 TEST_P(QuicCryptoServerStreamTest, DoesPeerSupportStatelessRejects) {
448 Initialize(); 449 Initialize();
449 450
450 ConstructHandshakeMessage(); 451 ConstructHandshakeMessage();
451 QuicConfig stateless_reject_config = DefaultQuicConfigStatelessRejects(); 452 QuicConfig stateless_reject_config = DefaultQuicConfigStatelessRejects();
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 501
501 // Regression test for b/31521252, in which a crash would happen here. 502 // Regression test for b/31521252, in which a crash would happen here.
502 AdvanceHandshakeWithFakeClient(); 503 AdvanceHandshakeWithFakeClient();
503 EXPECT_FALSE(server_stream()->encryption_established()); 504 EXPECT_FALSE(server_stream()->encryption_established());
504 EXPECT_FALSE(server_stream()->handshake_confirmed()); 505 EXPECT_FALSE(server_stream()->handshake_confirmed());
505 } 506 }
506 507
507 } // namespace 508 } // namespace
508 } // namespace test 509 } // namespace test
509 } // namespace net 510 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_crypto_server_stream.h ('k') | net/quic/core/quic_crypto_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698