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

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

Issue 2258893004: Changes connection migration code to migrate on NetworkMadeDefault (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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
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 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 226
227 void SetConnectedNetworksList(const NetworkList& network_list) { 227 void SetConnectedNetworksList(const NetworkList& network_list) {
228 connected_networks_ = network_list; 228 connected_networks_ = network_list;
229 } 229 }
230 230
231 void GetCurrentConnectedNetworks(NetworkList* network_list) const override { 231 void GetCurrentConnectedNetworks(NetworkList* network_list) const override {
232 network_list->clear(); 232 network_list->clear();
233 *network_list = connected_networks_; 233 *network_list = connected_networks_;
234 } 234 }
235 235
236 void NotifyNetworkSoonToDisconnect( 236 void NotifyNetworkMadeDefault(NetworkChangeNotifier::NetworkHandle network) {
237 NetworkChangeNotifier::NetworkHandle network) {
238 NetworkChangeNotifier::NotifyObserversOfSpecificNetworkChange( 237 NetworkChangeNotifier::NotifyObserversOfSpecificNetworkChange(
239 NetworkChangeNotifier::SOON_TO_DISCONNECT, network); 238 NetworkChangeNotifier::MADE_DEFAULT, network);
240 // Spin the message loop so the notification is delivered. 239 // Spin the message loop so the notification is delivered.
241 base::RunLoop().RunUntilIdle(); 240 base::RunLoop().RunUntilIdle();
242 } 241 }
243 242
244 void NotifyNetworkDisconnected(NetworkChangeNotifier::NetworkHandle network) { 243 void NotifyNetworkDisconnected(NetworkChangeNotifier::NetworkHandle network) {
245 NetworkChangeNotifier::NotifyObserversOfSpecificNetworkChange( 244 NetworkChangeNotifier::NotifyObserversOfSpecificNetworkChange(
246 NetworkChangeNotifier::DISCONNECTED, network); 245 NetworkChangeNotifier::DISCONNECTED, network);
247 // Spin the message loop so the notification is delivered. 246 // Spin the message loop so the notification is delivered.
248 base::RunLoop().RunUntilIdle(); 247 base::RunLoop().RunUntilIdle();
249 } 248 }
(...skipping 1164 matching lines...) Expand 10 before | Expand all | Expand 10 after
1414 EXPECT_THAT(callback_.WaitForResult(), IsOk()); 1413 EXPECT_THAT(callback_.WaitForResult(), IsOk());
1415 stream = request2.CreateStream(); 1414 stream = request2.CreateStream();
1416 stream.reset(); // Will reset stream 3. 1415 stream.reset(); // Will reset stream 3.
1417 1416
1418 EXPECT_TRUE(socket_data.AllReadDataConsumed()); 1417 EXPECT_TRUE(socket_data.AllReadDataConsumed());
1419 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); 1418 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
1420 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); 1419 EXPECT_TRUE(socket_data2.AllReadDataConsumed());
1421 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); 1420 EXPECT_TRUE(socket_data2.AllWriteDataConsumed());
1422 } 1421 }
1423 1422
1424 TEST_P(QuicStreamFactoryTest, OnNetworkChangeSoonToDisconnect) { 1423 TEST_P(QuicStreamFactoryTest, OnNetworkChangeNetworkMadeDefault) {
1425 InitializeConnectionMigrationTest( 1424 InitializeConnectionMigrationTest(
1426 {kDefaultNetworkForTests, kNewNetworkForTests}); 1425 {kDefaultNetworkForTests, kNewNetworkForTests});
1427 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); 1426 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
1428 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 1427 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
1429 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 1428 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
1430 1429
1431 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 1430 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
1432 std::unique_ptr<QuicEncryptedPacket> request_packet( 1431 std::unique_ptr<QuicEncryptedPacket> request_packet(
1433 ConstructGetRequestPacket(1, kClientDataStreamId1, true, true)); 1432 ConstructGetRequestPacket(1, kClientDataStreamId1, true, true));
1434 MockWrite writes[] = {MockWrite(SYNCHRONOUS, request_packet->data(), 1433 MockWrite writes[] = {MockWrite(SYNCHRONOUS, request_packet->data(),
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1480 MockRead reads1[] = {MockRead(ASYNC, response_headers_packet->data(), 1479 MockRead reads1[] = {MockRead(ASYNC, response_headers_packet->data(),
1481 response_headers_packet->length(), 1), 1480 response_headers_packet->length(), 1),
1482 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2)}; 1481 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2)};
1483 SequencedSocketData socket_data1(reads1, arraysize(reads1), writes1, 1482 SequencedSocketData socket_data1(reads1, arraysize(reads1), writes1,
1484 arraysize(writes1)); 1483 arraysize(writes1));
1485 socket_factory_.AddSocketDataProvider(&socket_data1); 1484 socket_factory_.AddSocketDataProvider(&socket_data1);
1486 1485
1487 // Trigger connection migration. This should cause a PING frame 1486 // Trigger connection migration. This should cause a PING frame
1488 // to be emitted. 1487 // to be emitted.
1489 scoped_mock_network_change_notifier_->mock_network_change_notifier() 1488 scoped_mock_network_change_notifier_->mock_network_change_notifier()
1490 ->NotifyNetworkSoonToDisconnect(kDefaultNetworkForTests); 1489 ->NotifyNetworkMadeDefault(kNewNetworkForTests);
1491 1490
1492 // The session should now be marked as going away. Ensure that 1491 // The session should now be marked as going away. Ensure that
1493 // while it is still alive, it is no longer active. 1492 // while it is still alive, it is no longer active.
1494 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 1493 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1495 EXPECT_FALSE(HasActiveSession(host_port_pair_)); 1494 EXPECT_FALSE(HasActiveSession(host_port_pair_));
1496 EXPECT_EQ(1u, session->GetNumActiveStreams()); 1495 EXPECT_EQ(1u, session->GetNumActiveStreams());
1497 1496
1498 // Verify that response headers on the migrated socket were delivered to the 1497 // Verify that response headers on the migrated socket were delivered to the
1499 // stream. 1498 // stream.
1500 EXPECT_THAT(stream->ReadResponseHeaders(callback_.callback()), IsOk()); 1499 EXPECT_THAT(stream->ReadResponseHeaders(callback_.callback()), IsOk());
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
1634 stream.reset(); 1633 stream.reset();
1635 1634
1636 EXPECT_TRUE(socket_data.AllReadDataConsumed()); 1635 EXPECT_TRUE(socket_data.AllReadDataConsumed());
1637 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); 1636 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
1638 EXPECT_TRUE(socket_data1.AllReadDataConsumed()); 1637 EXPECT_TRUE(socket_data1.AllReadDataConsumed());
1639 EXPECT_TRUE(socket_data1.AllWriteDataConsumed()); 1638 EXPECT_TRUE(socket_data1.AllWriteDataConsumed());
1640 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); 1639 EXPECT_TRUE(socket_data2.AllReadDataConsumed());
1641 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); 1640 EXPECT_TRUE(socket_data2.AllWriteDataConsumed());
1642 } 1641 }
1643 1642
1644 TEST_P(QuicStreamFactoryTest, OnNetworkChangeSoonToDisconnectNoNetworks) {
Ryan Hamilton 2016/08/19 20:05:02 Presumably there is a test further down in which w
Jana 2016/08/19 21:44:08 Yup -- "OnNetworkChangeDisconnectedNoNewNetwork"
1645 NetworkChangeNotifier::NetworkList no_networks(0);
1646 InitializeConnectionMigrationTest(no_networks);
1647 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
1648 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
1649
1650 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
1651 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
1652 1, true, kClientDataStreamId1, QUIC_STREAM_CANCELLED));
1653 MockWrite writes[] = {
1654 MockWrite(SYNCHRONOUS, client_rst->data(), client_rst->length(), 1),
1655 };
1656 SequencedSocketData socket_data(reads, arraysize(reads), writes,
1657 arraysize(writes));
1658 socket_factory_.AddSocketDataProvider(&socket_data);
1659
1660 // Create request and QuicHttpStream.
1661 QuicStreamRequest request(factory_.get());
1662 EXPECT_EQ(ERR_IO_PENDING,
1663 request.Request(host_port_pair_, privacy_mode_,
1664 /*cert_verify_flags=*/0, url_, "GET", net_log_,
1665 callback_.callback()));
1666 EXPECT_THAT(callback_.WaitForResult(), IsOk());
1667 std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
1668 EXPECT_TRUE(stream.get());
1669
1670 // Cause QUIC stream to be created.
1671 HttpRequestInfo request_info;
1672 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY,
1673 net_log_, CompletionCallback()));
1674
1675 // Ensure that session is alive and active.
1676 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
1677 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1678 EXPECT_TRUE(HasActiveSession(host_port_pair_));
1679 EXPECT_EQ(1u, session->GetNumActiveStreams());
1680
1681 // Trigger connection migration. Since there are no networks
1682 // to migrate to, this should cause the session to continue on the same
1683 // socket, but be marked as going away.
1684 scoped_mock_network_change_notifier_->mock_network_change_notifier()
1685 ->NotifyNetworkSoonToDisconnect(kDefaultNetworkForTests);
1686
1687 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1688 EXPECT_FALSE(HasActiveSession(host_port_pair_));
1689 EXPECT_EQ(1u, session->GetNumActiveStreams());
1690
1691 stream.reset();
1692
1693 EXPECT_TRUE(socket_data.AllReadDataConsumed());
1694 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
1695 }
1696
1697 TEST_P(QuicStreamFactoryTest, OnNetworkChangeDisconnectedNoNetworks) { 1643 TEST_P(QuicStreamFactoryTest, OnNetworkChangeDisconnectedNoNetworks) {
1698 NetworkChangeNotifier::NetworkList no_networks(0); 1644 NetworkChangeNotifier::NetworkList no_networks(0);
1699 InitializeConnectionMigrationTest(no_networks); 1645 InitializeConnectionMigrationTest(no_networks);
1700 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); 1646 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
1701 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 1647 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
1702 1648
1703 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 1649 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
1704 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 1650 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
1705 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); 1651 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT));
1706 MockWrite writes[] = { 1652 MockWrite writes[] = {
(...skipping 29 matching lines...) Expand all
1736 scoped_mock_network_change_notifier_->mock_network_change_notifier() 1682 scoped_mock_network_change_notifier_->mock_network_change_notifier()
1737 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); 1683 ->NotifyNetworkDisconnected(kDefaultNetworkForTests);
1738 1684
1739 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 1685 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1740 EXPECT_FALSE(HasActiveSession(host_port_pair_)); 1686 EXPECT_FALSE(HasActiveSession(host_port_pair_));
1741 1687
1742 EXPECT_TRUE(socket_data.AllReadDataConsumed()); 1688 EXPECT_TRUE(socket_data.AllReadDataConsumed());
1743 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); 1689 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
1744 } 1690 }
1745 1691
1746 TEST_P(QuicStreamFactoryTest, OnNetworkChangeSoonToDisconnectNoNewNetwork) {
1747 InitializeConnectionMigrationTest({kDefaultNetworkForTests});
1748 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
1749 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
1750
1751 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
1752 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
1753 1, true, kClientDataStreamId1, QUIC_STREAM_CANCELLED));
1754 MockWrite writes[] = {
1755 MockWrite(SYNCHRONOUS, client_rst->data(), client_rst->length(), 1),
1756 };
1757 SequencedSocketData socket_data(reads, arraysize(reads), writes,
1758 arraysize(writes));
1759 socket_factory_.AddSocketDataProvider(&socket_data);
1760
1761 // Create request and QuicHttpStream.
1762 QuicStreamRequest request(factory_.get());
1763 EXPECT_EQ(ERR_IO_PENDING,
1764 request.Request(host_port_pair_, privacy_mode_,
1765 /*cert_verify_flags=*/0, url_, "GET", net_log_,
1766 callback_.callback()));
1767 EXPECT_THAT(callback_.WaitForResult(), IsOk());
1768 std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
1769 EXPECT_TRUE(stream.get());
1770
1771 // Cause QUIC stream to be created.
1772 HttpRequestInfo request_info;
1773 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY,
1774 net_log_, CompletionCallback()));
1775
1776 // Ensure that session is alive and active.
1777 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
1778 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1779 EXPECT_TRUE(HasActiveSession(host_port_pair_));
1780
1781 // Trigger connection migration. Since there are no networks
1782 // to migrate to, this should cause session to be continue but be marked as
1783 // going away.
1784 scoped_mock_network_change_notifier_->mock_network_change_notifier()
1785 ->NotifyNetworkSoonToDisconnect(kDefaultNetworkForTests);
1786
1787 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1788 EXPECT_FALSE(HasActiveSession(host_port_pair_));
1789 EXPECT_EQ(1u, session->GetNumActiveStreams());
1790
1791 stream.reset();
1792
1793 EXPECT_TRUE(socket_data.AllReadDataConsumed());
1794 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
1795 }
1796
1797 TEST_P(QuicStreamFactoryTest, OnNetworkChangeDisconnectedNoNewNetwork) { 1692 TEST_P(QuicStreamFactoryTest, OnNetworkChangeDisconnectedNoNewNetwork) {
1798 InitializeConnectionMigrationTest({kDefaultNetworkForTests}); 1693 InitializeConnectionMigrationTest({kDefaultNetworkForTests});
1799 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); 1694 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
1800 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 1695 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
1801 1696
1802 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 1697 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
1803 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 1698 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
1804 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); 1699 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT));
1805 MockWrite writes[] = { 1700 MockWrite writes[] = {
1806 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1), 1701 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1),
(...skipping 29 matching lines...) Expand all
1836 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); 1731 ->NotifyNetworkDisconnected(kDefaultNetworkForTests);
1837 1732
1838 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 1733 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1839 EXPECT_FALSE(HasActiveSession(host_port_pair_)); 1734 EXPECT_FALSE(HasActiveSession(host_port_pair_));
1840 1735
1841 EXPECT_TRUE(socket_data.AllReadDataConsumed()); 1736 EXPECT_TRUE(socket_data.AllReadDataConsumed());
1842 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); 1737 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
1843 } 1738 }
1844 1739
1845 TEST_P(QuicStreamFactoryTest, 1740 TEST_P(QuicStreamFactoryTest,
1846 OnNetworkChangeSoonToDisconnectNonMigratableStream) { 1741 OnNetworkChangeNetworkMadeDefaultNonMigratableStream) {
1847 InitializeConnectionMigrationTest( 1742 InitializeConnectionMigrationTest(
1848 {kDefaultNetworkForTests, kNewNetworkForTests}); 1743 {kDefaultNetworkForTests, kNewNetworkForTests});
1849 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); 1744 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
1850 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 1745 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
1851 1746
1852 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 1747 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
1853 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 1748 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
1854 1, true, kClientDataStreamId1, QUIC_STREAM_CANCELLED)); 1749 1, true, kClientDataStreamId1, QUIC_STREAM_CANCELLED));
1855 MockWrite writes[] = { 1750 MockWrite writes[] = {
1856 MockWrite(SYNCHRONOUS, client_rst->data(), client_rst->length(), 1), 1751 MockWrite(SYNCHRONOUS, client_rst->data(), client_rst->length(), 1),
(...skipping 19 matching lines...) Expand all
1876 net_log_, CompletionCallback())); 1771 net_log_, CompletionCallback()));
1877 1772
1878 // Ensure that session is alive and active. 1773 // Ensure that session is alive and active.
1879 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); 1774 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
1880 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 1775 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1881 EXPECT_TRUE(HasActiveSession(host_port_pair_)); 1776 EXPECT_TRUE(HasActiveSession(host_port_pair_));
1882 1777
1883 // Trigger connection migration. Since there is a non-migratable stream, 1778 // Trigger connection migration. Since there is a non-migratable stream,
1884 // this should cause session to continue but be marked as going away. 1779 // this should cause session to continue but be marked as going away.
1885 scoped_mock_network_change_notifier_->mock_network_change_notifier() 1780 scoped_mock_network_change_notifier_->mock_network_change_notifier()
1886 ->NotifyNetworkSoonToDisconnect(kDefaultNetworkForTests); 1781 ->NotifyNetworkMadeDefault(kNewNetworkForTests);
1887 1782
1888 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 1783 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1889 EXPECT_FALSE(HasActiveSession(host_port_pair_)); 1784 EXPECT_FALSE(HasActiveSession(host_port_pair_));
1890 EXPECT_EQ(1u, session->GetNumActiveStreams()); 1785 EXPECT_EQ(1u, session->GetNumActiveStreams());
1891 1786
1892 stream.reset(); 1787 stream.reset();
1893 1788
1894 EXPECT_TRUE(socket_data.AllReadDataConsumed()); 1789 EXPECT_TRUE(socket_data.AllReadDataConsumed());
1895 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); 1790 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
1896 } 1791 }
1897 1792
1898 TEST_P(QuicStreamFactoryTest, 1793 TEST_P(QuicStreamFactoryTest,
1899 OnNetworkChangeSoonToDisconnectConnectionMigrationDisabled) { 1794 OnNetworkChangeNetworkMadeDefaultConnectionMigrationDisabled) {
1900 InitializeConnectionMigrationTest( 1795 InitializeConnectionMigrationTest(
1901 {kDefaultNetworkForTests, kNewNetworkForTests}); 1796 {kDefaultNetworkForTests, kNewNetworkForTests});
1902 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); 1797 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
1903 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 1798 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
1904 1799
1905 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 1800 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
1906 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 1801 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
1907 1, true, kClientDataStreamId1, QUIC_STREAM_CANCELLED)); 1802 1, true, kClientDataStreamId1, QUIC_STREAM_CANCELLED));
1908 MockWrite writes[] = { 1803 MockWrite writes[] = {
1909 MockWrite(SYNCHRONOUS, client_rst->data(), client_rst->length(), 1), 1804 MockWrite(SYNCHRONOUS, client_rst->data(), client_rst->length(), 1),
(...skipping 22 matching lines...) Expand all
1932 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 1827 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1933 EXPECT_TRUE(HasActiveSession(host_port_pair_)); 1828 EXPECT_TRUE(HasActiveSession(host_port_pair_));
1934 1829
1935 // Set session config to have connection migration disabled. 1830 // Set session config to have connection migration disabled.
1936 QuicConfigPeer::SetReceivedDisableConnectionMigration(session->config()); 1831 QuicConfigPeer::SetReceivedDisableConnectionMigration(session->config());
1937 EXPECT_TRUE(session->config()->DisableConnectionMigration()); 1832 EXPECT_TRUE(session->config()->DisableConnectionMigration());
1938 1833
1939 // Trigger connection migration. Since there is a non-migratable stream, 1834 // Trigger connection migration. Since there is a non-migratable stream,
1940 // this should cause session to continue but be marked as going away. 1835 // this should cause session to continue but be marked as going away.
1941 scoped_mock_network_change_notifier_->mock_network_change_notifier() 1836 scoped_mock_network_change_notifier_->mock_network_change_notifier()
1942 ->NotifyNetworkSoonToDisconnect(kDefaultNetworkForTests); 1837 ->NotifyNetworkMadeDefault(kNewNetworkForTests);
1943 1838
1944 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 1839 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
1945 EXPECT_FALSE(HasActiveSession(host_port_pair_)); 1840 EXPECT_FALSE(HasActiveSession(host_port_pair_));
1946 EXPECT_EQ(1u, session->GetNumActiveStreams()); 1841 EXPECT_EQ(1u, session->GetNumActiveStreams());
1947 1842
1948 stream.reset(); 1843 stream.reset();
1949 1844
1950 EXPECT_TRUE(socket_data.AllReadDataConsumed()); 1845 EXPECT_TRUE(socket_data.AllReadDataConsumed());
1951 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); 1846 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
1952 } 1847 }
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
2048 scoped_mock_network_change_notifier_->mock_network_change_notifier() 1943 scoped_mock_network_change_notifier_->mock_network_change_notifier()
2049 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); 1944 ->NotifyNetworkDisconnected(kDefaultNetworkForTests);
2050 1945
2051 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 1946 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2052 EXPECT_FALSE(HasActiveSession(host_port_pair_)); 1947 EXPECT_FALSE(HasActiveSession(host_port_pair_));
2053 1948
2054 EXPECT_TRUE(socket_data.AllReadDataConsumed()); 1949 EXPECT_TRUE(socket_data.AllReadDataConsumed());
2055 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); 1950 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
2056 } 1951 }
2057 1952
2058 TEST_P(QuicStreamFactoryTest, OnNetworkChangeSoonToDisconnectNoOpenStreams) { 1953 TEST_P(QuicStreamFactoryTest, OnNetworkChangeNetworkMadeDefaultNoOpenStreams) {
2059 InitializeConnectionMigrationTest( 1954 InitializeConnectionMigrationTest(
2060 {kDefaultNetworkForTests, kNewNetworkForTests}); 1955 {kDefaultNetworkForTests, kNewNetworkForTests});
2061 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); 1956 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
2062 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 1957 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
2063 1958
2064 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 1959 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
2065 SequencedSocketData socket_data(reads, arraysize(reads), nullptr, 0u); 1960 SequencedSocketData socket_data(reads, arraysize(reads), nullptr, 0u);
2066 socket_factory_.AddSocketDataProvider(&socket_data); 1961 socket_factory_.AddSocketDataProvider(&socket_data);
2067 1962
2068 // Create request and QuicHttpStream. 1963 // Create request and QuicHttpStream.
2069 QuicStreamRequest request(factory_.get()); 1964 QuicStreamRequest request(factory_.get());
2070 EXPECT_EQ(ERR_IO_PENDING, 1965 EXPECT_EQ(ERR_IO_PENDING,
2071 request.Request(host_port_pair_, privacy_mode_, 1966 request.Request(host_port_pair_, privacy_mode_,
2072 /*cert_verify_flags=*/0, url_, "GET", net_log_, 1967 /*cert_verify_flags=*/0, url_, "GET", net_log_,
2073 callback_.callback())); 1968 callback_.callback()));
2074 EXPECT_THAT(callback_.WaitForResult(), IsOk()); 1969 EXPECT_THAT(callback_.WaitForResult(), IsOk());
2075 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); 1970 std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
2076 EXPECT_TRUE(stream.get()); 1971 EXPECT_TRUE(stream.get());
2077 1972
2078 // Ensure that session is alive and active. 1973 // Ensure that session is alive and active.
2079 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); 1974 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
2080 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 1975 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2081 EXPECT_TRUE(HasActiveSession(host_port_pair_)); 1976 EXPECT_TRUE(HasActiveSession(host_port_pair_));
2082 1977
2083 // Trigger connection migration. Since there are no active streams, 1978 // Trigger connection migration. Since there are no active streams,
2084 // the session will be closed. 1979 // the session will be closed.
2085 scoped_mock_network_change_notifier_->mock_network_change_notifier() 1980 scoped_mock_network_change_notifier_->mock_network_change_notifier()
2086 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); 1981 ->NotifyNetworkMadeDefault(kNewNetworkForTests);
2087 1982
2088 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 1983 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2089 EXPECT_FALSE(HasActiveSession(host_port_pair_)); 1984 EXPECT_FALSE(HasActiveSession(host_port_pair_));
2090 1985
2091 EXPECT_TRUE(socket_data.AllReadDataConsumed()); 1986 EXPECT_TRUE(socket_data.AllReadDataConsumed());
2092 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); 1987 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
2093 } 1988 }
2094 1989
2095 TEST_P(QuicStreamFactoryTest, OnNetworkChangeDisconnectedNoOpenStreams) { 1990 TEST_P(QuicStreamFactoryTest, OnNetworkChangeDisconnectedNoOpenStreams) {
2096 InitializeConnectionMigrationTest( 1991 InitializeConnectionMigrationTest(
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
2223 /*cert_verify_flags=*/0, url_, "GET", net_log_, 2118 /*cert_verify_flags=*/0, url_, "GET", net_log_,
2224 callback_.callback())); 2119 callback_.callback()));
2225 EXPECT_THAT(callback_.WaitForResult(), IsOk()); 2120 EXPECT_THAT(callback_.WaitForResult(), IsOk());
2226 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream(); 2121 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream();
2227 EXPECT_TRUE(stream2.get()); 2122 EXPECT_TRUE(stream2.get());
2228 2123
2229 EXPECT_TRUE(HasActiveSession(host_port_pair_)); 2124 EXPECT_TRUE(HasActiveSession(host_port_pair_));
2230 QuicChromiumClientSession* new_session = GetActiveSession(host_port_pair_); 2125 QuicChromiumClientSession* new_session = GetActiveSession(host_port_pair_);
2231 EXPECT_NE(session, new_session); 2126 EXPECT_NE(session, new_session);
2232 2127
2233 // On a SOON_TO_DISCONNECT notification, nothing happens to the 2128 // On a NETWORK_MADE_DEFAULT notification, nothing happens to the
2234 // migrated session, but the new session is closed since it has no 2129 // migrated session, but the new session is closed since it has no
2235 // open streams. 2130 // open streams.
2236 scoped_mock_network_change_notifier_->mock_network_change_notifier() 2131 scoped_mock_network_change_notifier_->mock_network_change_notifier()
2237 ->NotifyNetworkSoonToDisconnect(kDefaultNetworkForTests); 2132 ->NotifyNetworkMadeDefault(kNewNetworkForTests);
2238 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 2133 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2239 EXPECT_EQ(1u, session->GetNumActiveStreams()); 2134 EXPECT_EQ(1u, session->GetNumActiveStreams());
2240 EXPECT_FALSE( 2135 EXPECT_FALSE(
2241 QuicStreamFactoryPeer::IsLiveSession(factory_.get(), new_session)); 2136 QuicStreamFactoryPeer::IsLiveSession(factory_.get(), new_session));
2242 2137
2243 // On a DISCONNECTED notification, nothing happens to the migrated session. 2138 // On a DISCONNECTED notification, nothing happens to the migrated session.
2244 scoped_mock_network_change_notifier_->mock_network_change_notifier() 2139 scoped_mock_network_change_notifier_->mock_network_change_notifier()
2245 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); 2140 ->NotifyNetworkDisconnected(kDefaultNetworkForTests);
2246 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 2141 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2247 EXPECT_EQ(1u, session->GetNumActiveStreams()); 2142 EXPECT_EQ(1u, session->GetNumActiveStreams());
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
2355 /*cert_verify_flags=*/0, url_, "GET", net_log_, 2250 /*cert_verify_flags=*/0, url_, "GET", net_log_,
2356 callback_.callback())); 2251 callback_.callback()));
2357 EXPECT_THAT(callback_.WaitForResult(), IsOk()); 2252 EXPECT_THAT(callback_.WaitForResult(), IsOk());
2358 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream(); 2253 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream();
2359 EXPECT_TRUE(stream2.get()); 2254 EXPECT_TRUE(stream2.get());
2360 2255
2361 EXPECT_TRUE(HasActiveSession(host_port_pair_)); 2256 EXPECT_TRUE(HasActiveSession(host_port_pair_));
2362 QuicChromiumClientSession* new_session = GetActiveSession(host_port_pair_); 2257 QuicChromiumClientSession* new_session = GetActiveSession(host_port_pair_);
2363 EXPECT_NE(session, new_session); 2258 EXPECT_NE(session, new_session);
2364 2259
2365 // On a SOON_TO_DISCONNECT notification, nothing happens to the 2260 // On a NETWORK_MADE_DEFAULT notification, nothing happens to the
2366 // migrated session, but the new session is closed since it has no 2261 // migrated session, but the new session is closed since it has no
2367 // open streams. 2262 // open streams.
2368 scoped_mock_network_change_notifier_->mock_network_change_notifier() 2263 scoped_mock_network_change_notifier_->mock_network_change_notifier()
2369 ->NotifyNetworkSoonToDisconnect(kDefaultNetworkForTests); 2264 ->NotifyNetworkMadeDefault(kNewNetworkForTests);
2370 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 2265 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2371 EXPECT_EQ(1u, session->GetNumActiveStreams()); 2266 EXPECT_EQ(1u, session->GetNumActiveStreams());
2372 EXPECT_FALSE( 2267 EXPECT_FALSE(
2373 QuicStreamFactoryPeer::IsLiveSession(factory_.get(), new_session)); 2268 QuicStreamFactoryPeer::IsLiveSession(factory_.get(), new_session));
2374 2269
2375 // On a DISCONNECTED notification, nothing happens to the migrated session. 2270 // On a DISCONNECTED notification, nothing happens to the migrated session.
2376 scoped_mock_network_change_notifier_->mock_network_change_notifier() 2271 scoped_mock_network_change_notifier_->mock_network_change_notifier()
2377 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); 2272 ->NotifyNetworkDisconnected(kDefaultNetworkForTests);
2378 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session)); 2273 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session));
2379 EXPECT_EQ(1u, session->GetNumActiveStreams()); 2274 EXPECT_EQ(1u, session->GetNumActiveStreams());
(...skipping 2737 matching lines...) Expand 10 before | Expand all | Expand 10 after
5117 // Clear all cached states. 5012 // Clear all cached states.
5118 factory_->ClearCachedStatesInCryptoConfig( 5013 factory_->ClearCachedStatesInCryptoConfig(
5119 base::Callback<bool(const GURL&)>()); 5014 base::Callback<bool(const GURL&)>());
5120 EXPECT_TRUE(test_cases[0].state->certs().empty()); 5015 EXPECT_TRUE(test_cases[0].state->certs().empty());
5121 EXPECT_TRUE(test_cases[1].state->certs().empty()); 5016 EXPECT_TRUE(test_cases[1].state->certs().empty());
5122 EXPECT_TRUE(test_cases[2].state->certs().empty()); 5017 EXPECT_TRUE(test_cases[2].state->certs().empty());
5123 } 5018 }
5124 5019
5125 } // namespace test 5020 } // namespace test
5126 } // namespace net 5021 } // namespace net
OLDNEW
« net/quic/chromium/quic_stream_factory.cc ('K') | « 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