// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h" #include #include #include "base/file_util.h" #include "base/files/file_path.h" #include "base/path_service.h" #include "base/stl_util.h" #include "chrome/browser/chromeos/policy/device_policy_builder.h" #include "chrome/browser/chromeos/policy/enterprise_install_attributes.h" #include "chrome/browser/chromeos/policy/proto/install_attributes.pb.h" #include "chrome/common/chrome_paths.h" #include "chromeos/chromeos_paths.h" #include "chromeos/dbus/fake_dbus_thread_manager.h" #include "chromeos/dbus/fake_session_manager_client.h" #include "crypto/rsa_private_key.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" using ::testing::_; using ::testing::AnyNumber; using ::testing::Return; namespace policy { DevicePolicyCrosTestHelper::DevicePolicyCrosTestHelper() {} DevicePolicyCrosTestHelper::~DevicePolicyCrosTestHelper() {} void DevicePolicyCrosTestHelper::MarkAsEnterpriseOwned() { OverridePaths(); cryptohome::SerializedInstallAttributes install_attrs_proto; cryptohome::SerializedInstallAttributes::Attribute* attribute = NULL; attribute = install_attrs_proto.add_attributes(); attribute->set_name(EnterpriseInstallAttributes::kAttrEnterpriseOwned); attribute->set_value("true"); attribute = install_attrs_proto.add_attributes(); attribute->set_name(EnterpriseInstallAttributes::kAttrEnterpriseUser); attribute->set_value(device_policy_.policy_data().username()); base::FilePath install_attrs_file; ASSERT_TRUE( PathService::Get(chromeos::FILE_INSTALL_ATTRIBUTES, &install_attrs_file)); const std::string install_attrs_blob( install_attrs_proto.SerializeAsString()); ASSERT_EQ(static_cast(install_attrs_blob.size()), base::WriteFile(install_attrs_file, install_attrs_blob.c_str(), install_attrs_blob.size())); } void DevicePolicyCrosTestHelper::InstallOwnerKey() { OverridePaths(); base::FilePath owner_key_file; ASSERT_TRUE(PathService::Get(chromeos::FILE_OWNER_KEY, &owner_key_file)); std::vector owner_key_bits; ASSERT_TRUE( device_policy()->GetSigningKey()->ExportPublicKey(&owner_key_bits)); ASSERT_EQ(base::WriteFile( owner_key_file, reinterpret_cast(vector_as_array(&owner_key_bits)), owner_key_bits.size()), static_cast(owner_key_bits.size())); } void DevicePolicyCrosTestHelper::OverridePaths() { // This is usually done by ChromeBrowserMainChromeOS, but some tests // use the overridden paths before ChromeBrowserMain starts. Make sure that // the paths are overridden before using them. base::FilePath user_data_dir; ASSERT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &user_data_dir)); chromeos::RegisterStubPathOverrides(user_data_dir); } DevicePolicyCrosBrowserTest::DevicePolicyCrosBrowserTest() : fake_dbus_thread_manager_(new chromeos::FakeDBusThreadManager), fake_session_manager_client_(new chromeos::FakeSessionManagerClient) { fake_dbus_thread_manager_->SetFakeClients(); fake_dbus_thread_manager_->SetSessionManagerClient( scoped_ptr(fake_session_manager_client_)); } DevicePolicyCrosBrowserTest::~DevicePolicyCrosBrowserTest() { } void DevicePolicyCrosBrowserTest::SetUpInProcessBrowserTestFixture() { chromeos::DBusThreadManager::SetInstanceForTesting(fake_dbus_thread_manager_); InProcessBrowserTest::SetUpInProcessBrowserTestFixture(); } void DevicePolicyCrosBrowserTest::TearDownInProcessBrowserTestFixture() { InProcessBrowserTest::TearDownInProcessBrowserTestFixture(); } void DevicePolicyCrosBrowserTest::MarkAsEnterpriseOwned() { test_helper_.MarkAsEnterpriseOwned(); } void DevicePolicyCrosBrowserTest::InstallOwnerKey() { test_helper_.InstallOwnerKey(); } void DevicePolicyCrosBrowserTest::RefreshDevicePolicy() { // Reset the key to its original state. device_policy()->SetDefaultSigningKey(); device_policy()->Build(); session_manager_client()->set_device_policy(device_policy()->GetBlob()); session_manager_client()->OnPropertyChangeComplete(true); } } // namespace policy