OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/chromium/quic_http_stream.h" | 5 #include "net/quic/chromium/quic_http_stream.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 #include "net/quic/core/crypto/quic_decrypter.h" | 42 #include "net/quic/core/crypto/quic_decrypter.h" |
43 #include "net/quic/core/crypto/quic_encrypter.h" | 43 #include "net/quic/core/crypto/quic_encrypter.h" |
44 #include "net/quic/core/quic_connection.h" | 44 #include "net/quic/core/quic_connection.h" |
45 #include "net/quic/core/quic_write_blocked_list.h" | 45 #include "net/quic/core/quic_write_blocked_list.h" |
46 #include "net/quic/core/spdy_utils.h" | 46 #include "net/quic/core/spdy_utils.h" |
47 #include "net/quic/platform/api/quic_string_piece.h" | 47 #include "net/quic/platform/api/quic_string_piece.h" |
48 #include "net/quic/test_tools/crypto_test_utils.h" | 48 #include "net/quic/test_tools/crypto_test_utils.h" |
49 #include "net/quic/test_tools/mock_clock.h" | 49 #include "net/quic/test_tools/mock_clock.h" |
50 #include "net/quic/test_tools/mock_random.h" | 50 #include "net/quic/test_tools/mock_random.h" |
51 #include "net/quic/test_tools/quic_connection_peer.h" | 51 #include "net/quic/test_tools/quic_connection_peer.h" |
52 #include "net/quic/test_tools/quic_spdy_session_peer.h" | |
53 #include "net/quic/test_tools/quic_test_utils.h" | 52 #include "net/quic/test_tools/quic_test_utils.h" |
54 #include "net/socket/socket_performance_watcher.h" | 53 #include "net/socket/socket_performance_watcher.h" |
55 #include "net/socket/socket_test_util.h" | 54 #include "net/socket/socket_test_util.h" |
56 #include "net/spdy/chromium/spdy_http_utils.h" | 55 #include "net/spdy/chromium/spdy_http_utils.h" |
57 #include "net/spdy/core/spdy_frame_builder.h" | 56 #include "net/spdy/core/spdy_frame_builder.h" |
58 #include "net/spdy/core/spdy_framer.h" | 57 #include "net/spdy/core/spdy_framer.h" |
59 #include "net/spdy/core/spdy_protocol.h" | 58 #include "net/spdy/core/spdy_protocol.h" |
60 #include "net/test/cert_test_util.h" | 59 #include "net/test/cert_test_util.h" |
61 #include "net/test/gtest_util.h" | 60 #include "net/test/gtest_util.h" |
62 #include "net/test/test_data_directory.h" | 61 #include "net/test/test_data_directory.h" |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 PacketToWrite(IoMode mode, int rv) : mode(mode), packet(nullptr), rv(rv) {} | 192 PacketToWrite(IoMode mode, int rv) : mode(mode), packet(nullptr), rv(rv) {} |
194 IoMode mode; | 193 IoMode mode; |
195 QuicReceivedPacket* packet; | 194 QuicReceivedPacket* packet; |
196 int rv; | 195 int rv; |
197 }; | 196 }; |
198 | 197 |
199 QuicHttpStreamTest() | 198 QuicHttpStreamTest() |
200 : use_closing_stream_(false), | 199 : use_closing_stream_(false), |
201 crypto_config_(crypto_test_utils::ProofVerifierForTesting()), | 200 crypto_config_(crypto_test_utils::ProofVerifierForTesting()), |
202 read_buffer_(new IOBufferWithSize(4096)), | 201 read_buffer_(new IOBufferWithSize(4096)), |
203 promise_id_(GetNthServerInitiatedStreamId(0)), | 202 promise_id_(kServerDataStreamId1), |
204 stream_id_(GetNthClientInitiatedStreamId(0)), | 203 stream_id_(kClientDataStreamId1), |
205 connection_id_(2), | 204 connection_id_(2), |
206 client_maker_(GetParam(), | 205 client_maker_(GetParam(), |
207 connection_id_, | 206 connection_id_, |
208 &clock_, | 207 &clock_, |
209 kDefaultServerHostName, | 208 kDefaultServerHostName, |
210 Perspective::IS_CLIENT), | 209 Perspective::IS_CLIENT), |
211 server_maker_(GetParam(), | 210 server_maker_(GetParam(), |
212 connection_id_, | 211 connection_id_, |
213 &clock_, | 212 &clock_, |
214 kDefaultServerHostName, | 213 kDefaultServerHostName, |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
542 if (session_reused) { | 541 if (session_reused) { |
543 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); | 542 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); |
544 } else { | 543 } else { |
545 ExpectConnectTimingHasTimes( | 544 ExpectConnectTimingHasTimes( |
546 load_timing_info.connect_timing, | 545 load_timing_info.connect_timing, |
547 CONNECT_TIMING_HAS_SSL_TIMES | CONNECT_TIMING_HAS_DNS_TIMES); | 546 CONNECT_TIMING_HAS_SSL_TIMES | CONNECT_TIMING_HAS_DNS_TIMES); |
548 } | 547 } |
549 ExpectLoadTimingHasOnlyConnectionTimes(load_timing_info); | 548 ExpectLoadTimingHasOnlyConnectionTimes(load_timing_info); |
550 } | 549 } |
551 | 550 |
552 QuicStreamId GetNthClientInitiatedStreamId(int n) { | |
553 return QuicSpdySessionPeer::GetNthClientInitiatedStreamId(*session_, n); | |
554 } | |
555 | |
556 QuicStreamId GetNthServerInitiatedStreamId(int n) { | |
557 return QuicSpdySessionPeer::GetNthServerInitiatedStreamId(*session_, n); | |
558 } | |
559 | |
560 BoundTestNetLog net_log_; | 551 BoundTestNetLog net_log_; |
561 bool use_closing_stream_; | 552 bool use_closing_stream_; |
562 MockSendAlgorithm* send_algorithm_; | 553 MockSendAlgorithm* send_algorithm_; |
563 scoped_refptr<TestTaskRunner> runner_; | 554 scoped_refptr<TestTaskRunner> runner_; |
564 std::unique_ptr<MockWrite[]> mock_writes_; | 555 std::unique_ptr<MockWrite[]> mock_writes_; |
565 MockClock clock_; | 556 MockClock clock_; |
566 HttpServerPropertiesImpl http_server_properties_; | 557 HttpServerPropertiesImpl http_server_properties_; |
567 TestQuicConnection* connection_; | 558 TestQuicConnection* connection_; |
568 std::unique_ptr<QuicChromiumConnectionHelper> helper_; | 559 std::unique_ptr<QuicChromiumConnectionHelper> helper_; |
569 std::unique_ptr<QuicChromiumAlarmFactory> alarm_factory_; | 560 std::unique_ptr<QuicChromiumAlarmFactory> alarm_factory_; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
629 QuicHttpStreamPeer::GetQuicChromiumClientStream(stream_.get()); | 620 QuicHttpStreamPeer::GetQuicChromiumClientStream(stream_.get()); |
630 EXPECT_FALSE(client_stream->can_migrate()); | 621 EXPECT_FALSE(client_stream->can_migrate()); |
631 } | 622 } |
632 | 623 |
633 TEST_P(QuicHttpStreamTest, GetRequest) { | 624 TEST_P(QuicHttpStreamTest, GetRequest) { |
634 SetRequest("GET", "/", DEFAULT_PRIORITY); | 625 SetRequest("GET", "/", DEFAULT_PRIORITY); |
635 size_t spdy_request_header_frame_length; | 626 size_t spdy_request_header_frame_length; |
636 QuicStreamOffset header_stream_offset = 0; | 627 QuicStreamOffset header_stream_offset = 0; |
637 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 628 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
638 AddWrite(InnerConstructRequestHeadersPacket( | 629 AddWrite(InnerConstructRequestHeadersPacket( |
639 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, | 630 2, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, |
640 DEFAULT_PRIORITY, &spdy_request_header_frame_length, | 631 &spdy_request_header_frame_length, &header_stream_offset)); |
641 &header_stream_offset)); | |
642 | 632 |
643 Initialize(); | 633 Initialize(); |
644 | 634 |
645 request_.method = "GET"; | 635 request_.method = "GET"; |
646 request_.url = GURL("https://www.example.org/"); | 636 request_.url = GURL("https://www.example.org/"); |
647 | 637 |
648 // Make sure getting load timing from the stream early does not crash. | 638 // Make sure getting load timing from the stream early does not crash. |
649 LoadTimingInfo load_timing_info; | 639 LoadTimingInfo load_timing_info; |
650 EXPECT_TRUE(stream_->GetLoadTimingInfo(&load_timing_info)); | 640 EXPECT_TRUE(stream_->GetLoadTimingInfo(&load_timing_info)); |
651 | 641 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
692 stream_->GetTotalReceivedBytes()); | 682 stream_->GetTotalReceivedBytes()); |
693 } | 683 } |
694 | 684 |
695 TEST_P(QuicHttpStreamTest, LoadTimingTwoRequests) { | 685 TEST_P(QuicHttpStreamTest, LoadTimingTwoRequests) { |
696 SetRequest("GET", "/", DEFAULT_PRIORITY); | 686 SetRequest("GET", "/", DEFAULT_PRIORITY); |
697 size_t spdy_request_header_frame_length; | 687 size_t spdy_request_header_frame_length; |
698 | 688 |
699 QuicStreamOffset offset = 0; | 689 QuicStreamOffset offset = 0; |
700 AddWrite(ConstructInitialSettingsPacket(&offset)); | 690 AddWrite(ConstructInitialSettingsPacket(&offset)); |
701 AddWrite(InnerConstructRequestHeadersPacket( | 691 AddWrite(InnerConstructRequestHeadersPacket( |
702 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, | 692 2, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, |
703 DEFAULT_PRIORITY, &spdy_request_header_frame_length, &offset)); | 693 &spdy_request_header_frame_length, &offset)); |
704 | 694 |
705 // SetRequest() again for second request as |request_headers_| was moved. | 695 // SetRequest() again for second request as |request_headers_| was moved. |
706 SetRequest("GET", "/", DEFAULT_PRIORITY); | 696 SetRequest("GET", "/", DEFAULT_PRIORITY); |
707 AddWrite(InnerConstructRequestHeadersPacket( | 697 AddWrite(InnerConstructRequestHeadersPacket( |
708 3, GetNthClientInitiatedStreamId(1), kIncludeVersion, kFin, | 698 3, kClientDataStreamId2, kIncludeVersion, kFin, DEFAULT_PRIORITY, |
709 DEFAULT_PRIORITY, &spdy_request_header_frame_length, &offset)); | 699 &spdy_request_header_frame_length, &offset)); |
710 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); // Ack the responses. | 700 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); // Ack the responses. |
711 | 701 |
712 Initialize(); | 702 Initialize(); |
713 | 703 |
714 request_.method = "GET"; | 704 request_.method = "GET"; |
715 request_.url = GURL("https://www.example.org/"); | 705 request_.url = GURL("https://www.example.org/"); |
716 // Start first request. | 706 // Start first request. |
717 EXPECT_EQ(OK, | 707 EXPECT_EQ(OK, |
718 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 708 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
719 net_log_.bound(), callback_.callback())); | 709 net_log_.bound(), callback_.callback())); |
(...skipping 10 matching lines...) Expand all Loading... |
730 stream2.SendRequest(headers_, &response_, callback2.callback())); | 720 stream2.SendRequest(headers_, &response_, callback2.callback())); |
731 | 721 |
732 // Ack both requests. | 722 // Ack both requests. |
733 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 723 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
734 | 724 |
735 EXPECT_THAT(stream_->ReadResponseHeaders(callback_.callback()), | 725 EXPECT_THAT(stream_->ReadResponseHeaders(callback_.callback()), |
736 IsError(ERR_IO_PENDING)); | 726 IsError(ERR_IO_PENDING)); |
737 size_t spdy_response_header_frame_length; | 727 size_t spdy_response_header_frame_length; |
738 SetResponse("200 OK", string()); | 728 SetResponse("200 OK", string()); |
739 ProcessPacket(InnerConstructResponseHeadersPacket( | 729 ProcessPacket(InnerConstructResponseHeadersPacket( |
740 2, GetNthClientInitiatedStreamId(0), kFin, | 730 2, kClientDataStreamId1, kFin, &spdy_response_header_frame_length)); |
741 &spdy_response_header_frame_length)); | |
742 | 731 |
743 // Now that the headers have been processed, the callback will return. | 732 // Now that the headers have been processed, the callback will return. |
744 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 733 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
745 EXPECT_EQ(200, response_.headers->response_code()); | 734 EXPECT_EQ(200, response_.headers->response_code()); |
746 | 735 |
747 // There is no body, so this should return immediately. | 736 // There is no body, so this should return immediately. |
748 EXPECT_EQ(0, | 737 EXPECT_EQ(0, |
749 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), | 738 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), |
750 callback_.callback())); | 739 callback_.callback())); |
751 EXPECT_TRUE(stream_->IsResponseBodyComplete()); | 740 EXPECT_TRUE(stream_->IsResponseBodyComplete()); |
752 | 741 |
753 LoadTimingInfo load_timing_info; | 742 LoadTimingInfo load_timing_info; |
754 EXPECT_TRUE(stream_->GetLoadTimingInfo(&load_timing_info)); | 743 EXPECT_TRUE(stream_->GetLoadTimingInfo(&load_timing_info)); |
755 ExpectLoadTimingValid(load_timing_info, /*session_reused=*/false); | 744 ExpectLoadTimingValid(load_timing_info, /*session_reused=*/false); |
756 | 745 |
757 // SetResponse() again for second request as |response_headers_| was moved. | 746 // SetResponse() again for second request as |response_headers_| was moved. |
758 SetResponse("200 OK", string()); | 747 SetResponse("200 OK", string()); |
759 EXPECT_THAT(stream2.ReadResponseHeaders(callback2.callback()), | 748 EXPECT_THAT(stream2.ReadResponseHeaders(callback2.callback()), |
760 IsError(ERR_IO_PENDING)); | 749 IsError(ERR_IO_PENDING)); |
761 | 750 |
762 ProcessPacket(InnerConstructResponseHeadersPacket( | 751 ProcessPacket(InnerConstructResponseHeadersPacket( |
763 3, GetNthClientInitiatedStreamId(1), kFin, | 752 3, kClientDataStreamId2, kFin, &spdy_response_header_frame_length)); |
764 &spdy_response_header_frame_length)); | |
765 | 753 |
766 EXPECT_THAT(callback2.WaitForResult(), IsOk()); | 754 EXPECT_THAT(callback2.WaitForResult(), IsOk()); |
767 | 755 |
768 // There is no body, so this should return immediately. | 756 // There is no body, so this should return immediately. |
769 EXPECT_EQ(0, | 757 EXPECT_EQ(0, |
770 stream2.ReadResponseBody(read_buffer_.get(), read_buffer_->size(), | 758 stream2.ReadResponseBody(read_buffer_.get(), read_buffer_->size(), |
771 callback2.callback())); | 759 callback2.callback())); |
772 EXPECT_TRUE(stream2.IsResponseBodyComplete()); | 760 EXPECT_TRUE(stream2.IsResponseBodyComplete()); |
773 | 761 |
774 LoadTimingInfo load_timing_info2; | 762 LoadTimingInfo load_timing_info2; |
775 EXPECT_TRUE(stream2.GetLoadTimingInfo(&load_timing_info2)); | 763 EXPECT_TRUE(stream2.GetLoadTimingInfo(&load_timing_info2)); |
776 ExpectLoadTimingValid(load_timing_info2, /*session_reused=*/true); | 764 ExpectLoadTimingValid(load_timing_info2, /*session_reused=*/true); |
777 } | 765 } |
778 | 766 |
779 // QuicHttpStream does not currently support trailers. It should ignore | 767 // QuicHttpStream does not currently support trailers. It should ignore |
780 // trailers upon receiving them. | 768 // trailers upon receiving them. |
781 TEST_P(QuicHttpStreamTest, GetRequestWithTrailers) { | 769 TEST_P(QuicHttpStreamTest, GetRequestWithTrailers) { |
782 SetRequest("GET", "/", DEFAULT_PRIORITY); | 770 SetRequest("GET", "/", DEFAULT_PRIORITY); |
783 size_t spdy_request_header_frame_length; | 771 size_t spdy_request_header_frame_length; |
784 QuicStreamOffset header_stream_offset = 0; | 772 QuicStreamOffset header_stream_offset = 0; |
785 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 773 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
786 AddWrite(InnerConstructRequestHeadersPacket( | 774 AddWrite(InnerConstructRequestHeadersPacket( |
787 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, | 775 2, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, |
788 DEFAULT_PRIORITY, &spdy_request_header_frame_length, | 776 &spdy_request_header_frame_length, &header_stream_offset)); |
789 &header_stream_offset)); | |
790 AddWrite(ConstructClientAckPacket(3, 3, 1, 1)); // Ack the data packet. | 777 AddWrite(ConstructClientAckPacket(3, 3, 1, 1)); // Ack the data packet. |
791 | 778 |
792 Initialize(); | 779 Initialize(); |
793 | 780 |
794 request_.method = "GET"; | 781 request_.method = "GET"; |
795 request_.url = GURL("https://www.example.org/"); | 782 request_.url = GURL("https://www.example.org/"); |
796 | 783 |
797 EXPECT_EQ(OK, | 784 EXPECT_EQ(OK, |
798 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 785 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
799 net_log_.bound(), callback_.callback())); | 786 net_log_.bound(), callback_.callback())); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
872 NetLogEventPhase::NONE); | 859 NetLogEventPhase::NONE); |
873 } | 860 } |
874 | 861 |
875 // Regression test for http://crbug.com/288128 | 862 // Regression test for http://crbug.com/288128 |
876 TEST_P(QuicHttpStreamTest, GetRequestLargeResponse) { | 863 TEST_P(QuicHttpStreamTest, GetRequestLargeResponse) { |
877 SetRequest("GET", "/", DEFAULT_PRIORITY); | 864 SetRequest("GET", "/", DEFAULT_PRIORITY); |
878 size_t spdy_request_headers_frame_length; | 865 size_t spdy_request_headers_frame_length; |
879 QuicStreamOffset header_stream_offset = 0; | 866 QuicStreamOffset header_stream_offset = 0; |
880 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 867 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
881 AddWrite(InnerConstructRequestHeadersPacket( | 868 AddWrite(InnerConstructRequestHeadersPacket( |
882 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, | 869 2, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, |
883 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 870 &spdy_request_headers_frame_length, &header_stream_offset)); |
884 &header_stream_offset)); | |
885 Initialize(); | 871 Initialize(); |
886 | 872 |
887 request_.method = "GET"; | 873 request_.method = "GET"; |
888 request_.url = GURL("https://www.example.org/"); | 874 request_.url = GURL("https://www.example.org/"); |
889 | 875 |
890 EXPECT_EQ(OK, | 876 EXPECT_EQ(OK, |
891 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 877 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
892 net_log_.bound(), callback_.callback())); | 878 net_log_.bound(), callback_.callback())); |
893 EXPECT_EQ(OK, | 879 EXPECT_EQ(OK, |
894 stream_->SendRequest(headers_, &response_, callback_.callback())); | 880 stream_->SendRequest(headers_, &response_, callback_.callback())); |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1000 EXPECT_EQ(AlternativeService(kProtoQUIC, "www.example.org", 443), | 986 EXPECT_EQ(AlternativeService(kProtoQUIC, "www.example.org", 443), |
1001 alternative_service2); | 987 alternative_service2); |
1002 } | 988 } |
1003 | 989 |
1004 TEST_P(QuicHttpStreamTest, LogGranularQuicConnectionError) { | 990 TEST_P(QuicHttpStreamTest, LogGranularQuicConnectionError) { |
1005 SetRequest("GET", "/", DEFAULT_PRIORITY); | 991 SetRequest("GET", "/", DEFAULT_PRIORITY); |
1006 size_t spdy_request_headers_frame_length; | 992 size_t spdy_request_headers_frame_length; |
1007 QuicStreamOffset header_stream_offset = 0; | 993 QuicStreamOffset header_stream_offset = 0; |
1008 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 994 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
1009 AddWrite(InnerConstructRequestHeadersPacket( | 995 AddWrite(InnerConstructRequestHeadersPacket( |
1010 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, | 996 2, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, |
1011 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 997 &spdy_request_headers_frame_length, &header_stream_offset)); |
1012 &header_stream_offset)); | |
1013 AddWrite(ConstructAckAndRstStreamPacket(3)); | 998 AddWrite(ConstructAckAndRstStreamPacket(3)); |
1014 use_closing_stream_ = true; | 999 use_closing_stream_ = true; |
1015 Initialize(); | 1000 Initialize(); |
1016 | 1001 |
1017 request_.method = "GET"; | 1002 request_.method = "GET"; |
1018 request_.url = GURL("https://www.example.org/"); | 1003 request_.url = GURL("https://www.example.org/"); |
1019 | 1004 |
1020 EXPECT_EQ(OK, | 1005 EXPECT_EQ(OK, |
1021 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1006 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
1022 net_log_.bound(), callback_.callback())); | 1007 net_log_.bound(), callback_.callback())); |
(...skipping 19 matching lines...) Expand all Loading... |
1042 // By default the test setup defaults handshake to be confirmed. Manually set | 1027 // By default the test setup defaults handshake to be confirmed. Manually set |
1043 // it to be not confirmed. | 1028 // it to be not confirmed. |
1044 // Granular errors shouldn't be reported if handshake not confirmed. | 1029 // Granular errors shouldn't be reported if handshake not confirmed. |
1045 crypto_client_stream_factory_.set_handshake_mode( | 1030 crypto_client_stream_factory_.set_handshake_mode( |
1046 MockCryptoClientStream::ZERO_RTT); | 1031 MockCryptoClientStream::ZERO_RTT); |
1047 | 1032 |
1048 SetRequest("GET", "/", DEFAULT_PRIORITY); | 1033 SetRequest("GET", "/", DEFAULT_PRIORITY); |
1049 size_t spdy_request_headers_frame_length; | 1034 size_t spdy_request_headers_frame_length; |
1050 QuicStreamOffset header_stream_offset = 0; | 1035 QuicStreamOffset header_stream_offset = 0; |
1051 AddWrite(InnerConstructRequestHeadersPacket( | 1036 AddWrite(InnerConstructRequestHeadersPacket( |
1052 1, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, | 1037 1, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, |
1053 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 1038 &spdy_request_headers_frame_length, &header_stream_offset)); |
1054 &header_stream_offset)); | |
1055 use_closing_stream_ = true; | 1039 use_closing_stream_ = true; |
1056 Initialize(); | 1040 Initialize(); |
1057 | 1041 |
1058 request_.method = "GET"; | 1042 request_.method = "GET"; |
1059 request_.url = GURL("https://www.example.org/"); | 1043 request_.url = GURL("https://www.example.org/"); |
1060 | 1044 |
1061 EXPECT_EQ(OK, | 1045 EXPECT_EQ(OK, |
1062 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1046 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
1063 net_log_.bound(), callback_.callback())); | 1047 net_log_.bound(), callback_.callback())); |
1064 EXPECT_EQ(OK, | 1048 EXPECT_EQ(OK, |
(...skipping 14 matching lines...) Expand all Loading... |
1079 EXPECT_EQ(QUIC_NO_ERROR, details.quic_connection_error); | 1063 EXPECT_EQ(QUIC_NO_ERROR, details.quic_connection_error); |
1080 } | 1064 } |
1081 | 1065 |
1082 // Regression test for http://crbug.com/409871 | 1066 // Regression test for http://crbug.com/409871 |
1083 TEST_P(QuicHttpStreamTest, SessionClosedBeforeReadResponseHeaders) { | 1067 TEST_P(QuicHttpStreamTest, SessionClosedBeforeReadResponseHeaders) { |
1084 SetRequest("GET", "/", DEFAULT_PRIORITY); | 1068 SetRequest("GET", "/", DEFAULT_PRIORITY); |
1085 size_t spdy_request_headers_frame_length; | 1069 size_t spdy_request_headers_frame_length; |
1086 QuicStreamOffset header_stream_offset = 0; | 1070 QuicStreamOffset header_stream_offset = 0; |
1087 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1071 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
1088 AddWrite(InnerConstructRequestHeadersPacket( | 1072 AddWrite(InnerConstructRequestHeadersPacket( |
1089 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, | 1073 2, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, |
1090 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 1074 &spdy_request_headers_frame_length, &header_stream_offset)); |
1091 &header_stream_offset)); | |
1092 Initialize(); | 1075 Initialize(); |
1093 | 1076 |
1094 request_.method = "GET"; | 1077 request_.method = "GET"; |
1095 request_.url = GURL("https://www.example.org/"); | 1078 request_.url = GURL("https://www.example.org/"); |
1096 | 1079 |
1097 EXPECT_EQ(OK, | 1080 EXPECT_EQ(OK, |
1098 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1081 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
1099 net_log_.bound(), callback_.callback())); | 1082 net_log_.bound(), callback_.callback())); |
1100 | 1083 |
1101 EXPECT_EQ(OK, | 1084 EXPECT_EQ(OK, |
(...skipping 10 matching lines...) Expand all Loading... |
1112 stream_->GetTotalSentBytes()); | 1095 stream_->GetTotalSentBytes()); |
1113 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); | 1096 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); |
1114 } | 1097 } |
1115 | 1098 |
1116 TEST_P(QuicHttpStreamTest, SendPostRequest) { | 1099 TEST_P(QuicHttpStreamTest, SendPostRequest) { |
1117 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1100 SetRequest("POST", "/", DEFAULT_PRIORITY); |
1118 size_t spdy_request_headers_frame_length; | 1101 size_t spdy_request_headers_frame_length; |
1119 QuicStreamOffset header_stream_offset = 0; | 1102 QuicStreamOffset header_stream_offset = 0; |
1120 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1103 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
1121 AddWrite(InnerConstructRequestHeadersPacket( | 1104 AddWrite(InnerConstructRequestHeadersPacket( |
1122 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, | 1105 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, |
1123 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 1106 &spdy_request_headers_frame_length, &header_stream_offset)); |
1124 &header_stream_offset)); | |
1125 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, kUploadData)); | 1107 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, kUploadData)); |
1126 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); | 1108 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); |
1127 | 1109 |
1128 Initialize(); | 1110 Initialize(); |
1129 | 1111 |
1130 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 1112 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
1131 element_readers.push_back(base::MakeUnique<UploadBytesElementReader>( | 1113 element_readers.push_back(base::MakeUnique<UploadBytesElementReader>( |
1132 kUploadData, strlen(kUploadData))); | 1114 kUploadData, strlen(kUploadData))); |
1133 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 1115 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
1134 request_.method = "POST"; | 1116 request_.method = "POST"; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1182 stream_->GetTotalReceivedBytes()); | 1164 stream_->GetTotalReceivedBytes()); |
1183 } | 1165 } |
1184 | 1166 |
1185 TEST_P(QuicHttpStreamTest, SendChunkedPostRequest) { | 1167 TEST_P(QuicHttpStreamTest, SendChunkedPostRequest) { |
1186 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1168 SetRequest("POST", "/", DEFAULT_PRIORITY); |
1187 size_t chunk_size = strlen(kUploadData); | 1169 size_t chunk_size = strlen(kUploadData); |
1188 size_t spdy_request_headers_frame_length; | 1170 size_t spdy_request_headers_frame_length; |
1189 QuicStreamOffset header_stream_offset = 0; | 1171 QuicStreamOffset header_stream_offset = 0; |
1190 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1172 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
1191 AddWrite(InnerConstructRequestHeadersPacket( | 1173 AddWrite(InnerConstructRequestHeadersPacket( |
1192 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, | 1174 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, |
1193 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 1175 &spdy_request_headers_frame_length, &header_stream_offset)); |
1194 &header_stream_offset)); | |
1195 AddWrite( | 1176 AddWrite( |
1196 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); | 1177 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); |
1197 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size, | 1178 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size, |
1198 kUploadData)); | 1179 kUploadData)); |
1199 AddWrite(ConstructClientAckPacket(5, 3, 1, 1)); | 1180 AddWrite(ConstructClientAckPacket(5, 3, 1, 1)); |
1200 Initialize(); | 1181 Initialize(); |
1201 | 1182 |
1202 ChunkedUploadDataStream upload_data_stream(0); | 1183 ChunkedUploadDataStream upload_data_stream(0); |
1203 upload_data_stream.AppendData(kUploadData, chunk_size, false); | 1184 upload_data_stream.AppendData(kUploadData, chunk_size, false); |
1204 | 1185 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1257 stream_->GetTotalReceivedBytes()); | 1238 stream_->GetTotalReceivedBytes()); |
1258 } | 1239 } |
1259 | 1240 |
1260 TEST_P(QuicHttpStreamTest, SendChunkedPostRequestWithFinalEmptyDataPacket) { | 1241 TEST_P(QuicHttpStreamTest, SendChunkedPostRequestWithFinalEmptyDataPacket) { |
1261 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1242 SetRequest("POST", "/", DEFAULT_PRIORITY); |
1262 size_t chunk_size = strlen(kUploadData); | 1243 size_t chunk_size = strlen(kUploadData); |
1263 size_t spdy_request_headers_frame_length; | 1244 size_t spdy_request_headers_frame_length; |
1264 QuicStreamOffset header_stream_offset = 0; | 1245 QuicStreamOffset header_stream_offset = 0; |
1265 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1246 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
1266 AddWrite(InnerConstructRequestHeadersPacket( | 1247 AddWrite(InnerConstructRequestHeadersPacket( |
1267 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, | 1248 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, |
1268 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 1249 &spdy_request_headers_frame_length, &header_stream_offset)); |
1269 &header_stream_offset)); | |
1270 AddWrite( | 1250 AddWrite( |
1271 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); | 1251 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); |
1272 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size, "")); | 1252 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size, "")); |
1273 AddWrite(ConstructClientAckPacket(5, 3, 1, 1)); | 1253 AddWrite(ConstructClientAckPacket(5, 3, 1, 1)); |
1274 Initialize(); | 1254 Initialize(); |
1275 | 1255 |
1276 ChunkedUploadDataStream upload_data_stream(0); | 1256 ChunkedUploadDataStream upload_data_stream(0); |
1277 upload_data_stream.AppendData(kUploadData, chunk_size, false); | 1257 upload_data_stream.AppendData(kUploadData, chunk_size, false); |
1278 | 1258 |
1279 request_.method = "POST"; | 1259 request_.method = "POST"; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1328 strlen(kResponseBody)), | 1308 strlen(kResponseBody)), |
1329 stream_->GetTotalReceivedBytes()); | 1309 stream_->GetTotalReceivedBytes()); |
1330 } | 1310 } |
1331 | 1311 |
1332 TEST_P(QuicHttpStreamTest, SendChunkedPostRequestWithOneEmptyDataPacket) { | 1312 TEST_P(QuicHttpStreamTest, SendChunkedPostRequestWithOneEmptyDataPacket) { |
1333 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1313 SetRequest("POST", "/", DEFAULT_PRIORITY); |
1334 size_t spdy_request_headers_frame_length; | 1314 size_t spdy_request_headers_frame_length; |
1335 QuicStreamOffset header_stream_offset = 0; | 1315 QuicStreamOffset header_stream_offset = 0; |
1336 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1316 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
1337 AddWrite(InnerConstructRequestHeadersPacket( | 1317 AddWrite(InnerConstructRequestHeadersPacket( |
1338 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, | 1318 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, |
1339 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 1319 &spdy_request_headers_frame_length, &header_stream_offset)); |
1340 &header_stream_offset)); | |
1341 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, "")); | 1320 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, "")); |
1342 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); | 1321 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); |
1343 Initialize(); | 1322 Initialize(); |
1344 | 1323 |
1345 ChunkedUploadDataStream upload_data_stream(0); | 1324 ChunkedUploadDataStream upload_data_stream(0); |
1346 | 1325 |
1347 request_.method = "POST"; | 1326 request_.method = "POST"; |
1348 request_.url = GURL("https://www.example.org/"); | 1327 request_.url = GURL("https://www.example.org/"); |
1349 request_.upload_data_stream = &upload_data_stream; | 1328 request_.upload_data_stream = &upload_data_stream; |
1350 ASSERT_EQ(OK, request_.upload_data_stream->Init( | 1329 ASSERT_EQ(OK, request_.upload_data_stream->Init( |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1396 strlen(kResponseBody)), | 1375 strlen(kResponseBody)), |
1397 stream_->GetTotalReceivedBytes()); | 1376 stream_->GetTotalReceivedBytes()); |
1398 } | 1377 } |
1399 | 1378 |
1400 TEST_P(QuicHttpStreamTest, DestroyedEarly) { | 1379 TEST_P(QuicHttpStreamTest, DestroyedEarly) { |
1401 SetRequest("GET", "/", DEFAULT_PRIORITY); | 1380 SetRequest("GET", "/", DEFAULT_PRIORITY); |
1402 size_t spdy_request_headers_frame_length; | 1381 size_t spdy_request_headers_frame_length; |
1403 QuicStreamOffset header_stream_offset = 0; | 1382 QuicStreamOffset header_stream_offset = 0; |
1404 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1383 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
1405 AddWrite(InnerConstructRequestHeadersPacket( | 1384 AddWrite(InnerConstructRequestHeadersPacket( |
1406 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, | 1385 2, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, |
1407 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 1386 &spdy_request_headers_frame_length, &header_stream_offset)); |
1408 &header_stream_offset)); | |
1409 AddWrite(ConstructAckAndRstStreamPacket(3)); | 1387 AddWrite(ConstructAckAndRstStreamPacket(3)); |
1410 use_closing_stream_ = true; | 1388 use_closing_stream_ = true; |
1411 Initialize(); | 1389 Initialize(); |
1412 | 1390 |
1413 request_.method = "GET"; | 1391 request_.method = "GET"; |
1414 request_.url = GURL("https://www.example.org/"); | 1392 request_.url = GURL("https://www.example.org/"); |
1415 | 1393 |
1416 EXPECT_EQ(OK, | 1394 EXPECT_EQ(OK, |
1417 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1395 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
1418 net_log_.bound(), callback_.callback())); | 1396 net_log_.bound(), callback_.callback())); |
(...skipping 21 matching lines...) Expand all Loading... |
1440 // Zero since the stream is closed before processing the headers. | 1418 // Zero since the stream is closed before processing the headers. |
1441 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); | 1419 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); |
1442 } | 1420 } |
1443 | 1421 |
1444 TEST_P(QuicHttpStreamTest, Priority) { | 1422 TEST_P(QuicHttpStreamTest, Priority) { |
1445 SetRequest("GET", "/", MEDIUM); | 1423 SetRequest("GET", "/", MEDIUM); |
1446 size_t spdy_request_headers_frame_length; | 1424 size_t spdy_request_headers_frame_length; |
1447 QuicStreamOffset header_stream_offset = 0; | 1425 QuicStreamOffset header_stream_offset = 0; |
1448 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1426 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
1449 AddWrite(InnerConstructRequestHeadersPacket( | 1427 AddWrite(InnerConstructRequestHeadersPacket( |
1450 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, MEDIUM, | 1428 2, kClientDataStreamId1, kIncludeVersion, kFin, MEDIUM, |
1451 &spdy_request_headers_frame_length, &header_stream_offset)); | 1429 &spdy_request_headers_frame_length, &header_stream_offset)); |
1452 AddWrite(ConstructAckAndRstStreamPacket(3)); | 1430 AddWrite(ConstructAckAndRstStreamPacket(3)); |
1453 use_closing_stream_ = true; | 1431 use_closing_stream_ = true; |
1454 Initialize(); | 1432 Initialize(); |
1455 | 1433 |
1456 request_.method = "GET"; | 1434 request_.method = "GET"; |
1457 request_.url = GURL("https://www.example.org/"); | 1435 request_.url = GURL("https://www.example.org/"); |
1458 | 1436 |
1459 EXPECT_EQ(OK, stream_->InitializeStream(&request_, MEDIUM, net_log_.bound(), | 1437 EXPECT_EQ(OK, stream_->InitializeStream(&request_, MEDIUM, net_log_.bound(), |
1460 callback_.callback())); | 1438 callback_.callback())); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1527 EXPECT_EQ(0, stream_->GetTotalSentBytes()); | 1505 EXPECT_EQ(0, stream_->GetTotalSentBytes()); |
1528 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); | 1506 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); |
1529 } | 1507 } |
1530 | 1508 |
1531 TEST_P(QuicHttpStreamTest, SessionClosedDuringDoLoop) { | 1509 TEST_P(QuicHttpStreamTest, SessionClosedDuringDoLoop) { |
1532 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1510 SetRequest("POST", "/", DEFAULT_PRIORITY); |
1533 size_t spdy_request_headers_frame_length; | 1511 size_t spdy_request_headers_frame_length; |
1534 QuicStreamOffset header_stream_offset = 0; | 1512 QuicStreamOffset header_stream_offset = 0; |
1535 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1513 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
1536 AddWrite(InnerConstructRequestHeadersPacket( | 1514 AddWrite(InnerConstructRequestHeadersPacket( |
1537 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, | 1515 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, |
1538 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 1516 &spdy_request_headers_frame_length, &header_stream_offset)); |
1539 &header_stream_offset)); | |
1540 AddWrite( | 1517 AddWrite( |
1541 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); | 1518 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); |
1542 // Second data write will result in a synchronous failure which will close | 1519 // Second data write will result in a synchronous failure which will close |
1543 // the session. | 1520 // the session. |
1544 AddWrite(SYNCHRONOUS, ERR_FAILED); | 1521 AddWrite(SYNCHRONOUS, ERR_FAILED); |
1545 Initialize(); | 1522 Initialize(); |
1546 | 1523 |
1547 ChunkedUploadDataStream upload_data_stream(0); | 1524 ChunkedUploadDataStream upload_data_stream(0); |
1548 | 1525 |
1549 request_.method = "POST"; | 1526 request_.method = "POST"; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1588 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, | 1565 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, |
1589 stream_->SendRequest(headers_, &response_, callback_.callback())); | 1566 stream_->SendRequest(headers_, &response_, callback_.callback())); |
1590 } | 1567 } |
1591 | 1568 |
1592 TEST_P(QuicHttpStreamTest, SessionClosedBeforeSendBodyComplete) { | 1569 TEST_P(QuicHttpStreamTest, SessionClosedBeforeSendBodyComplete) { |
1593 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1570 SetRequest("POST", "/", DEFAULT_PRIORITY); |
1594 size_t spdy_request_headers_frame_length; | 1571 size_t spdy_request_headers_frame_length; |
1595 QuicStreamOffset header_stream_offset = 0; | 1572 QuicStreamOffset header_stream_offset = 0; |
1596 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1573 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
1597 AddWrite(InnerConstructRequestHeadersPacket( | 1574 AddWrite(InnerConstructRequestHeadersPacket( |
1598 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, | 1575 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, |
1599 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 1576 &spdy_request_headers_frame_length, &header_stream_offset)); |
1600 &header_stream_offset)); | |
1601 AddWrite(SYNCHRONOUS, ERR_FAILED); | 1577 AddWrite(SYNCHRONOUS, ERR_FAILED); |
1602 Initialize(); | 1578 Initialize(); |
1603 | 1579 |
1604 ChunkedUploadDataStream upload_data_stream(0); | 1580 ChunkedUploadDataStream upload_data_stream(0); |
1605 size_t chunk_size = strlen(kUploadData); | 1581 size_t chunk_size = strlen(kUploadData); |
1606 upload_data_stream.AppendData(kUploadData, chunk_size, false); | 1582 upload_data_stream.AppendData(kUploadData, chunk_size, false); |
1607 | 1583 |
1608 request_.method = "POST"; | 1584 request_.method = "POST"; |
1609 request_.url = GURL("https://www.example.org/"); | 1585 request_.url = GURL("https://www.example.org/"); |
1610 request_.upload_data_stream = &upload_data_stream; | 1586 request_.upload_data_stream = &upload_data_stream; |
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2093 EXPECT_EQ(static_cast<int64_t>(spdy_response_header_frame_length), | 2069 EXPECT_EQ(static_cast<int64_t>(spdy_response_header_frame_length), |
2094 promised_stream_->GetTotalReceivedBytes()); | 2070 promised_stream_->GetTotalReceivedBytes()); |
2095 } | 2071 } |
2096 | 2072 |
2097 TEST_P(QuicHttpStreamTest, DataReadErrorSynchronous) { | 2073 TEST_P(QuicHttpStreamTest, DataReadErrorSynchronous) { |
2098 SetRequest("POST", "/", DEFAULT_PRIORITY); | 2074 SetRequest("POST", "/", DEFAULT_PRIORITY); |
2099 size_t spdy_request_headers_frame_length; | 2075 size_t spdy_request_headers_frame_length; |
2100 QuicStreamOffset header_stream_offset = 0; | 2076 QuicStreamOffset header_stream_offset = 0; |
2101 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 2077 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
2102 AddWrite(InnerConstructRequestHeadersPacket( | 2078 AddWrite(InnerConstructRequestHeadersPacket( |
2103 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, | 2079 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, |
2104 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 2080 &spdy_request_headers_frame_length, &header_stream_offset)); |
2105 &header_stream_offset)); | |
2106 AddWrite(ConstructClientRstStreamErrorPacket(3, kIncludeVersion)); | 2081 AddWrite(ConstructClientRstStreamErrorPacket(3, kIncludeVersion)); |
2107 | 2082 |
2108 Initialize(); | 2083 Initialize(); |
2109 | 2084 |
2110 ReadErrorUploadDataStream upload_data_stream( | 2085 ReadErrorUploadDataStream upload_data_stream( |
2111 ReadErrorUploadDataStream::FailureMode::SYNC); | 2086 ReadErrorUploadDataStream::FailureMode::SYNC); |
2112 request_.method = "POST"; | 2087 request_.method = "POST"; |
2113 request_.url = GURL("https://www.example.org/"); | 2088 request_.url = GURL("https://www.example.org/"); |
2114 request_.upload_data_stream = &upload_data_stream; | 2089 request_.upload_data_stream = &upload_data_stream; |
2115 ASSERT_EQ(OK, request_.upload_data_stream->Init( | 2090 ASSERT_EQ(OK, request_.upload_data_stream->Init( |
(...skipping 13 matching lines...) Expand all Loading... |
2129 stream_->GetTotalSentBytes()); | 2104 stream_->GetTotalSentBytes()); |
2130 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); | 2105 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); |
2131 } | 2106 } |
2132 | 2107 |
2133 TEST_P(QuicHttpStreamTest, DataReadErrorAsynchronous) { | 2108 TEST_P(QuicHttpStreamTest, DataReadErrorAsynchronous) { |
2134 SetRequest("POST", "/", DEFAULT_PRIORITY); | 2109 SetRequest("POST", "/", DEFAULT_PRIORITY); |
2135 size_t spdy_request_headers_frame_length; | 2110 size_t spdy_request_headers_frame_length; |
2136 QuicStreamOffset header_stream_offset = 0; | 2111 QuicStreamOffset header_stream_offset = 0; |
2137 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 2112 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
2138 AddWrite(InnerConstructRequestHeadersPacket( | 2113 AddWrite(InnerConstructRequestHeadersPacket( |
2139 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, | 2114 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, |
2140 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 2115 &spdy_request_headers_frame_length, &header_stream_offset)); |
2141 &header_stream_offset)); | |
2142 AddWrite(ConstructClientRstStreamErrorPacket(3, !kIncludeVersion)); | 2116 AddWrite(ConstructClientRstStreamErrorPacket(3, !kIncludeVersion)); |
2143 | 2117 |
2144 Initialize(); | 2118 Initialize(); |
2145 | 2119 |
2146 ReadErrorUploadDataStream upload_data_stream( | 2120 ReadErrorUploadDataStream upload_data_stream( |
2147 ReadErrorUploadDataStream::FailureMode::ASYNC); | 2121 ReadErrorUploadDataStream::FailureMode::ASYNC); |
2148 request_.method = "POST"; | 2122 request_.method = "POST"; |
2149 request_.url = GURL("https://www.example.org/"); | 2123 request_.url = GURL("https://www.example.org/"); |
2150 request_.upload_data_stream = &upload_data_stream; | 2124 request_.upload_data_stream = &upload_data_stream; |
2151 ASSERT_EQ(OK, request_.upload_data_stream->Init( | 2125 ASSERT_EQ(OK, request_.upload_data_stream->Init( |
(...skipping 14 matching lines...) Expand all Loading... |
2166 EXPECT_TRUE(AtEof()); | 2140 EXPECT_TRUE(AtEof()); |
2167 | 2141 |
2168 // QuicHttpStream::GetTotalSent/ReceivedBytes includes only headers. | 2142 // QuicHttpStream::GetTotalSent/ReceivedBytes includes only headers. |
2169 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 2143 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
2170 stream_->GetTotalSentBytes()); | 2144 stream_->GetTotalSentBytes()); |
2171 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); | 2145 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); |
2172 } | 2146 } |
2173 | 2147 |
2174 } // namespace test | 2148 } // namespace test |
2175 } // namespace net | 2149 } // namespace net |
OLD | NEW |