OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/quic_headers_stream.h" | 5 #include "net/quic/quic_headers_stream.h" |
6 | 6 |
7 #include "net/quic/quic_utils.h" | 7 #include "net/quic/quic_utils.h" |
8 #include "net/quic/spdy_utils.h" | 8 #include "net/quic/spdy_utils.h" |
9 #include "net/quic/test_tools/quic_connection_peer.h" | 9 #include "net/quic/test_tools/quic_connection_peer.h" |
10 #include "net/quic/test_tools/quic_spdy_session_peer.h" | 10 #include "net/quic/test_tools/quic_spdy_session_peer.h" |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 void(SpdyStreamId stream_id, | 89 void(SpdyStreamId stream_id, |
90 StringPiece origin, | 90 StringPiece origin, |
91 const SpdyAltSvcWireFormat::AlternativeServiceVector& | 91 const SpdyAltSvcWireFormat::AlternativeServiceVector& |
92 altsvc_vector)); | 92 altsvc_vector)); |
93 MOCK_METHOD2(OnUnknownFrame, bool(SpdyStreamId stream_id, int frame_type)); | 93 MOCK_METHOD2(OnUnknownFrame, bool(SpdyStreamId stream_id, int frame_type)); |
94 }; | 94 }; |
95 | 95 |
96 // Run all tests with each version, perspective (client or server), | 96 // Run all tests with each version, perspective (client or server), |
97 // and relevant flag options (false or true) | 97 // and relevant flag options (false or true) |
98 struct TestParams { | 98 struct TestParams { |
99 TestParams(QuicVersion version, | 99 TestParams(QuicVersion version, Perspective perspective) |
100 Perspective perspective, | 100 : version(version), perspective(perspective) {} |
101 bool spdy_on_stream_end) | |
102 : version(version), | |
103 perspective(perspective), | |
104 spdy_on_stream_end(spdy_on_stream_end) {} | |
105 | 101 |
106 friend ostream& operator<<(ostream& os, const TestParams& p) { | 102 friend ostream& operator<<(ostream& os, const TestParams& p) { |
107 os << "{ version: " << QuicVersionToString(p.version); | 103 os << "{ version: " << QuicVersionToString(p.version); |
108 os << ", perspective: " << p.perspective; | 104 os << ", perspective: " << p.perspective << " }"; |
109 os << ", spdy_on_stream_end: " << p.spdy_on_stream_end << " }"; | |
110 return os; | 105 return os; |
111 } | 106 } |
112 | 107 |
113 QuicVersion version; | 108 QuicVersion version; |
114 Perspective perspective; | 109 Perspective perspective; |
115 bool spdy_on_stream_end; | |
116 }; | 110 }; |
117 | 111 |
118 // Constructs various test permutations. | 112 // Constructs various test permutations. |
119 vector<TestParams> GetTestParams() { | 113 vector<TestParams> GetTestParams() { |
120 vector<TestParams> params; | 114 vector<TestParams> params; |
121 QuicVersionVector all_supported_versions = QuicSupportedVersions(); | 115 QuicVersionVector all_supported_versions = QuicSupportedVersions(); |
122 for (const QuicVersion version : all_supported_versions) { | 116 for (const QuicVersion version : all_supported_versions) { |
123 params.push_back(TestParams(version, Perspective::IS_CLIENT, true)); | 117 params.push_back(TestParams(version, Perspective::IS_CLIENT)); |
124 params.push_back(TestParams(version, Perspective::IS_SERVER, true)); | 118 params.push_back(TestParams(version, Perspective::IS_SERVER)); |
125 params.push_back(TestParams(version, Perspective::IS_CLIENT, false)); | |
126 params.push_back(TestParams(version, Perspective::IS_SERVER, false)); | |
127 } | 119 } |
128 FLAGS_quic_supports_push_promise = true; | 120 FLAGS_quic_supports_push_promise = true; |
129 return params; | 121 return params; |
130 } | 122 } |
131 | 123 |
132 class QuicHeadersStreamTest : public ::testing::TestWithParam<TestParams> { | 124 class QuicHeadersStreamTest : public ::testing::TestWithParam<TestParams> { |
133 public: | 125 public: |
134 QuicHeadersStreamTest() | 126 QuicHeadersStreamTest() |
135 : connection_(new StrictMock<MockConnection>(&helper_, | 127 : connection_(new StrictMock<MockConnection>(&helper_, |
136 &alarm_factory_, | 128 &alarm_factory_, |
137 perspective(), | 129 perspective(), |
138 GetVersion())), | 130 GetVersion())), |
139 session_(connection_), | 131 session_(connection_), |
140 headers_stream_(QuicSpdySessionPeer::GetHeadersStream(&session_)), | 132 headers_stream_(QuicSpdySessionPeer::GetHeadersStream(&session_)), |
141 body_("hello world"), | 133 body_("hello world"), |
142 stream_frame_(kHeadersStreamId, /*fin=*/false, /*offset=*/0, ""), | 134 stream_frame_(kHeadersStreamId, /*fin=*/false, /*offset=*/0, ""), |
143 next_promised_stream_id_(2) { | 135 next_promised_stream_id_(2) { |
144 FLAGS_quic_always_log_bugs_for_tests = true; | 136 FLAGS_quic_always_log_bugs_for_tests = true; |
145 headers_[":version"] = "HTTP/1.1"; | 137 headers_[":version"] = "HTTP/1.1"; |
146 headers_[":status"] = "200 Ok"; | 138 headers_[":status"] = "200 Ok"; |
147 headers_["content-length"] = "11"; | 139 headers_["content-length"] = "11"; |
148 FLAGS_spdy_on_stream_end = GetParam().spdy_on_stream_end; | |
149 framer_ = std::unique_ptr<SpdyFramer>(new SpdyFramer(HTTP2)); | 140 framer_ = std::unique_ptr<SpdyFramer>(new SpdyFramer(HTTP2)); |
150 framer_->set_visitor(&visitor_); | 141 framer_->set_visitor(&visitor_); |
151 EXPECT_EQ(version(), session_.connection()->version()); | 142 EXPECT_EQ(version(), session_.connection()->version()); |
152 EXPECT_TRUE(headers_stream_ != nullptr); | 143 EXPECT_TRUE(headers_stream_ != nullptr); |
153 VLOG(1) << GetParam(); | 144 VLOG(1) << GetParam(); |
154 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); | 145 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); |
155 } | 146 } |
156 | 147 |
157 QuicConsumedData SaveIov(const QuicIOVector& data) { | 148 QuicConsumedData SaveIov(const QuicIOVector& data) { |
158 const iovec* iov = data.iov; | 149 const iovec* iov = data.iov; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 EXPECT_CALL(visitor_, | 192 EXPECT_CALL(visitor_, |
202 OnHeaders(stream_id, !kHasPriority, | 193 OnHeaders(stream_id, !kHasPriority, |
203 /*priority=*/0, | 194 /*priority=*/0, |
204 /*parent_stream_id=*/0, | 195 /*parent_stream_id=*/0, |
205 /*exclusive=*/false, fin, kFrameComplete)); | 196 /*exclusive=*/false, fin, kFrameComplete)); |
206 } | 197 } |
207 EXPECT_CALL(visitor_, OnControlFrameHeaderData(stream_id, _, _)) | 198 EXPECT_CALL(visitor_, OnControlFrameHeaderData(stream_id, _, _)) |
208 .WillRepeatedly(WithArgs<1, 2>( | 199 .WillRepeatedly(WithArgs<1, 2>( |
209 Invoke(this, &QuicHeadersStreamTest::SaveHeaderData))); | 200 Invoke(this, &QuicHeadersStreamTest::SaveHeaderData))); |
210 if (fin) { | 201 if (fin) { |
211 if (FLAGS_spdy_on_stream_end) { | 202 EXPECT_CALL(visitor_, OnStreamEnd(stream_id)); |
212 EXPECT_CALL(visitor_, OnStreamEnd(stream_id)); | |
213 } else { | |
214 EXPECT_CALL(visitor_, OnStreamFrameData(stream_id, nullptr, 0, true)); | |
215 } | |
216 } | 203 } |
217 framer_->ProcessInput(saved_data_.data(), saved_data_.length()); | 204 framer_->ProcessInput(saved_data_.data(), saved_data_.length()); |
218 EXPECT_FALSE(framer_->HasError()) | 205 EXPECT_FALSE(framer_->HasError()) |
219 << SpdyFramer::ErrorCodeToString(framer_->error_code()); | 206 << SpdyFramer::ErrorCodeToString(framer_->error_code()); |
220 | 207 |
221 CheckHeaders(); | 208 CheckHeaders(); |
222 saved_data_.clear(); | 209 saved_data_.clear(); |
223 } | 210 } |
224 | 211 |
225 void CheckHeaders() { | 212 void CheckHeaders() { |
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
591 } | 578 } |
592 | 579 |
593 TEST_P(QuicHeadersStreamTest, NoConnectionLevelFlowControl) { | 580 TEST_P(QuicHeadersStreamTest, NoConnectionLevelFlowControl) { |
594 EXPECT_FALSE(ReliableQuicStreamPeer::StreamContributesToConnectionFlowControl( | 581 EXPECT_FALSE(ReliableQuicStreamPeer::StreamContributesToConnectionFlowControl( |
595 headers_stream_)); | 582 headers_stream_)); |
596 } | 583 } |
597 | 584 |
598 } // namespace | 585 } // namespace |
599 } // namespace test | 586 } // namespace test |
600 } // namespace net | 587 } // namespace net |
OLD | NEW |