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

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

Issue 2932953002: Persist broken and recently-broken alt-svcs to prefs in HttpServerPropertiesManager (Closed)
Patch Set: Added a DCHECK Created 3 years, 6 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) 2017 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2017 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/broken_alternative_services.h" 5 #include "net/http/broken_alternative_services.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/test/test_mock_time_task_runner.h" 10 #include "base/test/test_mock_time_task_runner.h"
11 #include "base/time/tick_clock.h" 11 #include "base/time/tick_clock.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 13
14 namespace net { 14 namespace net {
15 15
16 namespace { 16 namespace {
17 17
18 class BrokenAlternativeServicesTest 18 class BrokenAlternativeServicesTest
19 : public BrokenAlternativeServices::Delegate, 19 : public BrokenAlternativeServices::Delegate,
20 public ::testing::Test { 20 public ::testing::Test {
21 public: 21 public:
22 BrokenAlternativeServicesTest() 22 BrokenAlternativeServicesTest()
23 : test_task_runner_(new base::TestMockTimeTaskRunner()), 23 : test_task_runner_(new base::TestMockTimeTaskRunner()),
24 test_task_runner_context_(test_task_runner_), 24 test_task_runner_context_(test_task_runner_),
25 broken_services_clock_(test_task_runner_->GetMockTickClock()), 25 broken_services_clock_(test_task_runner_->GetMockTickClock()),
26 broken_services_(this, broken_services_clock_.get()) {} 26 broken_services_(this) {
27 broken_services_.SetTickClockForTesting(broken_services_clock_.get());
28 }
27 29
28 // BrokenAlternativeServices::Delegate implementation 30 // BrokenAlternativeServices::Delegate implementation
29 void OnExpireBrokenAlternativeService( 31 void OnExpireBrokenAlternativeService(
30 const AlternativeService& expired_alternative_service) override { 32 const AlternativeService& expired_alternative_service) override {
31 expired_alt_svcs_.push_back(expired_alternative_service); 33 expired_alt_svcs_.push_back(expired_alternative_service);
32 } 34 }
33 35
34 // All tests will run inside the scope of |test_task_runner_context_|, which 36 // All tests will run inside the scope of |test_task_runner_context_|, which
35 // means any task posted to the main message loop will run on 37 // means any task posted to the main message loop will run on
36 // |test_task_runner_|. 38 // |test_task_runner_|.
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 broken_services_.IsAlternativeServiceBroken(alternative_service1)); 403 broken_services_.IsAlternativeServiceBroken(alternative_service1));
402 EXPECT_FALSE( 404 EXPECT_FALSE(
403 broken_services_.IsAlternativeServiceBroken(alternative_service2)); 405 broken_services_.IsAlternativeServiceBroken(alternative_service2));
404 } 406 }
405 407
406 TEST_F(BrokenAlternativeServicesTest, AddBrokenAlternativeServicesToExisting) { 408 TEST_F(BrokenAlternativeServicesTest, AddBrokenAlternativeServicesToExisting) {
407 AlternativeService alternative_service1(kProtoQUIC, "foo1", 443); 409 AlternativeService alternative_service1(kProtoQUIC, "foo1", 443);
408 AlternativeService alternative_service2(kProtoQUIC, "foo2", 443); 410 AlternativeService alternative_service2(kProtoQUIC, "foo2", 443);
409 AlternativeService alternative_service3(kProtoQUIC, "foo3", 443); 411 AlternativeService alternative_service3(kProtoQUIC, "foo3", 443);
410 412
411 base::TimeDelta delay1 = base::TimeDelta::FromMinutes(1);
412 base::TimeDelta delay3 = base::TimeDelta::FromMinutes(3);
413
414 std::unique_ptr<BrokenAlternativeServiceList> broken_list = 413 std::unique_ptr<BrokenAlternativeServiceList> broken_list =
415 base::MakeUnique<BrokenAlternativeServiceList>(); 414 base::MakeUnique<BrokenAlternativeServiceList>();
416 broken_list->push_back( 415 broken_list->push_back(
417 {alternative_service3, broken_services_clock_->NowTicks() + delay3}); 416 {alternative_service3,
417 broken_services_clock_->NowTicks() + base::TimeDelta::FromMinutes(1)});
418 broken_list->push_back( 418 broken_list->push_back(
419 {alternative_service1, broken_services_clock_->NowTicks() + delay1}); 419 {alternative_service1,
420 broken_services_clock_->NowTicks() + base::TimeDelta::FromMinutes(3)});
420 421
421 std::unique_ptr<RecentlyBrokenAlternativeServices> recently_broken_map = 422 std::unique_ptr<RecentlyBrokenAlternativeServices> recently_broken_map =
422 base::MakeUnique<RecentlyBrokenAlternativeServices>( 423 base::MakeUnique<RecentlyBrokenAlternativeServices>(
423 RecentlyBrokenAlternativeServices::NO_AUTO_EVICT); 424 RecentlyBrokenAlternativeServices::NO_AUTO_EVICT);
424 recently_broken_map->Put(alternative_service1, 1); 425 recently_broken_map->Put(alternative_service1, 1);
425 recently_broken_map->Put(alternative_service3, 1); 426 recently_broken_map->Put(alternative_service3, 1);
426 427
427 broken_services_.MarkAlternativeServiceBroken(alternative_service1); 428 broken_services_.MarkAlternativeServiceBroken(alternative_service1);
428 broken_services_.MarkAlternativeServiceBroken(alternative_service2); 429 broken_services_.MarkAlternativeServiceBroken(alternative_service2);
429 430
430 // At this point, |alternative_service1| and |alternative_service2| are marked 431 // At this point, |alternative_service1| and |alternative_service2| are marked
431 // broken and should expire in 5 minutes. 432 // broken and should expire in 5 minutes.
432 // Adding |broken_list| should additionally mark |alternative_service3| 433 // Adding |broken_list| should overwrite |alternative_service1|'s expiration
433 // broken and should expire in 3 minute. Even though |broken_list| contains 434 // time to 3 minutes, and additionally mark |alternative_service3|
434 // |alternative_service1|, its expiration time should not change since it was 435 // broken with an expiration time of 1 minute.
435 // already marked broken.
436 broken_services_.AddBrokenAndRecentlyBrokenAlternativeServices( 436 broken_services_.AddBrokenAndRecentlyBrokenAlternativeServices(
437 std::move(broken_list), std::move(recently_broken_map)); 437 std::move(broken_list), std::move(recently_broken_map));
438 438
439 EXPECT_TRUE( 439 EXPECT_TRUE(
440 broken_services_.IsAlternativeServiceBroken(alternative_service1)); 440 broken_services_.IsAlternativeServiceBroken(alternative_service1));
441 EXPECT_TRUE( 441 EXPECT_TRUE(
442 broken_services_.IsAlternativeServiceBroken(alternative_service2)); 442 broken_services_.IsAlternativeServiceBroken(alternative_service2));
443 EXPECT_TRUE( 443 EXPECT_TRUE(
444 broken_services_.IsAlternativeServiceBroken(alternative_service3)); 444 broken_services_.IsAlternativeServiceBroken(alternative_service3));
445 445
446 // Make sure |alternative_service3|'s brokenness expires in 3 minutes. 446 // Make sure |alternative_service3|'s brokenness expires in 1 minute.
447 test_task_runner_->FastForwardBy(base::TimeDelta::FromMinutes(3) - 447 test_task_runner_->FastForwardBy(base::TimeDelta::FromMinutes(1) -
448 base::TimeDelta::FromInternalValue(1)); 448 base::TimeDelta::FromInternalValue(1));
449 EXPECT_TRUE( 449 EXPECT_TRUE(
450 broken_services_.IsAlternativeServiceBroken(alternative_service1)); 450 broken_services_.IsAlternativeServiceBroken(alternative_service1));
451 EXPECT_TRUE( 451 EXPECT_TRUE(
452 broken_services_.IsAlternativeServiceBroken(alternative_service2)); 452 broken_services_.IsAlternativeServiceBroken(alternative_service2));
453 EXPECT_TRUE( 453 EXPECT_TRUE(
454 broken_services_.IsAlternativeServiceBroken(alternative_service3)); 454 broken_services_.IsAlternativeServiceBroken(alternative_service3));
455 455
456 test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1)); 456 test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1));
457 EXPECT_TRUE( 457 EXPECT_TRUE(
458 broken_services_.IsAlternativeServiceBroken(alternative_service1)); 458 broken_services_.IsAlternativeServiceBroken(alternative_service1));
459 EXPECT_TRUE( 459 EXPECT_TRUE(
460 broken_services_.IsAlternativeServiceBroken(alternative_service2)); 460 broken_services_.IsAlternativeServiceBroken(alternative_service2));
461 EXPECT_FALSE( 461 EXPECT_FALSE(
462 broken_services_.IsAlternativeServiceBroken(alternative_service3)); 462 broken_services_.IsAlternativeServiceBroken(alternative_service3));
463 463
464 // Make sure |alternative_service1| and |alternative_service2|'s brokenness 464 // Make sure |alternative_service1|'s brokenness expires in 2 more minutes.
465 // expire in 2 more minutes.
466 test_task_runner_->FastForwardBy(base::TimeDelta::FromMinutes(2) - 465 test_task_runner_->FastForwardBy(base::TimeDelta::FromMinutes(2) -
467 base::TimeDelta::FromInternalValue(1)); 466 base::TimeDelta::FromInternalValue(1));
468 EXPECT_TRUE( 467 EXPECT_TRUE(
469 broken_services_.IsAlternativeServiceBroken(alternative_service1)); 468 broken_services_.IsAlternativeServiceBroken(alternative_service1));
470 EXPECT_TRUE( 469 EXPECT_TRUE(
471 broken_services_.IsAlternativeServiceBroken(alternative_service2)); 470 broken_services_.IsAlternativeServiceBroken(alternative_service2));
472 EXPECT_FALSE( 471 EXPECT_FALSE(
473 broken_services_.IsAlternativeServiceBroken(alternative_service3)); 472 broken_services_.IsAlternativeServiceBroken(alternative_service3));
474 473
475 test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1)); 474 test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1));
476 EXPECT_FALSE( 475 EXPECT_FALSE(
477 broken_services_.IsAlternativeServiceBroken(alternative_service1)); 476 broken_services_.IsAlternativeServiceBroken(alternative_service1));
477 EXPECT_TRUE(
478 broken_services_.IsAlternativeServiceBroken(alternative_service2));
479 EXPECT_FALSE(
480 broken_services_.IsAlternativeServiceBroken(alternative_service3));
481
482 // Make sure |alternative_service2|'s brokenness expires in 2 more minutes.
483 test_task_runner_->FastForwardBy(base::TimeDelta::FromMinutes(2) -
484 base::TimeDelta::FromInternalValue(1));
485 EXPECT_FALSE(
486 broken_services_.IsAlternativeServiceBroken(alternative_service1));
487 EXPECT_TRUE(
488 broken_services_.IsAlternativeServiceBroken(alternative_service2));
489 EXPECT_FALSE(
490 broken_services_.IsAlternativeServiceBroken(alternative_service3));
491
492 test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1));
493 EXPECT_FALSE(
494 broken_services_.IsAlternativeServiceBroken(alternative_service1));
478 EXPECT_FALSE( 495 EXPECT_FALSE(
479 broken_services_.IsAlternativeServiceBroken(alternative_service2)); 496 broken_services_.IsAlternativeServiceBroken(alternative_service2));
480 EXPECT_FALSE( 497 EXPECT_FALSE(
481 broken_services_.IsAlternativeServiceBroken(alternative_service3)); 498 broken_services_.IsAlternativeServiceBroken(alternative_service3));
482 499
483 // Make sure recently broken alternative services are in most-recently-used 500 // Make sure recently broken alternative services are in most-recently-used
484 // order. AddBrokenAndRecentlyBrokenAlternativeServices() will add 501 // order. AddBrokenAndRecentlyBrokenAlternativeServices() will add
485 // entries in |recently_broken_map| (that aren't already marked recently 502 // entries in |recently_broken_map| (that aren't already marked recently
486 // broken in |broken_services_|) to the back of |broken_services_|'s 503 // broken in |broken_services_|) to the back of |broken_services_|'s
487 // recency list; in this case, only |alternative_service3| is added as 504 // recency list; in this case, only |alternative_service3| is added as
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 broken_services_.IsAlternativeServiceBroken(alternative_service1)); 538 broken_services_.IsAlternativeServiceBroken(alternative_service1));
522 539
523 // Make sure an expiration task has been scheduled for expiring the brokenness 540 // Make sure an expiration task has been scheduled for expiring the brokenness
524 // of |alternative_service1|. 541 // of |alternative_service1|.
525 EXPECT_TRUE(test_task_runner_->HasPendingTask()); 542 EXPECT_TRUE(test_task_runner_->HasPendingTask());
526 } 543 }
527 544
528 } // namespace 545 } // namespace
529 546
530 } // namespace net 547 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698