blob: 49e9c807e4e94517de2a4b85d4d17553c27668e6 [file] [log] [blame]
Enrico Granata651d2572019-07-16 15:17:01 -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
5#include <map>
6#include <memory>
7#include <string>
8
9#include <gtest/gtest.h>
10
Harvey Yang1d50fff2020-10-27 12:24:38 +080011#include <libmems/common_types.h>
Enrico Granata651d2572019-07-16 15:17:01 -070012#include <libmems/iio_context.h>
13#include <libmems/iio_device.h>
14#include <libmems/test_fakes.h>
15#include "mems_setup/configuration.h"
16#include "mems_setup/delegate.h"
17#include "mems_setup/sensor_location.h"
18#include "mems_setup/test_fakes.h"
19#include "mems_setup/test_helper.h"
20
21using mems_setup::testing::SensorTestBase;
22
23namespace mems_setup {
24
25namespace {
26
Harvey Yang34f464c2020-01-08 17:43:46 +080027static gid_t kIioserviceGroupId = 777;
28
Enrico Granata651d2572019-07-16 15:17:01 -070029class LightTest : public SensorTestBase {
30 public:
Harvey Yang73394622020-02-12 10:57:57 +080031 LightTest() : SensorTestBase("cros-ec-light", 4) {
Harvey Yang34f464c2020-01-08 17:43:46 +080032 mock_delegate_->AddGroup(Configuration::GetGroupNameForSysfs(),
33 kIioserviceGroupId);
34 }
Enrico Granata651d2572019-07-16 15:17:01 -070035};
36
Harvey Yang1d50fff2020-10-27 12:24:38 +080037#if USE_IIOSERVICE
38TEST_F(LightTest, FrequencyReset) {
39 SetSingleSensor(kBaseSensorLocation);
40 ConfigureVpd({{"als_cal_intercept", "100"}});
41
42 EXPECT_TRUE(GetConfiguration()->Configure());
43
44 auto frequency_opt =
45 mock_device_->ReadDoubleAttribute(libmems::kSamplingFrequencyAttr);
46 EXPECT_TRUE(frequency_opt.has_value());
47 EXPECT_EQ(frequency_opt.value(), 0.0);
48}
49#endif // USE_IIOSERVICE
50
Enrico Granata651d2572019-07-16 15:17:01 -070051TEST_F(LightTest, PartialVpd) {
Harvey Yangfc9178f2020-03-16 14:26:53 +080052 SetSingleSensor(kBaseSensorLocation);
Enrico Granata651d2572019-07-16 15:17:01 -070053 ConfigureVpd({{"als_cal_intercept", "100"}});
54
55 EXPECT_TRUE(GetConfiguration()->Configure());
56
Harvey Yangfc9178f2020-03-16 14:26:53 +080057 EXPECT_TRUE(mock_device_->GetChannel("illuminance")
58 ->ReadDoubleAttribute("calibbias")
Enrico Granata651d2572019-07-16 15:17:01 -070059 .has_value());
Harvey Yangfc9178f2020-03-16 14:26:53 +080060 EXPECT_EQ(100, mock_device_->GetChannel("illuminance")
61 ->ReadDoubleAttribute("calibbias")
Gwendal Grignouaee37402019-12-18 23:51:43 -080062 .value());
Harvey Yangfc9178f2020-03-16 14:26:53 +080063 EXPECT_FALSE(mock_device_->GetChannel("illuminance")
64 ->ReadDoubleAttribute("calibscale")
Enrico Granata651d2572019-07-16 15:17:01 -070065 .has_value());
66}
67
68TEST_F(LightTest, VpdFormatError) {
Harvey Yangfc9178f2020-03-16 14:26:53 +080069 SetSingleSensor(kBaseSensorLocation);
Enrico Granata651d2572019-07-16 15:17:01 -070070 ConfigureVpd({{"als_cal_slope", "abc"}});
71
72 EXPECT_TRUE(GetConfiguration()->Configure());
73
Harvey Yangfc9178f2020-03-16 14:26:53 +080074 EXPECT_FALSE(mock_device_->GetChannel("illuminance")
75 ->ReadDoubleAttribute("calibbias")
Enrico Granata651d2572019-07-16 15:17:01 -070076 .has_value());
Harvey Yangfc9178f2020-03-16 14:26:53 +080077 EXPECT_FALSE(mock_device_->GetChannel("illuminance")
78 ->ReadDoubleAttribute("calibscale")
Enrico Granata651d2572019-07-16 15:17:01 -070079 .has_value());
80}
81
82TEST_F(LightTest, ValidVpd) {
Harvey Yangfc9178f2020-03-16 14:26:53 +080083 SetSingleSensor(kBaseSensorLocation);
Enrico Granata651d2572019-07-16 15:17:01 -070084 ConfigureVpd({{"als_cal_intercept", "1.25"}, {"als_cal_slope", "12.5"}});
85
86 EXPECT_TRUE(GetConfiguration()->Configure());
87
Harvey Yangfc9178f2020-03-16 14:26:53 +080088 EXPECT_TRUE(mock_device_->GetChannel("illuminance")
89 ->ReadDoubleAttribute("calibbias")
Enrico Granata651d2572019-07-16 15:17:01 -070090 .has_value());
Harvey Yangfc9178f2020-03-16 14:26:53 +080091 EXPECT_EQ(1.25, mock_device_->GetChannel("illuminance")
92 ->ReadDoubleAttribute("calibbias")
93 .value());
94 EXPECT_TRUE(mock_device_->GetChannel("illuminance")
95 ->ReadDoubleAttribute("calibscale")
Enrico Granata651d2572019-07-16 15:17:01 -070096 .has_value());
Harvey Yangfc9178f2020-03-16 14:26:53 +080097 EXPECT_EQ(12.5, mock_device_->GetChannel("illuminance")
98 ->ReadDoubleAttribute("calibscale")
99 .value());
Gwendal Grignouaee37402019-12-18 23:51:43 -0800100}
101
102TEST_F(LightTest, VpdCalSlopeColorGood) {
Harvey Yangfc9178f2020-03-16 14:26:53 +0800103 SetColorLightSensor();
Gwendal Grignouaee37402019-12-18 23:51:43 -0800104 ConfigureVpd({{"als_cal_slope_color", "1.1 1.2 1.3"}});
105
106 EXPECT_TRUE(GetConfiguration()->Configure());
107
Harvey Yangfc9178f2020-03-16 14:26:53 +0800108 EXPECT_TRUE(mock_device_->GetChannel("illuminance_red")
109 ->ReadDoubleAttribute("calibscale")
Gwendal Grignouaee37402019-12-18 23:51:43 -0800110 .has_value());
Harvey Yangfc9178f2020-03-16 14:26:53 +0800111 EXPECT_EQ(1.1, mock_device_->GetChannel("illuminance_red")
112 ->ReadDoubleAttribute("calibscale")
113 .value());
114
115 EXPECT_TRUE(mock_device_->GetChannel("illuminance_green")
116 ->ReadDoubleAttribute("calibscale")
Gwendal Grignouaee37402019-12-18 23:51:43 -0800117 .has_value());
Harvey Yangfc9178f2020-03-16 14:26:53 +0800118 EXPECT_EQ(1.2, mock_device_->GetChannel("illuminance_green")
119 ->ReadDoubleAttribute("calibscale")
120 .value());
121
122 EXPECT_TRUE(mock_device_->GetChannel("illuminance_blue")
123 ->ReadDoubleAttribute("calibscale")
Gwendal Grignouaee37402019-12-18 23:51:43 -0800124 .has_value());
Harvey Yangfc9178f2020-03-16 14:26:53 +0800125 EXPECT_EQ(1.3, mock_device_->GetChannel("illuminance_blue")
126 ->ReadDoubleAttribute("calibscale")
127 .value());
Gwendal Grignouaee37402019-12-18 23:51:43 -0800128}
129
130TEST_F(LightTest, VpdCalSlopeColorCorrupted) {
Harvey Yangfc9178f2020-03-16 14:26:53 +0800131 SetColorLightSensor();
Gwendal Grignouaee37402019-12-18 23:51:43 -0800132 ConfigureVpd({{"als_cal_slope_color", "1.1 no 1.3"}});
133
134 EXPECT_TRUE(GetConfiguration()->Configure());
135
Harvey Yangfc9178f2020-03-16 14:26:53 +0800136 EXPECT_TRUE(mock_device_->GetChannel("illuminance_red")
137 ->ReadDoubleAttribute("calibscale")
Gwendal Grignouaee37402019-12-18 23:51:43 -0800138 .has_value());
Harvey Yangfc9178f2020-03-16 14:26:53 +0800139 EXPECT_EQ(1.1, mock_device_->GetChannel("illuminance_red")
140 ->ReadDoubleAttribute("calibscale")
141 .value());
142
143 EXPECT_FALSE(mock_device_->GetChannel("illuminance_green")
144 ->ReadDoubleAttribute("calibscale")
145 .has_value());
146
147 EXPECT_FALSE(mock_device_->GetChannel("illuminance_blue")
148 ->ReadDoubleAttribute("calibscale")
149 .has_value());
Gwendal Grignouaee37402019-12-18 23:51:43 -0800150}
151
152TEST_F(LightTest, VpdCalSlopeColorIncomplete) {
Harvey Yangfc9178f2020-03-16 14:26:53 +0800153 SetColorLightSensor();
Gwendal Grignouaee37402019-12-18 23:51:43 -0800154 ConfigureVpd({{"als_cal_slope_color", "1.1"}});
155
156 EXPECT_TRUE(GetConfiguration()->Configure());
157
Harvey Yangfc9178f2020-03-16 14:26:53 +0800158 EXPECT_FALSE(mock_device_->GetChannel("illuminance_red")
159 ->ReadDoubleAttribute("calibscale")
160 .has_value());
161
162 EXPECT_FALSE(mock_device_->GetChannel("illuminance_green")
163 ->ReadDoubleAttribute("calibscale")
164 .has_value());
165
166 EXPECT_FALSE(mock_device_->GetChannel("illuminance_blue")
167 ->ReadDoubleAttribute("calibscale")
168 .has_value());
Enrico Granata651d2572019-07-16 15:17:01 -0700169}
170
171} // namespace
172
173} // namespace mems_setup