Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Side by Side Diff: net/quic/quic_end_to_end_unittest.cc

Issue 1393713003: Remove insecure QUIC support from Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/http/http_stream_factory_impl_job.cc ('k') | net/quic/quic_http_stream.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/compiler_specific.h" 6 #include "base/compiler_specific.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "net/base/elements_upload_data_stream.h" 10 #include "net/base/elements_upload_data_stream.h"
11 #include "net/base/test_completion_callback.h" 11 #include "net/base/test_completion_callback.h"
12 #include "net/base/test_data_directory.h"
12 #include "net/base/upload_bytes_element_reader.h" 13 #include "net/base/upload_bytes_element_reader.h"
13 #include "net/base/upload_data_stream.h" 14 #include "net/base/upload_data_stream.h"
14 #include "net/cert/mock_cert_verifier.h" 15 #include "net/cert/mock_cert_verifier.h"
15 #include "net/dns/mapped_host_resolver.h" 16 #include "net/dns/mapped_host_resolver.h"
16 #include "net/dns/mock_host_resolver.h" 17 #include "net/dns/mock_host_resolver.h"
17 #include "net/http/http_auth_handler_factory.h" 18 #include "net/http/http_auth_handler_factory.h"
18 #include "net/http/http_network_session.h" 19 #include "net/http/http_network_session.h"
19 #include "net/http/http_network_transaction.h" 20 #include "net/http/http_network_transaction.h"
20 #include "net/http/http_server_properties_impl.h" 21 #include "net/http/http_server_properties_impl.h"
21 #include "net/http/http_transaction_test_util.h" 22 #include "net/http/http_transaction_test_util.h"
22 #include "net/http/transport_security_state.h" 23 #include "net/http/transport_security_state.h"
23 #include "net/proxy/proxy_service.h" 24 #include "net/proxy/proxy_service.h"
25 #include "net/quic/test_tools/crypto_test_utils.h"
24 #include "net/quic/test_tools/quic_test_utils.h" 26 #include "net/quic/test_tools/quic_test_utils.h"
25 #include "net/ssl/ssl_config_service_defaults.h" 27 #include "net/ssl/ssl_config_service_defaults.h"
28 #include "net/test/cert_test_util.h"
26 #include "net/tools/quic/quic_in_memory_cache.h" 29 #include "net/tools/quic/quic_in_memory_cache.h"
27 #include "net/tools/quic/quic_server.h" 30 #include "net/tools/quic/quic_server.h"
28 #include "net/tools/quic/test_tools/quic_in_memory_cache_peer.h" 31 #include "net/tools/quic/test_tools/quic_in_memory_cache_peer.h"
29 #include "net/tools/quic/test_tools/server_thread.h" 32 #include "net/tools/quic/test_tools/server_thread.h"
30 #include "testing/gtest/include/gtest/gtest.h" 33 #include "testing/gtest/include/gtest/gtest.h"
31 #include "testing/platform_test.h" 34 #include "testing/platform_test.h"
32 35
33 using base::StringPiece; 36 using base::StringPiece;
34 37
35 namespace net { 38 namespace net {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 protected: 77 protected:
75 QuicEndToEndTest() 78 QuicEndToEndTest()
76 : host_resolver_impl_(CreateResolverImpl()), 79 : host_resolver_impl_(CreateResolverImpl()),
77 host_resolver_(host_resolver_impl_.Pass()), 80 host_resolver_(host_resolver_impl_.Pass()),
78 ssl_config_service_(new SSLConfigServiceDefaults), 81 ssl_config_service_(new SSLConfigServiceDefaults),
79 proxy_service_(ProxyService::CreateDirect()), 82 proxy_service_(ProxyService::CreateDirect()),
80 auth_handler_factory_( 83 auth_handler_factory_(
81 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), 84 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)),
82 strike_register_no_startup_period_(false) { 85 strike_register_no_startup_period_(false) {
83 request_.method = "GET"; 86 request_.method = "GET";
84 request_.url = GURL("http://www.google.com/"); 87 request_.url = GURL("https://test.example.com/");
85 request_.load_flags = 0; 88 request_.load_flags = 0;
86 89
87 params_.enable_quic = true; 90 params_.enable_quic = true;
88 params_.quic_clock = nullptr; 91 params_.quic_clock = nullptr;
89 params_.quic_random = nullptr; 92 params_.quic_random = nullptr;
90 params_.host_resolver = &host_resolver_; 93 params_.host_resolver = &host_resolver_;
91 params_.cert_verifier = &cert_verifier_; 94 params_.cert_verifier = &cert_verifier_;
92 params_.transport_security_state = &transport_security_state_; 95 params_.transport_security_state = &transport_security_state_;
93 params_.proxy_service = proxy_service_.get(); 96 params_.proxy_service = proxy_service_.get();
94 params_.ssl_config_service = ssl_config_service_.get(); 97 params_.ssl_config_service = ssl_config_service_.get();
95 params_.http_auth_handler_factory = auth_handler_factory_.get(); 98 params_.http_auth_handler_factory = auth_handler_factory_.get();
96 params_.http_server_properties = http_server_properties.GetWeakPtr(); 99 params_.http_server_properties = http_server_properties.GetWeakPtr();
100
101 net::CertVerifyResult verify_result;
102 verify_result.verified_cert = ImportCertFromFile(
103 GetTestCertsDirectory(), "quic_test.example.com.crt");
104 cert_verifier_.AddResultForCertAndHost(verify_result.verified_cert.get(),
105 "test.example.com", verify_result,
106 OK);
107 verify_result.verified_cert = ImportCertFromFile(
108 GetTestCertsDirectory(), "quic_test_ecc.example.com.crt");
109 cert_verifier_.AddResultForCertAndHost(verify_result.verified_cert.get(),
110 "test.example.com", verify_result,
111 OK);
97 } 112 }
98 113
99 // Creates a mock host resolver in which www.google.com 114 // Creates a mock host resolver in which test.example.com
100 // resolves to localhost. 115 // resolves to localhost.
101 static MockHostResolver* CreateResolverImpl() { 116 static MockHostResolver* CreateResolverImpl() {
102 MockHostResolver* resolver = new MockHostResolver(); 117 MockHostResolver* resolver = new MockHostResolver();
103 resolver->rules()->AddRule("www.google.com", "127.0.0.1"); 118 resolver->rules()->AddRule("test.example.com", "127.0.0.1");
104 return resolver; 119 return resolver;
105 } 120 }
106 121
107 void SetUp() override { 122 void SetUp() override {
108 QuicInMemoryCachePeer::ResetForTests(); 123 QuicInMemoryCachePeer::ResetForTests();
109 StartServer(); 124 StartServer();
110 125
111 // Use a mapped host resolver so that request for www.google.com (port 80) 126 // Use a mapped host resolver so that request for test.example.com (port 80)
112 // reach the server running on localhost. 127 // reach the server running on localhost.
113 std::string map_rule = "MAP www.google.com www.google.com:" + 128 std::string map_rule = "MAP test.example.com test.example.com:" +
114 base::IntToString(server_thread_->GetPort()); 129 base::IntToString(server_thread_->GetPort());
115 EXPECT_TRUE(host_resolver_.AddRuleFromString(map_rule)); 130 EXPECT_TRUE(host_resolver_.AddRuleFromString(map_rule));
116 131
117 // To simplify the test, and avoid the race with the HTTP request, we force 132 // To simplify the test, and avoid the race with the HTTP request, we force
118 // QUIC for these requests. 133 // QUIC for these requests.
119 params_.origin_to_force_quic_on = 134 params_.origin_to_force_quic_on =
120 HostPortPair::FromString("www.google.com:80"); 135 HostPortPair::FromString("test.example.com:443");
121 136
122 transaction_factory_.reset(new TestTransactionFactory(params_)); 137 transaction_factory_.reset(new TestTransactionFactory(params_));
123 } 138 }
124 139
125 void TearDown() override { 140 void TearDown() override {
126 StopServer(); 141 StopServer();
127 QuicInMemoryCachePeer::ResetForTests(); 142 QuicInMemoryCachePeer::ResetForTests();
128 } 143 }
129 144
130 // Starts the QUIC server listening on a random port. 145 // Starts the QUIC server listening on a random port.
131 void StartServer() { 146 void StartServer() {
132 IPAddressNumber ip; 147 IPAddressNumber ip;
133 CHECK(ParseIPLiteralToNumber("127.0.0.1", &ip)); 148 CHECK(ParseIPLiteralToNumber("127.0.0.1", &ip));
134 server_address_ = IPEndPoint(ip, 0); 149 server_address_ = IPEndPoint(ip, 0);
135 server_config_.SetInitialStreamFlowControlWindowToSend( 150 server_config_.SetInitialStreamFlowControlWindowToSend(
136 kInitialStreamFlowControlWindowForTest); 151 kInitialStreamFlowControlWindowForTest);
137 server_config_.SetInitialSessionFlowControlWindowToSend( 152 server_config_.SetInitialSessionFlowControlWindowToSend(
138 kInitialSessionFlowControlWindowForTest); 153 kInitialSessionFlowControlWindowForTest);
139 server_thread_.reset(new ServerThread( 154 QuicServer* server =
140 new QuicServer(server_config_, QuicSupportedVersions()), 155 new QuicServer(server_config_, QuicSupportedVersions());
141 /*is_secure=*/true, server_address_, 156 server_thread_.reset(new ServerThread(server, /*is_secure=*/true,
142 strike_register_no_startup_period_)); 157 server_address_,
158 strike_register_no_startup_period_));
159 server->SetProofSource(CryptoTestUtils::ProofSourceForTesting());
143 server_thread_->Initialize(); 160 server_thread_->Initialize();
144 server_address_ = IPEndPoint(server_address_.address(), 161 server_address_ = IPEndPoint(server_address_.address(),
145 server_thread_->GetPort()); 162 server_thread_->GetPort());
146 server_thread_->Start(); 163 server_thread_->Start();
147 server_started_ = true; 164 server_started_ = true;
148 } 165 }
149 166
150 // Stops the QUIC server. 167 // Stops the QUIC server.
151 void StopServer() { 168 void StopServer() {
152 if (!server_started_) { 169 if (!server_started_) {
153 return; 170 return;
154 } 171 }
155 if (server_thread_.get()) { 172 if (server_thread_.get()) {
156 server_thread_->Quit(); 173 server_thread_->Quit();
157 server_thread_->Join(); 174 server_thread_->Join();
158 } 175 }
159 } 176 }
160 177
161 // Adds an entry to the cache used by the QUIC server to serve 178 // Adds an entry to the cache used by the QUIC server to serve
162 // responses. 179 // responses.
163 void AddToCache(StringPiece path, 180 void AddToCache(StringPiece path,
164 int response_code, 181 int response_code,
165 StringPiece response_detail, 182 StringPiece response_detail,
166 StringPiece body) { 183 StringPiece body) {
167 QuicInMemoryCache::GetInstance()->AddSimpleResponse( 184 QuicInMemoryCache::GetInstance()->AddSimpleResponse(
168 "www.google.com", path, response_code, response_detail, body); 185 "test.example.com", path, response_code, response_detail, body);
169 } 186 }
170 187
171 // Populates |request_body_| with |length_| ASCII bytes. 188 // Populates |request_body_| with |length_| ASCII bytes.
172 void GenerateBody(size_t length) { 189 void GenerateBody(size_t length) {
173 request_body_.clear(); 190 request_body_.clear();
174 request_body_.reserve(length); 191 request_body_.reserve(length);
175 for (size_t i = 0; i < length; ++i) { 192 for (size_t i = 0; i < length; ++i) {
176 request_body_.append(1, static_cast<char>(32 + i % (126 - 32))); 193 request_body_.append(1, static_cast<char>(32 + i % (126 - 32)));
177 } 194 }
178 } 195 }
179 196
180 // Initializes |request_| for a post of |length| bytes. 197 // Initializes |request_| for a post of |length| bytes.
181 void InitializePostRequest(size_t length) { 198 void InitializePostRequest(size_t length) {
182 GenerateBody(length); 199 GenerateBody(length);
183 ScopedVector<UploadElementReader> element_readers; 200 ScopedVector<UploadElementReader> element_readers;
184 element_readers.push_back( 201 element_readers.push_back(
185 new UploadBytesElementReader(request_body_.data(), 202 new UploadBytesElementReader(request_body_.data(),
186 request_body_.length())); 203 request_body_.length()));
187 upload_data_stream_.reset( 204 upload_data_stream_.reset(
188 new ElementsUploadDataStream(element_readers.Pass(), 0)); 205 new ElementsUploadDataStream(element_readers.Pass(), 0));
189 request_.method = "POST"; 206 request_.method = "POST";
190 request_.url = GURL("http://www.google.com/"); 207 request_.url = GURL("https://test.example.com/");
191 request_.upload_data_stream = upload_data_stream_.get(); 208 request_.upload_data_stream = upload_data_stream_.get();
192 ASSERT_EQ(OK, request_.upload_data_stream->Init(CompletionCallback())); 209 ASSERT_EQ(OK, request_.upload_data_stream->Init(CompletionCallback()));
193 } 210 }
194 211
195 // Checks that |consumer| completed and received |status_line| and |body|. 212 // Checks that |consumer| completed and received |status_line| and |body|.
196 void CheckResponse(const TestTransactionConsumer& consumer, 213 void CheckResponse(const TestTransactionConsumer& consumer,
197 const std::string& status_line, 214 const std::string& status_line,
198 const std::string& body) { 215 const std::string& body) {
199 ASSERT_TRUE(consumer.is_done()); 216 ASSERT_TRUE(consumer.is_done());
200 EXPECT_EQ(OK, consumer.error()); 217 ASSERT_EQ(OK, consumer.error());
201 EXPECT_EQ(status_line, 218 EXPECT_EQ(status_line,
202 consumer.response_info()->headers->GetStatusLine()); 219 consumer.response_info()->headers->GetStatusLine());
203 EXPECT_EQ(body, consumer.content()); 220 EXPECT_EQ(body, consumer.content());
204 } 221 }
205 222
206 scoped_ptr<MockHostResolver> host_resolver_impl_; 223 scoped_ptr<MockHostResolver> host_resolver_impl_;
207 MappedHostResolver host_resolver_; 224 MappedHostResolver host_resolver_;
208 MockCertVerifier cert_verifier_; 225 MockCertVerifier cert_verifier_;
209 TransportSecurityState transport_security_state_; 226 TransportSecurityState transport_security_state_;
210 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; 227 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 base::MessageLoop::current()->Run(); 315 base::MessageLoop::current()->Run();
299 316
300 for (size_t i = 0; i < num_requests; ++i) { 317 for (size_t i = 0; i < num_requests; ++i) {
301 CheckResponse(*consumers[i], "HTTP/1.1 200 OK", kResponseBody); 318 CheckResponse(*consumers[i], "HTTP/1.1 200 OK", kResponseBody);
302 } 319 }
303 STLDeleteElements(&consumers); 320 STLDeleteElements(&consumers);
304 } 321 }
305 322
306 } // namespace test 323 } // namespace test
307 } // namespace net 324 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_stream_factory_impl_job.cc ('k') | net/quic/quic_http_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698