fake_hardware.h revision aea4c1cea20dda7ae7e85fc8924a2d784f70d806
1aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 2aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Copyright (C) 2013 The Android Open Source Project 3aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 4aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Licensed under the Apache License, Version 2.0 (the "License"); 5aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// you may not use this file except in compliance with the License. 6aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// You may obtain a copy of the License at 7aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 8aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// http://www.apache.org/licenses/LICENSE-2.0 9aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 10aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Unless required by applicable law or agreed to in writing, software 11aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// distributed under the License is distributed on an "AS IS" BASIS, 12aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// See the License for the specific language governing permissions and 14aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// limitations under the License. 15aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 164243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 17cf175a098081f3f0e9ca52d997a7ce1585c14c2dGilad Arnold#ifndef UPDATE_ENGINE_FAKE_HARDWARE_H_ 18cf175a098081f3f0e9ca52d997a7ce1585c14c2dGilad Arnold#define UPDATE_ENGINE_FAKE_HARDWARE_H_ 194243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 2083692e4fd17b5669eeb3edb24b8c4cd8152c7283Don Garrett#include <map> 21df632d17329738d977494625c7819c9d4a123567Alex Deymo#include <string> 22df632d17329738d977494625c7819c9d4a123567Alex Deymo#include <vector> 2383692e4fd17b5669eeb3edb24b8c4cd8152c7283Don Garrett 24bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo#include <base/time/time.h> 25bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo 264243291a6655972fe89d4747a0089834c9e47c20Alex Deymo#include "update_engine/hardware_interface.h" 274243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 284243291a6655972fe89d4747a0089834c9e47c20Alex Deymonamespace chromeos_update_engine { 294243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 304243291a6655972fe89d4747a0089834c9e47c20Alex Deymo// Implements a fake hardware interface used for testing. 314243291a6655972fe89d4747a0089834c9e47c20Alex Deymoclass FakeHardware : public HardwareInterface { 324243291a6655972fe89d4747a0089834c9e47c20Alex Deymo public: 33ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo // Value used to signal that the powerwash_count file is not present. When 34ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo // this value is used in SetPowerwashCount(), GetPowerwashCount() will return 35ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo // false. 36ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo static const int kPowerwashCountNotSet = -1; 37ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo 384da2cc108871803c765b3479d5c1ce329cb0dd13J. Richard Barnette FakeHardware() 3983692e4fd17b5669eeb3edb24b8c4cd8152c7283Don Garrett : kernel_device_("/dev/sdz4"), 4083692e4fd17b5669eeb3edb24b8c4cd8152c7283Don Garrett boot_device_("/dev/sdz5"), 415708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo is_boot_device_removable_(false), 4244b9b7ed0a702e54afccb86228668c59151859beChris Sosa kernel_devices_({"/dev/sdz2", "/dev/sdz4"}), 43056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette is_official_build_(true), 44056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette is_normal_boot_mode_(true), 45bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo is_oobe_complete_(false), 46522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette hardware_class_("Fake HWID BLAH-1234"), 47522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette firmware_version_("Fake Firmware v1.0.1"), 48ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo ec_version_("Fake EC v1.0a"), 49ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo powerwash_count_(kPowerwashCountNotSet) {} 504243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 514243291a6655972fe89d4747a0089834c9e47c20Alex Deymo // HardwareInterface methods. 52157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko std::string BootKernelDevice() const override { return kernel_device_; } 53d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko 54157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko std::string BootDevice() const override { return boot_device_; } 55d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko 56157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko bool IsBootDeviceRemovable() const override { 575708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo return is_boot_device_removable_; 585708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo } 595708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo 60157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko std::vector<std::string> GetKernelDevices() const override { 6144b9b7ed0a702e54afccb86228668c59151859beChris Sosa return kernel_devices_; 62d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko } 6359e253e555072d11f3646fc1286459cbc6aa5419Alex Vakulenko 64157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko bool IsKernelBootable(const std::string& kernel_device, 65157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko bool* bootable) const override { 66d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko auto i = is_bootable_.find(kernel_device); 67d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko *bootable = (i != is_bootable_.end()) ? i->second : true; 68d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko return true; 69d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko } 70d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko 71157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko bool MarkKernelUnbootable(const std::string& kernel_device) override { 72d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko is_bootable_[kernel_device] = false; 73d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko return true; 74d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko } 75d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko 76157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko bool IsOfficialBuild() const override { return is_official_build_; } 77d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko 78157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko bool IsNormalBootMode() const override { return is_normal_boot_mode_; } 79d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko 80157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko bool IsOOBEComplete(base::Time* out_time_of_oobe) const override { 81bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo if (out_time_of_oobe != nullptr) 82bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo *out_time_of_oobe = oobe_timestamp_; 83bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo return is_oobe_complete_; 84bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo } 85bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo 86157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko std::string GetHardwareClass() const override { return hardware_class_; } 87d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko 88157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko std::string GetFirmwareVersion() const override { return firmware_version_; } 89d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko 90157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko std::string GetECVersion() const override { return ec_version_; } 914243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 92ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo int GetPowerwashCount() const override { return powerwash_count_; } 93ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo 944243291a6655972fe89d4747a0089834c9e47c20Alex Deymo // Setters 955708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo void SetBootDevice(const std::string& boot_device) { 964243291a6655972fe89d4747a0089834c9e47c20Alex Deymo boot_device_ = boot_device; 974243291a6655972fe89d4747a0089834c9e47c20Alex Deymo } 984243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 995708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo void SetIsBootDeviceRemovable(bool is_boot_device_removable) { 1005708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo is_boot_device_removable_ = is_boot_device_removable; 1015708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo } 1025708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo 103056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette void SetIsOfficialBuild(bool is_official_build) { 104056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette is_official_build_ = is_official_build; 105056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette } 106056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette 107056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette void SetIsNormalBootMode(bool is_normal_boot_mode) { 108056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette is_normal_boot_mode_ = is_normal_boot_mode; 109056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette } 110056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette 111bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo // Sets the IsOOBEComplete to True with the given timestamp. 112bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo void SetIsOOBEComplete(base::Time oobe_timestamp) { 113bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo is_oobe_complete_ = true; 114bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo oobe_timestamp_ = oobe_timestamp; 115bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo } 116bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo 117bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo // Sets the IsOOBEComplete to False. 118bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo void UnsetIsOOBEComplete() { 119bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo is_oobe_complete_ = false; 120bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo } 121bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo 122522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette void SetHardwareClass(std::string hardware_class) { 123522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette hardware_class_ = hardware_class; 124522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette } 125522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette 126522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette void SetFirmwareVersion(std::string firmware_version) { 127522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette firmware_version_ = firmware_version; 128522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette } 129522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette 130522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette void SetECVersion(std::string ec_version) { 131522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette ec_version_ = ec_version; 132522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette } 133522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette 134ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo void SetPowerwashCount(int powerwash_count) { 135ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo powerwash_count_ = powerwash_count; 136ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo } 137ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo 1384243291a6655972fe89d4747a0089834c9e47c20Alex Deymo private: 13983692e4fd17b5669eeb3edb24b8c4cd8152c7283Don Garrett std::string kernel_device_; 1404243291a6655972fe89d4747a0089834c9e47c20Alex Deymo std::string boot_device_; 1415708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo bool is_boot_device_removable_; 14244b9b7ed0a702e54afccb86228668c59151859beChris Sosa std::vector<std::string> kernel_devices_; 14383692e4fd17b5669eeb3edb24b8c4cd8152c7283Don Garrett std::map<std::string, bool> is_bootable_; 144056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette bool is_official_build_; 145056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette bool is_normal_boot_mode_; 146bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo bool is_oobe_complete_; 147bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo base::Time oobe_timestamp_; 148522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette std::string hardware_class_; 149522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette std::string firmware_version_; 150522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette std::string ec_version_; 151ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo int powerwash_count_; 1524243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 1534243291a6655972fe89d4747a0089834c9e47c20Alex Deymo DISALLOW_COPY_AND_ASSIGN(FakeHardware); 1544243291a6655972fe89d4747a0089834c9e47c20Alex Deymo}; 1554243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 1564243291a6655972fe89d4747a0089834c9e47c20Alex Deymo} // namespace chromeos_update_engine 1574243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 158cf175a098081f3f0e9ca52d997a7ce1585c14c2dGilad Arnold#endif // UPDATE_ENGINE_FAKE_HARDWARE_H_ 159