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