fake_hardware.h revision 46a9aae85e78179a0acd0d1efd1d99685fb827bb
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
4446a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo  bool IsOOBEEnabled() const override { return is_oobe_enabled_; }
4546a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo
46157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  bool IsOOBEComplete(base::Time* out_time_of_oobe) const override {
47bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo    if (out_time_of_oobe != nullptr)
48bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo      *out_time_of_oobe = oobe_timestamp_;
49bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo    return is_oobe_complete_;
50bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  }
51bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo
52157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  std::string GetHardwareClass() const override { return hardware_class_; }
53d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko
54157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  std::string GetFirmwareVersion() const override { return firmware_version_; }
55d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko
56157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  std::string GetECVersion() const override { return ec_version_; }
574243291a6655972fe89d4747a0089834c9e47c20Alex Deymo
58ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo  int GetPowerwashCount() const override { return powerwash_count_; }
59ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo
60dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo  bool GetNonVolatileDirectory(base::FilePath* path) const override {
61dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo    return false;
62dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo  }
63dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo
64dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo  bool GetPowerwashSafeDirectory(base::FilePath* path) const override {
65dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo    return false;
66dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo  }
67dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo
684243291a6655972fe89d4747a0089834c9e47c20Alex Deymo  // Setters
69056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  void SetIsOfficialBuild(bool is_official_build) {
70056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette    is_official_build_ = is_official_build;
71056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  }
72056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette
73056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  void SetIsNormalBootMode(bool is_normal_boot_mode) {
74056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette    is_normal_boot_mode_ = is_normal_boot_mode;
75056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  }
76056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette
7746a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo  // Sets the SetIsOOBEEnabled to |is_oobe_enabled|.
7846a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo  void SetIsOOBEEnabled(bool is_oobe_enabled) {
7946a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo    is_oobe_enabled_ = is_oobe_enabled;
8046a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo  }
8146a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo
82bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  // Sets the IsOOBEComplete to True with the given timestamp.
83bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  void SetIsOOBEComplete(base::Time oobe_timestamp) {
84bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo    is_oobe_complete_ = true;
85bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo    oobe_timestamp_ = oobe_timestamp;
86bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  }
87bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo
88bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  void UnsetIsOOBEComplete() {
89bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo    is_oobe_complete_ = false;
90bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  }
91bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo
92522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  void SetHardwareClass(std::string hardware_class) {
93522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette    hardware_class_ = hardware_class;
94522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  }
95522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette
96522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  void SetFirmwareVersion(std::string firmware_version) {
97522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette    firmware_version_ = firmware_version;
98522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  }
99522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette
100522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  void SetECVersion(std::string ec_version) {
101522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette    ec_version_ = ec_version;
102522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  }
103522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette
104ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo  void SetPowerwashCount(int powerwash_count) {
105ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo    powerwash_count_ = powerwash_count;
106ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo  }
107ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo
1084243291a6655972fe89d4747a0089834c9e47c20Alex Deymo private:
10946a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo  bool is_official_build_{true};
11046a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo  bool is_normal_boot_mode_{true};
11146a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo  bool is_oobe_enabled_{true};
11246a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo  bool is_oobe_complete_{true};
11346a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo  base::Time oobe_timestamp_{base::Time::FromTimeT(1169280000)}; // Jan 20, 2007
11446a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo  std::string hardware_class_{"Fake HWID BLAH-1234"};
11546a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo  std::string firmware_version_{"Fake Firmware v1.0.1"};
11646a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo  std::string ec_version_{"Fake EC v1.0a"};
11746a9aae85e78179a0acd0d1efd1d99685fb827bbAlex Deymo  int powerwash_count_{kPowerwashCountNotSet};
1184243291a6655972fe89d4747a0089834c9e47c20Alex Deymo
1194243291a6655972fe89d4747a0089834c9e47c20Alex Deymo  DISALLOW_COPY_AND_ASSIGN(FakeHardware);
1204243291a6655972fe89d4747a0089834c9e47c20Alex Deymo};
1214243291a6655972fe89d4747a0089834c9e47c20Alex Deymo
1224243291a6655972fe89d4747a0089834c9e47c20Alex Deymo}  // namespace chromeos_update_engine
1234243291a6655972fe89d4747a0089834c9e47c20Alex Deymo
12439910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#endif  // UPDATE_ENGINE_COMMON_FAKE_HARDWARE_H_
125