| 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 "net/spdy/spdy_test_util_common.h" | 7 #include "net/spdy/spdy_test_util_common.h" |
| 8 #include "testing/platform_test.h" | 8 #include "testing/platform_test.h" |
| 9 | 9 |
| 10 namespace net { | 10 namespace net { |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 | 111 |
| 112 void OnGoAway(SpdyStreamId last_accepted_stream_id, | 112 void OnGoAway(SpdyStreamId last_accepted_stream_id, |
| 113 SpdyGoAwayStatus status, | 113 SpdyGoAwayStatus status, |
| 114 StringPiece debug_data) override { | 114 StringPiece debug_data) override { |
| 115 goaway_count_++; | 115 goaway_count_++; |
| 116 goaway_last_accepted_stream_id_ = last_accepted_stream_id; | 116 goaway_last_accepted_stream_id_ = last_accepted_stream_id; |
| 117 goaway_status_ = status; | 117 goaway_status_ = status; |
| 118 goaway_debug_data_.assign(debug_data.data(), debug_data.size()); | 118 goaway_debug_data_.assign(debug_data.data(), debug_data.size()); |
| 119 } | 119 } |
| 120 | 120 |
| 121 void OnDataFrameHeader(const SpdyFrame* frame) { | 121 void OnDataFrameHeader(const SpdySerializedFrame* frame) { |
| 122 LOG(FATAL) << "Unexpected OnDataFrameHeader call."; | 122 LOG(FATAL) << "Unexpected OnDataFrameHeader call."; |
| 123 } | 123 } |
| 124 | 124 |
| 125 void OnRstStream(const SpdyFrame& frame) {} | 125 void OnRstStream(const SpdySerializedFrame& frame) {} |
| 126 void OnGoAway(const SpdyFrame& frame) {} | 126 void OnGoAway(const SpdySerializedFrame& frame) {} |
| 127 void OnPing(const SpdyFrame& frame) {} | 127 void OnPing(const SpdySerializedFrame& frame) {} |
| 128 void OnWindowUpdate(SpdyStreamId stream_id, int delta_window_size) override {} | 128 void OnWindowUpdate(SpdyStreamId stream_id, int delta_window_size) override {} |
| 129 | 129 |
| 130 void OnPushPromise(SpdyStreamId stream_id, | 130 void OnPushPromise(SpdyStreamId stream_id, |
| 131 SpdyStreamId promised_stream_id, | 131 SpdyStreamId promised_stream_id, |
| 132 const SpdyHeaderBlock& headers) override { | 132 const SpdyHeaderBlock& headers) override { |
| 133 header_stream_id_ = stream_id; | 133 header_stream_id_ = stream_id; |
| 134 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream); | 134 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream); |
| 135 push_promise_frame_count_++; | 135 push_promise_frame_count_++; |
| 136 promised_stream_id_ = promised_stream_id; | 136 promised_stream_id_ = promised_stream_id; |
| 137 EXPECT_NE(promised_stream_id_, SpdyFramer::kInvalidStream); | 137 EXPECT_NE(promised_stream_id_, SpdyFramer::kInvalidStream); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 INSTANTIATE_TEST_CASE_P(NextProto, | 201 INSTANTIATE_TEST_CASE_P(NextProto, |
| 202 BufferedSpdyFramerTest, | 202 BufferedSpdyFramerTest, |
| 203 testing::Values(kProtoSPDY31, | 203 testing::Values(kProtoSPDY31, |
| 204 kProtoHTTP2)); | 204 kProtoHTTP2)); |
| 205 | 205 |
| 206 TEST_P(BufferedSpdyFramerTest, OnSetting) { | 206 TEST_P(BufferedSpdyFramerTest, OnSetting) { |
| 207 SpdyFramer framer(spdy_version()); | 207 SpdyFramer framer(spdy_version()); |
| 208 SpdySettingsIR settings_ir; | 208 SpdySettingsIR settings_ir; |
| 209 settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, false, false, 2); | 209 settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, false, false, 2); |
| 210 settings_ir.AddSetting(SETTINGS_MAX_CONCURRENT_STREAMS, false, false, 3); | 210 settings_ir.AddSetting(SETTINGS_MAX_CONCURRENT_STREAMS, false, false, 3); |
| 211 scoped_ptr<SpdyFrame> control_frame(framer.SerializeSettings(settings_ir)); | 211 SpdySerializedFrame control_frame(framer.SerializeSettings(settings_ir)); |
| 212 TestBufferedSpdyVisitor visitor(spdy_version()); | 212 TestBufferedSpdyVisitor visitor(spdy_version()); |
| 213 | 213 |
| 214 visitor.SimulateInFramer( | 214 visitor.SimulateInFramer( |
| 215 reinterpret_cast<unsigned char*>(control_frame->data()), | 215 reinterpret_cast<unsigned char*>(control_frame.data()), |
| 216 control_frame->size()); | 216 control_frame.size()); |
| 217 EXPECT_EQ(0, visitor.error_count_); | 217 EXPECT_EQ(0, visitor.error_count_); |
| 218 EXPECT_EQ(2, visitor.setting_count_); | 218 EXPECT_EQ(2, visitor.setting_count_); |
| 219 } | 219 } |
| 220 | 220 |
| 221 TEST_P(BufferedSpdyFramerTest, ReadSynStreamHeaderBlock) { | 221 TEST_P(BufferedSpdyFramerTest, ReadSynStreamHeaderBlock) { |
| 222 if (spdy_version() > SPDY3) { | 222 if (spdy_version() > SPDY3) { |
| 223 // SYN_STREAM not supported in SPDY>3. | 223 // SYN_STREAM not supported in SPDY>3. |
| 224 return; | 224 return; |
| 225 } | 225 } |
| 226 SpdyHeaderBlock headers; | 226 SpdyHeaderBlock headers; |
| 227 headers["aa"] = "vv"; | 227 headers["aa"] = "vv"; |
| 228 headers["bb"] = "ww"; | 228 headers["bb"] = "ww"; |
| 229 BufferedSpdyFramer framer(spdy_version()); | 229 BufferedSpdyFramer framer(spdy_version()); |
| 230 scoped_ptr<SpdyFrame> control_frame( | 230 scoped_ptr<SpdySerializedFrame> control_frame( |
| 231 framer.CreateSynStream(1, // stream_id | 231 framer.CreateSynStream(1, // stream_id |
| 232 0, // associated_stream_id | 232 0, // associated_stream_id |
| 233 1, // priority | 233 1, // priority |
| 234 CONTROL_FLAG_NONE, | 234 CONTROL_FLAG_NONE, &headers)); |
| 235 &headers)); | |
| 236 EXPECT_TRUE(control_frame.get() != NULL); | 235 EXPECT_TRUE(control_frame.get() != NULL); |
| 237 | 236 |
| 238 TestBufferedSpdyVisitor visitor(spdy_version()); | 237 TestBufferedSpdyVisitor visitor(spdy_version()); |
| 239 visitor.SimulateInFramer( | 238 visitor.SimulateInFramer( |
| 240 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 239 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
| 241 control_frame.get()->size()); | 240 control_frame.get()->size()); |
| 242 EXPECT_EQ(0, visitor.error_count_); | 241 EXPECT_EQ(0, visitor.error_count_); |
| 243 EXPECT_EQ(1, visitor.syn_frame_count_); | 242 EXPECT_EQ(1, visitor.syn_frame_count_); |
| 244 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 243 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
| 245 EXPECT_EQ(0, visitor.headers_frame_count_); | 244 EXPECT_EQ(0, visitor.headers_frame_count_); |
| 246 EXPECT_EQ(0, visitor.push_promise_frame_count_); | 245 EXPECT_EQ(0, visitor.push_promise_frame_count_); |
| 247 EXPECT_EQ(headers, visitor.headers_); | 246 EXPECT_EQ(headers, visitor.headers_); |
| 248 } | 247 } |
| 249 | 248 |
| 250 TEST_P(BufferedSpdyFramerTest, ReadSynReplyHeaderBlock) { | 249 TEST_P(BufferedSpdyFramerTest, ReadSynReplyHeaderBlock) { |
| 251 if (spdy_version() > SPDY3) { | 250 if (spdy_version() > SPDY3) { |
| 252 // SYN_REPLY not supported in SPDY>3. | 251 // SYN_REPLY not supported in SPDY>3. |
| 253 return; | 252 return; |
| 254 } | 253 } |
| 255 SpdyHeaderBlock headers; | 254 SpdyHeaderBlock headers; |
| 256 headers["alpha"] = "beta"; | 255 headers["alpha"] = "beta"; |
| 257 headers["gamma"] = "delta"; | 256 headers["gamma"] = "delta"; |
| 258 BufferedSpdyFramer framer(spdy_version()); | 257 BufferedSpdyFramer framer(spdy_version()); |
| 259 scoped_ptr<SpdyFrame> control_frame( | 258 scoped_ptr<SpdySerializedFrame> control_frame( |
| 260 framer.CreateSynReply(1, // stream_id | 259 framer.CreateSynReply(1, // stream_id |
| 261 CONTROL_FLAG_NONE, | 260 CONTROL_FLAG_NONE, &headers)); |
| 262 &headers)); | |
| 263 EXPECT_TRUE(control_frame.get() != NULL); | 261 EXPECT_TRUE(control_frame.get() != NULL); |
| 264 | 262 |
| 265 TestBufferedSpdyVisitor visitor(spdy_version()); | 263 TestBufferedSpdyVisitor visitor(spdy_version()); |
| 266 visitor.SimulateInFramer( | 264 visitor.SimulateInFramer( |
| 267 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 265 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
| 268 control_frame.get()->size()); | 266 control_frame.get()->size()); |
| 269 EXPECT_EQ(0, visitor.error_count_); | 267 EXPECT_EQ(0, visitor.error_count_); |
| 270 EXPECT_EQ(0, visitor.syn_frame_count_); | 268 EXPECT_EQ(0, visitor.syn_frame_count_); |
| 271 EXPECT_EQ(0, visitor.push_promise_frame_count_); | 269 EXPECT_EQ(0, visitor.push_promise_frame_count_); |
| 272 if (spdy_version() < HTTP2) { | 270 if (spdy_version() < HTTP2) { |
| 273 EXPECT_EQ(1, visitor.syn_reply_frame_count_); | 271 EXPECT_EQ(1, visitor.syn_reply_frame_count_); |
| 274 EXPECT_EQ(0, visitor.headers_frame_count_); | 272 EXPECT_EQ(0, visitor.headers_frame_count_); |
| 275 } else { | 273 } else { |
| 276 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 274 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
| 277 EXPECT_EQ(1, visitor.headers_frame_count_); | 275 EXPECT_EQ(1, visitor.headers_frame_count_); |
| 278 } | 276 } |
| 279 EXPECT_EQ(headers, visitor.headers_); | 277 EXPECT_EQ(headers, visitor.headers_); |
| 280 } | 278 } |
| 281 | 279 |
| 282 TEST_P(BufferedSpdyFramerTest, ReadHeadersHeaderBlock) { | 280 TEST_P(BufferedSpdyFramerTest, ReadHeadersHeaderBlock) { |
| 283 SpdyHeaderBlock headers; | 281 SpdyHeaderBlock headers; |
| 284 headers["alpha"] = "beta"; | 282 headers["alpha"] = "beta"; |
| 285 headers["gamma"] = "delta"; | 283 headers["gamma"] = "delta"; |
| 286 BufferedSpdyFramer framer(spdy_version()); | 284 BufferedSpdyFramer framer(spdy_version()); |
| 287 scoped_ptr<SpdyFrame> control_frame( | 285 scoped_ptr<SpdySerializedFrame> control_frame( |
| 288 framer.CreateHeaders(1, // stream_id | 286 framer.CreateHeaders(1, // stream_id |
| 289 CONTROL_FLAG_NONE, | 287 CONTROL_FLAG_NONE, |
| 290 0, // priority | 288 0, // priority |
| 291 &headers)); | 289 &headers)); |
| 292 EXPECT_TRUE(control_frame.get() != NULL); | 290 EXPECT_TRUE(control_frame.get() != NULL); |
| 293 | 291 |
| 294 TestBufferedSpdyVisitor visitor(spdy_version()); | 292 TestBufferedSpdyVisitor visitor(spdy_version()); |
| 295 visitor.SimulateInFramer( | 293 visitor.SimulateInFramer( |
| 296 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 294 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
| 297 control_frame.get()->size()); | 295 control_frame.get()->size()); |
| 298 EXPECT_EQ(0, visitor.error_count_); | 296 EXPECT_EQ(0, visitor.error_count_); |
| 299 EXPECT_EQ(0, visitor.syn_frame_count_); | 297 EXPECT_EQ(0, visitor.syn_frame_count_); |
| 300 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 298 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
| 301 EXPECT_EQ(1, visitor.headers_frame_count_); | 299 EXPECT_EQ(1, visitor.headers_frame_count_); |
| 302 EXPECT_EQ(0, visitor.push_promise_frame_count_); | 300 EXPECT_EQ(0, visitor.push_promise_frame_count_); |
| 303 EXPECT_EQ(headers, visitor.headers_); | 301 EXPECT_EQ(headers, visitor.headers_); |
| 304 } | 302 } |
| 305 | 303 |
| 306 TEST_P(BufferedSpdyFramerTest, ReadPushPromiseHeaderBlock) { | 304 TEST_P(BufferedSpdyFramerTest, ReadPushPromiseHeaderBlock) { |
| 307 if (spdy_version() < HTTP2) | 305 if (spdy_version() < HTTP2) |
| 308 return; | 306 return; |
| 309 SpdyHeaderBlock headers; | 307 SpdyHeaderBlock headers; |
| 310 headers["alpha"] = "beta"; | 308 headers["alpha"] = "beta"; |
| 311 headers["gamma"] = "delta"; | 309 headers["gamma"] = "delta"; |
| 312 BufferedSpdyFramer framer(spdy_version()); | 310 BufferedSpdyFramer framer(spdy_version()); |
| 313 scoped_ptr<SpdyFrame> control_frame( | 311 scoped_ptr<SpdySerializedFrame> control_frame( |
| 314 framer.CreatePushPromise(1, 2, &headers)); | 312 framer.CreatePushPromise(1, 2, &headers)); |
| 315 EXPECT_TRUE(control_frame.get() != NULL); | 313 EXPECT_TRUE(control_frame.get() != NULL); |
| 316 | 314 |
| 317 TestBufferedSpdyVisitor visitor(spdy_version()); | 315 TestBufferedSpdyVisitor visitor(spdy_version()); |
| 318 visitor.SimulateInFramer( | 316 visitor.SimulateInFramer( |
| 319 reinterpret_cast<unsigned char*>(control_frame.get()->data()), | 317 reinterpret_cast<unsigned char*>(control_frame.get()->data()), |
| 320 control_frame.get()->size()); | 318 control_frame.get()->size()); |
| 321 EXPECT_EQ(0, visitor.error_count_); | 319 EXPECT_EQ(0, visitor.error_count_); |
| 322 EXPECT_EQ(0, visitor.syn_frame_count_); | 320 EXPECT_EQ(0, visitor.syn_frame_count_); |
| 323 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 321 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
| 324 EXPECT_EQ(0, visitor.headers_frame_count_); | 322 EXPECT_EQ(0, visitor.headers_frame_count_); |
| 325 EXPECT_EQ(1, visitor.push_promise_frame_count_); | 323 EXPECT_EQ(1, visitor.push_promise_frame_count_); |
| 326 EXPECT_EQ(headers, visitor.headers_); | 324 EXPECT_EQ(headers, visitor.headers_); |
| 327 EXPECT_EQ(1u, visitor.header_stream_id_); | 325 EXPECT_EQ(1u, visitor.header_stream_id_); |
| 328 EXPECT_EQ(2u, visitor.promised_stream_id_); | 326 EXPECT_EQ(2u, visitor.promised_stream_id_); |
| 329 } | 327 } |
| 330 | 328 |
| 331 TEST_P(BufferedSpdyFramerTest, GoAwayDebugData) { | 329 TEST_P(BufferedSpdyFramerTest, GoAwayDebugData) { |
| 332 if (spdy_version() < HTTP2) | 330 if (spdy_version() < HTTP2) |
| 333 return; | 331 return; |
| 334 BufferedSpdyFramer framer(spdy_version()); | 332 BufferedSpdyFramer framer(spdy_version()); |
| 335 scoped_ptr<SpdyFrame> goaway_frame( | 333 scoped_ptr<SpdySerializedFrame> goaway_frame( |
| 336 framer.CreateGoAway(2u, GOAWAY_FRAME_SIZE_ERROR, "foo")); | 334 framer.CreateGoAway(2u, GOAWAY_FRAME_SIZE_ERROR, "foo")); |
| 337 | 335 |
| 338 TestBufferedSpdyVisitor visitor(spdy_version()); | 336 TestBufferedSpdyVisitor visitor(spdy_version()); |
| 339 visitor.SimulateInFramer( | 337 visitor.SimulateInFramer( |
| 340 reinterpret_cast<unsigned char*>(goaway_frame.get()->data()), | 338 reinterpret_cast<unsigned char*>(goaway_frame.get()->data()), |
| 341 goaway_frame.get()->size()); | 339 goaway_frame.get()->size()); |
| 342 EXPECT_EQ(0, visitor.error_count_); | 340 EXPECT_EQ(0, visitor.error_count_); |
| 343 EXPECT_EQ(1, visitor.goaway_count_); | 341 EXPECT_EQ(1, visitor.goaway_count_); |
| 344 EXPECT_EQ(2u, visitor.goaway_last_accepted_stream_id_); | 342 EXPECT_EQ(2u, visitor.goaway_last_accepted_stream_id_); |
| 345 EXPECT_EQ(GOAWAY_FRAME_SIZE_ERROR, visitor.goaway_status_); | 343 EXPECT_EQ(GOAWAY_FRAME_SIZE_ERROR, visitor.goaway_status_); |
| 346 EXPECT_EQ("foo", visitor.goaway_debug_data_); | 344 EXPECT_EQ("foo", visitor.goaway_debug_data_); |
| 347 } | 345 } |
| 348 | 346 |
| 349 } // namespace net | 347 } // namespace net |
| OLD | NEW |