1 #include "build/buildjson.hpp" 2 #include "errors/exception.hpp" 3 4 #include <gmock/gmock.h> 5 #include <gtest/gtest.h> 6 7 TEST(ConfigurationVerificationTest, VerifyHappy) 8 { 9 /* Verify a happy configuration throws no exceptions. */ 10 auto j2 = R"( 11 { 12 "sensors": [{ 13 "name": "fan1", 14 "type": "fan", 15 "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1" 16 }], 17 "zones": [{ 18 "id": 1, 19 "minThermalRpm": 3000.0, 20 "failsafePercent": 75.0, 21 "pids": [{ 22 "name": "fan1-5", 23 "type": "fan", 24 "inputs": ["fan1", "fan5"], 25 "setpoint": 90.0, 26 "pid": { 27 "samplePeriod": 0.1, 28 "proportionalCoeff": 0.0, 29 "integralCoeff": 0.0, 30 "feedFwdOffsetCoeff": 0.0, 31 "feedFwdGainCoeff": 0.010, 32 "integralLimit_min": 0.0, 33 "integralLimit_max": 0.0, 34 "outLim_min": 30.0, 35 "outLim_max": 100.0, 36 "slewNeg": 0.0, 37 "slewPos": 0.0 38 } 39 }] 40 }] 41 } 42 )"_json; 43 44 validateJson(j2); 45 } 46 47 TEST(ConfigurationVerificationTest, VerifyNoSensorKey) 48 { 49 /* Verify the sensors key must be present. */ 50 auto j2 = R"( 51 { 52 "zones": [{ 53 "id": 1, 54 "minThermalRpm": 3000.0, 55 "failsafePercent": 75.0, 56 "pids": [{ 57 "name": "fan1-5", 58 "type": "fan", 59 "inputs": ["fan1", "fan5"], 60 "setpoint": 90.0, 61 "pid": { 62 "samplePeriod": 0.1, 63 "proportionalCoeff": 0.0, 64 "integralCoeff": 0.0, 65 "feedFwdOffsetCoeff": 0.0, 66 "feedFwdGainCoeff": 0.010, 67 "integralLimit_min": 0.0, 68 "integralLimit_max": 0.0, 69 "outLim_min": 30.0, 70 "outLim_max": 100.0, 71 "slewNeg": 0.0, 72 "slewPos": 0.0 73 } 74 }] 75 }] 76 } 77 )"_json; 78 79 EXPECT_THROW(validateJson(j2), ConfigurationException); 80 } 81 82 TEST(ConfigurationVerificationTest, VerifyNoZoneKey) 83 { 84 /* Verify the zones key must be present. */ 85 auto j2 = R"( 86 { 87 "sensors": [{ 88 "name": "fan1", 89 "type": "fan", 90 "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1" 91 }] 92 } 93 )"_json; 94 95 EXPECT_THROW(validateJson(j2), ConfigurationException); 96 } 97 98 TEST(ConfigurationVerificationTest, VerifyNoSensor) 99 { 100 /* Verify that there needs to be at least one sensor in the sensors key. */ 101 auto j2 = R"( 102 { 103 "sensors": [], 104 "zones": [{ 105 "id": 1, 106 "minThermalRpm": 3000.0, 107 "failsafePercent": 75.0, 108 "pids": [{ 109 "name": "fan1-5", 110 "type": "fan", 111 "inputs": ["fan1", "fan5"], 112 "setpoint": 90.0, 113 "pid": { 114 "samplePeriod": 0.1, 115 "proportionalCoeff": 0.0, 116 "integralCoeff": 0.0, 117 "feedFwdOffsetCoeff": 0.0, 118 "feedFwdGainCoeff": 0.010, 119 "integralLimit_min": 0.0, 120 "integralLimit_max": 0.0, 121 "outLim_min": 30.0, 122 "outLim_max": 100.0, 123 "slewNeg": 0.0, 124 "slewPos": 0.0 125 } 126 }] 127 }] 128 } 129 )"_json; 130 131 EXPECT_THROW(validateJson(j2), ConfigurationException); 132 } 133 134 TEST(ConfigurationVerificationTest, VerifyNoPidInZone) 135 { 136 /* Verify that there needs to be at least one PID in the zone. */ 137 auto j2 = R"( 138 { 139 "sensors": [{ 140 "name": "fan1", 141 "type": "fan", 142 "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1" 143 }], 144 "zones": [{ 145 "id": 1, 146 "minThermalRpm": 3000.0, 147 "failsafePercent": 75.0, 148 "pids": [] 149 }] 150 } 151 )"_json; 152 153 EXPECT_THROW(validateJson(j2), ConfigurationException); 154 } 155