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 <algorithm> | 5 #include <algorithm> |
6 #include <iostream> | 6 #include <iostream> |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 3061 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3072 SpdyFramer::SPDY_UNSUPPORTED_VERSION)); | 3072 SpdyFramer::SPDY_UNSUPPORTED_VERSION)); |
3073 EXPECT_STREQ("DECOMPRESS_FAILURE", | 3073 EXPECT_STREQ("DECOMPRESS_FAILURE", |
3074 SpdyFramer::ErrorCodeToString( | 3074 SpdyFramer::ErrorCodeToString( |
3075 SpdyFramer::SPDY_DECOMPRESS_FAILURE)); | 3075 SpdyFramer::SPDY_DECOMPRESS_FAILURE)); |
3076 EXPECT_STREQ("COMPRESS_FAILURE", | 3076 EXPECT_STREQ("COMPRESS_FAILURE", |
3077 SpdyFramer::ErrorCodeToString( | 3077 SpdyFramer::ErrorCodeToString( |
3078 SpdyFramer::SPDY_COMPRESS_FAILURE)); | 3078 SpdyFramer::SPDY_COMPRESS_FAILURE)); |
3079 EXPECT_STREQ("SPDY_INVALID_DATA_FRAME_FLAGS", | 3079 EXPECT_STREQ("SPDY_INVALID_DATA_FRAME_FLAGS", |
3080 SpdyFramer::ErrorCodeToString( | 3080 SpdyFramer::ErrorCodeToString( |
3081 SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS)); | 3081 SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS)); |
| 3082 EXPECT_STREQ("SPDY_INVALID_CONTROL_FRAME_FLAGS", |
| 3083 SpdyFramer::ErrorCodeToString( |
| 3084 SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS)); |
3082 EXPECT_STREQ("UNKNOWN_ERROR", | 3085 EXPECT_STREQ("UNKNOWN_ERROR", |
3083 SpdyFramer::ErrorCodeToString(SpdyFramer::LAST_ERROR)); | 3086 SpdyFramer::ErrorCodeToString(SpdyFramer::LAST_ERROR)); |
3084 } | 3087 } |
3085 | 3088 |
3086 TEST_P(SpdyFramerTest, StatusCodeToStringTest) { | 3089 TEST_P(SpdyFramerTest, StatusCodeToStringTest) { |
3087 EXPECT_STREQ("INVALID", | 3090 EXPECT_STREQ("INVALID", |
3088 SpdyFramer::StatusCodeToString(RST_STREAM_INVALID)); | 3091 SpdyFramer::StatusCodeToString(RST_STREAM_INVALID)); |
3089 EXPECT_STREQ("PROTOCOL_ERROR", | 3092 EXPECT_STREQ("PROTOCOL_ERROR", |
3090 SpdyFramer::StatusCodeToString(RST_STREAM_PROTOCOL_ERROR)); | 3093 SpdyFramer::StatusCodeToString(RST_STREAM_PROTOCOL_ERROR)); |
3091 EXPECT_STREQ("INVALID_STREAM", | 3094 EXPECT_STREQ("INVALID_STREAM", |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3169 SpdyFramer::GetMinimumControlFrameSize(spdy_version_, | 3172 SpdyFramer::GetMinimumControlFrameSize(spdy_version_, |
3170 NUM_CONTROL_FRAME_TYPES)); | 3173 NUM_CONTROL_FRAME_TYPES)); |
3171 } | 3174 } |
3172 | 3175 |
3173 TEST_P(SpdyFramerTest, CatchProbableHttpResponse) { | 3176 TEST_P(SpdyFramerTest, CatchProbableHttpResponse) { |
3174 { | 3177 { |
3175 testing::StrictMock<test::MockVisitor> visitor; | 3178 testing::StrictMock<test::MockVisitor> visitor; |
3176 SpdyFramer framer(spdy_version_); | 3179 SpdyFramer framer(spdy_version_); |
3177 framer.set_visitor(&visitor); | 3180 framer.set_visitor(&visitor); |
3178 | 3181 |
3179 // This won't cause an error at the framer level. It will cause | 3182 EXPECT_CALL(visitor, OnError(_)); |
3180 // flag validation errors at the Visitor::OnDataFrameHeader level. | |
3181 EXPECT_CALL(visitor, OnDataFrameHeader(_)); | |
3182 framer.ProcessInput("HTTP/1.1", 8); | 3183 framer.ProcessInput("HTTP/1.1", 8); |
3183 EXPECT_TRUE(framer.probable_http_response()); | 3184 EXPECT_TRUE(framer.probable_http_response()); |
3184 EXPECT_EQ(SpdyFramer::SPDY_FORWARD_STREAM_FRAME, framer.state()); | 3185 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); |
| 3186 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, framer.error_code()); |
3185 } | 3187 } |
3186 { | 3188 { |
3187 testing::StrictMock<test::MockVisitor> visitor; | 3189 testing::StrictMock<test::MockVisitor> visitor; |
3188 SpdyFramer framer(spdy_version_); | 3190 SpdyFramer framer(spdy_version_); |
3189 framer.set_visitor(&visitor); | 3191 framer.set_visitor(&visitor); |
3190 | 3192 |
3191 // This won't cause an error at the framer level. It will cause | 3193 EXPECT_CALL(visitor, OnError(_)); |
3192 // flag validation errors at the Visitor::OnDataFrameHeader level. | |
3193 EXPECT_CALL(visitor, OnDataFrameHeader(_)); | |
3194 framer.ProcessInput("HTTP/1.0", 8); | 3194 framer.ProcessInput("HTTP/1.0", 8); |
3195 EXPECT_TRUE(framer.probable_http_response()); | 3195 EXPECT_TRUE(framer.probable_http_response()); |
3196 EXPECT_EQ(SpdyFramer::SPDY_FORWARD_STREAM_FRAME, framer.state()); | 3196 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); |
| 3197 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, framer.error_code()); |
3197 } | 3198 } |
3198 } | 3199 } |
3199 | 3200 |
3200 TEST_P(SpdyFramerTest, DataFrameFlags) { | 3201 TEST_P(SpdyFramerTest, DataFrameFlags) { |
3201 for (int flags = 0; flags < 256; ++flags) { | 3202 for (int flags = 0; flags < 256; ++flags) { |
3202 SCOPED_TRACE(testing::Message() << "Flags " << flags); | 3203 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
3203 | 3204 |
3204 testing::StrictMock<test::MockVisitor> visitor; | 3205 testing::StrictMock<test::MockVisitor> visitor; |
3205 SpdyFramer framer(spdy_version_); | 3206 SpdyFramer framer(spdy_version_); |
3206 framer.set_visitor(&visitor); | 3207 framer.set_visitor(&visitor); |
3207 | 3208 |
3208 scoped_ptr<SpdyFrame> frame( | 3209 scoped_ptr<SpdyFrame> frame( |
3209 framer.CreateDataFrame(1, "hello", 5, DATA_FLAG_NONE)); | 3210 framer.CreateDataFrame(1, "hello", 5, DATA_FLAG_NONE)); |
3210 frame->set_flags(flags); | 3211 frame->set_flags(flags); |
3211 | 3212 |
3212 // Flags are just passed along since they need to be validated at | 3213 if (flags & ~DATA_FLAG_FIN) { |
3213 // a higher protocol layer. | 3214 EXPECT_CALL(visitor, OnError(_)); |
| 3215 } else { |
3214 EXPECT_CALL(visitor, OnDataFrameHeader(_)); | 3216 EXPECT_CALL(visitor, OnDataFrameHeader(_)); |
3215 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 5, SpdyDataFlags())); | 3217 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 5, SpdyDataFlags())); |
3216 if (flags & DATA_FLAG_FIN) { | 3218 if (flags & DATA_FLAG_FIN) { |
3217 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, DATA_FLAG_FIN)); | 3219 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, DATA_FLAG_FIN)); |
3218 } | 3220 } |
3219 | 3221 } |
3220 size_t frame_size = frame->length() + SpdyFrame::kHeaderSize; | 3222 |
3221 framer.ProcessInput(frame->data(), frame_size); | 3223 size_t frame_size = frame->length() + SpdyFrame::kHeaderSize; |
| 3224 framer.ProcessInput(frame->data(), frame_size); |
| 3225 if (flags & ~DATA_FLAG_FIN) { |
| 3226 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); |
| 3227 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, |
| 3228 framer.error_code()); |
| 3229 } else { |
| 3230 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); |
| 3231 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()); |
| 3232 } |
| 3233 } |
| 3234 } |
| 3235 |
| 3236 TEST_P(SpdyFramerTest, SynStreamFrameFlags) { |
| 3237 for (int flags = 0; flags < 256; ++flags) { |
| 3238 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 3239 |
| 3240 testing::StrictMock<net::test::MockVisitor> visitor; |
| 3241 SpdyFramer framer(spdy_version_); |
| 3242 framer.set_visitor(&visitor); |
| 3243 |
| 3244 SpdyHeaderBlock headers; |
| 3245 headers["foo"] = "bar"; |
| 3246 scoped_ptr<SpdyFrame> frame( |
| 3247 framer.CreateSynStream(8, 3, 1, 0, CONTROL_FLAG_NONE, true, &headers)); |
| 3248 frame->set_flags(flags); |
| 3249 |
| 3250 if (flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) { |
| 3251 EXPECT_CALL(visitor, OnError(_)); |
| 3252 } else { |
| 3253 EXPECT_CALL(visitor, OnSynStream(8, 3, 1, 0, flags & CONTROL_FLAG_FIN, |
| 3254 flags & CONTROL_FLAG_UNIDIRECTIONAL)); |
| 3255 EXPECT_CALL(visitor, OnControlFrameHeaderData(8, _, _)) |
| 3256 .WillRepeatedly(testing::Return(true)); |
| 3257 if (flags & DATA_FLAG_FIN) { |
| 3258 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, DATA_FLAG_FIN)); |
| 3259 } |
| 3260 } |
| 3261 |
| 3262 size_t frame_size = frame->length() + SpdyFrame::kHeaderSize; |
| 3263 framer.ProcessInput(frame->data(), frame_size); |
| 3264 if (flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) { |
| 3265 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); |
| 3266 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, |
| 3267 framer.error_code()); |
| 3268 } else { |
| 3269 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); |
| 3270 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()); |
| 3271 } |
| 3272 } |
| 3273 } |
| 3274 |
| 3275 TEST_P(SpdyFramerTest, SynReplyFrameFlags) { |
| 3276 for (int flags = 0; flags < 256; ++flags) { |
| 3277 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 3278 |
| 3279 testing::StrictMock<net::test::MockVisitor> visitor; |
| 3280 SpdyFramer framer(spdy_version_); |
| 3281 framer.set_visitor(&visitor); |
| 3282 |
| 3283 SpdyHeaderBlock headers; |
| 3284 headers["foo"] = "bar"; |
| 3285 scoped_ptr<SpdyFrame> frame( |
| 3286 framer.CreateSynReply(37, CONTROL_FLAG_NONE, true, &headers)); |
| 3287 frame->set_flags(flags); |
| 3288 |
| 3289 if (flags & ~CONTROL_FLAG_FIN) { |
| 3290 EXPECT_CALL(visitor, OnError(_)); |
| 3291 } else { |
| 3292 EXPECT_CALL(visitor, OnSynReply(37, flags & CONTROL_FLAG_FIN)); |
| 3293 EXPECT_CALL(visitor, OnControlFrameHeaderData(37, _, _)) |
| 3294 .WillRepeatedly(testing::Return(true)); |
| 3295 if (flags & DATA_FLAG_FIN) { |
| 3296 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, DATA_FLAG_FIN)); |
| 3297 } |
| 3298 } |
| 3299 |
| 3300 size_t frame_size = frame->length() + SpdyFrame::kHeaderSize; |
| 3301 framer.ProcessInput(frame->data(), frame_size); |
| 3302 if (flags & ~CONTROL_FLAG_FIN) { |
| 3303 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); |
| 3304 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, |
| 3305 framer.error_code()); |
| 3306 } else { |
| 3307 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); |
| 3308 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()); |
| 3309 } |
| 3310 } |
| 3311 } |
| 3312 |
| 3313 TEST_P(SpdyFramerTest, RstStreamFrameFlags) { |
| 3314 for (int flags = 0; flags < 256; ++flags) { |
| 3315 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 3316 |
| 3317 testing::StrictMock<net::test::MockVisitor> visitor; |
| 3318 SpdyFramer framer(spdy_version_); |
| 3319 framer.set_visitor(&visitor); |
| 3320 |
| 3321 scoped_ptr<SpdyFrame> frame(framer.CreateRstStream(13, RST_STREAM_CANCEL)); |
| 3322 frame->set_flags(flags); |
| 3323 |
| 3324 if (flags != 0) { |
| 3325 EXPECT_CALL(visitor, OnError(_)); |
| 3326 } else { |
| 3327 EXPECT_CALL(visitor, OnRstStream(13, RST_STREAM_CANCEL)); |
| 3328 } |
| 3329 |
| 3330 size_t frame_size = frame->length() + SpdyFrame::kHeaderSize; |
| 3331 framer.ProcessInput(frame->data(), frame_size); |
| 3332 if (flags != 0) { |
| 3333 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); |
| 3334 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, |
| 3335 framer.error_code()); |
| 3336 } else { |
| 3337 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); |
| 3338 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()); |
| 3339 } |
| 3340 } |
| 3341 } |
| 3342 |
| 3343 TEST_P(SpdyFramerTest, SettingsFrameFlags) { |
| 3344 for (int flags = 0; flags < 256; ++flags) { |
| 3345 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 3346 |
| 3347 testing::StrictMock<net::test::MockVisitor> visitor; |
| 3348 SpdyFramer framer(spdy_version_); |
| 3349 framer.set_visitor(&visitor); |
| 3350 |
| 3351 SettingsMap settings; |
| 3352 settings[SETTINGS_UPLOAD_BANDWIDTH] = |
| 3353 std::make_pair(SETTINGS_FLAG_NONE, 54321); |
| 3354 scoped_ptr<SpdyFrame> frame(framer.CreateSettings(settings)); |
| 3355 frame->set_flags(flags); |
| 3356 |
| 3357 if (flags & ~SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS) { |
| 3358 EXPECT_CALL(visitor, OnError(_)); |
| 3359 } else { |
| 3360 EXPECT_CALL(visitor, OnSetting(SETTINGS_UPLOAD_BANDWIDTH, |
| 3361 SETTINGS_FLAG_NONE, 54321)); |
| 3362 } |
| 3363 |
| 3364 size_t frame_size = frame->length() + SpdyFrame::kHeaderSize; |
| 3365 framer.ProcessInput(frame->data(), frame_size); |
| 3366 if (flags & ~SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS) { |
| 3367 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); |
| 3368 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, |
| 3369 framer.error_code()); |
| 3370 } else { |
| 3371 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); |
| 3372 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()); |
| 3373 } |
| 3374 } |
| 3375 } |
| 3376 |
| 3377 TEST_P(SpdyFramerTest, GoawayFrameFlags) { |
| 3378 for (int flags = 0; flags < 256; ++flags) { |
| 3379 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 3380 |
| 3381 testing::StrictMock<net::test::MockVisitor> visitor; |
| 3382 SpdyFramer framer(spdy_version_); |
| 3383 framer.set_visitor(&visitor); |
| 3384 |
| 3385 scoped_ptr<SpdyFrame> frame(framer.CreateGoAway(97, GOAWAY_OK)); |
| 3386 frame->set_flags(flags); |
| 3387 |
| 3388 if (flags != 0) { |
| 3389 EXPECT_CALL(visitor, OnError(_)); |
| 3390 } else { |
| 3391 EXPECT_CALL(visitor, OnGoAway(97, GOAWAY_OK)); |
| 3392 } |
| 3393 |
| 3394 size_t frame_size = frame->length() + SpdyFrame::kHeaderSize; |
| 3395 framer.ProcessInput(frame->data(), frame_size); |
| 3396 if (flags != 0) { |
| 3397 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); |
| 3398 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, |
| 3399 framer.error_code()); |
| 3400 } else { |
| 3401 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); |
| 3402 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()); |
| 3403 } |
| 3404 } |
| 3405 } |
| 3406 |
| 3407 TEST_P(SpdyFramerTest, HeadersFrameFlags) { |
| 3408 for (int flags = 0; flags < 256; ++flags) { |
| 3409 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 3410 |
| 3411 testing::StrictMock<net::test::MockVisitor> visitor; |
| 3412 SpdyFramer framer(spdy_version_); |
| 3413 framer.set_visitor(&visitor); |
| 3414 |
| 3415 SpdyHeaderBlock headers; |
| 3416 headers["foo"] = "bar"; |
| 3417 scoped_ptr<SpdyFrame> frame( |
| 3418 framer.CreateHeaders(57, CONTROL_FLAG_NONE, true, &headers)); |
| 3419 frame->set_flags(flags); |
| 3420 |
| 3421 if (flags & ~CONTROL_FLAG_FIN) { |
| 3422 EXPECT_CALL(visitor, OnError(_)); |
| 3423 } else { |
| 3424 EXPECT_CALL(visitor, OnHeaders(57, flags & CONTROL_FLAG_FIN)); |
| 3425 EXPECT_CALL(visitor, OnControlFrameHeaderData(57, _, _)) |
| 3426 .WillRepeatedly(testing::Return(true)); |
| 3427 if (flags & DATA_FLAG_FIN) { |
| 3428 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, DATA_FLAG_FIN)); |
| 3429 } |
| 3430 } |
| 3431 |
| 3432 size_t frame_size = frame->length() + SpdyFrame::kHeaderSize; |
| 3433 framer.ProcessInput(frame->data(), frame_size); |
| 3434 if (flags & ~CONTROL_FLAG_FIN) { |
| 3435 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); |
| 3436 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, |
| 3437 framer.error_code()); |
| 3438 } else { |
| 3439 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); |
| 3440 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()); |
| 3441 } |
| 3442 } |
| 3443 } |
| 3444 |
| 3445 TEST_P(SpdyFramerTest, PingFrameFlags) { |
| 3446 for (int flags = 0; flags < 256; ++flags) { |
| 3447 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 3448 |
| 3449 testing::StrictMock<net::test::MockVisitor> visitor; |
| 3450 SpdyFramer framer(spdy_version_); |
| 3451 framer.set_visitor(&visitor); |
| 3452 |
| 3453 scoped_ptr<SpdyFrame> frame(framer.CreatePingFrame(42)); |
| 3454 frame->set_flags(flags); |
| 3455 |
| 3456 if (flags != 0) { |
| 3457 EXPECT_CALL(visitor, OnError(_)); |
| 3458 } else { |
| 3459 EXPECT_CALL(visitor, OnPing(42)); |
| 3460 } |
| 3461 |
| 3462 size_t frame_size = frame->length() + SpdyFrame::kHeaderSize; |
| 3463 framer.ProcessInput(frame->data(), frame_size); |
| 3464 if (flags != 0) { |
| 3465 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); |
| 3466 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, |
| 3467 framer.error_code()); |
| 3468 } else { |
3222 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); | 3469 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); |
3223 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()); | 3470 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()); |
3224 } | 3471 } |
3225 } | 3472 } |
| 3473 } |
| 3474 |
| 3475 TEST_P(SpdyFramerTest, WindowUpdateFrameFlags) { |
| 3476 for (int flags = 0; flags < 256; ++flags) { |
| 3477 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 3478 |
| 3479 testing::StrictMock<net::test::MockVisitor> visitor; |
| 3480 SpdyFramer framer(spdy_version_); |
| 3481 framer.set_visitor(&visitor); |
| 3482 |
| 3483 scoped_ptr<SpdyFrame> frame(framer.CreateWindowUpdate(4, 1024)); |
| 3484 frame->set_flags(flags); |
| 3485 |
| 3486 if (flags != 0) { |
| 3487 EXPECT_CALL(visitor, OnError(_)); |
| 3488 } else { |
| 3489 EXPECT_CALL(visitor, OnWindowUpdate(4, 1024)); |
| 3490 } |
| 3491 |
| 3492 size_t frame_size = frame->length() + SpdyFrame::kHeaderSize; |
| 3493 framer.ProcessInput(frame->data(), frame_size); |
| 3494 if (flags != 0) { |
| 3495 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); |
| 3496 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, |
| 3497 framer.error_code()); |
| 3498 } else { |
| 3499 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); |
| 3500 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()); |
| 3501 } |
| 3502 } |
| 3503 } |
| 3504 |
| 3505 TEST_P(SpdyFramerTest, CredentialFrameFlags) { |
| 3506 for (int flags = 0; flags < 256; ++flags) { |
| 3507 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 3508 |
| 3509 testing::StrictMock<net::test::MockVisitor> visitor; |
| 3510 SpdyFramer framer(spdy_version_); |
| 3511 framer.set_visitor(&visitor); |
| 3512 |
| 3513 SpdyCredential credential; |
| 3514 scoped_ptr<SpdyFrame> frame(framer.CreateCredentialFrame(credential)); |
| 3515 frame->set_flags(flags); |
| 3516 |
| 3517 if (flags != 0) { |
| 3518 EXPECT_CALL(visitor, OnError(_)); |
| 3519 } else { |
| 3520 EXPECT_CALL(visitor, OnCredentialFrameData(_, _)) |
| 3521 .WillRepeatedly(testing::Return(true)); |
| 3522 } |
| 3523 |
| 3524 size_t frame_size = frame->length() + SpdyFrame::kHeaderSize; |
| 3525 framer.ProcessInput(frame->data(), frame_size); |
| 3526 if (flags != 0) { |
| 3527 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); |
| 3528 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, |
| 3529 framer.error_code()); |
| 3530 } else { |
| 3531 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); |
| 3532 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()); |
| 3533 } |
| 3534 } |
| 3535 } |
3226 | 3536 |
3227 TEST_P(SpdyFramerTest, EmptySynStream) { | 3537 TEST_P(SpdyFramerTest, EmptySynStream) { |
3228 SpdyHeaderBlock headers; | 3538 SpdyHeaderBlock headers; |
3229 | 3539 |
3230 testing::StrictMock<test::MockVisitor> visitor; | 3540 testing::StrictMock<test::MockVisitor> visitor; |
3231 SpdyFramer framer(spdy_version_); | 3541 SpdyFramer framer(spdy_version_); |
3232 framer.set_visitor(&visitor); | 3542 framer.set_visitor(&visitor); |
3233 | 3543 |
3234 EXPECT_CALL(visitor, OnControlFrameCompressed(_, _)); | 3544 EXPECT_CALL(visitor, OnControlFrameCompressed(_, _)); |
3235 scoped_ptr<SpdySynStreamControlFrame> | 3545 scoped_ptr<SpdySynStreamControlFrame> |
(...skipping 18 matching lines...) Expand all Loading... |
3254 const uint32 kWireFormat = htonl(IsSpdy2() ? 0x04030201 : 0x01020304); | 3564 const uint32 kWireFormat = htonl(IsSpdy2() ? 0x04030201 : 0x01020304); |
3255 | 3565 |
3256 SettingsFlagsAndId id_and_flags = | 3566 SettingsFlagsAndId id_and_flags = |
3257 SettingsFlagsAndId::FromWireFormat(spdy_version_, kWireFormat); | 3567 SettingsFlagsAndId::FromWireFormat(spdy_version_, kWireFormat); |
3258 EXPECT_EQ(kId, id_and_flags.id()); | 3568 EXPECT_EQ(kId, id_and_flags.id()); |
3259 EXPECT_EQ(kFlags, id_and_flags.flags()); | 3569 EXPECT_EQ(kFlags, id_and_flags.flags()); |
3260 EXPECT_EQ(kWireFormat, id_and_flags.GetWireFormat(spdy_version_)); | 3570 EXPECT_EQ(kWireFormat, id_and_flags.GetWireFormat(spdy_version_)); |
3261 } | 3571 } |
3262 | 3572 |
3263 } // namespace net | 3573 } // namespace net |
OLD | NEW |