1 #include "sensors/buildjson.hpp"
2 #include "sensors/sensor.hpp"
3 
4 #include <gmock/gmock.h>
5 #include <gtest/gtest.h>
6 
7 TEST(SensorsFromJson, emptyJsonNoSensors)
8 {
9     // If the json has no sensors, the map is empty.
10 
11     auto j2 = R"(
12       {
13         "sensors": []
14       }
15     )"_json;
16 
17     auto output = buildSensorsFromJson(j2);
18     EXPECT_TRUE(output.empty());
19 }
20 
21 TEST(SensorsFromJson, oneFanSensor)
22 {
23     // If the json has one sensor, it's in the map.
24 
25     auto j2 = R"(
26       {
27         "sensors": [{
28             "name": "fan1",
29             "type": "fan",
30             "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1",
31             "writePath": "/sys/devices/platform/ahb/ahb:apb/1e786000.pwm-tacho-controller/hwmon/**/pwm1",
32             "min": 0,
33             "max": 255
34         }]
35       }
36     )"_json;
37 
38     auto output = buildSensorsFromJson(j2);
39     EXPECT_EQ(1, output.size());
40     EXPECT_EQ(output["fan1"].type, "fan");
41     EXPECT_EQ(output["fan1"].readPath,
42               "/xyz/openbmc_project/sensors/fan_tach/fan1");
43     EXPECT_EQ(output["fan1"].writePath,
44               "/sys/devices/platform/ahb/ahb:apb/1e786000.pwm-tacho-controller/"
45               "hwmon/**/pwm1");
46     EXPECT_EQ(output["fan1"].min, 0);
47     EXPECT_EQ(output["fan1"].max, 255);
48     EXPECT_EQ(output["fan1"].timeout,
49               Sensor::getDefaultTimeout(output["fan1"].type));
50 }
51 
52 TEST(SensorsFromJson, validateOptionalFields)
53 {
54     // The writePath, min, max, timeout fields are optional.
55 
56     auto j2 = R"(
57       {
58         "sensors": [{
59             "name": "fan1",
60             "type": "fan",
61             "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1"
62         }]
63       }
64     )"_json;
65 
66     auto output = buildSensorsFromJson(j2);
67     EXPECT_EQ(1, output.size());
68     EXPECT_EQ(output["fan1"].type, "fan");
69     EXPECT_EQ(output["fan1"].readPath,
70               "/xyz/openbmc_project/sensors/fan_tach/fan1");
71     EXPECT_EQ(output["fan1"].writePath, "");
72     EXPECT_EQ(output["fan1"].min, 0);
73     EXPECT_EQ(output["fan1"].max, 0);
74     EXPECT_EQ(output["fan1"].timeout,
75               Sensor::getDefaultTimeout(output["fan1"].type));
76 }
77 
78 TEST(SensorsFromJson, twoSensors)
79 {
80     // Same as one sensor, but two.
81     // If a configuration has two sensors with the same name the information
82     // last is the information used.
83 
84     auto j2 = R"(
85       {
86         "sensors": [{
87             "name": "fan1",
88             "type": "fan",
89             "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1"
90         }, {
91             "name": "fan2",
92             "type": "fan",
93             "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1"
94         }]
95       }
96     )"_json;
97 
98     auto output = buildSensorsFromJson(j2);
99     EXPECT_EQ(2, output.size());
100 }
101