fake_hardware.h revision aea4c1cea20dda7ae7e85fc8924a2d784f70d806
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
17cf175a098081f3f0e9ca52d997a7ce1585c14c2dGilad Arnold#ifndef UPDATE_ENGINE_FAKE_HARDWARE_H_
18cf175a098081f3f0e9ca52d997a7ce1585c14c2dGilad Arnold#define UPDATE_ENGINE_FAKE_HARDWARE_H_
194243291a6655972fe89d4747a0089834c9e47c20Alex Deymo
2083692e4fd17b5669eeb3edb24b8c4cd8152c7283Don Garrett#include <map>
21df632d17329738d977494625c7819c9d4a123567Alex Deymo#include <string>
22df632d17329738d977494625c7819c9d4a123567Alex Deymo#include <vector>
2383692e4fd17b5669eeb3edb24b8c4cd8152c7283Don Garrett
24bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo#include <base/time/time.h>
25bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo
264243291a6655972fe89d4747a0089834c9e47c20Alex Deymo#include "update_engine/hardware_interface.h"
274243291a6655972fe89d4747a0089834c9e47c20Alex Deymo
284243291a6655972fe89d4747a0089834c9e47c20Alex Deymonamespace chromeos_update_engine {
294243291a6655972fe89d4747a0089834c9e47c20Alex Deymo
304243291a6655972fe89d4747a0089834c9e47c20Alex Deymo// Implements a fake hardware interface used for testing.
314243291a6655972fe89d4747a0089834c9e47c20Alex Deymoclass FakeHardware : public HardwareInterface {
324243291a6655972fe89d4747a0089834c9e47c20Alex Deymo public:
33ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo  // Value used to signal that the powerwash_count file is not present. When
34ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo  // this value is used in SetPowerwashCount(), GetPowerwashCount() will return
35ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo  // false.
36ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo  static const int kPowerwashCountNotSet = -1;
37ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo
384da2cc108871803c765b3479d5c1ce329cb0dd13J. Richard Barnette  FakeHardware()
3983692e4fd17b5669eeb3edb24b8c4cd8152c7283Don Garrett    : kernel_device_("/dev/sdz4"),
4083692e4fd17b5669eeb3edb24b8c4cd8152c7283Don Garrett      boot_device_("/dev/sdz5"),
415708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo      is_boot_device_removable_(false),
4244b9b7ed0a702e54afccb86228668c59151859beChris Sosa      kernel_devices_({"/dev/sdz2", "/dev/sdz4"}),
43056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette      is_official_build_(true),
44056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette      is_normal_boot_mode_(true),
45bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo      is_oobe_complete_(false),
46522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette      hardware_class_("Fake HWID BLAH-1234"),
47522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette      firmware_version_("Fake Firmware v1.0.1"),
48ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo      ec_version_("Fake EC v1.0a"),
49ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo      powerwash_count_(kPowerwashCountNotSet) {}
504243291a6655972fe89d4747a0089834c9e47c20Alex Deymo
514243291a6655972fe89d4747a0089834c9e47c20Alex Deymo  // HardwareInterface methods.
52157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  std::string BootKernelDevice() const override { return kernel_device_; }
53d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko
54157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  std::string BootDevice() const override { return boot_device_; }
55d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko
56157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  bool IsBootDeviceRemovable() const override {
575708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo    return is_boot_device_removable_;
585708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo  }
595708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo
60157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  std::vector<std::string> GetKernelDevices() const override {
6144b9b7ed0a702e54afccb86228668c59151859beChris Sosa    return kernel_devices_;
62d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko  }
6359e253e555072d11f3646fc1286459cbc6aa5419Alex Vakulenko
64157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  bool IsKernelBootable(const std::string& kernel_device,
65157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko                        bool* bootable) const override {
66d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko    auto i = is_bootable_.find(kernel_device);
67d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko    *bootable = (i != is_bootable_.end()) ? i->second : true;
68d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko    return true;
69d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko  }
70d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko
71157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  bool MarkKernelUnbootable(const std::string& kernel_device) override {
72d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko    is_bootable_[kernel_device] = false;
73d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko    return true;
74d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko  }
75d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko
76157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  bool IsOfficialBuild() const override { return is_official_build_; }
77d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko
78157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  bool IsNormalBootMode() const override { return is_normal_boot_mode_; }
79d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko
80157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  bool IsOOBEComplete(base::Time* out_time_of_oobe) const override {
81bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo    if (out_time_of_oobe != nullptr)
82bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo      *out_time_of_oobe = oobe_timestamp_;
83bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo    return is_oobe_complete_;
84bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  }
85bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo
86157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  std::string GetHardwareClass() const override { return hardware_class_; }
87d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko
88157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  std::string GetFirmwareVersion() const override { return firmware_version_; }
89d0fdfb3c8f36fca43fe92241bba6825b7bfca549Alex Vakulenko
90157fe307f162d13f53e7f98f6e2da7c60c0ff001Alex Vakulenko  std::string GetECVersion() const override { return ec_version_; }
914243291a6655972fe89d4747a0089834c9e47c20Alex Deymo
92ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo  int GetPowerwashCount() const override { return powerwash_count_; }
93ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo
944243291a6655972fe89d4747a0089834c9e47c20Alex Deymo  // Setters
955708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo  void SetBootDevice(const std::string& boot_device) {
964243291a6655972fe89d4747a0089834c9e47c20Alex Deymo    boot_device_ = boot_device;
974243291a6655972fe89d4747a0089834c9e47c20Alex Deymo  }
984243291a6655972fe89d4747a0089834c9e47c20Alex Deymo
995708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo  void SetIsBootDeviceRemovable(bool is_boot_device_removable) {
1005708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo    is_boot_device_removable_ = is_boot_device_removable;
1015708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo  }
1025708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo
103056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  void SetIsOfficialBuild(bool is_official_build) {
104056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette    is_official_build_ = is_official_build;
105056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  }
106056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette
107056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  void SetIsNormalBootMode(bool is_normal_boot_mode) {
108056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette    is_normal_boot_mode_ = is_normal_boot_mode;
109056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  }
110056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette
111bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  // Sets the IsOOBEComplete to True with the given timestamp.
112bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  void SetIsOOBEComplete(base::Time oobe_timestamp) {
113bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo    is_oobe_complete_ = true;
114bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo    oobe_timestamp_ = oobe_timestamp;
115bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  }
116bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo
117bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  // Sets the IsOOBEComplete to False.
118bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  void UnsetIsOOBEComplete() {
119bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo    is_oobe_complete_ = false;
120bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  }
121bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo
122522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  void SetHardwareClass(std::string hardware_class) {
123522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette    hardware_class_ = hardware_class;
124522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  }
125522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette
126522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  void SetFirmwareVersion(std::string firmware_version) {
127522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette    firmware_version_ = firmware_version;
128522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  }
129522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette
130522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  void SetECVersion(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
1384243291a6655972fe89d4747a0089834c9e47c20Alex Deymo private:
13983692e4fd17b5669eeb3edb24b8c4cd8152c7283Don Garrett  std::string kernel_device_;
1404243291a6655972fe89d4747a0089834c9e47c20Alex Deymo  std::string boot_device_;
1415708ecdc44ed0b78a72d5605d691476fd9907778Alex Deymo  bool is_boot_device_removable_;
14244b9b7ed0a702e54afccb86228668c59151859beChris Sosa  std::vector<std::string>  kernel_devices_;
14383692e4fd17b5669eeb3edb24b8c4cd8152c7283Don Garrett  std::map<std::string, bool> is_bootable_;
144056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  bool is_official_build_;
145056b0abc1273a6eebfd73060a1d0344ef02b8696J. Richard Barnette  bool is_normal_boot_mode_;
146bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  bool is_oobe_complete_;
147bccbc387ed23ec18adcd0ef8b50d958ef38cd619Alex Deymo  base::Time oobe_timestamp_;
148522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  std::string hardware_class_;
149522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  std::string firmware_version_;
150522d36ffca22b8c218cdc6a2d1dbab40f6d9b215J. Richard Barnette  std::string ec_version_;
151ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo  int powerwash_count_;
1524243291a6655972fe89d4747a0089834c9e47c20Alex Deymo
1534243291a6655972fe89d4747a0089834c9e47c20Alex Deymo  DISALLOW_COPY_AND_ASSIGN(FakeHardware);
1544243291a6655972fe89d4747a0089834c9e47c20Alex Deymo};
1554243291a6655972fe89d4747a0089834c9e47c20Alex Deymo
1564243291a6655972fe89d4747a0089834c9e47c20Alex Deymo}  // namespace chromeos_update_engine
1574243291a6655972fe89d4747a0089834c9e47c20Alex Deymo
158cf175a098081f3f0e9ca52d997a7ce1585c14c2dGilad Arnold#endif  // UPDATE_ENGINE_FAKE_HARDWARE_H_
159