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 <stddef.h> | 5 #include <stddef.h> |
6 #include <string> | 6 #include <string> |
7 #include <sys/epoll.h> | 7 #include <sys/epoll.h> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 QuicVersionVector server_supported_versions; | 95 QuicVersionVector server_supported_versions; |
96 QuicVersion negotiated_version; | 96 QuicVersion negotiated_version; |
97 bool use_pacing; | 97 bool use_pacing; |
98 }; | 98 }; |
99 | 99 |
100 // Constructs various test permutations. | 100 // Constructs various test permutations. |
101 vector<TestParams> GetTestParams() { | 101 vector<TestParams> GetTestParams() { |
102 vector<TestParams> params; | 102 vector<TestParams> params; |
103 QuicVersionVector all_supported_versions = QuicSupportedVersions(); | 103 QuicVersionVector all_supported_versions = QuicSupportedVersions(); |
104 for (int use_pacing = 0; use_pacing < 2; ++use_pacing) { | 104 for (int use_pacing = 0; use_pacing < 2; ++use_pacing) { |
105 // TODO(rch): since 13 is not 0-RTT compatible with 12, we can not | |
106 // have the client support both at the same time. | |
107 #if 0 | |
108 // Add an entry for server and client supporting all versions. | 105 // Add an entry for server and client supporting all versions. |
109 params.push_back(TestParams(all_supported_versions, | 106 params.push_back(TestParams(all_supported_versions, |
110 all_supported_versions, | 107 all_supported_versions, |
111 all_supported_versions[0], | 108 all_supported_versions[0], |
112 use_pacing != 0)); | 109 use_pacing != 0)); |
113 #endif | |
114 | 110 |
115 // Test client supporting 1 version and server supporting all versions. | |
116 // Simulate an old client and exercise version downgrade in the server. | |
117 // No protocol negotiation should occur. Skip the i = 0 case because it | |
118 // is essentially the same as the default case. | |
119 // TODO(rch): When QUIC_VERSION_12 is removed, change the intialization | |
120 // of i from 0 back to 1. | |
121 for (size_t i = 0; i < all_supported_versions.size(); ++i) { | |
122 QuicVersionVector client_supported_versions; | |
123 client_supported_versions.push_back(all_supported_versions[i]); | |
124 params.push_back(TestParams(client_supported_versions, | |
125 all_supported_versions, | |
126 client_supported_versions[0], | |
127 use_pacing != 0)); | |
128 } | |
129 | |
130 // TODO(rch): since 13 is not 0-RTT compatible with 12, we can not | |
131 // have the client support both at the same time. | |
132 #if 0 | |
133 // Test client supporting all versions and server supporting 1 version. | 111 // Test client supporting all versions and server supporting 1 version. |
134 // Simulate an old server and exercise version downgrade in the client. | 112 // Simulate an old server and exercise version downgrade in the client. |
135 // Protocol negotiation should occur. Skip the i = 0 case because it is | 113 // Protocol negotiation should occur. Skip the i = 0 case because it is |
136 // essentially the same as the default case. | 114 // essentially the same as the default case. |
137 for (size_t i = 1; i < all_supported_versions.size(); ++i) { | 115 for (size_t i = 1; i < all_supported_versions.size(); ++i) { |
138 QuicVersionVector server_supported_versions; | 116 QuicVersionVector server_supported_versions; |
139 server_supported_versions.push_back(all_supported_versions[i]); | 117 server_supported_versions.push_back(all_supported_versions[i]); |
140 params.push_back(TestParams(all_supported_versions, | 118 params.push_back(TestParams(all_supported_versions, |
141 server_supported_versions, | 119 server_supported_versions, |
142 server_supported_versions[0], | 120 server_supported_versions[0], |
143 use_pacing != 0)); | 121 use_pacing != 0)); |
144 } | 122 } |
145 #endif | |
146 } | 123 } |
147 return params; | 124 return params; |
148 } | 125 } |
149 | 126 |
150 class ServerDelegate : public PacketDroppingTestWriter::Delegate { | 127 class ServerDelegate : public PacketDroppingTestWriter::Delegate { |
151 public: | 128 public: |
152 explicit ServerDelegate(QuicDispatcher* dispatcher) | 129 explicit ServerDelegate(QuicDispatcher* dispatcher) |
153 : dispatcher_(dispatcher) {} | 130 : dispatcher_(dispatcher) {} |
154 virtual ~ServerDelegate() {} | 131 virtual ~ServerDelegate() {} |
155 virtual void OnCanWrite() OVERRIDE { dispatcher_->OnCanWrite(); } | 132 virtual void OnCanWrite() OVERRIDE { dispatcher_->OnCanWrite(); } |
(...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
825 | 802 |
826 client_->client()->WaitForCryptoHandshakeConfirmed(); | 803 client_->client()->WaitForCryptoHandshakeConfirmed(); |
827 | 804 |
828 QuicSession* session = client_->client()->session(); | 805 QuicSession* session = client_->client()->session(); |
829 // Lose the request. | 806 // Lose the request. |
830 SetPacketLossPercentage(100); | 807 SetPacketLossPercentage(100); |
831 EXPECT_LT(0, client_->SendRequest("/small_response")); | 808 EXPECT_LT(0, client_->SendRequest("/small_response")); |
832 client_->client()->WaitForEvents(); | 809 client_->client()->WaitForEvents(); |
833 // Transmit the cancel, and ensure the connection is torn down properly. | 810 // Transmit the cancel, and ensure the connection is torn down properly. |
834 SetPacketLossPercentage(0); | 811 SetPacketLossPercentage(0); |
835 QuicStreamId stream_id = negotiated_version_ > QUIC_VERSION_12 ? 5 : 3; | 812 QuicStreamId stream_id = 5; |
836 session->SendRstStream(stream_id, QUIC_STREAM_CANCELLED, 0); | 813 session->SendRstStream(stream_id, QUIC_STREAM_CANCELLED, 0); |
837 | 814 |
838 // WaitForEvents waits 50ms and returns true if there are outstanding | 815 // WaitForEvents waits 50ms and returns true if there are outstanding |
839 // requests. | 816 // requests. |
840 while (client_->client()->WaitForEvents() == true) { | 817 while (client_->client()->WaitForEvents() == true) { |
841 } | 818 } |
842 if (negotiated_version_ > QUIC_VERSION_12) { | 819 // It should be completely fine to RST a stream before any data has been |
843 // It should be completely fine to RST a stream before any data has bee | 820 // received for that stream. |
844 // received for that stream. | 821 EXPECT_EQ(QUIC_NO_ERROR, client_->connection_error()); |
845 EXPECT_EQ(QUIC_NO_ERROR, client_->connection_error()); | |
846 } else { | |
847 // Check that the connection is always properly closed | |
848 // from a stream being RST before headers are decompressed. | |
849 EXPECT_EQ(QUIC_STREAM_RST_BEFORE_HEADERS_DECOMPRESSED, | |
850 client_->connection_error()); | |
851 } | |
852 } | 822 } |
853 | 823 |
854 class WrongAddressWriter : public QuicPacketWriterWrapper { | 824 class WrongAddressWriter : public QuicPacketWriterWrapper { |
855 public: | 825 public: |
856 WrongAddressWriter() { | 826 WrongAddressWriter() { |
857 IPAddressNumber ip; | 827 IPAddressNumber ip; |
858 CHECK(net::ParseIPLiteralToNumber("127.0.0.2", &ip)); | 828 CHECK(net::ParseIPLiteralToNumber("127.0.0.2", &ip)); |
859 self_address_ = IPEndPoint(ip, 0); | 829 self_address_ = IPEndPoint(ip, 0); |
860 } | 830 } |
861 | 831 |
(...skipping 30 matching lines...) Expand all Loading... |
892 client_->SendSynchronousRequest("/bar"); | 862 client_->SendSynchronousRequest("/bar"); |
893 | 863 |
894 EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error()); | 864 EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error()); |
895 EXPECT_EQ(QUIC_ERROR_MIGRATING_ADDRESS, client_->connection_error()); | 865 EXPECT_EQ(QUIC_ERROR_MIGRATING_ADDRESS, client_->connection_error()); |
896 } | 866 } |
897 | 867 |
898 } // namespace | 868 } // namespace |
899 } // namespace test | 869 } // namespace test |
900 } // namespace tools | 870 } // namespace tools |
901 } // namespace net | 871 } // namespace net |
OLD | NEW |