OLD | NEW |
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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 const char kServerHostname[] = "test.example.com"; | 57 const char kServerHostname[] = "test.example.com"; |
58 const uint16_t kServerPort = 443; | 58 const uint16_t kServerPort = 443; |
59 const size_t kMaxReadersPerQuicSession = 5; | 59 const size_t kMaxReadersPerQuicSession = 5; |
60 | 60 |
61 class MockStreamDelegate : public QuicChromiumClientStream::Delegate { | 61 class MockStreamDelegate : public QuicChromiumClientStream::Delegate { |
62 public: | 62 public: |
63 MockStreamDelegate() {} | 63 MockStreamDelegate() {} |
64 | 64 |
65 MOCK_METHOD0(OnSendData, int()); | 65 MOCK_METHOD0(OnSendData, int()); |
66 MOCK_METHOD2(OnSendDataComplete, int(int, bool*)); | 66 MOCK_METHOD2(OnSendDataComplete, int(int, bool*)); |
67 MOCK_METHOD2(OnHeadersAvailable, | 67 MOCK_METHOD2(OnInitialHeadersAvailable, |
68 void(const SpdyHeaderBlock& headers, size_t frame_len)); | 68 void(const SpdyHeaderBlock& headers, size_t frame_len)); |
69 MOCK_METHOD2(OnHeadersAvailableMock, | 69 MOCK_METHOD2(OnTrailingHeadersAvailable, |
70 void(const SpdyHeaderBlock& headers, size_t frame_len)); | 70 void(const SpdyHeaderBlock& headers, size_t frame_len)); |
71 MOCK_METHOD2(OnDataReceived, int(const char*, int)); | 71 MOCK_METHOD2(OnDataReceived, int(const char*, int)); |
72 MOCK_METHOD0(OnDataAvailable, void()); | 72 MOCK_METHOD0(OnDataAvailable, void()); |
73 MOCK_METHOD0(OnClose, void()); | 73 MOCK_METHOD0(OnClose, void()); |
74 MOCK_METHOD1(OnError, void(int)); | 74 MOCK_METHOD1(OnError, void(int)); |
75 | 75 |
76 private: | 76 private: |
77 DISALLOW_COPY_AND_ASSIGN(MockStreamDelegate); | 77 DISALLOW_COPY_AND_ASSIGN(MockStreamDelegate); |
78 }; | 78 }; |
79 | 79 |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 std::unique_ptr<MockRead> default_read_; | 171 std::unique_ptr<MockRead> default_read_; |
172 std::unique_ptr<SequencedSocketData> socket_data_; | 172 std::unique_ptr<SequencedSocketData> socket_data_; |
173 MockClock clock_; | 173 MockClock clock_; |
174 MockRandom random_; | 174 MockRandom random_; |
175 QuicChromiumConnectionHelper helper_; | 175 QuicChromiumConnectionHelper helper_; |
176 MockAlarmFactory alarm_factory_; | 176 MockAlarmFactory alarm_factory_; |
177 TransportSecurityState transport_security_state_; | 177 TransportSecurityState transport_security_state_; |
178 MockCryptoClientStreamFactory crypto_client_stream_factory_; | 178 MockCryptoClientStreamFactory crypto_client_stream_factory_; |
179 QuicClientPushPromiseIndex push_promise_index_; | 179 QuicClientPushPromiseIndex push_promise_index_; |
180 QuicServerId server_id_; | 180 QuicServerId server_id_; |
| 181 MockStreamDelegate delegate_; |
181 std::unique_ptr<QuicChromiumClientSession> session_; | 182 std::unique_ptr<QuicChromiumClientSession> session_; |
182 TestServerPushDelegate test_push_delegate_; | 183 TestServerPushDelegate test_push_delegate_; |
183 QuicConnectionVisitorInterface* visitor_; | 184 QuicConnectionVisitorInterface* visitor_; |
184 TestCompletionCallback callback_; | 185 TestCompletionCallback callback_; |
185 QuicTestPacketMaker client_maker_; | 186 QuicTestPacketMaker client_maker_; |
186 QuicTestPacketMaker server_maker_; | 187 QuicTestPacketMaker server_maker_; |
187 ProofVerifyDetailsChromium verify_details_; | 188 ProofVerifyDetailsChromium verify_details_; |
188 }; | 189 }; |
189 | 190 |
190 INSTANTIATE_TEST_CASE_P(Tests, | 191 INSTANTIATE_TEST_CASE_P(Tests, |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 nullptr); | 233 nullptr); |
233 | 234 |
234 CompleteCryptoHandshake(); | 235 CompleteCryptoHandshake(); |
235 | 236 |
236 EXPECT_TRUE(handle->IsCryptoHandshakeConfirmed()); | 237 EXPECT_TRUE(handle->IsCryptoHandshakeConfirmed()); |
237 | 238 |
238 // Request a stream and verify that a stream was created. | 239 // Request a stream and verify that a stream was created. |
239 TestCompletionCallback callback; | 240 TestCompletionCallback callback; |
240 ASSERT_EQ(OK, handle->RequestStream(/*requires_confirmation=*/false, | 241 ASSERT_EQ(OK, handle->RequestStream(/*requires_confirmation=*/false, |
241 callback.callback())); | 242 callback.callback())); |
242 EXPECT_TRUE(handle->ReleaseStream() != nullptr); | 243 EXPECT_TRUE(handle->ReleaseStream(&delegate_) != nullptr); |
243 | 244 |
244 quic_data.Resume(); | 245 quic_data.Resume(); |
245 EXPECT_TRUE(quic_data.AllReadDataConsumed()); | 246 EXPECT_TRUE(quic_data.AllReadDataConsumed()); |
246 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); | 247 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); |
247 | 248 |
248 // Veirfy that the handle works correctly after the session is closed. | 249 // Veirfy that the handle works correctly after the session is closed. |
249 EXPECT_FALSE(handle->IsConnected()); | 250 EXPECT_FALSE(handle->IsConnected()); |
250 EXPECT_TRUE(handle->IsCryptoHandshakeConfirmed()); | 251 EXPECT_TRUE(handle->IsCryptoHandshakeConfirmed()); |
251 EXPECT_EQ(GetParam(), handle->GetQuicVersion()); | 252 EXPECT_EQ(GetParam(), handle->GetQuicVersion()); |
252 EXPECT_EQ(server_id_, handle->server_id()); | 253 EXPECT_EQ(server_id_, handle->server_id()); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 | 295 |
295 Initialize(); | 296 Initialize(); |
296 CompleteCryptoHandshake(); | 297 CompleteCryptoHandshake(); |
297 | 298 |
298 // Request a stream and verify that a stream was created. | 299 // Request a stream and verify that a stream was created. |
299 std::unique_ptr<QuicChromiumClientSession::Handle> handle = | 300 std::unique_ptr<QuicChromiumClientSession::Handle> handle = |
300 session_->CreateHandle(); | 301 session_->CreateHandle(); |
301 TestCompletionCallback callback; | 302 TestCompletionCallback callback; |
302 ASSERT_EQ(OK, handle->RequestStream(/*requires_confirmation=*/false, | 303 ASSERT_EQ(OK, handle->RequestStream(/*requires_confirmation=*/false, |
303 callback.callback())); | 304 callback.callback())); |
304 EXPECT_TRUE(handle->ReleaseStream() != nullptr); | 305 EXPECT_TRUE(handle->ReleaseStream(&delegate_) != nullptr); |
305 | 306 |
306 quic_data.Resume(); | 307 quic_data.Resume(); |
307 EXPECT_TRUE(quic_data.AllReadDataConsumed()); | 308 EXPECT_TRUE(quic_data.AllReadDataConsumed()); |
308 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); | 309 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); |
309 } | 310 } |
310 | 311 |
311 TEST_P(QuicChromiumClientSessionTest, ConfirmationRequiredStreamRequest) { | 312 TEST_P(QuicChromiumClientSessionTest, ConfirmationRequiredStreamRequest) { |
312 MockQuicData quic_data; | 313 MockQuicData quic_data; |
313 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 314 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
314 quic_data.AddRead(ASYNC, ERR_IO_PENDING); | 315 quic_data.AddRead(ASYNC, ERR_IO_PENDING); |
315 quic_data.AddRead(ASYNC, OK); // EOF | 316 quic_data.AddRead(ASYNC, OK); // EOF |
316 quic_data.AddSocketDataToFactory(&socket_factory_); | 317 quic_data.AddSocketDataToFactory(&socket_factory_); |
317 | 318 |
318 Initialize(); | 319 Initialize(); |
319 CompleteCryptoHandshake(); | 320 CompleteCryptoHandshake(); |
320 | 321 |
321 // Request a stream and verify that a stream was created. | 322 // Request a stream and verify that a stream was created. |
322 std::unique_ptr<QuicChromiumClientSession::Handle> handle = | 323 std::unique_ptr<QuicChromiumClientSession::Handle> handle = |
323 session_->CreateHandle(); | 324 session_->CreateHandle(); |
324 TestCompletionCallback callback; | 325 TestCompletionCallback callback; |
325 ASSERT_EQ(OK, handle->RequestStream(/*requires_confirmation=*/true, | 326 ASSERT_EQ(OK, handle->RequestStream(/*requires_confirmation=*/true, |
326 callback.callback())); | 327 callback.callback())); |
327 EXPECT_TRUE(handle->ReleaseStream() != nullptr); | 328 EXPECT_TRUE(handle->ReleaseStream(&delegate_) != nullptr); |
328 | 329 |
329 quic_data.Resume(); | 330 quic_data.Resume(); |
330 EXPECT_TRUE(quic_data.AllReadDataConsumed()); | 331 EXPECT_TRUE(quic_data.AllReadDataConsumed()); |
331 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); | 332 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); |
332 } | 333 } |
333 | 334 |
334 TEST_P(QuicChromiumClientSessionTest, StreamRequestBeforeConfirmation) { | 335 TEST_P(QuicChromiumClientSessionTest, StreamRequestBeforeConfirmation) { |
335 MockQuicData quic_data; | 336 MockQuicData quic_data; |
336 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 337 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
337 quic_data.AddRead(ASYNC, ERR_IO_PENDING); | 338 quic_data.AddRead(ASYNC, ERR_IO_PENDING); |
338 quic_data.AddRead(ASYNC, OK); // EOF | 339 quic_data.AddRead(ASYNC, OK); // EOF |
339 quic_data.AddSocketDataToFactory(&socket_factory_); | 340 quic_data.AddSocketDataToFactory(&socket_factory_); |
340 | 341 |
341 Initialize(); | 342 Initialize(); |
342 | 343 |
343 // Request a stream and verify that a stream was created. | 344 // Request a stream and verify that a stream was created. |
344 std::unique_ptr<QuicChromiumClientSession::Handle> handle = | 345 std::unique_ptr<QuicChromiumClientSession::Handle> handle = |
345 session_->CreateHandle(); | 346 session_->CreateHandle(); |
346 TestCompletionCallback callback; | 347 TestCompletionCallback callback; |
347 ASSERT_EQ(ERR_IO_PENDING, | 348 ASSERT_EQ(ERR_IO_PENDING, |
348 handle->RequestStream(/*requires_confirmation=*/true, | 349 handle->RequestStream(/*requires_confirmation=*/true, |
349 callback.callback())); | 350 callback.callback())); |
350 | 351 |
351 CompleteCryptoHandshake(); | 352 CompleteCryptoHandshake(); |
352 | 353 |
353 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 354 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
354 | 355 |
355 EXPECT_TRUE(handle->ReleaseStream() != nullptr); | 356 EXPECT_TRUE(handle->ReleaseStream(&delegate_) != nullptr); |
356 | 357 |
357 quic_data.Resume(); | 358 quic_data.Resume(); |
358 EXPECT_TRUE(quic_data.AllReadDataConsumed()); | 359 EXPECT_TRUE(quic_data.AllReadDataConsumed()); |
359 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); | 360 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); |
360 } | 361 } |
361 | 362 |
362 TEST_P(QuicChromiumClientSessionTest, CancelStreamRequestBeforeRelease) { | 363 TEST_P(QuicChromiumClientSessionTest, CancelStreamRequestBeforeRelease) { |
363 MockQuicData quic_data; | 364 MockQuicData quic_data; |
364 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 365 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
365 quic_data.AddWrite(client_maker_.MakeRstPacket( | 366 quic_data.AddWrite(client_maker_.MakeRstPacket( |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 ASSERT_EQ(ERR_IO_PENDING, | 412 ASSERT_EQ(ERR_IO_PENDING, |
412 handle->RequestStream(/*requires_confirmation=*/false, | 413 handle->RequestStream(/*requires_confirmation=*/false, |
413 callback.callback())); | 414 callback.callback())); |
414 | 415 |
415 // Close a stream and ensure the stream request completes. | 416 // Close a stream and ensure the stream request completes. |
416 QuicRstStreamFrame rst(GetNthClientInitiatedStreamId(0), | 417 QuicRstStreamFrame rst(GetNthClientInitiatedStreamId(0), |
417 QUIC_STREAM_CANCELLED, 0); | 418 QUIC_STREAM_CANCELLED, 0); |
418 session_->OnRstStream(rst); | 419 session_->OnRstStream(rst); |
419 ASSERT_TRUE(callback.have_result()); | 420 ASSERT_TRUE(callback.have_result()); |
420 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 421 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
421 EXPECT_TRUE(handle->ReleaseStream() != nullptr); | 422 EXPECT_TRUE(handle->ReleaseStream(&delegate_) != nullptr); |
422 | 423 |
423 quic_data.Resume(); | 424 quic_data.Resume(); |
424 EXPECT_TRUE(quic_data.AllReadDataConsumed()); | 425 EXPECT_TRUE(quic_data.AllReadDataConsumed()); |
425 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); | 426 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); |
426 } | 427 } |
427 | 428 |
428 TEST_P(QuicChromiumClientSessionTest, CancelPendingStreamRequest) { | 429 TEST_P(QuicChromiumClientSessionTest, CancelPendingStreamRequest) { |
429 MockQuicData quic_data; | 430 MockQuicData quic_data; |
430 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 431 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
431 quic_data.AddWrite(client_maker_.MakeRstPacket( | 432 quic_data.AddWrite(client_maker_.MakeRstPacket( |
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
916 handle->RequestStream(/*requires_confirmation=*/false, | 917 handle->RequestStream(/*requires_confirmation=*/false, |
917 callback.callback())); | 918 callback.callback())); |
918 | 919 |
919 // Close a stream and ensure I can now open a new one. | 920 // Close a stream and ensure I can now open a new one. |
920 QuicStreamId stream_id = streams[0]->id(); | 921 QuicStreamId stream_id = streams[0]->id(); |
921 session_->CloseStream(stream_id); | 922 session_->CloseStream(stream_id); |
922 QuicRstStreamFrame rst1(stream_id, QUIC_STREAM_NO_ERROR, 0); | 923 QuicRstStreamFrame rst1(stream_id, QUIC_STREAM_NO_ERROR, 0); |
923 session_->OnRstStream(rst1); | 924 session_->OnRstStream(rst1); |
924 ASSERT_TRUE(callback.have_result()); | 925 ASSERT_TRUE(callback.have_result()); |
925 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 926 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
926 EXPECT_TRUE(handle->ReleaseStream() != nullptr); | 927 EXPECT_TRUE(handle->ReleaseStream(&delegate_) != nullptr); |
927 } | 928 } |
928 | 929 |
929 TEST_P(QuicChromiumClientSessionTest, GoAwayReceived) { | 930 TEST_P(QuicChromiumClientSessionTest, GoAwayReceived) { |
930 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 931 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
931 std::unique_ptr<QuicEncryptedPacket> settings_packet( | 932 std::unique_ptr<QuicEncryptedPacket> settings_packet( |
932 client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 933 client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
933 MockWrite writes[] = { | 934 MockWrite writes[] = { |
934 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1)}; | 935 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1)}; |
935 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, | 936 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, |
936 arraysize(writes))); | 937 arraysize(writes))); |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1256 | 1257 |
1257 EXPECT_TRUE(socket_data_->AllReadDataConsumed()); | 1258 EXPECT_TRUE(socket_data_->AllReadDataConsumed()); |
1258 EXPECT_TRUE(socket_data_->AllWriteDataConsumed()); | 1259 EXPECT_TRUE(socket_data_->AllWriteDataConsumed()); |
1259 EXPECT_TRUE(new_socket_data.AllReadDataConsumed()); | 1260 EXPECT_TRUE(new_socket_data.AllReadDataConsumed()); |
1260 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed()); | 1261 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed()); |
1261 } | 1262 } |
1262 | 1263 |
1263 } // namespace | 1264 } // namespace |
1264 } // namespace test | 1265 } // namespace test |
1265 } // namespace net | 1266 } // namespace net |
OLD | NEW |