OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/bidirectional_stream_quic_impl.h" | 5 #include "net/quic/chromium/bidirectional_stream_quic_impl.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/callback_helpers.h" | 9 #include "base/callback_helpers.h" |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 #include "net/quic/core/crypto/quic_decrypter.h" | 34 #include "net/quic/core/crypto/quic_decrypter.h" |
35 #include "net/quic/core/crypto/quic_encrypter.h" | 35 #include "net/quic/core/crypto/quic_encrypter.h" |
36 #include "net/quic/core/quic_connection.h" | 36 #include "net/quic/core/quic_connection.h" |
37 #include "net/quic/core/spdy_utils.h" | 37 #include "net/quic/core/spdy_utils.h" |
38 #include "net/quic/platform/api/quic_string_piece.h" | 38 #include "net/quic/platform/api/quic_string_piece.h" |
39 #include "net/quic/platform/api/quic_text_utils.h" | 39 #include "net/quic/platform/api/quic_text_utils.h" |
40 #include "net/quic/test_tools/crypto_test_utils.h" | 40 #include "net/quic/test_tools/crypto_test_utils.h" |
41 #include "net/quic/test_tools/mock_clock.h" | 41 #include "net/quic/test_tools/mock_clock.h" |
42 #include "net/quic/test_tools/mock_random.h" | 42 #include "net/quic/test_tools/mock_random.h" |
43 #include "net/quic/test_tools/quic_connection_peer.h" | 43 #include "net/quic/test_tools/quic_connection_peer.h" |
44 #include "net/quic/test_tools/quic_spdy_session_peer.h" | |
45 #include "net/quic/test_tools/quic_test_utils.h" | 44 #include "net/quic/test_tools/quic_test_utils.h" |
46 #include "net/socket/socket_test_util.h" | 45 #include "net/socket/socket_test_util.h" |
47 #include "net/test/gtest_util.h" | 46 #include "net/test/gtest_util.h" |
48 #include "testing/gmock/include/gmock/gmock.h" | 47 #include "testing/gmock/include/gmock/gmock.h" |
49 #include "testing/gtest/include/gtest/gtest.h" | 48 #include "testing/gtest/include/gtest/gtest.h" |
50 | 49 |
51 namespace net { | 50 namespace net { |
52 | 51 |
53 namespace test { | 52 namespace test { |
54 | 53 |
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 PacketToWrite(IoMode mode, int rv) : mode(mode), packet(nullptr), rv(rv) {} | 349 PacketToWrite(IoMode mode, int rv) : mode(mode), packet(nullptr), rv(rv) {} |
351 IoMode mode; | 350 IoMode mode; |
352 QuicReceivedPacket* packet; | 351 QuicReceivedPacket* packet; |
353 int rv; | 352 int rv; |
354 }; | 353 }; |
355 | 354 |
356 BidirectionalStreamQuicImplTest() | 355 BidirectionalStreamQuicImplTest() |
357 : crypto_config_(crypto_test_utils::ProofVerifierForTesting()), | 356 : crypto_config_(crypto_test_utils::ProofVerifierForTesting()), |
358 read_buffer_(new IOBufferWithSize(4096)), | 357 read_buffer_(new IOBufferWithSize(4096)), |
359 connection_id_(2), | 358 connection_id_(2), |
360 stream_id_(GetNthClientInitiatedStreamId(0)), | 359 stream_id_(kClientDataStreamId1), |
361 client_maker_(GetParam(), | 360 client_maker_(GetParam(), |
362 connection_id_, | 361 connection_id_, |
363 &clock_, | 362 &clock_, |
364 kDefaultServerHostName, | 363 kDefaultServerHostName, |
365 Perspective::IS_CLIENT), | 364 Perspective::IS_CLIENT), |
366 server_maker_(GetParam(), | 365 server_maker_(GetParam(), |
367 connection_id_, | 366 connection_id_, |
368 &clock_, | 367 &clock_, |
369 kDefaultServerHostName, | 368 kDefaultServerHostName, |
370 Perspective::IS_SERVER), | 369 Perspective::IS_SERVER), |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
674 load_timing_info.connect_timing, | 673 load_timing_info.connect_timing, |
675 CONNECT_TIMING_HAS_SSL_TIMES | CONNECT_TIMING_HAS_DNS_TIMES); | 674 CONNECT_TIMING_HAS_SSL_TIMES | CONNECT_TIMING_HAS_DNS_TIMES); |
676 } | 675 } |
677 ExpectLoadTimingHasOnlyConnectionTimes(load_timing_info); | 676 ExpectLoadTimingHasOnlyConnectionTimes(load_timing_info); |
678 } | 677 } |
679 | 678 |
680 const BoundTestNetLog& net_log() const { return net_log_; } | 679 const BoundTestNetLog& net_log() const { return net_log_; } |
681 | 680 |
682 QuicChromiumClientSession* session() const { return session_.get(); } | 681 QuicChromiumClientSession* session() const { return session_.get(); } |
683 | 682 |
684 QuicStreamId GetNthClientInitiatedStreamId(int n) { | |
685 return QuicSpdySessionPeer::GetNthClientInitiatedStreamId(*session_, n); | |
686 } | |
687 | |
688 protected: | 683 protected: |
689 BoundTestNetLog net_log_; | 684 BoundTestNetLog net_log_; |
690 scoped_refptr<TestTaskRunner> runner_; | 685 scoped_refptr<TestTaskRunner> runner_; |
691 std::unique_ptr<MockWrite[]> mock_writes_; | 686 std::unique_ptr<MockWrite[]> mock_writes_; |
692 MockClock clock_; | 687 MockClock clock_; |
693 QuicConnection* connection_; | 688 QuicConnection* connection_; |
694 std::unique_ptr<QuicChromiumConnectionHelper> helper_; | 689 std::unique_ptr<QuicChromiumConnectionHelper> helper_; |
695 std::unique_ptr<QuicChromiumAlarmFactory> alarm_factory_; | 690 std::unique_ptr<QuicChromiumAlarmFactory> alarm_factory_; |
696 TransportSecurityState transport_security_state_; | 691 TransportSecurityState transport_security_state_; |
697 std::unique_ptr<QuicChromiumClientSession> session_; | 692 std::unique_ptr<QuicChromiumClientSession> session_; |
(...skipping 17 matching lines...) Expand all Loading... |
715 | 710 |
716 INSTANTIATE_TEST_CASE_P(Version, | 711 INSTANTIATE_TEST_CASE_P(Version, |
717 BidirectionalStreamQuicImplTest, | 712 BidirectionalStreamQuicImplTest, |
718 ::testing::ValuesIn(AllSupportedVersions())); | 713 ::testing::ValuesIn(AllSupportedVersions())); |
719 | 714 |
720 TEST_P(BidirectionalStreamQuicImplTest, GetRequest) { | 715 TEST_P(BidirectionalStreamQuicImplTest, GetRequest) { |
721 SetRequest("GET", "/", DEFAULT_PRIORITY); | 716 SetRequest("GET", "/", DEFAULT_PRIORITY); |
722 size_t spdy_request_headers_frame_length; | 717 size_t spdy_request_headers_frame_length; |
723 QuicStreamOffset header_stream_offset = 0; | 718 QuicStreamOffset header_stream_offset = 0; |
724 AddWrite(ConstructRequestHeadersPacketInner( | 719 AddWrite(ConstructRequestHeadersPacketInner( |
725 1, GetNthClientInitiatedStreamId(0), kFin, DEFAULT_PRIORITY, | 720 1, kClientDataStreamId1, kFin, DEFAULT_PRIORITY, |
726 &spdy_request_headers_frame_length, &header_stream_offset)); | 721 &spdy_request_headers_frame_length, &header_stream_offset)); |
727 AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); | 722 AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); |
728 AddWrite(ConstructClientAckPacket(3, 3, 1, 1)); | 723 AddWrite(ConstructClientAckPacket(3, 3, 1, 1)); |
729 | 724 |
730 Initialize(); | 725 Initialize(); |
731 | 726 |
732 BidirectionalStreamRequestInfo request; | 727 BidirectionalStreamRequestInfo request; |
733 request.method = "GET"; | 728 request.method = "GET"; |
734 request.url = GURL("http://www.google.com/"); | 729 request.url = GURL("http://www.google.com/"); |
735 request.end_stream_on_headers = true; | 730 request.end_stream_on_headers = true; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
812 ExpectLogContainsSomewhere( | 807 ExpectLogContainsSomewhere( |
813 entries, /*min_offset=*/pos, | 808 entries, /*min_offset=*/pos, |
814 NetLogEventType::QUIC_CHROMIUM_CLIENT_STREAM_SEND_REQUEST_HEADERS, | 809 NetLogEventType::QUIC_CHROMIUM_CLIENT_STREAM_SEND_REQUEST_HEADERS, |
815 NetLogEventPhase::NONE); | 810 NetLogEventPhase::NONE); |
816 } | 811 } |
817 | 812 |
818 TEST_P(BidirectionalStreamQuicImplTest, LoadTimingTwoRequests) { | 813 TEST_P(BidirectionalStreamQuicImplTest, LoadTimingTwoRequests) { |
819 SetRequest("GET", "/", DEFAULT_PRIORITY); | 814 SetRequest("GET", "/", DEFAULT_PRIORITY); |
820 QuicStreamOffset offset = 0; | 815 QuicStreamOffset offset = 0; |
821 AddWrite(ConstructRequestHeadersPacketInner( | 816 AddWrite(ConstructRequestHeadersPacketInner( |
822 1, GetNthClientInitiatedStreamId(0), kFin, DEFAULT_PRIORITY, nullptr, | 817 1, kClientDataStreamId1, kFin, DEFAULT_PRIORITY, nullptr, &offset)); |
823 &offset)); | |
824 // SetRequest() again for second request as |request_headers_| was moved. | 818 // SetRequest() again for second request as |request_headers_| was moved. |
825 SetRequest("GET", "/", DEFAULT_PRIORITY); | 819 SetRequest("GET", "/", DEFAULT_PRIORITY); |
826 AddWrite(ConstructRequestHeadersPacketInner( | 820 AddWrite(ConstructRequestHeadersPacketInner( |
827 2, GetNthClientInitiatedStreamId(1), kFin, DEFAULT_PRIORITY, nullptr, | 821 2, kClientDataStreamId2, kFin, DEFAULT_PRIORITY, nullptr, &offset)); |
828 &offset)); | |
829 AddWrite(ConstructInitialSettingsPacket(3, &offset)); | 822 AddWrite(ConstructInitialSettingsPacket(3, &offset)); |
830 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); | 823 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); |
831 Initialize(); | 824 Initialize(); |
832 | 825 |
833 BidirectionalStreamRequestInfo request; | 826 BidirectionalStreamRequestInfo request; |
834 request.method = "GET"; | 827 request.method = "GET"; |
835 request.url = GURL("http://www.google.com/"); | 828 request.url = GURL("http://www.google.com/"); |
836 request.end_stream_on_headers = true; | 829 request.end_stream_on_headers = true; |
837 request.priority = DEFAULT_PRIORITY; | 830 request.priority = DEFAULT_PRIORITY; |
838 | 831 |
(...skipping 12 matching lines...) Expand all Loading... |
851 delegate->WaitUntilNextCallback(); // OnStreamReady | 844 delegate->WaitUntilNextCallback(); // OnStreamReady |
852 delegate2->WaitUntilNextCallback(); // OnStreamReady | 845 delegate2->WaitUntilNextCallback(); // OnStreamReady |
853 | 846 |
854 ConfirmHandshake(); | 847 ConfirmHandshake(); |
855 // Server acks the request. | 848 // Server acks the request. |
856 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 849 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
857 | 850 |
858 // Server sends the response headers. | 851 // Server sends the response headers. |
859 offset = 0; | 852 offset = 0; |
860 ProcessPacket(ConstructResponseHeadersPacketInner( | 853 ProcessPacket(ConstructResponseHeadersPacketInner( |
861 2, GetNthClientInitiatedStreamId(0), kFin, | 854 2, kClientDataStreamId1, kFin, ConstructResponseHeaders("200"), nullptr, |
862 ConstructResponseHeaders("200"), nullptr, &offset)); | 855 &offset)); |
863 | 856 |
864 ProcessPacket(ConstructResponseHeadersPacketInner( | 857 ProcessPacket(ConstructResponseHeadersPacketInner( |
865 3, GetNthClientInitiatedStreamId(1), kFin, | 858 3, kClientDataStreamId2, kFin, ConstructResponseHeaders("200"), nullptr, |
866 ConstructResponseHeaders("200"), nullptr, &offset)); | 859 &offset)); |
867 | 860 |
868 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 861 delegate->WaitUntilNextCallback(); // OnHeadersReceived |
869 delegate2->WaitUntilNextCallback(); // OnHeadersReceived | 862 delegate2->WaitUntilNextCallback(); // OnHeadersReceived |
870 | 863 |
871 LoadTimingInfo load_timing_info; | 864 LoadTimingInfo load_timing_info; |
872 EXPECT_TRUE(delegate->GetLoadTimingInfo(&load_timing_info)); | 865 EXPECT_TRUE(delegate->GetLoadTimingInfo(&load_timing_info)); |
873 LoadTimingInfo load_timing_info2; | 866 LoadTimingInfo load_timing_info2; |
874 EXPECT_TRUE(delegate2->GetLoadTimingInfo(&load_timing_info2)); | 867 EXPECT_TRUE(delegate2->GetLoadTimingInfo(&load_timing_info2)); |
875 ExpectLoadTimingValid(load_timing_info, /*session_reused=*/false); | 868 ExpectLoadTimingValid(load_timing_info, /*session_reused=*/false); |
876 ExpectLoadTimingValid(load_timing_info2, /*session_reused=*/true); | 869 ExpectLoadTimingValid(load_timing_info2, /*session_reused=*/true); |
877 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 870 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
878 EXPECT_EQ("200", delegate2->response_headers().find(":status")->second); | 871 EXPECT_EQ("200", delegate2->response_headers().find(":status")->second); |
879 // No response body. ReadData() should return OK synchronously. | 872 // No response body. ReadData() should return OK synchronously. |
880 TestCompletionCallback dummy_callback; | 873 TestCompletionCallback dummy_callback; |
881 EXPECT_EQ(OK, delegate->ReadData(dummy_callback.callback())); | 874 EXPECT_EQ(OK, delegate->ReadData(dummy_callback.callback())); |
882 EXPECT_EQ(OK, delegate2->ReadData(dummy_callback.callback())); | 875 EXPECT_EQ(OK, delegate2->ReadData(dummy_callback.callback())); |
883 } | 876 } |
884 | 877 |
885 // Tests that when request headers are not delayed, only data buffers are | 878 // Tests that when request headers are not delayed, only data buffers are |
886 // coalesced. | 879 // coalesced. |
887 TEST_P(BidirectionalStreamQuicImplTest, CoalesceDataBuffersNotHeadersFrame) { | 880 TEST_P(BidirectionalStreamQuicImplTest, CoalesceDataBuffersNotHeadersFrame) { |
888 SetRequest("POST", "/", DEFAULT_PRIORITY); | 881 SetRequest("POST", "/", DEFAULT_PRIORITY); |
889 size_t spdy_request_headers_frame_length; | 882 size_t spdy_request_headers_frame_length; |
890 QuicStreamOffset header_stream_offset = 0; | 883 QuicStreamOffset header_stream_offset = 0; |
891 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); | 884 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
892 const char kBody1[] = "here are some data"; | 885 const char kBody1[] = "here are some data"; |
893 const char kBody2[] = "data keep coming"; | 886 const char kBody2[] = "data keep coming"; |
894 std::vector<std::string> two_writes = {kBody1, kBody2}; | 887 std::vector<std::string> two_writes = {kBody1, kBody2}; |
895 AddWrite(ConstructRequestHeadersPacketInner( | 888 AddWrite(ConstructRequestHeadersPacketInner( |
896 2, GetNthClientInitiatedStreamId(0), !kFin, DEFAULT_PRIORITY, | 889 2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, |
897 &spdy_request_headers_frame_length, &header_stream_offset)); | 890 &spdy_request_headers_frame_length, &header_stream_offset)); |
898 AddWrite(ConstructClientMultipleDataFramesPacket(3, kIncludeVersion, !kFin, 0, | 891 AddWrite(ConstructClientMultipleDataFramesPacket(3, kIncludeVersion, !kFin, 0, |
899 {kBody1, kBody2})); | 892 {kBody1, kBody2})); |
900 // Ack server's data packet. | 893 // Ack server's data packet. |
901 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); | 894 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); |
902 const char kBody3[] = "hello there"; | 895 const char kBody3[] = "hello there"; |
903 const char kBody4[] = "another piece of small data"; | 896 const char kBody4[] = "another piece of small data"; |
904 const char kBody5[] = "really small"; | 897 const char kBody5[] = "really small"; |
905 QuicStreamOffset data_offset = strlen(kBody1) + strlen(kBody2); | 898 QuicStreamOffset data_offset = strlen(kBody1) + strlen(kBody2); |
906 AddWrite(ConstructClientMultipleDataFramesPacket( | 899 AddWrite(ConstructClientMultipleDataFramesPacket( |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1194 strlen(kResponseBody) + spdy_trailers_frame_length), | 1187 strlen(kResponseBody) + spdy_trailers_frame_length), |
1195 delegate->GetTotalReceivedBytes()); | 1188 delegate->GetTotalReceivedBytes()); |
1196 } | 1189 } |
1197 | 1190 |
1198 TEST_P(BidirectionalStreamQuicImplTest, PostRequest) { | 1191 TEST_P(BidirectionalStreamQuicImplTest, PostRequest) { |
1199 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1192 SetRequest("POST", "/", DEFAULT_PRIORITY); |
1200 size_t spdy_request_headers_frame_length; | 1193 size_t spdy_request_headers_frame_length; |
1201 QuicStreamOffset header_stream_offset = 0; | 1194 QuicStreamOffset header_stream_offset = 0; |
1202 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1195 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
1203 AddWrite(ConstructRequestHeadersPacketInner( | 1196 AddWrite(ConstructRequestHeadersPacketInner( |
1204 2, GetNthClientInitiatedStreamId(0), !kFin, DEFAULT_PRIORITY, | 1197 2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, |
1205 &spdy_request_headers_frame_length, &header_stream_offset)); | 1198 &spdy_request_headers_frame_length, &header_stream_offset)); |
1206 AddWrite(ConstructDataPacket(3, kIncludeVersion, kFin, 0, kUploadData, | 1199 AddWrite(ConstructDataPacket(3, kIncludeVersion, kFin, 0, kUploadData, |
1207 &client_maker_)); | 1200 &client_maker_)); |
1208 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); | 1201 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); |
1209 | 1202 |
1210 Initialize(); | 1203 Initialize(); |
1211 | 1204 |
1212 BidirectionalStreamRequestInfo request; | 1205 BidirectionalStreamRequestInfo request; |
1213 request.method = "POST"; | 1206 request.method = "POST"; |
1214 request.url = GURL("http://www.google.com/"); | 1207 request.url = GURL("http://www.google.com/"); |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1352 strlen(kResponseBody) + spdy_trailers_frame_length), | 1345 strlen(kResponseBody) + spdy_trailers_frame_length), |
1353 delegate->GetTotalReceivedBytes()); | 1346 delegate->GetTotalReceivedBytes()); |
1354 } | 1347 } |
1355 | 1348 |
1356 TEST_P(BidirectionalStreamQuicImplTest, InterleaveReadDataAndSendData) { | 1349 TEST_P(BidirectionalStreamQuicImplTest, InterleaveReadDataAndSendData) { |
1357 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1350 SetRequest("POST", "/", DEFAULT_PRIORITY); |
1358 size_t spdy_request_headers_frame_length; | 1351 size_t spdy_request_headers_frame_length; |
1359 QuicStreamOffset header_stream_offset = 0; | 1352 QuicStreamOffset header_stream_offset = 0; |
1360 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1353 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
1361 AddWrite(ConstructRequestHeadersPacketInner( | 1354 AddWrite(ConstructRequestHeadersPacketInner( |
1362 2, GetNthClientInitiatedStreamId(0), !kFin, DEFAULT_PRIORITY, | 1355 2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, |
1363 &spdy_request_headers_frame_length, &header_stream_offset)); | 1356 &spdy_request_headers_frame_length, &header_stream_offset)); |
1364 AddWrite(ConstructAckAndDataPacket(3, !kIncludeVersion, 2, 1, 1, !kFin, 0, | 1357 AddWrite(ConstructAckAndDataPacket(3, !kIncludeVersion, 2, 1, 1, !kFin, 0, |
1365 kUploadData, &client_maker_)); | 1358 kUploadData, &client_maker_)); |
1366 AddWrite(ConstructAckAndDataPacket(4, !kIncludeVersion, 3, 3, 3, kFin, | 1359 AddWrite(ConstructAckAndDataPacket(4, !kIncludeVersion, 3, 3, 3, kFin, |
1367 strlen(kUploadData), kUploadData, | 1360 strlen(kUploadData), kUploadData, |
1368 &client_maker_)); | 1361 &client_maker_)); |
1369 Initialize(); | 1362 Initialize(); |
1370 | 1363 |
1371 BidirectionalStreamRequestInfo request; | 1364 BidirectionalStreamRequestInfo request; |
1372 request.method = "POST"; | 1365 request.method = "POST"; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1439 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length + | 1432 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length + |
1440 2 * strlen(kResponseBody)), | 1433 2 * strlen(kResponseBody)), |
1441 delegate->GetTotalReceivedBytes()); | 1434 delegate->GetTotalReceivedBytes()); |
1442 } | 1435 } |
1443 | 1436 |
1444 TEST_P(BidirectionalStreamQuicImplTest, ServerSendsRstAfterHeaders) { | 1437 TEST_P(BidirectionalStreamQuicImplTest, ServerSendsRstAfterHeaders) { |
1445 SetRequest("GET", "/", DEFAULT_PRIORITY); | 1438 SetRequest("GET", "/", DEFAULT_PRIORITY); |
1446 size_t spdy_request_headers_frame_length; | 1439 size_t spdy_request_headers_frame_length; |
1447 QuicStreamOffset header_stream_offset = 0; | 1440 QuicStreamOffset header_stream_offset = 0; |
1448 AddWrite(ConstructRequestHeadersPacketInner( | 1441 AddWrite(ConstructRequestHeadersPacketInner( |
1449 1, GetNthClientInitiatedStreamId(0), kFin, DEFAULT_PRIORITY, | 1442 1, kClientDataStreamId1, kFin, DEFAULT_PRIORITY, |
1450 &spdy_request_headers_frame_length, &header_stream_offset)); | 1443 &spdy_request_headers_frame_length, &header_stream_offset)); |
1451 AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); | 1444 AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); |
1452 Initialize(); | 1445 Initialize(); |
1453 | 1446 |
1454 BidirectionalStreamRequestInfo request; | 1447 BidirectionalStreamRequestInfo request; |
1455 request.method = "GET"; | 1448 request.method = "GET"; |
1456 request.url = GURL("http://www.google.com/"); | 1449 request.url = GURL("http://www.google.com/"); |
1457 request.end_stream_on_headers = true; | 1450 request.end_stream_on_headers = true; |
1458 request.priority = DEFAULT_PRIORITY; | 1451 request.priority = DEFAULT_PRIORITY; |
1459 | 1452 |
(...skipping 20 matching lines...) Expand all Loading... |
1480 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 1473 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
1481 delegate->GetTotalSentBytes()); | 1474 delegate->GetTotalSentBytes()); |
1482 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 1475 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
1483 } | 1476 } |
1484 | 1477 |
1485 TEST_P(BidirectionalStreamQuicImplTest, ServerSendsRstAfterReadData) { | 1478 TEST_P(BidirectionalStreamQuicImplTest, ServerSendsRstAfterReadData) { |
1486 SetRequest("GET", "/", DEFAULT_PRIORITY); | 1479 SetRequest("GET", "/", DEFAULT_PRIORITY); |
1487 size_t spdy_request_headers_frame_length; | 1480 size_t spdy_request_headers_frame_length; |
1488 QuicStreamOffset header_stream_offset = 0; | 1481 QuicStreamOffset header_stream_offset = 0; |
1489 AddWrite(ConstructRequestHeadersPacketInner( | 1482 AddWrite(ConstructRequestHeadersPacketInner( |
1490 1, GetNthClientInitiatedStreamId(0), kFin, DEFAULT_PRIORITY, | 1483 1, kClientDataStreamId1, kFin, DEFAULT_PRIORITY, |
1491 &spdy_request_headers_frame_length, &header_stream_offset)); | 1484 &spdy_request_headers_frame_length, &header_stream_offset)); |
1492 AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); | 1485 AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); |
1493 // Why does QUIC ack Rst? Is this expected? | 1486 // Why does QUIC ack Rst? Is this expected? |
1494 AddWrite(ConstructClientAckPacket(3, 3, 1, 1)); | 1487 AddWrite(ConstructClientAckPacket(3, 3, 1, 1)); |
1495 | 1488 |
1496 Initialize(); | 1489 Initialize(); |
1497 | 1490 |
1498 BidirectionalStreamRequestInfo request; | 1491 BidirectionalStreamRequestInfo request; |
1499 request.method = "GET"; | 1492 request.method = "GET"; |
1500 request.url = GURL("http://www.google.com/"); | 1493 request.url = GURL("http://www.google.com/"); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1542 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), | 1535 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), |
1543 delegate->GetTotalReceivedBytes()); | 1536 delegate->GetTotalReceivedBytes()); |
1544 } | 1537 } |
1545 | 1538 |
1546 TEST_P(BidirectionalStreamQuicImplTest, SessionClosedBeforeReadData) { | 1539 TEST_P(BidirectionalStreamQuicImplTest, SessionClosedBeforeReadData) { |
1547 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1540 SetRequest("POST", "/", DEFAULT_PRIORITY); |
1548 size_t spdy_request_headers_frame_length; | 1541 size_t spdy_request_headers_frame_length; |
1549 QuicStreamOffset header_stream_offset = 0; | 1542 QuicStreamOffset header_stream_offset = 0; |
1550 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1543 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
1551 AddWrite(ConstructRequestHeadersPacketInner( | 1544 AddWrite(ConstructRequestHeadersPacketInner( |
1552 2, GetNthClientInitiatedStreamId(0), !kFin, DEFAULT_PRIORITY, | 1545 2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, |
1553 &spdy_request_headers_frame_length, &header_stream_offset)); | 1546 &spdy_request_headers_frame_length, &header_stream_offset)); |
1554 Initialize(); | 1547 Initialize(); |
1555 | 1548 |
1556 BidirectionalStreamRequestInfo request; | 1549 BidirectionalStreamRequestInfo request; |
1557 request.method = "POST"; | 1550 request.method = "POST"; |
1558 request.url = GURL("http://www.google.com/"); | 1551 request.url = GURL("http://www.google.com/"); |
1559 request.end_stream_on_headers = false; | 1552 request.end_stream_on_headers = false; |
1560 request.priority = DEFAULT_PRIORITY; | 1553 request.priority = DEFAULT_PRIORITY; |
1561 | 1554 |
1562 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1555 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1602 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), | 1595 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), |
1603 delegate->GetTotalReceivedBytes()); | 1596 delegate->GetTotalReceivedBytes()); |
1604 } | 1597 } |
1605 | 1598 |
1606 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamAfterReadData) { | 1599 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamAfterReadData) { |
1607 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1600 SetRequest("POST", "/", DEFAULT_PRIORITY); |
1608 size_t spdy_request_headers_frame_length; | 1601 size_t spdy_request_headers_frame_length; |
1609 QuicStreamOffset header_stream_offset = 0; | 1602 QuicStreamOffset header_stream_offset = 0; |
1610 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1603 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
1611 AddWrite(ConstructRequestHeadersPacketInner( | 1604 AddWrite(ConstructRequestHeadersPacketInner( |
1612 2, GetNthClientInitiatedStreamId(0), !kFin, DEFAULT_PRIORITY, | 1605 2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, |
1613 &spdy_request_headers_frame_length, &header_stream_offset)); | 1606 &spdy_request_headers_frame_length, &header_stream_offset)); |
1614 AddWrite(ConstructClientAckAndRstStreamPacket(3, 2, 1, 1)); | 1607 AddWrite(ConstructClientAckAndRstStreamPacket(3, 2, 1, 1)); |
1615 | 1608 |
1616 Initialize(); | 1609 Initialize(); |
1617 | 1610 |
1618 BidirectionalStreamRequestInfo request; | 1611 BidirectionalStreamRequestInfo request; |
1619 request.method = "POST"; | 1612 request.method = "POST"; |
1620 request.url = GURL("http://www.google.com/"); | 1613 request.url = GURL("http://www.google.com/"); |
1621 request.end_stream_on_headers = false; | 1614 request.end_stream_on_headers = false; |
1622 request.priority = DEFAULT_PRIORITY; | 1615 request.priority = DEFAULT_PRIORITY; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1656 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), | 1649 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), |
1657 delegate->GetTotalReceivedBytes()); | 1650 delegate->GetTotalReceivedBytes()); |
1658 } | 1651 } |
1659 | 1652 |
1660 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnHeadersReceived) { | 1653 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnHeadersReceived) { |
1661 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1654 SetRequest("POST", "/", DEFAULT_PRIORITY); |
1662 size_t spdy_request_headers_frame_length; | 1655 size_t spdy_request_headers_frame_length; |
1663 QuicStreamOffset header_stream_offset = 0; | 1656 QuicStreamOffset header_stream_offset = 0; |
1664 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1657 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
1665 AddWrite(ConstructRequestHeadersPacketInner( | 1658 AddWrite(ConstructRequestHeadersPacketInner( |
1666 2, GetNthClientInitiatedStreamId(0), !kFin, DEFAULT_PRIORITY, | 1659 2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, |
1667 &spdy_request_headers_frame_length, &header_stream_offset)); | 1660 &spdy_request_headers_frame_length, &header_stream_offset)); |
1668 AddWrite(ConstructClientAckAndRstStreamPacket(3, 2, 1, 1)); | 1661 AddWrite(ConstructClientAckAndRstStreamPacket(3, 2, 1, 1)); |
1669 | 1662 |
1670 Initialize(); | 1663 Initialize(); |
1671 | 1664 |
1672 BidirectionalStreamRequestInfo request; | 1665 BidirectionalStreamRequestInfo request; |
1673 request.method = "POST"; | 1666 request.method = "POST"; |
1674 request.url = GURL("http://www.google.com/"); | 1667 request.url = GURL("http://www.google.com/"); |
1675 request.end_stream_on_headers = false; | 1668 request.end_stream_on_headers = false; |
1676 request.priority = DEFAULT_PRIORITY; | 1669 request.priority = DEFAULT_PRIORITY; |
(...skipping 25 matching lines...) Expand all Loading... |
1702 EXPECT_EQ(0, delegate->on_data_read_count()); | 1695 EXPECT_EQ(0, delegate->on_data_read_count()); |
1703 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1696 EXPECT_EQ(0, delegate->on_data_sent_count()); |
1704 } | 1697 } |
1705 | 1698 |
1706 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnDataRead) { | 1699 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnDataRead) { |
1707 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1700 SetRequest("POST", "/", DEFAULT_PRIORITY); |
1708 size_t spdy_request_headers_frame_length; | 1701 size_t spdy_request_headers_frame_length; |
1709 QuicStreamOffset header_stream_offset = 0; | 1702 QuicStreamOffset header_stream_offset = 0; |
1710 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1703 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
1711 AddWrite(ConstructRequestHeadersPacketInner( | 1704 AddWrite(ConstructRequestHeadersPacketInner( |
1712 2, GetNthClientInitiatedStreamId(0), !kFin, DEFAULT_PRIORITY, | 1705 2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, |
1713 &spdy_request_headers_frame_length, &header_stream_offset)); | 1706 &spdy_request_headers_frame_length, &header_stream_offset)); |
1714 AddWrite(ConstructClientAckPacket(3, 3, 1, 1)); | 1707 AddWrite(ConstructClientAckPacket(3, 3, 1, 1)); |
1715 AddWrite(ConstructClientRstStreamPacket(4)); | 1708 AddWrite(ConstructClientRstStreamPacket(4)); |
1716 | 1709 |
1717 Initialize(); | 1710 Initialize(); |
1718 | 1711 |
1719 BidirectionalStreamRequestInfo request; | 1712 BidirectionalStreamRequestInfo request; |
1720 request.method = "POST"; | 1713 request.method = "POST"; |
1721 request.url = GURL("http://www.google.com/"); | 1714 request.url = GURL("http://www.google.com/"); |
1722 request.end_stream_on_headers = false; | 1715 request.end_stream_on_headers = false; |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1823 | 1816 |
1824 base::RunLoop().RunUntilIdle(); | 1817 base::RunLoop().RunUntilIdle(); |
1825 | 1818 |
1826 EXPECT_EQ(1, delegate->on_data_read_count()); | 1819 EXPECT_EQ(1, delegate->on_data_read_count()); |
1827 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1820 EXPECT_EQ(0, delegate->on_data_sent_count()); |
1828 } | 1821 } |
1829 | 1822 |
1830 } // namespace test | 1823 } // namespace test |
1831 | 1824 |
1832 } // namespace net | 1825 } // namespace net |
OLD | NEW |