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