blob: 22eac649f938da26fcabb4ed850b3a14070e97eb [file] [log] [blame]
Enrico Granata7a622342019-05-21 11:10:59 -07001// Copyright 2019 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Enrico Granata10e19de2019-05-21 14:17:36 -07005#include <base/files/file_util.h>
6
Enrico Granata7a622342019-05-21 11:10:59 -07007#include <gtest/gtest.h>
8
Harvey Yang34f464c2020-01-08 17:43:46 +08009#include <libmems/common_types.h>
Enrico Granata51cdb942019-06-18 16:40:17 -070010#include <libmems/iio_context.h>
11#include <libmems/iio_device.h>
Harvey Yang34f464c2020-01-08 17:43:46 +080012#include <libmems/iio_device_impl.h>
Enrico Granata9bb17522019-06-28 17:22:42 -070013#include <libmems/test_fakes.h>
Enrico Granata7a622342019-05-21 11:10:59 -070014#include "mems_setup/configuration.h"
15#include "mems_setup/delegate.h"
Enrico Granata064a25c2019-07-15 15:48:03 -070016#include "mems_setup/sensor_location.h"
Enrico Granata9bb17522019-06-28 17:22:42 -070017#include "mems_setup/test_fakes.h"
Enrico Granata7a622342019-05-21 11:10:59 -070018#include "mems_setup/test_helper.h"
Enrico Granata7a622342019-05-21 11:10:59 -070019
Enrico Granata9bb17522019-06-28 17:22:42 -070020using libmems::fakes::FakeIioChannel;
Enrico Granata9bb17522019-06-28 17:22:42 -070021using libmems::fakes::FakeIioDevice;
Enrico Granata7a622342019-05-21 11:10:59 -070022using mems_setup::testing::SensorTestBase;
23
24namespace mems_setup {
25
26namespace {
27
Enrico Granata10e19de2019-05-21 14:17:36 -070028static gid_t kChronosGroupId = 666;
Harvey Yang34f464c2020-01-08 17:43:46 +080029static gid_t kIioserviceGroupId = 777;
Enrico Granatafc2e3472019-07-16 11:23:25 -070030static gid_t kPowerGroupId = 999;
Enrico Granata10e19de2019-05-21 14:17:36 -070031
Harvey Yang34f464c2020-01-08 17:43:46 +080032constexpr int kDeviceId = 1;
33constexpr char kTriggerString[] = "trigger";
Harvey Yangf6b59882020-10-13 14:45:09 +080034constexpr char kHwfifoTimeoutString[] = "buffer/hwfifo_timeout";
35constexpr char kFlushString[] = "flush";
Harvey Yang34f464c2020-01-08 17:43:46 +080036
Harvey Yang1d50fff2020-10-27 12:24:38 +080037#if USE_IIOSERVICE
Harvey Yang34f464c2020-01-08 17:43:46 +080038constexpr char kDevString[] = "/dev/";
Harvey Yang1d50fff2020-10-27 12:24:38 +080039#endif // USE_IIOSERVICE
Harvey Yang34f464c2020-01-08 17:43:46 +080040
Enrico Granata7a622342019-05-21 11:10:59 -070041class AccelerometerTest : public SensorTestBase {
42 public:
Harvey Yang73394622020-02-12 10:57:57 +080043 AccelerometerTest() : SensorTestBase("cros-ec-accel", kDeviceId) {
Enrico Granata10e19de2019-05-21 14:17:36 -070044 mock_delegate_->AddGroup("chronos", kChronosGroupId);
Harvey Yang34f464c2020-01-08 17:43:46 +080045 mock_delegate_->AddGroup(Configuration::GetGroupNameForSysfs(),
46 kIioserviceGroupId);
47
Harvey Yang34f464c2020-01-08 17:43:46 +080048 std::string dev_name = libmems::IioDeviceImpl::GetStringFromId(kDeviceId);
49 // /sys/bus/iio/devices/iio:device1
Harvey Yang9fae3712020-10-29 22:45:03 +080050 base::FilePath sys_dev_path = mock_device_->GetPath();
Harvey Yangf6b59882020-10-13 14:45:09 +080051
52 // Create the file to set the trigger in |AddSysfsTrigger|.
Harvey Yang34f464c2020-01-08 17:43:46 +080053 mock_delegate_->CreateFile(sys_dev_path.Append(kTriggerString));
Harvey Yangf6b59882020-10-13 14:45:09 +080054
55 // Create the files to set permissions and ownership for test.
56 mock_delegate_->CreateFile(sys_dev_path.Append(kHwfifoTimeoutString));
57 mock_delegate_->CreateFile(sys_dev_path.Append(kFlushString));
58 }
59
60 void CheckPermissionsAndOwnershipForFile(const base::FilePath& path,
61 int permission) {
62 uid_t user;
63 gid_t group;
64
65 EXPECT_TRUE(mock_delegate_->GetOwnership(path, &user, &group));
66 EXPECT_EQ(group, kIioserviceGroupId);
67 EXPECT_EQ(permission, mock_delegate_->GetPermissions(path));
Enrico Granata10e19de2019-05-21 14:17:36 -070068 }
Enrico Granata7a622342019-05-21 11:10:59 -070069};
70
Harvey Yang34f464c2020-01-08 17:43:46 +080071TEST_F(AccelerometerTest, CheckPermissionsAndOwnership) {
72 SetSingleSensor(kBaseSensorLocation);
73 ConfigureVpd({{"in_accel_x_base_calibbias", "100"}});
74
75 EXPECT_TRUE(GetConfiguration()->Configure());
76
77 std::string dev_name = libmems::IioDeviceImpl::GetStringFromId(kDeviceId);
78
Harvey Yangf6b59882020-10-13 14:45:09 +080079 // /sys/bus/iio/devices/iio:device1
Harvey Yang9fae3712020-10-29 22:45:03 +080080 base::FilePath sys_dev_path = mock_device_->GetPath();
Harvey Yangf6b59882020-10-13 14:45:09 +080081
82 CheckPermissionsAndOwnershipForFile(sys_dev_path.Append(kHwfifoTimeoutString),
83 base::FILE_PERMISSION_WRITE_BY_GROUP |
84 base::FILE_PERMISSION_READ_BY_GROUP);
85 CheckPermissionsAndOwnershipForFile(sys_dev_path.Append(kFlushString),
86 base::FILE_PERMISSION_WRITE_BY_GROUP);
Harvey Yang34f464c2020-01-08 17:43:46 +080087
Harvey Yang1d50fff2020-10-27 12:24:38 +080088#if USE_IIOSERVICE
89 // /dev/iio:deviceX
90 base::FilePath dev_path = base::FilePath(kDevString).Append(dev_name.c_str());
Harvey Yang34f464c2020-01-08 17:43:46 +080091
Harvey Yang1d50fff2020-10-27 12:24:38 +080092 CheckPermissionsAndOwnershipForFile(dev_path,
93 base::FILE_PERMISSION_WRITE_BY_GROUP |
94 base::FILE_PERMISSION_READ_BY_GROUP);
95#endif // USE_IIOSERVICE
Harvey Yang34f464c2020-01-08 17:43:46 +080096}
97
Harvey Yang1d50fff2020-10-27 12:24:38 +080098#if USE_IIOSERVICE
99TEST_F(AccelerometerTest, FrequencyReset) {
100 SetSingleSensor(kBaseSensorLocation);
101 ConfigureVpd({{"in_accel_x_base_calibbias", "100"}});
102
103 EXPECT_TRUE(GetConfiguration()->Configure());
104
105 auto frequency_opt =
106 mock_device_->ReadDoubleAttribute(libmems::kSamplingFrequencyAttr);
107 EXPECT_TRUE(frequency_opt.has_value());
108 EXPECT_EQ(frequency_opt.value(), 0.0);
109}
110#endif // USE_IIOSERVICE
111
Harvey Yang72b89f82020-12-02 16:23:01 +0800112TEST_F(AccelerometerTest, CheckClock) {
113 SetSingleSensor(kBaseSensorLocation);
114 ConfigureVpd({{"in_accel_x_base_calibbias", "100"}});
115
116 EXPECT_TRUE(GetConfiguration()->Configure());
117 auto attr_opt = mock_device_->ReadStringAttribute("current_timestamp_clock");
118 EXPECT_TRUE(attr_opt.has_value());
119 EXPECT_EQ(attr_opt.value(), "boottime");
120}
121
Enrico Granata7a622342019-05-21 11:10:59 -0700122TEST_F(AccelerometerTest, MissingVpd) {
Enrico Granata064a25c2019-07-15 15:48:03 -0700123 SetSingleSensor(kBaseSensorLocation);
Enrico Granata7a622342019-05-21 11:10:59 -0700124 ConfigureVpd({{"in_accel_x_base_calibbias", "100"}});
125
126 EXPECT_TRUE(GetConfiguration()->Configure());
127
Harvey Yangfc9178f2020-03-16 14:26:53 +0800128 EXPECT_TRUE(mock_device_->GetChannel("accel_x")
129 ->ReadNumberAttribute("calibbias")
130 .has_value());
131 EXPECT_EQ(100, mock_device_->GetChannel("accel_x")
132 ->ReadNumberAttribute("calibbias")
133 .value());
134 EXPECT_FALSE(mock_device_->GetChannel("accel_y")
135 ->ReadNumberAttribute("calibbias")
136 .has_value());
137 EXPECT_FALSE(mock_device_->GetChannel("accel_z")
138 ->ReadNumberAttribute("calibbias")
139 .has_value());
Enrico Granata7a622342019-05-21 11:10:59 -0700140}
141
142TEST_F(AccelerometerTest, NotNumericVpd) {
Enrico Granata064a25c2019-07-15 15:48:03 -0700143 SetSingleSensor(kBaseSensorLocation);
Enrico Granata7a622342019-05-21 11:10:59 -0700144 ConfigureVpd({{"in_accel_x_base_calibbias", "blah"},
Gwendal Grignou4bf5ae62020-01-06 14:16:47 -0800145 {"in_accel_y_base_calibbias", "100"}});
Enrico Granata7a622342019-05-21 11:10:59 -0700146
147 EXPECT_TRUE(GetConfiguration()->Configure());
148
Harvey Yangfc9178f2020-03-16 14:26:53 +0800149 EXPECT_FALSE(mock_device_->GetChannel("accel_x")
150 ->ReadNumberAttribute("calibbias")
151 .has_value());
152 EXPECT_TRUE(mock_device_->GetChannel("accel_y")
153 ->ReadNumberAttribute("calibbias")
154 .has_value());
155 EXPECT_EQ(100, mock_device_->GetChannel("accel_y")
156 ->ReadNumberAttribute("calibbias")
157 .value());
158 EXPECT_FALSE(mock_device_->GetChannel("accel_z")
159 ->ReadNumberAttribute("calibbias")
160 .has_value());
Enrico Granata7a622342019-05-21 11:10:59 -0700161}
162
163TEST_F(AccelerometerTest, VpdOutOfRange) {
Enrico Granata064a25c2019-07-15 15:48:03 -0700164 SetSingleSensor(kBaseSensorLocation);
Tom Hughes09483d12020-08-27 15:55:08 -0700165 ConfigureVpd({{"in_accel_x_base_calibbias", "104"}, // just above .100g.
Gwendal Grignou4bf5ae62020-01-06 14:16:47 -0800166 {"in_accel_y_base_calibbias", "100"},
Enrico Granata7a622342019-05-21 11:10:59 -0700167 {"in_accel_z_base_calibbias", "85"}});
168
169 EXPECT_TRUE(GetConfiguration()->Configure());
170
Harvey Yangfc9178f2020-03-16 14:26:53 +0800171 EXPECT_FALSE(mock_device_->GetChannel("accel_x")
172 ->ReadNumberAttribute("calibbias")
173 .has_value());
174 EXPECT_FALSE(mock_device_->GetChannel("accel_y")
175 ->ReadNumberAttribute("calibbias")
176 .has_value());
177 EXPECT_FALSE(mock_device_->GetChannel("accel_z")
178 ->ReadNumberAttribute("calibbias")
179 .has_value());
Enrico Granata7a622342019-05-21 11:10:59 -0700180}
181
Enrico Granatafc7227d2019-07-26 13:51:19 -0700182TEST_F(AccelerometerTest, CalibscaleData) {
183 SetSingleSensor(kBaseSensorLocation);
184 ConfigureVpd({{"in_accel_x_base_calibscale", "5"},
185 {"in_accel_y_base_calibscale", "6"},
186 {"in_accel_z_base_calibscale", "7"}});
187
188 EXPECT_TRUE(GetConfiguration()->Configure());
189
Harvey Yangfc9178f2020-03-16 14:26:53 +0800190 EXPECT_TRUE(mock_device_->GetChannel("accel_x")
191 ->ReadNumberAttribute("calibscale")
192 .has_value());
193 EXPECT_TRUE(mock_device_->GetChannel("accel_y")
194 ->ReadNumberAttribute("calibscale")
195 .has_value());
196 EXPECT_TRUE(mock_device_->GetChannel("accel_z")
197 ->ReadNumberAttribute("calibscale")
198 .has_value());
Enrico Granatafc7227d2019-07-26 13:51:19 -0700199
Harvey Yangfc9178f2020-03-16 14:26:53 +0800200 EXPECT_EQ(5, mock_device_->GetChannel("accel_x")
201 ->ReadNumberAttribute("calibscale")
202 .value());
203 EXPECT_EQ(6, mock_device_->GetChannel("accel_y")
204 ->ReadNumberAttribute("calibscale")
205 .value());
206 EXPECT_EQ(7, mock_device_->GetChannel("accel_z")
207 ->ReadNumberAttribute("calibscale")
208 .value());
Gwendal Grignouaee37402019-12-18 23:51:43 -0800209}
210
211TEST_F(AccelerometerTest, CalibscaleZeroData) {
212 SetSingleSensor(kBaseSensorLocation);
213 ConfigureVpd({{"in_accel_x_base_calibscale", "5"},
214 {"in_accel_y_base_calibscale", "6"},
215 {"in_accel_z_base_calibscale", "0"}});
216
217 EXPECT_TRUE(GetConfiguration()->Configure());
218
Harvey Yangfc9178f2020-03-16 14:26:53 +0800219 EXPECT_TRUE(mock_device_->GetChannel("accel_x")
220 ->ReadNumberAttribute("calibscale")
221 .has_value());
222 EXPECT_TRUE(mock_device_->GetChannel("accel_y")
223 ->ReadNumberAttribute("calibscale")
224 .has_value());
225 EXPECT_TRUE(mock_device_->GetChannel("accel_z")
226 ->ReadNumberAttribute("calibscale")
227 .has_value());
Gwendal Grignouaee37402019-12-18 23:51:43 -0800228
Harvey Yangfc9178f2020-03-16 14:26:53 +0800229 EXPECT_EQ(5, mock_device_->GetChannel("accel_x")
230 ->ReadNumberAttribute("calibscale")
231 .value());
232 EXPECT_EQ(6, mock_device_->GetChannel("accel_y")
233 ->ReadNumberAttribute("calibscale")
234 .value());
235 EXPECT_EQ(0, mock_device_->GetChannel("accel_z")
236 ->ReadNumberAttribute("calibscale")
237 .value());
Enrico Granatafc7227d2019-07-26 13:51:19 -0700238}
239
Enrico Granata7a622342019-05-21 11:10:59 -0700240TEST_F(AccelerometerTest, NotLoadingTriggerModule) {
Enrico Granata064a25c2019-07-15 15:48:03 -0700241 SetSingleSensor(kBaseSensorLocation);
Enrico Granata7a622342019-05-21 11:10:59 -0700242 ConfigureVpd({{"in_accel_x_base_calibbias", "50"},
Gwendal Grignou4bf5ae62020-01-06 14:16:47 -0800243 {"in_accel_y_base_calibbias", "100"},
Enrico Granata7a622342019-05-21 11:10:59 -0700244 {"in_accel_z_base_calibbias", "85"}});
245
246 EXPECT_TRUE(GetConfiguration()->Configure());
247
248 EXPECT_EQ(0, mock_delegate_->GetNumModulesProbed());
249}
250
251TEST_F(AccelerometerTest, MultipleSensorDevice) {
Enrico Granata064a25c2019-07-15 15:48:03 -0700252 SetSharedSensor();
Enrico Granata7a622342019-05-21 11:10:59 -0700253 ConfigureVpd({{"in_accel_x_base_calibbias", "50"},
Gwendal Grignou4bf5ae62020-01-06 14:16:47 -0800254 {"in_accel_y_base_calibbias", "100"},
Enrico Granata7a622342019-05-21 11:10:59 -0700255 {"in_accel_z_base_calibbias", "85"},
256 {"in_accel_y_lid_calibbias", "27"}});
257
258 EXPECT_TRUE(GetConfiguration()->Configure());
259
Harvey Yangfc9178f2020-03-16 14:26:53 +0800260 EXPECT_TRUE(mock_device_->GetChannel("accel_x_base")
261 ->ReadNumberAttribute("calibbias")
262 .has_value());
263 EXPECT_TRUE(mock_device_->GetChannel("accel_y_base")
264 ->ReadNumberAttribute("calibbias")
265 .has_value());
266 EXPECT_TRUE(mock_device_->GetChannel("accel_z_base")
267 ->ReadNumberAttribute("calibbias")
268 .has_value());
Enrico Granata7a622342019-05-21 11:10:59 -0700269
Harvey Yangfc9178f2020-03-16 14:26:53 +0800270 EXPECT_EQ(50, mock_device_->GetChannel("accel_x_base")
271 ->ReadNumberAttribute("calibbias")
272 .value());
273 EXPECT_EQ(100, mock_device_->GetChannel("accel_y_base")
274 ->ReadNumberAttribute("calibbias")
275 .value());
276 EXPECT_EQ(85, mock_device_->GetChannel("accel_z_base")
277 ->ReadNumberAttribute("calibbias")
278 .value());
279
280 EXPECT_FALSE(mock_device_->GetChannel("accel_x_lid")
281 ->ReadNumberAttribute("calibbias")
Enrico Granata7a622342019-05-21 11:10:59 -0700282 .has_value());
Harvey Yangfc9178f2020-03-16 14:26:53 +0800283 EXPECT_TRUE(mock_device_->GetChannel("accel_y_lid")
284 ->ReadNumberAttribute("calibbias")
285 .has_value());
286 EXPECT_EQ(27, mock_device_->GetChannel("accel_y_lid")
287 ->ReadNumberAttribute("calibbias")
288 .value());
289 EXPECT_FALSE(mock_device_->GetChannel("accel_z_lid")
290 ->ReadNumberAttribute("calibbias")
Enrico Granata7a622342019-05-21 11:10:59 -0700291 .has_value());
292}
293
Enrico Granata10e19de2019-05-21 14:17:36 -0700294TEST_F(AccelerometerTest, TriggerPermissions) {
Enrico Granata064a25c2019-07-15 15:48:03 -0700295 SetSingleSensor(kLidSensorLocation);
Enrico Granata10e19de2019-05-21 14:17:36 -0700296 EXPECT_TRUE(GetConfiguration()->Configure());
297
Gwendal Grignou1a663372020-01-24 09:36:49 -0800298 base::FilePath trigger_now = mock_trigger1_->GetPath().Append("trigger_now");
Enrico Granata10e19de2019-05-21 14:17:36 -0700299 EXPECT_NE(0, mock_delegate_->GetPermissions(trigger_now) &
300 base::FILE_PERMISSION_WRITE_BY_GROUP);
301 gid_t gid = 0;
302 mock_delegate_->GetOwnership(trigger_now, nullptr, &gid);
303 EXPECT_EQ(kChronosGroupId, gid);
304}
305
Harvey Yangaa650ed2020-09-24 13:03:02 +0800306#if !USE_IIOSERVICE
Enrico Granata064a25c2019-07-15 15:48:03 -0700307TEST_F(AccelerometerTest, SingleSensorEnableChannels) {
308 SetSingleSensor(kLidSensorLocation);
309 EXPECT_TRUE(GetConfiguration()->Configure());
310
Harvey Yang786967c2020-07-01 18:04:31 +0800311 for (auto channel : mock_device_->GetAllChannels()) {
312 if (strcmp(channel->GetId(), "calibration") == 0)
313 continue;
Harvey Yang1d50fff2020-10-27 12:24:38 +0800314 EXPECT_EQ(static_cast<FakeIioChannel*>(channel)->IsScanElementsEnabled(),
315 0 != strcmp(channel->GetId(), "timestamp"));
Enrico Granata064a25c2019-07-15 15:48:03 -0700316 }
317}
318
319TEST_F(AccelerometerTest, MultipleSensorEnableChannels) {
320 SetSharedSensor();
321 EXPECT_TRUE(GetConfiguration()->Configure());
322
Harvey Yang786967c2020-07-01 18:04:31 +0800323 for (auto channel : mock_device_->GetAllChannels()) {
324 if (strcmp(channel->GetId(), "calibration") == 0)
325 continue;
Harvey Yang1d50fff2020-10-27 12:24:38 +0800326 EXPECT_EQ(static_cast<FakeIioChannel*>(channel)->IsScanElementsEnabled(),
327 0 != strcmp(channel->GetId(), "timestamp"));
Enrico Granata064a25c2019-07-15 15:48:03 -0700328 }
329}
330
331TEST_F(AccelerometerTest, BufferEnabled) {
Enrico Granatafc2e3472019-07-16 11:23:25 -0700332 SetSingleSensor(kLidSensorLocation);
Enrico Granata064a25c2019-07-15 15:48:03 -0700333 EXPECT_FALSE(mock_device_->IsBufferEnabled());
334
335 EXPECT_TRUE(GetConfiguration()->Configure());
336
337 size_t accel_buffer_len = 0;
338 EXPECT_TRUE(mock_device_->IsBufferEnabled(&accel_buffer_len));
339 EXPECT_EQ(1, accel_buffer_len);
340}
Harvey Yangaa650ed2020-09-24 13:03:02 +0800341#endif
Enrico Granata064a25c2019-07-15 15:48:03 -0700342
Enrico Granatafc2e3472019-07-16 11:23:25 -0700343TEST_F(AccelerometerTest, SingleSensorKbWakeAnglePermissions) {
344 base::FilePath kb_path("/sys/class/chromeos/cros_ec/kb_wake_angle");
345
346 SetSingleSensor(kLidSensorLocation);
347 mock_delegate_->CreateFile(kb_path);
348 mock_delegate_->AddGroup("power", kPowerGroupId);
349 EXPECT_TRUE(GetConfiguration()->Configure());
350
351 EXPECT_NE(0, mock_delegate_->GetPermissions(kb_path) &
352 base::FILE_PERMISSION_WRITE_BY_GROUP);
353 gid_t gid = 0;
354 mock_delegate_->GetOwnership(kb_path, nullptr, &gid);
355 EXPECT_EQ(kPowerGroupId, gid);
356}
357
358TEST_F(AccelerometerTest, SharedSensorKbWakeAnglePermissions) {
359 base::FilePath kb_path = mock_device_->GetPath().Append("in_angl_offset");
360
361 SetSharedSensor();
362 mock_delegate_->CreateFile(kb_path);
363 mock_delegate_->AddGroup("power", kPowerGroupId);
364 EXPECT_TRUE(GetConfiguration()->Configure());
365
366 EXPECT_NE(0, mock_delegate_->GetPermissions(kb_path) &
367 base::FILE_PERMISSION_WRITE_BY_GROUP);
368 gid_t gid = 0;
369 mock_delegate_->GetOwnership(kb_path, nullptr, &gid);
370 EXPECT_EQ(kPowerGroupId, gid);
371}
372
Gwendal Grignou1a663372020-01-24 09:36:49 -0800373TEST_F(AccelerometerTest, OkWithSysfstrigDefined) {
Enrico Granata5da6b1d2019-07-16 11:25:55 -0700374 SetSingleSensor(kLidSensorLocation);
375
Harvey Yang786967c2020-07-01 18:04:31 +0800376 mock_sysfs_trigger_->AddMockTrigger();
Enrico Granata5da6b1d2019-07-16 11:25:55 -0700377
378 EXPECT_TRUE(GetConfiguration()->Configure());
379}
380
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800381TEST_F(AccelerometerTest, SetRangeNoGyroLid) {
382 SetSingleSensor(kLidSensorLocation);
383 EXPECT_TRUE(GetConfiguration()->Configure());
Tom Hughes09483d12020-08-27 15:55:08 -0700384 EXPECT_EQ(4, mock_device_->ReadNumberAttribute("scale").value());
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800385}
386
387TEST_F(AccelerometerTest, SetRangeNoGyroLidOld) {
388 SetSharedSensor();
389 SetSingleSensor(kBaseSensorLocation);
390 EXPECT_TRUE(GetConfiguration()->Configure());
Tom Hughes09483d12020-08-27 15:55:08 -0700391 EXPECT_NE(4, mock_device_->ReadNumberAttribute("scale").value_or(0));
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800392}
393
394TEST_F(AccelerometerTest, SetRangeGyroBaseBase) {
Tom Hughes09483d12020-08-27 15:55:08 -0700395 auto mock_gyro =
396 std::make_unique<FakeIioDevice>(mock_context_.get(), "cros-ec-gyro", 2);
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800397 mock_gyro->WriteStringAttribute("location", kBaseSensorLocation);
Harvey Yang786967c2020-07-01 18:04:31 +0800398 mock_context_->AddDevice(std::move(mock_gyro));
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800399
400 SetSingleSensor(kBaseSensorLocation);
401 EXPECT_TRUE(GetConfiguration()->Configure());
Tom Hughes09483d12020-08-27 15:55:08 -0700402 EXPECT_EQ(4, mock_device_->ReadNumberAttribute("scale").value());
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800403}
404
405TEST_F(AccelerometerTest, SetRangeGyroBaseLid) {
Tom Hughes09483d12020-08-27 15:55:08 -0700406 auto mock_gyro =
407 std::make_unique<FakeIioDevice>(mock_context_.get(), "cros-ec-gyro", 2);
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800408 mock_gyro->WriteStringAttribute("location", kBaseSensorLocation);
Harvey Yang786967c2020-07-01 18:04:31 +0800409 mock_context_->AddDevice(std::move(mock_gyro));
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800410
411 SetSingleSensor(kLidSensorLocation);
412 EXPECT_TRUE(GetConfiguration()->Configure());
Tom Hughes09483d12020-08-27 15:55:08 -0700413 EXPECT_EQ(2, mock_device_->ReadNumberAttribute("scale").value());
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800414}
415
416TEST_F(AccelerometerTest, SetRangeMultipleGyroLid) {
Tom Hughes09483d12020-08-27 15:55:08 -0700417 auto mock_gyro1 =
418 std::make_unique<FakeIioDevice>(mock_context_.get(), "cros-ec-gyro", 2);
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800419 mock_gyro1->WriteStringAttribute("location", kBaseSensorLocation);
Harvey Yang786967c2020-07-01 18:04:31 +0800420 mock_context_->AddDevice(std::move(mock_gyro1));
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800421
Tom Hughes09483d12020-08-27 15:55:08 -0700422 auto mock_gyro2 =
423 std::make_unique<FakeIioDevice>(mock_context_.get(), "cros-ec-gyro", 3);
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800424 mock_gyro2->WriteStringAttribute("location", kLidSensorLocation);
Harvey Yang786967c2020-07-01 18:04:31 +0800425 mock_context_->AddDevice(std::move(mock_gyro2));
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800426
427 SetSingleSensor(kLidSensorLocation);
428 EXPECT_TRUE(GetConfiguration()->Configure());
Tom Hughes09483d12020-08-27 15:55:08 -0700429 EXPECT_EQ(4, mock_device_->ReadNumberAttribute("scale").value());
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800430}
431
432TEST_F(AccelerometerTest, SetRangeMultipleGyroBase) {
Tom Hughes09483d12020-08-27 15:55:08 -0700433 auto mock_gyro1 =
434 std::make_unique<FakeIioDevice>(mock_context_.get(), "cros-ec-gyro", 2);
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800435 mock_gyro1->WriteStringAttribute("location", kBaseSensorLocation);
Harvey Yang786967c2020-07-01 18:04:31 +0800436 mock_context_->AddDevice(std::move(mock_gyro1));
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800437
Tom Hughes09483d12020-08-27 15:55:08 -0700438 auto mock_gyro2 =
439 std::make_unique<FakeIioDevice>(mock_context_.get(), "cros-ec-gyro", 3);
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800440 mock_gyro2->WriteStringAttribute("location", kLidSensorLocation);
Harvey Yang786967c2020-07-01 18:04:31 +0800441 mock_context_->AddDevice(std::move(mock_gyro2));
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800442
443 SetSingleSensor(kBaseSensorLocation);
444 EXPECT_TRUE(GetConfiguration()->Configure());
Tom Hughes09483d12020-08-27 15:55:08 -0700445 EXPECT_EQ(2, mock_device_->ReadNumberAttribute("scale").value());
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800446}
447
Enrico Granata7a622342019-05-21 11:10:59 -0700448} // namespace
449
450} // namespace mems_setup