| 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_stream_factory.h" | 5 #include "net/quic/chromium/quic_stream_factory.h" |
| 6 | 6 |
| 7 #include <ostream> | 7 #include <ostream> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 std::move(headers), &spdy_headers_frame_len); | 505 std::move(headers), &spdy_headers_frame_len); |
| 506 } | 506 } |
| 507 | 507 |
| 508 // Helper method for server migration tests. | 508 // Helper method for server migration tests. |
| 509 void VerifyServerMigration(QuicConfig& config, IPEndPoint expected_address) { | 509 void VerifyServerMigration(QuicConfig& config, IPEndPoint expected_address) { |
| 510 allow_server_migration_ = true; | 510 allow_server_migration_ = true; |
| 511 Initialize(); | 511 Initialize(); |
| 512 | 512 |
| 513 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 513 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| 514 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 514 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 515 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | |
| 516 | |
| 517 crypto_client_stream_factory_.SetConfig(config); | 515 crypto_client_stream_factory_.SetConfig(config); |
| 518 | 516 |
| 519 // Set up first socket data provider. | 517 // Set up first socket data provider. |
| 520 MockRead reads1[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 518 MockRead reads1[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 521 SequencedSocketData socket_data1(reads1, arraysize(reads1), nullptr, 0); | 519 SequencedSocketData socket_data1(reads1, arraysize(reads1), nullptr, 0); |
| 522 socket_factory_.AddSocketDataProvider(&socket_data1); | 520 socket_factory_.AddSocketDataProvider(&socket_data1); |
| 523 | 521 |
| 524 // Set up second socket data provider that is used after | 522 // Set up second socket data provider that is used after migration. |
| 525 // migration. | 523 std::unique_ptr<QuicEncryptedPacket> sendping( |
| 526 std::unique_ptr<QuicEncryptedPacket> ping( | |
| 527 client_maker_.MakePingPacket(1, /*include_version=*/true)); | 524 client_maker_.MakePingPacket(1, /*include_version=*/true)); |
| 528 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 525 std::unique_ptr<QuicEncryptedPacket> client_rst( |
| 529 2, true, kClientDataStreamId1, QUIC_STREAM_CANCELLED)); | 526 client_maker_.MakeAckAndRstPacket(2, false, kClientDataStreamId1, |
| 527 QUIC_STREAM_CANCELLED, 1, 1, 1, |
| 528 true)); |
| 530 MockWrite writes2[] = { | 529 MockWrite writes2[] = { |
| 531 MockWrite(SYNCHRONOUS, ping->data(), ping->length(), 1), | 530 MockWrite(SYNCHRONOUS, sendping->data(), sendping->length(), 0), |
| 532 MockWrite(SYNCHRONOUS, client_rst->data(), client_rst->length(), 2)}; | 531 MockWrite(SYNCHRONOUS, client_rst->data(), client_rst->length(), 3)}; |
| 533 MockRead reads2[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 532 std::unique_ptr<QuicEncryptedPacket> recvping( |
| 533 client_maker_.MakePingPacket(1, /*include_version=*/false)); |
| 534 MockRead reads2[] = { |
| 535 MockRead(ASYNC, recvping->data(), recvping->length(), 1), |
| 536 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2)}; |
| 534 SequencedSocketData socket_data2(reads2, arraysize(reads2), writes2, | 537 SequencedSocketData socket_data2(reads2, arraysize(reads2), writes2, |
| 535 arraysize(writes2)); | 538 arraysize(writes2)); |
| 536 socket_factory_.AddSocketDataProvider(&socket_data2); | 539 socket_factory_.AddSocketDataProvider(&socket_data2); |
| 537 | 540 |
| 538 // Create request and QuicHttpStream. | 541 // Create request and QuicHttpStream. |
| 539 QuicStreamRequest request(factory_.get()); | 542 QuicStreamRequest request(factory_.get()); |
| 540 EXPECT_EQ(ERR_IO_PENDING, | 543 EXPECT_EQ(ERR_IO_PENDING, |
| 541 request.Request(host_port_pair_, privacy_mode_, | 544 request.Request(host_port_pair_, privacy_mode_, |
| 542 /*cert_verify_flags=*/0, url_, "GET", net_log_, | 545 /*cert_verify_flags=*/0, url_, "GET", net_log_, |
| 543 callback_.callback())); | 546 callback_.callback())); |
| 544 EXPECT_EQ(OK, callback_.WaitForResult()); | 547 EXPECT_EQ(OK, callback_.WaitForResult()); |
| 545 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); | 548 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); |
| 546 EXPECT_TRUE(stream.get()); | 549 EXPECT_TRUE(stream.get()); |
| 547 | 550 |
| 548 // Cause QUIC stream to be created. | 551 // Cause QUIC stream to be created. |
| 549 HttpRequestInfo request_info; | 552 HttpRequestInfo request_info; |
| 550 request_info.method = "GET"; | 553 request_info.method = "GET"; |
| 551 request_info.url = GURL("https://www.example.org/"); | 554 request_info.url = GURL("https://www.example.org/"); |
| 552 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY, | 555 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY, |
| 553 net_log_, CompletionCallback())); | 556 net_log_, CompletionCallback())); |
| 554 | |
| 555 // Ensure that session is alive and active. | 557 // Ensure that session is alive and active. |
| 556 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); | 558 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); |
| 557 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); | 559 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); |
| 558 EXPECT_TRUE(HasActiveSession(host_port_pair_)); | 560 EXPECT_TRUE(HasActiveSession(host_port_pair_)); |
| 559 | 561 |
| 560 IPEndPoint actual_address; | 562 IPEndPoint actual_address; |
| 561 session->GetDefaultSocket()->GetPeerAddress(&actual_address); | 563 session->GetDefaultSocket()->GetPeerAddress(&actual_address); |
| 562 EXPECT_EQ(actual_address, expected_address); | 564 EXPECT_EQ(actual_address, expected_address); |
| 563 DVLOG(1) << "Socket connected to: " << actual_address.address().ToString() | 565 DVLOG(1) << "Socket connected to: " << actual_address.address().ToString() |
| 564 << " " << actual_address.port(); | 566 << " " << actual_address.port(); |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 822 net_log_, callback.callback())); | 824 net_log_, callback.callback())); |
| 823 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream(); | 825 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream(); |
| 824 EXPECT_TRUE(stream2.get()); | 826 EXPECT_TRUE(stream2.get()); |
| 825 | 827 |
| 826 EXPECT_EQ(GetActiveSession(host_port_pair_), GetActiveSession(server2)); | 828 EXPECT_EQ(GetActiveSession(host_port_pair_), GetActiveSession(server2)); |
| 827 | 829 |
| 828 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 830 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
| 829 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 831 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
| 830 } | 832 } |
| 831 | 833 |
| 834 TEST_P(QuicStreamFactoryTest, PoolingWithServerMigration) { |
| 835 // Set up session to migrate. |
| 836 host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(), |
| 837 "192.168.0.1", ""); |
| 838 IPEndPoint alt_address = IPEndPoint(IPAddress(1, 2, 3, 4), 443); |
| 839 QuicConfig config; |
| 840 config.SetAlternateServerAddressToSend(alt_address); |
| 841 |
| 842 VerifyServerMigration(config, alt_address); |
| 843 |
| 844 // Close server-migrated session. |
| 845 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); |
| 846 session->CloseSessionOnError(0u, QUIC_NO_ERROR); |
| 847 |
| 848 // Set up server IP, socket, proof, and config for new session. |
| 849 HostPortPair server2(kServer2HostName, kDefaultServerPort); |
| 850 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); |
| 851 |
| 852 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 853 SequencedSocketData socket_data(reads, arraysize(reads), nullptr, 0); |
| 854 socket_factory_.AddSocketDataProvider(&socket_data); |
| 855 |
| 856 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| 857 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 858 QuicConfig config2; |
| 859 crypto_client_stream_factory_.SetConfig(config2); |
| 860 |
| 861 // Create new request to cause new session creation. |
| 862 TestCompletionCallback callback; |
| 863 QuicStreamRequest request2(factory_.get()); |
| 864 EXPECT_EQ(ERR_IO_PENDING, |
| 865 request2.Request(server2, privacy_mode_, |
| 866 /*cert_verify_flags=*/0, url2_, "GET", net_log_, |
| 867 callback.callback())); |
| 868 EXPECT_EQ(OK, callback.WaitForResult()); |
| 869 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream(); |
| 870 EXPECT_TRUE(stream2.get()); |
| 871 |
| 872 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
| 873 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
| 874 // EXPECT_EQ(GetActiveSession(host_port_pair_), GetActiveSession(server2)); |
| 875 } |
| 876 |
| 832 TEST_P(QuicStreamFactoryTest, NoPoolingIfDisabled) { | 877 TEST_P(QuicStreamFactoryTest, NoPoolingIfDisabled) { |
| 833 disable_connection_pooling_ = true; | 878 disable_connection_pooling_ = true; |
| 834 Initialize(); | 879 Initialize(); |
| 835 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 880 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| 836 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 881 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 837 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 882 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 838 | 883 |
| 839 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 884 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 840 SequencedSocketData socket_data1(reads, arraysize(reads), nullptr, 0); | 885 SequencedSocketData socket_data1(reads, arraysize(reads), nullptr, 0); |
| 841 SequencedSocketData socket_data2(reads, arraysize(reads), nullptr, 0); | 886 SequencedSocketData socket_data2(reads, arraysize(reads), nullptr, 0); |
| (...skipping 4336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5178 // Clear all cached states. | 5223 // Clear all cached states. |
| 5179 factory_->ClearCachedStatesInCryptoConfig( | 5224 factory_->ClearCachedStatesInCryptoConfig( |
| 5180 base::Callback<bool(const GURL&)>()); | 5225 base::Callback<bool(const GURL&)>()); |
| 5181 EXPECT_TRUE(test_cases[0].state->certs().empty()); | 5226 EXPECT_TRUE(test_cases[0].state->certs().empty()); |
| 5182 EXPECT_TRUE(test_cases[1].state->certs().empty()); | 5227 EXPECT_TRUE(test_cases[1].state->certs().empty()); |
| 5183 EXPECT_TRUE(test_cases[2].state->certs().empty()); | 5228 EXPECT_TRUE(test_cases[2].state->certs().empty()); |
| 5184 } | 5229 } |
| 5185 | 5230 |
| 5186 } // namespace test | 5231 } // namespace test |
| 5187 } // namespace net | 5232 } // namespace net |
| OLD | NEW |