Index: chrome/browser/chromeos/login/signed_settings_unittest.cc |
diff --git a/chrome/browser/chromeos/login/signed_settings_unittest.cc b/chrome/browser/chromeos/login/signed_settings_unittest.cc |
deleted file mode 100644 |
index a6083a71ce6b7cc1c66646581a8c1fb2894a4173..0000000000000000000000000000000000000000 |
--- a/chrome/browser/chromeos/login/signed_settings_unittest.cc |
+++ /dev/null |
@@ -1,398 +0,0 @@ |
-// Copyright (c) 2012 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/login/signed_settings.h" |
- |
-#include "base/logging.h" |
-#include "base/message_loop.h" |
-#include "base/values.h" |
-#include "chrome/browser/chromeos/cros/cros_library.h" |
-#include "chrome/browser/chromeos/cros_settings_names.h" |
-#include "chrome/browser/chromeos/login/mock_owner_key_utils.h" |
-#include "chrome/browser/chromeos/login/mock_ownership_service.h" |
-#include "chrome/browser/chromeos/login/owner_manager_unittest.h" |
-#include "chrome/browser/policy/proto/chrome_device_policy.pb.h" |
-#include "chrome/browser/policy/proto/device_management_backend.pb.h" |
-#include "chromeos/dbus/mock_dbus_thread_manager.h" |
-#include "chromeos/dbus/mock_session_manager_client.h" |
-#include "content/public/test/test_browser_thread.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-using ::testing::A; |
-using ::testing::AnyNumber; |
-using ::testing::Return; |
-using ::testing::ReturnRef; |
-using ::testing::SaveArg; |
-using ::testing::StrEq; |
-using ::testing::WithArg; |
-using ::testing::_; |
-using content::BrowserThread; |
-using google::protobuf::RepeatedPtrField; |
- |
-namespace em = enterprise_management; |
-namespace chromeos { |
- |
-namespace { |
-template <class T> |
-class DummyDelegate : public SignedSettings::Delegate<T> { |
- public: |
- explicit DummyDelegate(T to_expect) |
- : expect_success_(false), |
- expected_failure_(SignedSettings::SUCCESS), |
- expected_(to_expect), |
- run_(false) {} |
- virtual ~DummyDelegate() { EXPECT_TRUE(run_); } |
- virtual void OnSettingsOpCompleted(SignedSettings::ReturnCode code, |
- T value) { |
- run_ = true; |
- if (expect_success_) |
- compare_expected(value); |
- EXPECT_EQ(expected_failure_, code); |
- } |
- virtual void expect_success() { |
- expect_success_ = true; |
- expected_failure_ = SignedSettings::SUCCESS; |
- } |
- virtual void expect_failure(SignedSettings::ReturnCode code) { |
- expect_success_ = false; |
- expected_failure_ = code; |
- } |
- |
- protected: |
- bool expect_success_; |
- SignedSettings::ReturnCode expected_failure_; |
- T expected_; |
- bool run_; |
- virtual void compare_expected(T to_compare) = 0; |
-}; |
- |
-template <class T> |
-class NormalDelegate : public DummyDelegate<T> { |
- public: |
- explicit NormalDelegate(T to_expect) : DummyDelegate<T>(to_expect) {} |
- virtual ~NormalDelegate() {} |
- protected: |
- virtual void compare_expected(T to_compare) { |
- // without this-> this won't build. |
- EXPECT_EQ(this->expected_, to_compare); |
- } |
-}; |
- |
-class ProtoDelegate : public DummyDelegate<const em::PolicyFetchResponse&> { |
- public: |
- explicit ProtoDelegate(const em::PolicyFetchResponse& e) |
- : DummyDelegate<const em::PolicyFetchResponse&>(e) { |
- } |
- virtual ~ProtoDelegate() {} |
- protected: |
- virtual void compare_expected(const em::PolicyFetchResponse& to_compare) { |
- std::string ex_string, comp_string; |
- EXPECT_TRUE(expected_.SerializeToString(&ex_string)); |
- EXPECT_TRUE(to_compare.SerializeToString(&comp_string)); |
- EXPECT_EQ(ex_string, comp_string); |
- } |
-}; |
- |
-} // anonymous namespace |
- |
-class SignedSettingsTest : public testing::Test { |
- public: |
- SignedSettingsTest() |
- : fake_prop_(kAccountsPrefAllowGuest), |
- fake_signature_("false"), |
- fake_value_(false), |
- fake_value_signature_( |
- fake_signature_.c_str(), |
- fake_signature_.c_str() + fake_signature_.length()), |
- message_loop_(MessageLoop::TYPE_UI), |
- ui_thread_(BrowserThread::UI, &message_loop_), |
- file_thread_(BrowserThread::FILE), |
- mock_(new MockKeyUtils), |
- injector_(mock_) /* injector_ takes ownership of mock_ */, |
- mock_dbus_thread_manager_(new MockDBusThreadManager) { |
- } |
- |
- virtual ~SignedSettingsTest() {} |
- |
- virtual void SetUp() { |
- file_thread_.Start(); |
- DBusThreadManager::InitializeForTesting(mock_dbus_thread_manager_); |
- } |
- |
- virtual void TearDown() { |
- OwnerKeyUtils::set_factory(NULL); |
- DBusThreadManager::Shutdown(); |
- } |
- |
- void mock_service(SignedSettings* s, MockOwnershipService* m) { |
- s->set_service(m); |
- } |
- |
- void FailingStorePolicyOp(const OwnerManager::KeyOpCode return_code) { |
- NormalDelegate<bool> d(false); |
- d.expect_failure(SignedSettings::MapKeyOpCode(return_code)); |
- |
- em::PolicyFetchResponse fake_policy; |
- fake_policy.set_policy_data(fake_prop_); |
- std::string serialized; |
- ASSERT_TRUE(fake_policy.SerializeToString(&serialized)); |
- |
- scoped_refptr<SignedSettings> s( |
- SignedSettings::CreateStorePolicyOp(&fake_policy, &d)); |
- |
- mock_service(s.get(), &m_); |
- EXPECT_CALL(m_, StartSigningAttempt(StrEq(fake_prop_), _)) |
- .Times(1); |
- |
- s->Execute(); |
- s->OnKeyOpComplete(return_code, std::vector<uint8>()); |
- message_loop_.RunAllPending(); |
- } |
- |
- em::PolicyData BuildPolicyData(std::vector<std::string> whitelist) { |
- em::PolicyData to_return; |
- em::ChromeDeviceSettingsProto pol; |
- em::GuestModeEnabledProto* allow = pol.mutable_guest_mode_enabled(); |
- allow->set_guest_mode_enabled(false); |
- pol.mutable_device_proxy_settings()->set_proxy_mode("direct"); |
- |
- if (!whitelist.empty()) { |
- em::UserWhitelistProto* whitelist_proto = pol.mutable_user_whitelist(); |
- for (std::vector<std::string>::const_iterator it = whitelist.begin(); |
- it != whitelist.end(); |
- ++it) { |
- whitelist_proto->add_user_whitelist(*it); |
- } |
- } |
- |
- to_return.set_policy_type(chromeos::kDevicePolicyType); |
- to_return.set_policy_value(pol.SerializeAsString()); |
- return to_return; |
- } |
- |
- em::PolicyFetchResponse BuildProto(const std::string& data, |
- const std::string& sig, |
- std::string* out_serialized) { |
- em::PolicyFetchResponse fake_policy; |
- if (!data.empty()) |
- fake_policy.set_policy_data(data); |
- if (!sig.empty()) |
- fake_policy.set_policy_data_signature(sig); |
- EXPECT_TRUE(fake_policy.SerializeToString(out_serialized)); |
- return fake_policy; |
- } |
- |
- const std::string fake_prop_; |
- const std::string fake_signature_; |
- const base::FundamentalValue fake_value_; |
- const std::vector<uint8> fake_value_signature_; |
- MockOwnershipService m_; |
- |
- MessageLoop message_loop_; |
- content::TestBrowserThread ui_thread_; |
- content::TestBrowserThread file_thread_; |
- |
- MockKeyUtils* mock_; |
- MockInjector injector_; |
- MockDBusThreadManager* mock_dbus_thread_manager_; |
- |
- ScopedStubCrosEnabler stub_cros_enabler_; |
-}; |
- |
-ACTION_P(Retrieve, policy_blob) { arg0.Run(policy_blob); } |
-ACTION_P(Store, success) { arg1.Run(success); } |
- |
-TEST_F(SignedSettingsTest, SignAndStorePolicy) { |
- NormalDelegate<bool> d(true); |
- d.expect_success(); |
- |
- em::PolicyData in_pol = BuildPolicyData(std::vector<std::string>()); |
- std::string data_serialized = in_pol.SerializeAsString(); |
- std::string serialized; |
- em::PolicyFetchResponse fake_policy = BuildProto(data_serialized, |
- std::string(), |
- &serialized); |
- scoped_refptr<SignedSettings> s( |
- SignedSettings::CreateStorePolicyOp(&fake_policy, &d)); |
- |
- mock_service(s.get(), &m_); |
- EXPECT_CALL(m_, StartSigningAttempt(StrEq(data_serialized), _)) |
- .Times(1); |
- em::PolicyData out_pol; |
- |
- // Ask for signature over unsigned policy. |
- s->Execute(); |
- message_loop_.RunAllPending(); |
- |
- // Fake out a successful signing. |
- std::string signed_serialized; |
- em::PolicyFetchResponse signed_policy = BuildProto(data_serialized, |
- fake_signature_, |
- &signed_serialized); |
- MockSessionManagerClient* client = |
- mock_dbus_thread_manager_->mock_session_manager_client(); |
- EXPECT_CALL(*client, StoreDevicePolicy(signed_serialized, _)) |
- .WillOnce(Store(true)) |
- .RetiresOnSaturation(); |
- s->OnKeyOpComplete(OwnerManager::SUCCESS, fake_value_signature_); |
- message_loop_.RunAllPending(); |
-} |
- |
-TEST_F(SignedSettingsTest, StoreSignedPolicy) { |
- NormalDelegate<bool> d(true); |
- d.expect_success(); |
- |
- em::PolicyData in_pol = BuildPolicyData(std::vector<std::string>()); |
- std::string serialized = in_pol.SerializeAsString(); |
- std::string signed_serialized; |
- em::PolicyFetchResponse signed_policy = BuildProto(serialized, |
- fake_signature_, |
- &signed_serialized); |
- scoped_refptr<SignedSettings> s( |
- SignedSettings::CreateStorePolicyOp(&signed_policy, &d)); |
- MockSessionManagerClient* client = |
- mock_dbus_thread_manager_->mock_session_manager_client(); |
- EXPECT_CALL(*client, StoreDevicePolicy(signed_serialized, _)) |
- .WillOnce(Store(true)) |
- .RetiresOnSaturation(); |
- |
- mock_service(s.get(), &m_); |
- em::PolicyData out_pol; |
- |
- s->Execute(); |
- message_loop_.RunAllPending(); |
-} |
- |
-TEST_F(SignedSettingsTest, StorePolicyNoKey) { |
- FailingStorePolicyOp(OwnerManager::KEY_UNAVAILABLE); |
-} |
- |
-TEST_F(SignedSettingsTest, StorePolicyFailed) { |
- FailingStorePolicyOp(OwnerManager::OPERATION_FAILED); |
-} |
- |
-TEST_F(SignedSettingsTest, StorePolicyNoPolicyData) { |
- NormalDelegate<bool> d(false); |
- d.expect_failure(SignedSettings::OPERATION_FAILED); |
- |
- std::string serialized; |
- em::PolicyFetchResponse fake_policy = BuildProto(std::string(), |
- std::string(), |
- &serialized); |
- scoped_refptr<SignedSettings> s( |
- SignedSettings::CreateStorePolicyOp(&fake_policy, &d)); |
- |
- s->Execute(); |
- message_loop_.RunAllPending(); |
-} |
- |
-TEST_F(SignedSettingsTest, RetrievePolicy) { |
- em::PolicyData in_pol = BuildPolicyData(std::vector<std::string>()); |
- std::string serialized = in_pol.SerializeAsString(); |
- std::string signed_serialized; |
- em::PolicyFetchResponse signed_policy = BuildProto(serialized, |
- fake_signature_, |
- &signed_serialized); |
- ProtoDelegate d(signed_policy); |
- d.expect_success(); |
- scoped_refptr<SignedSettings> s(SignedSettings::CreateRetrievePolicyOp(&d)); |
- |
- MockSessionManagerClient* client = |
- mock_dbus_thread_manager_->mock_session_manager_client(); |
- EXPECT_CALL(*client, RetrieveDevicePolicy(_)) |
- .WillOnce(Retrieve(signed_serialized)) |
- .RetiresOnSaturation(); |
- |
- mock_service(s.get(), &m_); |
- EXPECT_CALL(m_, StartVerifyAttempt(serialized, fake_value_signature_, _)) |
- .Times(1); |
- em::PolicyData out_pol; |
- |
- s->Execute(); |
- message_loop_.RunAllPending(); |
- |
- s->OnKeyOpComplete(OwnerManager::SUCCESS, std::vector<uint8>()); |
- message_loop_.RunAllPending(); |
-} |
- |
-TEST_F(SignedSettingsTest, RetrieveNullPolicy) { |
- em::PolicyFetchResponse policy; |
- ProtoDelegate d(policy); |
- d.expect_failure(SignedSettings::NOT_FOUND); |
- scoped_refptr<SignedSettings> s(SignedSettings::CreateRetrievePolicyOp(&d)); |
- |
- MockSessionManagerClient* client = |
- mock_dbus_thread_manager_->mock_session_manager_client(); |
- EXPECT_CALL(*client, RetrieveDevicePolicy(_)) |
- .WillOnce(Retrieve("")) |
- .RetiresOnSaturation(); |
- |
- s->Execute(); |
- message_loop_.RunAllPending(); |
-} |
- |
-TEST_F(SignedSettingsTest, RetrieveEmptyPolicy) { |
- std::string serialized; |
- em::PolicyFetchResponse policy = BuildProto("", "", &serialized); |
- ProtoDelegate d(policy); |
- d.expect_failure(SignedSettings::NOT_FOUND); |
- scoped_refptr<SignedSettings> s(SignedSettings::CreateRetrievePolicyOp(&d)); |
- |
- MockSessionManagerClient* client = |
- mock_dbus_thread_manager_->mock_session_manager_client(); |
- EXPECT_CALL(*client, RetrieveDevicePolicy(_)) |
- .WillOnce(Retrieve("")) |
- .RetiresOnSaturation(); |
- |
- s->Execute(); |
- message_loop_.RunAllPending(); |
-} |
- |
-TEST_F(SignedSettingsTest, RetrieveUnsignedPolicy) { |
- std::string serialized; |
- em::PolicyFetchResponse policy = BuildProto(fake_prop_, |
- std::string(), |
- &serialized); |
- ProtoDelegate d(policy); |
- d.expect_failure(SignedSettings::BAD_SIGNATURE); |
- scoped_refptr<SignedSettings> s(SignedSettings::CreateRetrievePolicyOp(&d)); |
- |
- MockSessionManagerClient* client = |
- mock_dbus_thread_manager_->mock_session_manager_client(); |
- EXPECT_CALL(*client, RetrieveDevicePolicy(_)) |
- .WillOnce(Retrieve(serialized)) |
- .RetiresOnSaturation(); |
- |
- s->Execute(); |
- message_loop_.RunAllPending(); |
-} |
- |
-TEST_F(SignedSettingsTest, RetrieveMalsignedPolicy) { |
- std::string signed_serialized; |
- em::PolicyFetchResponse signed_policy = BuildProto(fake_prop_, |
- fake_signature_, |
- &signed_serialized); |
- ProtoDelegate d(signed_policy); |
- d.expect_failure(SignedSettings::BAD_SIGNATURE); |
- scoped_refptr<SignedSettings> s(SignedSettings::CreateRetrievePolicyOp(&d)); |
- |
- MockSessionManagerClient* client = |
- mock_dbus_thread_manager_->mock_session_manager_client(); |
- EXPECT_CALL(*client, RetrieveDevicePolicy(_)) |
- .WillOnce(Retrieve(signed_serialized)) |
- .RetiresOnSaturation(); |
- |
- mock_service(s.get(), &m_); |
- EXPECT_CALL(m_, StartVerifyAttempt(fake_prop_, fake_value_signature_, _)) |
- .Times(1); |
- |
- s->Execute(); |
- message_loop_.RunAllPending(); |
- |
- s->OnKeyOpComplete(OwnerManager::OPERATION_FAILED, std::vector<uint8>()); |
- message_loop_.RunAllPending(); |
-} |
- |
-} // namespace chromeos |