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

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

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
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/quic_crypto_server_stream.h" 5 #include "net/quic/quic_crypto_server_stream.h"
6 6
7 #include <map> 7 #include <map>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 session_.config()->SetDefaults(); 65 session_.config()->SetDefaults();
66 session_.SetCryptoStream(&stream_); 66 session_.SetCryptoStream(&stream_);
67 // We advance the clock initially because the default time is zero and the 67 // We advance the clock initially because the default time is zero and the
68 // strike register worries that we've just overflowed a uint32 time. 68 // strike register worries that we've just overflowed a uint32 time.
69 connection_->AdvanceTime(QuicTime::Delta::FromSeconds(100000)); 69 connection_->AdvanceTime(QuicTime::Delta::FromSeconds(100000));
70 // TODO(rtenneti): Enable testing of ProofSource. 70 // TODO(rtenneti): Enable testing of ProofSource.
71 // crypto_config_.SetProofSource(CryptoTestUtils::ProofSourceForTesting()); 71 // crypto_config_.SetProofSource(CryptoTestUtils::ProofSourceForTesting());
72 crypto_config_.set_strike_register_no_startup_period(); 72 crypto_config_.set_strike_register_no_startup_period();
73 73
74 CryptoTestUtils::SetupCryptoServerConfigForTest( 74 CryptoTestUtils::SetupCryptoServerConfigForTest(
75 connection_->clock(), connection_->random_generator(), 75 connection_->clock(),
76 session_.config(), &crypto_config_); 76 connection_->random_generator(),
77 session_.config(),
78 &crypto_config_);
77 79
78 if (AsyncStrikeRegisterVerification()) { 80 if (AsyncStrikeRegisterVerification()) {
79 string orbit = 81 string orbit =
80 QuicCryptoServerConfigPeer::GetPrimaryOrbit(crypto_config_); 82 QuicCryptoServerConfigPeer::GetPrimaryOrbit(crypto_config_);
81 strike_register_client_ = new DelayedVerifyStrikeRegisterClient( 83 strike_register_client_ = new DelayedVerifyStrikeRegisterClient(
82 10000, // strike_register_max_entries 84 10000, // strike_register_max_entries
83 static_cast<uint32>(connection_->clock()->WallNow().ToUNIXSeconds()), 85 static_cast<uint32>(connection_->clock()->WallNow().ToUNIXSeconds()),
84 60, // strike_register_window_secs 86 60, // strike_register_window_secs
85 reinterpret_cast<const uint8 *>(orbit.data()), 87 reinterpret_cast<const uint8*>(orbit.data()),
86 StrikeRegister::NO_STARTUP_PERIOD_NEEDED); 88 StrikeRegister::NO_STARTUP_PERIOD_NEEDED);
87 strike_register_client_->StartDelayingVerification(); 89 strike_register_client_->StartDelayingVerification();
88 crypto_config_.SetStrikeRegisterClient(strike_register_client_); 90 crypto_config_.SetStrikeRegisterClient(strike_register_client_);
89 } 91 }
90 } 92 }
91 93
92 bool AsyncStrikeRegisterVerification() { 94 bool AsyncStrikeRegisterVerification() { return GetParam(); }
93 return GetParam();
94 }
95 95
96 void ConstructHandshakeMessage() { 96 void ConstructHandshakeMessage() {
97 CryptoFramer framer; 97 CryptoFramer framer;
98 message_data_.reset(framer.ConstructHandshakeMessage(message_)); 98 message_data_.reset(framer.ConstructHandshakeMessage(message_));
99 } 99 }
100 100
101 int CompleteCryptoHandshake() { 101 int CompleteCryptoHandshake() {
102 return CryptoTestUtils::HandshakeWithFakeClient(connection_, &stream_, 102 return CryptoTestUtils::HandshakeWithFakeClient(
103 client_options_); 103 connection_, &stream_, client_options_);
104 } 104 }
105 105
106 protected: 106 protected:
107 PacketSavingConnection* connection_; 107 PacketSavingConnection* connection_;
108 TestClientSession session_; 108 TestClientSession session_;
109 QuicConfig config_; 109 QuicConfig config_;
110 QuicCryptoServerConfig crypto_config_; 110 QuicCryptoServerConfig crypto_config_;
111 QuicCryptoServerStream stream_; 111 QuicCryptoServerStream stream_;
112 CryptoHandshakeMessage message_; 112 CryptoHandshakeMessage message_;
113 scoped_ptr<QuicData> message_data_; 113 scoped_ptr<QuicData> message_data_;
(...skipping 24 matching lines...) Expand all
138 client_conn->AdvanceTime(QuicTime::Delta::FromSeconds(100000)); 138 client_conn->AdvanceTime(QuicTime::Delta::FromSeconds(100000));
139 server_conn->AdvanceTime(QuicTime::Delta::FromSeconds(100000)); 139 server_conn->AdvanceTime(QuicTime::Delta::FromSeconds(100000));
140 140
141 QuicConfig client_config; 141 QuicConfig client_config;
142 client_config.SetDefaults(); 142 client_config.SetDefaults();
143 scoped_ptr<TestClientSession> client_session( 143 scoped_ptr<TestClientSession> client_session(
144 new TestClientSession(client_conn, client_config)); 144 new TestClientSession(client_conn, client_config));
145 QuicCryptoClientConfig client_crypto_config; 145 QuicCryptoClientConfig client_crypto_config;
146 client_crypto_config.SetDefaults(); 146 client_crypto_config.SetDefaults();
147 147
148 QuicServerId server_id(kServerHostname, kServerPort, false, 148 QuicServerId server_id(
149 PRIVACY_MODE_DISABLED); 149 kServerHostname, kServerPort, false, PRIVACY_MODE_DISABLED);
150 scoped_ptr<QuicCryptoClientStream> client(new QuicCryptoClientStream( 150 scoped_ptr<QuicCryptoClientStream> client(new QuicCryptoClientStream(
151 server_id, client_session.get(), NULL, &client_crypto_config)); 151 server_id, client_session.get(), NULL, &client_crypto_config));
152 client_session->SetCryptoStream(client.get()); 152 client_session->SetCryptoStream(client.get());
153 153
154 // Do a first handshake in order to prime the client config with the server's 154 // Do a first handshake in order to prime the client config with the server's
155 // information. 155 // information.
156 CHECK(client->CryptoConnect()); 156 CHECK(client->CryptoConnect());
157 CHECK_EQ(1u, client_conn->packets_.size()); 157 CHECK_EQ(1u, client_conn->packets_.size());
158 158
159 scoped_ptr<TestSession> server_session(new TestSession(server_conn, config_)); 159 scoped_ptr<TestSession> server_session(new TestSession(server_conn, config_));
(...skipping 17 matching lines...) Expand all
177 177
178 // This causes the client's nonce to be different and thus stops the 178 // This causes the client's nonce to be different and thus stops the
179 // strike-register from rejecting the repeated nonce. 179 // strike-register from rejecting the repeated nonce.
180 reinterpret_cast<MockRandom*>(client_conn->random_generator())->ChangeValue(); 180 reinterpret_cast<MockRandom*>(client_conn->random_generator())->ChangeValue();
181 client_session.reset(new TestClientSession(client_conn, client_config)); 181 client_session.reset(new TestClientSession(client_conn, client_config));
182 server_session.reset(new TestSession(server_conn, config_)); 182 server_session.reset(new TestSession(server_conn, config_));
183 client.reset(new QuicCryptoClientStream( 183 client.reset(new QuicCryptoClientStream(
184 server_id, client_session.get(), NULL, &client_crypto_config)); 184 server_id, client_session.get(), NULL, &client_crypto_config));
185 client_session->SetCryptoStream(client.get()); 185 client_session->SetCryptoStream(client.get());
186 186
187 server.reset(new QuicCryptoServerStream(crypto_config_, 187 server.reset(
188 server_session.get())); 188 new QuicCryptoServerStream(crypto_config_, server_session.get()));
189 server_session->SetCryptoStream(server.get()); 189 server_session->SetCryptoStream(server.get());
190 190
191 CHECK(client->CryptoConnect()); 191 CHECK(client->CryptoConnect());
192 192
193 if (AsyncStrikeRegisterVerification()) { 193 if (AsyncStrikeRegisterVerification()) {
194 EXPECT_FALSE(client->handshake_confirmed()); 194 EXPECT_FALSE(client->handshake_confirmed());
195 EXPECT_FALSE(server->handshake_confirmed()); 195 EXPECT_FALSE(server->handshake_confirmed());
196 196
197 // Advance the handshake. Expect that the server will be stuck 197 // Advance the handshake. Expect that the server will be stuck
198 // waiting for client nonce verification to complete. 198 // waiting for client nonce verification to complete.
199 pair<size_t, size_t> messages_moved = CryptoTestUtils::AdvanceHandshake( 199 pair<size_t, size_t> messages_moved = CryptoTestUtils::AdvanceHandshake(
200 client_conn, client.get(), 0, server_conn, server.get(), 0); 200 client_conn, client.get(), 0, server_conn, server.get(), 0);
201 EXPECT_EQ(1u, messages_moved.first); 201 EXPECT_EQ(1u, messages_moved.first);
202 EXPECT_EQ(0u, messages_moved.second); 202 EXPECT_EQ(0u, messages_moved.second);
203 EXPECT_EQ(1, strike_register_client_->PendingVerifications()); 203 EXPECT_EQ(1, strike_register_client_->PendingVerifications());
204 EXPECT_FALSE(client->handshake_confirmed()); 204 EXPECT_FALSE(client->handshake_confirmed());
205 EXPECT_FALSE(server->handshake_confirmed()); 205 EXPECT_FALSE(server->handshake_confirmed());
206 206
207 // The server handshake completes once the nonce verification completes. 207 // The server handshake completes once the nonce verification completes.
208 strike_register_client_->RunPendingVerifications(); 208 strike_register_client_->RunPendingVerifications();
209 EXPECT_FALSE(client->handshake_confirmed()); 209 EXPECT_FALSE(client->handshake_confirmed());
210 EXPECT_TRUE(server->handshake_confirmed()); 210 EXPECT_TRUE(server->handshake_confirmed());
211 211
212 messages_moved = CryptoTestUtils::AdvanceHandshake( 212 messages_moved = CryptoTestUtils::AdvanceHandshake(client_conn,
213 client_conn, client.get(), messages_moved.first, 213 client.get(),
214 server_conn, server.get(), messages_moved.second); 214 messages_moved.first,
215 server_conn,
216 server.get(),
217 messages_moved.second);
215 EXPECT_EQ(1u, messages_moved.first); 218 EXPECT_EQ(1u, messages_moved.first);
216 EXPECT_EQ(1u, messages_moved.second); 219 EXPECT_EQ(1u, messages_moved.second);
217 EXPECT_TRUE(client->handshake_confirmed()); 220 EXPECT_TRUE(client->handshake_confirmed());
218 EXPECT_TRUE(server->handshake_confirmed()); 221 EXPECT_TRUE(server->handshake_confirmed());
219 } else { 222 } else {
220 CryptoTestUtils::CommunicateHandshakeMessages( 223 CryptoTestUtils::CommunicateHandshakeMessages(
221 client_conn, client.get(), server_conn, server.get()); 224 client_conn, client.get(), server_conn, server.get());
222 } 225 }
223 226
224 EXPECT_EQ(1, client->num_sent_client_hellos()); 227 EXPECT_EQ(1, client->num_sent_client_hellos());
225 } 228 }
226 229
227 TEST_P(QuicCryptoServerStreamTest, MessageAfterHandshake) { 230 TEST_P(QuicCryptoServerStreamTest, MessageAfterHandshake) {
228 CompleteCryptoHandshake(); 231 CompleteCryptoHandshake();
229 EXPECT_CALL(*connection_, SendConnectionClose( 232 EXPECT_CALL(
230 QUIC_CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE)); 233 *connection_,
234 SendConnectionClose(QUIC_CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE));
231 message_.set_tag(kCHLO); 235 message_.set_tag(kCHLO);
232 ConstructHandshakeMessage(); 236 ConstructHandshakeMessage();
233 stream_.ProcessRawData(message_data_->data(), message_data_->length()); 237 stream_.ProcessRawData(message_data_->data(), message_data_->length());
234 } 238 }
235 239
236 TEST_P(QuicCryptoServerStreamTest, BadMessageType) { 240 TEST_P(QuicCryptoServerStreamTest, BadMessageType) {
237 message_.set_tag(kSHLO); 241 message_.set_tag(kSHLO);
238 ConstructHandshakeMessage(); 242 ConstructHandshakeMessage();
239 EXPECT_CALL(*connection_, SendConnectionClose( 243 EXPECT_CALL(*connection_,
240 QUIC_INVALID_CRYPTO_MESSAGE_TYPE)); 244 SendConnectionClose(QUIC_INVALID_CRYPTO_MESSAGE_TYPE));
241 stream_.ProcessRawData(message_data_->data(), message_data_->length()); 245 stream_.ProcessRawData(message_data_->data(), message_data_->length());
242 } 246 }
243 247
244 TEST_P(QuicCryptoServerStreamTest, WithoutCertificates) { 248 TEST_P(QuicCryptoServerStreamTest, WithoutCertificates) {
245 crypto_config_.SetProofSource(NULL); 249 crypto_config_.SetProofSource(NULL);
246 client_options_.dont_verify_certs = true; 250 client_options_.dont_verify_certs = true;
247 251
248 // Only 2 client hellos need to be sent in the no-certs case: one to get the 252 // Only 2 client hellos need to be sent in the no-certs case: one to get the
249 // source-address token and the second to finish. 253 // source-address token and the second to finish.
250 EXPECT_EQ(2, CompleteCryptoHandshake()); 254 EXPECT_EQ(2, CompleteCryptoHandshake());
251 EXPECT_TRUE(stream_.encryption_established()); 255 EXPECT_TRUE(stream_.encryption_established());
252 EXPECT_TRUE(stream_.handshake_confirmed()); 256 EXPECT_TRUE(stream_.handshake_confirmed());
253 } 257 }
254 258
255 TEST_P(QuicCryptoServerStreamTest, ChannelID) { 259 TEST_P(QuicCryptoServerStreamTest, ChannelID) {
256 client_options_.channel_id_enabled = true; 260 client_options_.channel_id_enabled = true;
257 // CompleteCryptoHandshake verifies 261 // CompleteCryptoHandshake verifies
258 // stream_.crypto_negotiated_params().channel_id is correct. 262 // stream_.crypto_negotiated_params().channel_id is correct.
259 EXPECT_EQ(2, CompleteCryptoHandshake()); 263 EXPECT_EQ(2, CompleteCryptoHandshake());
260 EXPECT_TRUE(stream_.encryption_established()); 264 EXPECT_TRUE(stream_.encryption_established());
261 EXPECT_TRUE(stream_.handshake_confirmed()); 265 EXPECT_TRUE(stream_.handshake_confirmed());
262 } 266 }
263 267
264 } // namespace 268 } // namespace
265 } // namespace test 269 } // namespace test
266 } // namespace net 270 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698