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     EXPECT_EQ(output["fan1"].ignoreDbusMinMax, false);
51 }
52 
53 TEST(SensorsFromJson, IgnoreDbusSensor)
54 {
55     auto j2 = R"(
56       {
57         "sensors": [{
58             "name": "fan1",
59             "type": "fan",
60             "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1",
61             "ignoreDbusMinMax": true
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     EXPECT_EQ(output["fan1"].ignoreDbusMinMax, true);
77 }
78 
79 TEST(SensorsFromJson, validateOptionalFields)
80 {
81     // The writePath, min, max, timeout, and ignoreDbusMinMax fields are
82     // optional.
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       }
92     )"_json;
93 
94     auto output = buildSensorsFromJson(j2);
95     EXPECT_EQ(1, output.size());
96     EXPECT_EQ(output["fan1"].type, "fan");
97     EXPECT_EQ(output["fan1"].readPath,
98               "/xyz/openbmc_project/sensors/fan_tach/fan1");
99     EXPECT_EQ(output["fan1"].writePath, "");
100     EXPECT_EQ(output["fan1"].min, 0);
101     EXPECT_EQ(output["fan1"].max, 0);
102     EXPECT_EQ(output["fan1"].timeout,
103               Sensor::getDefaultTimeout(output["fan1"].type));
104     EXPECT_EQ(output["fan1"].ignoreDbusMinMax, false);
105 }
106 
107 TEST(SensorsFromJson, twoSensors)
108 {
109     // Same as one sensor, but two.
110     // If a configuration has two sensors with the same name the information
111     // last is the information used.
112 
113     auto j2 = R"(
114       {
115         "sensors": [{
116             "name": "fan1",
117             "type": "fan",
118             "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1"
119         }, {
120             "name": "fan2",
121             "type": "fan",
122             "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1"
123         }]
124       }
125     )"_json;
126 
127     auto output = buildSensorsFromJson(j2);
128     EXPECT_EQ(2, output.size());
129 }
130