Index: chrome/browser/policy/cloud/cloud_policy_invalidator_unittest.cc |
diff --git a/chrome/browser/policy/cloud/cloud_policy_invalidator_unittest.cc b/chrome/browser/policy/cloud/cloud_policy_invalidator_unittest.cc |
index a7da08c337f1fc7396a1a319a4d9a16573f0b53d..79eb4b78494ab759469ed0f39602b3d0e5d0f04c 100644 |
--- a/chrome/browser/policy/cloud/cloud_policy_invalidator_unittest.cc |
+++ b/chrome/browser/policy/cloud/cloud_policy_invalidator_unittest.cc |
@@ -14,6 +14,7 @@ |
#include "base/metrics/sample_map.h" |
#include "base/metrics/statistics_recorder.h" |
#include "base/run_loop.h" |
+#include "base/test/simple_test_clock.h" |
#include "base/test/test_simple_task_runner.h" |
#include "base/time/time.h" |
#include "base/values.h" |
@@ -147,6 +148,9 @@ class CloudPolicyInvalidatorTest : public testing::Test { |
base::HistogramBase::Count GetCount(MetricPolicyRefresh metric); |
base::HistogramBase::Count GetInvalidationCount(bool with_payload); |
+ // Advance the test clock. |
+ void AdvanceClock(base::TimeDelta delta); |
+ |
private: |
// Checks that the policy was refreshed due to an invalidation with the given |
// base delay. |
@@ -170,6 +174,7 @@ class CloudPolicyInvalidatorTest : public testing::Test { |
CloudPolicyCore core_; |
MockCloudPolicyClient* client_; |
scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
+ base::SimpleTestClock* clock_; |
// The invalidator which will be tested. |
scoped_ptr<CloudPolicyInvalidator> invalidator_; |
@@ -203,6 +208,7 @@ CloudPolicyInvalidatorTest::CloudPolicyInvalidatorTest() |
loop_.message_loop_proxy()), |
client_(NULL), |
task_runner_(new base::TestSimpleTaskRunner()), |
+ clock_(new base::SimpleTestClock()), |
object_id_a_(135, "asdf"), |
object_id_b_(246, "zxcv"), |
timestamp_(123456), |
@@ -225,7 +231,10 @@ void CloudPolicyInvalidatorTest::TearDown() { |
void CloudPolicyInvalidatorTest::StartInvalidator( |
bool initialize, |
bool start_refresh_scheduler) { |
- invalidator_.reset(new CloudPolicyInvalidator(&core_, task_runner_)); |
+ invalidator_.reset(new CloudPolicyInvalidator( |
+ &core_, |
+ task_runner_, |
+ scoped_ptr<base::Clock>(clock_))); |
if (start_refresh_scheduler) { |
ConnectCore(); |
StartRefreshScheduler(); |
@@ -380,6 +389,10 @@ base::HistogramBase::Count CloudPolicyInvalidatorTest::GetInvalidationCount( |
invalidations_samples_->GetCount(metric); |
} |
+void CloudPolicyInvalidatorTest::AdvanceClock(base::TimeDelta delta) { |
+ clock_->Advance(delta); |
+} |
+ |
bool CloudPolicyInvalidatorTest::CheckPolicyRefreshed(base::TimeDelta delay) { |
base::TimeDelta max_delay = delay + base::TimeDelta::FromMilliseconds( |
CloudPolicyInvalidator::kMaxFetchDelayMin); |
@@ -776,38 +789,48 @@ TEST_F(CloudPolicyInvalidatorTest, RefreshMetricsNoInvalidations) { |
// on whether the invalidation service was enabled or not. |
StorePolicy(POLICY_OBJECT_A); |
StartInvalidator(); |
+ |
+ // Initially, invalidations have not been enabled past the grace period, so |
+ // invalidations are OFF. |
StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */); |
StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */); |
- DisableInvalidationService(); |
+ EXPECT_EQ(1, GetCount(METRIC_POLICY_REFRESH_CHANGED_NO_INVALIDATIONS)); |
+ |
+ // If the clock advances less than the grace period, invalidations are OFF. |
+ AdvanceClock(base::TimeDelta::FromSeconds(1)); |
StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */); |
StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */); |
+ EXPECT_EQ(2, GetCount(METRIC_POLICY_REFRESH_CHANGED_NO_INVALIDATIONS)); |
+ |
+ // After the grace period elapses, invalidations are ON. |
+ AdvanceClock(base::TimeDelta::FromSeconds( |
+ CloudPolicyInvalidator::kInvalidationGracePeriod)); |
StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */); |
StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */); |
EXPECT_EQ(1, GetCount(METRIC_POLICY_REFRESH_CHANGED)); |
- EXPECT_EQ(2, GetCount(METRIC_POLICY_REFRESH_CHANGED_NO_INVALIDATIONS)); |
- EXPECT_EQ(3, GetCount(METRIC_POLICY_REFRESH_UNCHANGED)); |
- EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_CHANGED)); |
- EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_UNCHANGED)); |
-} |
-TEST_F(CloudPolicyInvalidatorTest, RefreshMetricsStoreSameTimestamp) { |
- // Store loads with the same timestamp as the load which causes registration |
- // are not counted. |
- StartInvalidator(); |
- StorePolicy( |
- POLICY_OBJECT_A, 0, false /* policy_changed */, 12 /* timestamp */); |
- StorePolicy( |
- POLICY_OBJECT_A, 0, false /* policy_changed */, 12 /* timestamp */); |
- StorePolicy( |
- POLICY_OBJECT_A, 0, true /* policy_changed */, 12 /* timestamp */); |
+ // After the invalidation service is disabled, invalidations are OFF. |
+ DisableInvalidationService(); |
+ StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */); |
+ StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */); |
+ EXPECT_EQ(3, GetCount(METRIC_POLICY_REFRESH_CHANGED_NO_INVALIDATIONS)); |
+ |
+ // Enabling the invalidation service results in a new grace period, so |
+ // invalidations are OFF. |
+ EnableInvalidationService(); |
+ StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */); |
+ StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */); |
+ EXPECT_EQ(4, GetCount(METRIC_POLICY_REFRESH_CHANGED_NO_INVALIDATIONS)); |
- // The next load with a different timestamp counts. |
- StorePolicy( |
- POLICY_OBJECT_A, 0, true /* policy_changed */, 13 /* timestamp */); |
+ // After the grace period elapses, invalidations are ON. |
+ AdvanceClock(base::TimeDelta::FromSeconds( |
+ CloudPolicyInvalidator::kInvalidationGracePeriod)); |
+ StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */); |
+ StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */); |
- EXPECT_EQ(1, GetCount(METRIC_POLICY_REFRESH_CHANGED)); |
- EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_CHANGED_NO_INVALIDATIONS)); |
- EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_UNCHANGED)); |
+ EXPECT_EQ(2, GetCount(METRIC_POLICY_REFRESH_CHANGED)); |
+ EXPECT_EQ(4, GetCount(METRIC_POLICY_REFRESH_CHANGED_NO_INVALIDATIONS)); |
+ EXPECT_EQ(6, GetCount(METRIC_POLICY_REFRESH_UNCHANGED)); |
EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_CHANGED)); |
EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_UNCHANGED)); |
} |
@@ -817,6 +840,8 @@ TEST_F(CloudPolicyInvalidatorTest, RefreshMetricsInvalidation) { |
// the loads do not result in the invalidation being acknowledged. |
StartInvalidator(); |
StorePolicy(POLICY_OBJECT_A); |
+ AdvanceClock(base::TimeDelta::FromSeconds( |
+ CloudPolicyInvalidator::kInvalidationGracePeriod)); |
FireInvalidation(POLICY_OBJECT_A, 5, "test"); |
StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */); |
StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */); |