15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <string> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/run_loop.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/policy/enterprise_install_attributes.h" 16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_test_helper.h" 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/test/base/scoped_testing_local_state.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/test/base/testing_browser_process.h" 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/cryptohome/cryptohome_util.h" 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromeos/dbus/dbus_thread_manager.h" 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/dbus/fake_cryptohome_client.h" 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/test/test_utils.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "policy/policy_constants.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void CopyLockResult(base::RunLoop* loop, 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EnterpriseInstallAttributes::LockResult* out, 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EnterpriseInstallAttributes::LockResult result) { 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *out = result; 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop->Quit(); 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DeviceCloudPolicyStoreChromeOSTest 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public chromeos::DeviceSettingsTestBase { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeviceCloudPolicyStoreChromeOSTest() 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : local_state_(TestingBrowserProcess::GetGlobal()), 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch fake_cryptohome_client_(new chromeos::FakeCryptohomeClient()), 466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) install_attributes_( 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new EnterpriseInstallAttributes(fake_cryptohome_client_)), 486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) store_(new DeviceCloudPolicyStoreChromeOS( 496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) &device_settings_service_, 506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) install_attributes_.get(), 516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::MessageLoopProxy::current())) { 52424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DeviceSettingsTestBase::SetUp(); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dbus_setter_->SetCryptohomeClient( 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<chromeos::CryptohomeClient>(fake_cryptohome_client_)); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::RunLoop loop; 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EnterpriseInstallAttributes::LockResult result; 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) install_attributes_->LockDevice( 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PolicyBuilder::kFakeUsername, 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DEVICE_MODE_ENTERPRISE, 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PolicyBuilder::kFakeDeviceId, 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&CopyLockResult, &loop, &result)); 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop.Run(); 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(EnterpriseInstallAttributes::LOCK_SUCCESS, result); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ExpectFailure(CloudPolicyStore::Status expected_status) { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_status, store_->status()); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(store_->is_initialized()); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(store_->has_policy()); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(store_->is_managed()); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ExpectSuccess() { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CloudPolicyStore::STATUS_OK, store_->status()); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(store_->is_initialized()); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(store_->has_policy()); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(store_->is_managed()); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(store_->policy()); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FundamentalValue expected(false); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Value::Equals(&expected, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store_->policy_map().GetValue( 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key::kDeviceMetricsReportingEnabled))); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PrepareExistingPolicy() { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store_->Load(); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FlushDeviceSettings(); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectSuccess(); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 962385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch device_policy_.UnsetNewSigningKey(); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_policy_.Build(); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PrepareNewSigningKey() { 1012385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch device_policy_.SetDefaultNewSigningKey(); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_policy_.Build(); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) owner_key_util_->SetPublicKeyFromPrivateKey( 1042385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch *device_policy_.GetNewSigningKey()); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ResetToNonEnterprise() { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store_.reset(); 1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::cryptohome_util::InstallAttributesSet("enterprise.owned", 1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string()); 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch install_attributes_.reset( 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new EnterpriseInstallAttributes(fake_cryptohome_client_)); 1138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) store_.reset( 1148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) new DeviceCloudPolicyStoreChromeOS(&device_settings_service_, 1158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) install_attributes_.get(), 1166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::MessageLoopProxy::current())); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ScopedTestingLocalState local_state_; 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::FakeCryptohomeClient* fake_cryptohome_client_; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<EnterpriseInstallAttributes> install_attributes_; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceCloudPolicyStoreChromeOS> store_; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DeviceCloudPolicyStoreChromeOSTest); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, LoadNoKey) { 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) owner_key_util_->Clear(); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store_->Load(); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FlushDeviceSettings(); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFailure(CloudPolicyStore::STATUS_BAD_STATE); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, LoadNoPolicy) { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) device_settings_test_helper_.set_policy_blob(std::string()); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store_->Load(); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FlushDeviceSettings(); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFailure(CloudPolicyStore::STATUS_LOAD_ERROR); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, LoadNotEnterprise) { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResetToNonEnterprise(); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store_->Load(); 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FlushDeviceSettings(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFailure(CloudPolicyStore::STATUS_BAD_STATE); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, LoadSuccess) { 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store_->Load(); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FlushDeviceSettings(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectSuccess(); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, StoreSuccess) { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrepareExistingPolicy(); 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) store_->Store(device_policy_.policy()); 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FlushDeviceSettings(); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectSuccess(); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, StoreNoSignature) { 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrepareExistingPolicy(); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_policy_.policy().clear_policy_data_signature(); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) store_->Store(device_policy_.policy()); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FlushDeviceSettings(); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status()); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_SIGNATURE, 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store_->validation_status()); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, StoreBadSignature) { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrepareExistingPolicy(); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_policy_.policy().set_policy_data_signature("invalid"); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) store_->Store(device_policy_.policy()); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FlushDeviceSettings(); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status()); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_SIGNATURE, 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store_->validation_status()); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, StoreKeyRotation) { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrepareExistingPolicy(); 1852385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch device_policy_.SetDefaultNewSigningKey(); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_policy_.Build(); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) store_->Store(device_policy_.policy()); 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RunAllBlockingPoolTasksUntilIdle(); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) device_settings_test_helper_.FlushStore(); 1902385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch owner_key_util_->SetPublicKeyFromPrivateKey( 1912385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch *device_policy_.GetNewSigningKey()); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ReloadDeviceSettings(); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectSuccess(); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, 197f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) StoreKeyRotationVerificationFailure) { 198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PrepareExistingPolicy(); 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) device_policy_.SetDefaultNewSigningKey(); 200f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) device_policy_.Build(); 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *device_policy_.policy().mutable_new_public_key_verification_signature() = 202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "garbage"; 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) store_->Store(device_policy_.policy()); 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FlushDeviceSettings(); 205f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status()); 206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_KEY_VERIFICATION_SIGNATURE, 207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) store_->validation_status()); 208f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 210f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, 211f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) StoreKeyRotationMissingSignatureFailure) { 212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PrepareExistingPolicy(); 213f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) device_policy_.SetDefaultNewSigningKey(); 214f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) device_policy_.Build(); 215f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) device_policy_.policy().clear_new_public_key_verification_signature(); 216f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) store_->Store(device_policy_.policy()); 217f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FlushDeviceSettings(); 218f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status()); 219f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_KEY_VERIFICATION_SIGNATURE, 220f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) store_->validation_status()); 221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, InstallInitialPolicySuccess) { 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrepareNewSigningKey(); 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) store_->InstallInitialPolicy(device_policy_.policy()); 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FlushDeviceSettings(); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectSuccess(); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, InstallInitialPolicyNoSignature) { 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrepareNewSigningKey(); 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_policy_.policy().clear_policy_data_signature(); 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) store_->InstallInitialPolicy(device_policy_.policy()); 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FlushDeviceSettings(); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFailure(CloudPolicyStore::STATUS_VALIDATION_ERROR); 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_INITIAL_SIGNATURE, 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store_->validation_status()); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 240f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, 241f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) InstallInitialPolicyVerificationFailure) { 242f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PrepareNewSigningKey(); 243f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *device_policy_.policy().mutable_new_public_key_verification_signature() = 244f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "garbage"; 245f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) store_->InstallInitialPolicy(device_policy_.policy()); 246f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FlushDeviceSettings(); 247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ExpectFailure(CloudPolicyStore::STATUS_VALIDATION_ERROR); 248f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_KEY_VERIFICATION_SIGNATURE, 249f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) store_->validation_status()); 250f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 251f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 252f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, 253f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) InstallInitialPolicyMissingSignatureFailure) { 254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PrepareNewSigningKey(); 255f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) device_policy_.policy().clear_new_public_key_verification_signature(); 256f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) store_->InstallInitialPolicy(device_policy_.policy()); 257f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FlushDeviceSettings(); 258f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ExpectFailure(CloudPolicyStore::STATUS_VALIDATION_ERROR); 259f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_KEY_VERIFICATION_SIGNATURE, 260f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) store_->validation_status()); 261f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 262f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, InstallInitialPolicyNoKey) { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrepareNewSigningKey(); 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_policy_.policy().clear_new_public_key(); 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) store_->InstallInitialPolicy(device_policy_.policy()); 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FlushDeviceSettings(); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFailure(CloudPolicyStore::STATUS_VALIDATION_ERROR); 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_BAD_INITIAL_SIGNATURE, 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store_->validation_status()); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeviceCloudPolicyStoreChromeOSTest, InstallInitialPolicyNotEnterprise) { 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrepareNewSigningKey(); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResetToNonEnterprise(); 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) store_->InstallInitialPolicy(device_policy_.policy()); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FlushDeviceSettings(); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFailure(CloudPolicyStore::STATUS_BAD_STATE); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace policy 282