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