1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/signed_settings.h" 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/file_util.h" 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/logging.h" 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_temp_dir.h" 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/stringprintf.h" 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/cros/cros_library.h" 1221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/chromeos/cros/mock_library_loader.h" 1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/chromeos/cros/mock_login_library.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/cros_settings_names.h" 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/mock_owner_key_utils.h" 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/mock_ownership_service.h" 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/owner_manager_unittest.h" 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/policy/proto/chrome_device_policy.pb.h" 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/policy/proto/device_management_backend.pb.h" 2021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/test/thread_test_helper.h" 21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "crypto/rsa_private_key.h" 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gmock/include/gmock/gmock.h" 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gtest/include/gtest/gtest.h" 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::A; 2721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenusing ::testing::AnyNumber; 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::InvokeArgument; 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::Return; 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::ReturnRef; 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::SaveArg; 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::StrEq; 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::WithArg; 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::_; 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing google::protobuf::RepeatedPtrField; 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace em = enterprise_management; 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace chromeos { 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace { 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsentemplate <class T> 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass DummyDelegate : public SignedSettings::Delegate<T> { 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen explicit DummyDelegate(T to_expect) 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : expect_success_(false), 4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen expected_failure_(SignedSettings::SUCCESS), 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen expected_(to_expect), 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen run_(false) {} 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual ~DummyDelegate() { EXPECT_TRUE(run_); } 5021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void OnSettingsOpCompleted(SignedSettings::ReturnCode code, 5121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen T value) { 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen run_ = true; 5321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (expect_success_) 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen compare_expected(value); 5521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_EQ(expected_failure_, code); 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 5721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void expect_success() { 5821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen expect_success_ = true; 5921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen expected_failure_ = SignedSettings::SUCCESS; 6021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 6121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void expect_failure(SignedSettings::ReturnCode code) { 6221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen expect_success_ = false; 6321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen expected_failure_ = code; 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected: 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool expect_success_; 6821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SignedSettings::ReturnCode expected_failure_; 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen T expected_; 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool run_; 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void compare_expected(T to_compare) = 0; 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsentemplate <class T> 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass NormalDelegate : public DummyDelegate<T> { 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen explicit NormalDelegate(T to_expect) : DummyDelegate<T>(to_expect) {} 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~NormalDelegate() {} 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected: 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void compare_expected(T to_compare) { 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(this->expected_, to_compare); // without this-> this won't build. 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ProtoDelegate : public DummyDelegate<const em::PolicyFetchResponse&> { 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen explicit ProtoDelegate(const em::PolicyFetchResponse& e) 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : DummyDelegate<const em::PolicyFetchResponse&>(e) { 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~ProtoDelegate() {} 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected: 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void compare_expected(const em::PolicyFetchResponse& to_compare) { 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string ex_string, comp_string; 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(expected_.SerializeToString(&ex_string)); 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(to_compare.SerializeToString(&comp_string)); 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ex_string, comp_string); 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // anonymous namespace 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass SignedSettingsTest : public ::testing::Test { 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsTest() 1053f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen : fake_email_("fakey@example.com"), 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_domain_("*@example.com"), 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_prop_(kAccountsPrefAllowGuest), 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_value_("false"), 109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen message_loop_(MessageLoop::TYPE_UI), 110731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_thread_(BrowserThread::UI, &message_loop_), 111731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick file_thread_(BrowserThread::FILE), 112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mock_(new MockKeyUtils), 113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen injector_(mock_) /* injector_ takes ownership of mock_ */ { 114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual ~SignedSettingsTest() {} 117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void SetUp() { 119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen file_thread_.Start(); 120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void TearDown() { 123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OwnerKeyUtils::set_factory(NULL); 124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void mock_service(SignedSettings* s, MockOwnershipService* m) { 127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen s->set_service(m); 128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData BuildPolicyData(std::vector<std::string> whitelist) { 131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData to_return; 132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::ChromeDeviceSettingsProto pol; 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::GuestModeEnabledProto* allow = pol.mutable_guest_mode_enabled(); 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen allow->set_guest_mode_enabled(false); 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pol.mutable_device_proxy_settings()->set_proxy_mode("direct"); 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!whitelist.empty()) { 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::UserWhitelistProto* whitelist_proto = pol.mutable_user_whitelist(); 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (std::vector<std::string>::const_iterator it = whitelist.begin(); 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen it != whitelist.end(); 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ++it) { 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen whitelist_proto->add_user_whitelist(*it); 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen to_return.set_policy_type(SignedSettings::kDevicePolicyType); 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen to_return.set_policy_value(pol.SerializeAsString()); 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return to_return; 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetAllowNewUsers(bool desired, em::PolicyData* poldata) { 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::ChromeDeviceSettingsProto pol; 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pol.ParseFromString(poldata->policy_value()); 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::AllowNewUsersProto* allow = pol.mutable_allow_new_users(); 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen allow->set_allow_new_users(desired); 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen poldata->set_policy_value(pol.SerializeAsString()); 157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 158bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool CheckWhitelist(const std::string& email, const em::PolicyData& poldata) { 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!poldata.has_policy_value()) 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::ChromeDeviceSettingsProto pol; 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pol.ParseFromString(poldata.policy_value()); 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!pol.has_user_whitelist()) 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const RepeatedPtrField<std::string>& whitelist = 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pol.user_whitelist().user_whitelist(); 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (RepeatedPtrField<std::string>::const_iterator it = whitelist.begin(); 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen it != whitelist.end(); 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ++it) { 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (email == *it) 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return true; 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 177bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void ExpectWhitelistOp(SignedSettings* s, 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData* fake_pol, 180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData* out_pol) { 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mock_service(s, &m_); 182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, StartSigningAttempt(_, _)) 183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, has_cached_policy()) 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Return(true)); 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, cached_policy()) 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(ReturnRef(*fake_pol)); 188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, set_cached_policy(A<const em::PolicyData&>())) 189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(SaveArg<0>(out_pol)); 190bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 191bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 192bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void FailingStorePropertyOp(const OwnerManager::KeyOpCode return_code) { 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<bool> d(false); 194bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<SignedSettings> s( 195bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettings::CreateStorePropertyOp(fake_prop_, fake_value_, &d)); 19621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen d.expect_failure(SignedSettings::MapKeyOpCode(return_code)); 197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 198bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mock_service(s.get(), &m_); 199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, StartSigningAttempt(_, _)) 200bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 201dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_CALL(m_, GetStatus(_)) 202dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .WillOnce(Return(OwnershipService::OWNERSHIP_TAKEN)); 203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, has_cached_policy()) 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Return(true)); 205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData fake_pol; 206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, cached_policy()) 207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(ReturnRef(fake_pol)); 208bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 20921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen s->Execute(); 210bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen s->OnKeyOpComplete(return_code, std::vector<uint8>()); 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 212bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 213bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void FailingStorePolicyOp(const OwnerManager::KeyOpCode return_code) { 215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<bool> d(false); 21621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen d.expect_failure(SignedSettings::MapKeyOpCode(return_code)); 217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyFetchResponse fake_policy; 219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_policy.set_policy_data(fake_prop_); 220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string serialized; 221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(fake_policy.SerializeToString(&serialized)); 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<SignedSettings> s( 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettings::CreateStorePolicyOp(&fake_policy, &d)); 225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 226bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mock_service(s.get(), &m_); 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, StartSigningAttempt(StrEq(fake_prop_), _)) 228bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 229bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 23021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen s->Execute(); 231bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen s->OnKeyOpComplete(return_code, std::vector<uint8>()); 232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 233bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 234bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 23521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen MockLoginLibrary* MockLoginLib() { 23621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen chromeos::CrosLibrary::TestApi* test_api = 23721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen chromeos::CrosLibrary::Get()->GetTestApi(); 23821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 23921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Mocks, ownership transferred to CrosLibrary class on creation. 24021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen MockLoginLibrary* mock_library; 24121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen MockLibraryLoader* loader; 24221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 24321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen loader = new MockLibraryLoader(); 24421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ON_CALL(*loader, Load(_)) 24521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen .WillByDefault(Return(true)); 24621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(*loader, Load(_)) 24721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen .Times(AnyNumber()); 24821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 24921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen test_api->SetLibraryLoader(loader, true); 25021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 25121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen mock_library = new MockLoginLibrary(); 25221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen test_api->SetLoginLibrary(mock_library, true); 25321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return mock_library; 25421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 25521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 25621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen void UnMockLoginLib() { 25721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Prevent bogus gMock leak check from firing. 25821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen chromeos::CrosLibrary::TestApi* test_api = 25921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen chromeos::CrosLibrary::Get()->GetTestApi(); 26021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen test_api->SetLibraryLoader(NULL, false); 26121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen test_api->SetLoginLibrary(NULL, false); 26221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 26321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyFetchResponse BuildProto(const std::string& data, 265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& sig, 266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string* out_serialized) { 267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyFetchResponse fake_policy; 268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!data.empty()) 269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_policy.set_policy_data(data); 270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!sig.empty()) 271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_policy.set_policy_data_signature(sig); 272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(fake_policy.SerializeToString(out_serialized)); 273ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return fake_policy; 274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 275ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 276ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void DoRetrieveProperty(const std::string& name, 277ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& value, 278ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData* fake_pol) { 279ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<std::string> d(value); 280ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen d.expect_success(); 281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<SignedSettings> s( 282ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettings::CreateRetrievePropertyOp(name, &d)); 283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mock_service(s.get(), &m_); 284ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, GetStatus(_)) 285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Return(OwnershipService::OWNERSHIP_TAKEN)); 286ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, has_cached_policy()) 287ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Return(true)); 288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 289ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, cached_policy()) 290ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(ReturnRef(*fake_pol)); 291ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 292ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->Execute(); 293ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 294ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 295ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 296bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string fake_email_; 297ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string fake_domain_; 298bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string fake_prop_; 299bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string fake_value_; 300bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockOwnershipService m_; 301bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 302bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ScopedTempDir tmpdir_; 303bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FilePath tmpfile_; 304bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 305bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MessageLoop message_loop_; 306731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread ui_thread_; 307731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread file_thread_; 308bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 309bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::vector<uint8> fake_public_key_; 310ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<crypto::RSAPrivateKey> fake_private_key_; 311bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 312bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockKeyUtils* mock_; 313bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockInjector injector_; 314bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 31521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ScopedStubCrosEnabler stub_cros_enabler_; 316bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 317bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 318bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(SignedSettingsTest, CheckWhitelist) { 319ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<bool> d(true); 320bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen d.expect_success(); 321bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<SignedSettings> s( 322bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettings::CreateCheckWhitelistOp(fake_email_, &d)); 323bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 324bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mock_service(s.get(), &m_); 325ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, has_cached_policy()) 326ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Return(true)); 327ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 328ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<std::string> whitelist(1, fake_email_); 329ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen whitelist.push_back(fake_email_ + "m"); 330ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData fake_pol = BuildPolicyData(whitelist); 331ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, cached_policy()) 332ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(ReturnRef(fake_pol)); 333bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 33421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen s->Execute(); 335ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 336bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 337bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 338ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, CheckWhitelistWildcards) { 339ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<bool> d(true); 340ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen d.expect_success(); 34121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen scoped_refptr<SignedSettings> s( 34221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SignedSettings::CreateCheckWhitelistOp(fake_email_, &d)); 343ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 344ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mock_service(s.get(), &m_); 345ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, has_cached_policy()) 346ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Return(true)); 347ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 348ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<std::string> whitelist(1, fake_domain_); 349ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen whitelist.push_back(fake_email_ + "m"); 350ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData fake_pol = BuildPolicyData(whitelist); 351ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, cached_policy()) 352ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(ReturnRef(fake_pol)) 353ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(ReturnRef(fake_pol)); 354ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 35521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen s->Execute(); 356ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 35721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 35821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 359ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, CheckWhitelistNotFound) { 360ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<bool> d(true); 361ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<SignedSettings> s( 362ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettings::CreateCheckWhitelistOp(fake_email_, &d)); 363ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen d.expect_failure(SignedSettings::NOT_FOUND); 364bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 365ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mock_service(s.get(), &m_); 366ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, has_cached_policy()) 367ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Return(true)); 368ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 369ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<std::string> whitelist(1, fake_email_ + "m"); 370ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData fake_pol = BuildPolicyData(whitelist); 371ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, cached_policy()) 372ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(ReturnRef(fake_pol)) 373ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(ReturnRef(fake_pol)); 374ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 375ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->Execute(); 376ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 377bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 378bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 379bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(SignedSettingsTest, Whitelist) { 380ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<bool> d(true); 381bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen d.expect_success(); 382bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<SignedSettings> s( 383bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettings::CreateWhitelistOp(fake_email_, true, &d)); 384ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData in_pol = BuildPolicyData(std::vector<std::string>()); 385ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData out_pol; 386ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExpectWhitelistOp(s.get(), &in_pol, &out_pol); 387bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 388ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->Execute(); 389ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->OnKeyOpComplete(OwnerManager::SUCCESS, std::vector<uint8>()); 390ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 391ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 392ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(CheckWhitelist(fake_email_, out_pol)); 393ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 394ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 395ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, AddToExistingWhitelist) { 396ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<bool> d(true); 397ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen d.expect_success(); 398ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<SignedSettings> s( 399ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettings::CreateWhitelistOp(fake_email_, true, &d)); 400ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData in_pol = 401ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BuildPolicyData(std::vector<std::string>(1, fake_domain_)); 402ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData out_pol; 403ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExpectWhitelistOp(s.get(), &in_pol, &out_pol); 404bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 40521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen s->Execute(); 406bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen s->OnKeyOpComplete(OwnerManager::SUCCESS, std::vector<uint8>()); 40721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen message_loop_.RunAllPending(); 408ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 409ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(CheckWhitelist(fake_email_, out_pol)); 410bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 411bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 412bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(SignedSettingsTest, Unwhitelist) { 413ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<bool> d(true); 414bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen d.expect_success(); 415bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<SignedSettings> s( 416bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettings::CreateWhitelistOp(fake_email_, false, &d)); 417ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData in_pol = 418ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BuildPolicyData(std::vector<std::string>(1, fake_email_)); 419ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData out_pol; 420ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExpectWhitelistOp(s.get(), &in_pol, &out_pol); 421bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 42221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen s->Execute(); 423bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen s->OnKeyOpComplete(OwnerManager::SUCCESS, std::vector<uint8>()); 42421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen message_loop_.RunAllPending(); 425bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 426ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_FALSE(CheckWhitelist(fake_email_, out_pol)); 427bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 428bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 429ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, RemoveFromExistingWhitelist) { 430ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<bool> d(true); 431ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen d.expect_success(); 432ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<SignedSettings> s( 433ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettings::CreateWhitelistOp(fake_email_, false, &d)); 434ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<std::string> whitelist(1, fake_domain_); 435ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen whitelist.push_back(fake_email_); 436ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen whitelist.push_back(fake_email_ + "m"); 437ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData in_pol = BuildPolicyData(whitelist); 438ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData out_pol; 439ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExpectWhitelistOp(s.get(), &in_pol, &out_pol); 440ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 441ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->Execute(); 442ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->OnKeyOpComplete(OwnerManager::SUCCESS, std::vector<uint8>()); 443ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 444ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 445ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_FALSE(CheckWhitelist(fake_email_, out_pol)); 446bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 447bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 448bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(SignedSettingsTest, StoreProperty) { 449ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<bool> d(true); 450bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen d.expect_success(); 451bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<SignedSettings> s( 452bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettings::CreateStorePropertyOp(fake_prop_, fake_value_, &d)); 453ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 454bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mock_service(s.get(), &m_); 455ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, StartSigningAttempt(_, _)) 456bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 457dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_CALL(m_, GetStatus(_)) 458dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .WillOnce(Return(OwnershipService::OWNERSHIP_TAKEN)); 459ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, has_cached_policy()) 460ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Return(true)); 461ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData in_pol = 462ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BuildPolicyData(std::vector<std::string>(1, fake_email_)); 463ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, cached_policy()) 464ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(ReturnRef(in_pol)); 465ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData out_pol; 466ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, set_cached_policy(A<const em::PolicyData&>())) 467ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(SaveArg<0>(&out_pol)); 468bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 46921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen s->Execute(); 470bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen s->OnKeyOpComplete(OwnerManager::SUCCESS, std::vector<uint8>()); 47121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen message_loop_.RunAllPending(); 472ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 473ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(out_pol.has_policy_value()); 474ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::ChromeDeviceSettingsProto pol; 475ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pol.ParseFromString(out_pol.policy_value()); 476ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(pol.has_guest_mode_enabled()); 477ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(pol.guest_mode_enabled().has_guest_mode_enabled()); 478ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_FALSE(pol.guest_mode_enabled().guest_mode_enabled()); 479bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 480bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 481bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(SignedSettingsTest, StorePropertyNoKey) { 482bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FailingStorePropertyOp(OwnerManager::KEY_UNAVAILABLE); 483bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 484bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 485bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(SignedSettingsTest, StorePropertyFailed) { 486bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FailingStorePropertyOp(OwnerManager::OPERATION_FAILED); 487bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 488bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 489bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(SignedSettingsTest, RetrieveProperty) { 490ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData fake_pol = BuildPolicyData(std::vector<std::string>()); 491ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DoRetrieveProperty(fake_prop_, fake_value_, &fake_pol); 492ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 493ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 494ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, RetrieveOwnerProperty) { 495ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData fake_pol = BuildPolicyData(std::vector<std::string>()); 496ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_pol.set_username(fake_email_); 497ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DoRetrieveProperty(kDeviceOwner, fake_email_, &fake_pol); 498ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 499ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 500ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, ExplicitlyAllowNewUsers) { 501ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData fake_pol = BuildPolicyData(std::vector<std::string>()); 502ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetAllowNewUsers(true, &fake_pol); 503ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DoRetrieveProperty(kAccountsPrefAllowNewUser, "true", &fake_pol); 504ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 505ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 506ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, ExplicitlyDisallowNewUsers) { 507ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<std::string> whitelist(1, fake_email_ + "m"); 508ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData fake_pol = BuildPolicyData(whitelist); 509ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetAllowNewUsers(false, &fake_pol); 510ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DoRetrieveProperty(kAccountsPrefAllowNewUser, "false", &fake_pol); 511ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 512ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 513ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, ImplicitlyDisallowNewUsers) { 514ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<std::string> whitelist(1, fake_email_ + "m"); 515ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData fake_pol = BuildPolicyData(whitelist); 516ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DoRetrieveProperty(kAccountsPrefAllowNewUser, "false", &fake_pol); 517ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 518ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 519ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, AccidentallyDisallowNewUsers) { 520ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData fake_pol = BuildPolicyData(std::vector<std::string>()); 521ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetAllowNewUsers(false, &fake_pol); 522ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DoRetrieveProperty(kAccountsPrefAllowNewUser, "true", &fake_pol); 523ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 524ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 525ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, RetrievePropertyNotFound) { 526ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<std::string> d(fake_value_); 527ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen d.expect_failure(SignedSettings::NOT_FOUND); 528ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<SignedSettings> s( 529ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettings::CreateRetrievePropertyOp("unknown_prop", &d)); 530ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mock_service(s.get(), &m_); 531ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, GetStatus(_)) 532ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Return(OwnershipService::OWNERSHIP_TAKEN)); 533ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, has_cached_policy()) 534ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Return(true)); 535ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 536ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData fake_pol = BuildPolicyData(std::vector<std::string>()); 537ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, cached_policy()) 538ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(ReturnRef(fake_pol)); 539ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 540ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->Execute(); 541ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 542ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 543ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 544ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenACTION_P(Retrieve, s) { (*arg0)((void*)arg1, s.c_str(), s.length()); } 545ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenACTION_P(FinishKeyOp, s) { arg2->OnKeyOpComplete(OwnerManager::SUCCESS, s); } 546ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 547ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, RetrievePolicyToRetrieveProperty) { 548ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<std::string> d(fake_value_); 549bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen d.expect_success(); 550bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<SignedSettings> s( 551bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettings::CreateRetrievePropertyOp(fake_prop_, &d)); 552ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 553ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData fake_pol = BuildPolicyData(std::vector<std::string>()); 554ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string data = fake_pol.SerializeAsString(); 555ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string signed_serialized; 556ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyFetchResponse signed_policy = BuildProto(data, 557ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_value_, 558ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &signed_serialized); 559ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MockLoginLibrary* lib = MockLoginLib(); 560ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(*lib, RequestRetrievePolicy(_, _)) 561ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Retrieve(signed_serialized)) 562ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .RetiresOnSaturation(); 563ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 564bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mock_service(s.get(), &m_); 565ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 566dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_CALL(m_, GetStatus(_)) 567ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Return(OwnershipService::OWNERSHIP_TAKEN)) 568dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .WillOnce(Return(OwnershipService::OWNERSHIP_TAKEN)); 569ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, has_cached_policy()) 570ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Return(false)) 571ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Return(true)); 572ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData out_pol; 573ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, set_cached_policy(A<const em::PolicyData&>())) 574ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(SaveArg<0>(&out_pol)); 575ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, cached_policy()) 576ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(ReturnRef(out_pol)); 577ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 578ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<uint8> fake_sig(fake_value_.c_str(), 579ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_value_.c_str() + fake_value_.length()); 580ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, StartVerifyAttempt(data, fake_sig, _)) 581ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(FinishKeyOp(fake_sig)) 582ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .RetiresOnSaturation(); 583bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 58421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen s->Execute(); 585ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 586ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UnMockLoginLib(); 587bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 588bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 589ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, SignAndStorePolicy) { 590ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<bool> d(true); 591ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen d.expect_success(); 592ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 593ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData in_pol = BuildPolicyData(std::vector<std::string>()); 594ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string data_serialized = in_pol.SerializeAsString(); 595ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string serialized; 596ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyFetchResponse fake_policy = BuildProto(data_serialized, 597ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string(), 598ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &serialized); 59921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen scoped_refptr<SignedSettings> s( 600ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettings::CreateStorePolicyOp(&fake_policy, &d)); 601ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 602ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mock_service(s.get(), &m_); 603ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, StartSigningAttempt(StrEq(data_serialized), _)) 604ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .Times(1); 605ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData out_pol; 606ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, set_cached_policy(A<const em::PolicyData&>())) 607ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(SaveArg<0>(&out_pol)); 608ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 609ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Ask for signature over unsigned policy. 610ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->Execute(); 611ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 612ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 613ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Fake out a successful signing. 614ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string signed_serialized; 615ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyFetchResponse signed_policy = BuildProto(data_serialized, 616ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_value_, 617ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &signed_serialized); 618ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<uint8> fake_sig(fake_value_.c_str(), 619ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_value_.c_str() + fake_value_.length()); 620ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 621ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MockLoginLibrary* lib = MockLoginLib(); 622ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(*lib, RequestStorePolicy(StrEq(signed_serialized), _, s.get())) 623ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(InvokeArgument<1>(static_cast<void*>(s.get()), true)) 624ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .RetiresOnSaturation(); 625ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->OnKeyOpComplete(OwnerManager::SUCCESS, fake_sig); 626ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 627ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UnMockLoginLib(); 628ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 629ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 630ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, StoreSignedPolicy) { 631ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<bool> d(true); 632ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen d.expect_success(); 633ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 634ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData in_pol = BuildPolicyData(std::vector<std::string>()); 635ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string serialized = in_pol.SerializeAsString(); 636ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string signed_serialized; 637ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyFetchResponse signed_policy = BuildProto(serialized, 638ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_value_, 639ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &signed_serialized); 640ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<SignedSettings> s( 641ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettings::CreateStorePolicyOp(&signed_policy, &d)); 642ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MockLoginLibrary* lib = MockLoginLib(); 643ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(*lib, RequestStorePolicy(StrEq(signed_serialized), _, s.get())) 644ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(InvokeArgument<1>(static_cast<void*>(s.get()), true)) 645ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .RetiresOnSaturation(); 646ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 647ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mock_service(s.get(), &m_); 648ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData out_pol; 649ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, set_cached_policy(A<const em::PolicyData&>())) 650ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(SaveArg<0>(&out_pol)); 651ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 652ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->Execute(); 653ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 654ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UnMockLoginLib(); 655ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 656ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 657ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, StorePolicyNoKey) { 658ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FailingStorePolicyOp(OwnerManager::KEY_UNAVAILABLE); 659ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 660ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 661ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, StorePolicyFailed) { 662ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FailingStorePolicyOp(OwnerManager::OPERATION_FAILED); 663ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 664ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 665ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, StorePolicyNoPolicyData) { 666ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NormalDelegate<bool> d(false); 667ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen d.expect_failure(SignedSettings::OPERATION_FAILED); 668ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 669ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string serialized; 670ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyFetchResponse fake_policy = BuildProto(std::string(), 671ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string(), 672ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &serialized); 673ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<SignedSettings> s( 674ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettings::CreateStorePolicyOp(&fake_policy, &d)); 675ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 676ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->Execute(); 677ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 678ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 679ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 680ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, RetrievePolicy) { 681ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData in_pol = BuildPolicyData(std::vector<std::string>()); 682ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string serialized = in_pol.SerializeAsString(); 683ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string signed_serialized; 684ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyFetchResponse signed_policy = BuildProto(serialized, 685ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_value_, 686ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &signed_serialized); 687ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProtoDelegate d(signed_policy); 688ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen d.expect_success(); 689ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<SignedSettings> s(SignedSettings::CreateRetrievePolicyOp(&d)); 690ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 691ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MockLoginLibrary* lib = MockLoginLib(); 692ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(*lib, RequestRetrievePolicy(_, s.get())) 693ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(InvokeArgument<0>(static_cast<void*>(s.get()), 694ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen signed_serialized.c_str(), 695ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen signed_serialized.length())) 696ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .RetiresOnSaturation(); 697ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 698ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mock_service(s.get(), &m_); 699ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<uint8> fake_sig(fake_value_.c_str(), 700ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_value_.c_str() + fake_value_.length()); 701ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, StartVerifyAttempt(serialized, fake_sig, _)) 702ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .Times(1); 703ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData out_pol; 704ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, set_cached_policy(A<const em::PolicyData&>())) 705ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(SaveArg<0>(&out_pol)); 706ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 707ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->Execute(); 708ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 709ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UnMockLoginLib(); 710ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 711ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->OnKeyOpComplete(OwnerManager::SUCCESS, std::vector<uint8>()); 712ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 713ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 714ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 715ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, RetrieveNullPolicy) { 716ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyFetchResponse policy; 717ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProtoDelegate d(policy); 71821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen d.expect_failure(SignedSettings::NOT_FOUND); 719ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<SignedSettings> s(SignedSettings::CreateRetrievePolicyOp(&d)); 720ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 72121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen MockLoginLibrary* lib = MockLoginLib(); 722ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(*lib, RequestRetrievePolicy(_, s.get())) 723ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(InvokeArgument<0>(static_cast<void*>(s.get()), 724ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static_cast<const char*>(NULL), 725ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 0)) 726ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .RetiresOnSaturation(); 727ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 728ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->Execute(); 729ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 730ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UnMockLoginLib(); 731ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 732ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 733ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, RetrieveEmptyPolicy) { 734ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string serialized; 735ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyFetchResponse policy = BuildProto("", "", &serialized); 736ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProtoDelegate d(policy); 737ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen d.expect_failure(SignedSettings::NOT_FOUND); 738ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<SignedSettings> s(SignedSettings::CreateRetrievePolicyOp(&d)); 739ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 740ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MockLoginLibrary* lib = MockLoginLib(); 741ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(*lib, RequestRetrievePolicy(_, s.get())) 742ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(InvokeArgument<0>(static_cast<void*>(s.get()), "", 0)) 74321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen .RetiresOnSaturation(); 744ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 74521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen s->Execute(); 746ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 74721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen UnMockLoginLib(); 74821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 74921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 750ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, RetrieveUnsignedPolicy) { 751ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string serialized; 752ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyFetchResponse policy = BuildProto(fake_prop_, 753ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string(), 754ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &serialized); 755ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProtoDelegate d(policy); 756ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen d.expect_failure(SignedSettings::BAD_SIGNATURE); 757ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<SignedSettings> s(SignedSettings::CreateRetrievePolicyOp(&d)); 758ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 759ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MockLoginLibrary* lib = MockLoginLib(); 760ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(*lib, RequestRetrievePolicy(_, s.get())) 761ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(InvokeArgument<0>(static_cast<void*>(s.get()), 762ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen serialized.c_str(), 763ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen serialized.length())) 764ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .RetiresOnSaturation(); 765ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 766ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->Execute(); 767ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 768ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UnMockLoginLib(); 769bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 770bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 771ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SignedSettingsTest, RetrieveMalsignedPolicy) { 772ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string signed_serialized; 773ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyFetchResponse signed_policy = BuildProto(fake_prop_, 774ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_value_, 775ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &signed_serialized); 776ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProtoDelegate d(signed_policy); 777ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen d.expect_failure(SignedSettings::BAD_SIGNATURE); 778ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<SignedSettings> s(SignedSettings::CreateRetrievePolicyOp(&d)); 779ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 780ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MockLoginLibrary* lib = MockLoginLib(); 781ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(*lib, RequestRetrievePolicy(_, s.get())) 782ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(InvokeArgument<0>(static_cast<void*>(s.get()), 783ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen signed_serialized.c_str(), 784ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen signed_serialized.length())) 785ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .RetiresOnSaturation(); 786ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 787ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mock_service(s.get(), &m_); 788ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<uint8> fake_sig(fake_value_.c_str(), 789ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_value_.c_str() + fake_value_.length()); 790ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, StartVerifyAttempt(fake_prop_, fake_sig, _)) 791ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .Times(1); 792ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 793ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->Execute(); 794ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 795ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UnMockLoginLib(); 796ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 797ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->OnKeyOpComplete(OwnerManager::OPERATION_FAILED, std::vector<uint8>()); 798ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.RunAllPending(); 799bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 800bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 801bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace chromeos 802