Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Side by Side Diff: net/spdy/spdy_framer_test.cc

Issue 12213062: Invalid flags now result in a GOAWAY (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Upload correct patch Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
OLDNEW
« net/spdy/spdy_framer.cc ('K') | « net/spdy/spdy_framer.cc ('k') | net/spdy/spdy_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698