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

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

Issue 2332193003: JobController3: Move MarkAlternativeServiceBroken to job controller (Closed)
Patch Set: some nits Created 4 years, 3 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 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 job_controller_->Start(request_info, &request_delegate_, nullptr, 288 job_controller_->Start(request_info, &request_delegate_, nullptr,
289 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, 289 BoundNetLog(), HttpStreamRequest::HTTP_STREAM,
290 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); 290 DEFAULT_PRIORITY, SSLConfig(), SSLConfig()));
291 EXPECT_TRUE(job_controller_->main_job()); 291 EXPECT_TRUE(job_controller_->main_job());
292 EXPECT_TRUE(job_controller_->alternative_job()); 292 EXPECT_TRUE(job_controller_->alternative_job());
293 293
294 // We have the main job with unknown status when the alternative job is failed 294 // We have the main job with unknown status when the alternative job is failed
295 // thus should not notify Request of the alternative job's failure. But should 295 // thus should not notify Request of the alternative job's failure. But should
296 // notify the main job to mark the alternative job failed. 296 // notify the main job to mark the alternative job failed.
297 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); 297 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
298 EXPECT_CALL(*job_factory_.main_job(), MarkOtherJobComplete(_)).Times(1);
299 job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED, 298 job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED,
300 SSLConfig()); 299 SSLConfig());
301 EXPECT_TRUE(!job_controller_->alternative_job()); 300 EXPECT_TRUE(!job_controller_->alternative_job());
302 EXPECT_TRUE(job_controller_->main_job()); 301 EXPECT_TRUE(job_controller_->main_job());
303 302
304 // The failure of second Job should be reported to Request as there's no more 303 // The failure of second Job should be reported to Request as there's no more
305 // pending Job to serve the Request. 304 // pending Job to serve the Request.
306 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(1); 305 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(1);
307 job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED, 306 job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED,
308 SSLConfig()); 307 SSLConfig());
(...skipping 28 matching lines...) Expand all
337 336
338 // Main job succeeds, starts serving Request and it should report status 337 // Main job succeeds, starts serving Request and it should report status
339 // to Request. The alternative job will mark the main job complete and gets 338 // to Request. The alternative job will mark the main job complete and gets
340 // orphaned. 339 // orphaned.
341 HttpStream* http_stream = 340 HttpStream* http_stream =
342 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); 341 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false);
343 job_factory_.main_job()->SetStream(http_stream); 342 job_factory_.main_job()->SetStream(http_stream);
344 343
345 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream)) 344 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream))
346 .WillOnce(Invoke(DeleteHttpStreamPointer)); 345 .WillOnce(Invoke(DeleteHttpStreamPointer));
347 EXPECT_CALL(*job_factory_.alternative_job(), MarkOtherJobComplete(_))
348 .Times(1);
349 job_controller_->OnStreamReady(job_factory_.main_job(), SSLConfig(), 346 job_controller_->OnStreamReady(job_factory_.main_job(), SSLConfig(),
350 ProxyInfo()); 347 ProxyInfo());
351 348
352 // JobController shouldn't report the status of second job as request 349 // JobController shouldn't report the status of second job as request
353 // is already successfully served. 350 // is already successfully served.
354 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); 351 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
355 job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED, 352 job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED,
356 SSLConfig()); 353 SSLConfig());
357 354
358 // Reset the request as it's been successfully served. 355 // Reset the request as it's been successfully served.
(...skipping 24 matching lines...) Expand all
383 request_.reset( 380 request_.reset(
384 job_controller_->Start(request_info, &request_delegate_, nullptr, 381 job_controller_->Start(request_info, &request_delegate_, nullptr,
385 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, 382 BoundNetLog(), HttpStreamRequest::HTTP_STREAM,
386 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); 383 DEFAULT_PRIORITY, SSLConfig(), SSLConfig()));
387 EXPECT_TRUE(job_controller_->main_job()); 384 EXPECT_TRUE(job_controller_->main_job());
388 EXPECT_TRUE(job_controller_->alternative_job()); 385 EXPECT_TRUE(job_controller_->alternative_job());
389 386
390 // |main_job| fails but should not report status to Request. 387 // |main_job| fails but should not report status to Request.
391 // The alternative job will mark the main job complete. 388 // The alternative job will mark the main job complete.
392 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); 389 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
393 EXPECT_CALL(*job_factory_.alternative_job(), MarkOtherJobComplete(_))
394 .Times(1);
395 390
396 job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED, 391 job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED,
397 SSLConfig()); 392 SSLConfig());
398 393
399 // |alternative_job| succeeds and should report status to Request. 394 // |alternative_job| succeeds and should report status to Request.
400 HttpStream* http_stream = 395 HttpStream* http_stream =
401 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); 396 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false);
402 job_factory_.alternative_job()->SetStream(http_stream); 397 job_factory_.alternative_job()->SetStream(http_stream);
403 398
404 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream)) 399 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream))
(...skipping 26 matching lines...) Expand all
431 request_.reset( 426 request_.reset(
432 job_controller_->Start(request_info, &request_delegate_, nullptr, 427 job_controller_->Start(request_info, &request_delegate_, nullptr,
433 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, 428 BoundNetLog(), HttpStreamRequest::HTTP_STREAM,
434 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); 429 DEFAULT_PRIORITY, SSLConfig(), SSLConfig()));
435 EXPECT_TRUE(job_controller_->main_job()); 430 EXPECT_TRUE(job_controller_->main_job());
436 EXPECT_TRUE(job_controller_->alternative_job()); 431 EXPECT_TRUE(job_controller_->alternative_job());
437 432
438 // |main_job| fails but should not report status to Request. 433 // |main_job| fails but should not report status to Request.
439 // The alternative job will mark the main job complete. 434 // The alternative job will mark the main job complete.
440 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); 435 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
441 EXPECT_CALL(*job_factory_.alternative_job(), MarkOtherJobComplete(_))
442 .Times(1);
443 436
444 job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED, 437 job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED,
445 SSLConfig()); 438 SSLConfig());
446 439
447 // Controller should use alternative job to get load state. 440 // Controller should use alternative job to get load state.
448 job_controller_->GetLoadState(); 441 job_controller_->GetLoadState();
449 442
450 // |alternative_job| succeeds and should report status to Request. 443 // |alternative_job| succeeds and should report status to Request.
451 HttpStream* http_stream = 444 HttpStream* http_stream =
452 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); 445 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false);
(...skipping 28 matching lines...) Expand all
481 474
482 request_.reset( 475 request_.reset(
483 job_controller_->Start(request_info, &request_delegate_, nullptr, 476 job_controller_->Start(request_info, &request_delegate_, nullptr,
484 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, 477 BoundNetLog(), HttpStreamRequest::HTTP_STREAM,
485 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); 478 DEFAULT_PRIORITY, SSLConfig(), SSLConfig()));
486 EXPECT_TRUE(job_controller_->main_job()); 479 EXPECT_TRUE(job_controller_->main_job());
487 EXPECT_TRUE(job_controller_->alternative_job()); 480 EXPECT_TRUE(job_controller_->alternative_job());
488 481
489 // Wait until OnStreamFailedCallback is executed on the alternative job. 482 // Wait until OnStreamFailedCallback is executed on the alternative job.
490 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(1); 483 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(1);
491 EXPECT_CALL(*job_factory_.main_job(), MarkOtherJobComplete(_)).Times(1);
492 base::RunLoop().RunUntilIdle(); 484 base::RunLoop().RunUntilIdle();
493 } 485 }
494 486
495 TEST_F(HttpStreamFactoryImplJobControllerTest, InvalidPortForQuic) { 487 TEST_F(HttpStreamFactoryImplJobControllerTest, InvalidPortForQuic) {
496 // Using a restricted port 101 for QUIC should fail and the alternative job 488 // Using a restricted port 101 for QUIC should fail and the alternative job
497 // should post OnStreamFailedCall on the controller to resume the main job. 489 // should post OnStreamFailedCall on the controller to resume the main job.
498 Initialize(false); 490 Initialize(false);
499 491
500 HttpRequestInfo request_info; 492 HttpRequestInfo request_info;
501 request_info.method = "GET"; 493 request_info.method = "GET";
502 request_info.url = GURL("https://www.google.com"); 494 request_info.url = GURL("https://www.google.com");
503 495
504 url::SchemeHostPort server(request_info.url); 496 url::SchemeHostPort server(request_info.url);
505 AlternativeService alternative_service(QUIC, server.host(), 101); 497 AlternativeService alternative_service(QUIC, server.host(), 101);
506 SetAlternativeService(request_info, alternative_service); 498 SetAlternativeService(request_info, alternative_service);
507 499
508 request_.reset( 500 request_.reset(
509 job_controller_->Start(request_info, &request_delegate_, nullptr, 501 job_controller_->Start(request_info, &request_delegate_, nullptr,
510 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, 502 BoundNetLog(), HttpStreamRequest::HTTP_STREAM,
511 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); 503 DEFAULT_PRIORITY, SSLConfig(), SSLConfig()));
512 504
513 EXPECT_TRUE(job_factory_.main_job()->is_waiting()); 505 EXPECT_TRUE(job_factory_.main_job()->is_waiting());
514 506
515 // Wait until OnStreamFailedCallback is executed on the alternative job. 507 // Wait until OnStreamFailedCallback is executed on the alternative job.
516 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1); 508 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1);
517 EXPECT_CALL(*job_factory_.main_job(), MarkOtherJobComplete(_)).Times(1);
518 base::RunLoop().RunUntilIdle(); 509 base::RunLoop().RunUntilIdle();
519 } 510 }
520 511
521 TEST_F(HttpStreamFactoryImplJobControllerTest, 512 TEST_F(HttpStreamFactoryImplJobControllerTest,
522 NoAvailableSpdySessionToResumeMainJob) { 513 NoAvailableSpdySessionToResumeMainJob) {
523 // Test the alternative job is not resumed when the alternative job is 514 // Test the alternative job is not resumed when the alternative job is
524 // IO_PENDING for proxy resolution. Once all the proxy resolution succeeds, 515 // IO_PENDING for proxy resolution. Once all the proxy resolution succeeds,
525 // the latter part of this test tests controller resumes the main job 516 // the latter part of this test tests controller resumes the main job
526 // when there's no SPDY session for the alternative job. 517 // when there's no SPDY session for the alternative job.
527 ProxyConfig proxy_config; 518 ProxyConfig proxy_config;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 resolver.pending_requests()[main_job_request_id]->CompleteNow(net::OK); 564 resolver.pending_requests()[main_job_request_id]->CompleteNow(net::OK);
574 EXPECT_TRUE(job_controller_->main_job()->is_waiting()); 565 EXPECT_TRUE(job_controller_->main_job()->is_waiting());
575 566
576 // Resolve proxy for the alternative job to proceed to create a connection. 567 // Resolve proxy for the alternative job to proceed to create a connection.
577 // Use hanging HostResolver to fail creation of a SPDY session for the 568 // Use hanging HostResolver to fail creation of a SPDY session for the
578 // alternative job. The alternative job will be IO_PENDING thus should resume 569 // alternative job. The alternative job will be IO_PENDING thus should resume
579 // the main job. 570 // the main job.
580 resolver.pending_requests()[0]->CompleteNow(net::OK); 571 resolver.pending_requests()[0]->CompleteNow(net::OK);
581 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); 572 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
582 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1); 573 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1);
583 EXPECT_CALL(*job_factory_.main_job(), MarkOtherJobComplete(_)).Times(1);
584 574
585 base::RunLoop().RunUntilIdle(); 575 base::RunLoop().RunUntilIdle();
586 } 576 }
587 577
588 TEST_F(HttpStreamFactoryImplJobControllerTest, 578 TEST_F(HttpStreamFactoryImplJobControllerTest,
589 NoAvailableQuicSessionToResumeMainJob) { 579 NoAvailableQuicSessionToResumeMainJob) {
590 // Use failing HostResolver which is unable to resolve the host name for QUIC. 580 // Use failing HostResolver which is unable to resolve the host name for QUIC.
591 // No QUIC session is created and thus should resume the main job. 581 // No QUIC session is created and thus should resume the main job.
592 FailingHostResolver* host_resolver = new FailingHostResolver(); 582 FailingHostResolver* host_resolver = new FailingHostResolver();
593 session_deps_.host_resolver.reset(host_resolver); 583 session_deps_.host_resolver.reset(host_resolver);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 // Resolve proxy for the alternative job to proceed to create a connection. 628 // Resolve proxy for the alternative job to proceed to create a connection.
639 // Use failing HostResolver to fail creation of a QUIC session for the 629 // Use failing HostResolver to fail creation of a QUIC session for the
640 // alternative job. The alternative job will thus resume the main job. 630 // alternative job. The alternative job will thus resume the main job.
641 resolver.pending_requests()[0]->results()->UseNamedProxy("result1:80"); 631 resolver.pending_requests()[0]->results()->UseNamedProxy("result1:80");
642 resolver.pending_requests()[0]->CompleteNow(net::OK); 632 resolver.pending_requests()[0]->CompleteNow(net::OK);
643 633
644 // Wait until OnStreamFailedCallback is executed on the alternative job. 634 // Wait until OnStreamFailedCallback is executed on the alternative job.
645 // Request shouldn't be notified as the main job is still pending status. 635 // Request shouldn't be notified as the main job is still pending status.
646 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); 636 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
647 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1); 637 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1);
648 EXPECT_CALL(*job_factory_.main_job(), MarkOtherJobComplete(_)).Times(1);
649 638
650 base::RunLoop().RunUntilIdle(); 639 base::RunLoop().RunUntilIdle();
651 } 640 }
652 641
653 TEST_F(HttpStreamFactoryImplJobControllerTest, DelayedTCP) { 642 TEST_F(HttpStreamFactoryImplJobControllerTest, DelayedTCP) {
654 HangingResolver* resolver = new HangingResolver(); 643 HangingResolver* resolver = new HangingResolver();
655 session_deps_.host_resolver.reset(resolver); 644 session_deps_.host_resolver.reset(resolver);
656 645
657 Initialize(false); 646 Initialize(false);
658 647
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 request_info.url = GURL("http://mail.example.org/"); 821 request_info.url = GURL("http://mail.example.org/");
833 822
834 request_.reset( 823 request_.reset(
835 job_controller_->Start(request_info, &request_delegate_, nullptr, 824 job_controller_->Start(request_info, &request_delegate_, nullptr,
836 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, 825 BoundNetLog(), HttpStreamRequest::HTTP_STREAM,
837 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); 826 DEFAULT_PRIORITY, SSLConfig(), SSLConfig()));
838 EXPECT_TRUE(job_controller_->main_job()->is_waiting()); 827 EXPECT_TRUE(job_controller_->main_job()->is_waiting());
839 EXPECT_TRUE(job_controller_->alternative_job()); 828 EXPECT_TRUE(job_controller_->alternative_job());
840 829
841 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)).Times(0); 830 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)).Times(0);
842 EXPECT_CALL(*job_factory_.main_job(), MarkOtherJobComplete(_)).Times(1);
843 831
844 // Since the alternative proxy server job is started in the next message loop, 832 // Since the alternative proxy server job is started in the next message loop,
845 // the main job would remain blocked until the alternative proxy starts, and 833 // the main job would remain blocked until the alternative proxy starts, and
846 // fails. 834 // fails.
847 EXPECT_CALL(*job_factory_.main_job(), Resume()) 835 EXPECT_CALL(*job_factory_.main_job(), Resume())
848 .WillOnce(Invoke(testing::CreateFunctor( 836 .WillOnce(Invoke(testing::CreateFunctor(
849 &JobControllerPeer::VerifyWaitingTimeForMainJob, job_controller_, 837 &JobControllerPeer::VerifyWaitingTimeForMainJob, job_controller_,
850 base::TimeDelta::FromMicroseconds(0)))); 838 base::TimeDelta::FromMicroseconds(0))));
851 839
852 base::RunLoop().RunUntilIdle(); 840 base::RunLoop().RunUntilIdle();
853 EXPECT_FALSE(job_controller_->alternative_job()); 841 EXPECT_FALSE(job_controller_->alternative_job());
854 EXPECT_TRUE(job_controller_->main_job()->is_waiting()); 842 EXPECT_TRUE(job_controller_->main_job()->is_waiting());
855 // Since the main job did not complete successfully, the alternative proxy 843 // Since the main job did not complete successfully, the alternative proxy
856 // server should not be marked as bad. 844 // server should not be marked as bad.
857 EXPECT_TRUE(test_proxy_delegate()->alternative_proxy_server().is_valid()); 845 EXPECT_TRUE(test_proxy_delegate()->alternative_proxy_server().is_valid());
858 EXPECT_EQ(1, test_proxy_delegate()->get_alternative_proxy_invocations()); 846 EXPECT_EQ(1, test_proxy_delegate()->get_alternative_proxy_invocations());
859 } 847 }
860 848
861 } // namespace net 849 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698