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