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/buffered_spdy_framer.h" | 5 #include "net/spdy/buffered_spdy_framer.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "net/spdy/spdy_test_util_common.h" | 10 #include "net/spdy/spdy_test_util_common.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 | 43 |
44 void OnSynStream(SpdyStreamId stream_id, | 44 void OnSynStream(SpdyStreamId stream_id, |
45 SpdyStreamId associated_stream_id, | 45 SpdyStreamId associated_stream_id, |
46 SpdyPriority priority, | 46 SpdyPriority priority, |
47 bool fin, | 47 bool fin, |
48 bool unidirectional, | 48 bool unidirectional, |
49 const SpdyHeaderBlock& headers) override { | 49 const SpdyHeaderBlock& headers) override { |
50 header_stream_id_ = stream_id; | 50 header_stream_id_ = stream_id; |
51 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream); | 51 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream); |
52 syn_frame_count_++; | 52 syn_frame_count_++; |
53 headers_ = headers; | 53 headers_ = headers.Clone(); |
54 } | 54 } |
55 | 55 |
56 void OnSynReply(SpdyStreamId stream_id, | 56 void OnSynReply(SpdyStreamId stream_id, |
57 bool fin, | 57 bool fin, |
58 const SpdyHeaderBlock& headers) override { | 58 const SpdyHeaderBlock& headers) override { |
59 header_stream_id_ = stream_id; | 59 header_stream_id_ = stream_id; |
60 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream); | 60 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream); |
61 syn_reply_frame_count_++; | 61 syn_reply_frame_count_++; |
62 headers_ = headers; | 62 headers_ = headers.Clone(); |
63 } | 63 } |
64 | 64 |
65 void OnHeaders(SpdyStreamId stream_id, | 65 void OnHeaders(SpdyStreamId stream_id, |
66 bool has_priority, | 66 bool has_priority, |
67 int weight, | 67 int weight, |
68 SpdyStreamId parent_stream_id, | 68 SpdyStreamId parent_stream_id, |
69 bool exclusive, | 69 bool exclusive, |
70 bool fin, | 70 bool fin, |
71 const SpdyHeaderBlock& headers) override { | 71 const SpdyHeaderBlock& headers) override { |
72 header_stream_id_ = stream_id; | 72 header_stream_id_ = stream_id; |
73 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream); | 73 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream); |
74 headers_frame_count_++; | 74 headers_frame_count_++; |
75 headers_ = headers; | 75 headers_ = headers.Clone(); |
76 } | 76 } |
77 | 77 |
78 void OnDataFrameHeader(SpdyStreamId stream_id, | 78 void OnDataFrameHeader(SpdyStreamId stream_id, |
79 size_t length, | 79 size_t length, |
80 bool fin) override { | 80 bool fin) override { |
81 ADD_FAILURE() << "Unexpected OnDataFrameHeader call."; | 81 ADD_FAILURE() << "Unexpected OnDataFrameHeader call."; |
82 } | 82 } |
83 | 83 |
84 void OnStreamFrameData(SpdyStreamId stream_id, | 84 void OnStreamFrameData(SpdyStreamId stream_id, |
85 const char* data, | 85 const char* data, |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 void OnWindowUpdate(SpdyStreamId stream_id, int delta_window_size) override {} | 125 void OnWindowUpdate(SpdyStreamId stream_id, int delta_window_size) override {} |
126 | 126 |
127 void OnPushPromise(SpdyStreamId stream_id, | 127 void OnPushPromise(SpdyStreamId stream_id, |
128 SpdyStreamId promised_stream_id, | 128 SpdyStreamId promised_stream_id, |
129 const SpdyHeaderBlock& headers) override { | 129 const SpdyHeaderBlock& headers) override { |
130 header_stream_id_ = stream_id; | 130 header_stream_id_ = stream_id; |
131 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream); | 131 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream); |
132 push_promise_frame_count_++; | 132 push_promise_frame_count_++; |
133 promised_stream_id_ = promised_stream_id; | 133 promised_stream_id_ = promised_stream_id; |
134 EXPECT_NE(promised_stream_id_, SpdyFramer::kInvalidStream); | 134 EXPECT_NE(promised_stream_id_, SpdyFramer::kInvalidStream); |
135 headers_ = headers; | 135 headers_ = headers.Clone(); |
136 } | 136 } |
137 | 137 |
138 void OnAltSvc(SpdyStreamId stream_id, | 138 void OnAltSvc(SpdyStreamId stream_id, |
139 base::StringPiece origin, | 139 base::StringPiece origin, |
140 const SpdyAltSvcWireFormat::AlternativeServiceVector& | 140 const SpdyAltSvcWireFormat::AlternativeServiceVector& |
141 altsvc_vector) override { | 141 altsvc_vector) override { |
142 altsvc_count_++; | 142 altsvc_count_++; |
143 altsvc_stream_id_ = stream_id; | 143 altsvc_stream_id_ = stream_id; |
144 origin.CopyToString(&altsvc_origin_); | 144 origin.CopyToString(&altsvc_origin_); |
145 altsvc_vector_ = altsvc_vector; | 145 altsvc_vector_ = altsvc_vector; |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 return; | 237 return; |
238 } | 238 } |
239 SpdyHeaderBlock headers; | 239 SpdyHeaderBlock headers; |
240 headers["aa"] = "vv"; | 240 headers["aa"] = "vv"; |
241 headers["bb"] = "ww"; | 241 headers["bb"] = "ww"; |
242 BufferedSpdyFramer framer(spdy_version()); | 242 BufferedSpdyFramer framer(spdy_version()); |
243 std::unique_ptr<SpdySerializedFrame> control_frame( | 243 std::unique_ptr<SpdySerializedFrame> control_frame( |
244 framer.CreateSynStream(1, // stream_id | 244 framer.CreateSynStream(1, // stream_id |
245 0, // associated_stream_id | 245 0, // associated_stream_id |
246 1, // priority | 246 1, // priority |
247 CONTROL_FLAG_NONE, headers)); | 247 CONTROL_FLAG_NONE, headers.Clone())); |
248 EXPECT_TRUE(control_frame.get() != NULL); | 248 EXPECT_TRUE(control_frame.get() != NULL); |
249 | 249 |
250 TestBufferedSpdyVisitor visitor(spdy_version()); | 250 TestBufferedSpdyVisitor visitor(spdy_version()); |
251 visitor.SimulateInFramer( | 251 visitor.SimulateInFramer( |
252 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 252 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
253 control_frame.get()->size()); | 253 control_frame.get()->size()); |
254 EXPECT_EQ(0, visitor.error_count_); | 254 EXPECT_EQ(0, visitor.error_count_); |
255 EXPECT_EQ(1, visitor.syn_frame_count_); | 255 EXPECT_EQ(1, visitor.syn_frame_count_); |
256 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 256 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
257 EXPECT_EQ(0, visitor.headers_frame_count_); | 257 EXPECT_EQ(0, visitor.headers_frame_count_); |
(...skipping 30 matching lines...) Expand all Loading... |
288 if (spdy_version() > SPDY3) { | 288 if (spdy_version() > SPDY3) { |
289 // SYN_REPLY not supported in SPDY>3. | 289 // SYN_REPLY not supported in SPDY>3. |
290 return; | 290 return; |
291 } | 291 } |
292 SpdyHeaderBlock headers; | 292 SpdyHeaderBlock headers; |
293 headers["alpha"] = "beta"; | 293 headers["alpha"] = "beta"; |
294 headers["gamma"] = "delta"; | 294 headers["gamma"] = "delta"; |
295 BufferedSpdyFramer framer(spdy_version()); | 295 BufferedSpdyFramer framer(spdy_version()); |
296 std::unique_ptr<SpdySerializedFrame> control_frame( | 296 std::unique_ptr<SpdySerializedFrame> control_frame( |
297 framer.CreateSynReply(1, // stream_id | 297 framer.CreateSynReply(1, // stream_id |
298 CONTROL_FLAG_NONE, headers)); | 298 CONTROL_FLAG_NONE, headers.Clone())); |
299 EXPECT_TRUE(control_frame.get() != NULL); | 299 EXPECT_TRUE(control_frame.get() != NULL); |
300 | 300 |
301 TestBufferedSpdyVisitor visitor(spdy_version()); | 301 TestBufferedSpdyVisitor visitor(spdy_version()); |
302 visitor.SimulateInFramer( | 302 visitor.SimulateInFramer( |
303 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 303 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
304 control_frame.get()->size()); | 304 control_frame.get()->size()); |
305 EXPECT_EQ(0, visitor.error_count_); | 305 EXPECT_EQ(0, visitor.error_count_); |
306 EXPECT_EQ(0, visitor.syn_frame_count_); | 306 EXPECT_EQ(0, visitor.syn_frame_count_); |
307 EXPECT_EQ(0, visitor.push_promise_frame_count_); | 307 EXPECT_EQ(0, visitor.push_promise_frame_count_); |
308 if (spdy_version() < HTTP2) { | 308 if (spdy_version() < HTTP2) { |
309 EXPECT_EQ(1, visitor.syn_reply_frame_count_); | 309 EXPECT_EQ(1, visitor.syn_reply_frame_count_); |
310 EXPECT_EQ(0, visitor.headers_frame_count_); | 310 EXPECT_EQ(0, visitor.headers_frame_count_); |
311 } else { | 311 } else { |
312 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 312 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
313 EXPECT_EQ(1, visitor.headers_frame_count_); | 313 EXPECT_EQ(1, visitor.headers_frame_count_); |
314 } | 314 } |
315 EXPECT_EQ(headers, visitor.headers_); | 315 EXPECT_EQ(headers, visitor.headers_); |
316 } | 316 } |
317 | 317 |
318 TEST_P(BufferedSpdyFramerTest, ReadHeadersHeaderBlock) { | 318 TEST_P(BufferedSpdyFramerTest, ReadHeadersHeaderBlock) { |
319 SpdyHeaderBlock headers; | 319 SpdyHeaderBlock headers; |
320 headers["alpha"] = "beta"; | 320 headers["alpha"] = "beta"; |
321 headers["gamma"] = "delta"; | 321 headers["gamma"] = "delta"; |
322 BufferedSpdyFramer framer(spdy_version()); | 322 BufferedSpdyFramer framer(spdy_version()); |
323 std::unique_ptr<SpdySerializedFrame> control_frame( | 323 std::unique_ptr<SpdySerializedFrame> control_frame( |
324 framer.CreateHeaders(1, // stream_id | 324 framer.CreateHeaders(1, // stream_id |
325 CONTROL_FLAG_NONE, | 325 CONTROL_FLAG_NONE, |
326 255, // weight | 326 255, // weight |
327 headers)); | 327 headers.Clone())); |
328 EXPECT_TRUE(control_frame.get() != NULL); | 328 EXPECT_TRUE(control_frame.get() != NULL); |
329 | 329 |
330 TestBufferedSpdyVisitor visitor(spdy_version()); | 330 TestBufferedSpdyVisitor visitor(spdy_version()); |
331 visitor.SimulateInFramer( | 331 visitor.SimulateInFramer( |
332 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 332 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
333 control_frame.get()->size()); | 333 control_frame.get()->size()); |
334 EXPECT_EQ(0, visitor.error_count_); | 334 EXPECT_EQ(0, visitor.error_count_); |
335 EXPECT_EQ(0, visitor.syn_frame_count_); | 335 EXPECT_EQ(0, visitor.syn_frame_count_); |
336 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 336 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
337 EXPECT_EQ(1, visitor.headers_frame_count_); | 337 EXPECT_EQ(1, visitor.headers_frame_count_); |
338 EXPECT_EQ(0, visitor.push_promise_frame_count_); | 338 EXPECT_EQ(0, visitor.push_promise_frame_count_); |
339 EXPECT_EQ(headers, visitor.headers_); | 339 EXPECT_EQ(headers, visitor.headers_); |
340 } | 340 } |
341 | 341 |
342 TEST_P(BufferedSpdyFramerTest, ReadPushPromiseHeaderBlock) { | 342 TEST_P(BufferedSpdyFramerTest, ReadPushPromiseHeaderBlock) { |
343 if (spdy_version() < HTTP2) | 343 if (spdy_version() < HTTP2) |
344 return; | 344 return; |
345 SpdyHeaderBlock headers; | 345 SpdyHeaderBlock headers; |
346 headers["alpha"] = "beta"; | 346 headers["alpha"] = "beta"; |
347 headers["gamma"] = "delta"; | 347 headers["gamma"] = "delta"; |
348 BufferedSpdyFramer framer(spdy_version()); | 348 BufferedSpdyFramer framer(spdy_version()); |
349 std::unique_ptr<SpdySerializedFrame> control_frame( | 349 std::unique_ptr<SpdySerializedFrame> control_frame( |
350 framer.CreatePushPromise(1, 2, headers)); | 350 framer.CreatePushPromise(1, 2, headers.Clone())); |
351 EXPECT_TRUE(control_frame.get() != NULL); | 351 EXPECT_TRUE(control_frame.get() != NULL); |
352 | 352 |
353 TestBufferedSpdyVisitor visitor(spdy_version()); | 353 TestBufferedSpdyVisitor visitor(spdy_version()); |
354 visitor.SimulateInFramer( | 354 visitor.SimulateInFramer( |
355 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 355 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
356 control_frame.get()->size()); | 356 control_frame.get()->size()); |
357 EXPECT_EQ(0, visitor.error_count_); | 357 EXPECT_EQ(0, visitor.error_count_); |
358 EXPECT_EQ(0, visitor.syn_frame_count_); | 358 EXPECT_EQ(0, visitor.syn_frame_count_); |
359 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 359 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
360 EXPECT_EQ(0, visitor.headers_frame_count_); | 360 EXPECT_EQ(0, visitor.headers_frame_count_); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 altsvc_frame.size()); | 403 altsvc_frame.size()); |
404 EXPECT_EQ(0, visitor.error_count_); | 404 EXPECT_EQ(0, visitor.error_count_); |
405 EXPECT_EQ(1, visitor.altsvc_count_); | 405 EXPECT_EQ(1, visitor.altsvc_count_); |
406 EXPECT_EQ(altsvc_stream_id, visitor.altsvc_stream_id_); | 406 EXPECT_EQ(altsvc_stream_id, visitor.altsvc_stream_id_); |
407 EXPECT_EQ(altsvc_origin, visitor.altsvc_origin_); | 407 EXPECT_EQ(altsvc_origin, visitor.altsvc_origin_); |
408 ASSERT_EQ(1u, visitor.altsvc_vector_.size()); | 408 ASSERT_EQ(1u, visitor.altsvc_vector_.size()); |
409 EXPECT_EQ(alternative_service, visitor.altsvc_vector_[0]); | 409 EXPECT_EQ(alternative_service, visitor.altsvc_vector_[0]); |
410 } | 410 } |
411 | 411 |
412 } // namespace net | 412 } // namespace net |
OLD | NEW |