device_local_account_policy_service_unittest.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
1a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Copyright (c) 2012 The Chromium Authors. All rights reserved. 28bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 38bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// found in the LICENSE file. 48bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chrome/browser/chromeos/policy/device_local_account_policy_service.h" 6e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 78bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/bind.h" 88bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/bind_helpers.h" 98bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/callback.h" 108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/file_util.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/files/file_path.h" 128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/message_loop/message_loop.h" 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/path_service.h" 168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/run_loop.h" 178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/strings/stringprintf.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/test/scoped_path_override.h" 20a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/test/test_simple_task_runner.h" 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/chromeos/policy/device_local_account.h" 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/policy/device_local_account_policy_provider.h" 23a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" 24a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chrome/browser/chromeos/settings/cros_settings.h" 258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h" 268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_test_helper.h" 278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/common/chrome_paths.h" 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/chromeos_paths.h" 291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chromeos/dbus/power_policy_controller.h" 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_client.h" 318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_constants.h" 328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_service.h" 33a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "components/policy/core/common/cloud/mock_device_management_service.h" 348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/policy/core/common/cloud/policy_builder.h" 358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/policy/core/common/external_data_fetcher.h" 368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/policy/core/common/mock_configuration_policy_provider.h" 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/policy/core/common/policy_bundle.h" 388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/policy/core/common/policy_map.h" 398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/policy/core/common/schema_registry.h" 408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/url_request/url_request_test_util.h" 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "policy/policy_constants.h" 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "policy/proto/cloud_policy.pb.h" 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing testing::AnyNumber; 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing testing::AtLeast; 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing testing::Mock; 498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)using testing::SaveArg; 508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)using testing::_; 518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)namespace em = enterprise_management; 538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace policy { 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace { 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const char kAccount1[] = "account1@localhost"; 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const char kAccount2[] = "account2@localhost"; 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kAccount3[] = "account3@localhost"; 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kExtensionID[] = "kbmnembihfiondgfjekmnmcbddelicoi"; 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kExtensionVersion[] = "1.0.0.0"; 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kExtensionCRXPath[] = "extensions/hosted_app.crx"; 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kUpdateURL[] = "https://clients2.google.com/service/update2/crx"; 661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace 688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class MockDeviceLocalAccountPolicyServiceObserver 708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) : public DeviceLocalAccountPolicyService::Observer { 718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public: 728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) MOCK_METHOD1(OnPolicyUpdated, void(const std::string&)); 738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) MOCK_METHOD0(OnDeviceLocalAccountsChanged, void(void)); 748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}; 758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class DeviceLocalAccountPolicyServiceTestBase 778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) : public chromeos::DeviceSettingsTestBase { 788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public: 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DeviceLocalAccountPolicyServiceTestBase(); 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetUp() OVERRIDE; 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void TearDown() OVERRIDE; 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void CreatePolicyService(); 85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void InstallDeviceLocalAccountPolicy(const std::string& account_id); 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void AddDeviceLocalAccountToPolicy(const std::string& account_id); 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void InstallDevicePolicy(); 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string account_1_user_id_; 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string account_2_user_id_; 92a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PolicyMap expected_policy_map_; 946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) UserPolicyBuilder device_local_account_policy_; 95a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch chromeos::CrosSettings cros_settings_; 966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_refptr<base::TestSimpleTaskRunner> extension_cache_task_runner_; 976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) MockDeviceManagementService mock_device_management_service_; 9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<DeviceLocalAccountPolicyService> service_; 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) private: 1018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyServiceTestBase); 1028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}; 10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class DeviceLocalAccountPolicyServiceTest 1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : public DeviceLocalAccountPolicyServiceTestBase { 1068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public: 1078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) MOCK_METHOD1(OnRefreshDone, void(bool)); 1088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 109a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch protected: 1108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DeviceLocalAccountPolicyServiceTest(); 111a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void SetUp() OVERRIDE; 1138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void TearDown() OVERRIDE; 1148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void InstallDevicePolicy() OVERRIDE; 11646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MockDeviceLocalAccountPolicyServiceObserver service_observer_; 11846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyServiceTest); 1218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}; 1228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 123a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochDeviceLocalAccountPolicyServiceTestBase:: 124a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch DeviceLocalAccountPolicyServiceTestBase() 125010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : account_1_user_id_(GenerateDeviceLocalAccountUserId( 126a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kAccount1, 127a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch DeviceLocalAccount::TYPE_PUBLIC_SESSION)), 128a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch account_2_user_id_(GenerateDeviceLocalAccountUserId( 129a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kAccount2, 130a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch DeviceLocalAccount::TYPE_PUBLIC_SESSION)), 1311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) cros_settings_(&device_settings_service_), 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_cache_task_runner_(new base::TestSimpleTaskRunner) { 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 13546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void DeviceLocalAccountPolicyServiceTestBase::SetUp() { 1368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) chromeos::DeviceSettingsTestBase::SetUp(); 1378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) expected_policy_map_.Set(key::kDisableSpdy, 1398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 1408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) POLICY_SCOPE_USER, 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new base::FundamentalValue(true), 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 1438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) device_local_account_policy_.payload().mutable_disablespdy()->set_value( 145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) true); 146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) device_local_account_policy_.policy_data().set_policy_type( 147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) dm_protocol::kChromePublicAccountPolicyType); 1486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void DeviceLocalAccountPolicyServiceTestBase::TearDown() { 1516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) service_->Shutdown(); 152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) service_.reset(); 153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) extension_cache_task_runner_->RunUntilIdle(); 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::DeviceSettingsTestBase::TearDown(); 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DeviceLocalAccountPolicyServiceTestBase::CreatePolicyService() { 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service_.reset(new DeviceLocalAccountPolicyService( 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &device_settings_test_helper_, 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &device_settings_service_, 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &cros_settings_, 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) loop_.message_loop_proxy(), 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extension_cache_task_runner_, 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) loop_.message_loop_proxy(), 165010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) loop_.message_loop_proxy(), 1666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new net::TestURLRequestContextGetter( 167010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::MessageLoop::current()->message_loop_proxy()))); 1686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 169010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 170010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void DeviceLocalAccountPolicyServiceTestBase:: 1718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) InstallDeviceLocalAccountPolicy(const std::string& account_id) { 172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch device_local_account_policy_.policy_data().set_settings_entity_id(account_id); 1738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) device_local_account_policy_.policy_data().set_username(account_id); 1748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) device_local_account_policy_.Build(); 175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) device_settings_test_helper_.set_device_local_account_policy_blob( 176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) account_id, device_local_account_policy_.GetBlob()); 17746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 1788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void DeviceLocalAccountPolicyServiceTestBase::AddDeviceLocalAccountToPolicy( 18046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& account_id) { 18146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) em::DeviceLocalAccountInfoProto* account = 1821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) device_policy_.payload().mutable_device_local_accounts()->add_account(); 1831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) account->set_account_id(account_id); 1848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) account->set_type( 185a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch em::DeviceLocalAccountInfoProto::ACCOUNT_TYPE_PUBLIC_SESSION); 1868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 18746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void DeviceLocalAccountPolicyServiceTestBase::InstallDevicePolicy() { 1898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) device_policy_.Build(); 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ReloadDeviceSettings(); 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)DeviceLocalAccountPolicyServiceTest::DeviceLocalAccountPolicyServiceTest() { 1958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) CreatePolicyService(); 19646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 19746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 19846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void DeviceLocalAccountPolicyServiceTest::SetUp() { 19946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DeviceLocalAccountPolicyServiceTestBase::SetUp(); 20046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) service_->AddObserver(&service_observer_); 20146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 20246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 20346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void DeviceLocalAccountPolicyServiceTest::TearDown() { 20446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) service_->RemoveObserver(&service_observer_); 20546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DeviceLocalAccountPolicyServiceTestBase::TearDown(); 20646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 20746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void DeviceLocalAccountPolicyServiceTest::InstallDevicePolicy() { 209a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_CALL(service_observer_, OnDeviceLocalAccountsChanged()); 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DeviceLocalAccountPolicyServiceTestBase::InstallDevicePolicy(); 2118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Mock::VerifyAndClearExpectations(&service_observer_); 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST_F(DeviceLocalAccountPolicyServiceTest, NoAccounts) { 2158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_FALSE(service_->GetBrokerForUser(account_1_user_id_)); 2168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 2171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST_F(DeviceLocalAccountPolicyServiceTest, GetBroker) { 219a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch InstallDeviceLocalAccountPolicy(kAccount1); 2208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) AddDeviceLocalAccountToPolicy(kAccount1); 2218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); 2228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) InstallDevicePolicy(); 2236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DeviceLocalAccountPolicyBroker* broker = 225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->GetBrokerForUser(account_1_user_id_); 226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(broker); 2276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(account_1_user_id_, broker->user_id()); 2286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(broker->core()->store()); 2296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(CloudPolicyStore::STATUS_OK, broker->core()->store()->status()); 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(broker->core()->client()); 231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(broker->core()->store()->policy_map().empty()); 2321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 234a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(DeviceLocalAccountPolicyServiceTest, LoadNoPolicy) { 2358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) AddDeviceLocalAccountToPolicy(kAccount1); 2368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); 2378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) InstallDevicePolicy(); 2388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DeviceLocalAccountPolicyBroker* broker = 240a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch service_->GetBrokerForUser(account_1_user_id_); 2416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(broker); 2426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(account_1_user_id_, broker->user_id()); 2438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(broker->core()->store()); 2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(CloudPolicyStore::STATUS_LOAD_ERROR, 2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) broker->core()->store()->status()); 2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(broker->core()->store()->policy_map().empty()); 2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(service_->IsPolicyAvailableForUser(account_1_user_id_)); 2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(DeviceLocalAccountPolicyServiceTest, LoadValidationFailure) { 2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) device_local_account_policy_.policy_data().set_policy_type( 2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dm_protocol::kChromeUserPolicyType); 2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) InstallDeviceLocalAccountPolicy(kAccount1); 2548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) AddDeviceLocalAccountToPolicy(kAccount1); 2558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); 2568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) InstallDevicePolicy(); 2578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DeviceLocalAccountPolicyBroker* broker = 2598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service_->GetBrokerForUser(account_1_user_id_); 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(broker); 2618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(account_1_user_id_, broker->user_id()); 262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(broker->core()->store()); 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, 264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) broker->core()->store()->status()); 2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(broker->core()->store()->policy_map().empty()); 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(service_->IsPolicyAvailableForUser(account_1_user_id_)); 2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 26946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(DeviceLocalAccountPolicyServiceTest, LoadPolicy) { 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) InstallDeviceLocalAccountPolicy(kAccount1); 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddDeviceLocalAccountToPolicy(kAccount1); 272a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); 273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InstallDevicePolicy(); 274a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DeviceLocalAccountPolicyBroker* broker = 2768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service_->GetBrokerForUser(account_1_user_id_); 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(broker); 2788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(account_1_user_id_, broker->user_id()); 2798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(broker->core()->store()); 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(CloudPolicyStore::STATUS_OK, broker->core()->store()->status()); 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(broker->core()->store()->policy()); 282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(device_local_account_policy_.policy_data().SerializeAsString(), 2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) broker->core()->store()->policy()->SerializeAsString()); 2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(expected_policy_map_.Equals( 2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) broker->core()->store()->policy_map())); 28646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(service_->IsPolicyAvailableForUser(account_1_user_id_)); 2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 289a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(DeviceLocalAccountPolicyServiceTest, StoreValidationFailure) { 290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddDeviceLocalAccountToPolicy(kAccount1); 291a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); 292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InstallDevicePolicy(); 2938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Mock::VerifyAndClearExpectations(&service_observer_); 2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DeviceLocalAccountPolicyBroker* broker = 2968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service_->GetBrokerForUser(account_1_user_id_); 29746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(broker); 298a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(account_1_user_id_, broker->user_id()); 29946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(broker->core()->store()); 3008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) device_local_account_policy_.policy_data().set_policy_type( 3028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) dm_protocol::kChromeUserPolicyType); 3038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) device_local_account_policy_.Build(); 3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) broker->core()->store()->Store(device_local_account_policy_.policy()); 30546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); 3068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) FlushDeviceSettings(); 30746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 30846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, 30946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) broker->core()->store()->status()); 310a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_WRONG_POLICY_TYPE, 31146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) broker->core()->store()->validation_status()); 312a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_FALSE(service_->IsPolicyAvailableForUser(account_1_user_id_)); 31346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 31446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST_F(DeviceLocalAccountPolicyServiceTest, StorePolicy) { 3168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) AddDeviceLocalAccountToPolicy(kAccount1); 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); 3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) InstallDevicePolicy(); 3198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Mock::VerifyAndClearExpectations(&service_observer_); 3208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DeviceLocalAccountPolicyBroker* broker = 3228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service_->GetBrokerForUser(account_1_user_id_); 3238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(broker); 3248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(account_1_user_id_, broker->user_id()); 3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(broker->core()->store()); 3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) device_local_account_policy_.policy_data().set_settings_entity_id(kAccount1); 3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) device_local_account_policy_.policy_data().set_username(kAccount1); 3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) device_local_account_policy_.Build(); 3305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) broker->core()->store()->Store(device_local_account_policy_.policy()); 3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); 3328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) FlushDeviceSettings(); 3338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(CloudPolicyStore::STATUS_OK, broker->core()->store()->status()); 33546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(broker->core()->store()->policy()); 336a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(device_local_account_policy_.policy_data().SerializeAsString(), 33746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) broker->core()->store()->policy()->SerializeAsString()); 33846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(expected_policy_map_.Equals( 339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch broker->core()->store()->policy_map())); 340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(service_->IsPolicyAvailableForUser(account_1_user_id_)); 341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 3421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(DeviceLocalAccountPolicyServiceTest, DevicePolicyChange) { 3441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InstallDeviceLocalAccountPolicy(kAccount1); 3451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddDeviceLocalAccountToPolicy(kAccount1); 34646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); 34746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) InstallDevicePolicy(); 3488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) device_policy_.payload().mutable_device_local_accounts()->clear_account(); 35046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) InstallDevicePolicy(); 351a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(service_->GetBrokerForUser(account_1_user_id_)); 3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 35446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 35546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(DeviceLocalAccountPolicyServiceTest, DuplicateAccounts) { 35646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) InstallDeviceLocalAccountPolicy(kAccount1); 35746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) AddDeviceLocalAccountToPolicy(kAccount1); 35846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); 35946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) InstallDevicePolicy(); 36046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Mock::VerifyAndClearExpectations(&service_observer_); 36146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 36246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Add a second entry with a duplicate account name to device policy. 36346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) AddDeviceLocalAccountToPolicy(kAccount1); 3648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) InstallDevicePolicy(); 3658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Make sure the broker is accessible and policy got loaded. 367a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch DeviceLocalAccountPolicyBroker* broker = 3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service_->GetBrokerForUser(account_1_user_id_); 3691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(broker); 3701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(account_1_user_id_, broker->user_id()); 3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(broker->core()->store()); 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(CloudPolicyStore::STATUS_OK, broker->core()->store()->status()); 3738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(broker->core()->store()->policy()); 3748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(device_local_account_policy_.policy_data().SerializeAsString(), 375a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch broker->core()->store()->policy()->SerializeAsString()); 3768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(expected_policy_map_.Equals( 3778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) broker->core()->store()->policy_map())); 3788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(service_->IsPolicyAvailableForUser(account_1_user_id_)); 3798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 3808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST_F(DeviceLocalAccountPolicyServiceTest, FetchPolicy) { 3828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) InstallDeviceLocalAccountPolicy(kAccount1); 383a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch AddDeviceLocalAccountToPolicy(kAccount1); 3848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); 3858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) InstallDevicePolicy(); 3868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DeviceLocalAccountPolicyBroker* broker = 388a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch service_->GetBrokerForUser(account_1_user_id_); 389a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(broker); 3908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service_->Connect(&mock_device_management_service_); 39246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(broker->core()->client()); 39346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch em::DeviceManagementRequest request; 39546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) em::DeviceManagementResponse response; 39646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) response.mutable_policy_response()->add_response()->CopyFrom( 39746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) device_local_account_policy_.policy()); 3988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(mock_device_management_service_, 3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH, _)) 4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .WillOnce(mock_device_management_service_.SucceedJob(response)); 4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(mock_device_management_service_, 4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartJob(dm_protocol::kValueRequestPolicy, 4038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) std::string(), std::string(), 4046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) device_policy_.policy_data().request_token(), 4058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) dm_protocol::kValueUserAffiliationManaged, 4068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) device_policy_.policy_data().device_id(), 40746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) _)) 40846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) .WillOnce(SaveArg<6>(&request)); 40946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); 41046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) broker->core()->client()->FetchPolicy(); 411a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch FlushDeviceSettings(); 4125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Mock::VerifyAndClearExpectations(&service_observer_); 4135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Mock::VerifyAndClearExpectations(&mock_device_management_service_); 4145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(request.has_policy_request()); 41546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(1, request.policy_request().request_size()); 41646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(dm_protocol::kChromePublicAccountPolicyType, 417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch request.policy_request().request(0).policy_type()); 41846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(request.policy_request().request(0).has_machine_id()); 41946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(kAccount1, 4201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci request.policy_request().request(0).settings_entity_id()); 42146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(broker->core()->store()); 42346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(CloudPolicyStore::STATUS_OK, 42446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) broker->core()->store()->status()); 42546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(broker->core()->store()->policy()); 42646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(device_local_account_policy_.policy_data().SerializeAsString(), 42746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) broker->core()->store()->policy()->SerializeAsString()); 42846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(expected_policy_map_.Equals( 42946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) broker->core()->store()->policy_map())); 43046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(service_->IsPolicyAvailableForUser(account_1_user_id_)); 4318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 43246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST_F(DeviceLocalAccountPolicyServiceTest, RefreshPolicy) { 4348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) InstallDeviceLocalAccountPolicy(kAccount1); 4358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) AddDeviceLocalAccountToPolicy(kAccount1); 4368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); 4378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) InstallDevicePolicy(); 438a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 439a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch DeviceLocalAccountPolicyBroker* broker = 44046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) service_->GetBrokerForUser(account_1_user_id_); 4415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(broker); 442a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 4435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) service_->Connect(&mock_device_management_service_); 444a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(broker->core()->service()); 4455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) em::DeviceManagementResponse response; 4475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) response.mutable_policy_response()->add_response()->CopyFrom( 4485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) device_local_account_policy_.policy()); 4495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(mock_device_management_service_, CreateJob(_, _)) 4505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .WillOnce(mock_device_management_service_.SucceedJob(response)); 4515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(mock_device_management_service_, StartJob(_, _, _, _, _, _, _)); 4525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(*this, OnRefreshDone(true)).Times(1); 4535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); 454a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch broker->core()->service()->RefreshPolicy( 4555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&DeviceLocalAccountPolicyServiceTest::OnRefreshDone, 4565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Unretained(this))); 4575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FlushDeviceSettings(); 4588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Mock::VerifyAndClearExpectations(&service_observer_); 4598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Mock::VerifyAndClearExpectations(this); 460a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch Mock::VerifyAndClearExpectations(&mock_device_management_service_); 4618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(broker->core()->store()); 463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(CloudPolicyStore::STATUS_OK, 464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch broker->core()->store()->status()); 465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(expected_policy_map_.Equals( 466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch broker->core()->store()->policy_map())); 467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(service_->IsPolicyAvailableForUser(account_1_user_id_)); 468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 46946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 47046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class DeviceLocalAccountPolicyExtensionCacheTest 47146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : public DeviceLocalAccountPolicyServiceTestBase { 47246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) protected: 47346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DeviceLocalAccountPolicyExtensionCacheTest(); 4748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void SetUp() OVERRIDE; 476a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 4778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::FilePath GetCacheDirectoryForAccountID(const std::string& account_id); 4781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ScopedTempDir cache_root_dir_; 480a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_ptr<base::ScopedPathOverride> cache_root_dir_override_; 481a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 4828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::FilePath cache_dir_1_; 4838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::FilePath cache_dir_2_; 4848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::FilePath cache_dir_3_; 4858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 48646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 4878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyExtensionCacheTest); 4888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}; 4898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)DeviceLocalAccountPolicyExtensionCacheTest:: 4918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DeviceLocalAccountPolicyExtensionCacheTest() { 4928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 493a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 494a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid DeviceLocalAccountPolicyExtensionCacheTest::SetUp() { 4951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DeviceLocalAccountPolicyServiceTestBase::SetUp(); 4968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(cache_root_dir_.CreateUniqueTempDir()); 4975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cache_root_dir_override_.reset(new base::ScopedPathOverride( 4981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::DIR_DEVICE_LOCAL_ACCOUNT_EXTENSIONS, 4995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cache_root_dir_.path())); 5001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) cache_dir_1_ = GetCacheDirectoryForAccountID(kAccount1); 502a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch cache_dir_2_ = GetCacheDirectoryForAccountID(kAccount2); 503a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch cache_dir_3_ = GetCacheDirectoryForAccountID(kAccount3); 5048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) em::StringList* forcelist = device_local_account_policy_.payload() 5068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) .mutable_extensioninstallforcelist()->mutable_value(); 5078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) forcelist->add_entries(base::StringPrintf("%s;%s", kExtensionID, kUpdateURL)); 5088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 5098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)base::FilePath DeviceLocalAccountPolicyExtensionCacheTest:: 5118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) GetCacheDirectoryForAccountID(const std::string& account_id) { 5128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return cache_root_dir_.path().Append(base::HexEncode(account_id.c_str(), 513a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch account_id.size())); 514a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 5158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Verifies that during startup, orphaned cache directories are deleted, 5178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// cache directories belonging to an existing account are preserved and missing 5188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// cache directories are created. Also verifies that when startup is complete, 5198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// the caches for all existing accounts are running. 5208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST_F(DeviceLocalAccountPolicyExtensionCacheTest, Startup) { 5211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath test_data_dir; 5228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)); 5238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const base::FilePath source_crx_file = 5246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) test_data_dir.Append(kExtensionCRXPath); 5256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const std::string target_crx_file_name = 5266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::StringPrintf("%s-%s.crx", kExtensionID, kExtensionVersion); 5276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 5286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Create and pre-populate a cache directory for account 1. 5298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(base::CreateDirectory(cache_dir_1_)); 5308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(CopyFile(source_crx_file, 5316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) cache_dir_1_.Append(target_crx_file_name))); 5326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 533a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Create and pre-populate a cache directory for account 3. 5348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(base::CreateDirectory(cache_dir_3_)); 5358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(CopyFile(source_crx_file, 5368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) cache_dir_3_.Append(target_crx_file_name))); 537f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Add accounts 1 and 2 to device policy. 5398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) InstallDeviceLocalAccountPolicy(kAccount1); 5408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) InstallDeviceLocalAccountPolicy(kAccount2); 5416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) AddDeviceLocalAccountToPolicy(kAccount1); 5426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) AddDeviceLocalAccountToPolicy(kAccount2); 5436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) InstallDevicePolicy(); 5446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 5456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Create the DeviceLocalAccountPolicyService, allowing it to finish the 5466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // deletion of orphaned cache directories. 5476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) CreatePolicyService(); 5486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) FlushDeviceSettings(); 549a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch extension_cache_task_runner_->RunUntilIdle(); 5506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 5518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Verify that the cache directory for account 1 and its contents still exist. 5528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(base::DirectoryExists(cache_dir_1_)); 5538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(ContentsEqual(source_crx_file, 5548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) cache_dir_1_.Append(target_crx_file_name))); 5558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 556a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Verify that a cache directory for account 2 was created. 557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(base::DirectoryExists(cache_dir_2_)); 558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Verify that the cache directory for account 3 was deleted. 560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(base::DirectoryExists(cache_dir_3_)); 561116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Verify that the cache for account 1 has been started. 563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DeviceLocalAccountPolicyBroker* broker = 564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->GetBrokerForUser(account_1_user_id_); 565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(broker); 566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(broker->extension_loader()->IsCacheRunning()); 567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Verify that the cache for account 2 has been started. 569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch broker = service_->GetBrokerForUser(account_2_user_id_); 570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(broker); 571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(broker->extension_loader()->IsCacheRunning()); 572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Verifies that while the deletion of orphaned cache directories is in 575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// progress, the caches for accounts which existed before the deletion started 576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// are running but caches for newly added accounts are not started. 577116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(DeviceLocalAccountPolicyExtensionCacheTest, RaceAgainstOrphanDeletion) { 578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Add account 1 to device policy. 579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch InstallDeviceLocalAccountPolicy(kAccount1); 580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AddDeviceLocalAccountToPolicy(kAccount1); 581116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch InstallDevicePolicy(); 582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Create the DeviceLocalAccountPolicyService, triggering the deletion of 584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // orphaned cache directories. 585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreatePolicyService(); 586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FlushDeviceSettings(); 587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Verify that the cache for account 1 has been started as it is unaffected by 589a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // the orphan deletion. 590 DeviceLocalAccountPolicyBroker* broker = 591 service_->GetBrokerForUser(account_1_user_id_); 592 ASSERT_TRUE(broker); 593 EXPECT_TRUE(broker->extension_loader()->IsCacheRunning()); 594 595 // Add account 2 to device policy. 596 InstallDeviceLocalAccountPolicy(kAccount2); 597 AddDeviceLocalAccountToPolicy(kAccount2); 598 InstallDevicePolicy(); 599 600 // Verify that the cache for account 2 has not been started yet as the orphan 601 // deletion is still in progress. 602 broker = service_->GetBrokerForUser(account_2_user_id_); 603 ASSERT_TRUE(broker); 604 EXPECT_FALSE(broker->extension_loader()->IsCacheRunning()); 605 606 // Allow the orphan deletion to finish. 607 extension_cache_task_runner_->RunUntilIdle(); 608 base::RunLoop().RunUntilIdle(); 609 610 // Verify that the cache for account 2 has been started. 611 EXPECT_TRUE(broker->extension_loader()->IsCacheRunning()); 612} 613 614// Verifies that while the shutdown of a cache is in progress, no new cache is 615// started if an account with the same ID is re-added. 616TEST_F(DeviceLocalAccountPolicyExtensionCacheTest, RaceAgainstCacheShutdown) { 617 // Add account 1 to device policy. 618 InstallDeviceLocalAccountPolicy(kAccount1); 619 AddDeviceLocalAccountToPolicy(kAccount1); 620 InstallDevicePolicy(); 621 622 // Create the DeviceLocalAccountPolicyService, allowing it to finish the 623 // deletion of orphaned cache directories. 624 CreatePolicyService(); 625 FlushDeviceSettings(); 626 extension_cache_task_runner_->RunUntilIdle(); 627 628 // Remove account 1 from device policy, triggering a shutdown of its cache. 629 device_policy_.payload().mutable_device_local_accounts()->clear_account(); 630 InstallDevicePolicy(); 631 632 // Re-add account 1 to device policy. 633 AddDeviceLocalAccountToPolicy(kAccount1); 634 InstallDevicePolicy(); 635 636 // Verify that the cache for account 1 has not been started yet as the 637 // shutdown of a previous cache for this account ID is still in progress. 638 DeviceLocalAccountPolicyBroker* broker = 639 service_->GetBrokerForUser(account_1_user_id_); 640 ASSERT_TRUE(broker); 641 EXPECT_FALSE(broker->extension_loader()->IsCacheRunning()); 642 643 // Allow the cache shutdown to finish. 644 extension_cache_task_runner_->RunUntilIdle(); 645 base::RunLoop().RunUntilIdle(); 646 647 // Verify that the cache directory for account 1 still exists. 648 EXPECT_TRUE(base::DirectoryExists(cache_dir_1_)); 649 650 // Verify that the cache for account 1 has been started, reusing the existing 651 // cache directory. 652 EXPECT_TRUE(broker->extension_loader()->IsCacheRunning()); 653} 654 655// Verifies that while the deletion of an obsolete cache directory is in 656// progress, no new cache is started if an account with the same ID is re-added. 657TEST_F(DeviceLocalAccountPolicyExtensionCacheTest, 658 RaceAgainstObsoleteDeletion) { 659 // Add account 1 to device policy. 660 InstallDeviceLocalAccountPolicy(kAccount1); 661 AddDeviceLocalAccountToPolicy(kAccount1); 662 InstallDevicePolicy(); 663 664 // Create the DeviceLocalAccountPolicyService, allowing it to finish the 665 // deletion of orphaned cache directories. 666 CreatePolicyService(); 667 FlushDeviceSettings(); 668 extension_cache_task_runner_->RunUntilIdle(); 669 670 // Remove account 1 from device policy, allowing the shutdown of its cache to 671 // finish and the deletion of its now obsolete cache directory to begin. 672 device_policy_.payload().mutable_device_local_accounts()->clear_account(); 673 InstallDevicePolicy(); 674 extension_cache_task_runner_->RunUntilIdle(); 675 base::RunLoop().RunUntilIdle(); 676 677 // Re-add account 1 to device policy. 678 AddDeviceLocalAccountToPolicy(kAccount1); 679 InstallDevicePolicy(); 680 681 // Verify that the cache for account 1 has not been started yet as the 682 // deletion of the cache directory for this account ID is still in progress. 683 DeviceLocalAccountPolicyBroker* broker = 684 service_->GetBrokerForUser(account_1_user_id_); 685 ASSERT_TRUE(broker); 686 EXPECT_FALSE(broker->extension_loader()->IsCacheRunning()); 687 688 // Allow the deletion to finish. 689 extension_cache_task_runner_->RunUntilIdle(); 690 base::RunLoop().RunUntilIdle(); 691 692 // Verify that the cache directory for account 1 was deleted. 693 EXPECT_FALSE(base::DirectoryExists(cache_dir_1_)); 694 695 // Verify that the cache for account 1 has been started. 696 EXPECT_TRUE(broker->extension_loader()->IsCacheRunning()); 697} 698 699// Verifies that when an account is added and no deletion of cache directories 700// affecting this account is in progress, its cache is started immediately. 701TEST_F(DeviceLocalAccountPolicyExtensionCacheTest, AddAccount) { 702 // Create the DeviceLocalAccountPolicyService, allowing it to finish the 703 // deletion of orphaned cache directories. 704 InstallDevicePolicy(); 705 CreatePolicyService(); 706 FlushDeviceSettings(); 707 extension_cache_task_runner_->RunUntilIdle(); 708 709 // Add account 1 to device policy. 710 InstallDeviceLocalAccountPolicy(kAccount1); 711 AddDeviceLocalAccountToPolicy(kAccount1); 712 InstallDevicePolicy(); 713 714 // Verify that the cache for account 1 has been started. 715 DeviceLocalAccountPolicyBroker* broker = 716 service_->GetBrokerForUser(account_1_user_id_); 717 ASSERT_TRUE(broker); 718 EXPECT_TRUE(broker->extension_loader()->IsCacheRunning()); 719} 720 721// Verifies that when an account is removed, its cache directory is deleted. 722TEST_F(DeviceLocalAccountPolicyExtensionCacheTest, RemoveAccount) { 723 // Add account 1 to device policy. 724 InstallDeviceLocalAccountPolicy(kAccount1); 725 AddDeviceLocalAccountToPolicy(kAccount1); 726 InstallDevicePolicy(); 727 728 // Create the DeviceLocalAccountPolicyService, allowing it to finish the 729 // deletion of orphaned cache directories. 730 CreatePolicyService(); 731 FlushDeviceSettings(); 732 extension_cache_task_runner_->RunUntilIdle(); 733 734 // Verify that a cache directory has been created for account 1. 735 EXPECT_TRUE(base::DirectoryExists(cache_dir_1_)); 736 737 // Remove account 1 from device policy, allowing the deletion of its now 738 // obsolete cache directory to finish. 739 device_policy_.payload().mutable_device_local_accounts()->clear_account(); 740 InstallDevicePolicy(); 741 extension_cache_task_runner_->RunUntilIdle(); 742 base::RunLoop().RunUntilIdle(); 743 extension_cache_task_runner_->RunUntilIdle(); 744 745 // Verify that the cache directory for account 1 was deleted. 746 EXPECT_FALSE(base::DirectoryExists(cache_dir_1_)); 747} 748 749class DeviceLocalAccountPolicyProviderTest 750 : public DeviceLocalAccountPolicyServiceTestBase { 751 protected: 752 DeviceLocalAccountPolicyProviderTest(); 753 754 virtual void SetUp() OVERRIDE; 755 virtual void TearDown() OVERRIDE; 756 757 SchemaRegistry schema_registry_; 758 scoped_ptr<DeviceLocalAccountPolicyProvider> provider_; 759 MockConfigurationPolicyObserver provider_observer_; 760 761 private: 762 DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyProviderTest); 763}; 764 765DeviceLocalAccountPolicyProviderTest::DeviceLocalAccountPolicyProviderTest() { 766 CreatePolicyService(); 767 provider_ = DeviceLocalAccountPolicyProvider::Create( 768 GenerateDeviceLocalAccountUserId(kAccount1, 769 DeviceLocalAccount::TYPE_PUBLIC_SESSION), 770 service_.get()); 771} 772 773void DeviceLocalAccountPolicyProviderTest::SetUp() { 774 DeviceLocalAccountPolicyServiceTestBase::SetUp(); 775 provider_->Init(&schema_registry_); 776 provider_->AddObserver(&provider_observer_); 777 778 // Values implicitly enforced for public accounts. 779 expected_policy_map_.Set(key::kLidCloseAction, 780 POLICY_LEVEL_MANDATORY, 781 POLICY_SCOPE_MACHINE, 782 new base::FundamentalValue( 783 chromeos::PowerPolicyController:: 784 ACTION_STOP_SESSION), 785 NULL); 786 expected_policy_map_.Set(key::kShelfAutoHideBehavior, 787 POLICY_LEVEL_MANDATORY, 788 POLICY_SCOPE_MACHINE, 789 new base::StringValue("Never"), 790 NULL); 791 expected_policy_map_.Set(key::kShowLogoutButtonInTray, 792 POLICY_LEVEL_MANDATORY, 793 POLICY_SCOPE_MACHINE, 794 new base::FundamentalValue(true), 795 NULL); 796 expected_policy_map_.Set(key::kFullscreenAllowed, 797 POLICY_LEVEL_MANDATORY, 798 POLICY_SCOPE_MACHINE, 799 new base::FundamentalValue(false), 800 NULL); 801} 802 803void DeviceLocalAccountPolicyProviderTest::TearDown() { 804 provider_->RemoveObserver(&provider_observer_); 805 provider_->Shutdown(); 806 provider_.reset(); 807 DeviceLocalAccountPolicyServiceTestBase::TearDown(); 808} 809 810TEST_F(DeviceLocalAccountPolicyProviderTest, Initialization) { 811 EXPECT_FALSE(provider_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); 812 813 // Policy change should complete initialization. 814 InstallDeviceLocalAccountPolicy(kAccount1); 815 AddDeviceLocalAccountToPolicy(kAccount1); 816 EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) 817 .Times(AtLeast(1)); 818 InstallDevicePolicy(); 819 Mock::VerifyAndClearExpectations(&provider_observer_); 820 821 EXPECT_TRUE(provider_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); 822 823 // The account disappearing should *not* flip the initialization flag back. 824 EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) 825 .Times(AnyNumber()); 826 device_policy_.payload().mutable_device_local_accounts()->clear_account(); 827 InstallDevicePolicy(); 828 Mock::VerifyAndClearExpectations(&provider_observer_); 829 830 EXPECT_TRUE(provider_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); 831} 832 833TEST_F(DeviceLocalAccountPolicyProviderTest, Policy) { 834 // Policy should load successfully. 835 EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) 836 .Times(AtLeast(1)); 837 InstallDeviceLocalAccountPolicy(kAccount1); 838 AddDeviceLocalAccountToPolicy(kAccount1); 839 InstallDevicePolicy(); 840 Mock::VerifyAndClearExpectations(&provider_observer_); 841 842 PolicyBundle expected_policy_bundle; 843 expected_policy_bundle.Get(PolicyNamespace( 844 POLICY_DOMAIN_CHROME, std::string())).CopyFrom(expected_policy_map_); 845 EXPECT_TRUE(expected_policy_bundle.Equals(provider_->policies())); 846 847 // Policy change should be reported. 848 EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) 849 .Times(AtLeast(1)); 850 device_local_account_policy_.payload().mutable_disablespdy()->set_value( 851 false); 852 InstallDeviceLocalAccountPolicy(kAccount1); 853 DeviceLocalAccountPolicyBroker* broker = 854 service_->GetBrokerForUser(account_1_user_id_); 855 ASSERT_TRUE(broker); 856 broker->core()->store()->Load(); 857 FlushDeviceSettings(); 858 Mock::VerifyAndClearExpectations(&provider_observer_); 859 860 expected_policy_bundle.Get( 861 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) 862 .Set(key::kDisableSpdy, 863 POLICY_LEVEL_MANDATORY, 864 POLICY_SCOPE_USER, 865 new base::FundamentalValue(false), 866 NULL); 867 EXPECT_TRUE(expected_policy_bundle.Equals(provider_->policies())); 868 869 // Any values set for the |ShelfAutoHideBehavior|, |ShowLogoutButtonInTray| 870 // and |ExtensionAllowedTypes| policies should be overridden. 871 EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) 872 .Times(AtLeast(1)); 873 device_local_account_policy_.payload().mutable_shelfautohidebehavior()-> 874 set_value("Always"); 875 device_local_account_policy_.payload().mutable_showlogoutbuttonintray()-> 876 set_value(false); 877 InstallDeviceLocalAccountPolicy(kAccount1); 878 broker->core()->store()->Load(); 879 FlushDeviceSettings(); 880 Mock::VerifyAndClearExpectations(&provider_observer_); 881 EXPECT_TRUE(expected_policy_bundle.Equals(provider_->policies())); 882 883 // Account disappears, policy should stay in effect. 884 EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) 885 .Times(AnyNumber()); 886 device_policy_.payload().mutable_device_local_accounts()->clear_account(); 887 InstallDevicePolicy(); 888 Mock::VerifyAndClearExpectations(&provider_observer_); 889 890 EXPECT_TRUE(expected_policy_bundle.Equals(provider_->policies())); 891} 892 893TEST_F(DeviceLocalAccountPolicyProviderTest, RefreshPolicies) { 894 // If there's no device policy, the refresh completes immediately. 895 EXPECT_FALSE(service_->GetBrokerForUser(account_1_user_id_)); 896 EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) 897 .Times(AtLeast(1)); 898 provider_->RefreshPolicies(); 899 Mock::VerifyAndClearExpectations(&provider_observer_); 900 901 // Make device settings appear. 902 EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) 903 .Times(AnyNumber()); 904 AddDeviceLocalAccountToPolicy(kAccount1); 905 InstallDevicePolicy(); 906 EXPECT_TRUE(service_->GetBrokerForUser(account_1_user_id_)); 907 908 // If there's no cloud connection, refreshes are still immediate. 909 DeviceLocalAccountPolicyBroker* broker = 910 service_->GetBrokerForUser(account_1_user_id_); 911 ASSERT_TRUE(broker); 912 EXPECT_FALSE(broker->core()->client()); 913 EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) 914 .Times(AtLeast(1)); 915 provider_->RefreshPolicies(); 916 Mock::VerifyAndClearExpectations(&provider_observer_); 917 918 // Bring up the cloud connection. The refresh scheduler may fire refreshes at 919 // this point which are not relevant for the test. 920 EXPECT_CALL(mock_device_management_service_, CreateJob(_, _)) 921 .WillRepeatedly( 922 mock_device_management_service_.FailJob(DM_STATUS_REQUEST_FAILED)); 923 EXPECT_CALL(mock_device_management_service_, StartJob(_, _, _, _, _, _, _)) 924 .Times(AnyNumber()); 925 service_->Connect(&mock_device_management_service_); 926 FlushDeviceSettings(); 927 Mock::VerifyAndClearExpectations(&mock_device_management_service_); 928 929 // No callbacks until the refresh completes. 930 EXPECT_CALL(provider_observer_, OnUpdatePolicy(_)).Times(0); 931 MockDeviceManagementJob* request_job; 932 EXPECT_CALL(mock_device_management_service_, CreateJob(_, _)) 933 .WillOnce(mock_device_management_service_.CreateAsyncJob(&request_job)); 934 EXPECT_CALL(mock_device_management_service_, StartJob(_, _, _, _, _, _, _)); 935 provider_->RefreshPolicies(); 936 ReloadDeviceSettings(); 937 Mock::VerifyAndClearExpectations(&provider_observer_); 938 Mock::VerifyAndClearExpectations(&mock_device_management_service_); 939 EXPECT_TRUE(provider_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); 940 941 // When the response comes in, it should propagate and fire the notification. 942 EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) 943 .Times(AtLeast(1)); 944 ASSERT_TRUE(request_job); 945 em::DeviceManagementResponse response; 946 device_local_account_policy_.Build(); 947 response.mutable_policy_response()->add_response()->CopyFrom( 948 device_local_account_policy_.policy()); 949 request_job->SendResponse(DM_STATUS_SUCCESS, response); 950 FlushDeviceSettings(); 951 Mock::VerifyAndClearExpectations(&provider_observer_); 952} 953 954} // namespace policy 955