user_cloud_policy_manager_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "components/policy/core/common/cloud/user_cloud_policy_manager.h" 6 7#include "base/callback.h" 8#include "base/message_loop/message_loop.h" 9#include "base/message_loop/message_loop_proxy.h" 10#include "base/sequenced_task_runner.h" 11#include "components/policy/core/common/cloud/cloud_external_data_manager.h" 12#include "components/policy/core/common/cloud/mock_user_cloud_policy_store.h" 13#include "components/policy/core/common/external_data_fetcher.h" 14#include "components/policy/core/common/mock_configuration_policy_provider.h" 15#include "components/policy/core/common/schema_registry.h" 16#include "net/url_request/url_request_context_getter.h" 17#include "testing/gmock/include/gmock/gmock.h" 18#include "testing/gtest/include/gtest/gtest.h" 19 20namespace em = enterprise_management; 21 22using testing::AnyNumber; 23using testing::AtLeast; 24using testing::Mock; 25using testing::_; 26 27namespace policy { 28namespace { 29 30class UserCloudPolicyManagerTest : public testing::Test { 31 protected: 32 UserCloudPolicyManagerTest() : store_(NULL) {} 33 34 virtual void SetUp() OVERRIDE { 35 // Set up a policy map for testing. 36 policy_map_.Set("key", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 37 base::Value::CreateStringValue("value"), NULL); 38 expected_bundle_.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) 39 .CopyFrom(policy_map_); 40 } 41 42 virtual void TearDown() OVERRIDE { 43 if (manager_) { 44 manager_->RemoveObserver(&observer_); 45 manager_->Shutdown(); 46 } 47 } 48 49 void CreateManager() { 50 store_ = new MockUserCloudPolicyStore(); 51 EXPECT_CALL(*store_, Load()); 52 manager_.reset(new UserCloudPolicyManager( 53 scoped_ptr<UserCloudPolicyStore>(store_), 54 base::FilePath(), 55 scoped_ptr<CloudExternalDataManager>(), 56 loop_.message_loop_proxy(), 57 loop_.message_loop_proxy(), 58 loop_.message_loop_proxy())); 59 manager_->Init(&schema_registry_); 60 manager_->AddObserver(&observer_); 61 Mock::VerifyAndClearExpectations(store_); 62 } 63 64 // Required by the refresh scheduler that's created by the manager. 65 base::MessageLoop loop_; 66 67 // Convenience policy objects. 68 PolicyMap policy_map_; 69 PolicyBundle expected_bundle_; 70 71 // Policy infrastructure. 72 SchemaRegistry schema_registry_; 73 MockConfigurationPolicyObserver observer_; 74 MockUserCloudPolicyStore* store_; // Not owned. 75 scoped_ptr<UserCloudPolicyManager> manager_; 76 77 private: 78 DISALLOW_COPY_AND_ASSIGN(UserCloudPolicyManagerTest); 79}; 80 81TEST_F(UserCloudPolicyManagerTest, DisconnectAndRemovePolicy) { 82 // Load policy, make sure it goes away when DisconnectAndRemovePolicy() is 83 // called. 84 CreateManager(); 85 store_->policy_map_.CopyFrom(policy_map_); 86 EXPECT_CALL(observer_, OnUpdatePolicy(manager_.get())); 87 store_->NotifyStoreLoaded(); 88 EXPECT_TRUE(expected_bundle_.Equals(manager_->policies())); 89 EXPECT_TRUE(manager_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); 90 EXPECT_CALL(*store_, Clear()); 91 manager_->DisconnectAndRemovePolicy(); 92 EXPECT_FALSE(manager_->core()->service()); 93} 94 95} // namespace 96} // namespace policy 97