| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/quic/quic_headers_stream.h" | 5 #include "net/quic/quic_headers_stream.h" |
| 6 | 6 |
| 7 #include "net/quic/quic_utils.h" | 7 #include "net/quic/quic_utils.h" |
| 8 #include "net/quic/spdy_utils.h" | 8 #include "net/quic/spdy_utils.h" |
| 9 #include "net/quic/test_tools/quic_connection_peer.h" | 9 #include "net/quic/test_tools/quic_connection_peer.h" |
| 10 #include "net/quic/test_tools/quic_spdy_session_peer.h" | 10 #include "net/quic/test_tools/quic_spdy_session_peer.h" |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 } | 315 } |
| 316 } | 316 } |
| 317 } | 317 } |
| 318 | 318 |
| 319 TEST_P(QuicHeadersStreamTest, ProcessRawData) { | 319 TEST_P(QuicHeadersStreamTest, ProcessRawData) { |
| 320 for (QuicStreamId stream_id = kClientDataStreamId1; | 320 for (QuicStreamId stream_id = kClientDataStreamId1; |
| 321 stream_id < kClientDataStreamId3; stream_id += 2) { | 321 stream_id < kClientDataStreamId3; stream_id += 2) { |
| 322 for (bool fin : {false, true}) { | 322 for (bool fin : {false, true}) { |
| 323 for (SpdyPriority priority = 0; priority < 7; ++priority) { | 323 for (SpdyPriority priority = 0; priority < 7; ++priority) { |
| 324 // Replace with "WriteHeadersAndSaveData" | 324 // Replace with "WriteHeadersAndSaveData" |
| 325 scoped_ptr<SpdySerializedFrame> frame; | 325 SpdySerializedFrame frame; |
| 326 if (perspective() == Perspective::IS_SERVER) { | 326 if (perspective() == Perspective::IS_SERVER) { |
| 327 SpdyHeadersIR headers_frame(stream_id); | 327 SpdyHeadersIR headers_frame(stream_id); |
| 328 headers_frame.set_header_block(headers_); | 328 headers_frame.set_header_block(headers_); |
| 329 headers_frame.set_fin(fin); | 329 headers_frame.set_fin(fin); |
| 330 headers_frame.set_has_priority(true); | 330 headers_frame.set_has_priority(true); |
| 331 frame.reset(framer_->SerializeFrame(headers_frame)); | 331 frame = framer_->SerializeFrame(headers_frame); |
| 332 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); | 332 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); |
| 333 } else { | 333 } else { |
| 334 SpdyHeadersIR headers_frame(stream_id); | 334 SpdyHeadersIR headers_frame(stream_id); |
| 335 headers_frame.set_header_block(headers_); | 335 headers_frame.set_header_block(headers_); |
| 336 headers_frame.set_fin(fin); | 336 headers_frame.set_fin(fin); |
| 337 frame.reset(framer_->SerializeFrame(headers_frame)); | 337 frame = framer_->SerializeFrame(headers_frame); |
| 338 } | 338 } |
| 339 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _)) | 339 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _)) |
| 340 .WillRepeatedly(WithArgs<1>(Invoke( | 340 .WillRepeatedly(WithArgs<1>(Invoke( |
| 341 this, &QuicHeadersStreamTest::SaveHeaderDataStringPiece))); | 341 this, &QuicHeadersStreamTest::SaveHeaderDataStringPiece))); |
| 342 EXPECT_CALL(session_, | 342 EXPECT_CALL(session_, |
| 343 OnStreamHeadersComplete(stream_id, fin, frame->size())); | 343 OnStreamHeadersComplete(stream_id, fin, frame.size())); |
| 344 stream_frame_.frame_buffer = frame->data(); | 344 stream_frame_.frame_buffer = frame.data(); |
| 345 stream_frame_.frame_length = frame->size(); | 345 stream_frame_.frame_length = frame.size(); |
| 346 headers_stream_->OnStreamFrame(stream_frame_); | 346 headers_stream_->OnStreamFrame(stream_frame_); |
| 347 stream_frame_.offset += frame->size(); | 347 stream_frame_.offset += frame.size(); |
| 348 CheckHeaders(); | 348 CheckHeaders(); |
| 349 } | 349 } |
| 350 } | 350 } |
| 351 } | 351 } |
| 352 } | 352 } |
| 353 | 353 |
| 354 TEST_P(QuicHeadersStreamTest, ProcessPushPromise) { | 354 TEST_P(QuicHeadersStreamTest, ProcessPushPromise) { |
| 355 if (perspective() == Perspective::IS_SERVER) | 355 if (perspective() == Perspective::IS_SERVER) |
| 356 return; | 356 return; |
| 357 for (QuicStreamId stream_id = kClientDataStreamId1; | 357 for (QuicStreamId stream_id = kClientDataStreamId1; |
| 358 stream_id < kClientDataStreamId3; stream_id += 2) { | 358 stream_id < kClientDataStreamId3; stream_id += 2) { |
| 359 QuicStreamId promised_stream_id = NextPromisedStreamId(); | 359 QuicStreamId promised_stream_id = NextPromisedStreamId(); |
| 360 scoped_ptr<SpdySerializedFrame> frame; | |
| 361 SpdyPushPromiseIR push_promise(stream_id, promised_stream_id); | 360 SpdyPushPromiseIR push_promise(stream_id, promised_stream_id); |
| 362 push_promise.set_header_block(headers_); | 361 push_promise.set_header_block(headers_); |
| 363 frame.reset(framer_->SerializeFrame(push_promise)); | 362 SpdySerializedFrame frame(framer_->SerializeFrame(push_promise)); |
| 364 if (perspective() == Perspective::IS_SERVER) { | 363 if (perspective() == Perspective::IS_SERVER) { |
| 365 EXPECT_CALL(*connection_, | 364 EXPECT_CALL(*connection_, |
| 366 CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, | 365 CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, |
| 367 "PUSH_PROMISE not supported.", _)) | 366 "PUSH_PROMISE not supported.", _)) |
| 368 .WillRepeatedly(InvokeWithoutArgs( | 367 .WillRepeatedly(InvokeWithoutArgs( |
| 369 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); | 368 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); |
| 370 } else { | 369 } else { |
| 371 EXPECT_CALL(session_, OnPromiseHeaders(stream_id, _)) | 370 EXPECT_CALL(session_, OnPromiseHeaders(stream_id, _)) |
| 372 .WillRepeatedly(WithArgs<1>( | 371 .WillRepeatedly(WithArgs<1>( |
| 373 Invoke(this, &QuicHeadersStreamTest::SaveHeaderDataStringPiece))); | 372 Invoke(this, &QuicHeadersStreamTest::SaveHeaderDataStringPiece))); |
| 374 EXPECT_CALL(session_, OnPromiseHeadersComplete( | 373 EXPECT_CALL(session_, OnPromiseHeadersComplete( |
| 375 stream_id, promised_stream_id, frame->size())); | 374 stream_id, promised_stream_id, frame.size())); |
| 376 } | 375 } |
| 377 stream_frame_.frame_buffer = frame->data(); | 376 stream_frame_.frame_buffer = frame.data(); |
| 378 stream_frame_.frame_length = frame->size(); | 377 stream_frame_.frame_length = frame.size(); |
| 379 headers_stream_->OnStreamFrame(stream_frame_); | 378 headers_stream_->OnStreamFrame(stream_frame_); |
| 380 if (perspective() == Perspective::IS_CLIENT) { | 379 if (perspective() == Perspective::IS_CLIENT) { |
| 381 stream_frame_.offset += frame->size(); | 380 stream_frame_.offset += frame.size(); |
| 382 CheckHeaders(); | 381 CheckHeaders(); |
| 383 } | 382 } |
| 384 } | 383 } |
| 385 } | 384 } |
| 386 | 385 |
| 387 TEST_P(QuicHeadersStreamTest, EmptyHeaderHOLBlockedTime) { | 386 TEST_P(QuicHeadersStreamTest, EmptyHeaderHOLBlockedTime) { |
| 388 EXPECT_CALL(session_, OnHeadersHeadOfLineBlocking(_)).Times(0); | 387 EXPECT_CALL(session_, OnHeadersHeadOfLineBlocking(_)).Times(0); |
| 389 testing::InSequence seq; | 388 testing::InSequence seq; |
| 390 bool fin = true; | 389 bool fin = true; |
| 391 for (int stream_num = 0; stream_num < 10; stream_num++) { | 390 for (int stream_num = 0; stream_num < 10; stream_num++) { |
| 392 QuicStreamId stream_id = QuicClientDataStreamId(stream_num); | 391 QuicStreamId stream_id = QuicClientDataStreamId(stream_num); |
| 393 // Replace with "WriteHeadersAndSaveData" | 392 // Replace with "WriteHeadersAndSaveData" |
| 394 scoped_ptr<SpdySerializedFrame> frame; | 393 SpdySerializedFrame frame; |
| 395 if (perspective() == Perspective::IS_SERVER) { | 394 if (perspective() == Perspective::IS_SERVER) { |
| 396 SpdyHeadersIR headers_frame(stream_id); | 395 SpdyHeadersIR headers_frame(stream_id); |
| 397 headers_frame.set_header_block(headers_); | 396 headers_frame.set_header_block(headers_); |
| 398 headers_frame.set_fin(fin); | 397 headers_frame.set_fin(fin); |
| 399 headers_frame.set_has_priority(true); | 398 headers_frame.set_has_priority(true); |
| 400 frame.reset(framer_->SerializeFrame(headers_frame)); | 399 frame = framer_->SerializeFrame(headers_frame); |
| 401 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); | 400 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); |
| 402 } else { | 401 } else { |
| 403 SpdyHeadersIR headers_frame(stream_id); | 402 SpdyHeadersIR headers_frame(stream_id); |
| 404 headers_frame.set_header_block(headers_); | 403 headers_frame.set_header_block(headers_); |
| 405 headers_frame.set_fin(fin); | 404 headers_frame.set_fin(fin); |
| 406 frame.reset(framer_->SerializeFrame(headers_frame)); | 405 frame = framer_->SerializeFrame(headers_frame); |
| 407 } | 406 } |
| 408 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _)); | 407 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _)); |
| 409 EXPECT_CALL(session_, | 408 EXPECT_CALL(session_, |
| 410 OnStreamHeadersComplete(stream_id, fin, frame->size())); | 409 OnStreamHeadersComplete(stream_id, fin, frame.size())); |
| 411 stream_frame_.frame_buffer = frame->data(); | 410 stream_frame_.frame_buffer = frame.data(); |
| 412 stream_frame_.frame_length = frame->size(); | 411 stream_frame_.frame_length = frame.size(); |
| 413 headers_stream_->OnStreamFrame(stream_frame_); | 412 headers_stream_->OnStreamFrame(stream_frame_); |
| 414 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); | 413 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); |
| 415 stream_frame_.offset += frame->size(); | 414 stream_frame_.offset += frame.size(); |
| 416 } | 415 } |
| 417 } | 416 } |
| 418 | 417 |
| 419 TEST_P(QuicHeadersStreamTest, NonEmptyHeaderHOLBlockedTime) { | 418 TEST_P(QuicHeadersStreamTest, NonEmptyHeaderHOLBlockedTime) { |
| 420 QuicStreamId stream_id; | 419 QuicStreamId stream_id; |
| 421 bool fin = true; | 420 bool fin = true; |
| 422 QuicStreamFrame stream_frames[10]; | 421 QuicStreamFrame stream_frames[10]; |
| 423 scoped_ptr<SpdySerializedFrame> frames[10]; | 422 SpdySerializedFrame frames[10]; |
| 424 // First create all the frames in order | 423 // First create all the frames in order |
| 425 { | 424 { |
| 426 InSequence seq; | 425 InSequence seq; |
| 427 for (int stream_num = 0; stream_num < 10; ++stream_num) { | 426 for (int stream_num = 0; stream_num < 10; ++stream_num) { |
| 428 stream_id = QuicClientDataStreamId(stream_num); | 427 stream_id = QuicClientDataStreamId(stream_num); |
| 429 if (perspective() == Perspective::IS_SERVER) { | 428 if (perspective() == Perspective::IS_SERVER) { |
| 430 SpdyHeadersIR headers_frame(stream_id); | 429 SpdyHeadersIR headers_frame(stream_id); |
| 431 headers_frame.set_header_block(headers_); | 430 headers_frame.set_header_block(headers_); |
| 432 headers_frame.set_fin(fin); | 431 headers_frame.set_fin(fin); |
| 433 headers_frame.set_has_priority(true); | 432 headers_frame.set_has_priority(true); |
| 434 frames[stream_num].reset(framer_->SerializeFrame(headers_frame)); | 433 frames[stream_num] = framer_->SerializeFrame(headers_frame); |
| 435 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)).Times(1); | 434 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)).Times(1); |
| 436 } else { | 435 } else { |
| 437 SpdyHeadersIR headers_frame(stream_id); | 436 SpdyHeadersIR headers_frame(stream_id); |
| 438 headers_frame.set_header_block(headers_); | 437 headers_frame.set_header_block(headers_); |
| 439 headers_frame.set_fin(fin); | 438 headers_frame.set_fin(fin); |
| 440 frames[stream_num].reset(framer_->SerializeFrame(headers_frame)); | 439 frames[stream_num] = framer_->SerializeFrame(headers_frame); |
| 441 } | 440 } |
| 442 stream_frames[stream_num].stream_id = stream_frame_.stream_id; | 441 stream_frames[stream_num].stream_id = stream_frame_.stream_id; |
| 443 stream_frames[stream_num].offset = stream_frame_.offset; | 442 stream_frames[stream_num].offset = stream_frame_.offset; |
| 444 stream_frames[stream_num].frame_buffer = frames[stream_num]->data(); | 443 stream_frames[stream_num].frame_buffer = frames[stream_num].data(); |
| 445 stream_frames[stream_num].frame_length = frames[stream_num]->size(); | 444 stream_frames[stream_num].frame_length = frames[stream_num].size(); |
| 446 DVLOG(1) << "make frame for stream " << stream_num << " offset " | 445 DVLOG(1) << "make frame for stream " << stream_num << " offset " |
| 447 << stream_frames[stream_num].offset; | 446 << stream_frames[stream_num].offset; |
| 448 stream_frame_.offset += frames[stream_num]->size(); | 447 stream_frame_.offset += frames[stream_num].size(); |
| 449 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _)).Times(1); | 448 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _)).Times(1); |
| 450 EXPECT_CALL(session_, OnStreamHeadersComplete(stream_id, fin, _)) | 449 EXPECT_CALL(session_, OnStreamHeadersComplete(stream_id, fin, _)) |
| 451 .Times(1); | 450 .Times(1); |
| 452 } | 451 } |
| 453 } | 452 } |
| 454 | 453 |
| 455 // Actually writing the frames in reverse order will cause HOL blocking. | 454 // Actually writing the frames in reverse order will cause HOL blocking. |
| 456 EXPECT_CALL(session_, OnHeadersHeadOfLineBlocking(_)).Times(9); | 455 EXPECT_CALL(session_, OnHeadersHeadOfLineBlocking(_)).Times(9); |
| 457 | 456 |
| 458 for (int stream_num = 9; stream_num >= 0; --stream_num) { | 457 for (int stream_num = 9; stream_num >= 0; --stream_num) { |
| 459 DVLOG(1) << "OnStreamFrame for stream " << stream_num << " offset " | 458 DVLOG(1) << "OnStreamFrame for stream " << stream_num << " offset " |
| 460 << stream_frames[stream_num].offset; | 459 << stream_frames[stream_num].offset; |
| 461 headers_stream_->OnStreamFrame(stream_frames[stream_num]); | 460 headers_stream_->OnStreamFrame(stream_frames[stream_num]); |
| 462 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); | 461 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); |
| 463 } | 462 } |
| 464 } | 463 } |
| 465 | 464 |
| 466 TEST_P(QuicHeadersStreamTest, ProcessLargeRawData) { | 465 TEST_P(QuicHeadersStreamTest, ProcessLargeRawData) { |
| 467 // We want to create a frame that is more than the SPDY Framer's max control | 466 // We want to create a frame that is more than the SPDY Framer's max control |
| 468 // frame size, which is 16K, but less than the HPACK decoders max decode | 467 // frame size, which is 16K, but less than the HPACK decoders max decode |
| 469 // buffer size, which is 32K. | 468 // buffer size, which is 32K. |
| 470 headers_["key0"] = string(1 << 13, '.'); | 469 headers_["key0"] = string(1 << 13, '.'); |
| 471 headers_["key1"] = string(1 << 13, '.'); | 470 headers_["key1"] = string(1 << 13, '.'); |
| 472 headers_["key2"] = string(1 << 13, '.'); | 471 headers_["key2"] = string(1 << 13, '.'); |
| 473 for (QuicStreamId stream_id = kClientDataStreamId1; | 472 for (QuicStreamId stream_id = kClientDataStreamId1; |
| 474 stream_id < kClientDataStreamId3; stream_id += 2) { | 473 stream_id < kClientDataStreamId3; stream_id += 2) { |
| 475 for (bool fin : {false, true}) { | 474 for (bool fin : {false, true}) { |
| 476 for (SpdyPriority priority = 0; priority < 7; ++priority) { | 475 for (SpdyPriority priority = 0; priority < 7; ++priority) { |
| 477 // Replace with "WriteHeadersAndSaveData" | 476 // Replace with "WriteHeadersAndSaveData" |
| 478 scoped_ptr<SpdySerializedFrame> frame; | 477 SpdySerializedFrame frame; |
| 479 if (perspective() == Perspective::IS_SERVER) { | 478 if (perspective() == Perspective::IS_SERVER) { |
| 480 SpdyHeadersIR headers_frame(stream_id); | 479 SpdyHeadersIR headers_frame(stream_id); |
| 481 headers_frame.set_header_block(headers_); | 480 headers_frame.set_header_block(headers_); |
| 482 headers_frame.set_fin(fin); | 481 headers_frame.set_fin(fin); |
| 483 headers_frame.set_has_priority(true); | 482 headers_frame.set_has_priority(true); |
| 484 frame.reset(framer_->SerializeFrame(headers_frame)); | 483 frame = framer_->SerializeFrame(headers_frame); |
| 485 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); | 484 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); |
| 486 } else { | 485 } else { |
| 487 SpdyHeadersIR headers_frame(stream_id); | 486 SpdyHeadersIR headers_frame(stream_id); |
| 488 headers_frame.set_header_block(headers_); | 487 headers_frame.set_header_block(headers_); |
| 489 headers_frame.set_fin(fin); | 488 headers_frame.set_fin(fin); |
| 490 frame.reset(framer_->SerializeFrame(headers_frame)); | 489 frame = framer_->SerializeFrame(headers_frame); |
| 491 } | 490 } |
| 492 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _)) | 491 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _)) |
| 493 .WillRepeatedly(WithArgs<1>(Invoke( | 492 .WillRepeatedly(WithArgs<1>(Invoke( |
| 494 this, &QuicHeadersStreamTest::SaveHeaderDataStringPiece))); | 493 this, &QuicHeadersStreamTest::SaveHeaderDataStringPiece))); |
| 495 EXPECT_CALL(session_, | 494 EXPECT_CALL(session_, |
| 496 OnStreamHeadersComplete(stream_id, fin, frame->size())); | 495 OnStreamHeadersComplete(stream_id, fin, frame.size())); |
| 497 stream_frame_.frame_buffer = frame->data(); | 496 stream_frame_.frame_buffer = frame.data(); |
| 498 stream_frame_.frame_length = frame->size(); | 497 stream_frame_.frame_length = frame.size(); |
| 499 headers_stream_->OnStreamFrame(stream_frame_); | 498 headers_stream_->OnStreamFrame(stream_frame_); |
| 500 stream_frame_.offset += frame->size(); | 499 stream_frame_.offset += frame.size(); |
| 501 CheckHeaders(); | 500 CheckHeaders(); |
| 502 } | 501 } |
| 503 } | 502 } |
| 504 } | 503 } |
| 505 } | 504 } |
| 506 | 505 |
| 507 TEST_P(QuicHeadersStreamTest, ProcessBadData) { | 506 TEST_P(QuicHeadersStreamTest, ProcessBadData) { |
| 508 const char kBadData[] = "blah blah blah"; | 507 const char kBadData[] = "blah blah blah"; |
| 509 EXPECT_CALL(*connection_, | 508 EXPECT_CALL(*connection_, |
| 510 CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, _, _)) | 509 CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, _, _)) |
| 511 .Times(::testing::AnyNumber()); | 510 .Times(::testing::AnyNumber()); |
| 512 stream_frame_.frame_buffer = kBadData; | 511 stream_frame_.frame_buffer = kBadData; |
| 513 stream_frame_.frame_length = strlen(kBadData); | 512 stream_frame_.frame_length = strlen(kBadData); |
| 514 headers_stream_->OnStreamFrame(stream_frame_); | 513 headers_stream_->OnStreamFrame(stream_frame_); |
| 515 } | 514 } |
| 516 | 515 |
| 517 TEST_P(QuicHeadersStreamTest, ProcessSpdyDataFrame) { | 516 TEST_P(QuicHeadersStreamTest, ProcessSpdyDataFrame) { |
| 518 SpdyDataIR data(2, ""); | 517 SpdyDataIR data(2, ""); |
| 519 scoped_ptr<SpdySerializedFrame> frame(framer_->SerializeFrame(data)); | 518 SpdySerializedFrame frame(framer_->SerializeFrame(data)); |
| 520 EXPECT_CALL(*connection_, CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, | 519 EXPECT_CALL(*connection_, CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, |
| 521 "SPDY DATA frame received.", _)) | 520 "SPDY DATA frame received.", _)) |
| 522 .WillOnce(InvokeWithoutArgs( | 521 .WillOnce(InvokeWithoutArgs( |
| 523 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); | 522 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); |
| 524 stream_frame_.frame_buffer = frame->data(); | 523 stream_frame_.frame_buffer = frame.data(); |
| 525 stream_frame_.frame_length = frame->size(); | 524 stream_frame_.frame_length = frame.size(); |
| 526 headers_stream_->OnStreamFrame(stream_frame_); | 525 headers_stream_->OnStreamFrame(stream_frame_); |
| 527 } | 526 } |
| 528 | 527 |
| 529 TEST_P(QuicHeadersStreamTest, ProcessSpdyRstStreamFrame) { | 528 TEST_P(QuicHeadersStreamTest, ProcessSpdyRstStreamFrame) { |
| 530 SpdyRstStreamIR data(2, RST_STREAM_PROTOCOL_ERROR); | 529 SpdyRstStreamIR data(2, RST_STREAM_PROTOCOL_ERROR); |
| 531 scoped_ptr<SpdySerializedFrame> frame(framer_->SerializeFrame(data)); | 530 SpdySerializedFrame frame(framer_->SerializeFrame(data)); |
| 532 EXPECT_CALL(*connection_, | 531 EXPECT_CALL(*connection_, |
| 533 CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, | 532 CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, |
| 534 "SPDY RST_STREAM frame received.", _)) | 533 "SPDY RST_STREAM frame received.", _)) |
| 535 .WillOnce(InvokeWithoutArgs( | 534 .WillOnce(InvokeWithoutArgs( |
| 536 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); | 535 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); |
| 537 stream_frame_.frame_buffer = frame->data(); | 536 stream_frame_.frame_buffer = frame.data(); |
| 538 stream_frame_.frame_length = frame->size(); | 537 stream_frame_.frame_length = frame.size(); |
| 539 headers_stream_->OnStreamFrame(stream_frame_); | 538 headers_stream_->OnStreamFrame(stream_frame_); |
| 540 } | 539 } |
| 541 | 540 |
| 542 TEST_P(QuicHeadersStreamTest, ProcessSpdySettingsFrame) { | 541 TEST_P(QuicHeadersStreamTest, ProcessSpdySettingsFrame) { |
| 543 SpdySettingsIR data; | 542 SpdySettingsIR data; |
| 544 data.AddSetting(SETTINGS_HEADER_TABLE_SIZE, true, true, 0); | 543 data.AddSetting(SETTINGS_HEADER_TABLE_SIZE, true, true, 0); |
| 545 scoped_ptr<SpdySerializedFrame> frame(framer_->SerializeFrame(data)); | 544 SpdySerializedFrame frame(framer_->SerializeFrame(data)); |
| 546 EXPECT_CALL(*connection_, CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, | 545 EXPECT_CALL(*connection_, CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, |
| 547 "SPDY SETTINGS frame received.", _)) | 546 "SPDY SETTINGS frame received.", _)) |
| 548 .WillOnce(InvokeWithoutArgs( | 547 .WillOnce(InvokeWithoutArgs( |
| 549 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); | 548 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); |
| 550 stream_frame_.frame_buffer = frame->data(); | 549 stream_frame_.frame_buffer = frame.data(); |
| 551 stream_frame_.frame_length = frame->size(); | 550 stream_frame_.frame_length = frame.size(); |
| 552 headers_stream_->OnStreamFrame(stream_frame_); | 551 headers_stream_->OnStreamFrame(stream_frame_); |
| 553 } | 552 } |
| 554 | 553 |
| 555 TEST_P(QuicHeadersStreamTest, ProcessSpdyPingFrame) { | 554 TEST_P(QuicHeadersStreamTest, ProcessSpdyPingFrame) { |
| 556 SpdyPingIR data(1); | 555 SpdyPingIR data(1); |
| 557 scoped_ptr<SpdySerializedFrame> frame(framer_->SerializeFrame(data)); | 556 SpdySerializedFrame frame(framer_->SerializeFrame(data)); |
| 558 EXPECT_CALL(*connection_, CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, | 557 EXPECT_CALL(*connection_, CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, |
| 559 "SPDY PING frame received.", _)) | 558 "SPDY PING frame received.", _)) |
| 560 .WillOnce(InvokeWithoutArgs( | 559 .WillOnce(InvokeWithoutArgs( |
| 561 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); | 560 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); |
| 562 stream_frame_.frame_buffer = frame->data(); | 561 stream_frame_.frame_buffer = frame.data(); |
| 563 stream_frame_.frame_length = frame->size(); | 562 stream_frame_.frame_length = frame.size(); |
| 564 headers_stream_->OnStreamFrame(stream_frame_); | 563 headers_stream_->OnStreamFrame(stream_frame_); |
| 565 } | 564 } |
| 566 | 565 |
| 567 TEST_P(QuicHeadersStreamTest, ProcessSpdyGoAwayFrame) { | 566 TEST_P(QuicHeadersStreamTest, ProcessSpdyGoAwayFrame) { |
| 568 SpdyGoAwayIR data(1, GOAWAY_PROTOCOL_ERROR, "go away"); | 567 SpdyGoAwayIR data(1, GOAWAY_PROTOCOL_ERROR, "go away"); |
| 569 scoped_ptr<SpdySerializedFrame> frame(framer_->SerializeFrame(data)); | 568 SpdySerializedFrame frame(framer_->SerializeFrame(data)); |
| 570 EXPECT_CALL(*connection_, CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, | 569 EXPECT_CALL(*connection_, CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, |
| 571 "SPDY GOAWAY frame received.", _)) | 570 "SPDY GOAWAY frame received.", _)) |
| 572 .WillOnce(InvokeWithoutArgs( | 571 .WillOnce(InvokeWithoutArgs( |
| 573 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); | 572 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); |
| 574 stream_frame_.frame_buffer = frame->data(); | 573 stream_frame_.frame_buffer = frame.data(); |
| 575 stream_frame_.frame_length = frame->size(); | 574 stream_frame_.frame_length = frame.size(); |
| 576 headers_stream_->OnStreamFrame(stream_frame_); | 575 headers_stream_->OnStreamFrame(stream_frame_); |
| 577 } | 576 } |
| 578 | 577 |
| 579 TEST_P(QuicHeadersStreamTest, ProcessSpdyWindowUpdateFrame) { | 578 TEST_P(QuicHeadersStreamTest, ProcessSpdyWindowUpdateFrame) { |
| 580 SpdyWindowUpdateIR data(1, 1); | 579 SpdyWindowUpdateIR data(1, 1); |
| 581 scoped_ptr<SpdySerializedFrame> frame(framer_->SerializeFrame(data)); | 580 SpdySerializedFrame frame(framer_->SerializeFrame(data)); |
| 582 EXPECT_CALL(*connection_, | 581 EXPECT_CALL(*connection_, |
| 583 CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, | 582 CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, |
| 584 "SPDY WINDOW_UPDATE frame received.", _)) | 583 "SPDY WINDOW_UPDATE frame received.", _)) |
| 585 .WillOnce(InvokeWithoutArgs( | 584 .WillOnce(InvokeWithoutArgs( |
| 586 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); | 585 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); |
| 587 stream_frame_.frame_buffer = frame->data(); | 586 stream_frame_.frame_buffer = frame.data(); |
| 588 stream_frame_.frame_length = frame->size(); | 587 stream_frame_.frame_length = frame.size(); |
| 589 headers_stream_->OnStreamFrame(stream_frame_); | 588 headers_stream_->OnStreamFrame(stream_frame_); |
| 590 } | 589 } |
| 591 | 590 |
| 592 TEST_P(QuicHeadersStreamTest, NoConnectionLevelFlowControl) { | 591 TEST_P(QuicHeadersStreamTest, NoConnectionLevelFlowControl) { |
| 593 EXPECT_FALSE(ReliableQuicStreamPeer::StreamContributesToConnectionFlowControl( | 592 EXPECT_FALSE(ReliableQuicStreamPeer::StreamContributesToConnectionFlowControl( |
| 594 headers_stream_)); | 593 headers_stream_)); |
| 595 } | 594 } |
| 596 | 595 |
| 597 } // namespace | 596 } // namespace |
| 598 } // namespace test | 597 } // namespace test |
| 599 } // namespace net | 598 } // namespace net |
| OLD | NEW |