1dc0f95d653279beabeb9817299e2902918ba123eKristian 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#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_OWNER_MANAGER_UNITTEST_H_ 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_CHROMEOS_LOGIN_OWNER_MANAGER_UNITTEST_H_ 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/owner_manager.h" 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <string> 1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include <vector> 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/file_path.h" 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/file_util.h" 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/logging.h" 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_observer.h" 17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_registrar.h" 18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_service.h" 19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_type.h" 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gmock/include/gmock/gmock.h" 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gtest/include/gtest/gtest.h" 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace chromeos { 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass MockKeyLoadObserver : public NotificationObserver { 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockKeyLoadObserver() 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : success_expected_(false), 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen quit_on_observe_(true), 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen observed_(false) { 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen registrar_.Add( 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this, 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NotificationType::OWNER_KEY_FETCH_ATTEMPT_FAILED, 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NotificationService::AllSources()); 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen registrar_.Add( 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this, 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NotificationType::OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED, 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NotificationService::AllSources()); 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual ~MockKeyLoadObserver() { 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_TRUE(observed_); 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // NotificationObserver implementation. 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void Observe(NotificationType type, 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const NotificationSource& source, 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const NotificationDetails& details) { 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LOG(INFO) << "Observed key fetch event"; 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (type == NotificationType::OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED) { 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_TRUE(success_expected_); 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen observed_ = true; 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (quit_on_observe_) 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MessageLoop::current()->Quit(); 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (type == NotificationType::OWNER_KEY_FETCH_ATTEMPT_FAILED) { 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_FALSE(success_expected_); 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen observed_ = true; 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (quit_on_observe_) 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MessageLoop::current()->Quit(); 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void ExpectKeyFetchSuccess(bool should_succeed) { 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen success_expected_ = should_succeed; 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void SetQuitOnKeyFetch(bool should_quit) { quit_on_observe_ = should_quit; } 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NotificationRegistrar registrar_; 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool success_expected_; 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool quit_on_observe_; 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool observed_; 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(MockKeyLoadObserver); 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass MockKeyUser : public OwnerManager::Delegate { 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen explicit MockKeyUser(const OwnerManager::KeyOpCode expected) 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : expected_(expected), 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen quit_on_callback_(true) { 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockKeyUser(const OwnerManager::KeyOpCode expected, bool quit_on_callback) 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : expected_(expected), 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen quit_on_callback_(quit_on_callback) { 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual ~MockKeyUser() {} 89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code, 91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::vector<uint8>& payload) { 92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_EQ(expected_, return_code); 93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (quit_on_callback_) 94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MessageLoop::current()->Quit(); 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const OwnerManager::KeyOpCode expected_; 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const bool quit_on_callback_; 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(MockKeyUser); 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass MockKeyUpdateUser : public OwnerManager::KeyUpdateDelegate { 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MockKeyUpdateUser() {} 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~MockKeyUpdateUser() {} 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnKeyUpdated() { 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MessageLoop::current()->Quit(); 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(MockKeyUpdateUser); 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass MockSigner : public OwnerManager::Delegate { 118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockSigner(const OwnerManager::KeyOpCode expected, 120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::vector<uint8>& sig) 121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : expected_code_(expected), 122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen expected_sig_(sig) { 123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual ~MockSigner() {} 126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code, 128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::vector<uint8>& payload) { 129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_EQ(expected_code_, return_code); 130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (uint32 i = 0; i < payload.size(); ++i) 131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_EQ(expected_sig_[i], payload[i]); 132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MessageLoop::current()->Quit(); 133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const OwnerManager::KeyOpCode expected_code_; 136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::vector<uint8> expected_sig_; 137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(MockSigner); 140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace chromeos 143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif // CHROME_BROWSER_CHROMEOS_LOGIN_OWNER_MANAGER_UNITTEST_H_ 145