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