fake_hardware.h revision 157fe307f162d13f53e7f98f6e2da7c60c0ff001
1ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley// Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 2ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley// Use of this source code is governed by a BSD-style license that can be 3ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley// found in the LICENSE file. 4ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 5ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#ifndef UPDATE_ENGINE_FAKE_HARDWARE_H_ 6ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#define UPDATE_ENGINE_FAKE_HARDWARE_H_ 7ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 8ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#include <map> 9ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#include <string> 10ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#include <vector> 11ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 12ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#include <base/time/time.h> 13ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 14ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#include "update_engine/hardware_interface.h" 15ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 16ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wileynamespace chromeos_update_engine { 17ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 18ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley// Implements a fake hardware interface used for testing. 19ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wileyclass FakeHardware : public HardwareInterface { 20ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley public: 21ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley FakeHardware() 22ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley : kernel_device_("/dev/sdz4"), 23ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley boot_device_("/dev/sdz5"), 24ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley is_boot_device_removable_(false), 25ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley kernel_devices_({"/dev/sdz2", "/dev/sdz4"}), 26ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley is_official_build_(true), 27ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley is_normal_boot_mode_(true), 28ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley is_oobe_complete_(false), 29ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley hardware_class_("Fake HWID BLAH-1234"), 30ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley firmware_version_("Fake Firmware v1.0.1"), 31ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley ec_version_("Fake EC v1.0a") {} 32ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 33ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley // HardwareInterface methods. 34ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley std::string BootKernelDevice() const override { return kernel_device_; } 35ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 36ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley std::string BootDevice() const override { return boot_device_; } 37ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 38ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley bool IsBootDeviceRemovable() const override { 39ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley return is_boot_device_removable_; 40ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley } 41ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 42ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley std::vector<std::string> GetKernelDevices() const override { 43ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley return kernel_devices_; 44ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley } 45ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 46ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley bool IsKernelBootable(const std::string& kernel_device, 47ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley bool* bootable) const override { 48ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley auto i = is_bootable_.find(kernel_device); 49ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley *bootable = (i != is_bootable_.end()) ? i->second : true; 50ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley return true; 51ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley } 52ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 53ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley bool MarkKernelUnbootable(const std::string& kernel_device) override { 54ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley is_bootable_[kernel_device] = false; 55ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley return true; 56ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley } 57ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 58ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley bool IsOfficialBuild() const override { return is_official_build_; } 59ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 60ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley bool IsNormalBootMode() const override { return is_normal_boot_mode_; } 61ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 62ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley bool IsOOBEComplete(base::Time* out_time_of_oobe) const override { 63ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley if (out_time_of_oobe != nullptr) 64ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley *out_time_of_oobe = oobe_timestamp_; 65ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley return is_oobe_complete_; 66ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley } 67ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 68ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley std::string GetHardwareClass() const override { return hardware_class_; } 69ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 70ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley std::string GetFirmwareVersion() const override { return firmware_version_; } 71ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 72ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley std::string GetECVersion() const override { return ec_version_; } 73ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 74ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley // Setters 75ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley void SetBootDevice(const std::string& boot_device) { 76ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley boot_device_ = boot_device; 77ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley } 78ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 79ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley void SetIsBootDeviceRemovable(bool is_boot_device_removable) { 80ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley is_boot_device_removable_ = is_boot_device_removable; 81ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley } 82ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 83ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley void SetIsOfficialBuild(bool is_official_build) { 84ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley is_official_build_ = is_official_build; 85ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley } 86ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 87ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley void SetIsNormalBootMode(bool is_normal_boot_mode) { 88ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley is_normal_boot_mode_ = is_normal_boot_mode; 89ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley } 90ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 91ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley // Sets the IsOOBEComplete to True with the given timestamp. 92ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley void SetIsOOBEComplete(base::Time oobe_timestamp) { 93ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley is_oobe_complete_ = true; 94ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley oobe_timestamp_ = oobe_timestamp; 95ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley } 96ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 97ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley // Sets the IsOOBEComplete to False. 98ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley void UnsetIsOOBEComplete() { 99ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley is_oobe_complete_ = false; 100ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley } 101ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 102ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley void SetHardwareClass(std::string hardware_class) { 103ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley hardware_class_ = hardware_class; 104ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley } 105ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 106ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley void SetFirmwareVersion(std::string firmware_version) { 107ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley firmware_version_ = firmware_version; 108ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley } 109ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 110ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley void SetECVersion(std::string ec_version) { 111ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley ec_version_ = ec_version; 112ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley } 113ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 114ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley private: 115ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley std::string kernel_device_; 116ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley std::string boot_device_; 117ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley bool is_boot_device_removable_; 118ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley std::vector<std::string> kernel_devices_; 119ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley std::map<std::string, bool> is_bootable_; 120ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley bool is_official_build_; 121ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley bool is_normal_boot_mode_; 122ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley bool is_oobe_complete_; 123ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley base::Time oobe_timestamp_; 124ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley std::string hardware_class_; 125ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley std::string firmware_version_; 126ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley std::string ec_version_; 127ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 128ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley DISALLOW_COPY_AND_ASSIGN(FakeHardware); 129ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley}; 130ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 131ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley} // namespace chromeos_update_engine 132ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley 133ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#endif // UPDATE_ENGINE_FAKE_HARDWARE_H_ 134ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley