*** Settings *** Documentation Test Redfish sensor monitoring. Resource ../../lib/resource.robot Resource ../../lib/bmc_redfish_resource.robot Resource ../../lib/bmc_redfish_utils.robot Library ../../lib/gen_robot_print.py Test Setup Test Setup Execution Test Teardown Test Teardown Execution *** Variables *** @{INVALID_SENSORS} ${OPENBMC_CONN_METHOD} ssh ${IPMI_COMMAND} Inband ** Test Cases ** Verify Sensor Monitoring [Documentation] Verify the redfish sensor monitoring according to the BMC ... expected SDR table. [Tags] Verify_Sensor_Monitoring # Check whether the expected sensors are present in the Redfish request. # Check whether the sensors's 'Health' is 'OK' and the 'State' is 'Enabled'. # Check sensor reading is not equal to null. ${resp}= Redfish.Get /redfish/v1/Chassis/${CHASSIS_ID} ... valid_status_codes=[${HTTP_OK}] Should Be Equal As Strings ${resp.dict['Sensors']['@odata.id']} ... /redfish/v1/Chassis/${CHASSIS_ID}/Sensors Should Be Equal As Strings ${resp.dict['Thermal']['@odata.id']} ... /redfish/v1/Chassis/${CHASSIS_ID}/Thermal Should Be Equal As Strings ${resp.dict['Power']['@odata.id']} ... /redfish/v1/Chassis/${CHASSIS_ID}/Power # Check sensors in /redfish/v1/Chassis/{ChassisId}/Power ${resp}= Redfish.Get /redfish/v1/Chassis/${CHASSIS_ID}/Power ... valid_status_codes=[${HTTP_OK}] Check Sensors Present ${resp.dict['Voltages']} Voltage Check Sensor Status And Reading Via Sensor Info ... ${resp.dict['Voltages']} ReadingVolts # Check sensors in /redfish/v1/Chassis/{ChassisId}/Thermal ${resp}= Redfish.Get /redfish/v1/Chassis/${CHASSIS_ID}/Thermal ... valid_status_codes=[${HTTP_OK}] Check Sensors Present ${resp.dict['Temperatures']} Temperature Check Sensors Present ${resp.dict['Fans']} Fans Check Sensor Status And Reading Via Sensor Info ... ${resp.dict['Temperatures']} ReadingCelsius Check Sensor Status And Reading Via Sensor Info ... ${resp.dict['Fans']} Reading # Check sensors in # /redfish/v1/Chassis/{ChassisId}/Sensors/{Sensor Name} ${expected_current_power_sensor_name_list}= Set Variable ... ${redfish_sensor_info_map['${OPENBMC_MODEL}']['Current_Power']} FOR ${sensor_name} IN @{expected_current_power_sensor_name_list} Check Sensor Status And Reading Via Sensor Name ${sensor_name} END Rprint Vars INVALID_SENSORS ${error_msg}= Evaluate ", ".join(${INVALID_SENSORS}) Should Be Empty ${INVALID_SENSORS} ... msg=Test fail, invalid sensors are ${error_msg}. *** Keywords *** Test Teardown Execution [Documentation] Do the post test teardown. Run Keyword And Ignore Error Redfish.Logout Test Setup Execution [Documentation] Do the test setup. Required Parameters For Sensor Monitoring Redfish.Login Required Parameters For Sensor Monitoring [Documentation] Check if required parameters are provided via command line. Should Not Be Empty ${OS_HOST} Should Not Be Empty ${OS_USERNAME} Should Not Be Empty ${OS_PASSWORD} Run Keyword If '${OPENBMC_CONN_METHOD}' == 'ssh' ... Should Not Be Empty ${OPENBMC_HOST} ... ELSE IF '${OPENBMC_CONN_METHOD}' == 'telnet' ... Should Not Be Empty ${OPENBMC_SERIAL_HOST} Should Not Be Empty ${OPENBMC_MODEL} Get Sensors Name List From Redfish [Documentation] Get sensors name list from redfish. [Arguments] ${sensor_info_list} # Description of arguments: # sensor_info_list A list of a specified sensor info return by a redfish # request. # An example of a sensor redfish request: # /redfish/v1/Chassis/${CHASSIS_ID}/Power # { # ... # "Voltages": [ # { # "@odata.id": "/redfish/v1/Chassis/${CHASSIS_ID}/Power#/Voltages/0", # "@odata.type": "#Power.v1_0_0.Voltage", # "LowerThresholdCritical": 1.14, # "LowerThresholdNonCritical": 1.14, # "MaxReadingRange": 2.0, # "MemberId": "Output_Voltage", # "MinReadingRange": 0.0, # "Name": "Output Voltage", # "ReadingVolts": 1.176, # "Status": { # "Health": "OK", # "State": "Enabled" # }, # "UpperThresholdCritical": 1.21, # "UpperThresholdNonCritical": 1.21 # } # ... # } @{sensor_name_list}= Create List FOR ${sensor_info} IN @{sensor_info_list} Append To List ${sensor_name_list} ${sensor_info['MemberId']} END [Return] ${sensor_name_list} Check Sensor Status And Reading Via Sensor Name [Documentation] Check Sensor Status And Reading Via Sensor Name. [Arguments] ${sensor_name} # Description of arguments: # sensor_name Sensor that should be present. ${resp}= Redfish.Get ... /redfish/v1/Chassis/${CHASSIS_ID}/Sensors/${sensor_name} ... valid_status_codes=[${HTTP_OK}, ${HTTP_NOT_FOUND}] Run Keyword And Return If '${resp.status}' == '${HTTP_NOT_FOUND}' ... Append To List ${INVALID_SENSORS} ${sensor_name} ${condition_str}= Catenate ... '${resp.dict['Status']['Health']}' != 'OK' ... or '${resp.dict['Status']['State']}' != 'Enabled' ... or ${resp.dict['Reading']} == ${null} Run Keyword If ${condition_str} ... Append To List ${INVALID_SENSORS} ${sensor_name} Check Sensor Status And Reading Via Sensor Info [Documentation] Check Sensor Status And Reading Via Sensor Info. [Arguments] ${sensor_info_list} ${reading_unit} # Description of arguments: # sensor_info_list A list of a specified sensor info return by a redfish # request. # reading_unit A string represents the reading value in sensor info # return by a redfish request. It different between # different sensor unit of sensor info. FOR ${sensor_info} IN @{sensor_info_list} ${sensor}= Set Variable ${sensor_info['MemberId']} ${condition_str}= Catenate ... '${sensor_info['Status']['Health']}' != 'OK' ... or '${sensor_info['Status']['State']}' != 'Enabled' ... or ${sensor_info['${reading_unit}']} == ${null} Run Keyword If ${condition_str} ... Append To List ${INVALID_SENSORS} ${sensor_info['MemberId']} END Check Sensors Present [Documentation] Check that sensors are present as expected. [Arguments] ${sensor_info_list} ${sensor_type} # Description of arguments: # sensor_info_list A list of a specified sensor info return by a redfish # request. # sensor_type A string represents the sensor category to be verified. # An example table of expected sensors: # redfish_sensor_info_map = { # ${OPENBMC_MODEL}:{ # "Voltage":{ # "Voltage0", # ... # }, # "Temperature":{ # "DIMM0", # ... # } # "Fans":{ # "Fan0", # ... # }... # } #} ${curr_sensor_name_list}= Get Sensors Name List From Redfish ... ${sensor_info_list} ${expected_sensor_name_list}= Set Variable ... ${redfish_sensor_info_map['${OPENBMC_MODEL}']['${sensor_type}']} FOR ${sensor_name} IN @{expected_sensor_name_list} ${exist}= Evaluate '${sensor_name}' in ${curr_sensor_name_list} Run Keyword If '${exist}' == '${False}' ... Append To List ${INVALID_SENSORS} ${sensor_name} END