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 <algorithm> |
5 #include <memory> | 6 #include <memory> |
6 #include <ostream> | 7 #include <ostream> |
7 #include <string> | 8 #include <string> |
8 #include <utility> | 9 #include <utility> |
9 #include <vector> | 10 #include <vector> |
10 | 11 |
11 #include "base/compiler_specific.h" | 12 #include "base/compiler_specific.h" |
12 #include "base/macros.h" | 13 #include "base/macros.h" |
13 #include "base/memory/ptr_util.h" | 14 #include "base/memory/ptr_util.h" |
14 #include "base/run_loop.h" | 15 #include "base/run_loop.h" |
(...skipping 883 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
898 pos = ExpectLogContainsSomewhere( | 899 pos = ExpectLogContainsSomewhere( |
899 entries, 0, NetLogEventType::QUIC_SESSION_STREAM_FRAME_RECEIVED, | 900 entries, 0, NetLogEventType::QUIC_SESSION_STREAM_FRAME_RECEIVED, |
900 NetLogEventPhase::NONE); | 901 NetLogEventPhase::NONE); |
901 EXPECT_LT(0, pos); | 902 EXPECT_LT(0, pos); |
902 | 903 |
903 int log_stream_id; | 904 int log_stream_id; |
904 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &log_stream_id)); | 905 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &log_stream_id)); |
905 EXPECT_EQ(3, log_stream_id); | 906 EXPECT_EQ(3, log_stream_id); |
906 } | 907 } |
907 | 908 |
| 909 TEST_P(QuicNetworkTransactionTest, LargeResponseHeaders) { |
| 910 params_.origins_to_force_quic_on.insert( |
| 911 HostPortPair::FromString("mail.example.org:443")); |
| 912 |
| 913 MockQuicData mock_quic_data; |
| 914 QuicStreamOffset header_stream_offset = 0; |
| 915 mock_quic_data.AddWrite( |
| 916 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 917 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 918 2, GetNthClientInitiatedStreamId(0), true, true, |
| 919 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 920 SpdyHeaderBlock response_headers = GetResponseHeaders("200 OK"); |
| 921 response_headers["key1"] = std::string(30000, 'A'); |
| 922 response_headers["key2"] = std::string(30000, 'A'); |
| 923 response_headers["key3"] = std::string(30000, 'A'); |
| 924 response_headers["key4"] = std::string(30000, 'A'); |
| 925 response_headers["key5"] = std::string(30000, 'A'); |
| 926 response_headers["key6"] = std::string(30000, 'A'); |
| 927 response_headers["key7"] = std::string(30000, 'A'); |
| 928 response_headers["key8"] = std::string(30000, 'A'); |
| 929 SpdyHeadersIR headers_frame(GetNthClientInitiatedStreamId(0), |
| 930 std::move(response_headers)); |
| 931 SpdyFramer response_framer(SpdyFramer::ENABLE_COMPRESSION); |
| 932 SpdySerializedFrame spdy_frame = |
| 933 response_framer.SerializeFrame(headers_frame); |
| 934 |
| 935 QuicPacketNumber packet_number = 1; |
| 936 size_t chunk_size = 1200; |
| 937 for (size_t offset = 0; offset < spdy_frame.size(); offset += chunk_size) { |
| 938 size_t len = std::min(chunk_size, spdy_frame.size() - offset); |
| 939 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 940 packet_number++, kHeadersStreamId, false, false, offset, |
| 941 base::StringPiece(spdy_frame.data() + offset, len))); |
| 942 } |
| 943 |
| 944 mock_quic_data.AddRead( |
| 945 ConstructServerDataPacket(packet_number, GetNthClientInitiatedStreamId(0), |
| 946 false, true, 0, "hello!")); |
| 947 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
| 948 mock_quic_data.AddAsyncWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 949 mock_quic_data.AddAsyncWrite( |
| 950 ConstructClientAckPacket(4, packet_number, 3, 1)); |
| 951 |
| 952 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 953 |
| 954 CreateSession(); |
| 955 |
| 956 SendRequestAndExpectQuicResponse("hello!"); |
| 957 } |
| 958 |
| 959 TEST_P(QuicNetworkTransactionTest, TooLargeResponseHeaders) { |
| 960 params_.origins_to_force_quic_on.insert( |
| 961 HostPortPair::FromString("mail.example.org:443")); |
| 962 |
| 963 MockQuicData mock_quic_data; |
| 964 QuicStreamOffset header_stream_offset = 0; |
| 965 mock_quic_data.AddWrite( |
| 966 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 967 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 968 2, GetNthClientInitiatedStreamId(0), true, true, |
| 969 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 970 SpdyHeaderBlock response_headers = GetResponseHeaders("200 OK"); |
| 971 response_headers["key1"] = std::string(30000, 'A'); |
| 972 response_headers["key2"] = std::string(30000, 'A'); |
| 973 response_headers["key3"] = std::string(30000, 'A'); |
| 974 response_headers["key4"] = std::string(30000, 'A'); |
| 975 response_headers["key5"] = std::string(30000, 'A'); |
| 976 response_headers["key6"] = std::string(30000, 'A'); |
| 977 response_headers["key7"] = std::string(30000, 'A'); |
| 978 response_headers["key8"] = std::string(30000, 'A'); |
| 979 response_headers["key9"] = std::string(30000, 'A'); |
| 980 SpdyHeadersIR headers_frame(GetNthClientInitiatedStreamId(0), |
| 981 std::move(response_headers)); |
| 982 SpdyFramer response_framer(SpdyFramer::ENABLE_COMPRESSION); |
| 983 SpdySerializedFrame spdy_frame = |
| 984 response_framer.SerializeFrame(headers_frame); |
| 985 |
| 986 QuicPacketNumber packet_number = 1; |
| 987 size_t chunk_size = 1200; |
| 988 for (size_t offset = 0; offset < spdy_frame.size(); offset += chunk_size) { |
| 989 size_t len = std::min(chunk_size, spdy_frame.size() - offset); |
| 990 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 991 packet_number++, kHeadersStreamId, false, false, offset, |
| 992 base::StringPiece(spdy_frame.data() + offset, len))); |
| 993 } |
| 994 |
| 995 mock_quic_data.AddRead( |
| 996 ConstructServerDataPacket(packet_number, GetNthClientInitiatedStreamId(0), |
| 997 false, true, 0, "hello!")); |
| 998 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
| 999 mock_quic_data.AddAsyncWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 1000 mock_quic_data.AddAsyncWrite(ConstructClientAckAndRstPacket( |
| 1001 4, GetNthClientInitiatedStreamId(0), QUIC_HEADERS_TOO_LARGE, |
| 1002 packet_number, 3, 1)); |
| 1003 |
| 1004 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1005 |
| 1006 CreateSession(); |
| 1007 |
| 1008 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get()); |
| 1009 TestCompletionCallback callback; |
| 1010 int rv = trans.Start(&request_, callback.callback(), net_log_.bound()); |
| 1011 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1012 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 1013 } |
| 1014 |
908 TEST_P(QuicNetworkTransactionTest, ForceQuicForAll) { | 1015 TEST_P(QuicNetworkTransactionTest, ForceQuicForAll) { |
909 params_.origins_to_force_quic_on.insert(HostPortPair()); | 1016 params_.origins_to_force_quic_on.insert(HostPortPair()); |
910 | 1017 |
911 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 1018 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
912 | 1019 |
913 MockQuicData mock_quic_data; | 1020 MockQuicData mock_quic_data; |
914 QuicStreamOffset header_stream_offset = 0; | 1021 QuicStreamOffset header_stream_offset = 0; |
915 mock_quic_data.AddWrite( | 1022 mock_quic_data.AddWrite( |
916 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1023 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
917 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1024 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
(...skipping 3771 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4689 | 4796 |
4690 request_.url = GURL("https://mail.example.org/pushed.jpg"); | 4797 request_.url = GURL("https://mail.example.org/pushed.jpg"); |
4691 ChunkedUploadDataStream upload_data(0); | 4798 ChunkedUploadDataStream upload_data(0); |
4692 upload_data.AppendData("1", 1, true); | 4799 upload_data.AppendData("1", 1, true); |
4693 request_.upload_data_stream = &upload_data; | 4800 request_.upload_data_stream = &upload_data; |
4694 SendRequestAndExpectQuicResponse("and hello!"); | 4801 SendRequestAndExpectQuicResponse("and hello!"); |
4695 } | 4802 } |
4696 | 4803 |
4697 } // namespace test | 4804 } // namespace test |
4698 } // namespace net | 4805 } // namespace net |
OLD | NEW |