fake_hardware.h revision 157fe307f162d13f53e7f98f6e2da7c60c0ff001
1ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley// Use of this source code is governed by a BSD-style license that can be
3ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley// found in the LICENSE file.
4ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
5ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#ifndef UPDATE_ENGINE_FAKE_HARDWARE_H_
6ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#define UPDATE_ENGINE_FAKE_HARDWARE_H_
7ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
8ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#include <map>
9ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#include <string>
10ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#include <vector>
11ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
12ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#include <base/time/time.h>
13ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
14ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#include "update_engine/hardware_interface.h"
15ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
16ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wileynamespace chromeos_update_engine {
17ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
18ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley// Implements a fake hardware interface used for testing.
19ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wileyclass FakeHardware : public HardwareInterface {
20ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley public:
21ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  FakeHardware()
22ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    : kernel_device_("/dev/sdz4"),
23ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley      boot_device_("/dev/sdz5"),
24ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley      is_boot_device_removable_(false),
25ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley      kernel_devices_({"/dev/sdz2", "/dev/sdz4"}),
26ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley      is_official_build_(true),
27ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley      is_normal_boot_mode_(true),
28ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley      is_oobe_complete_(false),
29ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley      hardware_class_("Fake HWID BLAH-1234"),
30ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley      firmware_version_("Fake Firmware v1.0.1"),
31ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley      ec_version_("Fake EC v1.0a") {}
32ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
33ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  // HardwareInterface methods.
34ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  std::string BootKernelDevice() const override { return kernel_device_; }
35ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
36ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  std::string BootDevice() const override { return boot_device_; }
37ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
38ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  bool IsBootDeviceRemovable() const override {
39ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    return is_boot_device_removable_;
40ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  }
41ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
42ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  std::vector<std::string> GetKernelDevices() const override {
43ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    return kernel_devices_;
44ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  }
45ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
46ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  bool IsKernelBootable(const std::string& kernel_device,
47ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley                        bool* bootable) const override {
48ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    auto i = is_bootable_.find(kernel_device);
49ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    *bootable = (i != is_bootable_.end()) ? i->second : true;
50ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    return true;
51ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  }
52ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
53ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  bool MarkKernelUnbootable(const std::string& kernel_device) override {
54ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    is_bootable_[kernel_device] = false;
55ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    return true;
56ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  }
57ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
58ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  bool IsOfficialBuild() const override { return is_official_build_; }
59ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
60ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  bool IsNormalBootMode() const override { return is_normal_boot_mode_; }
61ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
62ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  bool IsOOBEComplete(base::Time* out_time_of_oobe) const override {
63ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    if (out_time_of_oobe != nullptr)
64ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley      *out_time_of_oobe = oobe_timestamp_;
65ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    return is_oobe_complete_;
66ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  }
67ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
68ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  std::string GetHardwareClass() const override { return hardware_class_; }
69ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
70ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  std::string GetFirmwareVersion() const override { return firmware_version_; }
71ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
72ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  std::string GetECVersion() const override { return ec_version_; }
73ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
74ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  // Setters
75ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  void SetBootDevice(const std::string& boot_device) {
76ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    boot_device_ = boot_device;
77ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  }
78ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
79ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  void SetIsBootDeviceRemovable(bool is_boot_device_removable) {
80ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    is_boot_device_removable_ = is_boot_device_removable;
81ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  }
82ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
83ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  void SetIsOfficialBuild(bool is_official_build) {
84ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    is_official_build_ = is_official_build;
85ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  }
86ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
87ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  void SetIsNormalBootMode(bool is_normal_boot_mode) {
88ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    is_normal_boot_mode_ = is_normal_boot_mode;
89ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  }
90ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
91ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  // Sets the IsOOBEComplete to True with the given timestamp.
92ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  void SetIsOOBEComplete(base::Time oobe_timestamp) {
93ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    is_oobe_complete_ = true;
94ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    oobe_timestamp_ = oobe_timestamp;
95ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  }
96ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
97ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  // Sets the IsOOBEComplete to False.
98ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  void UnsetIsOOBEComplete() {
99ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    is_oobe_complete_ = false;
100ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  }
101ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
102ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  void SetHardwareClass(std::string hardware_class) {
103ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    hardware_class_ = hardware_class;
104ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  }
105ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
106ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  void SetFirmwareVersion(std::string firmware_version) {
107ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    firmware_version_ = firmware_version;
108ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  }
109ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
110ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  void SetECVersion(std::string ec_version) {
111ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley    ec_version_ = ec_version;
112ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  }
113ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
114ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley private:
115ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  std::string kernel_device_;
116ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  std::string boot_device_;
117ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  bool is_boot_device_removable_;
118ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  std::vector<std::string>  kernel_devices_;
119ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  std::map<std::string, bool> is_bootable_;
120ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  bool is_official_build_;
121ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  bool is_normal_boot_mode_;
122ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  bool is_oobe_complete_;
123ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  base::Time oobe_timestamp_;
124ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  std::string hardware_class_;
125ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  std::string firmware_version_;
126ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  std::string ec_version_;
127ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
128ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley  DISALLOW_COPY_AND_ASSIGN(FakeHardware);
129ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley};
130ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
131ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley}  // namespace chromeos_update_engine
132ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley
133ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley#endif  // UPDATE_ENGINE_FAKE_HARDWARE_H_
134ad1367edfa4bc735c46fa8919753cbd05575c4efChristopher Wiley