Chromium Code Reviews| 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 |
| index 74979e96e240aeb69eb4a334b869452a29b0b3a0..6978b28f29378f04ebdcba68db4945f9b1f04132 100644 |
| --- a/chrome/browser/policy/device_management_policy_provider_unittest.cc |
| +++ b/chrome/browser/policy/device_management_policy_provider_unittest.cc |
| @@ -2,11 +2,13 @@ |
| // 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/configuration_policy_pref_store.h" |
| +#include "chrome/browser/policy/device_management_policy_cache.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" |
| @@ -36,15 +38,13 @@ class DeviceManagementPolicyProviderTest : public testing::Test { |
| virtual void SetUp() { |
| profile_.reset(new TestingProfile); |
| - CreateNewBackend(); |
| CreateNewProvider(); |
| - } |
| - |
| - void CreateNewBackend() { |
| - backend_ = new MockDeviceManagementBackend; |
| + EXPECT_TRUE(provider_->WaitingForInitialPolicies()); |
| + loop_.RunAllPending(); |
|
Mattias Nissler (ping if slow)
2010/11/26 15:07:30
indentation?
Jakob Kummerow
2010/11/26 16:04:03
Done.
|
| } |
| void CreateNewProvider() { |
| + backend_ = new MockDeviceManagementBackend; |
| provider_.reset(new DeviceManagementPolicyProvider( |
| ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(), |
| backend_, |
| @@ -53,7 +53,27 @@ class DeviceManagementPolicyProviderTest : public testing::Test { |
| new TestingDeviceTokenFetcher(backend_, |
| profile_.get(), |
| provider_->GetTokenPath())); |
| - loop_.RunAllPending(); |
| + } |
| + |
|
Mattias Nissler (ping if slow)
2010/11/26 15:07:30
whitespace.
Jakob Kummerow
2010/11/26 16:04:03
Done.
|
| + void CreateNewProvider(int64 policy_refresh_rate_ms, |
| + int64 policy_refresh_max_earlier_ms, |
| + 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_max_earlier_ms, |
| + policy_refresh_error_delay_ms, |
| + token_fetch_error_delay_ms, |
| + unmanaged_device_refresh_rate_ms)); |
| + provider_->SetDeviceTokenFetcher( |
| + new TestingDeviceTokenFetcher(backend_, |
| + profile_.get(), |
| + provider_->GetTokenPath())); |
| } |
| void SimulateSuccessfulLoginAndRunPending() { |
| @@ -75,6 +95,7 @@ class DeviceManagementPolicyProviderTest : public testing::Test { |
| MockDeviceManagementBackendSucceedBooleanPolicy( |
| key::kDisableSpdy, true)); |
| SimulateSuccessfulLoginAndRunPending(); |
| + EXPECT_FALSE(provider_->WaitingForInitialPolicies()); |
| EXPECT_CALL(store, Apply(kPolicyDisableSpdy, _)).Times(1); |
| provider_->Provide(&store); |
| ASSERT_EQ(1U, store.policy_map().size()); |
| @@ -90,19 +111,13 @@ class DeviceManagementPolicyProviderTest : public testing::Test { |
| scoped_ptr<DeviceManagementPolicyProvider> provider_; |
| protected: |
| - void SetRefreshDelays(DeviceManagementPolicyProvider* provider, |
| - int64 policy_refresh_rate_ms, |
| - int64 policy_refresh_max_earlier_ms, |
| - int64 policy_refresh_error_delay_ms, |
| - int64 token_fetch_error_delay_ms) { |
| - provider->set_policy_refresh_rate_ms(policy_refresh_rate_ms); |
| - provider->set_policy_refresh_max_earlier_ms(policy_refresh_max_earlier_ms); |
| - provider->set_policy_refresh_error_delay_ms(policy_refresh_error_delay_ms); |
| - provider->set_token_fetch_error_delay_ms(token_fetch_error_delay_ms); |
| + DeviceManagementPolicyCache* cache(DeviceManagementPolicyProvider* provider) { |
| + return provider->cache_.get(); |
| } |
| - private: |
| MessageLoop loop_; |
| + |
| + private: |
| BrowserThread ui_thread_; |
| BrowserThread file_thread_; |
| scoped_ptr<Profile> profile_; |
| @@ -117,12 +132,14 @@ TEST_F(DeviceManagementPolicyProviderTest, InitialProvideNoLogin) { |
| EXPECT_CALL(store, Apply(_, _)).Times(0); |
| provider_->Provide(&store); |
| EXPECT_TRUE(store.policy_map().empty()); |
| + EXPECT_TRUE(provider_->WaitingForInitialPolicies()); |
| } |
| // 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(provider_->WaitingForInitialPolicies()); |
| SimulateSuccessfulInitialPolicyFetch(); |
| } |
| @@ -148,21 +165,21 @@ TEST_F(DeviceManagementPolicyProviderTest, SecondProvide) { |
| // Simulate a app relaunch by constructing a new provider. Policy should be |
| // refreshed (since that might be the purpose of the app relaunch). |
| - CreateNewBackend(); |
| + CreateNewProvider(); |
| EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce( |
| MockDeviceManagementBackendSucceedBooleanPolicy( |
| key::kDisableSpdy, true)); |
| - CreateNewProvider(); |
| + loop_.RunAllPending(); |
| Mock::VerifyAndClearExpectations(backend_); |
| // Simulate another app relaunch, this time against a failing backend. |
| // Cached policy should still be available. |
| - CreateNewBackend(); |
| MockConfigurationPolicyStore store; |
| + CreateNewProvider(); |
| EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce( |
| MockDeviceManagementBackendFailPolicy( |
| DeviceManagementBackend::kErrorRequestFailed)); |
| - CreateNewProvider(); |
| + loop_.RunAllPending(); |
| SimulateSuccessfulLoginAndRunPending(); |
| EXPECT_CALL(store, Apply(kPolicyDisableSpdy, _)).Times(1); |
| provider_->Provide(&store); |
| @@ -183,7 +200,7 @@ TEST_F(DeviceManagementPolicyProviderTest, FetchTriggersRefresh) { |
| TEST_F(DeviceManagementPolicyProviderTest, ErrorCausesNewRequest) { |
| InSequence s; |
| - SetRefreshDelays(provider_.get(), 1000 * 1000, 0, 0, 0); |
| + CreateNewProvider(1000 * 1000, 0, 0, 0, 0); |
| EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
| MockDeviceManagementBackendFailRegister( |
| DeviceManagementBackend::kErrorRequestFailed)); |
| @@ -202,7 +219,7 @@ TEST_F(DeviceManagementPolicyProviderTest, ErrorCausesNewRequest) { |
| TEST_F(DeviceManagementPolicyProviderTest, RefreshPolicies) { |
| InSequence s; |
| - SetRefreshDelays(provider_.get(), 0, 0, 1000 * 1000, 1000); |
| + CreateNewProvider(0, 0, 1000 * 1000, 1000, 0); |
| EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
| MockDeviceManagementBackendSucceedRegister()); |
| EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce( |
| @@ -249,4 +266,28 @@ TEST_F(DeviceManagementPolicyProviderTest, InvalidTokenOnPolicyRequest) { |
| SimulateSuccessfulLoginAndRunPending(); |
| } |
| +// This test tests three things (see numbered comments below): |
| +TEST_F(DeviceManagementPolicyProviderTest, UnmanagedDevice) { |
| + 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_device_unmanaged()); |
| + // (2) On restart, the provider should detect that this is not the first |
| + // login. |
| + CreateNewProvider(1000*1000, 0, 0, 0, 0); |
| + EXPECT_FALSE(provider_->WaitingForInitialPolicies()); |
| + EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce( |
| + MockDeviceManagementBackendSucceedRegister()); |
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce( |
| + MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy, true)); |
| + 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_device_unmanaged()); |
| +} |
| + |
| } // namespace policy |