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

Side by Side Diff: net/quic/core/quic_headers_stream_test.cc

Issue 2862563003: Landing Recent QUIC changes until Sat Apr 29 00:22:04 2017 +0000 (Closed)
Patch Set: rebase and fix test bugs detected by swarm bot. Created 3 years, 7 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
« no previous file with comments | « net/quic/core/quic_flags_list.h ('k') | net/quic/core/quic_packet_creator_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/core/quic_headers_stream.h" 5 #include "net/quic/core/quic_headers_stream.h"
6 6
7 #include <cstdint> 7 #include <cstdint>
8 #include <ostream> 8 #include <ostream>
9 #include <string> 9 #include <string>
10 #include <tuple> 10 #include <tuple>
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 next_promised_stream_id_(2) { 217 next_promised_stream_id_(2) {
218 headers_[":version"] = "HTTP/1.1"; 218 headers_[":version"] = "HTTP/1.1";
219 headers_[":status"] = "200 Ok"; 219 headers_[":status"] = "200 Ok";
220 headers_["content-length"] = "11"; 220 headers_["content-length"] = "11";
221 framer_ = std::unique_ptr<SpdyFramer>( 221 framer_ = std::unique_ptr<SpdyFramer>(
222 new SpdyFramer(SpdyFramer::ENABLE_COMPRESSION)); 222 new SpdyFramer(SpdyFramer::ENABLE_COMPRESSION));
223 framer_->set_visitor(&visitor_); 223 framer_->set_visitor(&visitor_);
224 EXPECT_EQ(version(), session_.connection()->version()); 224 EXPECT_EQ(version(), session_.connection()->version());
225 EXPECT_TRUE(headers_stream_ != nullptr); 225 EXPECT_TRUE(headers_stream_ != nullptr);
226 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); 226 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
227 client_id_1_ =
228 QuicSpdySessionPeer::GetNthClientInitiatedStreamId(session_, 0);
229 client_id_2_ =
230 QuicSpdySessionPeer::GetNthClientInitiatedStreamId(session_, 1);
231 client_id_3_ =
232 QuicSpdySessionPeer::GetNthClientInitiatedStreamId(session_, 2);
233 next_stream_id_ = QuicSpdySessionPeer::NextStreamId(session_);
234 }
235
236 QuicStreamId GetNthClientInitiatedId(int n) {
237 return QuicSpdySessionPeer::GetNthClientInitiatedStreamId(session_, n);
227 } 238 }
228 239
229 QuicConsumedData SaveIov(const QuicIOVector& data) { 240 QuicConsumedData SaveIov(const QuicIOVector& data) {
230 const iovec* iov = data.iov; 241 const iovec* iov = data.iov;
231 int count = data.iov_count; 242 int count = data.iov_count;
232 int consumed = 0; 243 int consumed = 0;
233 for (int i = 0; i < count; ++i) { 244 for (int i = 0; i < count; ++i) {
234 saved_data_.append(static_cast<char*>(iov[i].iov_base), iov[i].iov_len); 245 saved_data_.append(static_cast<char*>(iov[i].iov_base), iov[i].iov_len);
235 consumed += iov[i].iov_len; 246 consumed += iov[i].iov_len;
236 } 247 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 QuicVersionVector GetVersion() { 365 QuicVersionVector GetVersion() {
355 QuicVersionVector versions; 366 QuicVersionVector versions;
356 versions.push_back(version()); 367 versions.push_back(version());
357 return versions; 368 return versions;
358 } 369 }
359 370
360 void TearDownLocalConnectionState() { 371 void TearDownLocalConnectionState() {
361 QuicConnectionPeer::TearDownLocalConnectionState(connection_); 372 QuicConnectionPeer::TearDownLocalConnectionState(connection_);
362 } 373 }
363 374
364 QuicStreamId NextPromisedStreamId() { return next_promised_stream_id_ += 2; } 375 QuicStreamId NextPromisedStreamId() {
376 return next_promised_stream_id_ += next_stream_id_;
377 }
365 378
366 static const bool kFrameComplete = true; 379 static const bool kFrameComplete = true;
367 static const bool kHasPriority = true; 380 static const bool kHasPriority = true;
368 381
369 const TestParams test_params_; 382 const TestParams test_params_;
370 MockQuicConnectionHelper helper_; 383 MockQuicConnectionHelper helper_;
371 MockAlarmFactory alarm_factory_; 384 MockAlarmFactory alarm_factory_;
372 StrictMock<MockQuicConnection>* connection_; 385 StrictMock<MockQuicConnection>* connection_;
373 StrictMock<MockQuicSpdySession> session_; 386 StrictMock<MockQuicSpdySession> session_;
374 QuicHeadersStream* headers_stream_; 387 QuicHeadersStream* headers_stream_;
375 SpdyHeaderBlock headers_; 388 SpdyHeaderBlock headers_;
376 std::unique_ptr<TestHeadersHandler> headers_handler_; 389 std::unique_ptr<TestHeadersHandler> headers_handler_;
377 string body_; 390 string body_;
378 string saved_data_; 391 string saved_data_;
379 string saved_header_data_; 392 string saved_header_data_;
380 string saved_payloads_; 393 string saved_payloads_;
381 std::unique_ptr<SpdyFramer> framer_; 394 std::unique_ptr<SpdyFramer> framer_;
382 StrictMock<MockVisitor> visitor_; 395 StrictMock<MockVisitor> visitor_;
383 QuicStreamFrame stream_frame_; 396 QuicStreamFrame stream_frame_;
384 QuicStreamId next_promised_stream_id_; 397 QuicStreamId next_promised_stream_id_;
398 QuicStreamId client_id_1_;
399 QuicStreamId client_id_2_;
400 QuicStreamId client_id_3_;
401 QuicStreamId next_stream_id_;
385 }; 402 };
386 403
387 // Run all tests with each version, perspective (client or server), 404 // Run all tests with each version, perspective (client or server),
388 // HTTP/2 and HPACK decoder. 405 // HTTP/2 and HPACK decoder.
389 INSTANTIATE_TEST_CASE_P( 406 INSTANTIATE_TEST_CASE_P(
390 Tests, 407 Tests,
391 QuicHeadersStreamTest, 408 QuicHeadersStreamTest,
392 ::testing::Combine(::testing::ValuesIn(AllSupportedVersions()), 409 ::testing::Combine(::testing::ValuesIn(AllSupportedVersions()),
393 ::testing::Values(Perspective::IS_CLIENT, 410 ::testing::Values(Perspective::IS_CLIENT,
394 Perspective::IS_SERVER), 411 Perspective::IS_SERVER),
395 ::testing::Values(HTTP2_DECODER_SPDY, 412 ::testing::Values(HTTP2_DECODER_SPDY,
396 HTTP2_DECODER_NEW), 413 HTTP2_DECODER_NEW),
397 ::testing::Values(HPACK_DECODER_SPDY, HPACK_DECODER3))); 414 ::testing::Values(HPACK_DECODER_SPDY, HPACK_DECODER3)));
398 415
399 TEST_P(QuicHeadersStreamTest, StreamId) { 416 TEST_P(QuicHeadersStreamTest, StreamId) {
400 EXPECT_EQ(3u, headers_stream_->id()); 417 EXPECT_EQ(3u, headers_stream_->id());
401 } 418 }
402 419
403 TEST_P(QuicHeadersStreamTest, WriteHeaders) { 420 TEST_P(QuicHeadersStreamTest, WriteHeaders) {
404 for (QuicStreamId stream_id = kClientDataStreamId1; 421 for (QuicStreamId stream_id = client_id_1_; stream_id < client_id_3_;
405 stream_id < kClientDataStreamId3; stream_id += 2) { 422 stream_id += next_stream_id_) {
406 for (bool fin : kFins) { 423 for (bool fin : kFins) {
407 if (perspective() == Perspective::IS_SERVER) { 424 if (perspective() == Perspective::IS_SERVER) {
408 WriteAndExpectResponseHeaders(stream_id, fin); 425 WriteAndExpectResponseHeaders(stream_id, fin);
409 } else { 426 } else {
410 for (SpdyPriority priority = 0; priority < 7; ++priority) { 427 for (SpdyPriority priority = 0; priority < 7; ++priority) {
411 // TODO(rch): implement priorities correctly. 428 // TODO(rch): implement priorities correctly.
412 WriteAndExpectRequestHeaders(stream_id, fin, 0); 429 WriteAndExpectRequestHeaders(stream_id, fin, 0);
413 } 430 }
414 } 431 }
415 } 432 }
416 } 433 }
417 } 434 }
418 435
419 TEST_P(QuicHeadersStreamTest, WritePushPromises) { 436 TEST_P(QuicHeadersStreamTest, WritePushPromises) {
420 for (QuicStreamId stream_id = kClientDataStreamId1; 437 for (QuicStreamId stream_id = client_id_1_; stream_id < client_id_3_;
421 stream_id < kClientDataStreamId3; stream_id += 2) { 438 stream_id += next_stream_id_) {
422 QuicStreamId promised_stream_id = NextPromisedStreamId(); 439 QuicStreamId promised_stream_id = NextPromisedStreamId();
423 if (perspective() == Perspective::IS_SERVER) { 440 if (perspective() == Perspective::IS_SERVER) {
424 // Write the headers and capture the outgoing data 441 // Write the headers and capture the outgoing data
425 EXPECT_CALL(session_, WritevData(headers_stream_, kHeadersStreamId, _, _, 442 EXPECT_CALL(session_, WritevData(headers_stream_, kHeadersStreamId, _, _,
426 NO_FIN, _)) 443 NO_FIN, _))
427 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); 444 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov)));
428 session_.WritePushPromise(stream_id, promised_stream_id, 445 session_.WritePushPromise(stream_id, promised_stream_id,
429 headers_.Clone()); 446 headers_.Clone());
430 447
431 // Parse the outgoing data and check that it matches was was written. 448 // Parse the outgoing data and check that it matches was was written.
(...skipping 10 matching lines...) Expand all
442 saved_data_.clear(); 459 saved_data_.clear();
443 } else { 460 } else {
444 EXPECT_QUIC_BUG(session_.WritePushPromise(stream_id, promised_stream_id, 461 EXPECT_QUIC_BUG(session_.WritePushPromise(stream_id, promised_stream_id,
445 headers_.Clone()), 462 headers_.Clone()),
446 "Client shouldn't send PUSH_PROMISE"); 463 "Client shouldn't send PUSH_PROMISE");
447 } 464 }
448 } 465 }
449 } 466 }
450 467
451 TEST_P(QuicHeadersStreamTest, ProcessRawData) { 468 TEST_P(QuicHeadersStreamTest, ProcessRawData) {
452 for (QuicStreamId stream_id = kClientDataStreamId1; 469 for (QuicStreamId stream_id = client_id_1_; stream_id < client_id_3_;
453 stream_id < kClientDataStreamId3; stream_id += 2) { 470 stream_id += next_stream_id_) {
454 for (bool fin : {false, true}) { 471 for (bool fin : {false, true}) {
455 for (SpdyPriority priority = 0; priority < 7; ++priority) { 472 for (SpdyPriority priority = 0; priority < 7; ++priority) {
456 // Replace with "WriteHeadersAndSaveData" 473 // Replace with "WriteHeadersAndSaveData"
457 SpdySerializedFrame frame; 474 SpdySerializedFrame frame;
458 if (perspective() == Perspective::IS_SERVER) { 475 if (perspective() == Perspective::IS_SERVER) {
459 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); 476 SpdyHeadersIR headers_frame(stream_id, headers_.Clone());
460 headers_frame.set_fin(fin); 477 headers_frame.set_fin(fin);
461 headers_frame.set_has_priority(true); 478 headers_frame.set_has_priority(true);
462 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); 479 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0));
463 frame = framer_->SerializeFrame(headers_frame); 480 frame = framer_->SerializeFrame(headers_frame);
(...skipping 12 matching lines...) Expand all
476 stream_frame_.offset += frame.size(); 493 stream_frame_.offset += frame.size();
477 CheckHeaders(); 494 CheckHeaders();
478 } 495 }
479 } 496 }
480 } 497 }
481 } 498 }
482 499
483 TEST_P(QuicHeadersStreamTest, ProcessPushPromise) { 500 TEST_P(QuicHeadersStreamTest, ProcessPushPromise) {
484 if (perspective() == Perspective::IS_SERVER) 501 if (perspective() == Perspective::IS_SERVER)
485 return; 502 return;
486 for (QuicStreamId stream_id = kClientDataStreamId1; 503 for (QuicStreamId stream_id = client_id_1_; stream_id < client_id_3_;
487 stream_id < kClientDataStreamId3; stream_id += 2) { 504 stream_id += next_stream_id_) {
488 QuicStreamId promised_stream_id = NextPromisedStreamId(); 505 QuicStreamId promised_stream_id = NextPromisedStreamId();
489 SpdyPushPromiseIR push_promise(stream_id, promised_stream_id, 506 SpdyPushPromiseIR push_promise(stream_id, promised_stream_id,
490 headers_.Clone()); 507 headers_.Clone());
491 SpdySerializedFrame frame(framer_->SerializeFrame(push_promise)); 508 SpdySerializedFrame frame(framer_->SerializeFrame(push_promise));
492 if (perspective() == Perspective::IS_SERVER) { 509 if (perspective() == Perspective::IS_SERVER) {
493 EXPECT_CALL(*connection_, 510 EXPECT_CALL(*connection_,
494 CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, 511 CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA,
495 "PUSH_PROMISE not supported.", _)) 512 "PUSH_PROMISE not supported.", _))
496 .WillRepeatedly(InvokeWithoutArgs( 513 .WillRepeatedly(InvokeWithoutArgs(
497 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); 514 this, &QuicHeadersStreamTest::TearDownLocalConnectionState));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 headers_stream_->OnStreamFrame(stream_frame_); 547 headers_stream_->OnStreamFrame(stream_frame_);
531 EXPECT_EQ(session_.server_push_enabled(), 548 EXPECT_EQ(session_.server_push_enabled(),
532 perspective() == Perspective::IS_CLIENT); 549 perspective() == Perspective::IS_CLIENT);
533 } 550 }
534 551
535 TEST_P(QuicHeadersStreamTest, EmptyHeaderHOLBlockedTime) { 552 TEST_P(QuicHeadersStreamTest, EmptyHeaderHOLBlockedTime) {
536 EXPECT_CALL(session_, OnHeadersHeadOfLineBlocking(_)).Times(0); 553 EXPECT_CALL(session_, OnHeadersHeadOfLineBlocking(_)).Times(0);
537 InSequence seq; 554 InSequence seq;
538 bool fin = true; 555 bool fin = true;
539 for (int stream_num = 0; stream_num < 10; stream_num++) { 556 for (int stream_num = 0; stream_num < 10; stream_num++) {
540 QuicStreamId stream_id = QuicClientDataStreamId(stream_num); 557 QuicStreamId stream_id = GetNthClientInitiatedId(stream_num);
541 // Replace with "WriteHeadersAndSaveData" 558 // Replace with "WriteHeadersAndSaveData"
542 SpdySerializedFrame frame; 559 SpdySerializedFrame frame;
543 if (perspective() == Perspective::IS_SERVER) { 560 if (perspective() == Perspective::IS_SERVER) {
544 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); 561 SpdyHeadersIR headers_frame(stream_id, headers_.Clone());
545 headers_frame.set_fin(fin); 562 headers_frame.set_fin(fin);
546 headers_frame.set_has_priority(true); 563 headers_frame.set_has_priority(true);
547 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); 564 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0));
548 frame = framer_->SerializeFrame(headers_frame); 565 frame = framer_->SerializeFrame(headers_frame);
549 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); 566 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0));
550 } else { 567 } else {
(...skipping 13 matching lines...) Expand all
564 581
565 TEST_P(QuicHeadersStreamTest, NonEmptyHeaderHOLBlockedTime) { 582 TEST_P(QuicHeadersStreamTest, NonEmptyHeaderHOLBlockedTime) {
566 QuicStreamId stream_id; 583 QuicStreamId stream_id;
567 bool fin = true; 584 bool fin = true;
568 QuicStreamFrame stream_frames[10]; 585 QuicStreamFrame stream_frames[10];
569 SpdySerializedFrame frames[10]; 586 SpdySerializedFrame frames[10];
570 // First create all the frames in order 587 // First create all the frames in order
571 { 588 {
572 InSequence seq; 589 InSequence seq;
573 for (int stream_num = 0; stream_num < 10; ++stream_num) { 590 for (int stream_num = 0; stream_num < 10; ++stream_num) {
574 stream_id = QuicClientDataStreamId(stream_num); 591 stream_id = GetNthClientInitiatedId(stream_num);
575 if (perspective() == Perspective::IS_SERVER) { 592 if (perspective() == Perspective::IS_SERVER) {
576 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); 593 SpdyHeadersIR headers_frame(stream_id, headers_.Clone());
577 headers_frame.set_fin(fin); 594 headers_frame.set_fin(fin);
578 headers_frame.set_has_priority(true); 595 headers_frame.set_has_priority(true);
579 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); 596 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0));
580 frames[stream_num] = framer_->SerializeFrame(headers_frame); 597 frames[stream_num] = framer_->SerializeFrame(headers_frame);
581 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)).Times(1); 598 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)).Times(1);
582 } else { 599 } else {
583 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); 600 SpdyHeadersIR headers_frame(stream_id, headers_.Clone());
584 headers_frame.set_fin(fin); 601 headers_frame.set_fin(fin);
(...skipping 22 matching lines...) Expand all
607 } 624 }
608 625
609 TEST_P(QuicHeadersStreamTest, ProcessLargeRawData) { 626 TEST_P(QuicHeadersStreamTest, ProcessLargeRawData) {
610 QuicSpdySessionPeer::SetMaxUncompressedHeaderBytes(&session_, 256 * 1024); 627 QuicSpdySessionPeer::SetMaxUncompressedHeaderBytes(&session_, 256 * 1024);
611 // We want to create a frame that is more than the SPDY Framer's max control 628 // We want to create a frame that is more than the SPDY Framer's max control
612 // frame size, which is 16K, but less than the HPACK decoders max decode 629 // frame size, which is 16K, but less than the HPACK decoders max decode
613 // buffer size, which is 32K. 630 // buffer size, which is 32K.
614 headers_["key0"] = string(1 << 13, '.'); 631 headers_["key0"] = string(1 << 13, '.');
615 headers_["key1"] = string(1 << 13, '.'); 632 headers_["key1"] = string(1 << 13, '.');
616 headers_["key2"] = string(1 << 13, '.'); 633 headers_["key2"] = string(1 << 13, '.');
617 for (QuicStreamId stream_id = kClientDataStreamId1; 634 for (QuicStreamId stream_id = client_id_1_; stream_id < client_id_3_;
618 stream_id < kClientDataStreamId3; stream_id += 2) { 635 stream_id += next_stream_id_) {
619 for (bool fin : {false, true}) { 636 for (bool fin : {false, true}) {
620 for (SpdyPriority priority = 0; priority < 7; ++priority) { 637 for (SpdyPriority priority = 0; priority < 7; ++priority) {
621 // Replace with "WriteHeadersAndSaveData" 638 // Replace with "WriteHeadersAndSaveData"
622 SpdySerializedFrame frame; 639 SpdySerializedFrame frame;
623 if (perspective() == Perspective::IS_SERVER) { 640 if (perspective() == Perspective::IS_SERVER) {
624 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); 641 SpdyHeadersIR headers_frame(stream_id, headers_.Clone());
625 headers_frame.set_fin(fin); 642 headers_frame.set_fin(fin);
626 headers_frame.set_has_priority(true); 643 headers_frame.set_has_priority(true);
627 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); 644 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0));
628 frame = framer_->SerializeFrame(headers_frame); 645 frame = framer_->SerializeFrame(headers_frame);
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 } 855 }
839 } 856 }
840 QuicSpdySessionPeer::SetHpackDecoderDebugVisitor( 857 QuicSpdySessionPeer::SetHpackDecoderDebugVisitor(
841 &session_, std::move(hpack_decoder_visitor)); 858 &session_, std::move(hpack_decoder_visitor));
842 859
843 // Create some headers we expect to generate entries in HPACK's 860 // Create some headers we expect to generate entries in HPACK's
844 // dynamic table, in addition to content-length. 861 // dynamic table, in addition to content-length.
845 headers_["key0"] = string(1 << 1, '.'); 862 headers_["key0"] = string(1 << 1, '.');
846 headers_["key1"] = string(1 << 2, '.'); 863 headers_["key1"] = string(1 << 2, '.');
847 headers_["key2"] = string(1 << 3, '.'); 864 headers_["key2"] = string(1 << 3, '.');
848 for (QuicStreamId stream_id = kClientDataStreamId1; 865 for (QuicStreamId stream_id = client_id_1_; stream_id < client_id_3_;
849 stream_id < kClientDataStreamId3; stream_id += 2) { 866 stream_id += next_stream_id_) {
850 for (bool fin : {false, true}) { 867 for (bool fin : {false, true}) {
851 for (SpdyPriority priority = 0; priority < 7; ++priority) { 868 for (SpdyPriority priority = 0; priority < 7; ++priority) {
852 // Replace with "WriteHeadersAndSaveData" 869 // Replace with "WriteHeadersAndSaveData"
853 SpdySerializedFrame frame; 870 SpdySerializedFrame frame;
854 if (perspective() == Perspective::IS_SERVER) { 871 if (perspective() == Perspective::IS_SERVER) {
855 SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); 872 SpdyHeadersIR headers_frame(stream_id, headers_.Clone());
856 headers_frame.set_fin(fin); 873 headers_frame.set_fin(fin);
857 headers_frame.set_has_priority(true); 874 headers_frame.set_has_priority(true);
858 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); 875 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0));
859 frame = framer_->SerializeFrame(headers_frame); 876 frame = framer_->SerializeFrame(headers_frame);
(...skipping 29 matching lines...) Expand all
889 } else { 906 } else {
890 InSequence seq; 907 InSequence seq;
891 for (int i = 1; i < 28; i++) { 908 for (int i = 1; i < 28; i++) {
892 EXPECT_CALL(*hpack_encoder_visitor, 909 EXPECT_CALL(*hpack_encoder_visitor,
893 OnUseEntry(QuicTime::Delta::FromMilliseconds(i))); 910 OnUseEntry(QuicTime::Delta::FromMilliseconds(i)));
894 } 911 }
895 } 912 }
896 QuicSpdySessionPeer::SetHpackEncoderDebugVisitor( 913 QuicSpdySessionPeer::SetHpackEncoderDebugVisitor(
897 &session_, std::move(hpack_encoder_visitor)); 914 &session_, std::move(hpack_encoder_visitor));
898 915
899 for (QuicStreamId stream_id = kClientDataStreamId1; 916 for (QuicStreamId stream_id = client_id_1_; stream_id < client_id_3_;
900 stream_id < kClientDataStreamId3; stream_id += 2) { 917 stream_id += next_stream_id_) {
901 for (bool fin : {false, true}) { 918 for (bool fin : {false, true}) {
902 if (perspective() == Perspective::IS_SERVER) { 919 if (perspective() == Perspective::IS_SERVER) {
903 WriteAndExpectResponseHeaders(stream_id, fin); 920 WriteAndExpectResponseHeaders(stream_id, fin);
904 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); 921 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
905 } else { 922 } else {
906 for (SpdyPriority priority = 0; priority < 7; ++priority) { 923 for (SpdyPriority priority = 0; priority < 7; ++priority) {
907 // TODO(rch): implement priorities correctly. 924 // TODO(rch): implement priorities correctly.
908 WriteAndExpectRequestHeaders(stream_id, fin, 0); 925 WriteAndExpectRequestHeaders(stream_id, fin, 0);
909 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); 926 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
910 } 927 }
911 } 928 }
912 } 929 }
913 } 930 }
914 } 931 }
915 932
916 TEST_P(QuicHeadersStreamTest, WritevStreamData) { 933 TEST_P(QuicHeadersStreamTest, WritevStreamData) {
917 QuicStreamId id = kClientDataStreamId1; 934 QuicStreamId id = client_id_1_;
918 QuicStreamOffset offset = 0; 935 QuicStreamOffset offset = 0;
919 struct iovec iov; 936 struct iovec iov;
920 937
921 // This test will issue a write that will require fragmenting into 938 // This test will issue a write that will require fragmenting into
922 // multiple HTTP/2 DATA frames. 939 // multiple HTTP/2 DATA frames.
923 const int kMinDataFrames = 4; 940 const int kMinDataFrames = 4;
924 const size_t data_len = kSpdyInitialFrameSizeLimit * kMinDataFrames + 1024; 941 const size_t data_len = kSpdyInitialFrameSizeLimit * kMinDataFrames + 1024;
925 // Set headers stream send window large enough for data written below. 942 // Set headers stream send window large enough for data written below.
926 headers_stream_->flow_controller()->UpdateSendWindowOffset(data_len * 2 * 4); 943 headers_stream_->flow_controller()->UpdateSendWindowOffset(data_len * 2 * 4);
927 string data(data_len, 'a'); 944 string data(data_len, 'a');
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
969 TEST_P(QuicHeadersStreamTest, WritevStreamDataFinOnly) { 986 TEST_P(QuicHeadersStreamTest, WritevStreamDataFinOnly) {
970 struct iovec iov; 987 struct iovec iov;
971 string data; 988 string data;
972 989
973 EXPECT_CALL(session_, 990 EXPECT_CALL(session_,
974 WritevData(headers_stream_, kHeadersStreamId, _, _, NO_FIN, _)) 991 WritevData(headers_stream_, kHeadersStreamId, _, _, NO_FIN, _))
975 .WillOnce(WithArgs<2, 5>( 992 .WillOnce(WithArgs<2, 5>(
976 Invoke(this, &QuicHeadersStreamTest::SaveIovAndNotifyAckListener))); 993 Invoke(this, &QuicHeadersStreamTest::SaveIovAndNotifyAckListener)));
977 994
978 QuicConsumedData consumed_data = session_.WritevStreamData( 995 QuicConsumedData consumed_data = session_.WritevStreamData(
979 kClientDataStreamId1, MakeIOVector(data, &iov), 0, true, nullptr); 996 client_id_1_, MakeIOVector(data, &iov), 0, true, nullptr);
980 997
981 EXPECT_EQ(consumed_data.bytes_consumed, 0u); 998 EXPECT_EQ(consumed_data.bytes_consumed, 0u);
982 EXPECT_EQ(consumed_data.fin_consumed, true); 999 EXPECT_EQ(consumed_data.fin_consumed, true);
983 } 1000 }
984 1001
985 TEST_P(QuicHeadersStreamTest, WritevStreamDataSendBlocked) { 1002 TEST_P(QuicHeadersStreamTest, WritevStreamDataSendBlocked) {
986 QuicStreamId id = kClientDataStreamId1; 1003 QuicStreamId id = client_id_1_;
987 QuicStreamOffset offset = 0; 1004 QuicStreamOffset offset = 0;
988 struct iovec iov; 1005 struct iovec iov;
989 1006
990 // This test will issue a write that will require fragmenting into 1007 // This test will issue a write that will require fragmenting into
991 // multiple HTTP/2 DATA frames. It will ensure that only 1 frame 1008 // multiple HTTP/2 DATA frames. It will ensure that only 1 frame
992 // will go out in the case that the underlying session becomes write 1009 // will go out in the case that the underlying session becomes write
993 // blocked. Buffering is required to preserve framing, but the 1010 // blocked. Buffering is required to preserve framing, but the
994 // amount of buffering is limited to one HTTP/2 data frame. 1011 // amount of buffering is limited to one HTTP/2 data frame.
995 const int kMinDataFrames = 4; 1012 const int kMinDataFrames = 4;
996 const size_t data_len = kSpdyInitialFrameSizeLimit * kMinDataFrames + 1024; 1013 const size_t data_len = kSpdyInitialFrameSizeLimit * kMinDataFrames + 1024;
(...skipping 23 matching lines...) Expand all
1020 consumed_data = session_.WritevStreamData(id, MakeIOVector(data, &iov), 1037 consumed_data = session_.WritevStreamData(id, MakeIOVector(data, &iov),
1021 offset, fin, nullptr); 1038 offset, fin, nullptr);
1022 1039
1023 EXPECT_EQ(consumed_data.bytes_consumed, 0u); 1040 EXPECT_EQ(consumed_data.bytes_consumed, 0u);
1024 EXPECT_EQ(consumed_data.fin_consumed, false); 1041 EXPECT_EQ(consumed_data.fin_consumed, false);
1025 } 1042 }
1026 1043
1027 } // namespace 1044 } // namespace
1028 } // namespace test 1045 } // namespace test
1029 } // namespace net 1046 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_flags_list.h ('k') | net/quic/core/quic_packet_creator_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698