| 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 |