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

Side by Side Diff: net/http/http_stream_factory_impl_job_controller_unittest.cc

Issue 2600943002: Cleanup the preconnect to proxy code and Job controller code (Closed)
Patch Set: rch comments Created 3 years, 11 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
OLDNEW
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 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/http/http_stream_factory_impl_job_controller.h" 5 #include "net/http/http_stream_factory_impl_job_controller.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); 232 DEFAULT_PRIORITY, SSLConfig(), SSLConfig()));
233 233
234 // There's no other alternative job. Thus when a stream is ready, it should 234 // There's no other alternative job. Thus when a stream is ready, it should
235 // notify Request. 235 // notify Request.
236 HttpStream* http_stream = 236 HttpStream* http_stream =
237 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); 237 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false);
238 job_factory_.main_job()->SetStream(http_stream); 238 job_factory_.main_job()->SetStream(http_stream);
239 239
240 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream)) 240 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream))
241 .WillOnce(Invoke(DeleteHttpStreamPointer)); 241 .WillOnce(Invoke(DeleteHttpStreamPointer));
242 job_controller_->OnStreamReady(job_factory_.main_job(), SSLConfig(), 242 job_controller_->OnStreamReady(job_factory_.main_job(), SSLConfig());
243 ProxyInfo());
244 } 243 }
245 244
246 // Test we cancel Jobs correctly when the Request is explicitly canceled 245 // Test we cancel Jobs correctly when the Request is explicitly canceled
247 // before any Job is bound to Request. 246 // before any Job is bound to Request.
248 TEST_F(HttpStreamFactoryImplJobControllerTest, CancelJobsBeforeBinding) { 247 TEST_F(HttpStreamFactoryImplJobControllerTest, CancelJobsBeforeBinding) {
249 ProxyConfig proxy_config; 248 ProxyConfig proxy_config;
250 proxy_config.set_auto_detect(true); 249 proxy_config.set_auto_detect(true);
251 // Use asynchronous proxy resolver. 250 // Use asynchronous proxy resolver.
252 MockAsyncProxyResolverFactory* proxy_resolver_factory = 251 MockAsyncProxyResolverFactory* proxy_resolver_factory =
253 new MockAsyncProxyResolverFactory(false); 252 new MockAsyncProxyResolverFactory(false);
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 350
352 // Main job succeeds, starts serving Request and it should report status 351 // Main job succeeds, starts serving Request and it should report status
353 // to Request. The alternative job will mark the main job complete and gets 352 // to Request. The alternative job will mark the main job complete and gets
354 // orphaned. 353 // orphaned.
355 HttpStream* http_stream = 354 HttpStream* http_stream =
356 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); 355 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false);
357 job_factory_.main_job()->SetStream(http_stream); 356 job_factory_.main_job()->SetStream(http_stream);
358 357
359 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream)) 358 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream))
360 .WillOnce(Invoke(DeleteHttpStreamPointer)); 359 .WillOnce(Invoke(DeleteHttpStreamPointer));
361 job_controller_->OnStreamReady(job_factory_.main_job(), SSLConfig(), 360 job_controller_->OnStreamReady(job_factory_.main_job(), SSLConfig());
362 ProxyInfo());
363 361
364 // JobController shouldn't report the status of second job as request 362 // JobController shouldn't report the status of second job as request
365 // is already successfully served. 363 // is already successfully served.
366 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); 364 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
367 job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED, 365 job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED,
368 SSLConfig()); 366 SSLConfig());
369 367
370 VerifyBrokenAlternateProtocolMapping(request_info, true); 368 VerifyBrokenAlternateProtocolMapping(request_info, true);
371 // Reset the request as it's been successfully served. 369 // Reset the request as it's been successfully served.
372 request_.reset(); 370 request_.reset();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED, 404 job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED,
407 SSLConfig()); 405 SSLConfig());
408 406
409 // |alternative_job| succeeds and should report status to Request. 407 // |alternative_job| succeeds and should report status to Request.
410 HttpStream* http_stream = 408 HttpStream* http_stream =
411 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); 409 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false);
412 job_factory_.alternative_job()->SetStream(http_stream); 410 job_factory_.alternative_job()->SetStream(http_stream);
413 411
414 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream)) 412 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream))
415 .WillOnce(Invoke(DeleteHttpStreamPointer)); 413 .WillOnce(Invoke(DeleteHttpStreamPointer));
416 job_controller_->OnStreamReady(job_factory_.alternative_job(), SSLConfig(), 414 job_controller_->OnStreamReady(job_factory_.alternative_job(), SSLConfig());
417 ProxyInfo());
418 VerifyBrokenAlternateProtocolMapping(request_info, false); 415 VerifyBrokenAlternateProtocolMapping(request_info, false);
419 } 416 }
420 417
421 TEST_F(HttpStreamFactoryImplJobControllerTest, 418 TEST_F(HttpStreamFactoryImplJobControllerTest,
422 MainJobSucceedsAfterAltJobFailed) { 419 MainJobSucceedsAfterAltJobFailed) {
423 ProxyConfig proxy_config; 420 ProxyConfig proxy_config;
424 proxy_config.set_auto_detect(true); 421 proxy_config.set_auto_detect(true);
425 // Use asynchronous proxy resolver. 422 // Use asynchronous proxy resolver.
426 MockAsyncProxyResolverFactory* proxy_resolver_factory = 423 MockAsyncProxyResolverFactory* proxy_resolver_factory =
427 new MockAsyncProxyResolverFactory(false); 424 new MockAsyncProxyResolverFactory(false);
(...skipping 23 matching lines...) Expand all
451 job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED, 448 job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED,
452 SSLConfig()); 449 SSLConfig());
453 450
454 // |main_job| succeeds and should report status to Request. 451 // |main_job| succeeds and should report status to Request.
455 HttpStream* http_stream = 452 HttpStream* http_stream =
456 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); 453 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false);
457 job_factory_.main_job()->SetStream(http_stream); 454 job_factory_.main_job()->SetStream(http_stream);
458 455
459 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream)) 456 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream))
460 .WillOnce(Invoke(DeleteHttpStreamPointer)); 457 .WillOnce(Invoke(DeleteHttpStreamPointer));
461 job_controller_->OnStreamReady(job_factory_.main_job(), SSLConfig(), 458 job_controller_->OnStreamReady(job_factory_.main_job(), SSLConfig());
462 ProxyInfo());
463 459
464 VerifyBrokenAlternateProtocolMapping(request_info, true); 460 VerifyBrokenAlternateProtocolMapping(request_info, true);
465 } 461 }
466 462
467 // Regression test for crbug/621069. 463 // Regression test for crbug/621069.
468 // Get load state after main job fails and before alternative job succeeds. 464 // Get load state after main job fails and before alternative job succeeds.
469 TEST_F(HttpStreamFactoryImplJobControllerTest, GetLoadStateAfterMainJobFailed) { 465 TEST_F(HttpStreamFactoryImplJobControllerTest, GetLoadStateAfterMainJobFailed) {
470 ProxyConfig proxy_config; 466 ProxyConfig proxy_config;
471 proxy_config.set_auto_detect(true); 467 proxy_config.set_auto_detect(true);
472 // Use asynchronous proxy resolver. 468 // Use asynchronous proxy resolver.
(...skipping 29 matching lines...) Expand all
502 // Controller should use alternative job to get load state. 498 // Controller should use alternative job to get load state.
503 job_controller_->GetLoadState(); 499 job_controller_->GetLoadState();
504 500
505 // |alternative_job| succeeds and should report status to Request. 501 // |alternative_job| succeeds and should report status to Request.
506 HttpStream* http_stream = 502 HttpStream* http_stream =
507 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); 503 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false);
508 job_factory_.alternative_job()->SetStream(http_stream); 504 job_factory_.alternative_job()->SetStream(http_stream);
509 505
510 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream)) 506 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream))
511 .WillOnce(Invoke(DeleteHttpStreamPointer)); 507 .WillOnce(Invoke(DeleteHttpStreamPointer));
512 job_controller_->OnStreamReady(job_factory_.alternative_job(), SSLConfig(), 508 job_controller_->OnStreamReady(job_factory_.alternative_job(), SSLConfig());
513 ProxyInfo());
514 } 509 }
515 510
516 TEST_F(HttpStreamFactoryImplJobControllerTest, DoNotResumeMainJobBeforeWait) { 511 TEST_F(HttpStreamFactoryImplJobControllerTest, DoNotResumeMainJobBeforeWait) {
517 // Use failing ProxyResolverFactory which is unable to create ProxyResolver 512 // Use failing ProxyResolverFactory which is unable to create ProxyResolver
518 // to stall the alternative job and report to controller to maybe resume the 513 // to stall the alternative job and report to controller to maybe resume the
519 // main job. 514 // main job.
520 ProxyConfig proxy_config; 515 ProxyConfig proxy_config;
521 proxy_config.set_auto_detect(true); 516 proxy_config.set_auto_detect(true);
522 proxy_config.set_pac_mandatory(true); 517 proxy_config.set_pac_mandatory(true);
523 session_deps_.proxy_service.reset(new ProxyService( 518 session_deps_.proxy_service.reset(new ProxyService(
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
928 923
929 // Main job succeeds, starts serving Request and it should report status 924 // Main job succeeds, starts serving Request and it should report status
930 // to Request. The alternative job will mark the main job complete and gets 925 // to Request. The alternative job will mark the main job complete and gets
931 // orphaned. 926 // orphaned.
932 HttpStream* http_stream = 927 HttpStream* http_stream =
933 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); 928 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false);
934 job_factory_.main_job()->SetStream(http_stream); 929 job_factory_.main_job()->SetStream(http_stream);
935 930
936 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream)) 931 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream))
937 .WillOnce(Invoke(DeleteHttpStreamPointer)); 932 .WillOnce(Invoke(DeleteHttpStreamPointer));
938 job_controller_->OnStreamReady(job_factory_.main_job(), SSLConfig(), 933 job_controller_->OnStreamReady(job_factory_.main_job(), SSLConfig());
939 job_factory_.main_job()->proxy_info());
940 934
941 // JobController shouldn't report the status of alternative server job as 935 // JobController shouldn't report the status of alternative server job as
942 // request is already successfully served. 936 // request is already successfully served.
943 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); 937 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
944 job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED, 938 job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED,
945 SSLConfig()); 939 SSLConfig());
946 940
947 // Reset the request as it's been successfully served. 941 // Reset the request as it's been successfully served.
948 request_.reset(); 942 request_.reset();
949 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); 943 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_));
950 944
951 histogram_tester.ExpectUniqueSample("Net.QuicAlternativeProxy.Usage", 945 histogram_tester.ExpectUniqueSample("Net.QuicAlternativeProxy.Usage",
952 2 /* ALTERNATIVE_PROXY_USAGE_LOST_RACE */, 946 2 /* ALTERNATIVE_PROXY_USAGE_LOST_RACE */,
953 1); 947 1);
954 } 948 }
955 949
956 } // namespace net 950 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_stream_factory_impl_job_controller.cc ('k') | net/http/http_stream_factory_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698