Index: chrome/browser/chromeos/policy/device_cloud_policy_invalidator_unittest.cc |
diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_invalidator_unittest.cc b/chrome/browser/chromeos/policy/device_cloud_policy_invalidator_unittest.cc |
index 3f5f6e1854fd7fca3c91b143405747482d30971b..075a98780135540958ca17085fa875ebc7d2921e 100644 |
--- a/chrome/browser/chromeos/policy/device_cloud_policy_invalidator_unittest.cc |
+++ b/chrome/browser/chromeos/policy/device_cloud_policy_invalidator_unittest.cc |
@@ -9,28 +9,61 @@ |
#include "base/memory/ref_counted.h" |
#include "base/message_loop/message_loop_proxy.h" |
#include "base/run_loop.h" |
+#include "chrome/browser/browser_process_platform_part.h" |
#include "chrome/browser/chrome_notification_types.h" |
+#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" |
+#include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h" |
+#include "chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.h" |
+#include "chrome/browser/chromeos/policy/device_policy_builder.h" |
+#include "chrome/browser/chromeos/policy/stub_enterprise_install_attributes.h" |
#include "chrome/browser/chromeos/settings/cros_settings.h" |
#include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h" |
#include "chrome/browser/chromeos/settings/device_settings_service.h" |
+#include "chrome/browser/chromeos/settings/device_settings_test_helper.h" |
+#include "chrome/browser/chromeos/settings/mock_owner_key_util.h" |
+#include "chrome/browser/invalidation/fake_invalidation_service.h" |
#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" |
+#include "chrome/browser/policy/cloud/cloud_policy_invalidator.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/test/base/testing_browser_process.h" |
#include "chrome/test/base/testing_profile_manager.h" |
#include "chromeos/cryptohome/system_salt_getter.h" |
#include "chromeos/dbus/dbus_thread_manager.h" |
+#include "components/invalidation/invalidation_service.h" |
#include "components/invalidation/invalidator_state.h" |
#include "components/invalidation/profile_invalidation_provider.h" |
#include "components/invalidation/ticl_invalidation_service.h" |
+#include "components/keyed_service/core/keyed_service.h" |
+#include "components/policy/core/common/cloud/cloud_policy_client.h" |
+#include "components/policy/core/common/cloud/cloud_policy_constants.h" |
+#include "components/policy/core/common/cloud/cloud_policy_core.h" |
+#include "components/policy/core/common/cloud/mock_cloud_policy_client.h" |
+#include "content/public/browser/browser_context.h" |
#include "content/public/browser/notification_details.h" |
#include "content/public/browser/notification_service.h" |
#include "content/public/test/test_browser_thread_bundle.h" |
#include "net/url_request/url_request_context_getter.h" |
#include "net/url_request/url_request_test_util.h" |
+#include "policy/proto/device_management_backend.pb.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace policy { |
+namespace { |
+ |
+KeyedService* BuildProfileInvalidationProvider( |
+ content::BrowserContext* context) { |
+ scoped_ptr<invalidation::FakeInvalidationService> invalidation_service( |
+ new invalidation::FakeInvalidationService); |
+ invalidation_service->SetInvalidatorState( |
+ syncer::TRANSIENT_INVALIDATION_ERROR); |
+ return new invalidation::ProfileInvalidationProvider( |
+ invalidation_service.PassAs<invalidation::InvalidationService>()); |
+} |
+ |
+} // namespace |
+ |
class DeviceCloudPolicyInvalidatorTest : public testing::Test { |
public: |
DeviceCloudPolicyInvalidatorTest(); |
@@ -46,22 +79,27 @@ class DeviceCloudPolicyInvalidatorTest : public testing::Test { |
invalidation::TiclInvalidationService* GetDeviceInvalidationService(); |
bool HasDeviceInvalidationServiceObserver() const; |
- invalidation::TiclInvalidationService* GetProfileInvalidationService( |
+ invalidation::FakeInvalidationService* GetProfileInvalidationService( |
Profile* profile); |
int GetProfileInvalidationServiceObserverCount() const; |
- const invalidation::TiclInvalidationService* GetInvalidationService() const; |
- bool HasCloudPolicyInvalidator() const; |
+ const invalidation::InvalidationService* GetInvalidationService() const; |
+ CloudPolicyInvalidator* GetCloudPolicyInvalidator() const; |
void ConnectDeviceInvalidationService(); |
+ protected: |
+ DevicePolicyBuilder device_policy_; |
+ |
private: |
content::TestBrowserThreadBundle thread_bundle_; |
scoped_refptr<net::URLRequestContextGetter> system_request_context_; |
TestingProfileManager profile_manager_; |
+ ScopedStubEnterpriseInstallAttributes install_attributes_; |
scoped_ptr<chromeos::ScopedTestDeviceSettingsService> |
test_device_settings_service_; |
scoped_ptr<chromeos::ScopedTestCrosSettings> test_cros_settings_; |
+ chromeos::DeviceSettingsTestHelper device_settings_test_helper_; |
scoped_ptr<DeviceCloudPolicyInvalidator> invalidator_; |
}; |
@@ -70,7 +108,11 @@ DeviceCloudPolicyInvalidatorTest::DeviceCloudPolicyInvalidatorTest() |
: thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), |
system_request_context_(new net::TestURLRequestContextGetter( |
base::MessageLoopProxy::current())), |
- profile_manager_(TestingBrowserProcess::GetGlobal()) { |
+ profile_manager_(TestingBrowserProcess::GetGlobal()), |
+ install_attributes_("example.com", |
+ "user@example.com", |
+ "device_id", |
+ DEVICE_MODE_ENTERPRISE) { |
} |
DeviceCloudPolicyInvalidatorTest::~DeviceCloudPolicyInvalidatorTest() { |
@@ -83,9 +125,34 @@ void DeviceCloudPolicyInvalidatorTest::SetUp() { |
TestingBrowserProcess::GetGlobal()->SetSystemRequestContext( |
system_request_context_.get()); |
ASSERT_TRUE(profile_manager_.SetUp()); |
+ |
test_device_settings_service_.reset(new |
chromeos::ScopedTestDeviceSettingsService); |
test_cros_settings_.reset(new chromeos::ScopedTestCrosSettings); |
+ scoped_refptr<chromeos::MockOwnerKeyUtil> owner_key_util( |
+ new chromeos::MockOwnerKeyUtil); |
+ owner_key_util->SetPublicKeyFromPrivateKey( |
+ *device_policy_.GetSigningKey()); |
Joao da Silva
2014/08/13 13:01:38
nit: indent
bartfab (slow)
2014/08/13 13:37:47
Done.
|
+ chromeos::DeviceSettingsService::Get()->SetSessionManager( |
+ &device_settings_test_helper_, |
+ owner_key_util); |
+ |
+ device_policy_.policy_data().set_invalidation_source(123); |
+ device_policy_.policy_data().set_invalidation_name("invalidation"); |
+ device_policy_.Build(); |
+ device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); |
+ device_settings_test_helper_.Flush(); |
+ |
+ scoped_ptr<MockCloudPolicyClient> policy_client(new MockCloudPolicyClient); |
+ EXPECT_CALL(*policy_client, SetupRegistration("token", "device-id")); |
+ CloudPolicyCore* core = TestingBrowserProcess::GetGlobal()->platform_part()-> |
+ browser_policy_connector_chromeos()->GetDeviceCloudPolicyManager()-> |
+ core(); |
+ core->Connect(policy_client.PassAs<CloudPolicyClient>()); |
+ core->StartRefreshScheduler(); |
+ |
+ invalidation::ProfileInvalidationProviderFactory::GetInstance()-> |
+ RegisterTestingFactory(BuildProfileInvalidationProvider); |
invalidator_.reset(new DeviceCloudPolicyInvalidator); |
} |
@@ -94,6 +161,9 @@ void DeviceCloudPolicyInvalidatorTest::TearDown() { |
invalidator_.reset(); |
base::RunLoop().RunUntilIdle(); |
+ invalidation::ProfileInvalidationProviderFactory::GetInstance()-> |
+ RegisterTestingFactory(NULL); |
+ chromeos::DeviceSettingsService::Get()->UnsetSessionManager(); |
TestingBrowserProcess::GetGlobal()->SetBrowserPolicyConnector(NULL); |
chromeos::DeviceOAuth2TokenServiceFactory::Shutdown(); |
chromeos::DBusThreadManager::Shutdown(); |
@@ -120,7 +190,7 @@ bool DeviceCloudPolicyInvalidatorTest::HasDeviceInvalidationServiceObserver( |
return invalidator_->device_invalidation_service_observer_.get(); |
} |
-invalidation::TiclInvalidationService* |
+invalidation::FakeInvalidationService* |
DeviceCloudPolicyInvalidatorTest::GetProfileInvalidationService( |
Profile* profile) { |
invalidation::ProfileInvalidationProvider* invalidation_provider = |
@@ -129,7 +199,7 @@ DeviceCloudPolicyInvalidatorTest::GetProfileInvalidationService( |
GetServiceForBrowserContext(profile, false)); |
if (!invalidation_provider) |
return NULL; |
- return static_cast<invalidation::TiclInvalidationService*>( |
+ return static_cast<invalidation::FakeInvalidationService*>( |
invalidation_provider->GetInvalidationService()); |
} |
@@ -138,13 +208,13 @@ int DeviceCloudPolicyInvalidatorTest:: |
return invalidator_->profile_invalidation_service_observers_.size(); |
} |
-const invalidation::TiclInvalidationService* |
+const invalidation::InvalidationService* |
DeviceCloudPolicyInvalidatorTest::GetInvalidationService() const { |
- return static_cast<invalidation::TiclInvalidationService*>( |
- invalidator_->invalidation_service_); |
+ return invalidator_->invalidation_service_; |
} |
-bool DeviceCloudPolicyInvalidatorTest::HasCloudPolicyInvalidator() const { |
+CloudPolicyInvalidator* |
+DeviceCloudPolicyInvalidatorTest::GetCloudPolicyInvalidator() const { |
return invalidator_->invalidator_.get(); |
} |
@@ -158,7 +228,7 @@ void DeviceCloudPolicyInvalidatorTest::ConnectDeviceInvalidationService() { |
EXPECT_EQ(0, GetProfileInvalidationServiceObserverCount()); |
// Verify that no invalidator exists yet |
- EXPECT_FALSE(HasCloudPolicyInvalidator()); |
+ EXPECT_FALSE(GetCloudPolicyInvalidator()); |
EXPECT_FALSE(GetInvalidationService()); |
// Indicate that the device-global invalidation service has connected. |
@@ -172,7 +242,7 @@ void DeviceCloudPolicyInvalidatorTest::ConnectDeviceInvalidationService() { |
// Verify that an invalidator backed by the device-global invalidation service |
// has been created. |
- EXPECT_TRUE(HasCloudPolicyInvalidator()); |
+ EXPECT_TRUE(GetCloudPolicyInvalidator()); |
EXPECT_EQ(GetDeviceInvalidationService(), GetInvalidationService()); |
} |
@@ -195,7 +265,7 @@ TEST_F(DeviceCloudPolicyInvalidatorTest, UseDeviceInvalidationService) { |
EXPECT_TRUE(HasDeviceInvalidationServiceObserver()); |
// Verify that the invalidator has been destroyed. |
- EXPECT_FALSE(HasCloudPolicyInvalidator()); |
+ EXPECT_FALSE(GetCloudPolicyInvalidator()); |
EXPECT_FALSE(GetInvalidationService()); |
} |
@@ -212,19 +282,18 @@ TEST_F(DeviceCloudPolicyInvalidatorTest, UseProfileInvalidationService) { |
EXPECT_TRUE(HasDeviceInvalidationServiceObserver()); |
// Verify that a per-profile invalidation service has been created. |
- invalidation::TiclInvalidationService* profile_invalidation_service = |
+ invalidation::FakeInvalidationService* profile_invalidation_service = |
GetProfileInvalidationService(profile); |
ASSERT_TRUE(profile_invalidation_service); |
EXPECT_EQ(1, GetProfileInvalidationServiceObserverCount()); |
// Verify that no invalidator exists yet |
- EXPECT_FALSE(HasCloudPolicyInvalidator()); |
+ EXPECT_FALSE(GetCloudPolicyInvalidator()); |
EXPECT_FALSE(GetInvalidationService()); |
// Indicate that the per-profile invalidation service has connected. |
- profile_invalidation_service->OnInvalidatorStateChange( |
+ profile_invalidation_service->SetInvalidatorState( |
syncer::INVALIDATIONS_ENABLED); |
- base::RunLoop().RunUntilIdle(); |
// Verify that the device-global invalidator has been destroyed. |
EXPECT_FALSE(GetDeviceInvalidationService()); |
@@ -237,13 +306,12 @@ TEST_F(DeviceCloudPolicyInvalidatorTest, UseProfileInvalidationService) { |
// Verify that an invalidator backed by the per-profile invalidation service |
// has been created. |
- EXPECT_TRUE(HasCloudPolicyInvalidator()); |
+ EXPECT_TRUE(GetCloudPolicyInvalidator()); |
EXPECT_EQ(profile_invalidation_service, GetInvalidationService()); |
// Indicate that the per-profile invalidation service has disconnected. |
- profile_invalidation_service->OnInvalidatorStateChange( |
+ profile_invalidation_service->SetInvalidatorState( |
syncer::INVALIDATION_CREDENTIALS_REJECTED); |
- base::RunLoop().RunUntilIdle(); |
// Verify that a device-global invalidation service has been created. |
EXPECT_TRUE(GetDeviceInvalidationService()); |
@@ -255,7 +323,7 @@ TEST_F(DeviceCloudPolicyInvalidatorTest, UseProfileInvalidationService) { |
EXPECT_EQ(1, GetProfileInvalidationServiceObserverCount()); |
// Verify that the invalidator has been destroyed. |
- EXPECT_FALSE(HasCloudPolicyInvalidator()); |
+ EXPECT_FALSE(GetCloudPolicyInvalidator()); |
EXPECT_FALSE(GetInvalidationService()); |
} |
@@ -263,12 +331,26 @@ TEST_F(DeviceCloudPolicyInvalidatorTest, UseProfileInvalidationService) { |
// invalidation service is available, automatically switching between |
// device-global and per-profile invalidation services as they |
// connect/disconnect, giving priority to per-profile invalidation services. |
+// Also verifies that the highest handled invalidation version is preserved when |
+// switching invalidation services. |
TEST_F(DeviceCloudPolicyInvalidatorTest, SwitchInvalidationServices) { |
+ CloudPolicyStore* store = static_cast<CloudPolicyStore*>( |
+ TestingBrowserProcess::GetGlobal()->platform_part()-> |
+ browser_policy_connector_chromeos()->GetDeviceCloudPolicyManager()-> |
+ device_store()); |
+ ASSERT_TRUE(store); |
+ |
// Verify that an invalidator backed by the device-global invalidation service |
// is created when the service connects. |
ConnectDeviceInvalidationService(); |
+ CloudPolicyInvalidator* invalidator = GetCloudPolicyInvalidator(); |
+ ASSERT_TRUE(invalidator); |
ASSERT_TRUE(GetDeviceInvalidationService()); |
+ // Verify that the invalidator's highest handled invalidation version starts |
+ // out as zero. |
+ EXPECT_EQ(0, invalidator->highest_handled_invalidation_version()); |
+ |
// Create a first user profile. |
Profile* profile_1 = CreateProfile("test_1"); |
ASSERT_TRUE(profile_1); |
@@ -279,21 +361,20 @@ TEST_F(DeviceCloudPolicyInvalidatorTest, SwitchInvalidationServices) { |
// Verify that a per-profile invalidation service has been created for the |
// first user profile. |
- invalidation::TiclInvalidationService* profile_1_invalidation_service = |
+ invalidation::FakeInvalidationService* profile_1_invalidation_service = |
GetProfileInvalidationService(profile_1); |
ASSERT_TRUE(profile_1_invalidation_service); |
EXPECT_EQ(1, GetProfileInvalidationServiceObserverCount()); |
// Verify that an invalidator backed by the device-global invalidation service |
// still exists. |
- EXPECT_TRUE(HasCloudPolicyInvalidator()); |
+ EXPECT_TRUE(GetCloudPolicyInvalidator()); |
EXPECT_EQ(GetDeviceInvalidationService(), GetInvalidationService()); |
// Indicate that the first user profile's per-profile invalidation service has |
// connected. |
- profile_1_invalidation_service->OnInvalidatorStateChange( |
+ profile_1_invalidation_service->SetInvalidatorState( |
syncer::INVALIDATIONS_ENABLED); |
- base::RunLoop().RunUntilIdle(); |
// Verify that the device-global invalidator has been destroyed. |
EXPECT_FALSE(GetDeviceInvalidationService()); |
@@ -307,9 +388,20 @@ TEST_F(DeviceCloudPolicyInvalidatorTest, SwitchInvalidationServices) { |
// Verify that an invalidator backed by the per-profile invalidation service |
// for the first user profile has been created. |
- EXPECT_TRUE(HasCloudPolicyInvalidator()); |
+ invalidator = GetCloudPolicyInvalidator(); |
+ ASSERT_TRUE(invalidator); |
EXPECT_EQ(profile_1_invalidation_service, GetInvalidationService()); |
+ // Verify that the invalidator's highest handled invalidation version starts |
+ // out as zero. |
+ EXPECT_EQ(0, invalidator->highest_handled_invalidation_version()); |
+ |
+ // Handle an invalidation with version 1. Verify that the invalidator's |
+ // highest handled invalidation version is updated accordingly. |
+ store->Store(device_policy_.policy(), 1); |
+ invalidator->OnStoreLoaded(store); |
+ EXPECT_EQ(1, invalidator->highest_handled_invalidation_version()); |
+ |
// Create a second user profile. |
Profile* profile_2 = CreateProfile("test_2"); |
ASSERT_TRUE(profile_2); |
@@ -322,21 +414,20 @@ TEST_F(DeviceCloudPolicyInvalidatorTest, SwitchInvalidationServices) { |
// user profile and one has been created for the second user profile. |
profile_1_invalidation_service = GetProfileInvalidationService(profile_1); |
EXPECT_TRUE(profile_1_invalidation_service); |
- invalidation::TiclInvalidationService* profile_2_invalidation_service = |
+ invalidation::FakeInvalidationService* profile_2_invalidation_service = |
GetProfileInvalidationService(profile_2); |
ASSERT_TRUE(profile_2_invalidation_service); |
EXPECT_EQ(2, GetProfileInvalidationServiceObserverCount()); |
// Verify that an invalidator backed by the per-profile invalidation service |
// for the first user profile still exists. |
- EXPECT_TRUE(HasCloudPolicyInvalidator()); |
+ EXPECT_TRUE(GetCloudPolicyInvalidator()); |
EXPECT_EQ(profile_1_invalidation_service, GetInvalidationService()); |
// Indicate that the second user profile's per-profile invalidation service |
// has connected. |
- profile_2_invalidation_service->OnInvalidatorStateChange( |
+ profile_2_invalidation_service->SetInvalidatorState( |
syncer::INVALIDATIONS_ENABLED); |
- base::RunLoop().RunUntilIdle(); |
// Verify that the device-global invalidator still does not exist. |
EXPECT_FALSE(GetDeviceInvalidationService()); |
@@ -352,14 +443,13 @@ TEST_F(DeviceCloudPolicyInvalidatorTest, SwitchInvalidationServices) { |
// Verify that an invalidator backed by the per-profile invalidation service |
// for the first user profile still exists. |
- EXPECT_TRUE(HasCloudPolicyInvalidator()); |
+ EXPECT_TRUE(GetCloudPolicyInvalidator()); |
EXPECT_EQ(profile_1_invalidation_service, GetInvalidationService()); |
// Indicate that the per-profile invalidation service for the first user |
// profile has disconnected. |
- profile_1_invalidation_service->OnInvalidatorStateChange( |
+ profile_1_invalidation_service->SetInvalidatorState( |
syncer::INVALIDATION_CREDENTIALS_REJECTED); |
- base::RunLoop().RunUntilIdle(); |
// Verify that the device-global invalidator still does not exist. |
EXPECT_FALSE(GetDeviceInvalidationService()); |
@@ -375,14 +465,24 @@ TEST_F(DeviceCloudPolicyInvalidatorTest, SwitchInvalidationServices) { |
// Verify that an invalidator backed by the per-profile invalidation service |
// for the second user profile has been created. |
- EXPECT_TRUE(HasCloudPolicyInvalidator()); |
+ invalidator = GetCloudPolicyInvalidator(); |
+ ASSERT_TRUE(invalidator); |
EXPECT_EQ(profile_2_invalidation_service, GetInvalidationService()); |
+ // Verify that the invalidator's highest handled invalidation version starts |
+ // out as 1. |
+ EXPECT_EQ(1, invalidator->highest_handled_invalidation_version()); |
+ |
+ // Handle an invalidation with version 2. Verify that the invalidator's |
+ // highest handled invalidation version is updated accordingly. |
+ store->Store(device_policy_.policy(), 2); |
+ invalidator->OnStoreLoaded(store); |
+ EXPECT_EQ(2, invalidator->highest_handled_invalidation_version()); |
+ |
// Indicate that the per-profile invalidation service for the second user |
// profile has disconnected. |
- profile_2_invalidation_service->OnInvalidatorStateChange( |
+ profile_2_invalidation_service->SetInvalidatorState( |
syncer::INVALIDATION_CREDENTIALS_REJECTED); |
- base::RunLoop().RunUntilIdle(); |
// Verify that a device-global invalidation service has been created. |
ASSERT_TRUE(GetDeviceInvalidationService()); |
@@ -397,7 +497,7 @@ TEST_F(DeviceCloudPolicyInvalidatorTest, SwitchInvalidationServices) { |
EXPECT_EQ(2, GetProfileInvalidationServiceObserverCount()); |
// Verify that the invalidator has been destroyed. |
- EXPECT_FALSE(HasCloudPolicyInvalidator()); |
+ EXPECT_FALSE(GetCloudPolicyInvalidator()); |
EXPECT_FALSE(GetInvalidationService()); |
// Indicate that the device-global invalidation service has connected. |
@@ -419,8 +519,13 @@ TEST_F(DeviceCloudPolicyInvalidatorTest, SwitchInvalidationServices) { |
// Verify that an invalidator backed by the device-global invalidation service |
// has been created. |
- EXPECT_TRUE(HasCloudPolicyInvalidator()); |
+ invalidator = GetCloudPolicyInvalidator(); |
+ ASSERT_TRUE(invalidator); |
EXPECT_EQ(GetDeviceInvalidationService(), GetInvalidationService()); |
+ |
+ // Verify that the invalidator's highest handled invalidation version starts |
+ // out as 2. |
+ EXPECT_EQ(2, invalidator->highest_handled_invalidation_version()); |
} |
} // namespace policy |