13f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Use of this source code is governed by a BSD-style license that can be 321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// found in the LICENSE file. 421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/policy/asynchronous_policy_loader.h" 621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/policy/asynchronous_policy_provider.h" 721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/policy/asynchronous_policy_test_base.h" 821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/policy/mock_configuration_policy_provider.h" 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/policy/mock_configuration_policy_store.h" 1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "testing/gmock/include/gmock/gmock.h" 1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 1221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenusing ::testing::_; 1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenusing ::testing::InSequence; 1421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenusing ::testing::Return; 1521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 1621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsennamespace policy { 1721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 1821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass MockConfigurationPolicyObserver 1921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen : public ConfigurationPolicyProvider::Observer { 2021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public: 2121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen MOCK_METHOD0(OnUpdatePolicy, void()); 223f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen void OnProviderGoingAway() {} 2321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}; 2421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 2521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass AsynchronousPolicyLoaderTest : public AsynchronousPolicyTestBase { 2621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public: 2721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen AsynchronousPolicyLoaderTest() {} 2821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~AsynchronousPolicyLoaderTest() {} 2921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 3021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void SetUp() { 3121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen AsynchronousPolicyTestBase::SetUp(); 3221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen mock_provider_.reset(new MockConfigurationPolicyProvider()); 3321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 3521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen protected: 3621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen scoped_ptr<MockConfigurationPolicyProvider> mock_provider_; 3721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 3821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen private: 3921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DISALLOW_COPY_AND_ASSIGN(AsynchronousPolicyLoaderTest); 4021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}; 4121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 4221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenACTION(CreateTestDictionary) { 4321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return new DictionaryValue(); 4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 4521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenACTION_P(CreateSequencedTestDictionary, number) { 4721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DictionaryValue* test_dictionary = new DictionaryValue(); 4821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen test_dictionary->SetInteger("id", ++(*number)); 4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return test_dictionary; 5021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 5121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 5221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenACTION(RescheduleImmediatePolicyReload) { 5321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen *arg1 = base::TimeDelta(); 5421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return false; 5521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 5621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 5721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTEST_F(AsynchronousPolicyLoaderTest, InitialLoad) { 5821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DictionaryValue* template_dict(new DictionaryValue()); 5921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(*delegate_, Load()).WillOnce(Return(template_dict)); 6021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen scoped_refptr<AsynchronousPolicyLoader> loader = 6121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen new AsynchronousPolicyLoader(delegate_.release(), 10); 6221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loader->Init(); 6321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const DictionaryValue* loaded_dict(loader->policy()); 6421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(loaded_dict->Equals(template_dict)); 6521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 6621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 6721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Verify that the fallback policy requests are made. 6821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTEST_F(AsynchronousPolicyLoaderTest, InitialLoadWithFallback) { 6921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int dictionary_number = 0; 7021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen InSequence s; 7121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(*delegate_, Load()).WillOnce( 7221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen CreateSequencedTestDictionary(&dictionary_number)); 7321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(*delegate_, Load()).WillOnce( 7421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen CreateSequencedTestDictionary(&dictionary_number)); 7521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen scoped_refptr<AsynchronousPolicyLoader> loader = 7621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen new AsynchronousPolicyLoader(delegate_.release(), 10); 7721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loader->Init(); 7821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loop_.RunAllPending(); 7921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loader->Reload(); 8021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loop_.RunAllPending(); 8121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 8221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const DictionaryValue* loaded_dict(loader->policy()); 8321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int loaded_number; 8421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(loaded_dict->GetInteger("id", &loaded_number)); 8521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_EQ(dictionary_number, loaded_number); 8621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 8721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 8821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Ensure that calling stop on the loader stops subsequent reloads from 8921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// happening. 9021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTEST_F(AsynchronousPolicyLoaderTest, Stop) { 9121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ON_CALL(*delegate_, Load()).WillByDefault(CreateTestDictionary()); 9221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(*delegate_, Load()).Times(1); 9321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen scoped_refptr<AsynchronousPolicyLoader> loader = 9421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen new AsynchronousPolicyLoader(delegate_.release(), 10); 9521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loader->Init(); 9621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loop_.RunAllPending(); 9721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loader->Stop(); 9821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loop_.RunAllPending(); 9921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loader->Reload(); 10021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loop_.RunAllPending(); 10121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 10221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 10321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Verifies that the provider is notified upon policy reload, but only 10421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// if the policy changed. 10521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTEST_F(AsynchronousPolicyLoaderTest, ProviderNotificationOnPolicyChange) { 10621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen InSequence s; 10721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen MockConfigurationPolicyObserver observer; 10821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int dictionary_number_1 = 0; 10921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int dictionary_number_2 = 0; 11021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(*delegate_, Load()).WillOnce( 11121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen CreateSequencedTestDictionary(&dictionary_number_1)); 11221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(*delegate_, Load()).WillOnce( 11321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen CreateSequencedTestDictionary(&dictionary_number_2)); 11421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(observer, OnUpdatePolicy()).Times(0); 11521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(*delegate_, Load()).WillOnce( 11621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen CreateSequencedTestDictionary(&dictionary_number_2)); 11721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(observer, OnUpdatePolicy()).Times(1); 11821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(*delegate_, Load()).WillOnce( 11921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen CreateSequencedTestDictionary(&dictionary_number_1)); 12021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen scoped_refptr<AsynchronousPolicyLoader> loader = 12121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen new AsynchronousPolicyLoader(delegate_.release(), 10); 12221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen AsynchronousPolicyProvider provider(NULL, loader); 12321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // |registrar| must be declared last so that it is destroyed first. 12421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ConfigurationPolicyObserverRegistrar registrar; 1253f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen registrar.Init(&provider, &observer); 12621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loop_.RunAllPending(); 12721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loader->Reload(); 12821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loop_.RunAllPending(); 12921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loader->Reload(); 13021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loop_.RunAllPending(); 13121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loader->Reload(); 13221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loop_.RunAllPending(); 13321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 13421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 13521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} // namespace policy 136