1 // Copyright (c) 2012 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 "chrome/browser/policy/cloud/user_cloud_policy_manager.h" 6 7 #include "base/basictypes.h" 8 #include "base/callback.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "base/message_loop/message_loop.h" 11 #include "chrome/browser/policy/cloud/mock_user_cloud_policy_store.h" 12 #include "chrome/browser/policy/external_data_fetcher.h" 13 #include "chrome/browser/policy/mock_configuration_policy_provider.h" 14 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gtest/include/gtest/gtest.h" 16 17 namespace em = enterprise_management; 18 19 using testing::AnyNumber; 20 using testing::AtLeast; 21 using testing::Mock; 22 using testing::_; 23 24 namespace policy { 25 namespace { 26 27 class UserCloudPolicyManagerTest : public testing::Test { 28 protected: 29 UserCloudPolicyManagerTest() 30 : store_(NULL) {} 31 32 virtual void SetUp() OVERRIDE { 33 // Set up a policy map for testing. 34 policy_map_.Set("key", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 35 base::Value::CreateStringValue("value"), NULL); 36 expected_bundle_.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) 37 .CopyFrom(policy_map_); 38 } 39 40 virtual void TearDown() OVERRIDE { 41 if (manager_) { 42 manager_->RemoveObserver(&observer_); 43 manager_->CloudPolicyManager::Shutdown(); 44 manager_->BrowserContextKeyedService::Shutdown(); 45 } 46 } 47 48 void CreateManager() { 49 store_ = new MockUserCloudPolicyStore(); 50 EXPECT_CALL(*store_, Load()); 51 manager_.reset( 52 new UserCloudPolicyManager(NULL, 53 scoped_ptr<UserCloudPolicyStore>(store_))); 54 manager_->Init(); 55 manager_->AddObserver(&observer_); 56 Mock::VerifyAndClearExpectations(store_); 57 } 58 59 // Required by the refresh scheduler that's created by the manager. 60 base::MessageLoop loop_; 61 62 // Convenience policy objects. 63 PolicyMap policy_map_; 64 PolicyBundle expected_bundle_; 65 66 // Policy infrastructure. 67 MockConfigurationPolicyObserver observer_; 68 MockUserCloudPolicyStore* store_; 69 scoped_ptr<UserCloudPolicyManager> manager_; 70 71 private: 72 DISALLOW_COPY_AND_ASSIGN(UserCloudPolicyManagerTest); 73 }; 74 75 TEST_F(UserCloudPolicyManagerTest, DisconnectAndRemovePolicy) { 76 // Load policy, make sure it goes away when DisconnectAndRemovePolicy() is 77 // called. 78 CreateManager(); 79 store_->policy_map_.CopyFrom(policy_map_); 80 EXPECT_CALL(observer_, OnUpdatePolicy(manager_.get())); 81 store_->NotifyStoreLoaded(); 82 EXPECT_TRUE(expected_bundle_.Equals(manager_->policies())); 83 EXPECT_TRUE(manager_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); 84 EXPECT_CALL(*store_, Clear()); 85 manager_->DisconnectAndRemovePolicy(); 86 EXPECT_FALSE(manager_->core()->service()); 87 } 88 89 } // namespace 90 } // namespace policy 91