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/owner_manager.h" 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/owner_manager_unittest.h" 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <string> 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/file_path.h" 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/file_util.h" 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/logging.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_temp_dir.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "crypto/nss_util.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "crypto/rsa_private_key.h" 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/mock_owner_key_utils.h" 17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gmock/include/gmock/gmock.h" 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gtest/include/gtest/gtest.h" 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::crypto::RSAPrivateKey; 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::DoAll; 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::Eq; 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::Invoke; 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::Return; 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::SetArgumentPointee; 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::_; 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace chromeos { 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass OwnerManagerTest : public ::testing::Test { 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OwnerManagerTest() 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : message_loop_(MessageLoop::TYPE_UI), 35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_thread_(BrowserThread::UI, &message_loop_), 36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick file_thread_(BrowserThread::FILE), 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mock_(new MockKeyUtils), 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen injector_(mock_) /* injector_ takes ownership of mock_ */ { 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual ~OwnerManagerTest() {} 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void SetUp() { 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen crypto::OpenPersistentNSSDB(); // TODO(cmasone): use test DB instead 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen fake_private_key_.reset(RSAPrivateKey::Create(256)); 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(fake_private_key_->ExportPublicKey(&fake_public_key_)); 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Mimic ownership. 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(tmpdir_.CreateUniqueTempDir()); 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(file_util::CreateTemporaryFileInDir(tmpdir_.path(), &tmpfile_)); 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen file_thread_.Start(); 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OwnerKeyUtils::set_factory(&injector_); 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void TearDown() { 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OwnerKeyUtils::set_factory(NULL); 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void StartUnowned() { 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen file_util::Delete(tmpfile_, false); 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void InjectKeys(OwnerManager* manager) { 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen manager->public_key_ = fake_public_key_; 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen manager->private_key_.reset(fake_private_key_.release()); 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ScopedTempDir tmpdir_; 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FilePath tmpfile_; 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MessageLoop message_loop_; 72731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread ui_thread_; 73731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread file_thread_; 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::vector<uint8> fake_public_key_; 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<RSAPrivateKey> fake_private_key_; 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockKeyUtils* mock_; 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockInjector injector_; 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(OwnerManagerTest, UpdateOwnerKey) { 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<OwnerManager> manager(new OwnerManager); 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MockKeyUpdateUser delegate; 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BrowserThread::PostTask( 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BrowserThread::FILE, FROM_HERE, 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NewRunnableMethod(manager.get(), 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &OwnerManager::UpdateOwnerKey, 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BrowserThread::UI, 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<uint8>(), 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &delegate)); 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message_loop_.Run(); 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(OwnerManagerTest, LoadOwnerKeyFail) { 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen StartUnowned(); 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockKeyLoadObserver loader; 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<OwnerManager> manager(new OwnerManager); 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_, GetOwnerKeyFilePath()) 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(Return(tmpfile_)); 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_, ImportPublicKey(tmpfile_, _)) 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillOnce(Return(false)) 106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .RetiresOnSaturation(); 107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 108731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask( 109731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::FILE, FROM_HERE, 110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NewRunnableMethod(manager.get(), 111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &OwnerManager::LoadOwnerKey)); 112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen message_loop_.Run(); 113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(OwnerManagerTest, AlreadyLoadedOwnerKey) { 116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockKeyLoadObserver loader; 117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen loader.ExpectKeyFetchSuccess(true); 118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<OwnerManager> manager(new OwnerManager); 119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_, GetOwnerKeyFilePath()) 121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(Return(tmpfile_)); 122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen InjectKeys(manager.get()); 124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 125731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask( 126731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::FILE, FROM_HERE, 127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NewRunnableMethod(manager.get(), 128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &OwnerManager::LoadOwnerKey)); 129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen message_loop_.Run(); 131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(OwnerManagerTest, LoadOwnerKey) { 134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockKeyLoadObserver loader; 135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen loader.ExpectKeyFetchSuccess(true); 136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<OwnerManager> manager(new OwnerManager); 137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_, GetOwnerKeyFilePath()) 139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(Return(tmpfile_)); 140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_, ImportPublicKey(tmpfile_, _)) 141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillOnce(DoAll(SetArgumentPointee<1>(fake_public_key_), 142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Return(true))) 143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .RetiresOnSaturation(); 144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 145731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask( 146731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::FILE, FROM_HERE, 147bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NewRunnableMethod(manager.get(), 148bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &OwnerManager::LoadOwnerKey)); 149bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen message_loop_.Run(); 151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 152bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 153bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(OwnerManagerTest, GetKeyFailDuringVerify) { 154bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen StartUnowned(); 155bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockKeyLoadObserver loader; 156bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen loader.ExpectKeyFetchSuccess(false); 157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<OwnerManager> manager(new OwnerManager); 158bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 159bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_, GetOwnerKeyFilePath()) 160bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(Return(tmpfile_)); 161bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_, ImportPublicKey(tmpfile_, _)) 162bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillOnce(Return(false)) 163bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .RetiresOnSaturation(); 164bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 165bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockKeyUser delegate(OwnerManager::KEY_UNAVAILABLE); 166bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 167731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask( 168731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::FILE, FROM_HERE, 169bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NewRunnableMethod(manager.get(), 170bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &OwnerManager::Verify, 171731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::UI, 172bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string(), 173bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::vector<uint8>(), 174bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &delegate)); 175bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen message_loop_.Run(); 176bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 177bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 178bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(OwnerManagerTest, AlreadyHaveKeysVerify) { 179bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<OwnerManager> manager(new OwnerManager); 180bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 181bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string data; 182bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::vector<uint8> sig(0, 2); 183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 184bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_, GetOwnerKeyFilePath()) 185bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(Return(tmpfile_)); 186bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_, Verify(Eq(data), Eq(sig), Eq(fake_public_key_))) 187bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillOnce(Return(true)) 188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .RetiresOnSaturation(); 189bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 190bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen InjectKeys(manager.get()); 191bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockKeyUser delegate(OwnerManager::SUCCESS); 192bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 193731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask( 194731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::FILE, FROM_HERE, 195bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NewRunnableMethod(manager.get(), 196bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &OwnerManager::Verify, 197731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::UI, 198bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen data, 199bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen sig, 200bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &delegate)); 201bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen message_loop_.Run(); 202bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 203bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 204bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(OwnerManagerTest, GetKeyAndVerify) { 205bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockKeyLoadObserver loader; 206bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen loader.ExpectKeyFetchSuccess(true); 207bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen loader.SetQuitOnKeyFetch(false); 208bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<OwnerManager> manager(new OwnerManager); 209bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 210bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string data; 211bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::vector<uint8> sig(0, 2); 212bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 213bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_, GetOwnerKeyFilePath()) 214bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(Return(tmpfile_)); 215bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_, ImportPublicKey(tmpfile_, _)) 216bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillOnce(DoAll(SetArgumentPointee<1>(fake_public_key_), 217bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Return(true))) 218bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .RetiresOnSaturation(); 219bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_, Verify(Eq(data), Eq(sig), Eq(fake_public_key_))) 220bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillOnce(Return(true)) 221bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .RetiresOnSaturation(); 222bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 223bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockKeyUser delegate(OwnerManager::SUCCESS); 224bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 225731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask( 226731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::FILE, FROM_HERE, 227bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NewRunnableMethod(manager.get(), 228bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &OwnerManager::Verify, 229731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::UI, 230bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen data, 231bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen sig, 232bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &delegate)); 233bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen message_loop_.Run(); 234bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 235bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 236bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(OwnerManagerTest, AlreadyHaveKeysSign) { 237bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<OwnerManager> manager(new OwnerManager); 238bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 239bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string data; 240bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::vector<uint8> sig(0, 2); 241bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 242bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_, GetOwnerKeyFilePath()) 243bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(Return(tmpfile_)); 244bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_, Sign(Eq(data), _, Eq(fake_private_key_.get()))) 245bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillOnce(DoAll(SetArgumentPointee<1>(sig), 246bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Return(true))) 247bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .RetiresOnSaturation(); 248bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 249bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen InjectKeys(manager.get()); 250bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockSigner delegate(OwnerManager::SUCCESS, sig); 251bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 252731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask( 253731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::FILE, FROM_HERE, 254bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NewRunnableMethod(manager.get(), 255bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &OwnerManager::Sign, 256731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::UI, 257bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen data, 258bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &delegate)); 259bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen message_loop_.Run(); 260bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 261bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 262bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace chromeos 263