fake_hardware.h revision 39910dcd1d68987ccee7c3031dc269233a8490bb
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
374da2cc108871803c765b3479d5c1ce329cb0dd13J. Richard Barnette  FakeHardware()
38763e7dbaac735da0ae802933a1015b6b7874bce2Alex Deymo      : is_official_build_(true),
39763e7dbaac735da0ae802933a1015b6b7874bce2Alex Deymo        is_normal_boot_mode_(true),
40763e7dbaac735da0ae802933a1015b6b7874bce2Alex Deymo        is_oobe_complete_(false),
41763e7dbaac735da0ae802933a1015b6b7874bce2Alex Deymo        hardware_class_("Fake HWID BLAH-1234"),
42763e7dbaac735da0ae802933a1015b6b7874bce2Alex Deymo        firmware_version_("Fake Firmware v1.0.1"),
43763e7dbaac735da0ae802933a1015b6b7874bce2Alex Deymo        ec_version_("Fake EC v1.0a"),
44763e7dbaac735da0ae802933a1015b6b7874bce2Alex Deymo        powerwash_count_(kPowerwashCountNotSet) {}
454243291a6655972fe89d4747a0089834c9e47c20Alex Deymo
464243291a6655972fe89d4747a0089834c9e47c20Alex Deymo  // HardwareInterface methods.
47157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  bool IsOfficialBuild() const override { return is_official_build_; }
48d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko
49157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  bool IsNormalBootMode() const override { return is_normal_boot_mode_; }
50d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko
51157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  bool IsOOBEComplete(base::Time* out_time_of_oobe) const override {
52bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo    if (out_time_of_oobe != nullptr)
53bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo      *out_time_of_oobe = oobe_timestamp_;
54bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo    return is_oobe_complete_;
55bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  }
56bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo
57157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  std::string GetHardwareClass() const override { return hardware_class_; }
58d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko
59157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  std::string GetFirmwareVersion() const override { return firmware_version_; }
60d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko
61157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  std::string GetECVersion() const override { return ec_version_; }
624243291a6655972fe89d4747a0089834c9e47c20Alex Deymo
63ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo  int GetPowerwashCount() const override { return powerwash_count_; }
64ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo
65dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo  bool GetNonVolatileDirectory(base::FilePath* path) const override {
66dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo    return false;
67dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo  }
68dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo
69dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo  bool GetPowerwashSafeDirectory(base::FilePath* path) const override {
70dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo    return false;
71dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo  }
72dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymo
734243291a6655972fe89d4747a0089834c9e47c20Alex Deymo  // Setters
74056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  void SetIsOfficialBuild(bool is_official_build) {
75056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette    is_official_build_ = is_official_build;
76056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  }
77056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette
78056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  void SetIsNormalBootMode(bool is_normal_boot_mode) {
79056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette    is_normal_boot_mode_ = is_normal_boot_mode;
80056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  }
81056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette
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  // Sets the IsOOBEComplete to False.
89bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  void UnsetIsOOBEComplete() {
90bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo    is_oobe_complete_ = false;
91bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  }
92bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo
93522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  void SetHardwareClass(std::string hardware_class) {
94522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette    hardware_class_ = hardware_class;
95522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  }
96522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette
97522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  void SetFirmwareVersion(std::string firmware_version) {
98522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette    firmware_version_ = firmware_version;
99522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  }
100522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette
101522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  void SetECVersion(std::string ec_version) {
102522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette    ec_version_ = ec_version;
103522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  }
104522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette
105ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo  void SetPowerwashCount(int powerwash_count) {
106ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo    powerwash_count_ = powerwash_count;
107ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo  }
108ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo
1094243291a6655972fe89d4747a0089834c9e47c20Alex Deymo private:
110056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  bool is_official_build_;
111056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  bool is_normal_boot_mode_;
112bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  bool is_oobe_complete_;
113bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  base::Time oobe_timestamp_;
114522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  std::string hardware_class_;
115522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  std::string firmware_version_;
116522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  std::string ec_version_;
117ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo  int powerwash_count_;
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