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: 24 FileBasedPolicyProviderDelegateMock() 25 : FileBasedPolicyProvider::ProviderDelegate(FilePath()) {} 26 MOCK_METHOD0(Load, DictionaryValue*()); 27 MOCK_METHOD0(GetLastModification, base::Time()); 28 }; 29 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 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