fake_hardware.h revision 5011df680621eb477cad8b34f03fba5b542cc2f9
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 1739910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#ifndef UPDATE_ENGINE_COMMON_FAKE_HARDWARE_H_ 1839910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#define UPDATE_ENGINE_COMMON_FAKE_HARDWARE_H_ 194243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 2083692e4fd17b5669eeb3edb24b8c4cd8152c7283Don Garrett#include <map> 21df632d17329738d977494625c7819c9d4a123567Alex Deymo#include <string> 2283692e4fd17b5669eeb3edb24b8c4cd8152c7283Don Garrett 23bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo#include <base/time/time.h> 24bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo 2539910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/hardware_interface.h" 264243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 274243291a6655972fe89d4747a0089834c9e47c20Alex Deymonamespace chromeos_update_engine { 284243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 294243291a6655972fe89d4747a0089834c9e47c20Alex Deymo// Implements a fake hardware interface used for testing. 304243291a6655972fe89d4747a0089834c9e47c20Alex Deymoclass FakeHardware : public HardwareInterface { 314243291a6655972fe89d4747a0089834c9e47c20Alex Deymo public: 32ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo // Value used to signal that the powerwash_count file is not present. When 33ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo // this value is used in SetPowerwashCount(), GetPowerwashCount() will return 34ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo // false. 35ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo static const int kPowerwashCountNotSet = -1; 36ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo 3746a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo FakeHardware() = default; 384243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 394243291a6655972fe89d4747a0089834c9e47c20Alex Deymo // HardwareInterface methods. 40157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko bool IsOfficialBuild() const override { return is_official_build_; } 41d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko 42157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko bool IsNormalBootMode() const override { return is_normal_boot_mode_; } 43d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko 44e67bb5b953d4551d6ef51a9900117e3ddd0a32c5Sen Jiang bool AreDevFeaturesEnabled() const override { 45e67bb5b953d4551d6ef51a9900117e3ddd0a32c5Sen Jiang return are_dev_features_enabled_; 46e67bb5b953d4551d6ef51a9900117e3ddd0a32c5Sen Jiang } 47e67bb5b953d4551d6ef51a9900117e3ddd0a32c5Sen Jiang 4846a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo bool IsOOBEEnabled() const override { return is_oobe_enabled_; } 4946a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo 50157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko bool IsOOBEComplete(base::Time* out_time_of_oobe) const override { 51bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo if (out_time_of_oobe != nullptr) 52bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo *out_time_of_oobe = oobe_timestamp_; 53bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo return is_oobe_complete_; 54bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo } 55bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo 56157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko std::string GetHardwareClass() const override { return hardware_class_; } 57d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko 58157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko std::string GetFirmwareVersion() const override { return firmware_version_; } 59d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko 60157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko std::string GetECVersion() const override { return ec_version_; } 614243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 62ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo int GetPowerwashCount() const override { return powerwash_count_; } 63ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo 64fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo bool SchedulePowerwash() override { 65fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo powerwash_scheduled_ = true; 66fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo return true; 67fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo } 68fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 69fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo bool CancelPowerwash() override { 70fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo powerwash_scheduled_ = false; 71fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo return true; 72fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo } 73fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 74fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo bool IsPowerwashScheduled() { return powerwash_scheduled_; } 75fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 76dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo bool GetNonVolatileDirectory(base::FilePath* path) const override { 77dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo return false; 78dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo } 79dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo 80dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo bool GetPowerwashSafeDirectory(base::FilePath* path) const override { 81dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo return false; 82dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo } 83dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo 845011df680621eb477cad8b34f03fba5b542cc2f9Sen Jiang int64_t GetBuildTimestamp() const override { return build_timestamp_; } 855011df680621eb477cad8b34f03fba5b542cc2f9Sen Jiang 864243291a6655972fe89d4747a0089834c9e47c20Alex Deymo // Setters 87056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette void SetIsOfficialBuild(bool is_official_build) { 88056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette is_official_build_ = is_official_build; 89056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette } 90056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette 91056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette void SetIsNormalBootMode(bool is_normal_boot_mode) { 92056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette is_normal_boot_mode_ = is_normal_boot_mode; 93056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette } 94056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette 95e67bb5b953d4551d6ef51a9900117e3ddd0a32c5Sen Jiang void SetAreDevFeaturesEnabled(bool are_dev_features_enabled) { 96e67bb5b953d4551d6ef51a9900117e3ddd0a32c5Sen Jiang are_dev_features_enabled_ = are_dev_features_enabled; 97e67bb5b953d4551d6ef51a9900117e3ddd0a32c5Sen Jiang } 98e67bb5b953d4551d6ef51a9900117e3ddd0a32c5Sen Jiang 9946a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo // Sets the SetIsOOBEEnabled to |is_oobe_enabled|. 10046a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo void SetIsOOBEEnabled(bool is_oobe_enabled) { 10146a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo is_oobe_enabled_ = is_oobe_enabled; 10246a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo } 10346a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo 104bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo // Sets the IsOOBEComplete to True with the given timestamp. 105bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo void SetIsOOBEComplete(base::Time oobe_timestamp) { 106bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo is_oobe_complete_ = true; 107bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo oobe_timestamp_ = oobe_timestamp; 108bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo } 109bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo 110bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo void UnsetIsOOBEComplete() { 111bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo is_oobe_complete_ = false; 112bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo } 113bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo 1145c6bb1d8f89b87e782e26fe74789b6f510704394Chih-Hung Hsieh void SetHardwareClass(const std::string& hardware_class) { 115522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette hardware_class_ = hardware_class; 116522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette } 117522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette 1185c6bb1d8f89b87e782e26fe74789b6f510704394Chih-Hung Hsieh void SetFirmwareVersion(const std::string& firmware_version) { 119522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette firmware_version_ = firmware_version; 120522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette } 121522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette 1225c6bb1d8f89b87e782e26fe74789b6f510704394Chih-Hung Hsieh void SetECVersion(const std::string& ec_version) { 123522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette ec_version_ = ec_version; 124522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette } 125522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette 126ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo void SetPowerwashCount(int powerwash_count) { 127ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo powerwash_count_ = powerwash_count; 128ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo } 129ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo 1305011df680621eb477cad8b34f03fba5b542cc2f9Sen Jiang void SetBuildTimestamp(int64_t build_timestamp) { 1315011df680621eb477cad8b34f03fba5b542cc2f9Sen Jiang build_timestamp_ = build_timestamp; 1325011df680621eb477cad8b34f03fba5b542cc2f9Sen Jiang } 1335011df680621eb477cad8b34f03fba5b542cc2f9Sen Jiang 1344243291a6655972fe89d4747a0089834c9e47c20Alex Deymo private: 13546a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo bool is_official_build_{true}; 13646a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo bool is_normal_boot_mode_{true}; 137e67bb5b953d4551d6ef51a9900117e3ddd0a32c5Sen Jiang bool are_dev_features_enabled_{false}; 13846a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo bool is_oobe_enabled_{true}; 13946a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo bool is_oobe_complete_{true}; 14046a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo base::Time oobe_timestamp_{base::Time::FromTimeT(1169280000)}; // Jan 20, 2007 14146a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo std::string hardware_class_{"Fake HWID BLAH-1234"}; 14246a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo std::string firmware_version_{"Fake Firmware v1.0.1"}; 14346a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo std::string ec_version_{"Fake EC v1.0a"}; 14446a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo int powerwash_count_{kPowerwashCountNotSet}; 145fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo bool powerwash_scheduled_{false}; 1465011df680621eb477cad8b34f03fba5b542cc2f9Sen Jiang int64_t build_timestamp_{0}; 1474243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 1484243291a6655972fe89d4747a0089834c9e47c20Alex Deymo DISALLOW_COPY_AND_ASSIGN(FakeHardware); 1494243291a6655972fe89d4747a0089834c9e47c20Alex Deymo}; 1504243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 1514243291a6655972fe89d4747a0089834c9e47c20Alex Deymo} // namespace chromeos_update_engine 1524243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 15339910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#endif // UPDATE_ENGINE_COMMON_FAKE_HARDWARE_H_ 154