Tony Lee | 3a537b6 | 2021-04-01 14:49:43 +0800 | [diff] [blame] | 1 | *** Settings *** |
| 2 | Documentation Test Redfish sensor monitoring. |
| 3 | |
| 4 | Resource ../../lib/resource.robot |
| 5 | Resource ../../lib/bmc_redfish_resource.robot |
| 6 | Resource ../../lib/bmc_redfish_utils.robot |
| 7 | Library ../../lib/gen_robot_print.py |
| 8 | |
| 9 | Test Setup Test Setup Execution |
| 10 | Test Teardown Test Teardown Execution |
| 11 | |
| 12 | *** Variables *** |
| 13 | |
| 14 | @{INVALID_SENSORS} |
| 15 | ${OPENBMC_CONN_METHOD} ssh |
| 16 | ${IPMI_COMMAND} Inband |
| 17 | |
| 18 | ** Test Cases ** |
| 19 | |
| 20 | Verify Sensor Monitoring |
| 21 | [Documentation] Verify the redfish sensor monitoring according to the BMC |
| 22 | ... expected SDR table. |
| 23 | [Tags] Verify_Sensor_Monitoring |
| 24 | |
| 25 | # Check whether the expected sensors are present in the Redfish request. |
| 26 | # Check whether the sensors's 'Health' is 'OK' and the 'State' is 'Enabled'. |
| 27 | # Check sensor reading is not equal to null. |
| 28 | |
| 29 | ${resp}= Redfish.Get /redfish/v1/Chassis/${CHASSIS_ID} |
| 30 | ... valid_status_codes=[${HTTP_OK}] |
| 31 | |
| 32 | Should Be Equal As Strings ${resp.dict['Sensors']['@odata.id']} |
| 33 | ... /redfish/v1/Chassis/${CHASSIS_ID}/Sensors |
| 34 | Should Be Equal As Strings ${resp.dict['Thermal']['@odata.id']} |
| 35 | ... /redfish/v1/Chassis/${CHASSIS_ID}/Thermal |
| 36 | Should Be Equal As Strings ${resp.dict['Power']['@odata.id']} |
| 37 | ... /redfish/v1/Chassis/${CHASSIS_ID}/Power |
| 38 | |
| 39 | # Check sensors in /redfish/v1/Chassis/{ChassisId}/Power |
| 40 | ${resp}= Redfish.Get /redfish/v1/Chassis/${CHASSIS_ID}/Power |
| 41 | ... valid_status_codes=[${HTTP_OK}] |
| 42 | |
| 43 | Check Sensors Present ${resp.dict['Voltages']} Voltage |
| 44 | Check Sensor Status And Reading Via Sensor Info |
| 45 | ... ${resp.dict['Voltages']} ReadingVolts |
| 46 | |
| 47 | # Check sensors in /redfish/v1/Chassis/{ChassisId}/Thermal |
| 48 | ${resp}= Redfish.Get /redfish/v1/Chassis/${CHASSIS_ID}/Thermal |
| 49 | ... valid_status_codes=[${HTTP_OK}] |
| 50 | |
| 51 | Check Sensors Present ${resp.dict['Temperatures']} Temperature |
| 52 | Check Sensors Present ${resp.dict['Fans']} Fans |
| 53 | |
| 54 | Check Sensor Status And Reading Via Sensor Info |
| 55 | ... ${resp.dict['Temperatures']} ReadingCelsius |
| 56 | Check Sensor Status And Reading Via Sensor Info |
| 57 | ... ${resp.dict['Fans']} Reading |
| 58 | |
| 59 | # Check sensors in |
| 60 | # /redfish/v1/Chassis/{ChassisId}/Sensors/{Sensor Name} |
| 61 | ${expected_current_power_sensor_name_list}= Set Variable |
| 62 | ... ${redfish_sensor_info_map['${OPENBMC_MODEL}']['Current_Power']} |
| 63 | |
| 64 | FOR ${sensor_name} IN @{expected_current_power_sensor_name_list} |
| 65 | Check Sensor Status And Reading Via Sensor Name ${sensor_name} |
| 66 | END |
| 67 | |
| 68 | Rprint Vars INVALID_SENSORS |
| 69 | |
| 70 | ${error_msg}= Evaluate ", ".join(${INVALID_SENSORS}) |
| 71 | Should Be Empty ${INVALID_SENSORS} |
| 72 | ... msg=Test fail, invalid sensors are ${error_msg}. |
| 73 | |
| 74 | |
| 75 | *** Keywords *** |
| 76 | |
| 77 | Test Teardown Execution |
| 78 | [Documentation] Do the post test teardown. |
| 79 | |
| 80 | Run Keyword And Ignore Error Redfish.Logout |
| 81 | |
| 82 | |
| 83 | Test Setup Execution |
| 84 | [Documentation] Do the test setup. |
| 85 | |
| 86 | Required Parameters For Sensor Monitoring |
| 87 | Redfish.Login |
| 88 | |
| 89 | |
| 90 | Required Parameters For Sensor Monitoring |
| 91 | [Documentation] Check if required parameters are provided via command line. |
| 92 | |
| 93 | Should Not Be Empty ${OS_HOST} |
| 94 | Should Not Be Empty ${OS_USERNAME} |
| 95 | Should Not Be Empty ${OS_PASSWORD} |
| 96 | Run Keyword If '${OPENBMC_CONN_METHOD}' == 'ssh' |
| 97 | ... Should Not Be Empty ${OPENBMC_HOST} |
| 98 | ... ELSE IF '${OPENBMC_CONN_METHOD}' == 'telnet' |
| 99 | ... Should Not Be Empty ${OPENBMC_SERIAL_HOST} |
| 100 | Should Not Be Empty ${OPENBMC_MODEL} |
| 101 | |
| 102 | |
| 103 | Get Sensors Name List From Redfish |
| 104 | [Documentation] Get sensors name list from redfish. |
| 105 | [Arguments] ${sensor_info_list} |
| 106 | # Description of arguments: |
| 107 | # sensor_info_list A list of a specified sensor info return by a redfish |
| 108 | # request. |
| 109 | |
| 110 | # An example of a sensor redfish request: |
| 111 | # /redfish/v1/Chassis/${CHASSIS_ID}/Power |
| 112 | # { |
| 113 | # ... |
| 114 | # "Voltages": [ |
| 115 | # { |
| 116 | # "@odata.id": "/redfish/v1/Chassis/${CHASSIS_ID}/Power#/Voltages/0", |
| 117 | # "@odata.type": "#Power.v1_0_0.Voltage", |
| 118 | # "LowerThresholdCritical": 1.14, |
| 119 | # "LowerThresholdNonCritical": 1.14, |
| 120 | # "MaxReadingRange": 2.0, |
| 121 | # "MemberId": "Output_Voltage", |
| 122 | # "MinReadingRange": 0.0, |
| 123 | # "Name": "Output Voltage", |
| 124 | # "ReadingVolts": 1.176, |
| 125 | # "Status": { |
| 126 | # "Health": "OK", |
| 127 | # "State": "Enabled" |
| 128 | # }, |
| 129 | # "UpperThresholdCritical": 1.21, |
| 130 | # "UpperThresholdNonCritical": 1.21 |
| 131 | # } |
| 132 | # ... |
| 133 | # } |
| 134 | |
| 135 | @{sensor_name_list}= Create List |
| 136 | FOR ${sensor_info} IN @{sensor_info_list} |
| 137 | Append To List ${sensor_name_list} ${sensor_info['MemberId']} |
| 138 | END |
| 139 | |
| 140 | [Return] ${sensor_name_list} |
| 141 | |
| 142 | |
| 143 | Check Sensor Status And Reading Via Sensor Name |
| 144 | [Documentation] Check Sensor Status And Reading Via Sensor Name. |
| 145 | [Arguments] ${sensor_name} |
| 146 | # Description of arguments: |
| 147 | # sensor_name Sensor that should be present. |
| 148 | |
| 149 | ${resp}= Redfish.Get |
| 150 | ... /redfish/v1/Chassis/${CHASSIS_ID}/Sensors/${sensor_name} |
| 151 | ... valid_status_codes=[${HTTP_OK}, ${HTTP_NOT_FOUND}] |
| 152 | |
| 153 | Run Keyword And Return If '${resp.status}' == '${HTTP_NOT_FOUND}' |
| 154 | ... Append To List ${INVALID_SENSORS} ${sensor_name} |
| 155 | |
| 156 | ${condition_str}= Catenate |
| 157 | ... '${resp.dict['Status']['Health']}' != 'OK' |
| 158 | ... or '${resp.dict['Status']['State']}' != 'Enabled' |
| 159 | ... or ${resp.dict['Reading']} == ${null} |
| 160 | |
| 161 | Run Keyword If ${condition_str} |
| 162 | ... Append To List ${INVALID_SENSORS} ${sensor_name} |
| 163 | |
| 164 | |
| 165 | Check Sensor Status And Reading Via Sensor Info |
| 166 | [Documentation] Check Sensor Status And Reading Via Sensor Info. |
| 167 | [Arguments] ${sensor_info_list} ${reading_unit} |
| 168 | # Description of arguments: |
| 169 | # sensor_info_list A list of a specified sensor info return by a redfish |
| 170 | # request. |
| 171 | # reading_unit A string represents the reading value in sensor info |
| 172 | # return by a redfish request. It different between |
| 173 | # different sensor unit of sensor info. |
| 174 | |
| 175 | FOR ${sensor_info} IN @{sensor_info_list} |
| 176 | ${sensor}= Set Variable ${sensor_info['MemberId']} |
| 177 | ${condition_str}= Catenate |
| 178 | ... '${sensor_info['Status']['Health']}' != 'OK' |
| 179 | ... or '${sensor_info['Status']['State']}' != 'Enabled' |
| 180 | ... or ${sensor_info['${reading_unit}']} == ${null} |
| 181 | |
| 182 | Run Keyword If ${condition_str} |
| 183 | ... Append To List ${INVALID_SENSORS} ${sensor_info['MemberId']} |
| 184 | END |
| 185 | |
| 186 | |
| 187 | Check Sensors Present |
| 188 | [Documentation] Check that sensors are present as expected. |
| 189 | [Arguments] ${sensor_info_list} ${sensor_type} |
| 190 | # Description of arguments: |
| 191 | # sensor_info_list A list of a specified sensor info return by a redfish |
| 192 | # request. |
| 193 | # sensor_type A string represents the sensor category to be verified. |
| 194 | |
| 195 | # An example table of expected sensors: |
| 196 | # redfish_sensor_info_map = { |
| 197 | # ${OPENBMC_MODEL}:{ |
| 198 | # "Voltage":{ |
| 199 | # "Voltage0", |
| 200 | # ... |
| 201 | # }, |
| 202 | # "Temperature":{ |
| 203 | # "DIMM0", |
| 204 | # ... |
| 205 | # } |
| 206 | # "Fans":{ |
| 207 | # "Fan0", |
| 208 | # ... |
| 209 | # }... |
| 210 | # } |
| 211 | #} |
| 212 | |
| 213 | ${curr_sensor_name_list}= Get Sensors Name List From Redfish |
| 214 | ... ${sensor_info_list} |
| 215 | |
| 216 | ${expected_sensor_name_list}= Set Variable |
| 217 | ... ${redfish_sensor_info_map['${OPENBMC_MODEL}']['${sensor_type}']} |
| 218 | |
| 219 | FOR ${sensor_name} IN @{expected_sensor_name_list} |
| 220 | ${exist}= Evaluate '${sensor_name}' in ${curr_sensor_name_list} |
| 221 | Run Keyword If '${exist}' == '${False}' |
| 222 | ... Append To List ${INVALID_SENSORS} ${sensor_name} |
| 223 | END |