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

Side by Side Diff: net/quic/chromium/quic_chromium_client_session_test.cc

Issue 2334943002: Add a new QuicChromiumClientSession::Handle class (Closed)
Patch Set: fixes Created 3 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
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | net/quic/chromium/quic_http_stream.h » ('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/chromium/quic_chromium_client_session.h" 5 #include "net/quic/chromium/quic_chromium_client_session.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/rand_util.h" 10 #include "base/rand_util.h"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 class QuicChromiumClientSessionTest 81 class QuicChromiumClientSessionTest
82 : public ::testing::TestWithParam<QuicVersion> { 82 : public ::testing::TestWithParam<QuicVersion> {
83 protected: 83 protected:
84 QuicChromiumClientSessionTest() 84 QuicChromiumClientSessionTest()
85 : crypto_config_(crypto_test_utils::ProofVerifierForTesting()), 85 : crypto_config_(crypto_test_utils::ProofVerifierForTesting()),
86 default_read_(new MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)), 86 default_read_(new MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)),
87 socket_data_( 87 socket_data_(
88 new SequencedSocketData(default_read_.get(), 1, nullptr, 0)), 88 new SequencedSocketData(default_read_.get(), 1, nullptr, 0)),
89 random_(0), 89 random_(0),
90 helper_(&clock_, &random_), 90 helper_(&clock_, &random_),
91 server_id_(kServerHostname, kServerPort, PRIVACY_MODE_DISABLED),
91 client_maker_(GetParam(), 92 client_maker_(GetParam(),
92 0, 93 0,
93 &clock_, 94 &clock_,
94 kServerHostname, 95 kServerHostname,
95 Perspective::IS_CLIENT), 96 Perspective::IS_CLIENT),
96 server_maker_(GetParam(), 97 server_maker_(GetParam(),
97 0, 98 0,
98 &clock_, 99 &clock_,
99 kServerHostname, 100 kServerHostname,
100 Perspective::IS_SERVER) { 101 Perspective::IS_SERVER) {
(...skipping 12 matching lines...) Expand all
113 QuicChromiumPacketWriter* writer = 114 QuicChromiumPacketWriter* writer =
114 new net::QuicChromiumPacketWriter(socket.get()); 115 new net::QuicChromiumPacketWriter(socket.get());
115 QuicConnection* connection = new QuicConnection( 116 QuicConnection* connection = new QuicConnection(
116 0, QuicSocketAddress(QuicSocketAddressImpl(kIpEndPoint)), &helper_, 117 0, QuicSocketAddress(QuicSocketAddressImpl(kIpEndPoint)), &helper_,
117 &alarm_factory_, writer, true, Perspective::IS_CLIENT, 118 &alarm_factory_, writer, true, Perspective::IS_CLIENT,
118 SupportedVersions(GetParam())); 119 SupportedVersions(GetParam()));
119 session_.reset(new QuicChromiumClientSession( 120 session_.reset(new QuicChromiumClientSession(
120 connection, std::move(socket), 121 connection, std::move(socket),
121 /*stream_factory=*/nullptr, &crypto_client_stream_factory_, &clock_, 122 /*stream_factory=*/nullptr, &crypto_client_stream_factory_, &clock_,
122 &transport_security_state_, 123 &transport_security_state_,
123 base::WrapUnique(static_cast<QuicServerInfo*>(nullptr)), 124 base::WrapUnique(static_cast<QuicServerInfo*>(nullptr)), server_id_,
124 QuicServerId(kServerHostname, kServerPort, PRIVACY_MODE_DISABLED),
125 /*require_confirmation=*/false, kQuicYieldAfterPacketsRead, 125 /*require_confirmation=*/false, kQuicYieldAfterPacketsRead,
126 QuicTime::Delta::FromMilliseconds(kQuicYieldAfterDurationMilliseconds), 126 QuicTime::Delta::FromMilliseconds(kQuicYieldAfterDurationMilliseconds),
127 /*cert_verify_flags=*/0, DefaultQuicConfig(), &crypto_config_, 127 /*cert_verify_flags=*/0, DefaultQuicConfig(), &crypto_config_,
128 "CONNECTION_UNKNOWN", base::TimeTicks::Now(), base::TimeTicks::Now(), 128 "CONNECTION_UNKNOWN", base::TimeTicks::Now(), base::TimeTicks::Now(),
129 &push_promise_index_, &test_push_delegate_, 129 &push_promise_index_, &test_push_delegate_,
130 base::ThreadTaskRunnerHandle::Get().get(), 130 base::ThreadTaskRunnerHandle::Get().get(),
131 /*socket_performance_watcher=*/nullptr, &net_log_)); 131 /*socket_performance_watcher=*/nullptr, &net_log_));
132 132
133 scoped_refptr<X509Certificate> cert( 133 scoped_refptr<X509Certificate> cert(
134 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem")); 134 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"));
135 verify_details_.cert_verify_result.verified_cert = cert; 135 verify_details_.cert_verify_result.verified_cert = cert;
136 verify_details_.cert_verify_result.is_issued_by_known_root = true; 136 verify_details_.cert_verify_result.is_issued_by_known_root = true;
137 session_->Initialize(); 137 session_->Initialize();
138 session_->StartReading(); 138 session_->StartReading();
139 writer->set_delegate(session_.get()); 139 writer->set_delegate(session_.get());
140 } 140 }
141 141
142 void TearDown() override { 142 void TearDown() override {
143 session_->CloseSessionOnError(ERR_ABORTED, QUIC_INTERNAL_ERROR); 143 if (session_)
144 session_->CloseSessionOnError(ERR_ABORTED, QUIC_INTERNAL_ERROR);
144 } 145 }
145 146
146 void CompleteCryptoHandshake() { 147 void CompleteCryptoHandshake() {
147 ASSERT_THAT(session_->CryptoConnect(callback_.callback()), IsOk()); 148 ASSERT_THAT(session_->CryptoConnect(callback_.callback()), IsOk());
148 } 149 }
149 150
150 QuicChromiumPacketWriter* CreateQuicChromiumPacketWriter( 151 QuicChromiumPacketWriter* CreateQuicChromiumPacketWriter(
151 DatagramClientSocket* socket, 152 DatagramClientSocket* socket,
152 QuicChromiumClientSession* session) const { 153 QuicChromiumClientSession* session) const {
153 std::unique_ptr<QuicChromiumPacketWriter> writer( 154 std::unique_ptr<QuicChromiumPacketWriter> writer(
154 new QuicChromiumPacketWriter(socket)); 155 new QuicChromiumPacketWriter(socket));
155 writer->set_delegate(session); 156 writer->set_delegate(session);
156 return writer.release(); 157 return writer.release();
157 } 158 }
158 159
159 QuicCryptoClientConfig crypto_config_; 160 QuicCryptoClientConfig crypto_config_;
160 TestNetLog net_log_; 161 TestNetLog net_log_;
161 BoundTestNetLog bound_test_net_log_; 162 BoundTestNetLog bound_test_net_log_;
162 MockClientSocketFactory socket_factory_; 163 MockClientSocketFactory socket_factory_;
163 std::unique_ptr<MockRead> default_read_; 164 std::unique_ptr<MockRead> default_read_;
164 std::unique_ptr<SequencedSocketData> socket_data_; 165 std::unique_ptr<SequencedSocketData> socket_data_;
165 MockClock clock_; 166 MockClock clock_;
166 MockRandom random_; 167 MockRandom random_;
167 QuicChromiumConnectionHelper helper_; 168 QuicChromiumConnectionHelper helper_;
168 MockAlarmFactory alarm_factory_; 169 MockAlarmFactory alarm_factory_;
169 TransportSecurityState transport_security_state_; 170 TransportSecurityState transport_security_state_;
170 MockCryptoClientStreamFactory crypto_client_stream_factory_; 171 MockCryptoClientStreamFactory crypto_client_stream_factory_;
171 QuicClientPushPromiseIndex push_promise_index_; 172 QuicClientPushPromiseIndex push_promise_index_;
173 QuicServerId server_id_;
172 std::unique_ptr<QuicChromiumClientSession> session_; 174 std::unique_ptr<QuicChromiumClientSession> session_;
173 TestServerPushDelegate test_push_delegate_; 175 TestServerPushDelegate test_push_delegate_;
174 QuicConnectionVisitorInterface* visitor_; 176 QuicConnectionVisitorInterface* visitor_;
175 TestCompletionCallback callback_; 177 TestCompletionCallback callback_;
176 QuicTestPacketMaker client_maker_; 178 QuicTestPacketMaker client_maker_;
177 QuicTestPacketMaker server_maker_; 179 QuicTestPacketMaker server_maker_;
178 ProofVerifyDetailsChromium verify_details_; 180 ProofVerifyDetailsChromium verify_details_;
179 }; 181 };
180 182
181 INSTANTIATE_TEST_CASE_P(Tests, 183 INSTANTIATE_TEST_CASE_P(Tests,
182 QuicChromiumClientSessionTest, 184 QuicChromiumClientSessionTest,
183 ::testing::ValuesIn(AllSupportedVersions())); 185 ::testing::ValuesIn(AllSupportedVersions()));
184 186
185 TEST_P(QuicChromiumClientSessionTest, CryptoConnect) { 187 TEST_P(QuicChromiumClientSessionTest, CryptoConnect) {
186 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 188 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
187 std::unique_ptr<QuicEncryptedPacket> settings_packet( 189 std::unique_ptr<QuicEncryptedPacket> settings_packet(
188 client_maker_.MakeInitialSettingsPacket(1, nullptr)); 190 client_maker_.MakeInitialSettingsPacket(1, nullptr));
189 MockWrite writes[] = { 191 MockWrite writes[] = {
190 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1)}; 192 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1)};
191 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 193 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
192 arraysize(writes))); 194 arraysize(writes)));
193 Initialize(); 195 Initialize();
194 CompleteCryptoHandshake(); 196 CompleteCryptoHandshake();
195 } 197 }
196 198
199 TEST_P(QuicChromiumClientSessionTest, Handle) {
200 MockQuicData quic_data;
201 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
202 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
203 quic_data.AddRead(ASYNC, OK); // EOF
204 quic_data.AddSocketDataToFactory(&socket_factory_);
205
206 Initialize();
207
208 NetLogWithSource session_net_log = session_->net_log();
209 EXPECT_EQ(NetLogSourceType::QUIC_SESSION, session_net_log.source().type);
210 EXPECT_EQ(&net_log_, session_net_log.net_log());
211
212 std::unique_ptr<QuicChromiumClientSession::Handle> handle =
213 session_->CreateHandle();
214 EXPECT_TRUE(handle->IsConnected());
215 EXPECT_FALSE(handle->IsCryptoHandshakeConfirmed());
216 EXPECT_EQ(GetParam(), handle->GetQuicVersion());
217 EXPECT_EQ(server_id_, handle->server_id());
218 EXPECT_EQ(session_net_log.source().type, handle->net_log().source().type);
219 EXPECT_EQ(session_net_log.source().id, handle->net_log().source().id);
220 EXPECT_EQ(session_net_log.net_log(), handle->net_log().net_log());
221 IPEndPoint address;
222 EXPECT_EQ(OK, handle->GetPeerAddress(&address));
223 EXPECT_EQ(kIpEndPoint, address);
224 EXPECT_TRUE(handle->CreatePacketBundler(QuicConnection::NO_ACK).get() !=
225 nullptr);
226
227 CompleteCryptoHandshake();
228
229 EXPECT_TRUE(handle->IsCryptoHandshakeConfirmed());
230
231 // Request a stream and verify that a stream was created.
232 TestCompletionCallback callback;
233 ASSERT_EQ(OK, handle->RequestStream(/*requires_confirmation=*/false,
234 callback.callback()));
235 EXPECT_TRUE(handle->ReleaseStream() != nullptr);
236
237 quic_data.Resume();
238 EXPECT_TRUE(quic_data.AllReadDataConsumed());
239 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
240
241 // Veirfy that the handle works correctly after the session is closed.
242 EXPECT_FALSE(handle->IsConnected());
243 EXPECT_TRUE(handle->IsCryptoHandshakeConfirmed());
244 EXPECT_EQ(GetParam(), handle->GetQuicVersion());
245 EXPECT_EQ(server_id_, handle->server_id());
246 EXPECT_EQ(session_net_log.source().type, handle->net_log().source().type);
247 EXPECT_EQ(session_net_log.source().id, handle->net_log().source().id);
248 EXPECT_EQ(session_net_log.net_log(), handle->net_log().net_log());
249 EXPECT_EQ(ERR_CONNECTION_CLOSED, handle->GetPeerAddress(&address));
250 EXPECT_TRUE(handle->CreatePacketBundler(QuicConnection::NO_ACK).get() ==
251 nullptr);
252 {
253 // Verify that CreateHandle() works even after the session is closed.
254 std::unique_ptr<QuicChromiumClientSession::Handle> handle2 =
255 session_->CreateHandle();
256 EXPECT_FALSE(handle2->IsConnected());
257 EXPECT_TRUE(handle2->IsCryptoHandshakeConfirmed());
258 ASSERT_EQ(ERR_CONNECTION_CLOSED,
259 handle2->RequestStream(/*requires_confirmation=*/false,
260 callback.callback()));
261 }
262
263 session_.reset();
264
265 // Veirfy that the handle works correctly after the session is deleted.
266 EXPECT_FALSE(handle->IsConnected());
267 EXPECT_TRUE(handle->IsCryptoHandshakeConfirmed());
268 EXPECT_EQ(GetParam(), handle->GetQuicVersion());
269 EXPECT_EQ(server_id_, handle->server_id());
270 EXPECT_EQ(session_net_log.source().type, handle->net_log().source().type);
271 EXPECT_EQ(session_net_log.source().id, handle->net_log().source().id);
272 EXPECT_EQ(session_net_log.net_log(), handle->net_log().net_log());
273 EXPECT_EQ(ERR_CONNECTION_CLOSED, handle->GetPeerAddress(&address));
274 EXPECT_TRUE(handle->CreatePacketBundler(QuicConnection::NO_ACK).get() ==
275 nullptr);
276 ASSERT_EQ(ERR_CONNECTION_CLOSED,
277 handle->RequestStream(/*requires_confirmation=*/false,
278 callback.callback()));
279 }
280
197 TEST_P(QuicChromiumClientSessionTest, StreamRequest) { 281 TEST_P(QuicChromiumClientSessionTest, StreamRequest) {
198 MockQuicData quic_data; 282 MockQuicData quic_data;
199 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 283 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
200 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 284 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
201 quic_data.AddRead(ASYNC, OK); // EOF 285 quic_data.AddRead(ASYNC, OK); // EOF
202 quic_data.AddSocketDataToFactory(&socket_factory_); 286 quic_data.AddSocketDataToFactory(&socket_factory_);
203 287
204 Initialize(); 288 Initialize();
205 CompleteCryptoHandshake(); 289 CompleteCryptoHandshake();
206 290
207 // Request a stream and verify that a stream was created. 291 // Request a stream and verify that a stream was created.
208 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 292 std::unique_ptr<QuicChromiumClientSession::Handle> handle =
209 session_->CreateStreamRequest(/*requires_confirmation=*/false); 293 session_->CreateHandle();
210 TestCompletionCallback callback; 294 TestCompletionCallback callback;
211 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback())); 295 ASSERT_EQ(OK, handle->RequestStream(/*requires_confirmation=*/false,
212 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); 296 callback.callback()));
297 EXPECT_TRUE(handle->ReleaseStream() != nullptr);
213 298
214 quic_data.Resume(); 299 quic_data.Resume();
215 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 300 EXPECT_TRUE(quic_data.AllReadDataConsumed());
216 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 301 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
217 } 302 }
218 303
219 TEST_P(QuicChromiumClientSessionTest, ConfirmationRequiredStreamRequest) { 304 TEST_P(QuicChromiumClientSessionTest, ConfirmationRequiredStreamRequest) {
220 MockQuicData quic_data; 305 MockQuicData quic_data;
221 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 306 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
222 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 307 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
223 quic_data.AddRead(ASYNC, OK); // EOF 308 quic_data.AddRead(ASYNC, OK); // EOF
224 quic_data.AddSocketDataToFactory(&socket_factory_); 309 quic_data.AddSocketDataToFactory(&socket_factory_);
225 310
226 Initialize(); 311 Initialize();
227 CompleteCryptoHandshake(); 312 CompleteCryptoHandshake();
228 313
229 // Request a stream and verify that a stream was created. 314 // Request a stream and verify that a stream was created.
230 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 315 std::unique_ptr<QuicChromiumClientSession::Handle> handle =
231 session_->CreateStreamRequest(/*requires_confirmation=*/true); 316 session_->CreateHandle();
232 TestCompletionCallback callback; 317 TestCompletionCallback callback;
233 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback())); 318 ASSERT_EQ(OK, handle->RequestStream(/*requires_confirmation=*/true,
234 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); 319 callback.callback()));
320 EXPECT_TRUE(handle->ReleaseStream() != nullptr);
235 321
236 quic_data.Resume(); 322 quic_data.Resume();
237 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 323 EXPECT_TRUE(quic_data.AllReadDataConsumed());
238 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 324 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
239 } 325 }
240 326
241 TEST_P(QuicChromiumClientSessionTest, StreamRequestBeforeConfirmation) { 327 TEST_P(QuicChromiumClientSessionTest, StreamRequestBeforeConfirmation) {
242 MockQuicData quic_data; 328 MockQuicData quic_data;
243 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 329 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
244 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 330 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
245 quic_data.AddRead(ASYNC, OK); // EOF 331 quic_data.AddRead(ASYNC, OK); // EOF
246 quic_data.AddSocketDataToFactory(&socket_factory_); 332 quic_data.AddSocketDataToFactory(&socket_factory_);
247 333
248 Initialize(); 334 Initialize();
249 335
250 // Request a stream and verify that a stream was created. 336 // Request a stream and verify that a stream was created.
251 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 337 std::unique_ptr<QuicChromiumClientSession::Handle> handle =
252 session_->CreateStreamRequest(/*requires_confirmation=*/true); 338 session_->CreateHandle();
253 TestCompletionCallback callback; 339 TestCompletionCallback callback;
254 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 340 ASSERT_EQ(ERR_IO_PENDING,
341 handle->RequestStream(/*requires_confirmation=*/true,
342 callback.callback()));
255 343
256 CompleteCryptoHandshake(); 344 CompleteCryptoHandshake();
257 345
258 EXPECT_THAT(callback.WaitForResult(), IsOk()); 346 EXPECT_THAT(callback.WaitForResult(), IsOk());
259 347
260 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); 348 EXPECT_TRUE(handle->ReleaseStream() != nullptr);
261 349
262 quic_data.Resume(); 350 quic_data.Resume();
263 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 351 EXPECT_TRUE(quic_data.AllReadDataConsumed());
264 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 352 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
265 } 353 }
266 354
267 TEST_P(QuicChromiumClientSessionTest, CancelStreamRequestBeforeRelease) { 355 TEST_P(QuicChromiumClientSessionTest, CancelStreamRequestBeforeRelease) {
268 MockQuicData quic_data; 356 MockQuicData quic_data;
269 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 357 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
270 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1, 358 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1,
271 QUIC_STREAM_CANCELLED)); 359 QUIC_STREAM_CANCELLED));
272 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 360 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
273 quic_data.AddRead(ASYNC, OK); // EOF 361 quic_data.AddRead(ASYNC, OK); // EOF
274 quic_data.AddSocketDataToFactory(&socket_factory_); 362 quic_data.AddSocketDataToFactory(&socket_factory_);
275 363
276 Initialize(); 364 Initialize();
277 CompleteCryptoHandshake(); 365 CompleteCryptoHandshake();
278 366
279 // Request a stream and cancel it without releasing the stream. 367 // Request a stream and cancel it without releasing the stream.
280 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 368 std::unique_ptr<QuicChromiumClientSession::Handle> handle =
281 session_->CreateStreamRequest(/*requires_confirmation=*/false); 369 session_->CreateHandle();
282 TestCompletionCallback callback; 370 TestCompletionCallback callback;
283 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback())); 371 ASSERT_EQ(OK, handle->RequestStream(/*requires_confirmation=*/false,
284 stream_request.reset(); 372 callback.callback()));
373 handle.reset();
285 374
286 quic_data.Resume(); 375 quic_data.Resume();
287 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 376 EXPECT_TRUE(quic_data.AllReadDataConsumed());
288 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 377 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
289 } 378 }
290 379
291 TEST_P(QuicChromiumClientSessionTest, AsyncStreamRequest) { 380 TEST_P(QuicChromiumClientSessionTest, AsyncStreamRequest) {
292 MockQuicData quic_data; 381 MockQuicData quic_data;
293 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 382 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
294 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1, 383 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1,
295 QUIC_RST_ACKNOWLEDGEMENT)); 384 QUIC_RST_ACKNOWLEDGEMENT));
296 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 385 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
297 quic_data.AddRead(ASYNC, OK); // EOF 386 quic_data.AddRead(ASYNC, OK); // EOF
298 quic_data.AddSocketDataToFactory(&socket_factory_); 387 quic_data.AddSocketDataToFactory(&socket_factory_);
299 388
300 Initialize(); 389 Initialize();
301 CompleteCryptoHandshake(); 390 CompleteCryptoHandshake();
302 391
303 // Open the maximum number of streams so that a subsequent request 392 // Open the maximum number of streams so that a subsequent request
304 // can not proceed immediately. 393 // can not proceed immediately.
305 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); 394 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
306 for (size_t i = 0; i < kMaxOpenStreams; i++) { 395 for (size_t i = 0; i < kMaxOpenStreams; i++) {
307 session_->CreateOutgoingDynamicStream(kDefaultPriority); 396 session_->CreateOutgoingDynamicStream(kDefaultPriority);
308 } 397 }
309 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams()); 398 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
310 399
311 // Request a stream and verify that it's pending. 400 // Request a stream and verify that it's pending.
312 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 401 std::unique_ptr<QuicChromiumClientSession::Handle> handle =
313 session_->CreateStreamRequest(/*requires_confirmation=*/false); 402 session_->CreateHandle();
314 TestCompletionCallback callback; 403 TestCompletionCallback callback;
315 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 404 ASSERT_EQ(ERR_IO_PENDING,
405 handle->RequestStream(/*requires_confirmation=*/false,
406 callback.callback()));
316 407
317 // Close a stream and ensure the stream request completes. 408 // Close a stream and ensure the stream request completes.
318 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0); 409 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0);
319 session_->OnRstStream(rst); 410 session_->OnRstStream(rst);
320 ASSERT_TRUE(callback.have_result()); 411 ASSERT_TRUE(callback.have_result());
321 EXPECT_THAT(callback.WaitForResult(), IsOk()); 412 EXPECT_THAT(callback.WaitForResult(), IsOk());
322 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); 413 EXPECT_TRUE(handle->ReleaseStream() != nullptr);
323 414
324 quic_data.Resume(); 415 quic_data.Resume();
325 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 416 EXPECT_TRUE(quic_data.AllReadDataConsumed());
326 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 417 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
327 } 418 }
328 419
329 TEST_P(QuicChromiumClientSessionTest, CancelPendingStreamRequest) { 420 TEST_P(QuicChromiumClientSessionTest, CancelPendingStreamRequest) {
330 MockQuicData quic_data; 421 MockQuicData quic_data;
331 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 422 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
332 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1, 423 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1,
333 QUIC_RST_ACKNOWLEDGEMENT)); 424 QUIC_RST_ACKNOWLEDGEMENT));
334 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 425 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
335 quic_data.AddRead(ASYNC, OK); // EOF 426 quic_data.AddRead(ASYNC, OK); // EOF
336 quic_data.AddSocketDataToFactory(&socket_factory_); 427 quic_data.AddSocketDataToFactory(&socket_factory_);
337 428
338 Initialize(); 429 Initialize();
339 CompleteCryptoHandshake(); 430 CompleteCryptoHandshake();
340 431
341 // Open the maximum number of streams so that a subsequent request 432 // Open the maximum number of streams so that a subsequent request
342 // can not proceed immediately. 433 // can not proceed immediately.
343 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); 434 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
344 for (size_t i = 0; i < kMaxOpenStreams; i++) { 435 for (size_t i = 0; i < kMaxOpenStreams; i++) {
345 session_->CreateOutgoingDynamicStream(kDefaultPriority); 436 session_->CreateOutgoingDynamicStream(kDefaultPriority);
346 } 437 }
347 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams()); 438 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
348 439
349 // Request a stream and verify that it's pending. 440 // Request a stream and verify that it's pending.
350 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 441 std::unique_ptr<QuicChromiumClientSession::Handle> handle =
351 session_->CreateStreamRequest(/*requires_confirmation=*/false); 442 session_->CreateHandle();
352 TestCompletionCallback callback; 443 TestCompletionCallback callback;
353 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 444 ASSERT_EQ(ERR_IO_PENDING,
445 handle->RequestStream(/*requires_confirmation=*/false,
446 callback.callback()));
354 447
355 // Cancel the pending stream request. 448 // Cancel the pending stream request.
356 stream_request.reset(); 449 handle.reset();
357 450
358 // Close a stream and ensure that no new stream is created. 451 // Close a stream and ensure that no new stream is created.
359 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0); 452 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0);
360 session_->OnRstStream(rst); 453 session_->OnRstStream(rst);
361 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams()); 454 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams());
362 455
363 quic_data.Resume(); 456 quic_data.Resume();
364 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 457 EXPECT_TRUE(quic_data.AllReadDataConsumed());
365 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 458 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
366 } 459 }
367 460
368 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeStreamRequest) { 461 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeStreamRequest) {
369 MockQuicData quic_data; 462 MockQuicData quic_data;
370 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 463 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
371 quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1)); 464 quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1));
372 quic_data.AddSocketDataToFactory(&socket_factory_); 465 quic_data.AddSocketDataToFactory(&socket_factory_);
373 466
374 Initialize(); 467 Initialize();
375 CompleteCryptoHandshake(); 468 CompleteCryptoHandshake();
376 469
377 // Pump the message loop to read the connection close packet. 470 // Pump the message loop to read the connection close packet.
378 base::RunLoop().RunUntilIdle(); 471 base::RunLoop().RunUntilIdle();
379 472
380 // Request a stream and verify that it failed. 473 // Request a stream and verify that it failed.
381 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 474 std::unique_ptr<QuicChromiumClientSession::Handle> handle =
382 session_->CreateStreamRequest(/*requires_confirmation=*/false); 475 session_->CreateHandle();
383 TestCompletionCallback callback; 476 TestCompletionCallback callback;
384 ASSERT_EQ(ERR_CONNECTION_CLOSED, 477 ASSERT_EQ(ERR_CONNECTION_CLOSED,
385 stream_request->StartRequest(callback.callback())); 478 handle->RequestStream(/*requires_confirmation=*/false,
479 callback.callback()));
386 480
387 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 481 EXPECT_TRUE(quic_data.AllReadDataConsumed());
388 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 482 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
389 } 483 }
390 484
391 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeHandshakeConfirmed) { 485 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeHandshakeConfirmed) {
392 MockQuicData quic_data; 486 MockQuicData quic_data;
393 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 487 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
394 quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1)); 488 quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1));
395 quic_data.AddSocketDataToFactory(&socket_factory_); 489 quic_data.AddSocketDataToFactory(&socket_factory_);
396 490
397 Initialize(); 491 Initialize();
398 492
399 // Request a stream and verify that it's pending. 493 // Request a stream and verify that it's pending.
400 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 494 std::unique_ptr<QuicChromiumClientSession::Handle> handle =
401 session_->CreateStreamRequest(/*requires_confirmation=*/true); 495 session_->CreateHandle();
402 TestCompletionCallback callback; 496 TestCompletionCallback callback;
403 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 497 ASSERT_EQ(ERR_IO_PENDING,
498 handle->RequestStream(/*requires_confirmation=*/true,
499 callback.callback()));
404 500
405 // Close the connection and verify that the StreamRequest completes with 501 // Close the connection and verify that the StreamRequest completes with
406 // an error. 502 // an error.
407 quic_data.Resume(); 503 quic_data.Resume();
408 base::RunLoop().RunUntilIdle(); 504 base::RunLoop().RunUntilIdle();
409 505
410 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); 506 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED));
411 507
412 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 508 EXPECT_TRUE(quic_data.AllReadDataConsumed());
413 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 509 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
(...skipping 11 matching lines...) Expand all
425 521
426 // Open the maximum number of streams so that a subsequent request 522 // Open the maximum number of streams so that a subsequent request
427 // can not proceed immediately. 523 // can not proceed immediately.
428 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); 524 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
429 for (size_t i = 0; i < kMaxOpenStreams; i++) { 525 for (size_t i = 0; i < kMaxOpenStreams; i++) {
430 session_->CreateOutgoingDynamicStream(kDefaultPriority); 526 session_->CreateOutgoingDynamicStream(kDefaultPriority);
431 } 527 }
432 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams()); 528 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
433 529
434 // Request a stream and verify that it's pending. 530 // Request a stream and verify that it's pending.
435 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 531 std::unique_ptr<QuicChromiumClientSession::Handle> handle =
436 session_->CreateStreamRequest(/*requires_confirmation=*/false); 532 session_->CreateHandle();
437 TestCompletionCallback callback; 533 TestCompletionCallback callback;
438 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 534 ASSERT_EQ(ERR_IO_PENDING,
535 handle->RequestStream(/*requires_confirmation=*/false,
536 callback.callback()));
439 537
440 // Close the connection and verify that the StreamRequest completes with 538 // Close the connection and verify that the StreamRequest completes with
441 // an error. 539 // an error.
442 quic_data.Resume(); 540 quic_data.Resume();
443 base::RunLoop().RunUntilIdle(); 541 base::RunLoop().RunUntilIdle();
444 542
445 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); 543 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED));
446 544
447 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 545 EXPECT_TRUE(quic_data.AllReadDataConsumed());
448 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 546 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
791 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); 889 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
792 890
793 std::vector<QuicChromiumClientStream*> streams; 891 std::vector<QuicChromiumClientStream*> streams;
794 for (size_t i = 0; i < kMaxOpenStreams; i++) { 892 for (size_t i = 0; i < kMaxOpenStreams; i++) {
795 QuicChromiumClientStream* stream = 893 QuicChromiumClientStream* stream =
796 session_->CreateOutgoingDynamicStream(kDefaultPriority); 894 session_->CreateOutgoingDynamicStream(kDefaultPriority);
797 EXPECT_TRUE(stream); 895 EXPECT_TRUE(stream);
798 streams.push_back(stream); 896 streams.push_back(stream);
799 } 897 }
800 898
801 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 899 std::unique_ptr<QuicChromiumClientSession::Handle> handle =
802 session_->CreateStreamRequest(/*requires_confirmation=*/false); 900 session_->CreateHandle();
803 TestCompletionCallback callback; 901 TestCompletionCallback callback;
804 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 902 ASSERT_EQ(ERR_IO_PENDING,
903 handle->RequestStream(/*requires_confirmation=*/false,
904 callback.callback()));
805 905
806 // Close a stream and ensure I can now open a new one. 906 // Close a stream and ensure I can now open a new one.
807 QuicStreamId stream_id = streams[0]->id(); 907 QuicStreamId stream_id = streams[0]->id();
808 session_->CloseStream(stream_id); 908 session_->CloseStream(stream_id);
809 QuicRstStreamFrame rst1(stream_id, QUIC_STREAM_NO_ERROR, 0); 909 QuicRstStreamFrame rst1(stream_id, QUIC_STREAM_NO_ERROR, 0);
810 session_->OnRstStream(rst1); 910 session_->OnRstStream(rst1);
811 ASSERT_TRUE(callback.have_result()); 911 ASSERT_TRUE(callback.have_result());
812 EXPECT_THAT(callback.WaitForResult(), IsOk()); 912 EXPECT_THAT(callback.WaitForResult(), IsOk());
813 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); 913 EXPECT_TRUE(handle->ReleaseStream() != nullptr);
814 } 914 }
815 915
816 TEST_P(QuicChromiumClientSessionTest, GoAwayReceived) { 916 TEST_P(QuicChromiumClientSessionTest, GoAwayReceived) {
817 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 917 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
818 std::unique_ptr<QuicEncryptedPacket> settings_packet( 918 std::unique_ptr<QuicEncryptedPacket> settings_packet(
819 client_maker_.MakeInitialSettingsPacket(1, nullptr)); 919 client_maker_.MakeInitialSettingsPacket(1, nullptr));
820 MockWrite writes[] = { 920 MockWrite writes[] = {
821 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1)}; 921 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1)};
822 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 922 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
823 arraysize(writes))); 923 arraysize(writes)));
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
1143 1243
1144 EXPECT_TRUE(socket_data_->AllReadDataConsumed()); 1244 EXPECT_TRUE(socket_data_->AllReadDataConsumed());
1145 EXPECT_TRUE(socket_data_->AllWriteDataConsumed()); 1245 EXPECT_TRUE(socket_data_->AllWriteDataConsumed());
1146 EXPECT_TRUE(new_socket_data.AllReadDataConsumed()); 1246 EXPECT_TRUE(new_socket_data.AllReadDataConsumed());
1147 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed()); 1247 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed());
1148 } 1248 }
1149 1249
1150 } // namespace 1250 } // namespace
1151 } // namespace test 1251 } // namespace test
1152 } // namespace net 1252 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | net/quic/chromium/quic_http_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698