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_session_peer.h" | 10 #include "net/quic/test_tools/quic_session_peer.h" |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 uint32 max_age, | 69 uint32 max_age, |
70 uint16 port, | 70 uint16 port, |
71 StringPiece protocol_id, | 71 StringPiece protocol_id, |
72 StringPiece host, | 72 StringPiece host, |
73 StringPiece origin)); | 73 StringPiece origin)); |
74 MOCK_METHOD2(OnUnknownFrame, bool(SpdyStreamId stream_id, int frame_type)); | 74 MOCK_METHOD2(OnUnknownFrame, bool(SpdyStreamId stream_id, int frame_type)); |
75 }; | 75 }; |
76 | 76 |
77 // Run all tests with each version, and client or server | 77 // Run all tests with each version, and client or server |
78 struct TestParams { | 78 struct TestParams { |
79 TestParams(QuicVersion version, bool is_server) | 79 TestParams(QuicVersion version, Perspective perspective) |
80 : version(version), is_server(is_server) {} | 80 : version(version), perspective(perspective) {} |
81 | 81 |
82 friend ostream& operator<<(ostream& os, const TestParams& p) { | 82 friend ostream& operator<<(ostream& os, const TestParams& p) { |
83 os << "{ version: " << QuicVersionToString(p.version); | 83 os << "{ version: " << QuicVersionToString(p.version); |
84 os << ", is_server: " << p.is_server << " }"; | 84 os << ", perspective: " << p.perspective << " }"; |
85 return os; | 85 return os; |
86 } | 86 } |
87 | 87 |
88 QuicVersion version; | 88 QuicVersion version; |
89 bool is_server; | 89 Perspective perspective; |
90 }; | 90 }; |
91 | 91 |
92 // Constructs various test permutations. | 92 // Constructs various test permutations. |
93 vector<TestParams> GetTestParams() { | 93 vector<TestParams> GetTestParams() { |
94 vector<TestParams> params; | 94 vector<TestParams> params; |
95 QuicVersionVector all_supported_versions = QuicSupportedVersions(); | 95 QuicVersionVector all_supported_versions = QuicSupportedVersions(); |
96 for (const QuicVersion version : all_supported_versions) { | 96 for (const QuicVersion version : all_supported_versions) { |
97 params.push_back(TestParams(version, false)); | 97 params.push_back(TestParams(version, Perspective::IS_CLIENT)); |
98 params.push_back(TestParams(version, true)); | 98 params.push_back(TestParams(version, Perspective::IS_SERVER)); |
99 } | 99 } |
100 return params; | 100 return params; |
101 } | 101 } |
102 | 102 |
103 class QuicHeadersStreamTest : public ::testing::TestWithParam<TestParams> { | 103 class QuicHeadersStreamTest : public ::testing::TestWithParam<TestParams> { |
104 public: | 104 public: |
105 QuicHeadersStreamTest() | 105 QuicHeadersStreamTest() |
106 : connection_(new StrictMock<MockConnection>(is_server(), GetVersion())), | 106 : connection_( |
| 107 new StrictMock<MockConnection>(perspective(), GetVersion())), |
107 session_(connection_), | 108 session_(connection_), |
108 headers_stream_(QuicSessionPeer::GetHeadersStream(&session_)), | 109 headers_stream_(QuicSessionPeer::GetHeadersStream(&session_)), |
109 body_("hello world"), | 110 body_("hello world"), |
110 framer_(version() > QUIC_VERSION_23 ? SPDY4 : SPDY3) { | 111 framer_(version() > QUIC_VERSION_23 ? SPDY4 : SPDY3) { |
111 headers_[":version"] = "HTTP/1.1"; | 112 headers_[":version"] = "HTTP/1.1"; |
112 headers_[":status"] = "200 Ok"; | 113 headers_[":status"] = "200 Ok"; |
113 headers_["content-length"] = "11"; | 114 headers_["content-length"] = "11"; |
114 framer_.set_visitor(&visitor_); | 115 framer_.set_visitor(&visitor_); |
115 EXPECT_EQ(version(), session_.connection()->version()); | 116 EXPECT_EQ(version(), session_.connection()->version()); |
116 EXPECT_TRUE(headers_stream_ != nullptr); | 117 EXPECT_TRUE(headers_stream_ != nullptr); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 void CheckHeaders() { | 191 void CheckHeaders() { |
191 SpdyHeaderBlock headers; | 192 SpdyHeaderBlock headers; |
192 EXPECT_EQ(saved_header_data_.length(), | 193 EXPECT_EQ(saved_header_data_.length(), |
193 framer_.ParseHeaderBlockInBuffer(saved_header_data_.data(), | 194 framer_.ParseHeaderBlockInBuffer(saved_header_data_.data(), |
194 saved_header_data_.length(), | 195 saved_header_data_.length(), |
195 &headers)); | 196 &headers)); |
196 EXPECT_EQ(headers_, headers); | 197 EXPECT_EQ(headers_, headers); |
197 saved_header_data_.clear(); | 198 saved_header_data_.clear(); |
198 } | 199 } |
199 | 200 |
200 bool is_server() { return GetParam().is_server; } | 201 Perspective perspective() { return GetParam().perspective; } |
201 | 202 |
202 QuicVersion version() { return GetParam().version; } | 203 QuicVersion version() { return GetParam().version; } |
203 | 204 |
204 QuicVersionVector GetVersion() { | 205 QuicVersionVector GetVersion() { |
205 QuicVersionVector versions; | 206 QuicVersionVector versions; |
206 versions.push_back(version()); | 207 versions.push_back(version()); |
207 return versions; | 208 return versions; |
208 } | 209 } |
209 | 210 |
210 void CloseConnection() { | 211 void CloseConnection() { |
(...skipping 26 matching lines...) Expand all Loading... |
237 | 238 |
238 TEST_P(QuicHeadersStreamTest, EffectivePriority) { | 239 TEST_P(QuicHeadersStreamTest, EffectivePriority) { |
239 EXPECT_EQ(0u, headers_stream_->EffectivePriority()); | 240 EXPECT_EQ(0u, headers_stream_->EffectivePriority()); |
240 } | 241 } |
241 | 242 |
242 TEST_P(QuicHeadersStreamTest, WriteHeaders) { | 243 TEST_P(QuicHeadersStreamTest, WriteHeaders) { |
243 for (QuicStreamId stream_id = kClientDataStreamId1; | 244 for (QuicStreamId stream_id = kClientDataStreamId1; |
244 stream_id < kClientDataStreamId3; stream_id += 2) { | 245 stream_id < kClientDataStreamId3; stream_id += 2) { |
245 for (int count = 0; count < 2; ++count) { | 246 for (int count = 0; count < 2; ++count) { |
246 bool fin = (count == 0); | 247 bool fin = (count == 0); |
247 if (is_server()) { | 248 if (perspective() == Perspective::IS_SERVER) { |
248 WriteHeadersAndExpectSynReply(stream_id, fin); | 249 WriteHeadersAndExpectSynReply(stream_id, fin); |
249 } else { | 250 } else { |
250 for (QuicPriority priority = 0; priority < 7; ++priority) { | 251 for (QuicPriority priority = 0; priority < 7; ++priority) { |
251 // TODO(rch): implement priorities correctly. | 252 // TODO(rch): implement priorities correctly. |
252 WriteHeadersAndExpectSynStream(stream_id, fin, 0); | 253 WriteHeadersAndExpectSynStream(stream_id, fin, 0); |
253 } | 254 } |
254 } | 255 } |
255 } | 256 } |
256 } | 257 } |
257 } | 258 } |
258 | 259 |
259 TEST_P(QuicHeadersStreamTest, ProcessRawData) { | 260 TEST_P(QuicHeadersStreamTest, ProcessRawData) { |
260 for (QuicStreamId stream_id = kClientDataStreamId1; | 261 for (QuicStreamId stream_id = kClientDataStreamId1; |
261 stream_id < kClientDataStreamId3; stream_id += 2) { | 262 stream_id < kClientDataStreamId3; stream_id += 2) { |
262 for (int count = 0; count < 2; ++count) { | 263 for (int count = 0; count < 2; ++count) { |
263 bool fin = (count == 0); | 264 bool fin = (count == 0); |
264 for (QuicPriority priority = 0; priority < 7; ++priority) { | 265 for (QuicPriority priority = 0; priority < 7; ++priority) { |
265 // Replace with "WriteHeadersAndSaveData" | 266 // Replace with "WriteHeadersAndSaveData" |
266 scoped_ptr<SpdySerializedFrame> frame; | 267 scoped_ptr<SpdySerializedFrame> frame; |
267 if (is_server()) { | 268 if (perspective() == Perspective::IS_SERVER) { |
268 if (version() > QUIC_VERSION_23) { | 269 if (version() > QUIC_VERSION_23) { |
269 SpdyHeadersIR headers_frame(stream_id); | 270 SpdyHeadersIR headers_frame(stream_id); |
270 headers_frame.set_name_value_block(headers_); | 271 headers_frame.set_name_value_block(headers_); |
271 headers_frame.set_fin(fin); | 272 headers_frame.set_fin(fin); |
272 headers_frame.set_has_priority(true); | 273 headers_frame.set_has_priority(true); |
273 frame.reset(framer_.SerializeFrame(headers_frame)); | 274 frame.reset(framer_.SerializeFrame(headers_frame)); |
274 } else { | 275 } else { |
275 SpdySynStreamIR syn_stream(stream_id); | 276 SpdySynStreamIR syn_stream(stream_id); |
276 syn_stream.set_name_value_block(headers_); | 277 syn_stream.set_name_value_block(headers_); |
277 syn_stream.set_fin(fin); | 278 syn_stream.set_fin(fin); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 headers_["key0"] = string(1 << 13, '.'); | 312 headers_["key0"] = string(1 << 13, '.'); |
312 headers_["key1"] = string(1 << 13, '.'); | 313 headers_["key1"] = string(1 << 13, '.'); |
313 headers_["key2"] = string(1 << 13, '.'); | 314 headers_["key2"] = string(1 << 13, '.'); |
314 for (QuicStreamId stream_id = kClientDataStreamId1; | 315 for (QuicStreamId stream_id = kClientDataStreamId1; |
315 stream_id < kClientDataStreamId3; stream_id += 2) { | 316 stream_id < kClientDataStreamId3; stream_id += 2) { |
316 for (int count = 0; count < 2; ++count) { | 317 for (int count = 0; count < 2; ++count) { |
317 bool fin = (count == 0); | 318 bool fin = (count == 0); |
318 for (QuicPriority priority = 0; priority < 7; ++priority) { | 319 for (QuicPriority priority = 0; priority < 7; ++priority) { |
319 // Replace with "WriteHeadersAndSaveData" | 320 // Replace with "WriteHeadersAndSaveData" |
320 scoped_ptr<SpdySerializedFrame> frame; | 321 scoped_ptr<SpdySerializedFrame> frame; |
321 if (is_server()) { | 322 if (perspective() == Perspective::IS_SERVER) { |
322 if (version() > QUIC_VERSION_23) { | 323 if (version() > QUIC_VERSION_23) { |
323 SpdyHeadersIR headers_frame(stream_id); | 324 SpdyHeadersIR headers_frame(stream_id); |
324 headers_frame.set_name_value_block(headers_); | 325 headers_frame.set_name_value_block(headers_); |
325 headers_frame.set_fin(fin); | 326 headers_frame.set_fin(fin); |
326 headers_frame.set_has_priority(true); | 327 headers_frame.set_has_priority(true); |
327 frame.reset(framer_.SerializeFrame(headers_frame)); | 328 frame.reset(framer_.SerializeFrame(headers_frame)); |
328 } else { | 329 } else { |
329 SpdySynStreamIR syn_stream(stream_id); | 330 SpdySynStreamIR syn_stream(stream_id); |
330 syn_stream.set_name_value_block(headers_); | 331 syn_stream.set_name_value_block(headers_); |
331 syn_stream.set_fin(fin); | 332 syn_stream.set_fin(fin); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
457 } | 458 } |
458 | 459 |
459 TEST_P(QuicHeadersStreamTest, NoConnectionLevelFlowControl) { | 460 TEST_P(QuicHeadersStreamTest, NoConnectionLevelFlowControl) { |
460 EXPECT_FALSE(ReliableQuicStreamPeer::StreamContributesToConnectionFlowControl( | 461 EXPECT_FALSE(ReliableQuicStreamPeer::StreamContributesToConnectionFlowControl( |
461 headers_stream_)); | 462 headers_stream_)); |
462 } | 463 } |
463 | 464 |
464 } // namespace | 465 } // namespace |
465 } // namespace test | 466 } // namespace test |
466 } // namespace net | 467 } // namespace net |
OLD | NEW |