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 |