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/spdy/spdy_session.h" | 5 #include "net/spdy/spdy_session.h" |
6 | 6 |
7 #include "base/base64.h" | 7 #include "base/base64.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 1592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1603 SETTINGS_FLAG_PLEASE_PERSIST, | 1603 SETTINGS_FLAG_PLEASE_PERSIST, |
1604 2); | 1604 2); |
1605 EXPECT_NE(0u, test_http_server_properties->GetSpdySettings( | 1605 EXPECT_NE(0u, test_http_server_properties->GetSpdySettings( |
1606 test_host_port_pair_).size()); | 1606 test_host_port_pair_).size()); |
1607 spdy_session_pool_->OnIPAddressChanged(); | 1607 spdy_session_pool_->OnIPAddressChanged(); |
1608 EXPECT_EQ(0u, test_http_server_properties->GetSpdySettings( | 1608 EXPECT_EQ(0u, test_http_server_properties->GetSpdySettings( |
1609 test_host_port_pair_).size()); | 1609 test_host_port_pair_).size()); |
1610 } | 1610 } |
1611 | 1611 |
1612 TEST_P(SpdySessionTest, Initialize) { | 1612 TEST_P(SpdySessionTest, Initialize) { |
1613 CapturingBoundNetLog log; | 1613 BoundTestNetLog log; |
1614 session_deps_.net_log = log.bound().net_log(); | 1614 session_deps_.net_log = log.bound().net_log(); |
1615 session_deps_.host_resolver->set_synchronous_mode(true); | 1615 session_deps_.host_resolver->set_synchronous_mode(true); |
1616 | 1616 |
1617 MockConnect connect_data(SYNCHRONOUS, OK); | 1617 MockConnect connect_data(SYNCHRONOUS, OK); |
1618 MockRead reads[] = { | 1618 MockRead reads[] = { |
1619 MockRead(ASYNC, 0, 0) // EOF | 1619 MockRead(ASYNC, 0, 0) // EOF |
1620 }; | 1620 }; |
1621 | 1621 |
1622 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); | 1622 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); |
1623 data.set_connect_data(connect_data); | 1623 data.set_connect_data(connect_data); |
1624 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1624 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1625 | 1625 |
1626 CreateNetworkSession(); | 1626 CreateNetworkSession(); |
1627 | 1627 |
1628 base::WeakPtr<SpdySession> session = | 1628 base::WeakPtr<SpdySession> session = |
1629 CreateInsecureSpdySession(http_session_, key_, log.bound()); | 1629 CreateInsecureSpdySession(http_session_, key_, log.bound()); |
1630 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); | 1630 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); |
1631 | 1631 |
1632 // Flush the read completion task. | 1632 // Flush the read completion task. |
1633 base::MessageLoop::current()->RunUntilIdle(); | 1633 base::MessageLoop::current()->RunUntilIdle(); |
1634 | 1634 |
1635 net::CapturingNetLog::CapturedEntryList entries; | 1635 net::TestNetLog::CapturedEntryList entries; |
1636 log.GetEntries(&entries); | 1636 log.GetEntries(&entries); |
1637 EXPECT_LT(0u, entries.size()); | 1637 EXPECT_LT(0u, entries.size()); |
1638 | 1638 |
1639 // Check that we logged TYPE_HTTP2_SESSION_INITIALIZED correctly. | 1639 // Check that we logged TYPE_HTTP2_SESSION_INITIALIZED correctly. |
1640 int pos = net::ExpectLogContainsSomewhere( | 1640 int pos = net::ExpectLogContainsSomewhere( |
1641 entries, 0, net::NetLog::TYPE_HTTP2_SESSION_INITIALIZED, | 1641 entries, 0, net::NetLog::TYPE_HTTP2_SESSION_INITIALIZED, |
1642 net::NetLog::PHASE_NONE); | 1642 net::NetLog::PHASE_NONE); |
1643 EXPECT_LT(0, pos); | 1643 EXPECT_LT(0, pos); |
1644 | 1644 |
1645 CapturingNetLog::CapturedEntry entry = entries[pos]; | 1645 TestNetLog::CapturedEntry entry = entries[pos]; |
1646 NetLog::Source socket_source; | 1646 NetLog::Source socket_source; |
1647 EXPECT_TRUE(NetLog::Source::FromEventParameters(entry.params.get(), | 1647 EXPECT_TRUE(NetLog::Source::FromEventParameters(entry.params.get(), |
1648 &socket_source)); | 1648 &socket_source)); |
1649 EXPECT_TRUE(socket_source.IsValid()); | 1649 EXPECT_TRUE(socket_source.IsValid()); |
1650 EXPECT_NE(log.bound().source().id, socket_source.id); | 1650 EXPECT_NE(log.bound().source().id, socket_source.id); |
1651 } | 1651 } |
1652 | 1652 |
1653 TEST_P(SpdySessionTest, NetLogOnSessionGoaway) { | 1653 TEST_P(SpdySessionTest, NetLogOnSessionGoaway) { |
1654 session_deps_.host_resolver->set_synchronous_mode(true); | 1654 session_deps_.host_resolver->set_synchronous_mode(true); |
1655 | 1655 |
1656 MockConnect connect_data(SYNCHRONOUS, OK); | 1656 MockConnect connect_data(SYNCHRONOUS, OK); |
1657 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway()); | 1657 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway()); |
1658 MockRead reads[] = { | 1658 MockRead reads[] = { |
1659 CreateMockRead(*goaway), | 1659 CreateMockRead(*goaway), |
1660 MockRead(SYNCHRONOUS, 0, 0) // EOF | 1660 MockRead(SYNCHRONOUS, 0, 0) // EOF |
1661 }; | 1661 }; |
1662 | 1662 |
1663 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); | 1663 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); |
1664 data.set_connect_data(connect_data); | 1664 data.set_connect_data(connect_data); |
1665 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1665 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1666 | 1666 |
1667 CreateNetworkSession(); | 1667 CreateNetworkSession(); |
1668 | 1668 |
1669 CapturingBoundNetLog log; | 1669 BoundTestNetLog log; |
1670 base::WeakPtr<SpdySession> session = | 1670 base::WeakPtr<SpdySession> session = |
1671 CreateInsecureSpdySession(http_session_, key_, log.bound()); | 1671 CreateInsecureSpdySession(http_session_, key_, log.bound()); |
1672 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); | 1672 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); |
1673 | 1673 |
1674 // Flush the read completion task. | 1674 // Flush the read completion task. |
1675 base::MessageLoop::current()->RunUntilIdle(); | 1675 base::MessageLoop::current()->RunUntilIdle(); |
1676 | 1676 |
1677 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); | 1677 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); |
1678 EXPECT_TRUE(session == NULL); | 1678 EXPECT_TRUE(session == NULL); |
1679 | 1679 |
1680 // Check that the NetLog was filled reasonably. | 1680 // Check that the NetLog was filled reasonably. |
1681 net::CapturingNetLog::CapturedEntryList entries; | 1681 net::TestNetLog::CapturedEntryList entries; |
1682 log.GetEntries(&entries); | 1682 log.GetEntries(&entries); |
1683 EXPECT_LT(0u, entries.size()); | 1683 EXPECT_LT(0u, entries.size()); |
1684 | 1684 |
1685 // Check that we logged SPDY_SESSION_CLOSE correctly. | 1685 // Check that we logged SPDY_SESSION_CLOSE correctly. |
1686 int pos = net::ExpectLogContainsSomewhere( | 1686 int pos = net::ExpectLogContainsSomewhere( |
1687 entries, 0, net::NetLog::TYPE_HTTP2_SESSION_CLOSE, | 1687 entries, 0, net::NetLog::TYPE_HTTP2_SESSION_CLOSE, |
1688 net::NetLog::PHASE_NONE); | 1688 net::NetLog::PHASE_NONE); |
1689 | 1689 |
1690 if (pos < static_cast<int>(entries.size())) { | 1690 if (pos < static_cast<int>(entries.size())) { |
1691 CapturingNetLog::CapturedEntry entry = entries[pos]; | 1691 TestNetLog::CapturedEntry entry = entries[pos]; |
1692 int error_code = 0; | 1692 int error_code = 0; |
1693 ASSERT_TRUE(entry.GetNetErrorCode(&error_code)); | 1693 ASSERT_TRUE(entry.GetNetErrorCode(&error_code)); |
1694 EXPECT_EQ(OK, error_code); | 1694 EXPECT_EQ(OK, error_code); |
1695 } else { | 1695 } else { |
1696 ADD_FAILURE(); | 1696 ADD_FAILURE(); |
1697 } | 1697 } |
1698 } | 1698 } |
1699 | 1699 |
1700 TEST_P(SpdySessionTest, NetLogOnSessionEOF) { | 1700 TEST_P(SpdySessionTest, NetLogOnSessionEOF) { |
1701 session_deps_.host_resolver->set_synchronous_mode(true); | 1701 session_deps_.host_resolver->set_synchronous_mode(true); |
1702 | 1702 |
1703 MockConnect connect_data(SYNCHRONOUS, OK); | 1703 MockConnect connect_data(SYNCHRONOUS, OK); |
1704 MockRead reads[] = { | 1704 MockRead reads[] = { |
1705 MockRead(SYNCHRONOUS, 0, 0) // EOF | 1705 MockRead(SYNCHRONOUS, 0, 0) // EOF |
1706 }; | 1706 }; |
1707 | 1707 |
1708 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); | 1708 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); |
1709 data.set_connect_data(connect_data); | 1709 data.set_connect_data(connect_data); |
1710 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1710 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1711 | 1711 |
1712 CreateNetworkSession(); | 1712 CreateNetworkSession(); |
1713 | 1713 |
1714 CapturingBoundNetLog log; | 1714 BoundTestNetLog log; |
1715 base::WeakPtr<SpdySession> session = | 1715 base::WeakPtr<SpdySession> session = |
1716 CreateInsecureSpdySession(http_session_, key_, log.bound()); | 1716 CreateInsecureSpdySession(http_session_, key_, log.bound()); |
1717 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); | 1717 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); |
1718 | 1718 |
1719 // Flush the read completion task. | 1719 // Flush the read completion task. |
1720 base::MessageLoop::current()->RunUntilIdle(); | 1720 base::MessageLoop::current()->RunUntilIdle(); |
1721 | 1721 |
1722 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); | 1722 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); |
1723 EXPECT_TRUE(session == NULL); | 1723 EXPECT_TRUE(session == NULL); |
1724 | 1724 |
1725 // Check that the NetLog was filled reasonably. | 1725 // Check that the NetLog was filled reasonably. |
1726 net::CapturingNetLog::CapturedEntryList entries; | 1726 net::TestNetLog::CapturedEntryList entries; |
1727 log.GetEntries(&entries); | 1727 log.GetEntries(&entries); |
1728 EXPECT_LT(0u, entries.size()); | 1728 EXPECT_LT(0u, entries.size()); |
1729 | 1729 |
1730 // Check that we logged SPDY_SESSION_CLOSE correctly. | 1730 // Check that we logged SPDY_SESSION_CLOSE correctly. |
1731 int pos = net::ExpectLogContainsSomewhere( | 1731 int pos = net::ExpectLogContainsSomewhere( |
1732 entries, 0, net::NetLog::TYPE_HTTP2_SESSION_CLOSE, | 1732 entries, 0, net::NetLog::TYPE_HTTP2_SESSION_CLOSE, |
1733 net::NetLog::PHASE_NONE); | 1733 net::NetLog::PHASE_NONE); |
1734 | 1734 |
1735 if (pos < static_cast<int>(entries.size())) { | 1735 if (pos < static_cast<int>(entries.size())) { |
1736 CapturingNetLog::CapturedEntry entry = entries[pos]; | 1736 TestNetLog::CapturedEntry entry = entries[pos]; |
1737 int error_code = 0; | 1737 int error_code = 0; |
1738 ASSERT_TRUE(entry.GetNetErrorCode(&error_code)); | 1738 ASSERT_TRUE(entry.GetNetErrorCode(&error_code)); |
1739 EXPECT_EQ(ERR_CONNECTION_CLOSED, error_code); | 1739 EXPECT_EQ(ERR_CONNECTION_CLOSED, error_code); |
1740 } else { | 1740 } else { |
1741 ADD_FAILURE(); | 1741 ADD_FAILURE(); |
1742 } | 1742 } |
1743 } | 1743 } |
1744 | 1744 |
1745 TEST_P(SpdySessionTest, SynCompressionHistograms) { | 1745 TEST_P(SpdySessionTest, SynCompressionHistograms) { |
1746 session_deps_.enable_compression = true; | 1746 session_deps_.enable_compression = true; |
(...skipping 3401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5148 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), | 5148 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), |
5149 "spdy_pooling.pem"); | 5149 "spdy_pooling.pem"); |
5150 ssl_info.is_issued_by_known_root = true; | 5150 ssl_info.is_issued_by_known_root = true; |
5151 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); | 5151 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); |
5152 | 5152 |
5153 EXPECT_TRUE(SpdySession::CanPool( | 5153 EXPECT_TRUE(SpdySession::CanPool( |
5154 &tss, ssl_info, "www.example.org", "mail.example.org")); | 5154 &tss, ssl_info, "www.example.org", "mail.example.org")); |
5155 } | 5155 } |
5156 | 5156 |
5157 } // namespace net | 5157 } // namespace net |
OLD | NEW |