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(static_cast<u_int64_t>(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(static_cast<u_int64_t>(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, TempDbusSensor) 85 { 86 auto j2 = R"( 87 { 88 "sensors": [{ 89 "name": "CPU_DTS", 90 "type": "temp", 91 "readPath": "/xyz/openbmc_project/sensors/temperature/CPU_DTS", 92 "unavailableAsFailed": false 93 }] 94 } 95 )"_json; 96 97 auto output = buildSensorsFromJson(j2); 98 EXPECT_EQ(static_cast<u_int64_t>(1), output.size()); 99 EXPECT_EQ(output["CPU_DTS"].type, "temp"); 100 EXPECT_EQ(output["CPU_DTS"].readPath, 101 "/xyz/openbmc_project/sensors/temperature/CPU_DTS"); 102 EXPECT_EQ(output["CPU_DTS"].writePath, ""); 103 EXPECT_EQ(output["CPU_DTS"].min, 0); 104 EXPECT_EQ(output["CPU_DTS"].max, 0); 105 EXPECT_EQ(output["CPU_DTS"].timeout, 106 Sensor::getDefaultTimeout(output["CPU_DTS"].type)); 107 EXPECT_EQ(output["CPU_DTS"].unavailableAsFailed, false); 108 } 109 110 TEST(SensorsFromJson, validateOptionalFields) 111 { 112 // The writePath, min, max, timeout, and ignoreDbusMinMax fields are 113 // optional. 114 115 auto j2 = R"( 116 { 117 "sensors": [{ 118 "name": "fan1", 119 "type": "fan", 120 "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1" 121 }] 122 } 123 )"_json; 124 125 auto output = buildSensorsFromJson(j2); 126 EXPECT_EQ(static_cast<u_int64_t>(1), output.size()); 127 EXPECT_EQ(output["fan1"].type, "fan"); 128 EXPECT_EQ(output["fan1"].readPath, 129 "/xyz/openbmc_project/sensors/fan_tach/fan1"); 130 EXPECT_EQ(output["fan1"].writePath, ""); 131 EXPECT_EQ(output["fan1"].min, 0); 132 EXPECT_EQ(output["fan1"].max, 0); 133 EXPECT_EQ(output["fan1"].timeout, 134 Sensor::getDefaultTimeout(output["fan1"].type)); 135 EXPECT_EQ(output["fan1"].ignoreDbusMinMax, false); 136 EXPECT_EQ(output["fan1"].unavailableAsFailed, true); 137 } 138 139 TEST(SensorsFromJson, twoSensors) 140 { 141 // Same as one sensor, but two. 142 // If a configuration has two sensors with the same name the information 143 // last is the information used. 144 145 auto j2 = R"( 146 { 147 "sensors": [{ 148 "name": "fan1", 149 "type": "fan", 150 "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1" 151 }, { 152 "name": "fan2", 153 "type": "fan", 154 "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1" 155 }] 156 } 157 )"_json; 158 159 auto output = buildSensorsFromJson(j2); 160 EXPECT_EQ(static_cast<u_int64_t>(2), output.size()); 161 } 162 163 } // namespace 164 } // namespace pid_control 165