| #include "sensors/buildjson.hpp" |
| #include "sensors/sensor.hpp" |
| |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| |
| namespace pid_control |
| { |
| namespace |
| { |
| |
| 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(static_cast<u_int64_t>(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(static_cast<u_int64_t>(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, TempDbusSensor) |
| { |
| auto j2 = R"( |
| { |
| "sensors": [{ |
| "name": "CPU_DTS", |
| "type": "temp", |
| "readPath": "/xyz/openbmc_project/sensors/temperature/CPU_DTS", |
| "unavailableAsFailed": false |
| }] |
| } |
| )"_json; |
| |
| auto output = buildSensorsFromJson(j2); |
| EXPECT_EQ(static_cast<u_int64_t>(1), output.size()); |
| EXPECT_EQ(output["CPU_DTS"].type, "temp"); |
| EXPECT_EQ(output["CPU_DTS"].readPath, |
| "/xyz/openbmc_project/sensors/temperature/CPU_DTS"); |
| EXPECT_EQ(output["CPU_DTS"].writePath, ""); |
| EXPECT_EQ(output["CPU_DTS"].min, 0); |
| EXPECT_EQ(output["CPU_DTS"].max, 0); |
| EXPECT_EQ(output["CPU_DTS"].timeout, |
| Sensor::getDefaultTimeout(output["CPU_DTS"].type)); |
| EXPECT_EQ(output["CPU_DTS"].unavailableAsFailed, false); |
| } |
| |
| 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(static_cast<u_int64_t>(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); |
| EXPECT_EQ(output["fan1"].unavailableAsFailed, true); |
| } |
| |
| 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(static_cast<u_int64_t>(2), output.size()); |
| } |
| |
| } // namespace |
| } // namespace pid_control |