1 // 2 // Copyright (C) 2013 The Android Open Source Project 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 // 16 17 #ifndef UPDATE_ENGINE_COMMON_FAKE_HARDWARE_H_ 18 #define UPDATE_ENGINE_COMMON_FAKE_HARDWARE_H_ 19 20 #include <map> 21 #include <string> 22 23 #include <base/time/time.h> 24 25 #include "update_engine/common/hardware_interface.h" 26 27 namespace chromeos_update_engine { 28 29 // Implements a fake hardware interface used for testing. 30 class FakeHardware : public HardwareInterface { 31 public: 32 // Value used to signal that the powerwash_count file is not present. When 33 // this value is used in SetPowerwashCount(), GetPowerwashCount() will return 34 // false. 35 static const int kPowerwashCountNotSet = -1; 36 37 // Default value for crossystem tpm_kernver. 38 static const int kMinKernelKeyVersion = 3; 39 40 // Default value for crossystem tpm_fwver. 41 static const int kMinFirmwareKeyVersion = 13; 42 43 // Default value for crossystem kernel_max_rollforward. This value is the 44 // default for consumer devices and effectively means "unlimited rollforward 45 // is allowed", which is the same as the behavior prior to implementing 46 // roll forward prevention. 47 static const int kKernelMaxRollforward = 0xfffffffe; 48 49 // Default value for crossystem firmware_max_rollforward. This value is the 50 // default for consumer devices and effectively means "unlimited rollforward 51 // is allowed", which is the same as the behavior prior to implementing 52 // roll forward prevention. 53 static const int kFirmwareMaxRollforward = 0xfffffffe; 54 55 FakeHardware() = default; 56 57 // HardwareInterface methods. IsOfficialBuild()58 bool IsOfficialBuild() const override { return is_official_build_; } 59 IsNormalBootMode()60 bool IsNormalBootMode() const override { return is_normal_boot_mode_; } 61 AreDevFeaturesEnabled()62 bool AreDevFeaturesEnabled() const override { 63 return are_dev_features_enabled_; 64 } 65 IsOOBEEnabled()66 bool IsOOBEEnabled() const override { return is_oobe_enabled_; } 67 IsOOBEComplete(base::Time * out_time_of_oobe)68 bool IsOOBEComplete(base::Time* out_time_of_oobe) const override { 69 if (out_time_of_oobe != nullptr) 70 *out_time_of_oobe = oobe_timestamp_; 71 return is_oobe_complete_; 72 } 73 GetHardwareClass()74 std::string GetHardwareClass() const override { return hardware_class_; } 75 GetFirmwareVersion()76 std::string GetFirmwareVersion() const override { return firmware_version_; } 77 GetECVersion()78 std::string GetECVersion() const override { return ec_version_; } 79 GetDeviceRequisition()80 std::string GetDeviceRequisition() const override { 81 return device_requisition_; 82 } 83 GetMinKernelKeyVersion()84 int GetMinKernelKeyVersion() const override { 85 return min_kernel_key_version_; 86 } 87 GetMinFirmwareKeyVersion()88 int GetMinFirmwareKeyVersion() const override { 89 return min_firmware_key_version_; 90 } 91 GetMaxFirmwareKeyRollforward()92 int GetMaxFirmwareKeyRollforward() const override { 93 return firmware_max_rollforward_; 94 } 95 SetMaxFirmwareKeyRollforward(int firmware_max_rollforward)96 bool SetMaxFirmwareKeyRollforward(int firmware_max_rollforward) override { 97 if (GetMaxFirmwareKeyRollforward() == -1) 98 return false; 99 100 firmware_max_rollforward_ = firmware_max_rollforward; 101 return true; 102 } 103 SetMaxKernelKeyRollforward(int kernel_max_rollforward)104 bool SetMaxKernelKeyRollforward(int kernel_max_rollforward) override { 105 kernel_max_rollforward_ = kernel_max_rollforward; 106 return true; 107 } 108 GetPowerwashCount()109 int GetPowerwashCount() const override { return powerwash_count_; } 110 SchedulePowerwash(bool save_rollback_data)111 bool SchedulePowerwash(bool save_rollback_data) override { 112 powerwash_scheduled_ = true; 113 save_rollback_data_ = save_rollback_data; 114 return true; 115 } 116 CancelPowerwash()117 bool CancelPowerwash() override { 118 powerwash_scheduled_ = false; 119 save_rollback_data_ = false; 120 return true; 121 } 122 IsPowerwashScheduled()123 bool IsPowerwashScheduled() { return powerwash_scheduled_; } 124 GetNonVolatileDirectory(base::FilePath * path)125 bool GetNonVolatileDirectory(base::FilePath* path) const override { 126 return false; 127 } 128 GetPowerwashSafeDirectory(base::FilePath * path)129 bool GetPowerwashSafeDirectory(base::FilePath* path) const override { 130 return false; 131 } 132 GetBuildTimestamp()133 int64_t GetBuildTimestamp() const override { return build_timestamp_; } 134 AllowDowngrade()135 bool AllowDowngrade() const override { return false; } 136 GetFirstActiveOmahaPingSent()137 bool GetFirstActiveOmahaPingSent() const override { 138 return first_active_omaha_ping_sent_; 139 } 140 SetFirstActiveOmahaPingSent()141 bool SetFirstActiveOmahaPingSent() override { 142 first_active_omaha_ping_sent_ = true; 143 return true; 144 } 145 146 // Setters SetIsOfficialBuild(bool is_official_build)147 void SetIsOfficialBuild(bool is_official_build) { 148 is_official_build_ = is_official_build; 149 } 150 SetIsNormalBootMode(bool is_normal_boot_mode)151 void SetIsNormalBootMode(bool is_normal_boot_mode) { 152 is_normal_boot_mode_ = is_normal_boot_mode; 153 } 154 SetAreDevFeaturesEnabled(bool are_dev_features_enabled)155 void SetAreDevFeaturesEnabled(bool are_dev_features_enabled) { 156 are_dev_features_enabled_ = are_dev_features_enabled; 157 } 158 159 // Sets the SetIsOOBEEnabled to |is_oobe_enabled|. SetIsOOBEEnabled(bool is_oobe_enabled)160 void SetIsOOBEEnabled(bool is_oobe_enabled) { 161 is_oobe_enabled_ = is_oobe_enabled; 162 } 163 164 // Sets the IsOOBEComplete to True with the given timestamp. SetIsOOBEComplete(base::Time oobe_timestamp)165 void SetIsOOBEComplete(base::Time oobe_timestamp) { 166 is_oobe_complete_ = true; 167 oobe_timestamp_ = oobe_timestamp; 168 } 169 UnsetIsOOBEComplete()170 void UnsetIsOOBEComplete() { is_oobe_complete_ = false; } 171 SetHardwareClass(const std::string & hardware_class)172 void SetHardwareClass(const std::string& hardware_class) { 173 hardware_class_ = hardware_class; 174 } 175 SetFirmwareVersion(const std::string & firmware_version)176 void SetFirmwareVersion(const std::string& firmware_version) { 177 firmware_version_ = firmware_version; 178 } 179 SetECVersion(const std::string & ec_version)180 void SetECVersion(const std::string& ec_version) { ec_version_ = ec_version; } 181 SetDeviceRequisition(const std::string & requisition)182 void SetDeviceRequisition(const std::string& requisition) { 183 device_requisition_ = requisition; 184 } 185 SetMinKernelKeyVersion(int min_kernel_key_version)186 void SetMinKernelKeyVersion(int min_kernel_key_version) { 187 min_kernel_key_version_ = min_kernel_key_version; 188 } 189 SetMinFirmwareKeyVersion(int min_firmware_key_version)190 void SetMinFirmwareKeyVersion(int min_firmware_key_version) { 191 min_firmware_key_version_ = min_firmware_key_version; 192 } 193 SetPowerwashCount(int powerwash_count)194 void SetPowerwashCount(int powerwash_count) { 195 powerwash_count_ = powerwash_count; 196 } 197 SetBuildTimestamp(int64_t build_timestamp)198 void SetBuildTimestamp(int64_t build_timestamp) { 199 build_timestamp_ = build_timestamp; 200 } 201 SetWarmReset(bool warm_reset)202 void SetWarmReset(bool warm_reset) { warm_reset_ = warm_reset; } 203 204 // Getters to verify state. GetMaxKernelKeyRollforward()205 int GetMaxKernelKeyRollforward() const { return kernel_max_rollforward_; } 206 GetIsRollbackPowerwashScheduled()207 bool GetIsRollbackPowerwashScheduled() const { 208 return powerwash_scheduled_ && save_rollback_data_; 209 } 210 211 private: 212 bool is_official_build_{true}; 213 bool is_normal_boot_mode_{true}; 214 bool are_dev_features_enabled_{false}; 215 bool is_oobe_enabled_{true}; 216 bool is_oobe_complete_{true}; 217 // Jan 20, 2007 218 base::Time oobe_timestamp_{base::Time::FromTimeT(1169280000)}; 219 std::string hardware_class_{"Fake HWID BLAH-1234"}; 220 std::string firmware_version_{"Fake Firmware v1.0.1"}; 221 std::string ec_version_{"Fake EC v1.0a"}; 222 std::string device_requisition_{"fake_requisition"}; 223 int min_kernel_key_version_{kMinKernelKeyVersion}; 224 int min_firmware_key_version_{kMinFirmwareKeyVersion}; 225 int kernel_max_rollforward_{kKernelMaxRollforward}; 226 int firmware_max_rollforward_{kFirmwareMaxRollforward}; 227 int powerwash_count_{kPowerwashCountNotSet}; 228 bool powerwash_scheduled_{false}; 229 bool save_rollback_data_{false}; 230 int64_t build_timestamp_{0}; 231 bool first_active_omaha_ping_sent_{false}; 232 bool warm_reset_{false}; 233 234 DISALLOW_COPY_AND_ASSIGN(FakeHardware); 235 }; 236 237 } // namespace chromeos_update_engine 238 239 #endif // UPDATE_ENGINE_COMMON_FAKE_HARDWARE_H_ 240