• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 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/asynchronous_policy_loader.h"
6 #include "chrome/browser/policy/asynchronous_policy_test_base.h"
7 #include "chrome/browser/policy/configuration_policy_pref_store.h"
8 #include "chrome/browser/policy/configuration_policy_store_interface.h"
9 #include "chrome/browser/policy/file_based_policy_provider.h"
10 #include "chrome/browser/policy/mock_configuration_policy_store.h"
11 #include "policy/policy_constants.h"
12 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 
15 using testing::_;
16 using testing::InSequence;
17 using testing::Return;
18 
19 namespace policy {
20 
21 class FileBasedPolicyProviderDelegateMock
22     : public FileBasedPolicyProvider::ProviderDelegate {
23  public:
FileBasedPolicyProviderDelegateMock()24   FileBasedPolicyProviderDelegateMock()
25       : FileBasedPolicyProvider::ProviderDelegate(FilePath()) {}
26   MOCK_METHOD0(Load, DictionaryValue*());
27   MOCK_METHOD0(GetLastModification, base::Time());
28 };
29 
TEST_F(AsynchronousPolicyTestBase,ProviderInit)30 TEST_F(AsynchronousPolicyTestBase, ProviderInit) {
31   base::Time last_modified;
32   FileBasedPolicyProviderDelegateMock* provider_delegate =
33       new FileBasedPolicyProviderDelegateMock();
34   EXPECT_CALL(*provider_delegate, GetLastModification()).WillRepeatedly(
35       Return(last_modified));
36   InSequence s;
37   EXPECT_CALL(*provider_delegate, Load()).WillOnce(Return(
38       new DictionaryValue));
39   DictionaryValue* policies = new DictionaryValue();
40   policies->SetBoolean(policy::key::kSyncDisabled, true);
41   // A second call to Load gets triggered during the provider's construction
42   // when the file watcher is initialized, since this file may have changed
43   // between the initial load and creating watcher.
44   EXPECT_CALL(*provider_delegate, Load()).WillOnce(Return(policies));
45   FileBasedPolicyProvider provider(
46       ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(),
47       provider_delegate);
48   loop_.RunAllPending();
49   EXPECT_CALL(*store_, Apply(policy::kPolicySyncDisabled, _)).Times(1);
50   provider.Provide(store_.get());
51 }
52 
TEST_F(AsynchronousPolicyTestBase,ProviderRefresh)53 TEST_F(AsynchronousPolicyTestBase, ProviderRefresh) {
54   base::Time last_modified;
55   FileBasedPolicyProviderDelegateMock* provider_delegate =
56       new FileBasedPolicyProviderDelegateMock();
57   EXPECT_CALL(*provider_delegate, GetLastModification()).WillRepeatedly(
58       Return(last_modified));
59   InSequence s;
60   EXPECT_CALL(*provider_delegate, Load()).WillOnce(Return(
61       new DictionaryValue));
62   FileBasedPolicyProvider file_based_provider(
63           ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(),
64           provider_delegate);
65   // A second call to Load gets triggered during the provider's construction
66   // when the file watcher is initialized, since this file may have changed
67   // between the initial load and creating watcher.
68   EXPECT_CALL(*provider_delegate, Load()).WillOnce(Return(
69       new DictionaryValue));
70   loop_.RunAllPending();
71   // A third and final call to Load is made by the explicit Reload. This
72   // should be the one that provides the current policy.
73   DictionaryValue* policies = new DictionaryValue();
74   policies->SetBoolean(policy::key::kSyncDisabled, true);
75   EXPECT_CALL(*provider_delegate, Load()).WillOnce(Return(policies));
76   file_based_provider.loader()->Reload();
77   loop_.RunAllPending();
78   EXPECT_CALL(*store_, Apply(policy::kPolicySyncDisabled, _)).Times(1);
79   file_based_provider.Provide(store_.get());
80 }
81 
82 }  // namespace policy
83