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 861677e812f16ce2949238b0ec15d7925ac1035d01Amin Hassani bool GetFirstActiveOmahaPingSent() const override { 871677e812f16ce2949238b0ec15d7925ac1035d01Amin Hassani return first_active_omaha_ping_sent_; 881677e812f16ce2949238b0ec15d7925ac1035d01Amin Hassani } 891677e812f16ce2949238b0ec15d7925ac1035d01Amin Hassani 901677e812f16ce2949238b0ec15d7925ac1035d01Amin Hassani void SetFirstActiveOmahaPingSent() override { 911677e812f16ce2949238b0ec15d7925ac1035d01Amin Hassani first_active_omaha_ping_sent_ = true; 921677e812f16ce2949238b0ec15d7925ac1035d01Amin Hassani } 931677e812f16ce2949238b0ec15d7925ac1035d01Amin Hassani 944243291a6655972fe89d4747a0089834c9e47c20Alex Deymo // Setters 95056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette void SetIsOfficialBuild(bool is_official_build) { 96056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette is_official_build_ = is_official_build; 97056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette } 98056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette 99056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette void SetIsNormalBootMode(bool is_normal_boot_mode) { 100056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette is_normal_boot_mode_ = is_normal_boot_mode; 101056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette } 102056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette 103e67bb5b953d4551d6ef51a9900117e3ddd0a32c5Sen Jiang void SetAreDevFeaturesEnabled(bool are_dev_features_enabled) { 104e67bb5b953d4551d6ef51a9900117e3ddd0a32c5Sen Jiang are_dev_features_enabled_ = are_dev_features_enabled; 105e67bb5b953d4551d6ef51a9900117e3ddd0a32c5Sen Jiang } 106e67bb5b953d4551d6ef51a9900117e3ddd0a32c5Sen Jiang 10746a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo // Sets the SetIsOOBEEnabled to |is_oobe_enabled|. 10846a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo void SetIsOOBEEnabled(bool is_oobe_enabled) { 10946a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo is_oobe_enabled_ = is_oobe_enabled; 11046a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo } 11146a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo 112bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo // Sets the IsOOBEComplete to True with the given timestamp. 113bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo void SetIsOOBEComplete(base::Time oobe_timestamp) { 114bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo is_oobe_complete_ = true; 115bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo oobe_timestamp_ = oobe_timestamp; 116bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo } 117bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo 118bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo void UnsetIsOOBEComplete() { 119bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo is_oobe_complete_ = false; 120bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo } 121bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo 1225c6bb1d8f89b87e782e26fe74789b6f510704394Chih-Hung Hsieh void SetHardwareClass(const std::string& hardware_class) { 123522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette hardware_class_ = hardware_class; 124522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette } 125522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette 1265c6bb1d8f89b87e782e26fe74789b6f510704394Chih-Hung Hsieh void SetFirmwareVersion(const std::string& firmware_version) { 127522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette firmware_version_ = firmware_version; 128522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette } 129522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette 1305c6bb1d8f89b87e782e26fe74789b6f510704394Chih-Hung Hsieh void SetECVersion(const 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 1385011df680621eb477cad8b34f03fba5b542cc2f9Sen Jiang void SetBuildTimestamp(int64_t build_timestamp) { 1395011df680621eb477cad8b34f03fba5b542cc2f9Sen Jiang build_timestamp_ = build_timestamp; 1405011df680621eb477cad8b34f03fba5b542cc2f9Sen Jiang } 1415011df680621eb477cad8b34f03fba5b542cc2f9Sen Jiang 1424243291a6655972fe89d4747a0089834c9e47c20Alex Deymo private: 14346a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo bool is_official_build_{true}; 14446a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo bool is_normal_boot_mode_{true}; 145e67bb5b953d4551d6ef51a9900117e3ddd0a32c5Sen Jiang bool are_dev_features_enabled_{false}; 14646a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo bool is_oobe_enabled_{true}; 14746a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo bool is_oobe_complete_{true}; 14846a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo base::Time oobe_timestamp_{base::Time::FromTimeT(1169280000)}; // Jan 20, 2007 14946a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo std::string hardware_class_{"Fake HWID BLAH-1234"}; 15046a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo std::string firmware_version_{"Fake Firmware v1.0.1"}; 15146a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo std::string ec_version_{"Fake EC v1.0a"}; 15246a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo int powerwash_count_{kPowerwashCountNotSet}; 153fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo bool powerwash_scheduled_{false}; 1545011df680621eb477cad8b34f03fba5b542cc2f9Sen Jiang int64_t build_timestamp_{0}; 1551677e812f16ce2949238b0ec15d7925ac1035d01Amin Hassani bool first_active_omaha_ping_sent_{false}; 1564243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 1574243291a6655972fe89d4747a0089834c9e47c20Alex Deymo DISALLOW_COPY_AND_ASSIGN(FakeHardware); 1584243291a6655972fe89d4747a0089834c9e47c20Alex Deymo}; 1594243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 1604243291a6655972fe89d4747a0089834c9e47c20Alex Deymo} // namespace chromeos_update_engine 1614243291a6655972fe89d4747a0089834c9e47c20Alex Deymo 16239910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#endif // UPDATE_ENGINE_COMMON_FAKE_HARDWARE_H_ 163