summaryrefslogtreecommitdiffstats
path: root/test/sensors_json_unittest.cpp
blob: 4777ae33b6c942b0c05d589af12385ab341e71da (plain)
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());
}
OpenPOWER on IntegriCloud