blob: bea0a572d779bc14f224779249048c62b6362e63 [file] [log] [blame]
*** 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