| 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 <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/memory/singleton.h" | 10 #include "base/memory/singleton.h" |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 : server_hostname_("example.com"), | 151 : server_hostname_("example.com"), |
| 152 server_started_(false), | 152 server_started_(false), |
| 153 strike_register_no_startup_period_(false) { | 153 strike_register_no_startup_period_(false) { |
| 154 net::IPAddressNumber ip; | 154 net::IPAddressNumber ip; |
| 155 CHECK(net::ParseIPLiteralToNumber("127.0.0.1", &ip)); | 155 CHECK(net::ParseIPLiteralToNumber("127.0.0.1", &ip)); |
| 156 server_address_ = IPEndPoint(ip, 0); | 156 server_address_ = IPEndPoint(ip, 0); |
| 157 | 157 |
| 158 client_supported_versions_ = GetParam().client_supported_versions; | 158 client_supported_versions_ = GetParam().client_supported_versions; |
| 159 server_supported_versions_ = GetParam().server_supported_versions; | 159 server_supported_versions_ = GetParam().server_supported_versions; |
| 160 negotiated_version_ = GetParam().negotiated_version; | 160 negotiated_version_ = GetParam().negotiated_version; |
| 161 FLAGS_limit_rto_increase_for_tests = true; | |
| 162 FLAGS_enable_quic_pacing = GetParam().use_pacing; | 161 FLAGS_enable_quic_pacing = GetParam().use_pacing; |
| 163 LOG(INFO) << "Using Configuration: " << GetParam(); | 162 LOG(INFO) << "Using Configuration: " << GetParam(); |
| 164 | 163 |
| 165 client_config_.SetDefaults(); | 164 client_config_.SetDefaults(); |
| 166 server_config_.SetDefaults(); | 165 server_config_.SetDefaults(); |
| 167 server_config_.set_initial_round_trip_time_us(kMaxInitialRoundTripTimeUs, | 166 server_config_.set_initial_round_trip_time_us(kMaxInitialRoundTripTimeUs, |
| 168 0); | 167 0); |
| 169 | 168 |
| 170 QuicInMemoryCachePeer::ResetForTests(); | 169 QuicInMemoryCachePeer::ResetForTests(); |
| 171 AddToCache("GET", "https://www.google.com/foo", | 170 AddToCache("GET", "https://www.google.com/foo", |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 StringPiece response_code, | 245 StringPiece response_code, |
| 247 StringPiece response_detail, | 246 StringPiece response_detail, |
| 248 StringPiece body) { | 247 StringPiece body) { |
| 249 QuicInMemoryCache::GetInstance()->AddSimpleResponse( | 248 QuicInMemoryCache::GetInstance()->AddSimpleResponse( |
| 250 method, path, version, response_code, response_detail, body); | 249 method, path, version, response_code, response_detail, body); |
| 251 } | 250 } |
| 252 | 251 |
| 253 void SetPacketLossPercentage(int32 loss) { | 252 void SetPacketLossPercentage(int32 loss) { |
| 254 // TODO(rtenneti): enable when we can do random packet loss tests in | 253 // TODO(rtenneti): enable when we can do random packet loss tests in |
| 255 // chrome's tree. | 254 // chrome's tree. |
| 256 // client_writer_->set_fake_packet_loss_percentage(loss); | 255 if (loss != 0 && loss != 100) |
| 257 // server_writer_->set_fake_packet_loss_percentage(loss); | 256 return; |
| 257 client_writer_->set_fake_packet_loss_percentage(loss); |
| 258 server_writer_->set_fake_packet_loss_percentage(loss); |
| 258 } | 259 } |
| 259 | 260 |
| 260 void SetPacketSendDelay(QuicTime::Delta delay) { | 261 void SetPacketSendDelay(QuicTime::Delta delay) { |
| 261 // TODO(rtenneti): enable when we can do random packet send delay tests in | 262 // TODO(rtenneti): enable when we can do random packet send delay tests in |
| 262 // chrome's tree. | 263 // chrome's tree. |
| 263 // client_writer_->set_fake_packet_delay(delay); | 264 // client_writer_->set_fake_packet_delay(delay); |
| 264 // server_writer_->set_fake_packet_delay(delay); | 265 // server_writer_->set_fake_packet_delay(delay); |
| 265 } | 266 } |
| 266 | 267 |
| 267 void SetReorderPercentage(int32 reorder) { | 268 void SetReorderPercentage(int32 reorder) { |
| (...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 773 for (int i = 0; i < max_streams; ++i) { | 774 for (int i = 0; i < max_streams; ++i) { |
| 774 EXPECT_LT(0, client_->SendRequest("/large_response")); | 775 EXPECT_LT(0, client_->SendRequest("/large_response")); |
| 775 } | 776 } |
| 776 | 777 |
| 777 // WaitForEvents waits 50ms and returns true if there are outstanding | 778 // WaitForEvents waits 50ms and returns true if there are outstanding |
| 778 // requests. | 779 // requests. |
| 779 while (client_->client()->WaitForEvents() == true) { | 780 while (client_->client()->WaitForEvents() == true) { |
| 780 } | 781 } |
| 781 } | 782 } |
| 782 | 783 |
| 784 TEST_P(EndToEndTest, StreamCancelErrorTest) { |
| 785 ASSERT_TRUE(Initialize()); |
| 786 string small_body; |
| 787 GenerateBody(&small_body, 256); |
| 788 |
| 789 AddToCache("GET", "/small_response", "HTTP/1.1", "200", "OK", small_body); |
| 790 |
| 791 client_->client()->WaitForCryptoHandshakeConfirmed(); |
| 792 |
| 793 QuicSession* session = client_->client()->session(); |
| 794 // Lose the request. |
| 795 SetPacketLossPercentage(100); |
| 796 EXPECT_LT(0, client_->SendRequest("/small_response")); |
| 797 client_->client()->WaitForEvents(); |
| 798 // Transmit the cancel, and ensure the connection is torn down properly. |
| 799 SetPacketLossPercentage(0); |
| 800 QuicStreamId stream_id = negotiated_version_ > QUIC_VERSION_12 ? 5 : 3; |
| 801 session->SendRstStream(stream_id, QUIC_STREAM_CANCELLED); |
| 802 |
| 803 // WaitForEvents waits 50ms and returns true if there are outstanding |
| 804 // requests. |
| 805 while (client_->client()->WaitForEvents() == true) { |
| 806 } |
| 807 if (negotiated_version_ > QUIC_VERSION_12) { |
| 808 // It should be completely fine to RST a stream before any data has bee |
| 809 // received for that stream. |
| 810 EXPECT_EQ(QUIC_NO_ERROR, client_->connection_error()); |
| 811 } else { |
| 812 // Check that the connection is always properly closed |
| 813 // from a stream being RST before headers are decompressed. |
| 814 EXPECT_EQ(QUIC_STREAM_RST_BEFORE_HEADERS_DECOMPRESSED, |
| 815 client_->connection_error()); |
| 816 } |
| 817 } |
| 818 |
| 783 class WrongAddressWriter : public QuicTestWriter { | 819 class WrongAddressWriter : public QuicTestWriter { |
| 784 public: | 820 public: |
| 785 WrongAddressWriter() { | 821 WrongAddressWriter() { |
| 786 IPAddressNumber ip; | 822 IPAddressNumber ip; |
| 787 CHECK(net::ParseIPLiteralToNumber("127.0.0.2", &ip)); | 823 CHECK(net::ParseIPLiteralToNumber("127.0.0.2", &ip)); |
| 788 self_address_ = IPEndPoint(ip, 0); | 824 self_address_ = IPEndPoint(ip, 0); |
| 789 } | 825 } |
| 790 | 826 |
| 791 virtual WriteResult WritePacket( | 827 virtual WriteResult WritePacket( |
| 792 const char* buffer, size_t buf_len, | 828 const char* buffer, size_t buf_len, |
| (...skipping 27 matching lines...) Expand all Loading... |
| 820 client_->SendSynchronousRequest("/bar"); | 856 client_->SendSynchronousRequest("/bar"); |
| 821 | 857 |
| 822 EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error()); | 858 EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error()); |
| 823 EXPECT_EQ(QUIC_ERROR_MIGRATING_ADDRESS, client_->connection_error()); | 859 EXPECT_EQ(QUIC_ERROR_MIGRATING_ADDRESS, client_->connection_error()); |
| 824 } | 860 } |
| 825 | 861 |
| 826 } // namespace | 862 } // namespace |
| 827 } // namespace test | 863 } // namespace test |
| 828 } // namespace tools | 864 } // namespace tools |
| 829 } // namespace net | 865 } // namespace net |
| OLD | NEW |