1// Copyright 2014 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 "base/memory/scoped_ptr.h" 6#include "components/policy/core/common/policy_provider_android.h" 7#include "components/policy/core/common/policy_provider_android_delegate.h" 8#include "testing/gmock/include/gmock/gmock.h" 9#include "testing/gtest/include/gtest/gtest.h" 10 11namespace policy { 12 13namespace { 14 15// Helper to write a policy in |bundle| with less code. 16void SetPolicy(PolicyBundle* bundle, 17 const std::string& name, 18 const std::string& value) { 19 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) 20 .Set(name, 21 POLICY_LEVEL_MANDATORY, 22 POLICY_SCOPE_USER, 23 new base::StringValue(value), 24 NULL); 25} 26 27class MockPolicyProviderAndroidDelegate : public PolicyProviderAndroidDelegate { 28 public: 29 MockPolicyProviderAndroidDelegate() {} 30 virtual ~MockPolicyProviderAndroidDelegate() {} 31 32 MOCK_METHOD0(RefreshPolicies, void()); 33 MOCK_METHOD0(PolicyProviderShutdown, void()); 34 35 private: 36 DISALLOW_COPY_AND_ASSIGN(MockPolicyProviderAndroidDelegate); 37}; 38 39// Test fixture that makes sure that we always call Shutdown() before destroying 40// the policy provider. Allocate this just like a PolicyProviderAndroid and use 41// Get() to get the policy provider. 42class PolicyProviderAndroidTestFixture { 43 public: 44 PolicyProviderAndroidTestFixture() {} 45 ~PolicyProviderAndroidTestFixture() { 46 provider_.Shutdown(); 47 } 48 49 PolicyProviderAndroid* Get() { 50 return &provider_; 51 } 52 53 private: 54 PolicyProviderAndroid provider_; 55 DISALLOW_COPY_AND_ASSIGN(PolicyProviderAndroidTestFixture); 56}; 57 58} // namespace 59 60class PolicyProviderAndroidTest : public ::testing::Test { 61 protected: 62 PolicyProviderAndroidTest(); 63 virtual ~PolicyProviderAndroidTest(); 64 65 virtual void SetUp() OVERRIDE; 66 virtual void TearDown() OVERRIDE; 67 68 private: 69 DISALLOW_COPY_AND_ASSIGN(PolicyProviderAndroidTest); 70}; 71 72PolicyProviderAndroidTest::PolicyProviderAndroidTest() {} 73PolicyProviderAndroidTest::~PolicyProviderAndroidTest() {} 74 75void PolicyProviderAndroidTest::SetUp() {} 76 77void PolicyProviderAndroidTest::TearDown() { 78 PolicyProviderAndroid::SetShouldWaitForPolicy(false); 79} 80 81TEST_F(PolicyProviderAndroidTest, InitializationCompleted) { 82 PolicyProviderAndroidTestFixture provider; 83 EXPECT_TRUE(provider.Get()->IsInitializationComplete(POLICY_DOMAIN_CHROME)); 84 85 const PolicyBundle kEmptyBundle; 86 EXPECT_TRUE(provider.Get()->policies().Equals(kEmptyBundle)); 87} 88 89TEST_F(PolicyProviderAndroidTest, WaitForInitialization) { 90 PolicyProviderAndroid::SetShouldWaitForPolicy(true); 91 PolicyProviderAndroidTestFixture provider; 92 EXPECT_FALSE(provider.Get()->IsInitializationComplete(POLICY_DOMAIN_CHROME)); 93 94 scoped_ptr<PolicyBundle> policy_bundle(new PolicyBundle); 95 SetPolicy(policy_bundle.get(), "key", "value"); 96 PolicyBundle expected_policy_bundle; 97 expected_policy_bundle.CopyFrom(*policy_bundle); 98 provider.Get()->SetPolicies(policy_bundle.Pass()); 99 EXPECT_TRUE(provider.Get()->IsInitializationComplete(POLICY_DOMAIN_CHROME)); 100 EXPECT_TRUE(provider.Get()->policies().Equals(expected_policy_bundle)); 101} 102 103TEST_F(PolicyProviderAndroidTest, RefreshPolicies) { 104 MockPolicyProviderAndroidDelegate delegate; 105 PolicyProviderAndroidTestFixture provider; 106 107 provider.Get()->SetDelegate(&delegate); 108 109 scoped_ptr<PolicyBundle> policy_bundle(new PolicyBundle); 110 SetPolicy(policy_bundle.get(), "key", "old_value"); 111 PolicyBundle expected_policy_bundle; 112 expected_policy_bundle.CopyFrom(*policy_bundle); 113 provider.Get()->SetPolicies(policy_bundle.Pass()); 114 EXPECT_TRUE(provider.Get()->policies().Equals(expected_policy_bundle)); 115 116 EXPECT_CALL(delegate, RefreshPolicies()).Times(1); 117 provider.Get()->RefreshPolicies(); 118 119 policy_bundle.reset(new PolicyBundle); 120 SetPolicy(policy_bundle.get(), "key", "new_value"); 121 expected_policy_bundle.CopyFrom(*policy_bundle); 122 provider.Get()->SetPolicies(policy_bundle.Pass()); 123 EXPECT_TRUE(provider.Get()->policies().Equals(expected_policy_bundle)); 124 125 EXPECT_CALL(delegate, PolicyProviderShutdown()).Times(1); 126} 127 128} // namespace policy 129