| 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_http_stream.h" | 5 #include "net/spdy/spdy_http_stream.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 #include "net/spdy/spdy_http_utils.h" | 27 #include "net/spdy/spdy_http_utils.h" |
| 28 #include "net/spdy/spdy_session.h" | 28 #include "net/spdy/spdy_session.h" |
| 29 #include "net/spdy/spdy_test_util_common.h" | 29 #include "net/spdy/spdy_test_util_common.h" |
| 30 #include "net/ssl/default_channel_id_store.h" | 30 #include "net/ssl/default_channel_id_store.h" |
| 31 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
| 32 | 32 |
| 33 namespace net { | 33 namespace net { |
| 34 | 34 |
| 35 namespace { | 35 namespace { |
| 36 | 36 |
| 37 enum TestCase { |
| 38 // Test using the SPDY 3.1 protocol. |
| 39 kTestCaseSPDY31, |
| 40 |
| 41 // Test using the HTTP2 protocol, without specifying a stream |
| 42 // dependency based on the RequestPriority. |
| 43 kTestCaseHTTP2NoPriorityDependencies, |
| 44 |
| 45 // Test using the HTTP2 protocol, specifying a stream |
| 46 // dependency based on the RequestPriority. |
| 47 kTestCaseHTTP2PriorityDependencies |
| 48 }; |
| 49 |
| 37 // Tests the load timing of a stream that's connected and is not the first | 50 // Tests the load timing of a stream that's connected and is not the first |
| 38 // request sent on a connection. | 51 // request sent on a connection. |
| 39 void TestLoadTimingReused(const HttpStream& stream) { | 52 void TestLoadTimingReused(const HttpStream& stream) { |
| 40 LoadTimingInfo load_timing_info; | 53 LoadTimingInfo load_timing_info; |
| 41 EXPECT_TRUE(stream.GetLoadTimingInfo(&load_timing_info)); | 54 EXPECT_TRUE(stream.GetLoadTimingInfo(&load_timing_info)); |
| 42 | 55 |
| 43 EXPECT_TRUE(load_timing_info.socket_reused); | 56 EXPECT_TRUE(load_timing_info.socket_reused); |
| 44 EXPECT_NE(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); | 57 EXPECT_NE(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
| 45 | 58 |
| 46 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); | 59 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 57 EXPECT_NE(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); | 70 EXPECT_NE(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
| 58 | 71 |
| 59 ExpectConnectTimingHasTimes(load_timing_info.connect_timing, | 72 ExpectConnectTimingHasTimes(load_timing_info.connect_timing, |
| 60 CONNECT_TIMING_HAS_DNS_TIMES); | 73 CONNECT_TIMING_HAS_DNS_TIMES); |
| 61 ExpectLoadTimingHasOnlyConnectionTimes(load_timing_info); | 74 ExpectLoadTimingHasOnlyConnectionTimes(load_timing_info); |
| 62 } | 75 } |
| 63 | 76 |
| 64 } // namespace | 77 } // namespace |
| 65 | 78 |
| 66 class SpdyHttpStreamTest : public testing::Test, | 79 class SpdyHttpStreamTest : public testing::Test, |
| 67 public testing::WithParamInterface<NextProto> { | 80 public testing::WithParamInterface<TestCase> { |
| 68 public: | 81 public: |
| 69 SpdyHttpStreamTest() | 82 SpdyHttpStreamTest() |
| 70 : spdy_util_(GetParam()), | 83 : spdy_util_(GetProtocol(), GetDependenciesFromPriority()), |
| 71 session_deps_(GetParam()) { | 84 session_deps_(GetProtocol()) { |
| 85 SpdySession::SetPriorityDependencyDefaultForTesting( |
| 86 GetDependenciesFromPriority()); |
| 72 session_deps_.net_log = &net_log_; | 87 session_deps_.net_log = &net_log_; |
| 73 } | 88 } |
| 74 | 89 |
| 90 ~SpdyHttpStreamTest() { |
| 91 SpdySession::SetPriorityDependencyDefaultForTesting(false); |
| 92 } |
| 93 |
| 75 protected: | 94 protected: |
| 95 NextProto GetProtocol() const { |
| 96 return GetParam() == kTestCaseSPDY31 ? kProtoSPDY31 : kProtoHTTP2; |
| 97 } |
| 98 |
| 99 bool GetDependenciesFromPriority() const { |
| 100 return GetParam() == kTestCaseHTTP2PriorityDependencies; |
| 101 } |
| 102 |
| 76 void TearDown() override { | 103 void TearDown() override { |
| 77 crypto::ECSignatureCreator::SetFactoryForTesting(NULL); | 104 crypto::ECSignatureCreator::SetFactoryForTesting(NULL); |
| 78 base::MessageLoop::current()->RunUntilIdle(); | 105 base::MessageLoop::current()->RunUntilIdle(); |
| 79 EXPECT_TRUE(sequenced_data_->AllReadDataConsumed()); | 106 EXPECT_TRUE(sequenced_data_->AllReadDataConsumed()); |
| 80 EXPECT_TRUE(sequenced_data_->AllWriteDataConsumed()); | 107 EXPECT_TRUE(sequenced_data_->AllWriteDataConsumed()); |
| 81 } | 108 } |
| 82 | 109 |
| 83 // Initializes the session using SequencedSocketData. | 110 // Initializes the session using SequencedSocketData. |
| 84 void InitSession(MockRead* reads, | 111 void InitSession(MockRead* reads, |
| 85 size_t reads_count, | 112 size_t reads_count, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 103 TestNetLog net_log_; | 130 TestNetLog net_log_; |
| 104 SpdySessionDependencies session_deps_; | 131 SpdySessionDependencies session_deps_; |
| 105 scoped_ptr<SequencedSocketData> sequenced_data_; | 132 scoped_ptr<SequencedSocketData> sequenced_data_; |
| 106 scoped_ptr<HttpNetworkSession> http_session_; | 133 scoped_ptr<HttpNetworkSession> http_session_; |
| 107 base::WeakPtr<SpdySession> session_; | 134 base::WeakPtr<SpdySession> session_; |
| 108 | 135 |
| 109 private: | 136 private: |
| 110 MockECSignatureCreatorFactory ec_signature_creator_factory_; | 137 MockECSignatureCreatorFactory ec_signature_creator_factory_; |
| 111 }; | 138 }; |
| 112 | 139 |
| 113 INSTANTIATE_TEST_CASE_P(NextProto, | 140 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend, |
| 114 SpdyHttpStreamTest, | 141 SpdyHttpStreamTest, |
| 115 testing::Values(kProtoSPDY31, | 142 testing::Values(kTestCaseSPDY31, |
| 116 kProtoHTTP2)); | 143 kTestCaseHTTP2NoPriorityDependencies, |
| 144 kTestCaseHTTP2PriorityDependencies)); |
| 117 | 145 |
| 118 // SpdyHttpStream::GetUploadProgress() should still work even before the | 146 // SpdyHttpStream::GetUploadProgress() should still work even before the |
| 119 // stream is initialized. | 147 // stream is initialized. |
| 120 TEST_P(SpdyHttpStreamTest, GetUploadProgressBeforeInitialization) { | 148 TEST_P(SpdyHttpStreamTest, GetUploadProgressBeforeInitialization) { |
| 121 MockRead reads[] = { | 149 MockRead reads[] = { |
| 122 MockRead(ASYNC, 0, 0) // EOF | 150 MockRead(ASYNC, 0, 0) // EOF |
| 123 }; | 151 }; |
| 124 | 152 |
| 125 HostPortPair host_port_pair("www.example.org", 80); | 153 HostPortPair host_port_pair("www.example.org", 80); |
| 126 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 154 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), |
| (...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 835 EXPECT_EQ(kUploadData, std::string(buf1->data(), kUploadDataSize)); | 863 EXPECT_EQ(kUploadData, std::string(buf1->data(), kUploadDataSize)); |
| 836 | 864 |
| 837 ASSERT_TRUE(response.headers.get()); | 865 ASSERT_TRUE(response.headers.get()); |
| 838 ASSERT_EQ(200, response.headers->response_code()); | 866 ASSERT_EQ(200, response.headers->response_code()); |
| 839 } | 867 } |
| 840 | 868 |
| 841 // TODO(willchan): Write a longer test for SpdyStream that exercises all | 869 // TODO(willchan): Write a longer test for SpdyStream that exercises all |
| 842 // methods. | 870 // methods. |
| 843 | 871 |
| 844 } // namespace net | 872 } // namespace net |
| OLD | NEW |