| 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/quic_chromium_client_session.h" | 5 #include "net/quic/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 19 matching lines...) Expand all Loading... |
| 30 #include "net/quic/test_tools/crypto_test_utils.h" | 30 #include "net/quic/test_tools/crypto_test_utils.h" |
| 31 #include "net/quic/test_tools/mock_crypto_client_stream_factory.h" | 31 #include "net/quic/test_tools/mock_crypto_client_stream_factory.h" |
| 32 #include "net/quic/test_tools/quic_chromium_client_session_peer.h" | 32 #include "net/quic/test_tools/quic_chromium_client_session_peer.h" |
| 33 #include "net/quic/test_tools/quic_spdy_session_peer.h" | 33 #include "net/quic/test_tools/quic_spdy_session_peer.h" |
| 34 #include "net/quic/test_tools/quic_test_packet_maker.h" | 34 #include "net/quic/test_tools/quic_test_packet_maker.h" |
| 35 #include "net/quic/test_tools/quic_test_utils.h" | 35 #include "net/quic/test_tools/quic_test_utils.h" |
| 36 #include "net/quic/test_tools/simple_quic_framer.h" | 36 #include "net/quic/test_tools/simple_quic_framer.h" |
| 37 #include "net/socket/socket_test_util.h" | 37 #include "net/socket/socket_test_util.h" |
| 38 #include "net/spdy/spdy_test_utils.h" | 38 #include "net/spdy/spdy_test_utils.h" |
| 39 #include "net/test/cert_test_util.h" | 39 #include "net/test/cert_test_util.h" |
| 40 #include "net/test/gtest_util.h" |
| 40 #include "net/test/test_data_directory.h" | 41 #include "net/test/test_data_directory.h" |
| 41 #include "net/udp/datagram_client_socket.h" | 42 #include "net/udp/datagram_client_socket.h" |
| 43 #include "testing/gmock/include/gmock/gmock.h" |
| 42 | 44 |
| 43 using testing::_; | 45 using testing::_; |
| 44 | 46 |
| 45 namespace net { | 47 namespace net { |
| 46 namespace test { | 48 namespace test { |
| 47 namespace { | 49 namespace { |
| 48 | 50 |
| 49 const IPEndPoint kIpEndPoint = IPEndPoint(IPAddress::IPv4AllZeros(), 0); | 51 const IPEndPoint kIpEndPoint = IPEndPoint(IPAddress::IPv4AllZeros(), 0); |
| 50 const char kServerHostname[] = "test.example.com"; | 52 const char kServerHostname[] = "test.example.com"; |
| 51 const uint16_t kServerPort = 443; | 53 const uint16_t kServerPort = 443; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 verify_details_.cert_verify_result.is_issued_by_known_root = true; | 110 verify_details_.cert_verify_result.is_issued_by_known_root = true; |
| 109 session_->Initialize(); | 111 session_->Initialize(); |
| 110 session_->StartReading(); | 112 session_->StartReading(); |
| 111 } | 113 } |
| 112 | 114 |
| 113 void TearDown() override { | 115 void TearDown() override { |
| 114 session_->CloseSessionOnError(ERR_ABORTED, QUIC_INTERNAL_ERROR); | 116 session_->CloseSessionOnError(ERR_ABORTED, QUIC_INTERNAL_ERROR); |
| 115 } | 117 } |
| 116 | 118 |
| 117 void CompleteCryptoHandshake() { | 119 void CompleteCryptoHandshake() { |
| 118 ASSERT_EQ(OK, session_->CryptoConnect(false, callback_.callback())); | 120 ASSERT_THAT(session_->CryptoConnect(false, callback_.callback()), IsOk()); |
| 119 } | 121 } |
| 120 | 122 |
| 121 QuicPacketWriter* CreateQuicPacketWriter(DatagramClientSocket* socket, | 123 QuicPacketWriter* CreateQuicPacketWriter(DatagramClientSocket* socket, |
| 122 QuicConnection* connection) const { | 124 QuicConnection* connection) const { |
| 123 std::unique_ptr<QuicChromiumPacketWriter> writer( | 125 std::unique_ptr<QuicChromiumPacketWriter> writer( |
| 124 new QuicChromiumPacketWriter(socket)); | 126 new QuicChromiumPacketWriter(socket)); |
| 125 writer->SetConnection(connection); | 127 writer->SetConnection(connection); |
| 126 return writer.release(); | 128 return writer.release(); |
| 127 } | 129 } |
| 128 | 130 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 ASSERT_EQ(ERR_IO_PENDING, | 220 ASSERT_EQ(ERR_IO_PENDING, |
| 219 stream_request.StartRequest(session_->GetWeakPtr(), &stream, | 221 stream_request.StartRequest(session_->GetWeakPtr(), &stream, |
| 220 callback.callback())); | 222 callback.callback())); |
| 221 | 223 |
| 222 // Close a stream and ensure I can now open a new one. | 224 // Close a stream and ensure I can now open a new one. |
| 223 QuicStreamId stream_id = streams[0]->id(); | 225 QuicStreamId stream_id = streams[0]->id(); |
| 224 session_->CloseStream(stream_id); | 226 session_->CloseStream(stream_id); |
| 225 QuicRstStreamFrame rst1(stream_id, QUIC_STREAM_NO_ERROR, 0); | 227 QuicRstStreamFrame rst1(stream_id, QUIC_STREAM_NO_ERROR, 0); |
| 226 session_->OnRstStream(rst1); | 228 session_->OnRstStream(rst1); |
| 227 ASSERT_TRUE(callback.have_result()); | 229 ASSERT_TRUE(callback.have_result()); |
| 228 EXPECT_EQ(OK, callback.WaitForResult()); | 230 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 229 EXPECT_TRUE(stream != nullptr); | 231 EXPECT_TRUE(stream != nullptr); |
| 230 } | 232 } |
| 231 | 233 |
| 232 TEST_P(QuicChromiumClientSessionTest, GoAwayReceived) { | 234 TEST_P(QuicChromiumClientSessionTest, GoAwayReceived) { |
| 233 Initialize(); | 235 Initialize(); |
| 234 CompleteCryptoHandshake(); | 236 CompleteCryptoHandshake(); |
| 235 | 237 |
| 236 // After receiving a GoAway, I should no longer be able to create outgoing | 238 // After receiving a GoAway, I should no longer be able to create outgoing |
| 237 // streams. | 239 // streams. |
| 238 session_->connection()->OnGoAwayFrame( | 240 session_->connection()->OnGoAwayFrame( |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 ack_and_data_out->length(), 3)}; | 359 ack_and_data_out->length(), 3)}; |
| 358 StaticSocketDataProvider socket_data(reads, arraysize(reads), writes, | 360 StaticSocketDataProvider socket_data(reads, arraysize(reads), writes, |
| 359 arraysize(writes)); | 361 arraysize(writes)); |
| 360 socket_factory_.AddSocketDataProvider(&socket_data); | 362 socket_factory_.AddSocketDataProvider(&socket_data); |
| 361 | 363 |
| 362 // Create connected socket. | 364 // Create connected socket. |
| 363 std::unique_ptr<DatagramClientSocket> new_socket = | 365 std::unique_ptr<DatagramClientSocket> new_socket = |
| 364 socket_factory_.CreateDatagramClientSocket(DatagramSocket::DEFAULT_BIND, | 366 socket_factory_.CreateDatagramClientSocket(DatagramSocket::DEFAULT_BIND, |
| 365 base::Bind(&base::RandInt), | 367 base::Bind(&base::RandInt), |
| 366 &net_log_, NetLog::Source()); | 368 &net_log_, NetLog::Source()); |
| 367 EXPECT_EQ(OK, new_socket->Connect(kIpEndPoint)); | 369 EXPECT_THAT(new_socket->Connect(kIpEndPoint), IsOk()); |
| 368 | 370 |
| 369 // Create reader and writer. | 371 // Create reader and writer. |
| 370 std::unique_ptr<QuicChromiumPacketReader> new_reader( | 372 std::unique_ptr<QuicChromiumPacketReader> new_reader( |
| 371 new QuicChromiumPacketReader(new_socket.get(), &clock_, session_.get(), | 373 new QuicChromiumPacketReader(new_socket.get(), &clock_, session_.get(), |
| 372 kQuicYieldAfterPacketsRead, | 374 kQuicYieldAfterPacketsRead, |
| 373 QuicTime::Delta::FromMilliseconds( | 375 QuicTime::Delta::FromMilliseconds( |
| 374 kQuicYieldAfterDurationMilliseconds), | 376 kQuicYieldAfterDurationMilliseconds), |
| 375 bound_net_log_.bound())); | 377 bound_net_log_.bound())); |
| 376 std::unique_ptr<QuicPacketWriter> new_writer( | 378 std::unique_ptr<QuicPacketWriter> new_writer( |
| 377 CreateQuicPacketWriter(new_socket.get(), session_->connection())); | 379 CreateQuicPacketWriter(new_socket.get(), session_->connection())); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 405 MockWrite(SYNCHRONOUS, ping_out->data(), ping_out->length(), i + 2)}; | 407 MockWrite(SYNCHRONOUS, ping_out->data(), ping_out->length(), i + 2)}; |
| 406 StaticSocketDataProvider socket_data(reads, arraysize(reads), writes, | 408 StaticSocketDataProvider socket_data(reads, arraysize(reads), writes, |
| 407 arraysize(writes)); | 409 arraysize(writes)); |
| 408 socket_factory_.AddSocketDataProvider(&socket_data); | 410 socket_factory_.AddSocketDataProvider(&socket_data); |
| 409 | 411 |
| 410 // Create connected socket. | 412 // Create connected socket. |
| 411 std::unique_ptr<DatagramClientSocket> new_socket = | 413 std::unique_ptr<DatagramClientSocket> new_socket = |
| 412 socket_factory_.CreateDatagramClientSocket(DatagramSocket::DEFAULT_BIND, | 414 socket_factory_.CreateDatagramClientSocket(DatagramSocket::DEFAULT_BIND, |
| 413 base::Bind(&base::RandInt), | 415 base::Bind(&base::RandInt), |
| 414 &net_log_, NetLog::Source()); | 416 &net_log_, NetLog::Source()); |
| 415 EXPECT_EQ(OK, new_socket->Connect(kIpEndPoint)); | 417 EXPECT_THAT(new_socket->Connect(kIpEndPoint), IsOk()); |
| 416 | 418 |
| 417 // Create reader and writer. | 419 // Create reader and writer. |
| 418 std::unique_ptr<QuicChromiumPacketReader> new_reader( | 420 std::unique_ptr<QuicChromiumPacketReader> new_reader( |
| 419 new QuicChromiumPacketReader(new_socket.get(), &clock_, session_.get(), | 421 new QuicChromiumPacketReader(new_socket.get(), &clock_, session_.get(), |
| 420 kQuicYieldAfterPacketsRead, | 422 kQuicYieldAfterPacketsRead, |
| 421 QuicTime::Delta::FromMilliseconds( | 423 QuicTime::Delta::FromMilliseconds( |
| 422 kQuicYieldAfterDurationMilliseconds), | 424 kQuicYieldAfterDurationMilliseconds), |
| 423 bound_net_log_.bound())); | 425 bound_net_log_.bound())); |
| 424 std::unique_ptr<QuicPacketWriter> new_writer( | 426 std::unique_ptr<QuicPacketWriter> new_writer( |
| 425 CreateQuicPacketWriter(new_socket.get(), session_->connection())); | 427 CreateQuicPacketWriter(new_socket.get(), session_->connection())); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 MockRead(ASYNC, ERR_NETWORK_CHANGED, 5)}; | 467 MockRead(ASYNC, ERR_NETWORK_CHANGED, 5)}; |
| 466 SequencedSocketData new_socket_data(new_reads, arraysize(new_reads), writes, | 468 SequencedSocketData new_socket_data(new_reads, arraysize(new_reads), writes, |
| 467 arraysize(writes)); | 469 arraysize(writes)); |
| 468 socket_factory_.AddSocketDataProvider(&new_socket_data); | 470 socket_factory_.AddSocketDataProvider(&new_socket_data); |
| 469 | 471 |
| 470 // Create connected socket. | 472 // Create connected socket. |
| 471 std::unique_ptr<DatagramClientSocket> new_socket = | 473 std::unique_ptr<DatagramClientSocket> new_socket = |
| 472 socket_factory_.CreateDatagramClientSocket(DatagramSocket::DEFAULT_BIND, | 474 socket_factory_.CreateDatagramClientSocket(DatagramSocket::DEFAULT_BIND, |
| 473 base::Bind(&base::RandInt), | 475 base::Bind(&base::RandInt), |
| 474 &net_log_, NetLog::Source()); | 476 &net_log_, NetLog::Source()); |
| 475 EXPECT_EQ(OK, new_socket->Connect(kIpEndPoint)); | 477 EXPECT_THAT(new_socket->Connect(kIpEndPoint), IsOk()); |
| 476 | 478 |
| 477 // Create reader and writer. | 479 // Create reader and writer. |
| 478 std::unique_ptr<QuicChromiumPacketReader> new_reader( | 480 std::unique_ptr<QuicChromiumPacketReader> new_reader( |
| 479 new QuicChromiumPacketReader(new_socket.get(), &clock_, session_.get(), | 481 new QuicChromiumPacketReader(new_socket.get(), &clock_, session_.get(), |
| 480 kQuicYieldAfterPacketsRead, | 482 kQuicYieldAfterPacketsRead, |
| 481 QuicTime::Delta::FromMilliseconds( | 483 QuicTime::Delta::FromMilliseconds( |
| 482 kQuicYieldAfterDurationMilliseconds), | 484 kQuicYieldAfterDurationMilliseconds), |
| 483 bound_net_log_.bound())); | 485 bound_net_log_.bound())); |
| 484 std::unique_ptr<QuicPacketWriter> new_writer( | 486 std::unique_ptr<QuicPacketWriter> new_writer( |
| 485 CreateQuicPacketWriter(new_socket.get(), session_->connection())); | 487 CreateQuicPacketWriter(new_socket.get(), session_->connection())); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 MockWrite(SYNCHRONOUS, ERR_FAILED, 2)}; | 520 MockWrite(SYNCHRONOUS, ERR_FAILED, 2)}; |
| 519 SequencedSocketData socket_data(reads, arraysize(reads), writes, | 521 SequencedSocketData socket_data(reads, arraysize(reads), writes, |
| 520 arraysize(writes)); | 522 arraysize(writes)); |
| 521 socket_factory_.AddSocketDataProvider(&socket_data); | 523 socket_factory_.AddSocketDataProvider(&socket_data); |
| 522 | 524 |
| 523 // Create connected socket. | 525 // Create connected socket. |
| 524 std::unique_ptr<DatagramClientSocket> new_socket = | 526 std::unique_ptr<DatagramClientSocket> new_socket = |
| 525 socket_factory_.CreateDatagramClientSocket(DatagramSocket::DEFAULT_BIND, | 527 socket_factory_.CreateDatagramClientSocket(DatagramSocket::DEFAULT_BIND, |
| 526 base::Bind(&base::RandInt), | 528 base::Bind(&base::RandInt), |
| 527 &net_log_, NetLog::Source()); | 529 &net_log_, NetLog::Source()); |
| 528 EXPECT_EQ(OK, new_socket->Connect(kIpEndPoint)); | 530 EXPECT_THAT(new_socket->Connect(kIpEndPoint), IsOk()); |
| 529 | 531 |
| 530 // Create reader and writer. | 532 // Create reader and writer. |
| 531 std::unique_ptr<QuicChromiumPacketReader> new_reader( | 533 std::unique_ptr<QuicChromiumPacketReader> new_reader( |
| 532 new QuicChromiumPacketReader(new_socket.get(), &clock_, session_.get(), | 534 new QuicChromiumPacketReader(new_socket.get(), &clock_, session_.get(), |
| 533 kQuicYieldAfterPacketsRead, | 535 kQuicYieldAfterPacketsRead, |
| 534 QuicTime::Delta::FromMilliseconds( | 536 QuicTime::Delta::FromMilliseconds( |
| 535 kQuicYieldAfterDurationMilliseconds), | 537 kQuicYieldAfterDurationMilliseconds), |
| 536 bound_net_log_.bound())); | 538 bound_net_log_.bound())); |
| 537 std::unique_ptr<QuicPacketWriter> new_writer( | 539 std::unique_ptr<QuicPacketWriter> new_writer( |
| 538 CreateQuicPacketWriter(new_socket.get(), session_->connection())); | 540 CreateQuicPacketWriter(new_socket.get(), session_->connection())); |
| 539 | 541 |
| 540 // Migrate session. | 542 // Migrate session. |
| 541 EXPECT_TRUE(session_->MigrateToSocket( | 543 EXPECT_TRUE(session_->MigrateToSocket( |
| 542 std::move(new_socket), std::move(new_reader), std::move(new_writer))); | 544 std::move(new_socket), std::move(new_reader), std::move(new_writer))); |
| 543 | 545 |
| 544 // Write error on new socket causes session close. | 546 // Write error on new socket causes session close. |
| 545 EXPECT_TRUE(session_->connection()->connected()); | 547 EXPECT_TRUE(session_->connection()->connected()); |
| 546 session_->connection()->SendPing(); | 548 session_->connection()->SendPing(); |
| 547 EXPECT_FALSE(session_->connection()->connected()); | 549 EXPECT_FALSE(session_->connection()->connected()); |
| 548 | 550 |
| 549 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 551 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
| 550 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 552 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
| 551 } | 553 } |
| 552 | 554 |
| 553 } // namespace | 555 } // namespace |
| 554 } // namespace test | 556 } // namespace test |
| 555 } // namespace net | 557 } // namespace net |
| OLD | NEW |