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