Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2321)

Unified Diff: chrome/browser/policy/device_management_policy_provider_unittest.cc

Issue 6520008: Device policy infrastructure (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix nits Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698