Home | History | Annotate | Download | only in cloud
      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