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

Side by Side Diff: net/http/bidirectional_stream_unittest.cc

Issue 2156643002: Move ~1000 SpdySerializedFrame instances from heap to stack in tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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 | « no previous file | net/http/http_network_transaction_unittest.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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/http/bidirectional_stream.h" 5 #include "net/http/bidirectional_stream.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 delegate->Start(std::move(request_info), session.get()); 416 delegate->Start(std::move(request_info), session.get());
417 // Reset stream right before the OnFailed task is executed. 417 // Reset stream right before the OnFailed task is executed.
418 delegate.reset(); 418 delegate.reset();
419 419
420 base::RunLoop().RunUntilIdle(); 420 base::RunLoop().RunUntilIdle();
421 } 421 }
422 422
423 // Simulates user calling ReadData after END_STREAM has been received in 423 // Simulates user calling ReadData after END_STREAM has been received in
424 // BidirectionalStreamSpdyImpl. 424 // BidirectionalStreamSpdyImpl.
425 TEST_F(BidirectionalStreamTest, TestReadDataAfterClose) { 425 TEST_F(BidirectionalStreamTest, TestReadDataAfterClose) {
426 std::unique_ptr<SpdySerializedFrame> req( 426 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
427 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
428 // Empty DATA frame with an END_STREAM flag. 427 // Empty DATA frame with an END_STREAM flag.
429 std::unique_ptr<SpdySerializedFrame> end_stream( 428 SpdySerializedFrame end_stream(
430 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); 429 spdy_util_.ConstructSpdyDataFrame(1, nullptr, 0, true));
431 MockWrite writes[] = { 430 MockWrite writes[] = {
432 CreateMockWrite(*req.get(), 0), 431 CreateMockWrite(req, 0),
433 }; 432 };
434 433
435 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; 434 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
436 435
437 std::unique_ptr<SpdySerializedFrame> resp( 436 SpdySerializedFrame resp(
438 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); 437 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
439 438
440 std::unique_ptr<SpdySerializedFrame> body_frame( 439 SpdySerializedFrame body_frame(spdy_util_.ConstructSpdyDataFrame(1, false));
441 spdy_util_.ConstructSpdyBodyFrame(1, false));
442 // Last body frame has END_STREAM flag set. 440 // Last body frame has END_STREAM flag set.
443 std::unique_ptr<SpdySerializedFrame> last_body_frame( 441 SpdySerializedFrame last_body_frame(
444 spdy_util_.ConstructSpdyBodyFrame(1, true)); 442 spdy_util_.ConstructSpdyDataFrame(1, true));
445 443
446 MockRead reads[] = { 444 MockRead reads[] = {
447 CreateMockRead(*resp, 1), 445 CreateMockRead(resp, 1),
448 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. 446 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause.
449 CreateMockRead(*body_frame, 3), 447 CreateMockRead(body_frame, 3),
450 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. 448 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause.
451 CreateMockRead(*body_frame, 5), 449 CreateMockRead(body_frame, 5),
452 CreateMockRead(*last_body_frame, 6), 450 CreateMockRead(last_body_frame, 6),
453 MockRead(SYNCHRONOUS, 0, 7), 451 MockRead(SYNCHRONOUS, 0, 7),
454 }; 452 };
455 453
456 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 454 InitSession(reads, arraysize(reads), writes, arraysize(writes));
457 455
458 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 456 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
459 new BidirectionalStreamRequestInfo); 457 new BidirectionalStreamRequestInfo);
460 request_info->method = "GET"; 458 request_info->method = "GET";
461 request_info->url = default_url_; 459 request_info->url = default_url_;
462 request_info->end_stream_on_headers = true; 460 request_info->end_stream_on_headers = true;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 EXPECT_EQ(0, delegate->on_data_sent_count()); 501 EXPECT_EQ(0, delegate->on_data_sent_count());
504 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); 502 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol());
505 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), 503 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)),
506 delegate->GetTotalSentBytes()); 504 delegate->GetTotalSentBytes());
507 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), 505 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)),
508 delegate->GetTotalReceivedBytes()); 506 delegate->GetTotalReceivedBytes());
509 } 507 }
510 508
511 // Tests that the NetLog contains correct entries. 509 // Tests that the NetLog contains correct entries.
512 TEST_F(BidirectionalStreamTest, TestNetLogContainEntries) { 510 TEST_F(BidirectionalStreamTest, TestNetLogContainEntries) {
513 BufferedSpdyFramer framer; 511 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
514
515 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
516 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); 512 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0));
517 std::unique_ptr<SpdySerializedFrame> data_frame( 513 SpdySerializedFrame data_frame(spdy_util_.ConstructSpdyDataFrame(
518 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_FIN)); 514 1, kBodyData, kBodyDataSize, /*fin=*/true));
519 MockWrite writes[] = { 515 MockWrite writes[] = {
520 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame, 3), 516 CreateMockWrite(req, 0), CreateMockWrite(data_frame, 3),
521 }; 517 };
522 518
523 std::unique_ptr<SpdySerializedFrame> resp( 519 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
524 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 520 SpdySerializedFrame response_body_frame1(
525 std::unique_ptr<SpdySerializedFrame> response_body_frame1( 521 spdy_util_.ConstructSpdyDataFrame(1, false));
526 spdy_util_.ConstructSpdyBodyFrame(1, false)); 522 SpdySerializedFrame response_body_frame2(
527 std::unique_ptr<SpdySerializedFrame> response_body_frame2( 523 spdy_util_.ConstructSpdyDataFrame(1, false));
528 spdy_util_.ConstructSpdyBodyFrame(1, false));
529 524
530 SpdyHeaderBlock trailers; 525 SpdyHeaderBlock trailers;
531 trailers["foo"] = "bar"; 526 trailers["foo"] = "bar";
532 std::unique_ptr<SpdySerializedFrame> response_trailers( 527 SpdySerializedFrame response_trailers(
533 spdy_util_.ConstructSpdyResponseHeaders(1, std::move(trailers), true)); 528 spdy_util_.ConstructSpdyResponseHeaders(1, std::move(trailers), true));
534 529
535 MockRead reads[] = { 530 MockRead reads[] = {
536 CreateMockRead(*resp, 1), 531 CreateMockRead(resp, 1),
537 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. 532 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause.
538 CreateMockRead(*response_body_frame1, 4), 533 CreateMockRead(response_body_frame1, 4),
539 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. 534 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause.
540 CreateMockRead(*response_body_frame2, 6), 535 CreateMockRead(response_body_frame2, 6),
541 CreateMockRead(*response_trailers, 7), 536 CreateMockRead(response_trailers, 7),
542 MockRead(ASYNC, 0, 8), 537 MockRead(ASYNC, 0, 8),
543 }; 538 };
544 539
545 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 540 InitSession(reads, arraysize(reads), writes, arraysize(writes));
546 541
547 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 542 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
548 new BidirectionalStreamRequestInfo); 543 new BidirectionalStreamRequestInfo);
549 request_info->method = "POST"; 544 request_info->method = "POST";
550 request_info->url = default_url_; 545 request_info->url = default_url_;
551 request_info->priority = LOWEST; 546 request_info->priority = LOWEST;
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 entries, index, NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_RECEIVED, 641 entries, index, NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_RECEIVED,
647 NetLog::PHASE_NONE); 642 NetLog::PHASE_NONE);
648 entry = entries[index]; 643 entry = entries[index];
649 EXPECT_EQ(NetLog::SOURCE_BIDIRECTIONAL_STREAM, entry.source.type); 644 EXPECT_EQ(NetLog::SOURCE_BIDIRECTIONAL_STREAM, entry.source.type);
650 ExpectLogContainsSomewhere(entries, index, 645 ExpectLogContainsSomewhere(entries, index,
651 NetLog::TYPE_BIDIRECTIONAL_STREAM_ALIVE, 646 NetLog::TYPE_BIDIRECTIONAL_STREAM_ALIVE,
652 NetLog::PHASE_END); 647 NetLog::PHASE_END);
653 } 648 }
654 649
655 TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) { 650 TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) {
656 BufferedSpdyFramer framer; 651 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
657
658 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
659 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); 652 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0));
660 std::unique_ptr<SpdySerializedFrame> data_frame1( 653 SpdySerializedFrame data_frame1(spdy_util_.ConstructSpdyDataFrame(
661 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); 654 1, kBodyData, kBodyDataSize, /*fin=*/false));
662 std::unique_ptr<SpdySerializedFrame> data_frame2( 655 SpdySerializedFrame data_frame2(spdy_util_.ConstructSpdyDataFrame(
663 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); 656 1, kBodyData, kBodyDataSize, /*fin=*/false));
664 std::unique_ptr<SpdySerializedFrame> data_frame3( 657 SpdySerializedFrame data_frame3(spdy_util_.ConstructSpdyDataFrame(
665 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_FIN)); 658 1, kBodyData, kBodyDataSize, /*fin=*/true));
666 MockWrite writes[] = { 659 MockWrite writes[] = {
667 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame1, 3), 660 CreateMockWrite(req, 0), CreateMockWrite(data_frame1, 3),
668 CreateMockWrite(*data_frame2, 6), CreateMockWrite(*data_frame3, 9), 661 CreateMockWrite(data_frame2, 6), CreateMockWrite(data_frame3, 9),
669 }; 662 };
670 663
671 std::unique_ptr<SpdySerializedFrame> resp( 664 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
672 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 665 SpdySerializedFrame response_body_frame1(
673 std::unique_ptr<SpdySerializedFrame> response_body_frame1( 666 spdy_util_.ConstructSpdyDataFrame(1, false));
674 spdy_util_.ConstructSpdyBodyFrame(1, false)); 667 SpdySerializedFrame response_body_frame2(
675 std::unique_ptr<SpdySerializedFrame> response_body_frame2( 668 spdy_util_.ConstructSpdyDataFrame(1, true));
676 spdy_util_.ConstructSpdyBodyFrame(1, true));
677 669
678 MockRead reads[] = { 670 MockRead reads[] = {
679 CreateMockRead(*resp, 1), 671 CreateMockRead(resp, 1),
680 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. 672 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause.
681 CreateMockRead(*response_body_frame1, 4), 673 CreateMockRead(response_body_frame1, 4),
682 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. 674 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause.
683 CreateMockRead(*response_body_frame2, 7), 675 CreateMockRead(response_body_frame2, 7),
684 MockRead(ASYNC, ERR_IO_PENDING, 8), // Force a pause. 676 MockRead(ASYNC, ERR_IO_PENDING, 8), // Force a pause.
685 MockRead(ASYNC, 0, 10), 677 MockRead(ASYNC, 0, 10),
686 }; 678 };
687 679
688 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 680 InitSession(reads, arraysize(reads), writes, arraysize(writes));
689 681
690 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 682 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
691 new BidirectionalStreamRequestInfo); 683 new BidirectionalStreamRequestInfo);
692 request_info->method = "POST"; 684 request_info->method = "POST";
693 request_info->url = default_url_; 685 request_info->url = default_url_;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 EXPECT_EQ(2, delegate->on_data_read_count()); 742 EXPECT_EQ(2, delegate->on_data_read_count());
751 EXPECT_EQ(3, delegate->on_data_sent_count()); 743 EXPECT_EQ(3, delegate->on_data_sent_count());
752 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); 744 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol());
753 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), 745 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)),
754 delegate->GetTotalSentBytes()); 746 delegate->GetTotalSentBytes());
755 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), 747 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)),
756 delegate->GetTotalReceivedBytes()); 748 delegate->GetTotalReceivedBytes());
757 } 749 }
758 750
759 TEST_F(BidirectionalStreamTest, TestCoalesceSmallDataBuffers) { 751 TEST_F(BidirectionalStreamTest, TestCoalesceSmallDataBuffers) {
760 BufferedSpdyFramer framer; 752 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
761
762 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
763 kDefaultUrl, 1, kBodyDataSize * 1, LOWEST, nullptr, 0)); 753 kDefaultUrl, 1, kBodyDataSize * 1, LOWEST, nullptr, 0));
764 std::string body_data = "some really long piece of data"; 754 std::string body_data = "some really long piece of data";
765 std::unique_ptr<SpdySerializedFrame> data_frame1(framer.CreateDataFrame( 755 SpdySerializedFrame data_frame1(spdy_util_.ConstructSpdyDataFrame(
766 1, body_data.c_str(), body_data.size(), DATA_FLAG_FIN)); 756 1, body_data.c_str(), body_data.size(), /*fin=*/true));
767 MockWrite writes[] = { 757 MockWrite writes[] = {
768 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame1, 1), 758 CreateMockWrite(req, 0), CreateMockWrite(data_frame1, 1),
769 }; 759 };
770 760
771 std::unique_ptr<SpdySerializedFrame> resp( 761 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
772 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 762 SpdySerializedFrame response_body_frame1(
773 std::unique_ptr<SpdySerializedFrame> response_body_frame1( 763 spdy_util_.ConstructSpdyDataFrame(1, true));
774 spdy_util_.ConstructSpdyBodyFrame(1, true));
775 MockRead reads[] = { 764 MockRead reads[] = {
776 CreateMockRead(*resp, 2), 765 CreateMockRead(resp, 2),
777 MockRead(ASYNC, ERR_IO_PENDING, 3), // Force a pause. 766 MockRead(ASYNC, ERR_IO_PENDING, 3), // Force a pause.
778 CreateMockRead(*response_body_frame1, 4), MockRead(ASYNC, 0, 5), 767 CreateMockRead(response_body_frame1, 4), MockRead(ASYNC, 0, 5),
779 }; 768 };
780 769
781 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 770 InitSession(reads, arraysize(reads), writes, arraysize(writes));
782 771
783 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 772 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
784 new BidirectionalStreamRequestInfo); 773 new BidirectionalStreamRequestInfo);
785 request_info->method = "POST"; 774 request_info->method = "POST";
786 request_info->url = default_url_; 775 request_info->url = default_url_;
787 request_info->priority = LOWEST; 776 request_info->priority = LOWEST;
788 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, 777 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength,
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 EXPECT_EQ(buf2->size(), byte_count); 845 EXPECT_EQ(buf2->size(), byte_count);
857 846
858 ExpectLogContainsSomewhere( 847 ExpectLogContainsSomewhere(
859 entries, index, NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_SENT_COALESCED, 848 entries, index, NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_SENT_COALESCED,
860 NetLog::PHASE_END); 849 NetLog::PHASE_END);
861 } 850 }
862 851
863 // Tests that BidirectionalStreamSpdyImpl::OnClose will complete any remaining 852 // Tests that BidirectionalStreamSpdyImpl::OnClose will complete any remaining
864 // read even if the read queue is empty. 853 // read even if the read queue is empty.
865 TEST_F(BidirectionalStreamTest, TestCompleteAsyncRead) { 854 TEST_F(BidirectionalStreamTest, TestCompleteAsyncRead) {
866 std::unique_ptr<SpdySerializedFrame> req( 855 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
867 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
868 // Empty DATA frame with an END_STREAM flag. 856 // Empty DATA frame with an END_STREAM flag.
869 std::unique_ptr<SpdySerializedFrame> end_stream( 857 SpdySerializedFrame end_stream(
870 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); 858 spdy_util_.ConstructSpdyDataFrame(1, nullptr, 0, true));
871 859
872 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; 860 MockWrite writes[] = {CreateMockWrite(req, 0)};
873 861
874 std::unique_ptr<SpdySerializedFrame> resp( 862 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
875 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
876 863
877 std::unique_ptr<SpdySerializedFrame> response_body_frame( 864 SpdySerializedFrame response_body_frame(
878 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); 865 spdy_util_.ConstructSpdyDataFrame(1, nullptr, 0, true));
879 866
880 MockRead reads[] = { 867 MockRead reads[] = {
881 CreateMockRead(*resp, 1), 868 CreateMockRead(resp, 1),
882 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. 869 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause.
883 CreateMockRead(*response_body_frame, 3), MockRead(SYNCHRONOUS, 0, 4), 870 CreateMockRead(response_body_frame, 3), MockRead(SYNCHRONOUS, 0, 4),
884 }; 871 };
885 872
886 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 873 InitSession(reads, arraysize(reads), writes, arraysize(writes));
887 874
888 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 875 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
889 new BidirectionalStreamRequestInfo); 876 new BidirectionalStreamRequestInfo);
890 request_info->method = "GET"; 877 request_info->method = "GET";
891 request_info->url = default_url_; 878 request_info->url = default_url_;
892 request_info->priority = LOWEST; 879 request_info->priority = LOWEST;
893 request_info->end_stream_on_headers = true; 880 request_info->end_stream_on_headers = true;
(...skipping 21 matching lines...) Expand all
915 EXPECT_EQ(0u, delegate->data_received().size()); 902 EXPECT_EQ(0u, delegate->data_received().size());
916 EXPECT_EQ(0, delegate->on_data_sent_count()); 903 EXPECT_EQ(0, delegate->on_data_sent_count());
917 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); 904 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol());
918 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), 905 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)),
919 delegate->GetTotalSentBytes()); 906 delegate->GetTotalSentBytes());
920 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), 907 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)),
921 delegate->GetTotalReceivedBytes()); 908 delegate->GetTotalReceivedBytes());
922 } 909 }
923 910
924 TEST_F(BidirectionalStreamTest, TestBuffering) { 911 TEST_F(BidirectionalStreamTest, TestBuffering) {
925 std::unique_ptr<SpdySerializedFrame> req( 912 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
926 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
927 // Empty DATA frame with an END_STREAM flag. 913 // Empty DATA frame with an END_STREAM flag.
928 std::unique_ptr<SpdySerializedFrame> end_stream( 914 SpdySerializedFrame end_stream(
929 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); 915 spdy_util_.ConstructSpdyDataFrame(1, nullptr, 0, true));
930 916
931 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; 917 MockWrite writes[] = {CreateMockWrite(req, 0)};
932 918
933 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; 919 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
934 920
935 std::unique_ptr<SpdySerializedFrame> resp( 921 SpdySerializedFrame resp(
936 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); 922 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
937 923
938 std::unique_ptr<SpdySerializedFrame> body_frame( 924 SpdySerializedFrame body_frame(spdy_util_.ConstructSpdyDataFrame(1, false));
939 spdy_util_.ConstructSpdyBodyFrame(1, false));
940 // Last body frame has END_STREAM flag set. 925 // Last body frame has END_STREAM flag set.
941 std::unique_ptr<SpdySerializedFrame> last_body_frame( 926 SpdySerializedFrame last_body_frame(
942 spdy_util_.ConstructSpdyBodyFrame(1, true)); 927 spdy_util_.ConstructSpdyDataFrame(1, true));
943 928
944 MockRead reads[] = { 929 MockRead reads[] = {
945 CreateMockRead(*resp, 1), 930 CreateMockRead(resp, 1),
946 CreateMockRead(*body_frame, 2), 931 CreateMockRead(body_frame, 2),
947 CreateMockRead(*body_frame, 3), 932 CreateMockRead(body_frame, 3),
948 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. 933 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause.
949 CreateMockRead(*last_body_frame, 5), 934 CreateMockRead(last_body_frame, 5),
950 MockRead(SYNCHRONOUS, 0, 6), 935 MockRead(SYNCHRONOUS, 0, 6),
951 }; 936 };
952 937
953 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 938 InitSession(reads, arraysize(reads), writes, arraysize(writes));
954 939
955 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 940 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
956 new BidirectionalStreamRequestInfo); 941 new BidirectionalStreamRequestInfo);
957 request_info->method = "GET"; 942 request_info->method = "GET";
958 request_info->url = default_url_; 943 request_info->url = default_url_;
959 request_info->priority = LOWEST; 944 request_info->priority = LOWEST;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
996 EXPECT_EQ("header-value", response_headers.find("header-name")->second); 981 EXPECT_EQ("header-value", response_headers.find("header-name")->second);
997 EXPECT_EQ(0, delegate->on_data_sent_count()); 982 EXPECT_EQ(0, delegate->on_data_sent_count());
998 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); 983 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol());
999 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), 984 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)),
1000 delegate->GetTotalSentBytes()); 985 delegate->GetTotalSentBytes());
1001 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), 986 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)),
1002 delegate->GetTotalReceivedBytes()); 987 delegate->GetTotalReceivedBytes());
1003 } 988 }
1004 989
1005 TEST_F(BidirectionalStreamTest, TestBufferingWithTrailers) { 990 TEST_F(BidirectionalStreamTest, TestBufferingWithTrailers) {
1006 std::unique_ptr<SpdySerializedFrame> req( 991 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1007 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1008 // Empty DATA frame with an END_STREAM flag. 992 // Empty DATA frame with an END_STREAM flag.
1009 std::unique_ptr<SpdySerializedFrame> end_stream( 993 SpdySerializedFrame end_stream(
1010 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); 994 spdy_util_.ConstructSpdyDataFrame(1, nullptr, 0, true));
1011 995
1012 MockWrite writes[] = { 996 MockWrite writes[] = {
1013 CreateMockWrite(*req.get(), 0), 997 CreateMockWrite(req, 0),
1014 }; 998 };
1015 999
1016 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; 1000 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
1017 1001
1018 std::unique_ptr<SpdySerializedFrame> resp( 1002 SpdySerializedFrame resp(
1019 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); 1003 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
1020 1004
1021 std::unique_ptr<SpdySerializedFrame> body_frame( 1005 SpdySerializedFrame body_frame(spdy_util_.ConstructSpdyDataFrame(1, false));
1022 spdy_util_.ConstructSpdyBodyFrame(1, false));
1023 1006
1024 SpdyHeaderBlock trailers; 1007 SpdyHeaderBlock trailers;
1025 trailers["foo"] = "bar"; 1008 trailers["foo"] = "bar";
1026 std::unique_ptr<SpdySerializedFrame> response_trailers( 1009 SpdySerializedFrame response_trailers(
1027 spdy_util_.ConstructSpdyResponseHeaders(1, std::move(trailers), true)); 1010 spdy_util_.ConstructSpdyResponseHeaders(1, std::move(trailers), true));
1028 1011
1029 MockRead reads[] = { 1012 MockRead reads[] = {
1030 CreateMockRead(*resp, 1), 1013 CreateMockRead(resp, 1),
1031 CreateMockRead(*body_frame, 2), 1014 CreateMockRead(body_frame, 2),
1032 CreateMockRead(*body_frame, 3), 1015 CreateMockRead(body_frame, 3),
1033 CreateMockRead(*body_frame, 4), 1016 CreateMockRead(body_frame, 4),
1034 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. 1017 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause.
1035 CreateMockRead(*response_trailers, 6), 1018 CreateMockRead(response_trailers, 6),
1036 MockRead(SYNCHRONOUS, 0, 7), 1019 MockRead(SYNCHRONOUS, 0, 7),
1037 }; 1020 };
1038 1021
1039 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 1022 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1040 1023
1041 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1024 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
1042 MockTimer* timer = new MockTimer(); 1025 MockTimer* timer = new MockTimer();
1043 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( 1026 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
1044 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); 1027 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
1045 1028
(...skipping 30 matching lines...) Expand all
1076 EXPECT_EQ("bar", delegate->trailers().find("foo")->second); 1059 EXPECT_EQ("bar", delegate->trailers().find("foo")->second);
1077 EXPECT_EQ(0, delegate->on_data_sent_count()); 1060 EXPECT_EQ(0, delegate->on_data_sent_count());
1078 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); 1061 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol());
1079 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), 1062 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)),
1080 delegate->GetTotalSentBytes()); 1063 delegate->GetTotalSentBytes());
1081 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), 1064 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)),
1082 delegate->GetTotalReceivedBytes()); 1065 delegate->GetTotalReceivedBytes());
1083 } 1066 }
1084 1067
1085 TEST_F(BidirectionalStreamTest, CancelStreamAfterSendData) { 1068 TEST_F(BidirectionalStreamTest, CancelStreamAfterSendData) {
1086 BufferedSpdyFramer framer; 1069 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
1087
1088 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
1089 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); 1070 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0));
1090 std::unique_ptr<SpdySerializedFrame> data_frame( 1071 SpdySerializedFrame data_frame(spdy_util_.ConstructSpdyDataFrame(
1091 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); 1072 1, kBodyData, kBodyDataSize, /*fin=*/false));
1092 std::unique_ptr<SpdySerializedFrame> rst( 1073 SpdySerializedFrame rst(
1093 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1074 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1094 1075
1095 MockWrite writes[] = { 1076 MockWrite writes[] = {
1096 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame, 3), 1077 CreateMockWrite(req, 0), CreateMockWrite(data_frame, 3),
1097 CreateMockWrite(*rst, 5), 1078 CreateMockWrite(rst, 5),
1098 }; 1079 };
1099 1080
1100 std::unique_ptr<SpdySerializedFrame> resp( 1081 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
1101 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 1082 SpdySerializedFrame response_body_frame(
1102 std::unique_ptr<SpdySerializedFrame> response_body_frame( 1083 spdy_util_.ConstructSpdyDataFrame(1, false));
1103 spdy_util_.ConstructSpdyBodyFrame(1, false));
1104 1084
1105 MockRead reads[] = { 1085 MockRead reads[] = {
1106 CreateMockRead(*resp, 1), 1086 CreateMockRead(resp, 1),
1107 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. 1087 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause.
1108 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. 1088 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause.
1109 MockRead(ASYNC, 0, 6), 1089 MockRead(ASYNC, 0, 6),
1110 }; 1090 };
1111 1091
1112 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 1092 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1113 1093
1114 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1094 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1115 new BidirectionalStreamRequestInfo); 1095 new BidirectionalStreamRequestInfo);
1116 request_info->method = "POST"; 1096 request_info->method = "POST";
(...skipping 26 matching lines...) Expand all
1143 EXPECT_EQ(0, delegate->on_data_read_count()); 1123 EXPECT_EQ(0, delegate->on_data_read_count());
1144 // EXPECT_EQ(1, delegate->on_data_send_count()); 1124 // EXPECT_EQ(1, delegate->on_data_send_count());
1145 // OnDataSent may or may not have been invoked. 1125 // OnDataSent may or may not have been invoked.
1146 // Calling after stream is canceled gives kProtoUnknown. 1126 // Calling after stream is canceled gives kProtoUnknown.
1147 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); 1127 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol());
1148 EXPECT_EQ(0, delegate->GetTotalSentBytes()); 1128 EXPECT_EQ(0, delegate->GetTotalSentBytes());
1149 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); 1129 EXPECT_EQ(0, delegate->GetTotalReceivedBytes());
1150 } 1130 }
1151 1131
1152 TEST_F(BidirectionalStreamTest, CancelStreamDuringReadData) { 1132 TEST_F(BidirectionalStreamTest, CancelStreamDuringReadData) {
1153 BufferedSpdyFramer framer; 1133 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
1154
1155 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
1156 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); 1134 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0));
1157 std::unique_ptr<SpdySerializedFrame> data_frame( 1135 SpdySerializedFrame rst(
1158 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE));
1159 std::unique_ptr<SpdySerializedFrame> rst(
1160 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1136 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1161 1137
1162 MockWrite writes[] = { 1138 MockWrite writes[] = {
1163 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), 1139 CreateMockWrite(req, 0), CreateMockWrite(rst, 4),
1164 }; 1140 };
1165 1141
1166 std::unique_ptr<SpdySerializedFrame> resp( 1142 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
1167 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 1143 SpdySerializedFrame response_body_frame(
1168 std::unique_ptr<SpdySerializedFrame> response_body_frame( 1144 spdy_util_.ConstructSpdyDataFrame(1, false));
1169 spdy_util_.ConstructSpdyBodyFrame(1, false));
1170 1145
1171 MockRead reads[] = { 1146 MockRead reads[] = {
1172 CreateMockRead(*resp, 1), 1147 CreateMockRead(resp, 1),
1173 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. 1148 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause.
1174 CreateMockRead(*response_body_frame, 3), MockRead(ASYNC, 0, 5), 1149 CreateMockRead(response_body_frame, 3), MockRead(ASYNC, 0, 5),
1175 }; 1150 };
1176 1151
1177 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 1152 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1178 1153
1179 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1154 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1180 new BidirectionalStreamRequestInfo); 1155 new BidirectionalStreamRequestInfo);
1181 request_info->method = "POST"; 1156 request_info->method = "POST";
1182 request_info->url = default_url_; 1157 request_info->url = default_url_;
1183 request_info->priority = LOWEST; 1158 request_info->priority = LOWEST;
1184 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, 1159 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength,
(...skipping 20 matching lines...) Expand all
1205 EXPECT_EQ(0, delegate->on_data_sent_count()); 1180 EXPECT_EQ(0, delegate->on_data_sent_count());
1206 // Calling after stream is canceled gives kProtoUnknown. 1181 // Calling after stream is canceled gives kProtoUnknown.
1207 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); 1182 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol());
1208 EXPECT_EQ(0, delegate->GetTotalSentBytes()); 1183 EXPECT_EQ(0, delegate->GetTotalSentBytes());
1209 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); 1184 EXPECT_EQ(0, delegate->GetTotalReceivedBytes());
1210 } 1185 }
1211 1186
1212 // Receiving a header with uppercase ASCII will result in a protocol error, 1187 // Receiving a header with uppercase ASCII will result in a protocol error,
1213 // which should be propagated via Delegate::OnFailed. 1188 // which should be propagated via Delegate::OnFailed.
1214 TEST_F(BidirectionalStreamTest, PropagateProtocolError) { 1189 TEST_F(BidirectionalStreamTest, PropagateProtocolError) {
1215 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 1190 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
1216 kDefaultUrl, 1, kBodyDataSize * 3, LOW, nullptr, 0)); 1191 kDefaultUrl, 1, kBodyDataSize * 3, LOW, nullptr, 0));
1217 std::unique_ptr<SpdySerializedFrame> rst( 1192 SpdySerializedFrame rst(
1218 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); 1193 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
1219 1194
1220 MockWrite writes[] = { 1195 MockWrite writes[] = {
1221 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), 1196 CreateMockWrite(req, 0), CreateMockWrite(rst, 2),
1222 }; 1197 };
1223 1198
1224 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; 1199 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"};
1225 std::unique_ptr<SpdySerializedFrame> resp( 1200 SpdySerializedFrame resp(
1226 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1)); 1201 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1));
1227 1202
1228 MockRead reads[] = { 1203 MockRead reads[] = {
1229 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), 1204 CreateMockRead(resp, 1), MockRead(ASYNC, 0, 3),
1230 }; 1205 };
1231 1206
1232 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 1207 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1233 1208
1234 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1209 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1235 new BidirectionalStreamRequestInfo); 1210 new BidirectionalStreamRequestInfo);
1236 request_info->method = "POST"; 1211 request_info->method = "POST";
1237 request_info->url = default_url_; 1212 request_info->url = default_url_;
1238 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, 1213 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength,
1239 base::SizeTToString(kBodyDataSize * 3)); 1214 base::SizeTToString(kBodyDataSize * 3));
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1275 int net_error = OK; 1250 int net_error = OK;
1276 EXPECT_TRUE(entry.params->GetInteger("net_error", &net_error)); 1251 EXPECT_TRUE(entry.params->GetInteger("net_error", &net_error));
1277 EXPECT_THAT(net_error, IsError(ERR_SPDY_PROTOCOL_ERROR)); 1252 EXPECT_THAT(net_error, IsError(ERR_SPDY_PROTOCOL_ERROR));
1278 } 1253 }
1279 1254
1280 INSTANTIATE_TEST_CASE_P(CancelOrDeleteTests, 1255 INSTANTIATE_TEST_CASE_P(CancelOrDeleteTests,
1281 BidirectionalStreamTest, 1256 BidirectionalStreamTest,
1282 ::testing::Values(true, false)); 1257 ::testing::Values(true, false));
1283 1258
1284 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnHeadersReceived) { 1259 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnHeadersReceived) {
1285 std::unique_ptr<SpdySerializedFrame> req( 1260 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1286 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1287 1261
1288 std::unique_ptr<SpdySerializedFrame> rst( 1262 SpdySerializedFrame rst(
1289 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1263 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1290 MockWrite writes[] = { 1264 MockWrite writes[] = {
1291 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), 1265 CreateMockWrite(req, 0), CreateMockWrite(rst, 2),
1292 }; 1266 };
1293 1267
1294 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; 1268 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
1295 1269
1296 std::unique_ptr<SpdySerializedFrame> resp( 1270 SpdySerializedFrame resp(
1297 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); 1271 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
1298 1272
1299 MockRead reads[] = { 1273 MockRead reads[] = {
1300 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), 1274 CreateMockRead(resp, 1), MockRead(ASYNC, 0, 3),
1301 }; 1275 };
1302 1276
1303 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 1277 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1304 1278
1305 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1279 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1306 new BidirectionalStreamRequestInfo); 1280 new BidirectionalStreamRequestInfo);
1307 request_info->method = "GET"; 1281 request_info->method = "GET";
1308 request_info->url = default_url_; 1282 request_info->url = default_url_;
1309 request_info->priority = LOWEST; 1283 request_info->priority = LOWEST;
1310 request_info->end_stream_on_headers = true; 1284 request_info->end_stream_on_headers = true;
(...skipping 17 matching lines...) Expand all
1328 1302
1329 // If stream is destroyed, do not call into stream. 1303 // If stream is destroyed, do not call into stream.
1330 if (!GetParam()) 1304 if (!GetParam())
1331 return; 1305 return;
1332 EXPECT_EQ(0, delegate->GetTotalSentBytes()); 1306 EXPECT_EQ(0, delegate->GetTotalSentBytes());
1333 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); 1307 EXPECT_EQ(0, delegate->GetTotalReceivedBytes());
1334 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); 1308 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol());
1335 } 1309 }
1336 1310
1337 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnDataRead) { 1311 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnDataRead) {
1338 std::unique_ptr<SpdySerializedFrame> req( 1312 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1339 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1340 1313
1341 std::unique_ptr<SpdySerializedFrame> rst( 1314 SpdySerializedFrame rst(
1342 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1315 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1343 MockWrite writes[] = { 1316 MockWrite writes[] = {
1344 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3), 1317 CreateMockWrite(req, 0), CreateMockWrite(rst, 3),
1345 }; 1318 };
1346 1319
1347 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; 1320 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
1348 1321
1349 std::unique_ptr<SpdySerializedFrame> resp( 1322 SpdySerializedFrame resp(
1350 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); 1323 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
1351 1324
1352 std::unique_ptr<SpdySerializedFrame> response_body_frame( 1325 SpdySerializedFrame response_body_frame(
1353 spdy_util_.ConstructSpdyBodyFrame(1, false)); 1326 spdy_util_.ConstructSpdyDataFrame(1, false));
1354 1327
1355 MockRead reads[] = { 1328 MockRead reads[] = {
1356 CreateMockRead(*resp, 1), CreateMockRead(*response_body_frame, 2), 1329 CreateMockRead(resp, 1), CreateMockRead(response_body_frame, 2),
1357 MockRead(ASYNC, 0, 4), 1330 MockRead(ASYNC, 0, 4),
1358 }; 1331 };
1359 1332
1360 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 1333 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1361 1334
1362 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1335 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1363 new BidirectionalStreamRequestInfo); 1336 new BidirectionalStreamRequestInfo);
1364 request_info->method = "GET"; 1337 request_info->method = "GET";
1365 request_info->url = default_url_; 1338 request_info->url = default_url_;
1366 request_info->priority = LOWEST; 1339 request_info->priority = LOWEST;
(...skipping 17 matching lines...) Expand all
1384 1357
1385 // If stream is destroyed, do not call into stream. 1358 // If stream is destroyed, do not call into stream.
1386 if (!GetParam()) 1359 if (!GetParam())
1387 return; 1360 return;
1388 EXPECT_EQ(0, delegate->GetTotalSentBytes()); 1361 EXPECT_EQ(0, delegate->GetTotalSentBytes());
1389 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); 1362 EXPECT_EQ(0, delegate->GetTotalReceivedBytes());
1390 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); 1363 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol());
1391 } 1364 }
1392 1365
1393 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnTrailersReceived) { 1366 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnTrailersReceived) {
1394 std::unique_ptr<SpdySerializedFrame> req( 1367 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1395 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1396 1368
1397 std::unique_ptr<SpdySerializedFrame> rst( 1369 SpdySerializedFrame rst(
1398 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1370 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1399 MockWrite writes[] = { 1371 MockWrite writes[] = {
1400 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), 1372 CreateMockWrite(req, 0), CreateMockWrite(rst, 4),
1401 }; 1373 };
1402 1374
1403 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; 1375 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"};
1404 1376
1405 std::unique_ptr<SpdySerializedFrame> resp( 1377 SpdySerializedFrame resp(
1406 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); 1378 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
1407 1379
1408 std::unique_ptr<SpdySerializedFrame> response_body_frame( 1380 SpdySerializedFrame response_body_frame(
1409 spdy_util_.ConstructSpdyBodyFrame(1, false)); 1381 spdy_util_.ConstructSpdyDataFrame(1, false));
1410 1382
1411 SpdyHeaderBlock trailers; 1383 SpdyHeaderBlock trailers;
1412 trailers["foo"] = "bar"; 1384 trailers["foo"] = "bar";
1413 std::unique_ptr<SpdySerializedFrame> response_trailers( 1385 SpdySerializedFrame response_trailers(
1414 spdy_util_.ConstructSpdyResponseHeaders(1, std::move(trailers), true)); 1386 spdy_util_.ConstructSpdyResponseHeaders(1, std::move(trailers), true));
1415 1387
1416 MockRead reads[] = { 1388 MockRead reads[] = {
1417 CreateMockRead(*resp, 1), CreateMockRead(*response_body_frame, 2), 1389 CreateMockRead(resp, 1), CreateMockRead(response_body_frame, 2),
1418 CreateMockRead(*response_trailers, 3), MockRead(ASYNC, 0, 5), 1390 CreateMockRead(response_trailers, 3), MockRead(ASYNC, 0, 5),
1419 }; 1391 };
1420 1392
1421 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 1393 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1422 1394
1423 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1395 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1424 new BidirectionalStreamRequestInfo); 1396 new BidirectionalStreamRequestInfo);
1425 request_info->method = "GET"; 1397 request_info->method = "GET";
1426 request_info->url = default_url_; 1398 request_info->url = default_url_;
1427 request_info->priority = LOWEST; 1399 request_info->priority = LOWEST;
1428 request_info->end_stream_on_headers = true; 1400 request_info->end_stream_on_headers = true;
(...skipping 18 matching lines...) Expand all
1447 1419
1448 // If stream is destroyed, do not call into stream. 1420 // If stream is destroyed, do not call into stream.
1449 if (!GetParam()) 1421 if (!GetParam())
1450 return; 1422 return;
1451 EXPECT_EQ(0, delegate->GetTotalSentBytes()); 1423 EXPECT_EQ(0, delegate->GetTotalSentBytes());
1452 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); 1424 EXPECT_EQ(0, delegate->GetTotalReceivedBytes());
1453 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); 1425 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol());
1454 } 1426 }
1455 1427
1456 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnFailed) { 1428 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnFailed) {
1457 std::unique_ptr<SpdySerializedFrame> req( 1429 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1458 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1459 1430
1460 std::unique_ptr<SpdySerializedFrame> rst( 1431 SpdySerializedFrame rst(
1461 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); 1432 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
1462 1433
1463 MockWrite writes[] = { 1434 MockWrite writes[] = {
1464 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), 1435 CreateMockWrite(req, 0), CreateMockWrite(rst, 2),
1465 }; 1436 };
1466 1437
1467 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; 1438 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"};
1468 std::unique_ptr<SpdySerializedFrame> resp( 1439 SpdySerializedFrame resp(
1469 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1)); 1440 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1));
1470 1441
1471 MockRead reads[] = { 1442 MockRead reads[] = {
1472 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), 1443 CreateMockRead(resp, 1), MockRead(ASYNC, 0, 3),
1473 }; 1444 };
1474 1445
1475 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 1446 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1476 1447
1477 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1448 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1478 new BidirectionalStreamRequestInfo); 1449 new BidirectionalStreamRequestInfo);
1479 request_info->method = "GET"; 1450 request_info->method = "GET";
1480 request_info->url = default_url_; 1451 request_info->url = default_url_;
1481 request_info->priority = LOWEST; 1452 request_info->priority = LOWEST;
1482 request_info->end_stream_on_headers = true; 1453 request_info->end_stream_on_headers = true;
(...skipping 15 matching lines...) Expand all
1498 1469
1499 // If stream is destroyed, do not call into stream. 1470 // If stream is destroyed, do not call into stream.
1500 if (!GetParam()) 1471 if (!GetParam())
1501 return; 1472 return;
1502 EXPECT_EQ(0, delegate->GetTotalSentBytes()); 1473 EXPECT_EQ(0, delegate->GetTotalSentBytes());
1503 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); 1474 EXPECT_EQ(0, delegate->GetTotalReceivedBytes());
1504 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); 1475 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol());
1505 } 1476 }
1506 1477
1507 TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) { 1478 TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) {
1508 std::unique_ptr<SpdySerializedFrame> req( 1479 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1509 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST));
1510 // Empty DATA frame with an END_STREAM flag. 1480 // Empty DATA frame with an END_STREAM flag.
1511 std::unique_ptr<SpdySerializedFrame> end_stream( 1481 SpdySerializedFrame end_stream(
1512 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); 1482 spdy_util_.ConstructSpdyDataFrame(1, nullptr, 0, true));
1513 1483
1514 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; 1484 MockWrite writes[] = {CreateMockWrite(req, 0)};
1515 1485
1516 std::string alt_svc_header_value = AlternateProtocolToString(QUIC); 1486 std::string alt_svc_header_value = AlternateProtocolToString(QUIC);
1517 alt_svc_header_value.append("=\"www.example.org:443\""); 1487 alt_svc_header_value.append("=\"www.example.org:443\"");
1518 const char* const kExtraResponseHeaders[] = {"alt-svc", 1488 const char* const kExtraResponseHeaders[] = {"alt-svc",
1519 alt_svc_header_value.c_str()}; 1489 alt_svc_header_value.c_str()};
1520 1490
1521 std::unique_ptr<SpdySerializedFrame> resp( 1491 SpdySerializedFrame resp(
1522 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); 1492 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1));
1523 std::unique_ptr<SpdySerializedFrame> body_frame( 1493 SpdySerializedFrame body_frame(spdy_util_.ConstructSpdyDataFrame(1, true));
1524 spdy_util_.ConstructSpdyBodyFrame(1, true));
1525 1494
1526 MockRead reads[] = { 1495 MockRead reads[] = {
1527 CreateMockRead(*resp, 1), CreateMockRead(*body_frame, 2), 1496 CreateMockRead(resp, 1), CreateMockRead(body_frame, 2),
1528 MockRead(SYNCHRONOUS, 0, 3), 1497 MockRead(SYNCHRONOUS, 0, 3),
1529 }; 1498 };
1530 1499
1531 // Enable QUIC so that the alternative service header can be added to 1500 // Enable QUIC so that the alternative service header can be added to
1532 // HttpServerProperties. 1501 // HttpServerProperties.
1533 session_deps_.enable_quic = true; 1502 session_deps_.enable_quic = true;
1534 InitSession(reads, arraysize(reads), writes, arraysize(writes)); 1503 InitSession(reads, arraysize(reads), writes, arraysize(writes));
1535 1504
1536 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( 1505 std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
1537 new BidirectionalStreamRequestInfo); 1506 new BidirectionalStreamRequestInfo);
(...skipping 24 matching lines...) Expand all
1562 http_session_->http_server_properties()->GetAlternativeServices( 1531 http_session_->http_server_properties()->GetAlternativeServices(
1563 url::SchemeHostPort(default_url_)); 1532 url::SchemeHostPort(default_url_));
1564 ASSERT_EQ(1u, alternative_service_vector.size()); 1533 ASSERT_EQ(1u, alternative_service_vector.size());
1565 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoQUIC1SPDY3), 1534 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoQUIC1SPDY3),
1566 alternative_service_vector[0].protocol); 1535 alternative_service_vector[0].protocol);
1567 EXPECT_EQ("www.example.org", alternative_service_vector[0].host); 1536 EXPECT_EQ("www.example.org", alternative_service_vector[0].host);
1568 EXPECT_EQ(443, alternative_service_vector[0].port); 1537 EXPECT_EQ(443, alternative_service_vector[0].port);
1569 } 1538 }
1570 1539
1571 } // namespace net 1540 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/http/http_network_transaction_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698