Chromium Code Reviews| 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 3e37658b2c8eaf8b732973767569fe559e43d66f..34340cc31628b2700becf9e722db4bd6ef3a1df2 100644 |
| --- a/chrome/browser/policy/cloud/cloud_policy_invalidator_unittest.cc |
| +++ b/chrome/browser/policy/cloud/cloud_policy_invalidator_unittest.cc |
| @@ -53,9 +53,15 @@ class CloudPolicyInvalidatorTest : public testing::Test { |
| // Starts the invalidator which will be tested. |
| // |initialize| determines if the invalidator should be initialized. |
| // |start_refresh_scheduler| determines if the refresh scheduler should start. |
| - void StartInvalidator(bool initialize, bool start_refresh_scheduler); |
| + // |highest_handled_invalidation_version| is the highest invalidation version |
| + // that was handled already before this invalidator was created. |
| + void StartInvalidator(bool initialize, |
| + bool start_refresh_scheduler, |
| + int64 highest_handled_invalidation_version); |
| void StartInvalidator() { |
| - StartInvalidator(true /* initialize */, true /* start_refresh_scheduler */); |
| + StartInvalidator(true, /* initialize */ |
| + true, /* start_refresh_scheduler */ |
| + 0 /* highest_handled_invalidation_version */); |
| } |
| // Calls Initialize on the invalidator. |
| @@ -147,6 +153,10 @@ class CloudPolicyInvalidatorTest : public testing::Test { |
| // invalidation service. |
| bool IsInvalidatorRegistered(); |
| + // Returns the highest invalidation version that was handled already according |
| + // to the |invalidator_|. |
| + int64 GetHighestHandledInvalidationVersion() const; |
| + |
| // Advance the test clock. |
| void AdvanceClock(base::TimeDelta delta); |
| @@ -225,12 +235,14 @@ void CloudPolicyInvalidatorTest::TearDown() { |
| void CloudPolicyInvalidatorTest::StartInvalidator( |
| bool initialize, |
| - bool start_refresh_scheduler) { |
| + bool start_refresh_scheduler, |
| + int64 highest_handled_invalidation_version) { |
| invalidator_.reset(new CloudPolicyInvalidator( |
| GetPolicyType(), |
| &core_, |
| task_runner_, |
| - scoped_ptr<base::Clock>(clock_))); |
| + scoped_ptr<base::Clock>(clock_), |
| + highest_handled_invalidation_version)); |
| if (start_refresh_scheduler) { |
| ConnectCore(); |
| StartRefreshScheduler(); |
| @@ -371,6 +383,10 @@ bool CloudPolicyInvalidatorTest::IsInvalidatorRegistered() { |
| .GetRegisteredIds(invalidator_.get()).empty(); |
| } |
| +int64 CloudPolicyInvalidatorTest::GetHighestHandledInvalidationVersion() const { |
| + return invalidator_->highest_handled_invalidation_version(); |
| +} |
| + |
| void CloudPolicyInvalidatorTest::AdvanceClock(base::TimeDelta delta) { |
| clock_->Advance(delta); |
| } |
| @@ -431,33 +447,42 @@ const invalidation::ObjectId& CloudPolicyInvalidatorTest::GetPolicyObjectId( |
| TEST_F(CloudPolicyInvalidatorTest, Uninitialized) { |
| // No invalidations should be processed if the invalidator is not initialized. |
| - StartInvalidator(false /* initialize */, true /* start_refresh_scheduler */); |
| + StartInvalidator(false, /* initialize */ |
| + true, /* start_refresh_scheduler */ |
| + 0 /*highest_handled_invalidation_version*/); |
|
Joao da Silva
2014/08/13 13:01:38
nit: space after /* and before */ (same below)
bartfab (slow)
2014/08/13 13:37:47
Done.
|
| StorePolicy(POLICY_OBJECT_A); |
| EXPECT_FALSE(IsInvalidatorRegistered()); |
| EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_A))); |
| EXPECT_TRUE(CheckPolicyNotRefreshed()); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| } |
| TEST_F(CloudPolicyInvalidatorTest, RefreshSchedulerNotStarted) { |
| // No invalidations should be processed if the refresh scheduler is not |
| // started. |
| - StartInvalidator(true /* initialize */, false /* start_refresh_scheduler */); |
| + StartInvalidator(true, /* initialize */ |
| + false, /* start_refresh_scheduler */ |
| + 0 /*highest_handled_invalidation_version*/); |
| StorePolicy(POLICY_OBJECT_A); |
| EXPECT_FALSE(IsInvalidatorRegistered()); |
| EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_A))); |
| EXPECT_TRUE(CheckPolicyNotRefreshed()); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| } |
| TEST_F(CloudPolicyInvalidatorTest, DisconnectCoreThenInitialize) { |
| // No invalidations should be processed if the core is disconnected before |
| // initialization. |
| - StartInvalidator(false /* initialize */, true /* start_refresh_scheduler */); |
| + StartInvalidator(false, /* initialize */ |
| + true, /* start_refresh_scheduler */ |
| + 0 /*highest_handled_invalidation_version*/); |
| DisconnectCore(); |
| InitializeInvalidator(); |
| StorePolicy(POLICY_OBJECT_A); |
| EXPECT_FALSE(IsInvalidatorRegistered()); |
| EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_A))); |
| EXPECT_TRUE(CheckPolicyNotRefreshed()); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| } |
| TEST_F(CloudPolicyInvalidatorTest, InitializeThenStartRefreshScheduler) { |
| @@ -466,13 +491,16 @@ TEST_F(CloudPolicyInvalidatorTest, InitializeThenStartRefreshScheduler) { |
| // Note that the reverse case (start refresh scheduler then initialize) is |
| // the default behavior for the test fixture, so will be tested in most other |
| // tests. |
| - StartInvalidator(true /* initialize */, false /* start_refresh_scheduler */); |
| + StartInvalidator(true, /* initialize */ |
| + false, /* start_refresh_scheduler */ |
| + 0 /*highest_handled_invalidation_version*/); |
| ConnectCore(); |
| StartRefreshScheduler(); |
| StorePolicy(POLICY_OBJECT_A); |
| EXPECT_TRUE(IsInvalidatorRegistered()); |
| FireUnknownVersionInvalidation(POLICY_OBJECT_A); |
| EXPECT_TRUE(CheckPolicyRefreshedWithUnknownVersion()); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| } |
| TEST_F(CloudPolicyInvalidatorTest, RegisterOnStoreLoaded) { |
| @@ -500,6 +528,7 @@ TEST_F(CloudPolicyInvalidatorTest, RegisterOnStoreLoaded) { |
| EXPECT_TRUE(CheckPolicyRefreshedWithUnknownVersion()); |
| EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_B))); |
| EXPECT_TRUE(CheckPolicyNotRefreshed()); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| } |
| TEST_F(CloudPolicyInvalidatorTest, ChangeRegistration) { |
| @@ -528,6 +557,7 @@ TEST_F(CloudPolicyInvalidatorTest, ChangeRegistration) { |
| EXPECT_TRUE(CheckPolicyNotRefreshed()); |
| FireUnknownVersionInvalidation(POLICY_OBJECT_B); |
| EXPECT_TRUE(CheckPolicyRefreshedWithUnknownVersion()); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| } |
| TEST_F(CloudPolicyInvalidatorTest, UnregisterOnStoreLoaded) { |
| @@ -556,6 +586,7 @@ TEST_F(CloudPolicyInvalidatorTest, UnregisterOnStoreLoaded) { |
| EXPECT_TRUE(InvalidationsEnabled()); |
| FireUnknownVersionInvalidation(POLICY_OBJECT_B); |
| EXPECT_TRUE(CheckPolicyRefreshedWithUnknownVersion()); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| } |
| TEST_F(CloudPolicyInvalidatorTest, HandleInvalidation) { |
| @@ -572,10 +603,12 @@ TEST_F(CloudPolicyInvalidatorTest, HandleInvalidation) { |
| // Make sure invalidation is not acknowledged until the store is loaded. |
| EXPECT_FALSE(IsInvalidationAcknowledged(inv)); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| EXPECT_TRUE(CheckInvalidationInfo(V(12), "test_payload")); |
| StorePolicy(POLICY_OBJECT_A, V(12)); |
| EXPECT_TRUE(IsInvalidationAcknowledged(inv)); |
| EXPECT_TRUE(CheckInvalidationInfo(0, std::string())); |
| + EXPECT_EQ(V(12), GetHighestHandledInvalidationVersion()); |
| } |
| TEST_F(CloudPolicyInvalidatorTest, HandleInvalidationWithUnknownVersion) { |
| @@ -595,6 +628,7 @@ TEST_F(CloudPolicyInvalidatorTest, HandleInvalidationWithUnknownVersion) { |
| StorePolicy(POLICY_OBJECT_A, -1); |
| EXPECT_TRUE(IsInvalidationAcknowledged(inv)); |
| EXPECT_TRUE(CheckInvalidationInfo(0, std::string())); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| } |
| TEST_F(CloudPolicyInvalidatorTest, HandleMultipleInvalidations) { |
| @@ -617,12 +651,16 @@ TEST_F(CloudPolicyInvalidatorTest, HandleMultipleInvalidations) { |
| // Make sure that the last invalidation is only acknowledged after the store |
| // is loaded with the latest version. |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| StorePolicy(POLICY_OBJECT_A, V(1)); |
| EXPECT_FALSE(IsInvalidationAcknowledged(inv3)); |
| + EXPECT_EQ(V(1), GetHighestHandledInvalidationVersion()); |
| StorePolicy(POLICY_OBJECT_A, V(2)); |
| EXPECT_FALSE(IsInvalidationAcknowledged(inv3)); |
| + EXPECT_EQ(V(2), GetHighestHandledInvalidationVersion()); |
| StorePolicy(POLICY_OBJECT_A, V(3)); |
| EXPECT_TRUE(IsInvalidationAcknowledged(inv3)); |
| + EXPECT_EQ(V(3), GetHighestHandledInvalidationVersion()); |
| } |
| TEST_F(CloudPolicyInvalidatorTest, |
| @@ -656,6 +694,48 @@ TEST_F(CloudPolicyInvalidatorTest, |
| EXPECT_FALSE(IsInvalidationAcknowledged(inv3)); |
| StorePolicy(POLICY_OBJECT_A, -3); |
| EXPECT_TRUE(IsInvalidationAcknowledged(inv3)); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| +} |
| + |
| +TEST_F(CloudPolicyInvalidatorTest, |
| + InitialHighestHandledInvalidationVersionNonZero) { |
| + StorePolicy(POLICY_OBJECT_A); |
| + StartInvalidator(true, /* initialize */ |
| + true, /* start_refresh_scheduler */ |
| + V(2) /* highest_handled_invalidation_version*/); |
| + |
| + // Check that an invalidation whose version is lower than the highest handled |
| + // so far is acknowledged but ignored otherwise. |
| + syncer::Invalidation inv1 = FireInvalidation(POLICY_OBJECT_A, V(1), "test1"); |
| + EXPECT_TRUE(CheckPolicyNotRefreshed()); |
| + EXPECT_TRUE(CheckInvalidationInfo(0, std::string())); |
| + EXPECT_TRUE(IsInvalidationAcknowledged(inv1)); |
| + EXPECT_EQ(V(2), GetHighestHandledInvalidationVersion()); |
| + |
| + // Check that an invalidation with an unknown version is handled. |
| + syncer::Invalidation inv = FireUnknownVersionInvalidation(POLICY_OBJECT_A); |
| + EXPECT_TRUE(CheckPolicyRefreshedWithUnknownVersion()); |
| + EXPECT_TRUE(CheckInvalidationInfo(-1, std::string())); |
| + StorePolicy(POLICY_OBJECT_A, -1); |
| + EXPECT_TRUE(IsInvalidationAcknowledged(inv)); |
| + EXPECT_EQ(V(2), GetHighestHandledInvalidationVersion()); |
| + |
| + // Check that an invalidation whose version matches the highest handled so far |
| + // is acknowledged but ignored otherwise. |
| + syncer::Invalidation inv2 = FireInvalidation(POLICY_OBJECT_A, V(2), "test2"); |
| + EXPECT_TRUE(CheckPolicyNotRefreshed()); |
| + EXPECT_TRUE(CheckInvalidationInfo(0, std::string())); |
| + EXPECT_TRUE(IsInvalidationAcknowledged(inv2)); |
| + EXPECT_EQ(V(2), GetHighestHandledInvalidationVersion()); |
| + |
| + // Check that an invalidation whose version is higher than the highest handled |
| + // so far is handled, causing a policy refresh. |
| + syncer::Invalidation inv3 = FireInvalidation(POLICY_OBJECT_A, V(3), "test3"); |
| + EXPECT_TRUE(CheckPolicyRefreshed()); |
| + EXPECT_TRUE(CheckInvalidationInfo(V(3), "test3")); |
| + StorePolicy(POLICY_OBJECT_A, V(3)); |
| + EXPECT_TRUE(IsInvalidationAcknowledged(inv3)); |
| + EXPECT_EQ(V(3), GetHighestHandledInvalidationVersion()); |
| } |
| TEST_F(CloudPolicyInvalidatorTest, AcknowledgeBeforeRefresh) { |
| @@ -667,9 +747,11 @@ TEST_F(CloudPolicyInvalidatorTest, AcknowledgeBeforeRefresh) { |
| // Ensure that the policy is not refreshed and the invalidation is |
| // acknowledged if the store is loaded with the latest version before the |
| // refresh can occur. |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| StorePolicy(POLICY_OBJECT_A, V(3)); |
| EXPECT_TRUE(IsInvalidationAcknowledged(inv)); |
| EXPECT_TRUE(CheckPolicyNotRefreshed()); |
| + EXPECT_EQ(V(3), GetHighestHandledInvalidationVersion()); |
| } |
| TEST_F(CloudPolicyInvalidatorTest, NoCallbackAfterShutdown) { |
| @@ -682,6 +764,7 @@ TEST_F(CloudPolicyInvalidatorTest, NoCallbackAfterShutdown) { |
| // down. |
| ShutdownInvalidator(); |
| EXPECT_TRUE(CheckPolicyNotRefreshed()); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| DestroyInvalidator(); |
| } |
| @@ -720,6 +803,7 @@ TEST_F(CloudPolicyInvalidatorTest, StateChanged) { |
| StorePolicy(POLICY_OBJECT_NONE); |
| StorePolicy(POLICY_OBJECT_A); |
| EXPECT_FALSE(InvalidationsEnabled()); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| } |
| TEST_F(CloudPolicyInvalidatorTest, Disconnect) { |
| @@ -759,6 +843,7 @@ TEST_F(CloudPolicyInvalidatorTest, Disconnect) { |
| EXPECT_TRUE(CheckPolicyRefreshed()); |
| DisableInvalidationService(); |
| EXPECT_FALSE(InvalidationsEnabled()); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| } |
| class CloudPolicyInvalidatorUserTypedTest |
| @@ -850,6 +935,7 @@ TEST_P(CloudPolicyInvalidatorUserTypedTest, RefreshMetricsUnregistered) { |
| EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_UNCHANGED)); |
| EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_CHANGED)); |
| EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_UNCHANGED)); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| } |
| TEST_P(CloudPolicyInvalidatorUserTypedTest, RefreshMetricsNoInvalidations) { |
| @@ -901,6 +987,7 @@ TEST_P(CloudPolicyInvalidatorUserTypedTest, RefreshMetricsNoInvalidations) { |
| 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)); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| } |
| TEST_P(CloudPolicyInvalidatorUserTypedTest, RefreshMetricsInvalidation) { |
| @@ -913,7 +1000,9 @@ TEST_P(CloudPolicyInvalidatorUserTypedTest, RefreshMetricsInvalidation) { |
| FireInvalidation(POLICY_OBJECT_A, V(5), "test"); |
| StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */); |
| StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| StorePolicy(POLICY_OBJECT_A, V(5), true /* policy_changed */); |
| + EXPECT_EQ(V(5), GetHighestHandledInvalidationVersion()); |
| // Store loads after the invalidation is complete are not counted as |
| // invalidated. |
| @@ -930,6 +1019,7 @@ TEST_P(CloudPolicyInvalidatorUserTypedTest, RefreshMetricsInvalidation) { |
| EXPECT_EQ(4, GetCount(METRIC_POLICY_REFRESH_UNCHANGED)); |
| EXPECT_EQ(2, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_CHANGED)); |
| EXPECT_EQ(1, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_UNCHANGED)); |
| + EXPECT_EQ(V(5), GetHighestHandledInvalidationVersion()); |
| } |
| TEST_P(CloudPolicyInvalidatorUserTypedTest, ExpiredInvalidations) { |
| @@ -991,6 +1081,7 @@ TEST_P(CloudPolicyInvalidatorUserTypedTest, ExpiredInvalidations) { |
| EXPECT_EQ(2, |
| GetInvalidationCount(POLICY_INVALIDATION_TYPE_NO_PAYLOAD_EXPIRED)); |
| EXPECT_EQ(2, GetInvalidationCount(POLICY_INVALIDATION_TYPE_EXPIRED)); |
| + EXPECT_EQ(0, GetHighestHandledInvalidationVersion()); |
| } |
| #if defined(OS_CHROMEOS) |