xref: /openbmc/phosphor-pid-control/test/sensors_json_unittest.cpp (revision f8b6e55147148c3cfb42327ff267197a460b411c)
1 #include "sensors/buildjson.hpp"
2 #include "sensors/sensor.hpp"
3 
4 #include <sys/types.h>
5 
6 #include <gtest/gtest.h>
7 
8 namespace pid_control
9 {
10 namespace
11 {
12 
TEST(SensorsFromJson,emptyJsonNoSensors)13 TEST(SensorsFromJson, emptyJsonNoSensors)
14 {
15     // If the json has no sensors, the map is empty.
16 
17     auto j2 = R"(
18       {
19         "sensors": []
20       }
21     )"_json;
22 
23     auto output = buildSensorsFromJson(j2);
24     EXPECT_TRUE(output.empty());
25 }
26 
TEST(SensorsFromJson,oneFanSensor)27 TEST(SensorsFromJson, oneFanSensor)
28 {
29     // If the json has one sensor, it's in the map.
30 
31     auto j2 = R"(
32       {
33         "sensors": [{
34             "name": "fan1",
35             "type": "fan",
36             "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1",
37             "writePath": "/sys/devices/platform/ahb/ahb:apb/1e786000.pwm-tacho-controller/hwmon/**/pwm1",
38             "min": 0,
39             "max": 255
40         }]
41       }
42     )"_json;
43 
44     auto output = buildSensorsFromJson(j2);
45     EXPECT_EQ(static_cast<u_int64_t>(1), output.size());
46     EXPECT_EQ(output["fan1"].type, "fan");
47     EXPECT_EQ(output["fan1"].readPath,
48               "/xyz/openbmc_project/sensors/fan_tach/fan1");
49     EXPECT_EQ(output["fan1"].writePath,
50               "/sys/devices/platform/ahb/ahb:apb/1e786000.pwm-tacho-controller/"
51               "hwmon/**/pwm1");
52     EXPECT_EQ(output["fan1"].min, 0);
53     EXPECT_EQ(output["fan1"].max, 255);
54     EXPECT_EQ(output["fan1"].timeout,
55               Sensor::getDefaultTimeout(output["fan1"].type));
56     EXPECT_EQ(output["fan1"].ignoreDbusMinMax, false);
57 }
58 
TEST(SensorsFromJson,IgnoreDbusSensor)59 TEST(SensorsFromJson, IgnoreDbusSensor)
60 {
61     auto j2 = R"(
62       {
63         "sensors": [{
64             "name": "fan1",
65             "type": "fan",
66             "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1",
67             "ignoreDbusMinMax": true
68         }]
69       }
70     )"_json;
71 
72     auto output = buildSensorsFromJson(j2);
73     EXPECT_EQ(static_cast<u_int64_t>(1), output.size());
74     EXPECT_EQ(output["fan1"].type, "fan");
75     EXPECT_EQ(output["fan1"].readPath,
76               "/xyz/openbmc_project/sensors/fan_tach/fan1");
77     EXPECT_EQ(output["fan1"].writePath, "");
78     EXPECT_EQ(output["fan1"].min, 0);
79     EXPECT_EQ(output["fan1"].max, 0);
80     EXPECT_EQ(output["fan1"].timeout,
81               Sensor::getDefaultTimeout(output["fan1"].type));
82     EXPECT_EQ(output["fan1"].ignoreDbusMinMax, true);
83 }
84 
TEST(SensorsFromJson,TempDbusSensor)85 TEST(SensorsFromJson, TempDbusSensor)
86 {
87     auto j2 = R"(
88       {
89         "sensors": [{
90             "name": "CPU_DTS",
91             "type": "temp",
92             "readPath": "/xyz/openbmc_project/sensors/temperature/CPU_DTS",
93             "unavailableAsFailed": false
94         }]
95       }
96     )"_json;
97 
98     auto output = buildSensorsFromJson(j2);
99     EXPECT_EQ(static_cast<u_int64_t>(1), output.size());
100     EXPECT_EQ(output["CPU_DTS"].type, "temp");
101     EXPECT_EQ(output["CPU_DTS"].readPath,
102               "/xyz/openbmc_project/sensors/temperature/CPU_DTS");
103     EXPECT_EQ(output["CPU_DTS"].writePath, "");
104     EXPECT_EQ(output["CPU_DTS"].min, 0);
105     EXPECT_EQ(output["CPU_DTS"].max, 0);
106     EXPECT_EQ(output["CPU_DTS"].timeout,
107               Sensor::getDefaultTimeout(output["CPU_DTS"].type));
108     EXPECT_EQ(output["CPU_DTS"].unavailableAsFailed, false);
109 }
110 
TEST(SensorsFromJson,validateOptionalFields)111 TEST(SensorsFromJson, validateOptionalFields)
112 {
113     // The writePath, min, max, timeout, and ignoreDbusMinMax fields are
114     // optional.
115 
116     auto j2 = R"(
117       {
118         "sensors": [{
119             "name": "fan1",
120             "type": "fan",
121             "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1"
122         }]
123       }
124     )"_json;
125 
126     auto output = buildSensorsFromJson(j2);
127     EXPECT_EQ(static_cast<u_int64_t>(1), output.size());
128     EXPECT_EQ(output["fan1"].type, "fan");
129     EXPECT_EQ(output["fan1"].readPath,
130               "/xyz/openbmc_project/sensors/fan_tach/fan1");
131     EXPECT_EQ(output["fan1"].writePath, "");
132     EXPECT_EQ(output["fan1"].min, 0);
133     EXPECT_EQ(output["fan1"].max, 0);
134     EXPECT_EQ(output["fan1"].timeout,
135               Sensor::getDefaultTimeout(output["fan1"].type));
136     EXPECT_EQ(output["fan1"].ignoreDbusMinMax, false);
137     EXPECT_EQ(output["fan1"].unavailableAsFailed, true);
138 }
139 
TEST(SensorsFromJson,twoSensors)140 TEST(SensorsFromJson, twoSensors)
141 {
142     // Same as one sensor, but two.
143     // If a configuration has two sensors with the same name the information
144     // last is the information used.
145 
146     auto j2 = R"(
147       {
148         "sensors": [{
149             "name": "fan1",
150             "type": "fan",
151             "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1"
152         }, {
153             "name": "fan2",
154             "type": "fan",
155             "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1"
156         }]
157       }
158     )"_json;
159 
160     auto output = buildSensorsFromJson(j2);
161     EXPECT_EQ(static_cast<u_int64_t>(2), output.size());
162 }
163 
164 } // namespace
165 } // namespace pid_control
166