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

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

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