Index: chrome/browser/policy/device_management_policy_provider_unittest.cc |
diff --git a/chrome/browser/policy/device_management_policy_provider_unittest.cc b/chrome/browser/policy/device_management_policy_provider_unittest.cc |
deleted file mode 100644 |
index 8dc3bf4b2ca85cec3a8b4c87ce41a6801a98cea7..0000000000000000000000000000000000000000 |
--- a/chrome/browser/policy/device_management_policy_provider_unittest.cc |
+++ /dev/null |
@@ -1,382 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "base/file_util.h" |
-#include "base/message_loop.h" |
-#include "base/scoped_temp_dir.h" |
-#include "chrome/browser/browser_thread.h" |
-#include "chrome/browser/net/gaia/token_service.h" |
-#include "chrome/browser/policy/cloud_policy_cache.h" |
-#include "chrome/browser/policy/configuration_policy_pref_store.h" |
-#include "chrome/browser/policy/configuration_policy_provider.h" |
-#include "chrome/browser/policy/device_management_policy_provider.h" |
-#include "chrome/browser/policy/mock_configuration_policy_store.h" |
-#include "chrome/browser/policy/mock_device_management_backend.h" |
-#include "chrome/common/net/gaia/gaia_constants.h" |
-#include "chrome/common/notification_observer_mock.h" |
-#include "chrome/common/notification_service.h" |
-#include "chrome/test/testing_device_token_fetcher.h" |
-#include "chrome/test/testing_profile.h" |
-#include "policy/policy_constants.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-const char kTestToken[] = "device_policy_provider_test_auth_token"; |
- |
-namespace policy { |
- |
-using ::testing::_; |
-using ::testing::AtLeast; |
-using ::testing::InSequence; |
-using ::testing::Mock; |
- |
-class MockConfigurationPolicyObserver |
- : public ConfigurationPolicyProvider::Observer { |
- public: |
- MOCK_METHOD0(OnUpdatePolicy, void()); |
- void OnProviderGoingAway() {} |
-}; |
- |
-class DeviceManagementPolicyProviderTest : public testing::Test { |
- public: |
- DeviceManagementPolicyProviderTest() |
- : ui_thread_(BrowserThread::UI, &loop_), |
- file_thread_(BrowserThread::FILE, &loop_) {} |
- |
- virtual ~DeviceManagementPolicyProviderTest() {} |
- |
- virtual void SetUp() { |
- profile_.reset(new TestingProfile); |
- CreateNewProvider(); |
- EXPECT_TRUE(waiting_for_initial_policies()); |
- loop_.RunAllPending(); |
- } |
- |
- void CreateNewProvider() { |
- backend_ = new MockDeviceManagementBackend; |
- provider_.reset(new DeviceManagementPolicyProvider( |
- ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(), |
- backend_, |
- profile_.get())); |
- provider_->SetDeviceTokenFetcher( |
- new TestingDeviceTokenFetcher(backend_, |
- profile_.get(), |
- provider_->GetTokenPath())); |
- } |
- |
- void CreateNewProvider(int64 policy_refresh_rate_ms, |
- int policy_refresh_fuzz_factor_percent, |
- int64 policy_refresh_fuzz_max, |
- int64 policy_refresh_error_delay_ms, |
- int64 token_fetch_error_delay_ms, |
- int64 unmanaged_device_refresh_rate_ms) { |
- backend_ = new MockDeviceManagementBackend; |
- provider_.reset(new DeviceManagementPolicyProvider( |
- ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(), |
- backend_, |
- profile_.get(), |
- policy_refresh_rate_ms, |
- policy_refresh_fuzz_factor_percent, |
- policy_refresh_fuzz_max, |
- policy_refresh_error_delay_ms, |
- token_fetch_error_delay_ms, |
- unmanaged_device_refresh_rate_ms)); |
- provider_->SetDeviceTokenFetcher( |
- new TestingDeviceTokenFetcher(backend_, |
- profile_.get(), |
- provider_->GetTokenPath())); |
- } |
- |
- FilePath GetTokenPath() const { |
- return provider_->GetTokenPath(); |
- } |
- |
- void SimulateSuccessfulLoginAndRunPending() { |
- // Make sure the notification for the initial policy fetch is generated. |
- MockConfigurationPolicyObserver observer; |
- ConfigurationPolicyObserverRegistrar registrar; |
- registrar.Init(provider_.get(), &observer); |
- EXPECT_CALL(observer, OnUpdatePolicy()).Times(AtLeast(1)); |
- |
- loop_.RunAllPending(); |
- profile_->GetTokenService()->IssueAuthTokenForTest( |
- GaiaConstants::kDeviceManagementService, kTestToken); |
- TestingDeviceTokenFetcher* fetcher = |
- static_cast<TestingDeviceTokenFetcher*>( |
- provider_->token_fetcher_.get()); |
- fetcher->SimulateLogin(kTestManagedDomainUsername); |
- loop_.RunAllPending(); |
- } |
- |
- void SimulateSuccessfulInitialPolicyFetch() { |
- MockConfigurationPolicyStore store; |
- EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedRegister()); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedSpdyCloudPolicy()); |
- SimulateSuccessfulLoginAndRunPending(); |
- EXPECT_FALSE(waiting_for_initial_policies()); |
- EXPECT_CALL(store, Apply(kPolicyDisableSpdy, _)).Times(1); |
- provider_->Provide(&store); |
- ASSERT_EQ(1U, store.policy_map().size()); |
- Mock::VerifyAndClearExpectations(backend_); |
- Mock::VerifyAndClearExpectations(&store); |
- } |
- |
- virtual void TearDown() { |
- provider_.reset(); |
- loop_.RunAllPending(); |
- } |
- |
- bool waiting_for_initial_policies() const { |
- return !provider_->IsInitializationComplete(); |
- } |
- |
- MockDeviceManagementBackend* backend_; // weak |
- scoped_ptr<DeviceManagementPolicyProvider> provider_; |
- |
- protected: |
- CloudPolicyCache* cache(DeviceManagementPolicyProvider* provider) { |
- return provider->cache_.get(); |
- } |
- |
- MessageLoop loop_; |
- |
- private: |
- BrowserThread ui_thread_; |
- BrowserThread file_thread_; |
- scoped_ptr<Profile> profile_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DeviceManagementPolicyProviderTest); |
-}; |
- |
-// If there's no login and no previously-fetched policy, the provider should |
-// provide an empty policy. |
-TEST_F(DeviceManagementPolicyProviderTest, InitialProvideNoLogin) { |
- MockConfigurationPolicyStore store; |
- EXPECT_CALL(store, Apply(_, _)).Times(0); |
- provider_->Provide(&store); |
- EXPECT_TRUE(store.policy_map().empty()); |
- EXPECT_TRUE(waiting_for_initial_policies()); |
-} |
- |
-// If the login is successful and there's no previously-fetched policy, the |
-// policy should be fetched from the server and should be available the first |
-// time the Provide method is called. |
-TEST_F(DeviceManagementPolicyProviderTest, InitialProvideWithLogin) { |
- EXPECT_TRUE(waiting_for_initial_policies()); |
- SimulateSuccessfulInitialPolicyFetch(); |
-} |
- |
-// If the login succeed but the device management backend is unreachable, |
-// there should be no policy provided if there's no previously-fetched policy, |
-TEST_F(DeviceManagementPolicyProviderTest, EmptyProvideWithFailedBackend) { |
- MockConfigurationPolicyStore store; |
- EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendFailRegister( |
- DeviceManagementBackend::kErrorRequestFailed)); |
- EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).Times(0); |
- SimulateSuccessfulLoginAndRunPending(); |
- EXPECT_CALL(store, Apply(kPolicyDisableSpdy, _)).Times(0); |
- provider_->Provide(&store); |
- EXPECT_TRUE(store.policy_map().empty()); |
-} |
- |
-// If a policy has been fetched previously, if should be available even before |
-// the login succeeds or the device management backend is available. |
-TEST_F(DeviceManagementPolicyProviderTest, SecondProvide) { |
- // Pre-fetch and persist a policy |
- SimulateSuccessfulInitialPolicyFetch(); |
- |
- // Simulate a app relaunch by constructing a new provider. Policy should be |
- // refreshed (since that might be the purpose of the app relaunch). |
- CreateNewProvider(); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedSpdyCloudPolicy()); |
- loop_.RunAllPending(); |
- Mock::VerifyAndClearExpectations(backend_); |
- |
- // Simulate another app relaunch, this time against a failing backend. |
- // Cached policy should still be available. |
- MockConfigurationPolicyStore store; |
- CreateNewProvider(); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendFailPolicy( |
- DeviceManagementBackend::kErrorRequestFailed)); |
- SimulateSuccessfulLoginAndRunPending(); |
- EXPECT_CALL(store, Apply(kPolicyDisableSpdy, _)).Times(1); |
- provider_->Provide(&store); |
- ASSERT_EQ(1U, store.policy_map().size()); |
-} |
- |
-// When policy is successfully fetched from the device management server, it |
-// should force a policy refresh. |
-TEST_F(DeviceManagementPolicyProviderTest, FetchTriggersRefresh) { |
- MockConfigurationPolicyObserver observer; |
- ConfigurationPolicyObserverRegistrar registrar; |
- registrar.Init(provider_.get(), &observer); |
- EXPECT_CALL(observer, OnUpdatePolicy()).Times(1); |
- SimulateSuccessfulInitialPolicyFetch(); |
-} |
- |
-TEST_F(DeviceManagementPolicyProviderTest, ErrorCausesNewRequest) { |
- { // Scoping so SimulateSuccessfulLoginAndRunPending doesn't see the sequence. |
- InSequence s; |
- CreateNewProvider(1000 * 1000, 0, 0, 0, 0, 0); |
- EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendFailRegister( |
- DeviceManagementBackend::kErrorRequestFailed)); |
- EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedRegister()); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendFailPolicy( |
- DeviceManagementBackend::kErrorRequestFailed)); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendFailPolicy( |
- DeviceManagementBackend::kErrorRequestFailed)); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedSpdyCloudPolicy()); |
- } |
- SimulateSuccessfulLoginAndRunPending(); |
-} |
- |
-TEST_F(DeviceManagementPolicyProviderTest, RefreshPolicies) { |
- { // Scoping so SimulateSuccessfulLoginAndRunPending doesn't see the sequence. |
- InSequence s; |
- CreateNewProvider(0, 0, 0, 1000 * 1000, 1000, 0); |
- EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedRegister()); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedSpdyCloudPolicy()); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedSpdyCloudPolicy()); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedSpdyCloudPolicy()); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendFailPolicy( |
- DeviceManagementBackend::kErrorRequestFailed)); |
- } |
- SimulateSuccessfulLoginAndRunPending(); |
-} |
- |
-// The client should try to re-register the device if the device server reports |
-// back that it doesn't recognize the device token on a policy request. |
-TEST_F(DeviceManagementPolicyProviderTest, DeviceNotFound) { |
- { // Scoping so SimulateSuccessfulLoginAndRunPending doesn't see the sequence. |
- InSequence s; |
- EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedRegister()); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendFailPolicy( |
- DeviceManagementBackend::kErrorServiceDeviceNotFound)); |
- EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedRegister()); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedSpdyCloudPolicy()); |
- } |
- SimulateSuccessfulLoginAndRunPending(); |
-} |
- |
-// The client should try to re-register the device if the device server reports |
-// back that the device token is invalid on a policy request. |
-TEST_F(DeviceManagementPolicyProviderTest, InvalidTokenOnPolicyRequest) { |
- { // Scoping so SimulateSuccessfulLoginAndRunPending doesn't see the sequence. |
- InSequence s; |
- EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedRegister()); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendFailPolicy( |
- DeviceManagementBackend::kErrorServiceManagementTokenInvalid)); |
- EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedRegister()); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedSpdyCloudPolicy()); |
- } |
- SimulateSuccessfulLoginAndRunPending(); |
-} |
- |
-// If the client is successfully managed, but the admin stops managing the |
-// device, the client should notice and throw away the device token and id. |
-TEST_F(DeviceManagementPolicyProviderTest, DeviceNoLongerManaged) { |
- { // Scoping so SimulateSuccessfulLoginAndRunPending doesn't see the sequence. |
- InSequence s; |
- CreateNewProvider(0, 0, 0, 0, 0, 1000 * 1000); |
- EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedRegister()); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedSpdyCloudPolicy()); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedSpdyCloudPolicy()); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendFailPolicy( |
- DeviceManagementBackend::kErrorServiceManagementNotSupported)); |
- EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendFailRegister( |
- DeviceManagementBackend::kErrorServiceManagementNotSupported)); |
- } |
- SimulateSuccessfulLoginAndRunPending(); |
- FilePath token_path(GetTokenPath()); |
- EXPECT_FALSE(file_util::PathExists(token_path)); |
-} |
- |
-// This test tests three things (see numbered comments below): |
-TEST_F(DeviceManagementPolicyProviderTest, UnmanagedDevice) { |
- { // Scoping so SimulateSuccessfulLoginAndRunPending doesn't see the sequence. |
- InSequence s; |
- EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendFailRegister( |
- DeviceManagementBackend::kErrorServiceManagementNotSupported)); |
- } |
- SimulateSuccessfulLoginAndRunPending(); |
- // (1) The provider's DMPolicyCache should know that the device is not |
- // managed. |
- EXPECT_TRUE(cache(provider_.get())->is_unmanaged()); |
- // (2) On restart, the provider should detect that this is not the first |
- // login. |
- CreateNewProvider(1000 * 1000, 0, 0, 0, 0, 0); |
- EXPECT_FALSE(waiting_for_initial_policies()); |
- { // Scoping so SimulateSuccessfulLoginAndRunPending doesn't see the sequence. |
- InSequence s; |
- EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedRegister()); |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedSpdyCloudPolicy()); |
- } |
- SimulateSuccessfulLoginAndRunPending(); |
- // (3) Since the backend call this time returned a device id, the "unmanaged" |
- // marker should have been deleted. |
- EXPECT_FALSE(cache(provider_.get())->is_unmanaged()); |
-} |
- |
-TEST_F(DeviceManagementPolicyProviderTest, FallbackToOldProtocol) { |
- { // Scoping so SimulateSuccessfulLoginAndRunPending doesn't see the sequence. |
- InSequence s; |
- CreateNewProvider(0, 0, 0, 0, 0, 1000 * 1000); |
- EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedRegister()); |
- // If the CloudPolicyRequest fails with kErrorRequestInvalid... |
- EXPECT_CALL(*backend_, ProcessCloudPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendFailPolicy( |
- DeviceManagementBackend::kErrorRequestInvalid)); |
- // ...the client should fall back to a classic PolicyRequest... |
- EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendSucceedBooleanPolicy( |
- key::kDisableSpdy, true)); |
- // ...and remember this fallback for any future request, ... |
- EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendFailPolicy( |
- DeviceManagementBackend::kErrorHttpStatus)); |
- // ...both after successful fetches and after errors. |
- EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendFailPolicy( |
- DeviceManagementBackend::kErrorServiceManagementNotSupported)); |
- // Finally, we set the client to 'unmanaged' to stop its request stream. |
- EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
- MockDeviceManagementBackendFailRegister( |
- DeviceManagementBackend::kErrorServiceManagementNotSupported)); |
- } |
- SimulateSuccessfulLoginAndRunPending(); |
-} |
- |
-} // namespace policy |