| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <memory> | 5 #include <memory> |
| 6 #include <ostream> | 6 #include <ostream> |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 #include "net/proxy/proxy_service.h" | 31 #include "net/proxy/proxy_service.h" |
| 32 #include "net/quic/test_tools/crypto_test_utils.h" | 32 #include "net/quic/test_tools/crypto_test_utils.h" |
| 33 #include "net/quic/test_tools/quic_test_utils.h" | 33 #include "net/quic/test_tools/quic_test_utils.h" |
| 34 #include "net/ssl/default_channel_id_store.h" | 34 #include "net/ssl/default_channel_id_store.h" |
| 35 #include "net/ssl/ssl_config_service_defaults.h" | 35 #include "net/ssl/ssl_config_service_defaults.h" |
| 36 #include "net/test/cert_test_util.h" | 36 #include "net/test/cert_test_util.h" |
| 37 #include "net/test/gtest_util.h" | 37 #include "net/test/gtest_util.h" |
| 38 #include "net/test/test_data_directory.h" | 38 #include "net/test/test_data_directory.h" |
| 39 #include "net/tools/quic/quic_in_memory_cache.h" | 39 #include "net/tools/quic/quic_in_memory_cache.h" |
| 40 #include "net/tools/quic/quic_simple_server.h" | 40 #include "net/tools/quic/quic_simple_server.h" |
| 41 #include "net/tools/quic/test_tools/quic_in_memory_cache_peer.h" | |
| 42 #include "testing/gmock/include/gmock/gmock.h" | 41 #include "testing/gmock/include/gmock/gmock.h" |
| 43 #include "testing/gtest/include/gtest/gtest.h" | 42 #include "testing/gtest/include/gtest/gtest.h" |
| 44 #include "testing/platform_test.h" | 43 #include "testing/platform_test.h" |
| 45 | 44 |
| 46 using base::StringPiece; | 45 using base::StringPiece; |
| 47 | 46 |
| 48 namespace net { | 47 namespace net { |
| 49 | 48 |
| 50 using test::IsOk; | 49 using test::IsOk; |
| 51 using test::QuicInMemoryCachePeer; | |
| 52 | 50 |
| 53 namespace test { | 51 namespace test { |
| 54 | 52 |
| 55 namespace { | 53 namespace { |
| 56 | 54 |
| 57 const char kResponseBody[] = "some arbitrary response body"; | 55 const char kResponseBody[] = "some arbitrary response body"; |
| 58 | 56 |
| 59 // Factory for creating HttpTransactions, used by TestTransactionConsumer. | 57 // Factory for creating HttpTransactions, used by TestTransactionConsumer. |
| 60 class TestTransactionFactory : public HttpTransactionFactory { | 58 class TestTransactionFactory : public HttpTransactionFactory { |
| 61 public: | 59 public: |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 | 144 |
| 147 // Creates a mock host resolver in which test.example.com | 145 // Creates a mock host resolver in which test.example.com |
| 148 // resolves to localhost. | 146 // resolves to localhost. |
| 149 static MockHostResolver* CreateResolverImpl() { | 147 static MockHostResolver* CreateResolverImpl() { |
| 150 MockHostResolver* resolver = new MockHostResolver(); | 148 MockHostResolver* resolver = new MockHostResolver(); |
| 151 resolver->rules()->AddRule("test.example.com", "127.0.0.1"); | 149 resolver->rules()->AddRule("test.example.com", "127.0.0.1"); |
| 152 return resolver; | 150 return resolver; |
| 153 } | 151 } |
| 154 | 152 |
| 155 void SetUp() override { | 153 void SetUp() override { |
| 156 QuicInMemoryCachePeer::ResetForTests(); | |
| 157 StartServer(); | 154 StartServer(); |
| 158 | 155 |
| 159 // Use a mapped host resolver so that request for test.example.com (port 80) | 156 // Use a mapped host resolver so that request for test.example.com (port 80) |
| 160 // reach the server running on localhost. | 157 // reach the server running on localhost. |
| 161 std::string map_rule = "MAP test.example.com test.example.com:" + | 158 std::string map_rule = "MAP test.example.com test.example.com:" + |
| 162 base::IntToString(server_->server_address().port()); | 159 base::IntToString(server_->server_address().port()); |
| 163 EXPECT_TRUE(host_resolver_.AddRuleFromString(map_rule)); | 160 EXPECT_TRUE(host_resolver_.AddRuleFromString(map_rule)); |
| 164 | 161 |
| 165 // To simplify the test, and avoid the race with the HTTP request, we force | 162 // To simplify the test, and avoid the race with the HTTP request, we force |
| 166 // QUIC for these requests. | 163 // QUIC for these requests. |
| 167 params_.origins_to_force_quic_on.insert( | 164 params_.origins_to_force_quic_on.insert( |
| 168 HostPortPair::FromString("test.example.com:443")); | 165 HostPortPair::FromString("test.example.com:443")); |
| 169 | 166 |
| 170 transaction_factory_.reset(new TestTransactionFactory(params_)); | 167 transaction_factory_.reset(new TestTransactionFactory(params_)); |
| 171 } | 168 } |
| 172 | 169 |
| 173 void TearDown() override { QuicInMemoryCachePeer::ResetForTests(); } | 170 void TearDown() override {} |
| 174 | 171 |
| 175 // Starts the QUIC server listening on a random port. | 172 // Starts the QUIC server listening on a random port. |
| 176 void StartServer() { | 173 void StartServer() { |
| 177 server_address_ = IPEndPoint(IPAddress(127, 0, 0, 1), 0); | 174 server_address_ = IPEndPoint(IPAddress(127, 0, 0, 1), 0); |
| 178 server_config_.SetInitialStreamFlowControlWindowToSend( | 175 server_config_.SetInitialStreamFlowControlWindowToSend( |
| 179 kInitialStreamFlowControlWindowForTest); | 176 kInitialStreamFlowControlWindowForTest); |
| 180 server_config_.SetInitialSessionFlowControlWindowToSend( | 177 server_config_.SetInitialSessionFlowControlWindowToSend( |
| 181 kInitialSessionFlowControlWindowForTest); | 178 kInitialSessionFlowControlWindowForTest); |
| 182 server_config_options_.token_binding_params = QuicTagVector{kTB10, kP256}; | 179 server_config_options_.token_binding_params = QuicTagVector{kTB10, kP256}; |
| 183 server_.reset(new QuicSimpleServer(CryptoTestUtils::ProofSourceForTesting(), | 180 server_.reset(new QuicSimpleServer( |
| 184 server_config_, server_config_options_, | 181 CryptoTestUtils::ProofSourceForTesting(), server_config_, |
| 185 AllSupportedVersions())); | 182 server_config_options_, AllSupportedVersions(), &in_memory_cache_)); |
| 186 server_->Listen(server_address_); | 183 server_->Listen(server_address_); |
| 187 server_address_ = server_->server_address(); | 184 server_address_ = server_->server_address(); |
| 188 server_->StartReading(); | 185 server_->StartReading(); |
| 189 server_started_ = true; | 186 server_started_ = true; |
| 190 } | 187 } |
| 191 | 188 |
| 192 // Adds an entry to the cache used by the QUIC server to serve | 189 // Adds an entry to the cache used by the QUIC server to serve |
| 193 // responses. | 190 // responses. |
| 194 void AddToCache(StringPiece path, | 191 void AddToCache(StringPiece path, |
| 195 int response_code, | 192 int response_code, |
| 196 StringPiece response_detail, | 193 StringPiece response_detail, |
| 197 StringPiece body) { | 194 StringPiece body) { |
| 198 QuicInMemoryCache::GetInstance()->AddSimpleResponse( | 195 in_memory_cache_.AddSimpleResponse("test.example.com", path, response_code, |
| 199 "test.example.com", path, response_code, body); | 196 body); |
| 200 } | 197 } |
| 201 | 198 |
| 202 // Populates |request_body_| with |length_| ASCII bytes. | 199 // Populates |request_body_| with |length_| ASCII bytes. |
| 203 void GenerateBody(size_t length) { | 200 void GenerateBody(size_t length) { |
| 204 request_body_.clear(); | 201 request_body_.clear(); |
| 205 request_body_.reserve(length); | 202 request_body_.reserve(length); |
| 206 for (size_t i = 0; i < length; ++i) { | 203 for (size_t i = 0; i < length; ++i) { |
| 207 request_body_.append(1, static_cast<char>(32 + i % (126 - 32))); | 204 request_body_.append(1, static_cast<char>(32 + i % (126 - 32))); |
| 208 } | 205 } |
| 209 } | 206 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; | 241 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; |
| 245 std::unique_ptr<ProxyService> proxy_service_; | 242 std::unique_ptr<ProxyService> proxy_service_; |
| 246 std::unique_ptr<HttpAuthHandlerFactory> auth_handler_factory_; | 243 std::unique_ptr<HttpAuthHandlerFactory> auth_handler_factory_; |
| 247 HttpServerPropertiesImpl http_server_properties_; | 244 HttpServerPropertiesImpl http_server_properties_; |
| 248 HttpNetworkSession::Params params_; | 245 HttpNetworkSession::Params params_; |
| 249 std::unique_ptr<TestTransactionFactory> transaction_factory_; | 246 std::unique_ptr<TestTransactionFactory> transaction_factory_; |
| 250 HttpRequestInfo request_; | 247 HttpRequestInfo request_; |
| 251 std::string request_body_; | 248 std::string request_body_; |
| 252 std::unique_ptr<UploadDataStream> upload_data_stream_; | 249 std::unique_ptr<UploadDataStream> upload_data_stream_; |
| 253 std::unique_ptr<QuicSimpleServer> server_; | 250 std::unique_ptr<QuicSimpleServer> server_; |
| 251 QuicInMemoryCache in_memory_cache_; |
| 254 IPEndPoint server_address_; | 252 IPEndPoint server_address_; |
| 255 std::string server_hostname_; | 253 std::string server_hostname_; |
| 256 QuicConfig server_config_; | 254 QuicConfig server_config_; |
| 257 QuicCryptoServerConfig::ConfigOptions server_config_options_; | 255 QuicCryptoServerConfig::ConfigOptions server_config_options_; |
| 258 bool server_started_; | 256 bool server_started_; |
| 259 bool strike_register_no_startup_period_; | 257 bool strike_register_no_startup_period_; |
| 260 }; | 258 }; |
| 261 | 259 |
| 262 INSTANTIATE_TEST_CASE_P(Tests, | 260 INSTANTIATE_TEST_CASE_P(Tests, |
| 263 QuicEndToEndTest, | 261 QuicEndToEndTest, |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 | 359 |
| 362 // Will terminate when the last consumer completes. | 360 // Will terminate when the last consumer completes. |
| 363 base::RunLoop().Run(); | 361 base::RunLoop().Run(); |
| 364 | 362 |
| 365 for (const auto& consumer : consumers) | 363 for (const auto& consumer : consumers) |
| 366 CheckResponse(*consumer.get(), "HTTP/1.1 200", kResponseBody); | 364 CheckResponse(*consumer.get(), "HTTP/1.1 200", kResponseBody); |
| 367 } | 365 } |
| 368 | 366 |
| 369 } // namespace test | 367 } // namespace test |
| 370 } // namespace net | 368 } // namespace net |
| OLD | NEW |