Index: components/proximity_auth/cryptauth/sync_scheduler_impl_unittest.cc |
diff --git a/components/proximity_auth/cryptauth/sync_scheduler_impl_unittest.cc b/components/proximity_auth/cryptauth/sync_scheduler_impl_unittest.cc |
deleted file mode 100644 |
index 25359a81e97b3ff40d4cb028fabaa49aca354288..0000000000000000000000000000000000000000 |
--- a/components/proximity_auth/cryptauth/sync_scheduler_impl_unittest.cc |
+++ /dev/null |
@@ -1,278 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "components/proximity_auth/cryptauth/sync_scheduler_impl.h" |
- |
-#include "base/timer/mock_timer.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace proximity_auth { |
- |
-using Strategy = SyncScheduler::Strategy; |
-using SyncState = SyncScheduler::SyncState; |
- |
-namespace { |
- |
-// Constants configuring the the scheduler. |
-const int kElapsedTimeDays = 40; |
-const int kRefreshPeriodDays = 30; |
-const int kRecoveryPeriodSeconds = 10; |
-const double kMaxJitterPercentage = 0.1; |
-const char kTestSchedulerName[] = "TestSyncSchedulerImpl"; |
- |
-// Returns true if |jittered_time_delta| is within the range of a jittered |
-// |base_time_delta| with a maximum of |max_jitter_ratio|. |
-bool IsTimeDeltaWithinJitter(const base::TimeDelta& base_time_delta, |
- const base::TimeDelta& jittered_time_delta, |
- double max_jitter_ratio) { |
- if (base_time_delta.is_zero()) |
- return jittered_time_delta.is_zero(); |
- |
- base::TimeDelta difference = |
- (jittered_time_delta - base_time_delta).magnitude(); |
- double percentage_of_base = |
- difference.InMillisecondsF() / base_time_delta.InMillisecondsF(); |
- return percentage_of_base < max_jitter_ratio; |
-} |
- |
-// Test harness for the SyncSchedulerImpl to create MockTimers. |
-class TestSyncSchedulerImpl : public SyncSchedulerImpl { |
- public: |
- TestSyncSchedulerImpl(Delegate* delegate, |
- base::TimeDelta refresh_period, |
- base::TimeDelta recovery_period, |
- double max_jitter_ratio) |
- : SyncSchedulerImpl(delegate, |
- refresh_period, |
- recovery_period, |
- max_jitter_ratio, |
- kTestSchedulerName) {} |
- |
- ~TestSyncSchedulerImpl() override {} |
- |
- base::MockTimer* timer() { return mock_timer_; } |
- |
- private: |
- scoped_ptr<base::Timer> CreateTimer() override { |
- bool retain_user_task = false; |
- bool is_repeating = false; |
- mock_timer_ = new base::MockTimer(retain_user_task, is_repeating); |
- return make_scoped_ptr(mock_timer_); |
- } |
- |
- // A timer instance for testing. Owned by the parent scheduler. |
- base::MockTimer* mock_timer_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TestSyncSchedulerImpl); |
-}; |
- |
-} // namespace |
- |
-class ProximityAuthSyncSchedulerImplTest : public testing::Test, |
- public SyncSchedulerImpl::Delegate { |
- protected: |
- ProximityAuthSyncSchedulerImplTest() |
- : refresh_period_(base::TimeDelta::FromDays(kRefreshPeriodDays)), |
- base_recovery_period_( |
- base::TimeDelta::FromSeconds(kRecoveryPeriodSeconds)), |
- zero_elapsed_time_(base::TimeDelta::FromSeconds(0)), |
- scheduler_(new TestSyncSchedulerImpl(this, |
- refresh_period_, |
- base_recovery_period_, |
- 0)) {} |
- |
- ~ProximityAuthSyncSchedulerImplTest() override {} |
- |
- void OnSyncRequested( |
- scoped_ptr<SyncScheduler::SyncRequest> sync_request) override { |
- sync_request_ = sync_request.Pass(); |
- } |
- |
- base::MockTimer* timer() { return scheduler_->timer(); } |
- |
- // The time deltas used to configure |scheduler_|. |
- base::TimeDelta refresh_period_; |
- base::TimeDelta base_recovery_period_; |
- base::TimeDelta zero_elapsed_time_; |
- |
- // The scheduler instance under test. |
- scoped_ptr<TestSyncSchedulerImpl> scheduler_; |
- |
- scoped_ptr<SyncScheduler::SyncRequest> sync_request_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ProximityAuthSyncSchedulerImplTest); |
-}; |
- |
-TEST_F(ProximityAuthSyncSchedulerImplTest, ForceSyncSuccess) { |
- scheduler_->Start(zero_elapsed_time_, Strategy::PERIODIC_REFRESH); |
- EXPECT_EQ(Strategy::PERIODIC_REFRESH, scheduler_->GetStrategy()); |
- EXPECT_EQ(SyncState::WAITING_FOR_REFRESH, scheduler_->GetSyncState()); |
- |
- scheduler_->ForceSync(); |
- EXPECT_EQ(SyncState::SYNC_IN_PROGRESS, scheduler_->GetSyncState()); |
- EXPECT_TRUE(sync_request_); |
- sync_request_->OnDidComplete(true); |
- EXPECT_EQ(Strategy::PERIODIC_REFRESH, scheduler_->GetStrategy()); |
- EXPECT_EQ(SyncState::WAITING_FOR_REFRESH, scheduler_->GetSyncState()); |
-} |
- |
-TEST_F(ProximityAuthSyncSchedulerImplTest, ForceSyncFailure) { |
- scheduler_->Start(zero_elapsed_time_, Strategy::PERIODIC_REFRESH); |
- EXPECT_EQ(Strategy::PERIODIC_REFRESH, scheduler_->GetStrategy()); |
- |
- scheduler_->ForceSync(); |
- EXPECT_TRUE(sync_request_); |
- sync_request_->OnDidComplete(false); |
- EXPECT_EQ(Strategy::AGGRESSIVE_RECOVERY, scheduler_->GetStrategy()); |
-} |
- |
-TEST_F(ProximityAuthSyncSchedulerImplTest, PeriodicRefreshSuccess) { |
- EXPECT_EQ(SyncState::NOT_STARTED, scheduler_->GetSyncState()); |
- scheduler_->Start(zero_elapsed_time_, Strategy::PERIODIC_REFRESH); |
- EXPECT_EQ(Strategy::PERIODIC_REFRESH, scheduler_->GetStrategy()); |
- |
- EXPECT_EQ(refresh_period_, timer()->GetCurrentDelay()); |
- timer()->Fire(); |
- EXPECT_EQ(SyncState::SYNC_IN_PROGRESS, scheduler_->GetSyncState()); |
- ASSERT_TRUE(sync_request_.get()); |
- |
- sync_request_->OnDidComplete(true); |
- EXPECT_EQ(SyncState::WAITING_FOR_REFRESH, scheduler_->GetSyncState()); |
- EXPECT_EQ(Strategy::PERIODIC_REFRESH, scheduler_->GetStrategy()); |
-} |
- |
-TEST_F(ProximityAuthSyncSchedulerImplTest, PeriodicRefreshFailure) { |
- scheduler_->Start(zero_elapsed_time_, Strategy::PERIODIC_REFRESH); |
- EXPECT_EQ(Strategy::PERIODIC_REFRESH, scheduler_->GetStrategy()); |
- timer()->Fire(); |
- sync_request_->OnDidComplete(false); |
- EXPECT_EQ(Strategy::AGGRESSIVE_RECOVERY, scheduler_->GetStrategy()); |
-} |
- |
-TEST_F(ProximityAuthSyncSchedulerImplTest, AggressiveRecoverySuccess) { |
- scheduler_->Start(zero_elapsed_time_, Strategy::AGGRESSIVE_RECOVERY); |
- EXPECT_EQ(Strategy::AGGRESSIVE_RECOVERY, scheduler_->GetStrategy()); |
- |
- EXPECT_EQ(base_recovery_period_, timer()->GetCurrentDelay()); |
- timer()->Fire(); |
- EXPECT_EQ(SyncState::SYNC_IN_PROGRESS, scheduler_->GetSyncState()); |
- ASSERT_TRUE(sync_request_.get()); |
- |
- sync_request_->OnDidComplete(true); |
- EXPECT_EQ(SyncState::WAITING_FOR_REFRESH, scheduler_->GetSyncState()); |
- EXPECT_EQ(Strategy::PERIODIC_REFRESH, scheduler_->GetStrategy()); |
-} |
- |
-TEST_F(ProximityAuthSyncSchedulerImplTest, AggressiveRecoveryFailure) { |
- scheduler_->Start(zero_elapsed_time_, Strategy::AGGRESSIVE_RECOVERY); |
- |
- timer()->Fire(); |
- sync_request_->OnDidComplete(false); |
- EXPECT_EQ(Strategy::AGGRESSIVE_RECOVERY, scheduler_->GetStrategy()); |
-} |
- |
-TEST_F(ProximityAuthSyncSchedulerImplTest, AggressiveRecoveryBackOff) { |
- scheduler_->Start(zero_elapsed_time_, Strategy::AGGRESSIVE_RECOVERY); |
- base::TimeDelta last_recovery_period = base::TimeDelta::FromSeconds(0); |
- |
- for (int i = 0; i < 20; ++i) { |
- timer()->Fire(); |
- EXPECT_EQ(SyncState::SYNC_IN_PROGRESS, scheduler_->GetSyncState()); |
- sync_request_->OnDidComplete(false); |
- EXPECT_EQ(Strategy::AGGRESSIVE_RECOVERY, scheduler_->GetStrategy()); |
- EXPECT_EQ(SyncState::WAITING_FOR_REFRESH, scheduler_->GetSyncState()); |
- |
- base::TimeDelta recovery_period = scheduler_->GetTimeToNextSync(); |
- EXPECT_LE(last_recovery_period, recovery_period); |
- last_recovery_period = recovery_period; |
- } |
- |
- // Backoffs should rapidly converge to the normal refresh period. |
- EXPECT_EQ(refresh_period_, last_recovery_period); |
-} |
- |
-TEST_F(ProximityAuthSyncSchedulerImplTest, RefreshFailureRecoverySuccess) { |
- scheduler_->Start(zero_elapsed_time_, Strategy::PERIODIC_REFRESH); |
- EXPECT_EQ(Strategy::PERIODIC_REFRESH, scheduler_->GetStrategy()); |
- |
- timer()->Fire(); |
- sync_request_->OnDidComplete(false); |
- EXPECT_EQ(Strategy::AGGRESSIVE_RECOVERY, scheduler_->GetStrategy()); |
- |
- timer()->Fire(); |
- sync_request_->OnDidComplete(true); |
- EXPECT_EQ(Strategy::PERIODIC_REFRESH, scheduler_->GetStrategy()); |
-} |
- |
-TEST_F(ProximityAuthSyncSchedulerImplTest, SyncImmediatelyForPeriodicRefresh) { |
- scheduler_->Start(base::TimeDelta::FromDays(kElapsedTimeDays), |
- Strategy::PERIODIC_REFRESH); |
- EXPECT_TRUE(scheduler_->GetTimeToNextSync().is_zero()); |
- EXPECT_TRUE(timer()->GetCurrentDelay().is_zero()); |
- timer()->Fire(); |
- EXPECT_TRUE(sync_request_); |
- |
- EXPECT_EQ(Strategy::PERIODIC_REFRESH, scheduler_->GetStrategy()); |
-} |
- |
-TEST_F(ProximityAuthSyncSchedulerImplTest, |
- SyncImmediatelyForAggressiveRecovery) { |
- scheduler_->Start(base::TimeDelta::FromDays(kElapsedTimeDays), |
- Strategy::AGGRESSIVE_RECOVERY); |
- EXPECT_TRUE(scheduler_->GetTimeToNextSync().is_zero()); |
- EXPECT_TRUE(timer()->GetCurrentDelay().is_zero()); |
- timer()->Fire(); |
- EXPECT_TRUE(sync_request_); |
- |
- EXPECT_EQ(Strategy::AGGRESSIVE_RECOVERY, scheduler_->GetStrategy()); |
-} |
- |
-TEST_F(ProximityAuthSyncSchedulerImplTest, InitialSyncShorterByElapsedTime) { |
- base::TimeDelta elapsed_time = base::TimeDelta::FromDays(2); |
- scheduler_->Start(elapsed_time, Strategy::PERIODIC_REFRESH); |
- EXPECT_EQ(refresh_period_ - elapsed_time, scheduler_->GetTimeToNextSync()); |
- timer()->Fire(); |
- EXPECT_TRUE(sync_request_); |
-} |
- |
-TEST_F(ProximityAuthSyncSchedulerImplTest, PeriodicRefreshJitter) { |
- scheduler_.reset(new TestSyncSchedulerImpl( |
- this, refresh_period_, base_recovery_period_, kMaxJitterPercentage)); |
- |
- scheduler_->Start(zero_elapsed_time_, Strategy::PERIODIC_REFRESH); |
- |
- base::TimeDelta cumulative_jitter = base::TimeDelta::FromSeconds(0); |
- for (int i = 0; i < 10; ++i) { |
- base::TimeDelta next_sync_delta = scheduler_->GetTimeToNextSync(); |
- cumulative_jitter += (next_sync_delta - refresh_period_).magnitude(); |
- EXPECT_TRUE(IsTimeDeltaWithinJitter(refresh_period_, next_sync_delta, |
- kMaxJitterPercentage)); |
- timer()->Fire(); |
- sync_request_->OnDidComplete(true); |
- } |
- |
- // The probablility that all periods are randomly equal to |refresh_period_| |
- // is so low that we would expect the heat death of the universe before this |
- // test flakes. |
- EXPECT_FALSE(cumulative_jitter.is_zero()); |
-} |
- |
-TEST_F(ProximityAuthSyncSchedulerImplTest, JitteredTimeDeltaIsNonNegative) { |
- base::TimeDelta zero_delta = base::TimeDelta::FromSeconds(0); |
- double max_jitter_ratio = 1; |
- scheduler_.reset(new TestSyncSchedulerImpl(this, zero_delta, zero_delta, |
- max_jitter_ratio)); |
- scheduler_->Start(zero_elapsed_time_, Strategy::PERIODIC_REFRESH); |
- |
- for (int i = 0; i < 10; ++i) { |
- base::TimeDelta next_sync_delta = scheduler_->GetTimeToNextSync(); |
- EXPECT_GE(zero_delta, next_sync_delta); |
- EXPECT_TRUE( |
- IsTimeDeltaWithinJitter(zero_delta, next_sync_delta, max_jitter_ratio)); |
- timer()->Fire(); |
- sync_request_->OnDidComplete(true); |
- } |
-} |
- |
-} // namespace proximity_auth |