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

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

Issue 2329853002: Introduces ability for session to wait on a migration trigger for a new (Closed)
Patch Set: comments addressed Created 4 years, 3 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_stream_factory.cc ('k') | no next file » | 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_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 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 << " " << actual_address.port(); 500 << " " << actual_address.port();
501 DVLOG(1) << "Expected address: " << expected_address.address().ToString() 501 DVLOG(1) << "Expected address: " << expected_address.address().ToString()
502 << " " << expected_address.port(); 502 << " " << expected_address.port();
503 503
504 stream.reset(); 504 stream.reset();
505 EXPECT_TRUE(socket_data1.AllReadDataConsumed()); 505 EXPECT_TRUE(socket_data1.AllReadDataConsumed());
506 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); 506 EXPECT_TRUE(socket_data2.AllReadDataConsumed());
507 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); 507 EXPECT_TRUE(socket_data2.AllWriteDataConsumed());
508 } 508 }
509 509
510 void RunTestLoopUntilIdle() {
511 while (!runner_->GetPostedTasks().empty())
512 runner_->RunNextTask();
513 }
514
510 // Helper methods for tests of connection migration on write error. 515 // Helper methods for tests of connection migration on write error.
511 void TestMigrationOnWriteErrorNonMigratableStream(IoMode write_error_mode); 516 void TestMigrationOnWriteErrorNonMigratableStream(IoMode write_error_mode);
512 void TestMigrationOnWriteErrorMigrationDisabled(IoMode write_error_mode); 517 void TestMigrationOnWriteErrorMigrationDisabled(IoMode write_error_mode);
513 void TestMigrationOnWriteError(IoMode write_error_mode); 518 void TestMigrationOnWriteError(IoMode write_error_mode);
514 void TestMigrationOnWriteErrorNoNewNetwork(IoMode write_error_mode); 519 void TestMigrationOnWriteErrorNoNewNetwork(IoMode write_error_mode);
515 void TestMigrationOnMultipleWriteErrors(IoMode first_write_error_mode, 520 void TestMigrationOnMultipleWriteErrors(IoMode first_write_error_mode,
516 IoMode second_write_error_mode); 521 IoMode second_write_error_mode);
517 void TestMigrationOnWriteErrorWithNotificationQueued(bool disconnected); 522 void TestMigrationOnWriteErrorWithNotificationQueued(bool disconnected);
518 void TestMigrationOnNotificationWithWriteErrorQueued(bool disconnected); 523 void TestMigrationOnNotificationWithWriteErrorQueued(bool disconnected);
519 void OnNetworkDisconnected(bool async_write_before); 524 void OnNetworkDisconnected(bool async_write_before);
520 void OnNetworkMadeDefault(bool async_write_before); 525 void OnNetworkMadeDefault(bool async_write_before);
526 void TestMigrationOnWriteErrorPauseBeforeConnected(IoMode write_error_mode);
527 void OnNetworkDisconnectedWithNetworkList(
528 NetworkChangeNotifier::NetworkList network_list);
529 void TestMigrationOnWriteErrorWithNetworkAddedBeforeNotification(
530 IoMode write_error_mode,
531 bool disconnected);
521 532
522 MockHostResolver host_resolver_; 533 MockHostResolver host_resolver_;
523 scoped_refptr<SSLConfigService> ssl_config_service_; 534 scoped_refptr<SSLConfigService> ssl_config_service_;
524 MockClientSocketFactory socket_factory_; 535 MockClientSocketFactory socket_factory_;
525 MockCryptoClientStreamFactory crypto_client_stream_factory_; 536 MockCryptoClientStreamFactory crypto_client_stream_factory_;
526 MockRandom random_generator_; 537 MockRandom random_generator_;
527 MockClock* clock_; // Owned by |factory_| once created. 538 MockClock* clock_; // Owned by |factory_| once created.
528 scoped_refptr<TestTaskRunner> runner_; 539 scoped_refptr<TestTaskRunner> runner_;
529 QuicVersion version_; 540 QuicVersion version_;
530 QuicTestPacketMaker client_maker_; 541 QuicTestPacketMaker client_maker_;
(...skipping 1173 matching lines...) Expand 10 before | Expand all | Expand 10 after
1704 EXPECT_TRUE(socket_data.AllReadDataConsumed()); 1715 EXPECT_TRUE(socket_data.AllReadDataConsumed());
1705 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); 1716 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
1706 EXPECT_TRUE(socket_data1.AllReadDataConsumed()); 1717 EXPECT_TRUE(socket_data1.AllReadDataConsumed());
1707 EXPECT_TRUE(socket_data1.AllWriteDataConsumed()); 1718 EXPECT_TRUE(socket_data1.AllWriteDataConsumed());
1708 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); 1719 EXPECT_TRUE(socket_data2.AllReadDataConsumed());
1709 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); 1720 EXPECT_TRUE(socket_data2.AllWriteDataConsumed());
1710 } 1721 }
1711 1722
1712 TEST_P(QuicStreamFactoryTest, OnNetworkDisconnectedNoNetworks) { 1723 TEST_P(QuicStreamFactoryTest, OnNetworkDisconnectedNoNetworks) {
1713 NetworkChangeNotifier::NetworkList no_networks(0); 1724 NetworkChangeNotifier::NetworkList no_networks(0);
1714 InitializeConnectionMigrationTest(no_networks); 1725 OnNetworkDisconnectedWithNetworkList(no_networks);
1726 }
1727
1728 TEST_P(QuicStreamFactoryTest, OnNetworkDisconnectedNoNewNetwork) {
1729 OnNetworkDisconnectedWithNetworkList({kDefaultNetworkForTests});
1730 }
1731
1732 void QuicStreamFactoryTestBase::OnNetworkDisconnectedWithNetworkList(
1733 NetworkChangeNotifier::NetworkList network_list) {
1734 InitializeConnectionMigrationTest(network_list);
1715 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); 1735 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
1716 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 1736 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
1717 1737
1738 // Use the test task runner, to force the migration alarm timeout later.
1739 QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get());
1740
1718 MockQuicData socket_data; 1741 MockQuicData socket_data;
1719 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); 1742 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
1720 socket_data.AddWrite(client_maker_.MakeRstPacket(
1721 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT));
1722 socket_data.AddSocketDataToFactory(&socket_factory_); 1743 socket_data.AddSocketDataToFactory(&socket_factory_);
1723 1744
1724 // Create request and QuicHttpStream. 1745 // Create request and QuicHttpStream.
1725 QuicStreamRequest request(factory_.get());
1726 EXPECT_EQ(ERR_IO_PENDING,
1727 request.Request(host_port_pair_, privacy_mode_,
1728 /*cert_verify_flags=*/0, url_, "GET", net_log_,
1729 callback_.callback()));
1730 EXPECT_THAT(callback_.WaitForResult(), IsOk());
1731 std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
1732 EXPECT_TRUE(stream.get());
1733
1734 // Cause QUIC stream to be created.
1735 HttpRequestInfo request_info;
1736 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY,
1737 net_log_, CompletionCallback()));
1738
1739 // Ensure that session is alive and active.
1740 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
1741 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1742 EXPECT_TRUE(HasActiveSession(host_port_pair_));
1743
1744 // Trigger connection migration. Since there are no networks
1745 // to migrate to, this should cause a RST_STREAM frame to be emitted
1746 // and the session to be closed.
1747 scoped_mock_network_change_notifier_->mock_network_change_notifier()
1748 ->NotifyNetworkDisconnected(kDefaultNetworkForTests);
1749
1750 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1751 EXPECT_FALSE(HasActiveSession(host_port_pair_));
1752
1753 EXPECT_TRUE(socket_data.AllReadDataConsumed());
1754 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
1755 }
1756
1757 TEST_P(QuicStreamFactoryTest, OnNetworkDisconnectedNoNewNetwork) {
1758 InitializeConnectionMigrationTest({kDefaultNetworkForTests});
1759 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
1760 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
1761
1762 MockQuicData socket_data;
1763 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
1764 socket_data.AddWrite(client_maker_.MakeRstPacket(
1765 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT));
1766 socket_data.AddSocketDataToFactory(&socket_factory_);
1767
1768 // Create request and QuicHttpStream.
1769 QuicStreamRequest request(factory_.get()); 1746 QuicStreamRequest request(factory_.get());
1770 EXPECT_EQ(ERR_IO_PENDING, 1747 EXPECT_EQ(ERR_IO_PENDING,
1771 request.Request(host_port_pair_, privacy_mode_, 1748 request.Request(host_port_pair_, privacy_mode_,
1772 /*cert_verify_flags=*/0, url_, "GET", net_log_, 1749 /*cert_verify_flags=*/0, url_, "GET", net_log_,
1773 callback_.callback())); 1750 callback_.callback()));
1774 EXPECT_THAT(callback_.WaitForResult(), IsOk()); 1751 EXPECT_THAT(callback_.WaitForResult(), IsOk());
1775 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); 1752 std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
1776 EXPECT_TRUE(stream.get()); 1753 EXPECT_TRUE(stream.get());
1777 1754
1778 // Cause QUIC stream to be created. 1755 // Cause QUIC stream to be created.
1779 HttpRequestInfo request_info; 1756 HttpRequestInfo request_info;
1780 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY, 1757 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY,
1781 net_log_, CompletionCallback())); 1758 net_log_, CompletionCallback()));
1782 1759
1783 // Ensure that session is alive and active. 1760 // Ensure that session is alive and active.
1784 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); 1761 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
1785 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 1762 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1786 EXPECT_TRUE(HasActiveSession(host_port_pair_)); 1763 EXPECT_TRUE(HasActiveSession(host_port_pair_));
1787 1764
1788 // Trigger connection migration. Since there are no networks 1765 // Trigger connection migration. Since there are no networks
1789 // to migrate to, this should cause a RST_STREAM frame to be emitted 1766 // to migrate to, this should cause the session to wait for a new network.
1790 // with QUIC_RST_ACKNOWLEDGEMENT error code, and the session will be closed.
1791 scoped_mock_network_change_notifier_->mock_network_change_notifier() 1767 scoped_mock_network_change_notifier_->mock_network_change_notifier()
1792 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); 1768 ->NotifyNetworkDisconnected(kDefaultNetworkForTests);
1793 1769
1770 // The migration will not fail until the migration alarm timeout.
1771 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1772 EXPECT_FALSE(HasActiveSession(host_port_pair_));
1773 EXPECT_EQ(1u, session->GetNumActiveStreams());
1774 EXPECT_EQ(ERR_IO_PENDING, stream->ReadResponseHeaders(callback_.callback()));
1775 EXPECT_EQ(true, session->connection()->writer()->IsWriteBlocked());
1776
1777 // Force the migration alarm timeout to run.
1778 RunTestLoopUntilIdle();
1779
1780 // The connection should now be closed. A request for response
1781 // headers should fail.
1794 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 1782 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1795 EXPECT_FALSE(HasActiveSession(host_port_pair_)); 1783 EXPECT_FALSE(HasActiveSession(host_port_pair_));
1784 EXPECT_EQ(ERR_NETWORK_CHANGED, callback_.WaitForResult());
1796 1785
1797 EXPECT_TRUE(socket_data.AllReadDataConsumed()); 1786 EXPECT_TRUE(socket_data.AllReadDataConsumed());
1798 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); 1787 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
1799 } 1788 }
1800 1789
1801 TEST_P(QuicStreamFactoryTest, OnNetworkMadeDefaultNonMigratableStream) { 1790 TEST_P(QuicStreamFactoryTest, OnNetworkMadeDefaultNonMigratableStream) {
1802 InitializeConnectionMigrationTest( 1791 InitializeConnectionMigrationTest(
1803 {kDefaultNetworkForTests, kNewNetworkForTests}); 1792 {kDefaultNetworkForTests, kNewNetworkForTests});
1804 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); 1793 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
1805 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 1794 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
2060 scoped_mock_network_change_notifier_->mock_network_change_notifier() 2049 scoped_mock_network_change_notifier_->mock_network_change_notifier()
2061 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); 2050 ->NotifyNetworkDisconnected(kDefaultNetworkForTests);
2062 2051
2063 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 2052 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2064 EXPECT_FALSE(HasActiveSession(host_port_pair_)); 2053 EXPECT_FALSE(HasActiveSession(host_port_pair_));
2065 2054
2066 EXPECT_TRUE(socket_data.AllReadDataConsumed()); 2055 EXPECT_TRUE(socket_data.AllReadDataConsumed());
2067 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); 2056 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
2068 } 2057 }
2069 2058
2059 TEST_P(QuicStreamFactoryTest, OnNetworkChangeDisconnectedPauseBeforeConnected) {
2060 InitializeConnectionMigrationTest({kDefaultNetworkForTests});
2061 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
2062 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
2063 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
2064
2065 MockQuicData socket_data;
2066 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
2067 socket_data.AddWrite(
2068 ConstructGetRequestPacket(1, kClientDataStreamId1, true, true));
2069 socket_data.AddSocketDataToFactory(&socket_factory_);
2070
2071 // Create request and QuicHttpStream.
2072 QuicStreamRequest request(factory_.get());
2073 EXPECT_EQ(ERR_IO_PENDING,
2074 request.Request(host_port_pair_, privacy_mode_,
2075 /*cert_verify_flags=*/0, url_, "GET", net_log_,
2076 callback_.callback()));
2077 EXPECT_THAT(callback_.WaitForResult(), IsOk());
2078 std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
2079 EXPECT_TRUE(stream.get());
2080
2081 // Cause QUIC stream to be created.
2082 HttpRequestInfo request_info;
2083 request_info.method = "GET";
2084 request_info.url = url_;
2085 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY,
2086 net_log_, CompletionCallback()));
2087
2088 // Ensure that session is alive and active.
2089 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
2090 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2091 EXPECT_TRUE(HasActiveSession(host_port_pair_));
2092
2093 // Send GET request on stream.
2094 HttpResponseInfo response;
2095 HttpRequestHeaders request_headers;
2096 EXPECT_EQ(OK, stream->SendRequest(request_headers, &response,
2097 callback_.callback()));
2098
2099 // Trigger connection migration. Since there are no networks
2100 // to migrate to, this should cause the session to wait for a new network.
2101 scoped_mock_network_change_notifier_->mock_network_change_notifier()
2102 ->NotifyNetworkDisconnected(kDefaultNetworkForTests);
2103
2104 // The connection should still be alive, but marked as going away.
2105 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2106 EXPECT_FALSE(HasActiveSession(host_port_pair_));
2107 EXPECT_EQ(1u, session->GetNumActiveStreams());
2108 EXPECT_EQ(ERR_IO_PENDING, stream->ReadResponseHeaders(callback_.callback()));
2109
2110 // Set up second socket data provider that is used after migration.
2111 // The response to the earlier request is read on this new socket.
2112 MockQuicData socket_data1;
2113 socket_data1.AddWrite(
2114 client_maker_.MakePingPacket(2, /*include_version=*/true));
2115 socket_data1.AddRead(
2116 ConstructOkResponsePacket(1, kClientDataStreamId1, false, false));
2117 socket_data1.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
2118 socket_data1.AddWrite(client_maker_.MakeAckAndRstPacket(
2119 3, false, kClientDataStreamId1, QUIC_STREAM_CANCELLED, 1, 1, 1, true));
2120 socket_data1.AddSocketDataToFactory(&socket_factory_);
2121
2122 // Add a new network and notify the stream factory of a new connected network.
2123 // This causes a PING packet to be sent over the new network.
2124 scoped_mock_network_change_notifier_->mock_network_change_notifier()
2125 ->SetConnectedNetworksList({kNewNetworkForTests});
2126 scoped_mock_network_change_notifier_->mock_network_change_notifier()
2127 ->NotifyNetworkConnected(kNewNetworkForTests);
2128
2129 // Ensure that the session is still alive.
2130 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2131 EXPECT_FALSE(HasActiveSession(host_port_pair_));
2132 EXPECT_EQ(1u, session->GetNumActiveStreams());
2133
2134 // Run the message loop so that data queued in the new socket is read by the
2135 // packet reader.
2136 base::RunLoop().RunUntilIdle();
2137
2138 // Response headers are received over the new network.
2139 EXPECT_THAT(callback_.WaitForResult(), IsOk());
2140 EXPECT_EQ(200, response.headers->response_code());
2141
2142 // Create a new request and verify that a new session is created.
2143 MockQuicData socket_data2;
2144 socket_data2.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
2145 socket_data2.AddSocketDataToFactory(&socket_factory_);
2146 QuicStreamRequest request2(factory_.get());
2147 EXPECT_EQ(ERR_IO_PENDING,
2148 request2.Request(host_port_pair_, privacy_mode_,
2149 /*cert_verify_flags=*/0, url_, "GET", net_log_,
2150 callback_.callback()));
2151 EXPECT_THAT(callback_.WaitForResult(), IsOk());
2152 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream();
2153 EXPECT_TRUE(stream2.get());
2154
2155 EXPECT_TRUE(HasActiveSession(host_port_pair_));
2156 EXPECT_NE(session, GetActiveSession(host_port_pair_));
2157 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2158
2159 stream.reset();
2160 EXPECT_TRUE(socket_data.AllReadDataConsumed());
2161 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
2162 EXPECT_TRUE(socket_data1.AllReadDataConsumed());
2163 EXPECT_TRUE(socket_data1.AllWriteDataConsumed());
2164 EXPECT_TRUE(socket_data2.AllReadDataConsumed());
2165 EXPECT_TRUE(socket_data2.AllWriteDataConsumed());
2166 }
2167
2070 TEST_P(QuicStreamFactoryTest, MigrateSessionEarly) { 2168 TEST_P(QuicStreamFactoryTest, MigrateSessionEarly) {
2071 InitializeConnectionMigrationTest( 2169 InitializeConnectionMigrationTest(
2072 {kDefaultNetworkForTests, kNewNetworkForTests}); 2170 {kDefaultNetworkForTests, kNewNetworkForTests});
2073 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); 2171 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
2074 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 2172 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
2075 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 2173 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
2076 2174
2077 MockQuicData socket_data; 2175 MockQuicData socket_data;
2078 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); 2176 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
2079 socket_data.AddWrite( 2177 socket_data.AddWrite(
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after
2545 TEST_P(QuicStreamFactoryTest, MigrateSessionOnWriteErrorAsync) { 2643 TEST_P(QuicStreamFactoryTest, MigrateSessionOnWriteErrorAsync) {
2546 TestMigrationOnWriteError(ASYNC); 2644 TestMigrationOnWriteError(ASYNC);
2547 } 2645 }
2548 2646
2549 void QuicStreamFactoryTestBase::TestMigrationOnWriteErrorNoNewNetwork( 2647 void QuicStreamFactoryTestBase::TestMigrationOnWriteErrorNoNewNetwork(
2550 IoMode write_error_mode) { 2648 IoMode write_error_mode) {
2551 InitializeConnectionMigrationTest({kDefaultNetworkForTests}); 2649 InitializeConnectionMigrationTest({kDefaultNetworkForTests});
2552 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); 2650 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
2553 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 2651 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
2554 2652
2653 // Use the test task runner, to force the migration alarm timeout later.
2654 QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get());
2655
2555 MockQuicData socket_data; 2656 MockQuicData socket_data;
2556 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); 2657 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
2557 socket_data.AddWrite(write_error_mode, ERR_ADDRESS_UNREACHABLE); 2658 socket_data.AddWrite(write_error_mode, ERR_ADDRESS_UNREACHABLE);
2558 socket_data.AddSocketDataToFactory(&socket_factory_); 2659 socket_data.AddSocketDataToFactory(&socket_factory_);
2559 2660
2560 // Create request and QuicHttpStream. 2661 // Create request and QuicHttpStream.
2561 QuicStreamRequest request(factory_.get()); 2662 QuicStreamRequest request(factory_.get());
2562 EXPECT_EQ(ERR_IO_PENDING, 2663 EXPECT_EQ(ERR_IO_PENDING,
2563 request.Request(host_port_pair_, privacy_mode_, 2664 request.Request(host_port_pair_, privacy_mode_,
2564 /*cert_verify_flags=*/0, url_, "GET", net_log_, 2665 /*cert_verify_flags=*/0, url_, "GET", net_log_,
2565 callback_.callback())); 2666 callback_.callback()));
2566 EXPECT_EQ(OK, callback_.WaitForResult()); 2667 EXPECT_EQ(OK, callback_.WaitForResult());
2567 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); 2668 std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
2568 EXPECT_TRUE(stream.get()); 2669 EXPECT_TRUE(stream.get());
2569 2670
2570 // Cause QUIC stream to be created. 2671 // Cause QUIC stream to be created.
2571 HttpRequestInfo request_info; 2672 HttpRequestInfo request_info;
2572 request_info.method = "GET"; 2673 request_info.method = "GET";
2573 request_info.url = GURL("https://www.example.org/"); 2674 request_info.url = GURL("https://www.example.org/");
2574 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY, 2675 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY,
2575 net_log_, CompletionCallback())); 2676 net_log_, CompletionCallback()));
2576 2677
2577 // Ensure that session is alive and active. 2678 // Ensure that session is alive and active.
2578 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); 2679 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
2579 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 2680 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2580 EXPECT_TRUE(HasActiveSession(host_port_pair_)); 2681 EXPECT_TRUE(HasActiveSession(host_port_pair_));
2581 2682
2582 // Send GET request on stream. This should cause a write error, which triggers 2683 // Send GET request on stream. This causes a write error, which triggers
2583 // a connection migration attempt. 2684 // a connection migration attempt. Since there are no networks
2685 // to migrate to, this causes the session to wait for a new network.
2584 HttpResponseInfo response; 2686 HttpResponseInfo response;
2585 HttpRequestHeaders request_headers; 2687 HttpRequestHeaders request_headers;
2586 EXPECT_EQ(OK, stream->SendRequest(request_headers, &response, 2688 EXPECT_EQ(OK, stream->SendRequest(request_headers, &response,
2587 callback_.callback())); 2689 callback_.callback()));
2588 // Run message loop to execute migration attempt. 2690
2691 // Complete any pending writes. Pending async MockQuicData writes
2692 // are run on the message loop, not on the test runner.
2589 base::RunLoop().RunUntilIdle(); 2693 base::RunLoop().RunUntilIdle();
2590 // Migration fails, and session is closed and deleted. 2694
2695 // Write error causes migration task to be posted. Spin the loop.
2696 if (write_error_mode == ASYNC)
2697 runner_->RunNextTask();
2698
2699 // Migration has not yet failed. The session should be alive and active.
2700 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2701 EXPECT_TRUE(HasActiveSession(host_port_pair_));
2702 EXPECT_EQ(1u, session->GetNumActiveStreams());
2703 EXPECT_TRUE(session->connection()->writer()->IsWriteBlocked());
2704
2705 // The migration will not fail until the migration alarm timeout.
2706 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2707 EXPECT_TRUE(HasActiveSession(host_port_pair_));
2708 EXPECT_EQ(1u, session->GetNumActiveStreams());
2709 EXPECT_EQ(ERR_IO_PENDING, stream->ReadResponseHeaders(callback_.callback()));
2710
2711 // Force migration alarm timeout to run.
2712 RunTestLoopUntilIdle();
2713
2714 // The connection should be closed. A request for response headers
2715 // should fail.
2591 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 2716 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2592 EXPECT_FALSE(HasActiveSession(host_port_pair_)); 2717 EXPECT_FALSE(HasActiveSession(host_port_pair_));
2718 EXPECT_EQ(ERR_NETWORK_CHANGED, callback_.WaitForResult());
2719 EXPECT_EQ(ERR_NETWORK_CHANGED,
2720 stream->ReadResponseHeaders(callback_.callback()));
2593 2721
2594 EXPECT_TRUE(socket_data.AllReadDataConsumed()); 2722 EXPECT_TRUE(socket_data.AllReadDataConsumed());
2595 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); 2723 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
2596 } 2724 }
2597 2725
2598 TEST_P(QuicStreamFactoryTest, 2726 TEST_P(QuicStreamFactoryTest,
2599 MigrateSessionOnWriteErrorNoNewNetworkSynchronous) { 2727 MigrateSessionOnWriteErrorNoNewNetworkSynchronous) {
2600 TestMigrationOnWriteErrorNoNewNetwork(SYNCHRONOUS); 2728 TestMigrationOnWriteErrorNoNewNetwork(SYNCHRONOUS);
2601 } 2729 }
2602 2730
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
3004 TEST_P(QuicStreamFactoryTest, 3132 TEST_P(QuicStreamFactoryTest,
3005 MigrateSessionOnNetworkDisconnectedWithWriteErrorQueued) { 3133 MigrateSessionOnNetworkDisconnectedWithWriteErrorQueued) {
3006 TestMigrationOnNotificationWithWriteErrorQueued(/*disconnected=*/true); 3134 TestMigrationOnNotificationWithWriteErrorQueued(/*disconnected=*/true);
3007 } 3135 }
3008 3136
3009 TEST_P(QuicStreamFactoryTest, 3137 TEST_P(QuicStreamFactoryTest,
3010 MigrateSessionOnNetworkMadeDefaultWithWriteErrorQueued) { 3138 MigrateSessionOnNetworkMadeDefaultWithWriteErrorQueued) {
3011 TestMigrationOnNotificationWithWriteErrorQueued(/*disconnected=*/true); 3139 TestMigrationOnNotificationWithWriteErrorQueued(/*disconnected=*/true);
3012 } 3140 }
3013 3141
3142 void QuicStreamFactoryTestBase::TestMigrationOnWriteErrorPauseBeforeConnected(
3143 IoMode write_error_mode) {
3144 InitializeConnectionMigrationTest({kDefaultNetworkForTests});
3145 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
3146 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
3147 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
3148
3149 MockQuicData socket_data;
3150 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
3151 socket_data.AddWrite(SYNCHRONOUS, ERR_FAILED);
3152 socket_data.AddSocketDataToFactory(&socket_factory_);
3153
3154 // Create request and QuicHttpStream.
3155 QuicStreamRequest request(factory_.get());
3156 EXPECT_EQ(ERR_IO_PENDING,
3157 request.Request(host_port_pair_, privacy_mode_,
3158 /*cert_verify_flags=*/0, url_, "GET", net_log_,
3159 callback_.callback()));
3160 EXPECT_EQ(OK, callback_.WaitForResult());
3161 std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
3162 EXPECT_TRUE(stream.get());
3163
3164 // Cause QUIC stream to be created.
3165 HttpRequestInfo request_info;
3166 request_info.method = "GET";
3167 request_info.url = GURL("https://www.example.org/");
3168 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY,
3169 net_log_, CompletionCallback()));
3170
3171 // Ensure that session is alive and active.
3172 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
3173 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
3174 EXPECT_TRUE(HasActiveSession(host_port_pair_));
3175
3176 // Send GET request on stream. This should cause a write error, which triggers
3177 // a connection migration attempt.
3178 HttpResponseInfo response;
3179 HttpRequestHeaders request_headers;
3180 EXPECT_EQ(OK, stream->SendRequest(request_headers, &response,
3181 callback_.callback()));
3182
3183 // Run the message loop so that data queued in the new socket is read by the
3184 // packet reader.
3185 base::RunLoop().RunUntilIdle();
3186
3187 // In this particular code path, the network will not yet be marked
3188 // as going away and the session will still be alive.
3189 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
3190 EXPECT_TRUE(HasActiveSession(host_port_pair_));
3191 EXPECT_EQ(1u, session->GetNumActiveStreams());
3192 EXPECT_EQ(ERR_IO_PENDING, stream->ReadResponseHeaders(callback_.callback()));
3193
3194 // On a DISCONNECTED notification, nothing happens.
3195 scoped_mock_network_change_notifier_->mock_network_change_notifier()
3196 ->NotifyNetworkDisconnected(kDefaultNetworkForTests);
3197
3198 // Set up second socket data provider that is used after
3199 // migration. The request is rewritten to this new socket, and the
3200 // response to the request is read on this new socket.
3201 MockQuicData socket_data1;
3202 socket_data1.AddWrite(
3203 ConstructGetRequestPacket(1, kClientDataStreamId1, true, true));
3204 socket_data1.AddRead(
3205 ConstructOkResponsePacket(1, kClientDataStreamId1, false, false));
3206 socket_data1.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
3207 socket_data1.AddWrite(client_maker_.MakeAckAndRstPacket(
3208 2, false, kClientDataStreamId1, QUIC_STREAM_CANCELLED, 1, 1, 1, true));
3209 socket_data1.AddSocketDataToFactory(&socket_factory_);
3210
3211 scoped_mock_network_change_notifier_->mock_network_change_notifier()
3212 ->SetConnectedNetworksList({kNewNetworkForTests});
3213 scoped_mock_network_change_notifier_->mock_network_change_notifier()
3214 ->NotifyNetworkConnected(kNewNetworkForTests);
3215
3216 // The session should now be marked as going away. Ensure that
3217 // while it is still alive, it is no longer active.
3218 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
3219 EXPECT_FALSE(HasActiveSession(host_port_pair_));
3220 EXPECT_EQ(1u, session->GetNumActiveStreams());
3221
3222 // This is the callback for the response headers that returned
3223 // pending previously, because no result was available. Check that
3224 // the result is now available due to the successful migration.
3225 EXPECT_THAT(callback_.WaitForResult(), IsOk());
3226 EXPECT_EQ(200, response.headers->response_code());
3227
3228 // Create a new request for the same destination and verify that a
3229 // new session is created.
3230 MockQuicData socket_data2;
3231 socket_data2.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
3232 socket_data2.AddSocketDataToFactory(&socket_factory_);
3233
3234 QuicStreamRequest request2(factory_.get());
3235 EXPECT_EQ(ERR_IO_PENDING,
3236 request2.Request(host_port_pair_, privacy_mode_,
3237 /*cert_verify_flags=*/0, url_, "GET", net_log_,
3238 callback_.callback()));
3239 EXPECT_THAT(callback_.WaitForResult(), IsOk());
3240 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream();
3241 EXPECT_TRUE(stream2.get());
3242
3243 EXPECT_TRUE(HasActiveSession(host_port_pair_));
3244 QuicChromiumClientSession* new_session = GetActiveSession(host_port_pair_);
3245 EXPECT_NE(session, new_session);
3246
3247 stream.reset();
3248 stream2.reset();
3249
3250 EXPECT_TRUE(socket_data.AllReadDataConsumed());
3251 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
3252 EXPECT_TRUE(socket_data1.AllReadDataConsumed());
3253 EXPECT_TRUE(socket_data1.AllWriteDataConsumed());
3254 EXPECT_TRUE(socket_data2.AllReadDataConsumed());
3255 EXPECT_TRUE(socket_data2.AllWriteDataConsumed());
3256 }
3257
3258 TEST_P(QuicStreamFactoryTest,
3259 MigrateSessionOnWriteErrorPauseBeforeConnectedSync) {
3260 TestMigrationOnWriteErrorPauseBeforeConnected(SYNCHRONOUS);
3261 }
3262
3263 TEST_P(QuicStreamFactoryTest,
3264 MigrateSessionOnWriteErrorPauseBeforeConnectedAsync) {
3265 TestMigrationOnWriteErrorPauseBeforeConnected(ASYNC);
3266 }
3267
3268 void QuicStreamFactoryTestBase::
3269 TestMigrationOnWriteErrorWithNetworkAddedBeforeNotification(
3270 IoMode write_error_mode,
3271 bool disconnected) {
3272 InitializeConnectionMigrationTest({kDefaultNetworkForTests});
3273 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
3274 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
3275 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
3276
3277 MockQuicData socket_data;
3278 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
3279 socket_data.AddWrite(SYNCHRONOUS, ERR_FAILED);
3280 socket_data.AddSocketDataToFactory(&socket_factory_);
3281
3282 // Create request and QuicHttpStream.
3283 QuicStreamRequest request(factory_.get());
3284 EXPECT_EQ(ERR_IO_PENDING,
3285 request.Request(host_port_pair_, privacy_mode_,
3286 /*cert_verify_flags=*/0, url_, "GET", net_log_,
3287 callback_.callback()));
3288 EXPECT_EQ(OK, callback_.WaitForResult());
3289 std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
3290 EXPECT_TRUE(stream.get());
3291
3292 // Cause QUIC stream to be created.
3293 HttpRequestInfo request_info;
3294 request_info.method = "GET";
3295 request_info.url = GURL("https://www.example.org/");
3296 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY,
3297 net_log_, CompletionCallback()));
3298
3299 // Ensure that session is alive and active.
3300 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
3301 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
3302 EXPECT_TRUE(HasActiveSession(host_port_pair_));
3303
3304 // Send GET request on stream. This should cause a write error, which triggers
3305 // a connection migration attempt.
3306 HttpResponseInfo response;
3307 HttpRequestHeaders request_headers;
3308 EXPECT_EQ(OK, stream->SendRequest(request_headers, &response,
3309 callback_.callback()));
3310
3311 // Run the message loop so that data queued in the new socket is read by the
3312 // packet reader.
3313 base::RunLoop().RunUntilIdle();
3314
3315 // In this particular code path, the network will not yet be marked
3316 // as going away and the session will still be alive.
3317 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
3318 EXPECT_TRUE(HasActiveSession(host_port_pair_));
3319 EXPECT_EQ(1u, session->GetNumActiveStreams());
3320 EXPECT_EQ(ERR_IO_PENDING, stream->ReadResponseHeaders(callback_.callback()));
3321
3322 // Set up second socket data provider that is used after
3323 // migration. The request is rewritten to this new socket, and the
3324 // response to the request is read on this new socket.
3325 MockQuicData socket_data1;
3326 socket_data1.AddWrite(
3327 ConstructGetRequestPacket(1, kClientDataStreamId1, true, true));
3328 socket_data1.AddRead(
3329 ConstructOkResponsePacket(1, kClientDataStreamId1, false, false));
3330 socket_data1.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
3331 socket_data1.AddWrite(client_maker_.MakeAckAndRstPacket(
3332 2, false, kClientDataStreamId1, QUIC_STREAM_CANCELLED, 1, 1, 1, true));
3333 socket_data1.AddSocketDataToFactory(&socket_factory_);
3334
3335 scoped_mock_network_change_notifier_->mock_network_change_notifier()
3336 ->SetConnectedNetworksList(
3337 {kDefaultNetworkForTests, kNewNetworkForTests});
3338
3339 // A notification triggers and completes migration.
3340 if (disconnected) {
3341 scoped_mock_network_change_notifier_->mock_network_change_notifier()
3342 ->NotifyNetworkDisconnected(kDefaultNetworkForTests);
3343 } else {
3344 scoped_mock_network_change_notifier_->mock_network_change_notifier()
3345 ->NotifyNetworkMadeDefault(kNewNetworkForTests);
3346 }
3347 // The session should now be marked as going away. Ensure that
3348 // while it is still alive, it is no longer active.
3349 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
3350 EXPECT_FALSE(HasActiveSession(host_port_pair_));
3351 EXPECT_EQ(1u, session->GetNumActiveStreams());
3352
3353 // This is the callback for the response headers that returned
3354 // pending previously, because no result was available. Check that
3355 // the result is now available due to the successful migration.
3356 EXPECT_THAT(callback_.WaitForResult(), IsOk());
3357 EXPECT_EQ(200, response.headers->response_code());
3358
3359 // Now deliver a CONNECTED notification. Nothing happens since
3360 // migration was already finished earlier.
3361 scoped_mock_network_change_notifier_->mock_network_change_notifier()
3362 ->NotifyNetworkConnected(kNewNetworkForTests);
3363
3364 // Create a new request for the same destination and verify that a
3365 // new session is created.
3366 MockQuicData socket_data2;
3367 socket_data2.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
3368 socket_data2.AddSocketDataToFactory(&socket_factory_);
3369
3370 QuicStreamRequest request2(factory_.get());
3371 EXPECT_EQ(ERR_IO_PENDING,
3372 request2.Request(host_port_pair_, privacy_mode_,
3373 /*cert_verify_flags=*/0, url_, "GET", net_log_,
3374 callback_.callback()));
3375 EXPECT_THAT(callback_.WaitForResult(), IsOk());
3376 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream();
3377 EXPECT_TRUE(stream2.get());
3378
3379 EXPECT_TRUE(HasActiveSession(host_port_pair_));
3380 QuicChromiumClientSession* new_session = GetActiveSession(host_port_pair_);
3381 EXPECT_NE(session, new_session);
3382
3383 stream.reset();
3384 stream2.reset();
3385
3386 EXPECT_TRUE(socket_data.AllReadDataConsumed());
3387 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
3388 EXPECT_TRUE(socket_data1.AllReadDataConsumed());
3389 EXPECT_TRUE(socket_data1.AllWriteDataConsumed());
3390 EXPECT_TRUE(socket_data2.AllReadDataConsumed());
3391 EXPECT_TRUE(socket_data2.AllWriteDataConsumed());
3392 }
3393
3394 TEST_P(QuicStreamFactoryTest,
3395 MigrateSessionOnWriteErrorWithNetworkAddedBeforeDisconnectedSync) {
3396 TestMigrationOnWriteErrorWithNetworkAddedBeforeNotification(SYNCHRONOUS,
3397 true);
3398 }
3399
3400 TEST_P(QuicStreamFactoryTest,
3401 MigrateSessionOnWriteErrorWithNetworkAddedBeforeDisconnectedAsync) {
3402 TestMigrationOnWriteErrorWithNetworkAddedBeforeNotification(ASYNC, true);
3403 }
3404
3405 TEST_P(QuicStreamFactoryTest,
3406 MigrateSessionOnWriteErrorWithNetworkAddedBeforeMadeDefaultSync) {
3407 TestMigrationOnWriteErrorWithNetworkAddedBeforeNotification(SYNCHRONOUS,
3408 false);
3409 }
3410
3411 TEST_P(QuicStreamFactoryTest,
3412 MigrateSessionOnWriteErrorWithNetworkAddedBeforeMadeDefaultAsync) {
3413 TestMigrationOnWriteErrorWithNetworkAddedBeforeNotification(ASYNC, false);
3414 }
3415
3014 TEST_P(QuicStreamFactoryTest, MigrateSessionEarlyToBadSocket) { 3416 TEST_P(QuicStreamFactoryTest, MigrateSessionEarlyToBadSocket) {
3015 // This simulates the case where we attempt to migrate to a new 3417 // This simulates the case where we attempt to migrate to a new
3016 // socket but the socket is unusable, such as an ipv4/ipv6 mismatch. 3418 // socket but the socket is unusable, such as an ipv4/ipv6 mismatch.
3017 InitializeConnectionMigrationTest( 3419 InitializeConnectionMigrationTest(
3018 {kDefaultNetworkForTests, kNewNetworkForTests}); 3420 {kDefaultNetworkForTests, kNewNetworkForTests});
3019 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); 3421 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
3020 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 3422 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
3021 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 3423 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
3022 3424
3023 MockQuicData socket_data; 3425 MockQuicData socket_data;
(...skipping 2485 matching lines...) Expand 10 before | Expand all | Expand 10 after
5509 // Clear all cached states. 5911 // Clear all cached states.
5510 factory_->ClearCachedStatesInCryptoConfig( 5912 factory_->ClearCachedStatesInCryptoConfig(
5511 base::Callback<bool(const GURL&)>()); 5913 base::Callback<bool(const GURL&)>());
5512 EXPECT_TRUE(test_cases[0].state->certs().empty()); 5914 EXPECT_TRUE(test_cases[0].state->certs().empty());
5513 EXPECT_TRUE(test_cases[1].state->certs().empty()); 5915 EXPECT_TRUE(test_cases[1].state->certs().empty());
5514 EXPECT_TRUE(test_cases[2].state->certs().empty()); 5916 EXPECT_TRUE(test_cases[2].state->certs().empty());
5515 } 5917 }
5516 5918
5517 } // namespace test 5919 } // namespace test
5518 } // namespace net 5920 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/chromium/quic_stream_factory.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698