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

Side by Side Diff: net/cert_net/cert_net_fetcher_impl_unittest.cc

Issue 1378123003: Adding SSL ETS Tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ets
Patch Set: Rebase. Created 5 years, 1 month 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/base/network_quality_estimator_unittest.cc ('k') | net/log/net_log_util_unittest.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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "net/cert_net/cert_net_fetcher_impl.h" 5 #include "net/cert_net/cert_net_fetcher_impl.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
11 #include "net/cert/mock_cert_verifier.h" 11 #include "net/cert/mock_cert_verifier.h"
12 #include "net/dns/mock_host_resolver.h" 12 #include "net/dns/mock_host_resolver.h"
13 #include "net/http/http_server_properties_impl.h" 13 #include "net/http/http_server_properties_impl.h"
14 #include "net/test/spawned_test_server/spawned_test_server.h" 14 #include "net/test/embedded_test_server/embedded_test_server.h"
15 #include "net/url_request/url_request_job_factory_impl.h" 15 #include "net/url_request/url_request_job_factory_impl.h"
16 #include "net/url_request/url_request_test_util.h" 16 #include "net/url_request/url_request_test_util.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "testing/platform_test.h" 18 #include "testing/platform_test.h"
19 19
20 // TODO(eroman): Test that cookies aren't sent. 20 // TODO(eroman): Test that cookies aren't sent.
21 21
22 using base::ASCIIToUTF16; 22 using base::ASCIIToUTF16;
23 23
24 namespace net { 24 namespace net {
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 CertNetFetcher::FetchCallback callback_; 128 CertNetFetcher::FetchCallback callback_;
129 scoped_ptr<FetchResult> result_; 129 scoped_ptr<FetchResult> result_;
130 base::Closure quit_closure_; 130 base::Closure quit_closure_;
131 base::Closure extra_closure_; 131 base::Closure extra_closure_;
132 }; 132 };
133 133
134 } // namespace 134 } // namespace
135 135
136 class CertNetFetcherImplTest : public PlatformTest { 136 class CertNetFetcherImplTest : public PlatformTest {
137 public: 137 public:
138 CertNetFetcherImplTest() 138 CertNetFetcherImplTest() {
139 : test_server_(SpawnedTestServer::TYPE_HTTP, 139 test_server_.AddDefaultHandlers(base::FilePath(kDocRoot));
140 SpawnedTestServer::kLocalhost,
141 base::FilePath(kDocRoot)) {
142 context_.set_network_delegate(&network_delegate_); 140 context_.set_network_delegate(&network_delegate_);
143 } 141 }
144 142
145 protected: 143 protected:
146 SpawnedTestServer test_server_; 144 EmbeddedTestServer test_server_;
147 TestNetworkDelegate network_delegate_; 145 TestNetworkDelegate network_delegate_;
148 RequestContext context_; 146 RequestContext context_;
149 }; 147 };
150 148
151 // Helper to start an AIA fetch using default parameters. 149 // Helper to start an AIA fetch using default parameters.
152 WARN_UNUSED_RESULT scoped_ptr<CertNetFetcher::Request> StartRequest( 150 WARN_UNUSED_RESULT scoped_ptr<CertNetFetcher::Request> StartRequest(
153 CertNetFetcher* fetcher, 151 CertNetFetcher* fetcher,
154 const GURL& url, 152 const GURL& url,
155 const TestFetchCallback& callback) { 153 const TestFetchCallback& callback) {
156 return fetcher->FetchCaIssuers(url, CertNetFetcher::DEFAULT, 154 return fetcher->FetchCaIssuers(url, CertNetFetcher::DEFAULT,
157 CertNetFetcher::DEFAULT, callback.callback()); 155 CertNetFetcher::DEFAULT, callback.callback());
158 } 156 }
159 157
160 // Fetch a few unique URLs using GET in parallel. Each URL has a different body 158 // Fetch a few unique URLs using GET in parallel. Each URL has a different body
161 // and Content-Type. 159 // and Content-Type.
162 TEST_F(CertNetFetcherImplTest, ParallelFetchNoDuplicates) { 160 TEST_F(CertNetFetcherImplTest, ParallelFetchNoDuplicates) {
163 ASSERT_TRUE(test_server_.Start()); 161 ASSERT_TRUE(test_server_.Start());
164 162
165 CertNetFetcherImpl fetcher(&context_); 163 CertNetFetcherImpl fetcher(&context_);
166 TestFetchCallback callback1; 164 TestFetchCallback callback1;
167 TestFetchCallback callback2; 165 TestFetchCallback callback2;
168 TestFetchCallback callback3; 166 TestFetchCallback callback3;
169 167
170 // Request a URL with Content-Type "application/pkix-cert" 168 // Request a URL with Content-Type "application/pkix-cert"
171 GURL url1 = test_server_.GetURL("files/cert.crt"); 169 GURL url1 = test_server_.GetURL("/cert.crt");
172 scoped_ptr<CertNetFetcher::Request> request1 = 170 scoped_ptr<CertNetFetcher::Request> request1 =
173 StartRequest(&fetcher, url1, callback1); 171 StartRequest(&fetcher, url1, callback1);
174 172
175 // Request a URL with Content-Type "application/pkix-crl" 173 // Request a URL with Content-Type "application/pkix-crl"
176 GURL url2 = test_server_.GetURL("files/root.crl"); 174 GURL url2 = test_server_.GetURL("/root.crl");
177 scoped_ptr<CertNetFetcher::Request> request2 = 175 scoped_ptr<CertNetFetcher::Request> request2 =
178 StartRequest(&fetcher, url2, callback2); 176 StartRequest(&fetcher, url2, callback2);
179 177
180 // Request a URL with Content-Type "application/pkcs7-mime" 178 // Request a URL with Content-Type "application/pkcs7-mime"
181 GURL url3 = test_server_.GetURL("files/certs.p7c"); 179 GURL url3 = test_server_.GetURL("/certs.p7c");
182 scoped_ptr<CertNetFetcher::Request> request3 = 180 scoped_ptr<CertNetFetcher::Request> request3 =
183 StartRequest(&fetcher, url3, callback3); 181 StartRequest(&fetcher, url3, callback3);
184 182
185 // Wait for all of the requests to complete. 183 // Wait for all of the requests to complete.
186 scoped_ptr<FetchResult> result1 = callback1.WaitForResult(); 184 scoped_ptr<FetchResult> result1 = callback1.WaitForResult();
187 scoped_ptr<FetchResult> result2 = callback2.WaitForResult(); 185 scoped_ptr<FetchResult> result2 = callback2.WaitForResult();
188 scoped_ptr<FetchResult> result3 = callback3.WaitForResult(); 186 scoped_ptr<FetchResult> result3 = callback3.WaitForResult();
189 187
190 // Verify the fetch results. 188 // Verify the fetch results.
191 result1->VerifySuccess("-cert.crt-\n"); 189 result1->VerifySuccess("-cert.crt-\n");
192 result2->VerifySuccess("-root.crl-\n"); 190 result2->VerifySuccess("-root.crl-\n");
193 result3->VerifySuccess("-certs.p7c-\n"); 191 result3->VerifySuccess("-certs.p7c-\n");
194 192
195 EXPECT_EQ(3, network_delegate_.created_requests()); 193 EXPECT_EQ(3, network_delegate_.created_requests());
196 } 194 }
197 195
198 // Fetch a caIssuers URL which has an unexpected extension and Content-Type. 196 // Fetch a caIssuers URL which has an unexpected extension and Content-Type.
199 // The extension is .txt and the Content-Type is text/plain. Despite being 197 // The extension is .txt and the Content-Type is text/plain. Despite being
200 // unusual this succeeds as the extension and Content-Type are not required to 198 // unusual this succeeds as the extension and Content-Type are not required to
201 // be meaningful. 199 // be meaningful.
202 TEST_F(CertNetFetcherImplTest, ContentTypeDoesntMatter) { 200 TEST_F(CertNetFetcherImplTest, ContentTypeDoesntMatter) {
203 ASSERT_TRUE(test_server_.Start()); 201 ASSERT_TRUE(test_server_.Start());
204 202
205 CertNetFetcherImpl fetcher(&context_); 203 CertNetFetcherImpl fetcher(&context_);
206 204
207 TestFetchCallback callback; 205 TestFetchCallback callback;
208 GURL url = test_server_.GetURL("files/foo.txt"); 206 GURL url = test_server_.GetURL("/foo.txt");
209 scoped_ptr<CertNetFetcher::Request> request = 207 scoped_ptr<CertNetFetcher::Request> request =
210 StartRequest(&fetcher, url, callback); 208 StartRequest(&fetcher, url, callback);
211 scoped_ptr<FetchResult> result = callback.WaitForResult(); 209 scoped_ptr<FetchResult> result = callback.WaitForResult();
212 result->VerifySuccess("-foo.txt-\n"); 210 result->VerifySuccess("-foo.txt-\n");
213 } 211 }
214 212
215 // Fetch a URLs whose HTTP response code is not 200. These are considered 213 // Fetch a URLs whose HTTP response code is not 200. These are considered
216 // failures. 214 // failures.
217 TEST_F(CertNetFetcherImplTest, HttpStatusCode) { 215 TEST_F(CertNetFetcherImplTest, HttpStatusCode) {
218 ASSERT_TRUE(test_server_.Start()); 216 ASSERT_TRUE(test_server_.Start());
219 217
220 CertNetFetcherImpl fetcher(&context_); 218 CertNetFetcherImpl fetcher(&context_);
221 219
222 // Response was HTTP status 404. 220 // Response was HTTP status 404.
223 { 221 {
224 TestFetchCallback callback; 222 TestFetchCallback callback;
225 GURL url = test_server_.GetURL("files/404.html"); 223 GURL url = test_server_.GetURL("/404.html");
226 scoped_ptr<CertNetFetcher::Request> request = 224 scoped_ptr<CertNetFetcher::Request> request =
227 StartRequest(&fetcher, url, callback); 225 StartRequest(&fetcher, url, callback);
228 scoped_ptr<FetchResult> result = callback.WaitForResult(); 226 scoped_ptr<FetchResult> result = callback.WaitForResult();
229 result->VerifyFailure(ERR_FAILED); 227 result->VerifyFailure(ERR_FAILED);
230 } 228 }
231 229
232 // Response was HTTP status 500. 230 // Response was HTTP status 500.
233 { 231 {
234 TestFetchCallback callback; 232 TestFetchCallback callback;
235 GURL url = test_server_.GetURL("files/500.html"); 233 GURL url = test_server_.GetURL("/500.html");
236 scoped_ptr<CertNetFetcher::Request> request = 234 scoped_ptr<CertNetFetcher::Request> request =
237 StartRequest(&fetcher, url, callback); 235 StartRequest(&fetcher, url, callback);
238 scoped_ptr<FetchResult> result = callback.WaitForResult(); 236 scoped_ptr<FetchResult> result = callback.WaitForResult();
239 result->VerifyFailure(ERR_FAILED); 237 result->VerifyFailure(ERR_FAILED);
240 } 238 }
241 } 239 }
242 240
243 // Fetching a URL with a Content-Disposition header should have no effect. 241 // Fetching a URL with a Content-Disposition header should have no effect.
244 TEST_F(CertNetFetcherImplTest, ContentDisposition) { 242 TEST_F(CertNetFetcherImplTest, ContentDisposition) {
245 ASSERT_TRUE(test_server_.Start()); 243 ASSERT_TRUE(test_server_.Start());
246 244
247 CertNetFetcherImpl fetcher(&context_); 245 CertNetFetcherImpl fetcher(&context_);
248 246
249 TestFetchCallback callback; 247 TestFetchCallback callback;
250 GURL url = test_server_.GetURL("files/downloadable.js"); 248 GURL url = test_server_.GetURL("/downloadable.js");
251 scoped_ptr<CertNetFetcher::Request> request = 249 scoped_ptr<CertNetFetcher::Request> request =
252 StartRequest(&fetcher, url, callback); 250 StartRequest(&fetcher, url, callback);
253 scoped_ptr<FetchResult> result = callback.WaitForResult(); 251 scoped_ptr<FetchResult> result = callback.WaitForResult();
254 result->VerifySuccess("-downloadable.js-\n"); 252 result->VerifySuccess("-downloadable.js-\n");
255 } 253 }
256 254
257 // Verifies that a cachable request will be served from the HTTP cache the 255 // Verifies that a cachable request will be served from the HTTP cache the
258 // second time it is requested. 256 // second time it is requested.
259 TEST_F(CertNetFetcherImplTest, Cache) { 257 TEST_F(CertNetFetcherImplTest, Cache) {
260 ASSERT_TRUE(test_server_.Start()); 258 ASSERT_TRUE(test_server_.Start());
261 259
262 CertNetFetcherImpl fetcher(&context_); 260 CertNetFetcherImpl fetcher(&context_);
263 261
264 // Fetch a URL whose HTTP headers make it cacheable for 1 hour. 262 // Fetch a URL whose HTTP headers make it cacheable for 1 hour.
265 GURL url(test_server_.GetURL("files/cacheable_1hr.crt")); 263 GURL url(test_server_.GetURL("/cacheable_1hr.crt"));
266 { 264 {
267 TestFetchCallback callback; 265 TestFetchCallback callback;
268 266
269 scoped_ptr<CertNetFetcher::Request> request = 267 scoped_ptr<CertNetFetcher::Request> request =
270 StartRequest(&fetcher, url, callback); 268 StartRequest(&fetcher, url, callback);
271 scoped_ptr<FetchResult> result = callback.WaitForResult(); 269 scoped_ptr<FetchResult> result = callback.WaitForResult();
272 result->VerifySuccess("-cacheable_1hr.crt-\n"); 270 result->VerifySuccess("-cacheable_1hr.crt-\n");
273 } 271 }
274 272
275 EXPECT_EQ(1, network_delegate_.created_requests()); 273 EXPECT_EQ(1, network_delegate_.created_requests());
276 274
277 // Kill the HTTP server. 275 // Kill the HTTP server.
278 ASSERT_TRUE(test_server_.Stop()); 276 ASSERT_TRUE(test_server_.ShutdownAndWaitUntilComplete());
279 277
280 // Fetch again -- will fail unless served from cache. 278 // Fetch again -- will fail unless served from cache.
281 { 279 {
282 TestFetchCallback callback; 280 TestFetchCallback callback;
283 scoped_ptr<CertNetFetcher::Request> request = 281 scoped_ptr<CertNetFetcher::Request> request =
284 StartRequest(&fetcher, url, callback); 282 StartRequest(&fetcher, url, callback);
285 scoped_ptr<FetchResult> result = callback.WaitForResult(); 283 scoped_ptr<FetchResult> result = callback.WaitForResult();
286 result->VerifySuccess("-cacheable_1hr.crt-\n"); 284 result->VerifySuccess("-cacheable_1hr.crt-\n");
287 } 285 }
288 286
289 EXPECT_EQ(2, network_delegate_.created_requests()); 287 EXPECT_EQ(2, network_delegate_.created_requests());
290 } 288 }
291 289
292 // Verify that the maximum response body constraints are enforced by fetching a 290 // Verify that the maximum response body constraints are enforced by fetching a
293 // resource that is larger than the limit. 291 // resource that is larger than the limit.
294 TEST_F(CertNetFetcherImplTest, TooLarge) { 292 TEST_F(CertNetFetcherImplTest, TooLarge) {
295 ASSERT_TRUE(test_server_.Start()); 293 ASSERT_TRUE(test_server_.Start());
296 294
297 CertNetFetcherImpl fetcher(&context_); 295 CertNetFetcherImpl fetcher(&context_);
298 296
299 // This file has a response body 12 bytes long. So setting the maximum to 11 297 // This file has a response body 12 bytes long. So setting the maximum to 11
300 // bytes will cause it to fail. 298 // bytes will cause it to fail.
301 GURL url(test_server_.GetURL("files/certs.p7c")); 299 GURL url(test_server_.GetURL("/certs.p7c"));
302 TestFetchCallback callback; 300 TestFetchCallback callback;
303 scoped_ptr<CertNetFetcher::Request> request = fetcher.FetchCaIssuers( 301 scoped_ptr<CertNetFetcher::Request> request = fetcher.FetchCaIssuers(
304 url, CertNetFetcher::DEFAULT, 11, callback.callback()); 302 url, CertNetFetcher::DEFAULT, 11, callback.callback());
305 303
306 scoped_ptr<FetchResult> result = callback.WaitForResult(); 304 scoped_ptr<FetchResult> result = callback.WaitForResult();
307 result->VerifyFailure(ERR_FILE_TOO_BIG); 305 result->VerifyFailure(ERR_FILE_TOO_BIG);
308 } 306 }
309 307
310 // Set the timeout to 10 milliseconds, and try fetching a URL that takes 5 308 // Set the timeout to 10 milliseconds, and try fetching a URL that takes 5
311 // seconds to complete. It should fail due to a timeout. 309 // seconds to complete. It should fail due to a timeout.
312 TEST_F(CertNetFetcherImplTest, Hang) { 310 TEST_F(CertNetFetcherImplTest, Hang) {
313 ASSERT_TRUE(test_server_.Start()); 311 ASSERT_TRUE(test_server_.Start());
314 312
315 CertNetFetcherImpl fetcher(&context_); 313 CertNetFetcherImpl fetcher(&context_);
316 314
317 GURL url(test_server_.GetURL("slow/certs.p7c?5")); 315 GURL url(test_server_.GetURL("/slow/certs.p7c?5"));
318 TestFetchCallback callback; 316 TestFetchCallback callback;
319 scoped_ptr<CertNetFetcher::Request> request = fetcher.FetchCaIssuers( 317 scoped_ptr<CertNetFetcher::Request> request = fetcher.FetchCaIssuers(
320 url, 10, CertNetFetcher::DEFAULT, callback.callback()); 318 url, 10, CertNetFetcher::DEFAULT, callback.callback());
321 scoped_ptr<FetchResult> result = callback.WaitForResult(); 319 scoped_ptr<FetchResult> result = callback.WaitForResult();
322 result->VerifyFailure(ERR_TIMED_OUT); 320 result->VerifyFailure(ERR_TIMED_OUT);
323 } 321 }
324 322
325 // Verify that if a response is gzip-encoded it gets inflated before being 323 // Verify that if a response is gzip-encoded it gets inflated before being
326 // returned to the caller. 324 // returned to the caller.
327 TEST_F(CertNetFetcherImplTest, Gzip) { 325 TEST_F(CertNetFetcherImplTest, Gzip) {
328 ASSERT_TRUE(test_server_.Start()); 326 ASSERT_TRUE(test_server_.Start());
329 327
330 CertNetFetcherImpl fetcher(&context_); 328 CertNetFetcherImpl fetcher(&context_);
331 329
332 GURL url(test_server_.GetURL("files/gzipped_crl")); 330 GURL url(test_server_.GetURL("/gzipped_crl"));
333 TestFetchCallback callback; 331 TestFetchCallback callback;
334 scoped_ptr<CertNetFetcher::Request> request = 332 scoped_ptr<CertNetFetcher::Request> request =
335 StartRequest(&fetcher, url, callback); 333 StartRequest(&fetcher, url, callback);
336 scoped_ptr<FetchResult> result = callback.WaitForResult(); 334 scoped_ptr<FetchResult> result = callback.WaitForResult();
337 result->VerifySuccess("-gzipped_crl-\n"); 335 result->VerifySuccess("-gzipped_crl-\n");
338 } 336 }
339 337
340 // Try fetching an unsupported URL scheme (https). 338 // Try fetching an unsupported URL scheme (https).
341 TEST_F(CertNetFetcherImplTest, HttpsNotAllowed) { 339 TEST_F(CertNetFetcherImplTest, HttpsNotAllowed) {
342 ASSERT_TRUE(test_server_.Start()); 340 ASSERT_TRUE(test_server_.Start());
(...skipping 13 matching lines...) Expand all
356 // No request was created because the URL scheme was unsupported. 354 // No request was created because the URL scheme was unsupported.
357 EXPECT_EQ(0, network_delegate_.created_requests()); 355 EXPECT_EQ(0, network_delegate_.created_requests());
358 } 356 }
359 357
360 // Try fetching a URL which redirects to https. 358 // Try fetching a URL which redirects to https.
361 TEST_F(CertNetFetcherImplTest, RedirectToHttpsNotAllowed) { 359 TEST_F(CertNetFetcherImplTest, RedirectToHttpsNotAllowed) {
362 ASSERT_TRUE(test_server_.Start()); 360 ASSERT_TRUE(test_server_.Start());
363 361
364 CertNetFetcherImpl fetcher(&context_); 362 CertNetFetcherImpl fetcher(&context_);
365 363
366 GURL url(test_server_.GetURL("files/redirect_https")); 364 GURL url(test_server_.GetURL("/redirect_https"));
367 TestFetchCallback callback; 365 TestFetchCallback callback;
368 366
369 scoped_ptr<CertNetFetcher::Request> request = 367 scoped_ptr<CertNetFetcher::Request> request =
370 StartRequest(&fetcher, url, callback); 368 StartRequest(&fetcher, url, callback);
371 scoped_ptr<FetchResult> result = callback.WaitForResult(); 369 scoped_ptr<FetchResult> result = callback.WaitForResult();
372 result->VerifyFailure(ERR_DISALLOWED_URL_SCHEME); 370 result->VerifyFailure(ERR_DISALLOWED_URL_SCHEME);
373 371
374 EXPECT_EQ(1, network_delegate_.created_requests()); 372 EXPECT_EQ(1, network_delegate_.created_requests());
375 } 373 }
376 374
(...skipping 25 matching lines...) Expand all
402 // Start a few requests, and cancel one of them before running the message loop 400 // Start a few requests, and cancel one of them before running the message loop
403 // again. 401 // again.
404 TEST_F(CertNetFetcherImplTest, CancelBeforeRunningMessageLoop) { 402 TEST_F(CertNetFetcherImplTest, CancelBeforeRunningMessageLoop) {
405 ASSERT_TRUE(test_server_.Start()); 403 ASSERT_TRUE(test_server_.Start());
406 404
407 CertNetFetcherImpl fetcher(&context_); 405 CertNetFetcherImpl fetcher(&context_);
408 TestFetchCallback callback1; 406 TestFetchCallback callback1;
409 TestFetchCallback callback2; 407 TestFetchCallback callback2;
410 TestFetchCallback callback3; 408 TestFetchCallback callback3;
411 409
412 GURL url1 = test_server_.GetURL("files/cert.crt"); 410 GURL url1 = test_server_.GetURL("/cert.crt");
413 scoped_ptr<CertNetFetcher::Request> request1 = 411 scoped_ptr<CertNetFetcher::Request> request1 =
414 StartRequest(&fetcher, url1, callback1); 412 StartRequest(&fetcher, url1, callback1);
415 413
416 GURL url2 = test_server_.GetURL("files/root.crl"); 414 GURL url2 = test_server_.GetURL("/root.crl");
417 scoped_ptr<CertNetFetcher::Request> request2 = 415 scoped_ptr<CertNetFetcher::Request> request2 =
418 StartRequest(&fetcher, url2, callback2); 416 StartRequest(&fetcher, url2, callback2);
419 417
420 GURL url3 = test_server_.GetURL("files/certs.p7c"); 418 GURL url3 = test_server_.GetURL("/certs.p7c");
421 419
422 scoped_ptr<CertNetFetcher::Request> request3 = 420 scoped_ptr<CertNetFetcher::Request> request3 =
423 StartRequest(&fetcher, url3, callback3); 421 StartRequest(&fetcher, url3, callback3);
424 422
425 EXPECT_EQ(3, network_delegate_.created_requests()); 423 EXPECT_EQ(3, network_delegate_.created_requests());
426 EXPECT_FALSE(callback1.HasResult()); 424 EXPECT_FALSE(callback1.HasResult());
427 EXPECT_FALSE(callback2.HasResult()); 425 EXPECT_FALSE(callback2.HasResult());
428 EXPECT_FALSE(callback3.HasResult()); 426 EXPECT_FALSE(callback3.HasResult());
429 427
430 // Cancel the second request. 428 // Cancel the second request.
(...skipping 23 matching lines...) Expand all
454 // requests are given opened sockets in a FIFO order. 452 // requests are given opened sockets in a FIFO order.
455 // TODO(eroman): Make this more robust. 453 // TODO(eroman): Make this more robust.
456 TEST_F(CertNetFetcherImplTest, CancelAfterRunningMessageLoop) { 454 TEST_F(CertNetFetcherImplTest, CancelAfterRunningMessageLoop) {
457 ASSERT_TRUE(test_server_.Start()); 455 ASSERT_TRUE(test_server_.Start());
458 456
459 CertNetFetcherImpl fetcher(&context_); 457 CertNetFetcherImpl fetcher(&context_);
460 TestFetchCallback callback1; 458 TestFetchCallback callback1;
461 TestFetchCallback callback2; 459 TestFetchCallback callback2;
462 TestFetchCallback callback3; 460 TestFetchCallback callback3;
463 461
464 GURL url1 = test_server_.GetURL("files/cert.crt"); 462 GURL url1 = test_server_.GetURL("/cert.crt");
465 463
466 scoped_ptr<CertNetFetcher::Request> request1 = 464 scoped_ptr<CertNetFetcher::Request> request1 =
467 StartRequest(&fetcher, url1, callback1); 465 StartRequest(&fetcher, url1, callback1);
468 466
469 GURL url2 = test_server_.GetURL("files/certs.p7c"); 467 GURL url2 = test_server_.GetURL("/certs.p7c");
470 scoped_ptr<CertNetFetcher::Request> request2 = 468 scoped_ptr<CertNetFetcher::Request> request2 =
471 StartRequest(&fetcher, url2, callback2); 469 StartRequest(&fetcher, url2, callback2);
472 470
473 GURL url3("ftp://www.not.supported.com/foo"); 471 GURL url3("ftp://www.not.supported.com/foo");
474 scoped_ptr<CertNetFetcher::Request> request3 = 472 scoped_ptr<CertNetFetcher::Request> request3 =
475 StartRequest(&fetcher, url3, callback3); 473 StartRequest(&fetcher, url3, callback3);
476 474
477 EXPECT_FALSE(callback1.HasResult()); 475 EXPECT_FALSE(callback1.HasResult());
478 EXPECT_FALSE(callback2.HasResult()); 476 EXPECT_FALSE(callback2.HasResult());
479 EXPECT_FALSE(callback3.HasResult()); 477 EXPECT_FALSE(callback3.HasResult());
(...skipping 12 matching lines...) Expand all
492 // Verify the fetch results. 490 // Verify the fetch results.
493 result2->VerifySuccess("-cert.crt-\n"); 491 result2->VerifySuccess("-cert.crt-\n");
494 } 492 }
495 493
496 // Delete a CertNetFetcherImpl with outstanding requests on it. 494 // Delete a CertNetFetcherImpl with outstanding requests on it.
497 TEST_F(CertNetFetcherImplTest, DeleteCancels) { 495 TEST_F(CertNetFetcherImplTest, DeleteCancels) {
498 ASSERT_TRUE(test_server_.Start()); 496 ASSERT_TRUE(test_server_.Start());
499 497
500 scoped_ptr<CertNetFetcherImpl> fetcher(new CertNetFetcherImpl(&context_)); 498 scoped_ptr<CertNetFetcherImpl> fetcher(new CertNetFetcherImpl(&context_));
501 499
502 GURL url(test_server_.GetURL("slow/certs.p7c?20")); 500 GURL url(test_server_.GetURL("/slow/certs.p7c?20"));
503 TestFetchCallback callback; 501 TestFetchCallback callback;
504 scoped_ptr<CertNetFetcher::Request> request = 502 scoped_ptr<CertNetFetcher::Request> request =
505 StartRequest(fetcher.get(), url, callback); 503 StartRequest(fetcher.get(), url, callback);
506 504
507 // Destroy the fetcher before the outstanding request. 505 // Destroy the fetcher before the outstanding request.
508 fetcher.reset(); 506 fetcher.reset();
509 } 507 }
510 508
511 // Fetch the same URLs in parallel and verify that only 1 request is made per 509 // Fetch the same URLs in parallel and verify that only 1 request is made per
512 // URL. 510 // URL.
513 TEST_F(CertNetFetcherImplTest, ParallelFetchDuplicates) { 511 TEST_F(CertNetFetcherImplTest, ParallelFetchDuplicates) {
514 ASSERT_TRUE(test_server_.Start()); 512 ASSERT_TRUE(test_server_.Start());
515 513
516 CertNetFetcherImpl fetcher(&context_); 514 CertNetFetcherImpl fetcher(&context_);
517 515
518 GURL url1 = test_server_.GetURL("files/cert.crt"); 516 GURL url1 = test_server_.GetURL("/cert.crt");
519 GURL url2 = test_server_.GetURL("files/root.crl"); 517 GURL url2 = test_server_.GetURL("/root.crl");
520 518
521 // Issue 3 requests for url1, and 3 requests for url2 519 // Issue 3 requests for url1, and 3 requests for url2
522 TestFetchCallback callback1; 520 TestFetchCallback callback1;
523 scoped_ptr<CertNetFetcher::Request> request1 = 521 scoped_ptr<CertNetFetcher::Request> request1 =
524 StartRequest(&fetcher, url1, callback1); 522 StartRequest(&fetcher, url1, callback1);
525 523
526 TestFetchCallback callback2; 524 TestFetchCallback callback2;
527 scoped_ptr<CertNetFetcher::Request> request2 = 525 scoped_ptr<CertNetFetcher::Request> request2 =
528 StartRequest(&fetcher, url2, callback2); 526 StartRequest(&fetcher, url2, callback2);
529 527
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 569
572 // Cancel a request and then start another one for the same URL. 570 // Cancel a request and then start another one for the same URL.
573 TEST_F(CertNetFetcherImplTest, CancelThenStart) { 571 TEST_F(CertNetFetcherImplTest, CancelThenStart) {
574 ASSERT_TRUE(test_server_.Start()); 572 ASSERT_TRUE(test_server_.Start());
575 573
576 CertNetFetcherImpl fetcher(&context_); 574 CertNetFetcherImpl fetcher(&context_);
577 TestFetchCallback callback1; 575 TestFetchCallback callback1;
578 TestFetchCallback callback2; 576 TestFetchCallback callback2;
579 TestFetchCallback callback3; 577 TestFetchCallback callback3;
580 578
581 GURL url = test_server_.GetURL("files/cert.crt"); 579 GURL url = test_server_.GetURL("/cert.crt");
582 580
583 scoped_ptr<CertNetFetcher::Request> request1 = 581 scoped_ptr<CertNetFetcher::Request> request1 =
584 StartRequest(&fetcher, url, callback1); 582 StartRequest(&fetcher, url, callback1);
585 request1.reset(); 583 request1.reset();
586 584
587 scoped_ptr<CertNetFetcher::Request> request2 = 585 scoped_ptr<CertNetFetcher::Request> request2 =
588 StartRequest(&fetcher, url, callback2); 586 StartRequest(&fetcher, url, callback2);
589 587
590 scoped_ptr<CertNetFetcher::Request> request3 = 588 scoped_ptr<CertNetFetcher::Request> request3 =
591 StartRequest(&fetcher, url, callback3); 589 StartRequest(&fetcher, url, callback3);
(...skipping 12 matching lines...) Expand all
604 } 602 }
605 603
606 // Start duplicate requests and then cancel all of them. 604 // Start duplicate requests and then cancel all of them.
607 TEST_F(CertNetFetcherImplTest, CancelAll) { 605 TEST_F(CertNetFetcherImplTest, CancelAll) {
608 ASSERT_TRUE(test_server_.Start()); 606 ASSERT_TRUE(test_server_.Start());
609 607
610 CertNetFetcherImpl fetcher(&context_); 608 CertNetFetcherImpl fetcher(&context_);
611 TestFetchCallback callback[3]; 609 TestFetchCallback callback[3];
612 scoped_ptr<CertNetFetcher::Request> request[3]; 610 scoped_ptr<CertNetFetcher::Request> request[3];
613 611
614 GURL url = test_server_.GetURL("files/cert.crt"); 612 GURL url = test_server_.GetURL("/cert.crt");
615 613
616 for (size_t i = 0; i < arraysize(callback); ++i) { 614 for (size_t i = 0; i < arraysize(callback); ++i) {
617 request[i] = StartRequest(&fetcher, url, callback[i]); 615 request[i] = StartRequest(&fetcher, url, callback[i]);
618 } 616 }
619 617
620 // Cancel all the requests. 618 // Cancel all the requests.
621 for (size_t i = 0; i < arraysize(request); ++i) 619 for (size_t i = 0; i < arraysize(request); ++i)
622 request[i].reset(); 620 request[i].reset();
623 621
624 EXPECT_EQ(1, network_delegate_.created_requests()); 622 EXPECT_EQ(1, network_delegate_.created_requests());
625 623
626 for (size_t i = 0; i < arraysize(request); ++i) 624 for (size_t i = 0; i < arraysize(request); ++i)
627 EXPECT_FALSE(callback[i].HasResult()); 625 EXPECT_FALSE(callback[i].HasResult());
628 } 626 }
629 627
630 void DeleteCertNetFetcher(CertNetFetcher* fetcher) { 628 void DeleteCertNetFetcher(CertNetFetcher* fetcher) {
631 delete fetcher; 629 delete fetcher;
632 } 630 }
633 631
634 // Delete the CertNetFetcherImpl within a request callback. 632 // Delete the CertNetFetcherImpl within a request callback.
635 TEST_F(CertNetFetcherImplTest, DeleteWithinCallback) { 633 TEST_F(CertNetFetcherImplTest, DeleteWithinCallback) {
636 ASSERT_TRUE(test_server_.Start()); 634 ASSERT_TRUE(test_server_.Start());
637 635
638 // Deleted by callback2. 636 // Deleted by callback2.
639 CertNetFetcher* fetcher = new CertNetFetcherImpl(&context_); 637 CertNetFetcher* fetcher = new CertNetFetcherImpl(&context_);
640 638
641 GURL url = test_server_.GetURL("files/cert.crt"); 639 GURL url = test_server_.GetURL("/cert.crt");
642 640
643 TestFetchCallback callback[4]; 641 TestFetchCallback callback[4];
644 scoped_ptr<CertNetFetcher::Request> reqs[4]; 642 scoped_ptr<CertNetFetcher::Request> reqs[4];
645 callback[1].set_extra_closure(base::Bind(DeleteCertNetFetcher, fetcher)); 643 callback[1].set_extra_closure(base::Bind(DeleteCertNetFetcher, fetcher));
646 644
647 for (size_t i = 0; i < arraysize(callback); ++i) 645 for (size_t i = 0; i < arraysize(callback); ++i)
648 reqs[i] = StartRequest(fetcher, url, callback[i]); 646 reqs[i] = StartRequest(fetcher, url, callback[i]);
649 647
650 EXPECT_EQ(1, network_delegate_.created_requests()); 648 EXPECT_EQ(1, network_delegate_.created_requests());
651 649
(...skipping 11 matching lines...) Expand all
663 scoped_ptr<CertNetFetcher::Request>* request) { 661 scoped_ptr<CertNetFetcher::Request>* request) {
664 *request = StartRequest(fetcher, url, *callback); 662 *request = StartRequest(fetcher, url, *callback);
665 } 663 }
666 664
667 // Make a request during callback for the same URL. 665 // Make a request during callback for the same URL.
668 TEST_F(CertNetFetcherImplTest, FetchWithinCallback) { 666 TEST_F(CertNetFetcherImplTest, FetchWithinCallback) {
669 ASSERT_TRUE(test_server_.Start()); 667 ASSERT_TRUE(test_server_.Start());
670 668
671 CertNetFetcherImpl fetcher(&context_); 669 CertNetFetcherImpl fetcher(&context_);
672 670
673 GURL url = test_server_.GetURL("files/cert.crt"); 671 GURL url = test_server_.GetURL("/cert.crt");
674 672
675 TestFetchCallback callback[5]; 673 TestFetchCallback callback[5];
676 scoped_ptr<CertNetFetcher::Request> req[5]; 674 scoped_ptr<CertNetFetcher::Request> req[5];
677 callback[1].set_extra_closure( 675 callback[1].set_extra_closure(
678 base::Bind(FetchRequest, &fetcher, url, &callback[4], &req[4])); 676 base::Bind(FetchRequest, &fetcher, url, &callback[4], &req[4]));
679 677
680 for (size_t i = 0; i < arraysize(callback) - 1; ++i) 678 for (size_t i = 0; i < arraysize(callback) - 1; ++i)
681 req[i] = StartRequest(&fetcher, url, callback[i]); 679 req[i] = StartRequest(&fetcher, url, callback[i]);
682 680
683 EXPECT_EQ(1, network_delegate_.created_requests()); 681 EXPECT_EQ(1, network_delegate_.created_requests());
(...skipping 11 matching lines...) Expand all
695 void CancelRequest(scoped_ptr<CertNetFetcher::Request>* request) { 693 void CancelRequest(scoped_ptr<CertNetFetcher::Request>* request) {
696 request->reset(); 694 request->reset();
697 } 695 }
698 696
699 // Cancel a request while executing a callback for the same job. 697 // Cancel a request while executing a callback for the same job.
700 TEST_F(CertNetFetcherImplTest, CancelWithinCallback) { 698 TEST_F(CertNetFetcherImplTest, CancelWithinCallback) {
701 ASSERT_TRUE(test_server_.Start()); 699 ASSERT_TRUE(test_server_.Start());
702 700
703 CertNetFetcherImpl fetcher(&context_); 701 CertNetFetcherImpl fetcher(&context_);
704 702
705 GURL url = test_server_.GetURL("files/cert.crt"); 703 GURL url = test_server_.GetURL("/cert.crt");
706 704
707 TestFetchCallback callback[4]; 705 TestFetchCallback callback[4];
708 scoped_ptr<CertNetFetcher::Request> request[4]; 706 scoped_ptr<CertNetFetcher::Request> request[4];
709 707
710 for (size_t i = 0; i < arraysize(callback); ++i) 708 for (size_t i = 0; i < arraysize(callback); ++i)
711 request[i] = StartRequest(&fetcher, url, callback[i]); 709 request[i] = StartRequest(&fetcher, url, callback[i]);
712 710
713 // Cancel request[2] when the callback for request[1] runs. 711 // Cancel request[2] when the callback for request[1] runs.
714 callback[1].set_extra_closure(base::Bind(CancelRequest, &request[2])); 712 callback[1].set_extra_closure(base::Bind(CancelRequest, &request[2]));
715 713
(...skipping 11 matching lines...) Expand all
727 EXPECT_FALSE(callback[2].HasResult()); 725 EXPECT_FALSE(callback[2].HasResult());
728 } 726 }
729 727
730 // Cancel the final request while executing a callback for the same job. Ensure 728 // Cancel the final request while executing a callback for the same job. Ensure
731 // that the job is not deleted twice. 729 // that the job is not deleted twice.
732 TEST_F(CertNetFetcherImplTest, CancelLastRequestWithinCallback) { 730 TEST_F(CertNetFetcherImplTest, CancelLastRequestWithinCallback) {
733 ASSERT_TRUE(test_server_.Start()); 731 ASSERT_TRUE(test_server_.Start());
734 732
735 CertNetFetcherImpl fetcher(&context_); 733 CertNetFetcherImpl fetcher(&context_);
736 734
737 GURL url = test_server_.GetURL("files/cert.crt"); 735 GURL url = test_server_.GetURL("/cert.crt");
738 736
739 TestFetchCallback callback1; 737 TestFetchCallback callback1;
740 scoped_ptr<CertNetFetcher::Request> request1 = 738 scoped_ptr<CertNetFetcher::Request> request1 =
741 StartRequest(&fetcher, url, callback1); 739 StartRequest(&fetcher, url, callback1);
742 740
743 TestFetchCallback callback2; 741 TestFetchCallback callback2;
744 scoped_ptr<CertNetFetcher::Request> request2 = 742 scoped_ptr<CertNetFetcher::Request> request2 =
745 StartRequest(&fetcher, url, callback1); 743 StartRequest(&fetcher, url, callback1);
746 744
747 // Cancel request2 when the callback for request1 runs. 745 // Cancel request2 when the callback for request1 runs.
748 callback1.set_extra_closure(base::Bind(CancelRequest, &request2)); 746 callback1.set_extra_closure(base::Bind(CancelRequest, &request2));
749 747
750 EXPECT_EQ(1, network_delegate_.created_requests()); 748 EXPECT_EQ(1, network_delegate_.created_requests());
751 749
752 scoped_ptr<FetchResult> result = callback1.WaitForResult(); 750 scoped_ptr<FetchResult> result = callback1.WaitForResult();
753 result->VerifySuccess("-cert.crt-\n"); 751 result->VerifySuccess("-cert.crt-\n");
754 752
755 // request2 was cancelled. 753 // request2 was cancelled.
756 EXPECT_FALSE(callback2.HasResult()); 754 EXPECT_FALSE(callback2.HasResult());
757 } 755 }
758 756
759 } // namespace net 757 } // namespace net
OLDNEW
« no previous file with comments | « net/base/network_quality_estimator_unittest.cc ('k') | net/log/net_log_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698