Chromium Code Reviews| Index: chrome/browser/policy/cloud/cloud_policy_manager_unittest.cc |
| diff --git a/chrome/browser/policy/cloud/cloud_policy_manager_unittest.cc b/chrome/browser/policy/cloud/cloud_policy_manager_unittest.cc |
| index cbcb4d418e7ba566cbfb080405c2ddbdde9d8349..98a4213bf6240e6ac6b93e29f0614ff719889bcd 100644 |
| --- a/chrome/browser/policy/cloud/cloud_policy_manager_unittest.cc |
| +++ b/chrome/browser/policy/cloud/cloud_policy_manager_unittest.cc |
| @@ -5,17 +5,22 @@ |
| #include "chrome/browser/policy/cloud/cloud_policy_manager.h" |
| #include "base/basictypes.h" |
| +#include "base/bind.h" |
| #include "base/callback.h" |
| #include "base/compiler_specific.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/message_loop/message_loop.h" |
| +#include "base/test/test_simple_task_runner.h" |
| +#include "chrome/browser/invalidation/fake_invalidation_service.h" |
| #include "chrome/browser/policy/cloud/cloud_policy_constants.h" |
| +#include "chrome/browser/policy/cloud/cloud_policy_invalidator.h" |
| #include "chrome/browser/policy/cloud/mock_cloud_policy_client.h" |
| #include "chrome/browser/policy/cloud/mock_cloud_policy_store.h" |
| #include "chrome/browser/policy/cloud/policy_builder.h" |
| #include "chrome/browser/policy/configuration_policy_provider_test.h" |
| #include "chrome/browser/policy/external_data_fetcher.h" |
| #include "chrome/browser/policy/mock_configuration_policy_provider.h" |
| +#include "sync/notifier/invalidation_util.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -143,6 +148,7 @@ class TestCloudPolicyManager : public CloudPolicyManager { |
| using CloudPolicyManager::store; |
| using CloudPolicyManager::service; |
| using CloudPolicyManager::CheckAndPublishPolicy; |
| + using CloudPolicyManager::StartRefreshScheduler; |
| private: |
| DISALLOW_COPY_AND_ASSIGN(TestCloudPolicyManager); |
| @@ -179,6 +185,60 @@ class CloudPolicyManagerTest : public testing::Test { |
| manager_->Shutdown(); |
| } |
| + // Sets up for an invalidations test. |
| + void CreateInvalidator() { |
| + // Add the invalidation registration info to the policy data. |
| + em::PolicyData* policy_data = new em::PolicyData(policy_.policy_data()); |
| + policy_data->set_invalidation_source(12345); |
| + policy_data->set_invalidation_name("12345"); |
| + store_.policy_.reset(policy_data); |
| + |
| + // Connect the core. |
| + MockCloudPolicyClient* client = new MockCloudPolicyClient(); |
| + EXPECT_CALL(*client, SetupRegistration(_, _)); |
| + manager_->core()->Connect(scoped_ptr<CloudPolicyClient>(client)); |
| + |
| + // Create invalidation objects. |
| + task_runner_ = new base::TestSimpleTaskRunner(); |
| + invalidation_service_.reset(new invalidation::FakeInvalidationService()); |
| + invalidator_.reset(new CloudPolicyInvalidator( |
| + manager_.get(), |
| + manager_->core()->store(), |
| + task_runner_)); |
| + } |
| + |
| + void ShutdownInvalidator() { |
| + invalidator_->Shutdown(); |
| + } |
| + |
| + // Call EnableInvalidations on the manager. |
| + void EnableInvalidations() { |
| + void (CloudPolicyInvalidator::*initialize) |
| + (invalidation::InvalidationService*) = |
| + &CloudPolicyInvalidator::Initialize; |
|
Joao da Silva
2013/07/29 19:44:32
Don't do this. Rename the Initialize() methods ins
Steve Condie
2013/07/29 20:44:51
Done.
|
| + manager_->EnableInvalidations( |
| + base::Bind( |
| + initialize, |
| + base::Unretained(invalidator_.get()), |
| + base::Unretained(invalidation_service_.get()))); |
| + } |
| + |
| + // Determine if the invalidator has registered with the invalidation service. |
| + bool IsInvalidatorRegistered() { |
| + syncer::ObjectIdSet object_ids = |
| + invalidation_service_->invalidator_registrar().GetAllRegisteredIds(); |
| + return object_ids.size() == 1 && |
| + object_ids.begin()->source() == 12345 && |
| + object_ids.begin()->name() == "12345"; |
| + } |
| + |
| + // Determine if the invalidator is unregistered with the invalidation service. |
| + bool IsInvalidatorUnregistered() { |
| + syncer::ObjectIdSet object_ids = |
| + invalidation_service_->invalidator_registrar().GetAllRegisteredIds(); |
| + return object_ids.empty(); |
| + } |
| + |
| // Required by the refresh scheduler that's created by the manager. |
| base::MessageLoop loop_; |
| @@ -193,6 +253,11 @@ class CloudPolicyManagerTest : public testing::Test { |
| MockCloudPolicyStore store_; |
| scoped_ptr<TestCloudPolicyManager> manager_; |
| + // Invalidation objects. |
| + scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| + scoped_ptr<invalidation::FakeInvalidationService> invalidation_service_; |
| + scoped_ptr<CloudPolicyInvalidator> invalidator_; |
| + |
| private: |
| DISALLOW_COPY_AND_ASSIGN(CloudPolicyManagerTest); |
| }; |
| @@ -337,5 +402,26 @@ TEST_F(CloudPolicyManagerTest, SignalOnError) { |
| EXPECT_TRUE(manager_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); |
| } |
| +TEST_F(CloudPolicyManagerTest, EnableInvalidationsBeforeRefreshScheduler) { |
| + CreateInvalidator(); |
| + EXPECT_TRUE(IsInvalidatorUnregistered()); |
| + EnableInvalidations(); |
| + EXPECT_TRUE(IsInvalidatorUnregistered()); |
| + manager_->StartRefreshScheduler(); |
| + EXPECT_TRUE(IsInvalidatorRegistered()); |
| + ShutdownInvalidator(); |
| +} |
| + |
| +TEST_F(CloudPolicyManagerTest, EnableInvalidationsAfterRefreshScheduler) { |
| + CreateInvalidator(); |
| + EXPECT_TRUE(IsInvalidatorUnregistered()); |
| + manager_->StartRefreshScheduler(); |
| + EXPECT_TRUE(IsInvalidatorUnregistered()); |
| + EnableInvalidations(); |
| + EXPECT_TRUE(IsInvalidatorRegistered()); |
| + ShutdownInvalidator(); |
| +} |
| + |
| + |
|
Joao da Silva
2013/07/29 19:44:32
nit: remove extra newline
Steve Condie
2013/07/29 20:44:51
Done.
|
| } // namespace |
| } // namespace policy |