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_helper.h" 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/cros/cros_library.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/cros_settings_names.h" 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/mock_ownership_service.h" 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/owner_manager.h" 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/signed_settings.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/policy/proto/chrome_device_policy.pb.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/policy/proto/device_management_backend.pb.h" 14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gmock/include/gmock/gmock.h" 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gtest/include/gtest/gtest.h" 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::_; 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::A; 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::AtLeast; 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::InSequence; 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::Invoke; 23dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenusing ::testing::Return; 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::ReturnRef; 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::SaveArg; 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::WithArg; 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace em = enterprise_management; 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace chromeos { 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass MockSignedSettingsHelperCallback : public SignedSettingsHelper::Callback { 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 3321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen MOCK_METHOD2(OnCheckWhitelistCompleted, void( 3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SignedSettings::ReturnCode code, const std::string& email)); 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MOCK_METHOD2(OnWhitelistCompleted, void( 3621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SignedSettings::ReturnCode code, const std::string& email)); 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MOCK_METHOD2(OnUnwhitelistCompleted, void( 3821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SignedSettings::ReturnCode code, const std::string& email)); 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MOCK_METHOD3(OnStorePropertyCompleted, void( 4021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SignedSettings::ReturnCode code, 4121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string& name, 4221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string& value)); 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MOCK_METHOD3(OnRetrievePropertyCompleted, void( 4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SignedSettings::ReturnCode code, 4521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string& name, 4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string& value)); 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass SignedSettingsHelperTest : public ::testing::Test, 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public SignedSettingsHelper::TestDelegate { 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelperTest() 533f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen : fake_email_("fakey@example.com"), 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_prop_(kAccountsPrefAllowGuest), 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fake_value_("false"), 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen message_loop_(MessageLoop::TYPE_UI), 57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_thread_(BrowserThread::UI, &message_loop_), 58731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick file_thread_(BrowserThread::FILE), 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen pending_ops_(0) { 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void SetUp() { 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen file_thread_.Start(); 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Get()->set_test_delegate(this); 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void TearDown() { 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Get()->set_test_delegate(NULL); 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnOpCreated(SignedSettings* op) { 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Use MockOwnershipService for all SignedSettings op. 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen op->set_service(&m_); 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnOpStarted(SignedSettings* op) { 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnOpCompleted(SignedSettings* op) { 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen --pending_ops_; 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!pending_ops_) 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MessageLoop::current()->Quit(); 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static void OnKeyOpComplete(OwnerManager::Delegate* op) { 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen op->OnKeyOpComplete(OwnerManager::SUCCESS, std::vector<uint8>()); 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData BuildPolicyData() { 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData to_return; 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::ChromeDeviceSettingsProto pol; 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen to_return.set_policy_type(SignedSettings::kDevicePolicyType); 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen to_return.set_policy_value(pol.SerializeAsString()); 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return to_return; 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string fake_email_; 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string fake_prop_; 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string fake_value_; 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockOwnershipService m_; 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MessageLoop message_loop_; 103731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread ui_thread_; 104731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread file_thread_; 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int pending_ops_; 10721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 10821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ScopedStubCrosEnabler stub_cros_enabler_; 109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(SignedSettingsHelperTest, SerializedOps) { 112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockSignedSettingsHelperCallback cb; 113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, GetStatus(_)) 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .Times(2) 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillRepeatedly(Return(OwnershipService::OWNERSHIP_TAKEN)); 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, has_cached_policy()) 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .Times(5) 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillRepeatedly(Return(true)); 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData fake_pol = BuildPolicyData(); 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, cached_policy()) 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .Times(5) 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillRepeatedly(ReturnRef(fake_pol)); 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, set_cached_policy(A<const em::PolicyData&>())) 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .Times(3) 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillRepeatedly(SaveArg<0>(&fake_pol)); 127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen InSequence s; 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, StartSigningAttempt(_, A<OwnerManager::Delegate*>())) 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(WithArg<1>(Invoke(&SignedSettingsHelperTest::OnKeyOpComplete))); 13121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(cb, OnWhitelistCompleted(SignedSettings::SUCCESS, _)) 132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(cb, OnCheckWhitelistCompleted(SignedSettings::SUCCESS, _)) 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .Times(1); 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, StartSigningAttempt(_, A<OwnerManager::Delegate*>())) 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(WithArg<1>(Invoke(&SignedSettingsHelperTest::OnKeyOpComplete))); 13921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(cb, OnUnwhitelistCompleted(SignedSettings::SUCCESS, _)) 140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, StartSigningAttempt(_, A<OwnerManager::Delegate*>())) 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(WithArg<1>(Invoke(&SignedSettingsHelperTest::OnKeyOpComplete))); 14421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(cb, OnStorePropertyCompleted(SignedSettings::SUCCESS, _, _)) 145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 14721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(cb, OnRetrievePropertyCompleted(SignedSettings::SUCCESS, _, _)) 148bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 149bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen pending_ops_ = 5; 151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Get()->StartWhitelistOp(fake_email_, true, &cb); 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettingsHelper::Get()->StartCheckWhitelistOp(fake_email_, &cb); 153bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Get()->StartWhitelistOp(fake_email_, false, &cb); 154bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Get()->StartStorePropertyOp(fake_prop_, fake_value_, 155bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &cb); 156bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Get()->StartRetrieveProperty(fake_prop_, &cb); 157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 158bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen message_loop_.Run(); 159bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 160bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 161bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(SignedSettingsHelperTest, CanceledOps) { 162bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockSignedSettingsHelperCallback cb; 163bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, GetStatus(_)) 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .Times(2) 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillRepeatedly(Return(OwnershipService::OWNERSHIP_TAKEN)); 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, has_cached_policy()) 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .Times(6) 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillRepeatedly(Return(true)); 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyData fake_pol = BuildPolicyData(); 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, cached_policy()) 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .Times(7) 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillRepeatedly(ReturnRef(fake_pol)); 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, set_cached_policy(A<const em::PolicyData&>())) 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .Times(3) 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillRepeatedly(SaveArg<0>(&fake_pol)); 177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 178bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen InSequence s; 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, StartSigningAttempt(_, A<OwnerManager::Delegate*>())) 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(WithArg<1>(Invoke(&SignedSettingsHelperTest::OnKeyOpComplete))); 18221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(cb, OnWhitelistCompleted(SignedSettings::SUCCESS, _)) 183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(cb, OnCheckWhitelistCompleted(SignedSettings::SUCCESS, _)) 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .Times(1); 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, StartSigningAttempt(_, A<OwnerManager::Delegate*>())) 189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(WithArg<1>(Invoke(&SignedSettingsHelperTest::OnKeyOpComplete))); 19021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(cb, OnUnwhitelistCompleted(SignedSettings::SUCCESS, _)) 191bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 192bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 193bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // CheckWhitelistOp for cb_to_be_canceled still gets executed but callback 194bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // does not happen. 195bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(m_, StartSigningAttempt(_, A<OwnerManager::Delegate*>())) 197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(WithArg<1>(Invoke(&SignedSettingsHelperTest::OnKeyOpComplete))); 19821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(cb, OnStorePropertyCompleted(SignedSettings::SUCCESS, _, _)) 199bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 20121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(cb, OnRetrievePropertyCompleted(SignedSettings::SUCCESS, _, _)) 202bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 203bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 204bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen pending_ops_ = 6; 205bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Get()->StartWhitelistOp(fake_email_, true, &cb); 206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettingsHelper::Get()->StartCheckWhitelistOp(fake_email_, &cb); 207bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Get()->StartWhitelistOp(fake_email_, false, &cb); 208bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 209bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockSignedSettingsHelperCallback cb_to_be_canceled; 210bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Get()->StartCheckWhitelistOp(fake_email_, 211bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &cb_to_be_canceled); 212bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Get()->CancelCallback(&cb_to_be_canceled); 213bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 214bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Get()->StartStorePropertyOp(fake_prop_, fake_value_, 215bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &cb); 216bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Get()->StartRetrieveProperty(fake_prop_, &cb); 217bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 218bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen message_loop_.Run(); 219bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 220bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 221bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace chromeos 222