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

Unified Diff: chrome/browser/policy/cloud/cloud_policy_invalidator_unittest.cc

Issue 56113003: Implement new invalidations ack tracking system (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Modify drive TODO comment + rebase Created 7 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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 662d84729db2fc491d00752d5735cafafe225494..adccdb1dfc22b1a9d89fdf8e3d049af644ab3802 100644
--- a/chrome/browser/policy/cloud/cloud_policy_invalidator_unittest.cc
+++ b/chrome/browser/policy/cloud/cloud_policy_invalidator_unittest.cc
@@ -107,17 +107,15 @@ class CloudPolicyInvalidatorTest : public testing::Test {
// Enables the invalidation service. It is enabled by default.
void EnableInvalidationService();
- // Causes the invalidation service to fire an invalidation. Returns an ack
- // handle which be used to verify that the invalidation was acknowledged.
- syncer::AckHandle FireInvalidation(
+ // Causes the invalidation service to fire an invalidation.
+ syncer::Invalidation FireInvalidation(
PolicyObject object,
int64 version,
const std::string& payload);
// Causes the invalidation service to fire an invalidation with unknown
- // version. Returns an ack handle which be used to verify that the
- // invalidation was acknowledged.
- syncer::AckHandle FireUnknownVersionInvalidation(PolicyObject object);
+ // version.
+ syncer::Invalidation FireUnknownVersionInvalidation(PolicyObject object);
// Checks the expected value of the currently set invalidation info.
bool CheckInvalidationInfo(int64 version, const std::string& payload);
@@ -131,13 +129,15 @@ class CloudPolicyInvalidatorTest : public testing::Test {
bool CheckPolicyRefreshed();
bool CheckPolicyRefreshedWithUnknownVersion();
+ bool IsUnsent(const syncer::Invalidation& invalidation);
+
// Returns the invalidations enabled state set by the invalidator on the
// refresh scheduler.
bool InvalidationsEnabled();
// Determines if the invalidation with the given ack handle has been
// acknowledged.
- bool IsInvalidationAcknowledged(const syncer::AckHandle& ack_handle);
+ bool IsInvalidationAcknowledged(const syncer::Invalidation& invalidation);
// Determines if the invalidator has registered for an object with the
// invalidation service.
@@ -217,7 +217,6 @@ void CloudPolicyInvalidatorTest::SetUp() {
}
void CloudPolicyInvalidatorTest::TearDown() {
- EXPECT_FALSE(invalidation_service_.ReceivedInvalidAcknowledgement());
if (invalidator_)
invalidator_->Shutdown();
core_.Disconnect();
@@ -301,7 +300,7 @@ void CloudPolicyInvalidatorTest::EnableInvalidationService() {
invalidation_service_.SetInvalidatorState(syncer::INVALIDATIONS_ENABLED);
}
-syncer::AckHandle CloudPolicyInvalidatorTest::FireInvalidation(
+syncer::Invalidation CloudPolicyInvalidatorTest::FireInvalidation(
PolicyObject object,
int64 version,
const std::string& payload) {
@@ -310,15 +309,15 @@ syncer::AckHandle CloudPolicyInvalidatorTest::FireInvalidation(
version,
payload);
invalidation_service_.EmitInvalidationForTest(invalidation);
- return invalidation.ack_handle();
+ return invalidation;
}
-syncer::AckHandle CloudPolicyInvalidatorTest::FireUnknownVersionInvalidation(
+syncer::Invalidation CloudPolicyInvalidatorTest::FireUnknownVersionInvalidation(
PolicyObject object) {
- syncer::Invalidation invalidation =
- syncer::Invalidation::InitUnknownVersion(GetPolicyObjectId(object));
+ syncer::Invalidation invalidation = syncer::Invalidation::InitUnknownVersion(
+ GetPolicyObjectId(object));
invalidation_service_.EmitInvalidationForTest(invalidation);
- return invalidation.ack_handle();
+ return invalidation;
}
bool CloudPolicyInvalidatorTest::CheckInvalidationInfo(
@@ -338,6 +337,11 @@ bool CloudPolicyInvalidatorTest::CheckPolicyRefreshed() {
return CheckPolicyRefreshed(base::TimeDelta());
}
+bool CloudPolicyInvalidatorTest::IsUnsent(
+ const syncer::Invalidation& invalidation) {
+ return invalidation_service_.GetMockAckHandler()->IsUnsent(invalidation);
+}
+
bool CloudPolicyInvalidatorTest::CheckPolicyRefreshedWithUnknownVersion() {
return CheckPolicyRefreshed(base::TimeDelta::FromMinutes(
CloudPolicyInvalidator::kMissingPayloadDelay));
@@ -348,8 +352,14 @@ bool CloudPolicyInvalidatorTest::InvalidationsEnabled() {
}
bool CloudPolicyInvalidatorTest::IsInvalidationAcknowledged(
- const syncer::AckHandle& ack_handle) {
- return invalidation_service_.IsInvalidationAcknowledged(ack_handle);
+ const syncer::Invalidation& invalidation) {
+ // The acknowledgement task is run through a WeakHandle that posts back to our
+ // own thread. We need to run any posted tasks before we can check
+ // acknowledgement status.
+ loop_.RunUntilIdle();
+
+ EXPECT_FALSE(IsUnsent(invalidation));
+ return !invalidation_service_.GetMockAckHandler()->IsUnacked(invalidation);
}
bool CloudPolicyInvalidatorTest::IsInvalidatorRegistered() {
@@ -422,7 +432,7 @@ TEST_F(CloudPolicyInvalidatorTest, Uninitialized) {
StartInvalidator(false /* initialize */, true /* start_refresh_scheduler */);
StorePolicy(POLICY_OBJECT_A);
EXPECT_FALSE(IsInvalidatorRegistered());
- FireUnknownVersionInvalidation(POLICY_OBJECT_A);
+ EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_A)));
EXPECT_TRUE(CheckPolicyNotRefreshed());
}
@@ -432,7 +442,7 @@ TEST_F(CloudPolicyInvalidatorTest, RefreshSchedulerNotStarted) {
StartInvalidator(true /* initialize */, false /* start_refresh_scheduler */);
StorePolicy(POLICY_OBJECT_A);
EXPECT_FALSE(IsInvalidatorRegistered());
- FireUnknownVersionInvalidation(POLICY_OBJECT_A);
+ EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_A)));
EXPECT_TRUE(CheckPolicyNotRefreshed());
}
@@ -444,7 +454,7 @@ TEST_F(CloudPolicyInvalidatorTest, DisconnectCoreThenInitialize) {
InitializeInvalidator();
StorePolicy(POLICY_OBJECT_A);
EXPECT_FALSE(IsInvalidatorRegistered());
- FireUnknownVersionInvalidation(POLICY_OBJECT_A);
+ EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_A)));
EXPECT_TRUE(CheckPolicyNotRefreshed());
}
@@ -468,16 +478,16 @@ TEST_F(CloudPolicyInvalidatorTest, RegisterOnStoreLoaded) {
StartInvalidator();
EXPECT_FALSE(IsInvalidatorRegistered());
EXPECT_FALSE(InvalidationsEnabled());
- FireUnknownVersionInvalidation(POLICY_OBJECT_A);
- FireUnknownVersionInvalidation(POLICY_OBJECT_B);
+ EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_A)));
+ EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_B)));
EXPECT_TRUE(CheckPolicyNotRefreshed());
// No registration when store is loaded with no invalidation object id.
StorePolicy(POLICY_OBJECT_NONE);
EXPECT_FALSE(IsInvalidatorRegistered());
EXPECT_FALSE(InvalidationsEnabled());
- FireUnknownVersionInvalidation(POLICY_OBJECT_A);
- FireUnknownVersionInvalidation(POLICY_OBJECT_B);
+ EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_A)));
+ EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_B)));
EXPECT_TRUE(CheckPolicyNotRefreshed());
// Check registration when store is loaded for object A.
@@ -486,7 +496,7 @@ TEST_F(CloudPolicyInvalidatorTest, RegisterOnStoreLoaded) {
EXPECT_TRUE(InvalidationsEnabled());
FireUnknownVersionInvalidation(POLICY_OBJECT_A);
EXPECT_TRUE(CheckPolicyRefreshedWithUnknownVersion());
- FireUnknownVersionInvalidation(POLICY_OBJECT_B);
+ EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_B)));
EXPECT_TRUE(CheckPolicyNotRefreshed());
}
@@ -498,21 +508,21 @@ TEST_F(CloudPolicyInvalidatorTest, ChangeRegistration) {
EXPECT_TRUE(InvalidationsEnabled());
FireUnknownVersionInvalidation(POLICY_OBJECT_A);
EXPECT_TRUE(CheckPolicyRefreshedWithUnknownVersion());
- FireUnknownVersionInvalidation(POLICY_OBJECT_B);
+ EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_B)));
EXPECT_TRUE(CheckPolicyNotRefreshed());
- syncer::AckHandle ack = FireUnknownVersionInvalidation(POLICY_OBJECT_A);
+ syncer::Invalidation inv = FireUnknownVersionInvalidation(POLICY_OBJECT_A);
// Check re-registration for object B. Make sure the pending invalidation for
// object A is acknowledged without making the callback.
StorePolicy(POLICY_OBJECT_B);
EXPECT_TRUE(IsInvalidatorRegistered());
EXPECT_TRUE(InvalidationsEnabled());
- EXPECT_TRUE(IsInvalidationAcknowledged(ack));
+ EXPECT_TRUE(IsInvalidationAcknowledged(inv));
EXPECT_TRUE(CheckPolicyNotRefreshed());
// Make sure future invalidations for object A are ignored and for object B
// are processed.
- FireUnknownVersionInvalidation(POLICY_OBJECT_A);
+ EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_A)));
EXPECT_TRUE(CheckPolicyNotRefreshed());
FireUnknownVersionInvalidation(POLICY_OBJECT_B);
EXPECT_TRUE(CheckPolicyRefreshedWithUnknownVersion());
@@ -528,14 +538,14 @@ TEST_F(CloudPolicyInvalidatorTest, UnregisterOnStoreLoaded) {
EXPECT_TRUE(CheckPolicyRefreshedWithUnknownVersion());
// Check unregistration when store is loaded with no invalidation object id.
- syncer::AckHandle ack = FireUnknownVersionInvalidation(POLICY_OBJECT_A);
- EXPECT_FALSE(IsInvalidationAcknowledged(ack));
+ syncer::Invalidation inv = FireUnknownVersionInvalidation(POLICY_OBJECT_A);
+ EXPECT_FALSE(IsInvalidationAcknowledged(inv));
StorePolicy(POLICY_OBJECT_NONE);
EXPECT_FALSE(IsInvalidatorRegistered());
- EXPECT_TRUE(IsInvalidationAcknowledged(ack));
+ EXPECT_TRUE(IsInvalidationAcknowledged(inv));
EXPECT_FALSE(InvalidationsEnabled());
- FireUnknownVersionInvalidation(POLICY_OBJECT_A);
- FireUnknownVersionInvalidation(POLICY_OBJECT_B);
+ EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_A)));
+ EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_B)));
EXPECT_TRUE(CheckPolicyNotRefreshed());
// Check re-registration for object B.
@@ -551,17 +561,18 @@ TEST_F(CloudPolicyInvalidatorTest, HandleInvalidation) {
StorePolicy(POLICY_OBJECT_A);
StartInvalidator();
EXPECT_TRUE(InvalidationsEnabled());
- syncer::AckHandle ack = FireInvalidation(POLICY_OBJECT_A, 12, "test_payload");
+ syncer::Invalidation inv =
+ FireInvalidation(POLICY_OBJECT_A, 12, "test_payload");
// Make sure client info is set as soon as the invalidation is received.
EXPECT_TRUE(CheckInvalidationInfo(12, "test_payload"));
EXPECT_TRUE(CheckPolicyRefreshed());
// Make sure invalidation is not acknowledged until the store is loaded.
- EXPECT_FALSE(IsInvalidationAcknowledged(ack));
+ EXPECT_FALSE(IsInvalidationAcknowledged(inv));
EXPECT_TRUE(CheckInvalidationInfo(12, "test_payload"));
StorePolicy(POLICY_OBJECT_A, 12);
- EXPECT_TRUE(IsInvalidationAcknowledged(ack));
+ EXPECT_TRUE(IsInvalidationAcknowledged(inv));
EXPECT_TRUE(CheckInvalidationInfo(0, std::string()));
}
@@ -569,7 +580,7 @@ TEST_F(CloudPolicyInvalidatorTest, HandleInvalidationWithUnknownVersion) {
// Register and fire invalidation with unknown version.
StorePolicy(POLICY_OBJECT_A);
StartInvalidator();
- syncer::AckHandle ack = FireUnknownVersionInvalidation(POLICY_OBJECT_A);
+ syncer::Invalidation inv = FireUnknownVersionInvalidation(POLICY_OBJECT_A);
// Make sure client info is not set until after the invalidation callback is
// made.
@@ -578,9 +589,9 @@ TEST_F(CloudPolicyInvalidatorTest, HandleInvalidationWithUnknownVersion) {
EXPECT_TRUE(CheckInvalidationInfo(-1, std::string()));
// Make sure invalidation is not acknowledged until the store is loaded.
- EXPECT_FALSE(IsInvalidationAcknowledged(ack));
+ EXPECT_FALSE(IsInvalidationAcknowledged(inv));
StorePolicy(POLICY_OBJECT_A, -1);
- EXPECT_TRUE(IsInvalidationAcknowledged(ack));
+ EXPECT_TRUE(IsInvalidationAcknowledged(inv));
EXPECT_TRUE(CheckInvalidationInfo(0, std::string()));
}
@@ -588,16 +599,16 @@ TEST_F(CloudPolicyInvalidatorTest, HandleMultipleInvalidations) {
// Generate multiple invalidations.
StorePolicy(POLICY_OBJECT_A);
StartInvalidator();
- syncer::AckHandle ack1 = FireInvalidation(POLICY_OBJECT_A, 1, "test1");
+ syncer::Invalidation inv1 = FireInvalidation(POLICY_OBJECT_A, 1, "test1");
EXPECT_TRUE(CheckInvalidationInfo(1, "test1"));
- syncer::AckHandle ack2 = FireInvalidation(POLICY_OBJECT_A, 2, "test2");
+ syncer::Invalidation inv2 = FireInvalidation(POLICY_OBJECT_A, 2, "test2");
EXPECT_TRUE(CheckInvalidationInfo(2, "test2"));
- syncer::AckHandle ack3= FireInvalidation(POLICY_OBJECT_A, 3, "test3");
+ syncer::Invalidation inv3 = FireInvalidation(POLICY_OBJECT_A, 3, "test3");
EXPECT_TRUE(CheckInvalidationInfo(3, "test3"));
// Make sure the replaced invalidations are acknowledged.
- EXPECT_TRUE(IsInvalidationAcknowledged(ack1));
- EXPECT_TRUE(IsInvalidationAcknowledged(ack2));
+ EXPECT_TRUE(IsInvalidationAcknowledged(inv1));
+ EXPECT_TRUE(IsInvalidationAcknowledged(inv2));
// Make sure the policy is refreshed once.
EXPECT_TRUE(CheckPolicyRefreshed());
@@ -605,11 +616,11 @@ TEST_F(CloudPolicyInvalidatorTest, HandleMultipleInvalidations) {
// Make sure that the last invalidation is only acknowledged after the store
// is loaded with the latest version.
StorePolicy(POLICY_OBJECT_A, 1);
- EXPECT_FALSE(IsInvalidationAcknowledged(ack3));
+ EXPECT_FALSE(IsInvalidationAcknowledged(inv3));
StorePolicy(POLICY_OBJECT_A, 2);
- EXPECT_FALSE(IsInvalidationAcknowledged(ack3));
+ EXPECT_FALSE(IsInvalidationAcknowledged(inv3));
StorePolicy(POLICY_OBJECT_A, 3);
- EXPECT_TRUE(IsInvalidationAcknowledged(ack3));
+ EXPECT_TRUE(IsInvalidationAcknowledged(inv3));
}
TEST_F(CloudPolicyInvalidatorTest,
@@ -618,44 +629,44 @@ TEST_F(CloudPolicyInvalidatorTest,
// unique invalidation version numbers.
StorePolicy(POLICY_OBJECT_A);
StartInvalidator();
- syncer::AckHandle ack1 = FireUnknownVersionInvalidation(POLICY_OBJECT_A);
+ syncer::Invalidation inv1 = FireUnknownVersionInvalidation(POLICY_OBJECT_A);
EXPECT_TRUE(CheckInvalidationInfo(0, std::string()));
EXPECT_TRUE(CheckPolicyRefreshedWithUnknownVersion());
EXPECT_TRUE(CheckInvalidationInfo(-1, std::string()));
- syncer::AckHandle ack2 = FireUnknownVersionInvalidation(POLICY_OBJECT_A);
+ syncer::Invalidation inv2 = FireUnknownVersionInvalidation(POLICY_OBJECT_A);
EXPECT_TRUE(CheckInvalidationInfo(0, std::string()));
EXPECT_TRUE(CheckPolicyRefreshedWithUnknownVersion());
EXPECT_TRUE(CheckInvalidationInfo(-2, std::string()));
- syncer::AckHandle ack3 = FireUnknownVersionInvalidation(POLICY_OBJECT_A);
+ syncer::Invalidation inv3 = FireUnknownVersionInvalidation(POLICY_OBJECT_A);
EXPECT_TRUE(CheckInvalidationInfo(0, std::string()));
EXPECT_TRUE(CheckPolicyRefreshedWithUnknownVersion());
EXPECT_TRUE(CheckInvalidationInfo(-3, std::string()));
// Make sure the replaced invalidations are acknowledged.
- EXPECT_TRUE(IsInvalidationAcknowledged(ack1));
- EXPECT_TRUE(IsInvalidationAcknowledged(ack2));
+ EXPECT_TRUE(IsInvalidationAcknowledged(inv1));
+ EXPECT_TRUE(IsInvalidationAcknowledged(inv2));
// Make sure that the last invalidation is only acknowledged after the store
// is loaded with the last unknown version.
StorePolicy(POLICY_OBJECT_A, -1);
- EXPECT_FALSE(IsInvalidationAcknowledged(ack3));
+ EXPECT_FALSE(IsInvalidationAcknowledged(inv3));
StorePolicy(POLICY_OBJECT_A, -2);
- EXPECT_FALSE(IsInvalidationAcknowledged(ack3));
+ EXPECT_FALSE(IsInvalidationAcknowledged(inv3));
StorePolicy(POLICY_OBJECT_A, -3);
- EXPECT_TRUE(IsInvalidationAcknowledged(ack3));
+ EXPECT_TRUE(IsInvalidationAcknowledged(inv3));
}
TEST_F(CloudPolicyInvalidatorTest, AcknowledgeBeforeRefresh) {
// Generate an invalidation.
StorePolicy(POLICY_OBJECT_A);
StartInvalidator();
- syncer::AckHandle ack = FireInvalidation(POLICY_OBJECT_A, 3, "test");
+ syncer::Invalidation inv = FireInvalidation(POLICY_OBJECT_A, 3, "test");
// 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.
StorePolicy(POLICY_OBJECT_A, 3);
- EXPECT_TRUE(IsInvalidationAcknowledged(ack));
+ EXPECT_TRUE(IsInvalidationAcknowledged(inv));
EXPECT_TRUE(CheckPolicyNotRefreshed());
}
@@ -663,7 +674,7 @@ TEST_F(CloudPolicyInvalidatorTest, NoCallbackAfterShutdown) {
// Generate an invalidation.
StorePolicy(POLICY_OBJECT_A);
StartInvalidator();
- syncer::AckHandle ack = FireInvalidation(POLICY_OBJECT_A, 3, "test");
+ syncer::Invalidation inv = FireInvalidation(POLICY_OBJECT_A, 3, "test");
// Ensure that the policy refresh is not made after the invalidator is shut
// down.
@@ -713,7 +724,7 @@ TEST_F(CloudPolicyInvalidatorTest, Disconnect) {
// Generate an invalidation.
StorePolicy(POLICY_OBJECT_A);
StartInvalidator();
- syncer::AckHandle ack = FireInvalidation(POLICY_OBJECT_A, 1, "test");
+ syncer::Invalidation inv = FireInvalidation(POLICY_OBJECT_A, 1, "test");
EXPECT_TRUE(InvalidationsEnabled());
// Ensure that the policy is not refreshed after disconnecting the core, but
@@ -723,17 +734,17 @@ TEST_F(CloudPolicyInvalidatorTest, Disconnect) {
// Ensure that invalidation service events do not cause refreshes while the
// invalidator is stopped.
- FireInvalidation(POLICY_OBJECT_A, 2, "test");
+ EXPECT_TRUE(IsUnsent(FireInvalidation(POLICY_OBJECT_A, 2, "test")));
EXPECT_TRUE(CheckPolicyNotRefreshed());
DisableInvalidationService();
EnableInvalidationService();
// Connect and disconnect without starting the refresh scheduler.
ConnectCore();
- FireInvalidation(POLICY_OBJECT_A, 3, "test");
+ EXPECT_TRUE(IsUnsent(FireInvalidation(POLICY_OBJECT_A, 3, "test")));
EXPECT_TRUE(CheckPolicyNotRefreshed());
DisconnectCore();
- FireInvalidation(POLICY_OBJECT_A, 4, "test");
+ EXPECT_TRUE(IsUnsent(FireInvalidation(POLICY_OBJECT_A, 4, "test")));
EXPECT_TRUE(CheckPolicyNotRefreshed());
// Ensure that the invalidator returns to normal after reconnecting.
@@ -832,9 +843,9 @@ TEST_F(CloudPolicyInvalidatorTest, InvalidationMetrics) {
// Generate a mix of versioned and unknown-version invalidations.
StorePolicy(POLICY_OBJECT_A);
StartInvalidator();
- FireUnknownVersionInvalidation(POLICY_OBJECT_B);
+ EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_B)));
FireUnknownVersionInvalidation(POLICY_OBJECT_A);
- FireInvalidation(POLICY_OBJECT_B, 1, "test");
+ EXPECT_TRUE(IsUnsent(FireInvalidation(POLICY_OBJECT_B, 1, "test")));
FireInvalidation(POLICY_OBJECT_A, 1, "test");
FireInvalidation(POLICY_OBJECT_A, 2, "test");
FireUnknownVersionInvalidation(POLICY_OBJECT_A);
« no previous file with comments | « chrome/browser/policy/cloud/cloud_policy_invalidator.cc ('k') | chrome/browser/sync/glue/sync_backend_host_core.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698