huangcm
2025-08-25 f350412dc55c15118d0a7925d1071877498e5e24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
//
// Copyright (C) 2013 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
 
#ifndef UPDATE_ENGINE_COMMON_FAKE_HARDWARE_H_
#define UPDATE_ENGINE_COMMON_FAKE_HARDWARE_H_
 
#include <map>
#include <string>
 
#include <base/time/time.h>
 
#include "update_engine/common/hardware_interface.h"
 
namespace chromeos_update_engine {
 
// Implements a fake hardware interface used for testing.
class FakeHardware : public HardwareInterface {
 public:
  // Value used to signal that the powerwash_count file is not present. When
  // this value is used in SetPowerwashCount(), GetPowerwashCount() will return
  // false.
  static const int kPowerwashCountNotSet = -1;
 
  // Default value for crossystem tpm_kernver.
  static const int kMinKernelKeyVersion = 3;
 
  // Default value for crossystem tpm_fwver.
  static const int kMinFirmwareKeyVersion = 13;
 
  // Default value for crossystem kernel_max_rollforward. This value is the
  // default for consumer devices and effectively means "unlimited rollforward
  // is allowed", which is the same as the behavior prior to implementing
  // roll forward prevention.
  static const int kKernelMaxRollforward = 0xfffffffe;
 
  // Default value for crossystem firmware_max_rollforward. This value is the
  // default for consumer devices and effectively means "unlimited rollforward
  // is allowed", which is the same as the behavior prior to implementing
  // roll forward prevention.
  static const int kFirmwareMaxRollforward = 0xfffffffe;
 
  FakeHardware() = default;
 
  // HardwareInterface methods.
  bool IsOfficialBuild() const override { return is_official_build_; }
 
  bool IsNormalBootMode() const override { return is_normal_boot_mode_; }
 
  bool AreDevFeaturesEnabled() const override {
    return are_dev_features_enabled_;
  }
 
  bool IsOOBEEnabled() const override { return is_oobe_enabled_; }
 
  bool IsOOBEComplete(base::Time* out_time_of_oobe) const override {
    if (out_time_of_oobe != nullptr)
      *out_time_of_oobe = oobe_timestamp_;
    return is_oobe_complete_;
  }
 
  std::string GetHardwareClass() const override { return hardware_class_; }
 
  std::string GetFirmwareVersion() const override { return firmware_version_; }
 
  std::string GetECVersion() const override { return ec_version_; }
 
  int GetMinKernelKeyVersion() const override {
    return min_kernel_key_version_;
  }
 
  int GetMinFirmwareKeyVersion() const override {
    return min_firmware_key_version_;
  }
 
  int GetMaxFirmwareKeyRollforward() const override {
    return firmware_max_rollforward_;
  }
 
  bool SetMaxFirmwareKeyRollforward(int firmware_max_rollforward) override {
    if (GetMaxFirmwareKeyRollforward() == -1)
      return false;
 
    firmware_max_rollforward_ = firmware_max_rollforward;
    return true;
  }
 
  bool SetMaxKernelKeyRollforward(int kernel_max_rollforward) override {
    kernel_max_rollforward_ = kernel_max_rollforward;
    return true;
  }
 
  int GetPowerwashCount() const override { return powerwash_count_; }
 
  bool SchedulePowerwash(bool is_rollback) override {
    powerwash_scheduled_ = true;
    is_rollback_powerwash_ = is_rollback;
    return true;
  }
 
  bool CancelPowerwash() override {
    powerwash_scheduled_ = false;
    is_rollback_powerwash_ = false;
    return true;
  }
 
  bool IsPowerwashScheduled() { return powerwash_scheduled_; }
 
  bool GetNonVolatileDirectory(base::FilePath* path) const override {
    return false;
  }
 
  bool GetPowerwashSafeDirectory(base::FilePath* path) const override {
    return false;
  }
 
  int64_t GetBuildTimestamp() const override { return build_timestamp_; }
 
  bool GetFirstActiveOmahaPingSent() const override {
    return first_active_omaha_ping_sent_;
  }
 
  bool SetFirstActiveOmahaPingSent() override {
    first_active_omaha_ping_sent_ = true;
    return true;
  }
 
  // Setters
  void SetIsOfficialBuild(bool is_official_build) {
    is_official_build_ = is_official_build;
  }
 
  void SetIsNormalBootMode(bool is_normal_boot_mode) {
    is_normal_boot_mode_ = is_normal_boot_mode;
  }
 
  void SetAreDevFeaturesEnabled(bool are_dev_features_enabled) {
    are_dev_features_enabled_ = are_dev_features_enabled;
  }
 
  // Sets the SetIsOOBEEnabled to |is_oobe_enabled|.
  void SetIsOOBEEnabled(bool is_oobe_enabled) {
    is_oobe_enabled_ = is_oobe_enabled;
  }
 
  // Sets the IsOOBEComplete to True with the given timestamp.
  void SetIsOOBEComplete(base::Time oobe_timestamp) {
    is_oobe_complete_ = true;
    oobe_timestamp_ = oobe_timestamp;
  }
 
  void UnsetIsOOBEComplete() { is_oobe_complete_ = false; }
 
  void SetHardwareClass(const std::string& hardware_class) {
    hardware_class_ = hardware_class;
  }
 
  void SetFirmwareVersion(const std::string& firmware_version) {
    firmware_version_ = firmware_version;
  }
 
  void SetECVersion(const std::string& ec_version) { ec_version_ = ec_version; }
 
  void SetMinKernelKeyVersion(int min_kernel_key_version) {
    min_kernel_key_version_ = min_kernel_key_version;
  }
 
  void SetMinFirmwareKeyVersion(int min_firmware_key_version) {
    min_firmware_key_version_ = min_firmware_key_version;
  }
 
  void SetPowerwashCount(int powerwash_count) {
    powerwash_count_ = powerwash_count;
  }
 
  void SetBuildTimestamp(int64_t build_timestamp) {
    build_timestamp_ = build_timestamp;
  }
 
  // Getters to verify state.
  int GetMaxKernelKeyRollforward() const { return kernel_max_rollforward_; }
 
  bool GetIsRollbackPowerwashScheduled() const {
    return powerwash_scheduled_ && is_rollback_powerwash_;
  }
 
 private:
  bool is_official_build_{true};
  bool is_normal_boot_mode_{true};
  bool are_dev_features_enabled_{false};
  bool is_oobe_enabled_{true};
  bool is_oobe_complete_{true};
  // Jan 20, 2007
  base::Time oobe_timestamp_{base::Time::FromTimeT(1169280000)};
  std::string hardware_class_{"Fake HWID BLAH-1234"};
  std::string firmware_version_{"Fake Firmware v1.0.1"};
  std::string ec_version_{"Fake EC v1.0a"};
  int min_kernel_key_version_{kMinKernelKeyVersion};
  int min_firmware_key_version_{kMinFirmwareKeyVersion};
  int kernel_max_rollforward_{kKernelMaxRollforward};
  int firmware_max_rollforward_{kFirmwareMaxRollforward};
  int powerwash_count_{kPowerwashCountNotSet};
  bool powerwash_scheduled_{false};
  bool is_rollback_powerwash_{false};
  int64_t build_timestamp_{0};
  bool first_active_omaha_ping_sent_{false};
 
  DISALLOW_COPY_AND_ASSIGN(FakeHardware);
};
 
}  // namespace chromeos_update_engine
 
#endif  // UPDATE_ENGINE_COMMON_FAKE_HARDWARE_H_