| Index: net/http/broken_alternative_services_unittest.cc
|
| diff --git a/net/http/broken_alternative_services_unittest.cc b/net/http/broken_alternative_services_unittest.cc
|
| index 0c58582648d9c561851fef7229c7a9098f3015cd..12f5c6d439a8f631b4c1f825fda633fbc1efca0c 100644
|
| --- a/net/http/broken_alternative_services_unittest.cc
|
| +++ b/net/http/broken_alternative_services_unittest.cc
|
| @@ -330,6 +330,186 @@ TEST_F(BrokenAlternativeServicesTest, RemoveExpiredBrokenAltSvc) {
|
| EXPECT_EQ(alternative_service1, expired_alt_svcs_[1]);
|
| }
|
|
|
| +TEST_F(BrokenAlternativeServicesTest, SetBrokenAlternativeServices) {
|
| + AlternativeService alternative_service1(kProtoQUIC, "foo1", 443);
|
| + AlternativeService alternative_service2(kProtoQUIC, "foo2", 443);
|
| +
|
| + base::TimeDelta delay1 = base::TimeDelta::FromMinutes(1);
|
| +
|
| + std::unique_ptr<BrokenAlternativeServiceList> broken_list =
|
| + base::MakeUnique<BrokenAlternativeServiceList>();
|
| + broken_list->push_back(
|
| + {alternative_service1, broken_services_clock_->NowTicks() + delay1});
|
| +
|
| + std::unique_ptr<RecentlyBrokenAlternativeServices> recently_broken_map =
|
| + base::MakeUnique<RecentlyBrokenAlternativeServices>(
|
| + RecentlyBrokenAlternativeServices::NO_AUTO_EVICT);
|
| + recently_broken_map->Put(alternative_service1, 1);
|
| + recently_broken_map->Put(alternative_service2, 2);
|
| +
|
| + broken_services_.SetBrokenAndRecentlyBrokenAlternativeServices(
|
| + std::move(broken_list), std::move(recently_broken_map));
|
| +
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service1));
|
| + EXPECT_FALSE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service2));
|
| +
|
| + EXPECT_TRUE(broken_services_.WasAlternativeServiceRecentlyBroken(
|
| + alternative_service1));
|
| + EXPECT_TRUE(broken_services_.WasAlternativeServiceRecentlyBroken(
|
| + alternative_service2));
|
| +
|
| + // Make sure |alternative_service1| expires after the delay in |broken_list|.
|
| + test_task_runner_->FastForwardBy(delay1 -
|
| + base::TimeDelta::FromInternalValue(1));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service1));
|
| +
|
| + test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1));
|
| + EXPECT_FALSE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service1));
|
| +
|
| + // Make sure the broken counts in |recently_broken_map| translate to the
|
| + // correct expiration delays if the alternative services are marked broken.
|
| + broken_services_.MarkAlternativeServiceBroken(alternative_service2);
|
| + broken_services_.MarkAlternativeServiceBroken(alternative_service1);
|
| +
|
| + test_task_runner_->FastForwardBy(base::TimeDelta::FromMinutes(10) -
|
| + base::TimeDelta::FromInternalValue(1));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service1));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service2));
|
| +
|
| + test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1));
|
| + EXPECT_FALSE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service1));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service2));
|
| +
|
| + test_task_runner_->FastForwardBy(base::TimeDelta::FromMinutes(20) -
|
| + base::TimeDelta::FromMinutes(10) -
|
| + base::TimeDelta::FromInternalValue(1));
|
| + EXPECT_FALSE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service1));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service2));
|
| +
|
| + test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1));
|
| + EXPECT_FALSE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service1));
|
| + EXPECT_FALSE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service2));
|
| +}
|
| +
|
| +TEST_F(BrokenAlternativeServicesTest,
|
| + SetBrokenAlternativeServicesWithExisting) {
|
| + AlternativeService alternative_service1(kProtoQUIC, "foo1", 443);
|
| + AlternativeService alternative_service2(kProtoQUIC, "foo2", 443);
|
| + AlternativeService alternative_service3(kProtoQUIC, "foo3", 443);
|
| +
|
| + std::unique_ptr<BrokenAlternativeServiceList> broken_list =
|
| + base::MakeUnique<BrokenAlternativeServiceList>();
|
| + broken_list->push_back(
|
| + {alternative_service3,
|
| + broken_services_clock_->NowTicks() + base::TimeDelta::FromMinutes(1)});
|
| + broken_list->push_back(
|
| + {alternative_service1,
|
| + broken_services_clock_->NowTicks() + base::TimeDelta::FromMinutes(3)});
|
| +
|
| + std::unique_ptr<RecentlyBrokenAlternativeServices> recently_broken_map =
|
| + base::MakeUnique<RecentlyBrokenAlternativeServices>(
|
| + RecentlyBrokenAlternativeServices::NO_AUTO_EVICT);
|
| + recently_broken_map->Put(alternative_service1, 1);
|
| + recently_broken_map->Put(alternative_service3, 1);
|
| +
|
| + broken_services_.MarkAlternativeServiceBroken(alternative_service1);
|
| + broken_services_.MarkAlternativeServiceBroken(alternative_service2);
|
| +
|
| + // At this point, |alternative_service1| and |alternative_service2| are marked
|
| + // broken and should expire in 5 minutes.
|
| + // Adding |broken_list| should overwrite |alternative_service1|'s expiration
|
| + // time to 3 minutes, and additionally mark |alternative_service3|
|
| + // broken with an expiration time of 1 minute.
|
| + broken_services_.SetBrokenAndRecentlyBrokenAlternativeServices(
|
| + std::move(broken_list), std::move(recently_broken_map));
|
| +
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service1));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service2));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service3));
|
| +
|
| + // Make sure |alternative_service3|'s brokenness expires in 1 minute.
|
| + test_task_runner_->FastForwardBy(base::TimeDelta::FromMinutes(1) -
|
| + base::TimeDelta::FromInternalValue(1));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service1));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service2));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service3));
|
| +
|
| + test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service1));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service2));
|
| + EXPECT_FALSE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service3));
|
| +
|
| + // Make sure |alternative_service1|'s brokenness expires in 2 more minutes.
|
| + test_task_runner_->FastForwardBy(base::TimeDelta::FromMinutes(2) -
|
| + base::TimeDelta::FromInternalValue(1));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service1));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service2));
|
| + EXPECT_FALSE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service3));
|
| +
|
| + test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1));
|
| + EXPECT_FALSE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service1));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service2));
|
| + EXPECT_FALSE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service3));
|
| +
|
| + // Make sure |alternative_service2|'s brokenness expires in 2 more minutes.
|
| + test_task_runner_->FastForwardBy(base::TimeDelta::FromMinutes(2) -
|
| + base::TimeDelta::FromInternalValue(1));
|
| + EXPECT_FALSE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service1));
|
| + EXPECT_TRUE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service2));
|
| + EXPECT_FALSE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service3));
|
| +
|
| + test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1));
|
| + EXPECT_FALSE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service1));
|
| + EXPECT_FALSE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service2));
|
| + EXPECT_FALSE(
|
| + broken_services_.IsAlternativeServiceBroken(alternative_service3));
|
| +
|
| + // Make sure recently broken alternative services are in most-recently-used
|
| + // order. SetBrokenAndRecentlyBrokenAlternativeServices() will add
|
| + // entries in |recently_broken_map| (that aren't already marked recently
|
| + // broken in |broken_services_|) to the back of |broken_services_|'s
|
| + // recency list; in this case, only |alternative_service3| is added as
|
| + // recently broken.
|
| + auto it = broken_services_.recently_broken_alternative_services().begin();
|
| + EXPECT_EQ(alternative_service2, it->first);
|
| + ++it;
|
| + EXPECT_EQ(alternative_service1, it->first);
|
| + ++it;
|
| + EXPECT_EQ(alternative_service3, it->first);
|
| +}
|
| +
|
| TEST_F(BrokenAlternativeServicesTest, ScheduleExpireTaskAfterExpire) {
|
| // This test will check that when a broken alt svc expires, an expiration task
|
| // is scheduled for the next broken alt svc in the expiration queue.
|
|
|