| *** Settings *** | 
 | Documentation       BMC server health, collect sensors. | 
 |  | 
 | # Test Parameters: | 
 | # OPENBMC_HOST      The BMC host name or IP address. | 
 |  | 
 | Resource            ../../lib/bmc_redfish_resource.robot | 
 | Resource            ../../lib/openbmc_ffdc.robot | 
 | Library             Collections | 
 | Library             ../lib/os_utils_keywords.py | 
 |  | 
 | Suite Setup         Suite Setup Execution | 
 | Suite Teardown      Suite Teardown Execution | 
 | Test Setup          Printn | 
 |  | 
 | *** Variables *** | 
 | ${QUIET}                     ${1} | 
 | ${sensors_values_rest}       Rest sensors collection excluded | 
 | ${sensors_values_redfish}    Redfish sensors collection excluded | 
 | ${sensors_flagged_rest}      Rest sensors collection excluded | 
 | ${sensors_flagged_redfish}   Redfish sensors collection excluded | 
 |  | 
 |  | 
 | *** Test Cases *** | 
 |  | 
 | Rest Collect Sensors | 
 |     [Documentation]  Collect the sensors values using the OpenBMC Rest API. | 
 |     [Tags]  Rest_Collect_Sensors  rest | 
 |     [Teardown]  FFDC On Test Case Fail | 
 |  | 
 |     ${sensors}=  OpenBMC Get Request  ${SENSORS_URI}enumerate | 
 |     ${sensors}=  Evaluate  $sensors.json()['data'] | 
 |     ${sensors_collected_via_rest}=  gen_robot_print.Sprint Vars  sensors | 
 |     Log To Console  ${sensors_collected_via_rest} | 
 |     ${fans}=  Filter Struct  ${sensors}  [('Unit', '\.RPMS$')]  regex=1 | 
 |     ${no_fans}=  Filter Struct  ${sensors}  [('WarningAlarmHigh', None),('WarningAlarmLow', None)] | 
 |     ...  invert=${True} | 
 |     Log  sensor values raw:${\n}${sensors}${\n}sensors no fans:${\n}${no_fans}${\n}fans:${\n}${fans} | 
 |     ...  level=DEBUG | 
 |  | 
 |     ${fans_flagged}=  Filter Struct  ${fans} | 
 |     ...  [('CriticalAlarmHigh', False),('CriticalAlarmLow', False)]  invert=${True} | 
 |     ${filter_str}=  Catenate  [('CriticalAlarmHigh', False),('CriticalAlarmLow', False), | 
 |     ...  ('WarningAlarmHigh', False),('WarningAlarmLow', False)] | 
 |     ${other_sensors_flagged}=  Filter Struct  ${no_fans}  ${filter_str}  invert=${True} | 
 |     ${sensors_flagged_rest}=  gen_robot_print.Sprint Vars  fans_flagged  other_sensors_flagged | 
 |     Set Suite Variable  ${sensors_flagged_rest} | 
 |  | 
 |  | 
 | Redfish Collect Sensors | 
 |     [Documentation]  Collect the sensor values using Redfish. | 
 |     [Tags]  Redfish_Collect_Sensors  redfish | 
 |     [Setup]  Redfish.Login | 
 |     [Teardown]  Redfish Test Teardown Execution | 
 |  | 
 |     ${redfish_chassis_power}=  Redfish_Utils.Enumerate Request  ${REDFISH_CHASSIS_POWER_URI}  ${0} | 
 |     ${redfish_chassis_thermal}=  Redfish_Utils.Enumerate Request  ${REDFISH_CHASSIS_THERMAL_URI}  ${0} | 
 |     ${redfish_chassis_sensors}=  Redfish_Utils.Enumerate Request  ${REDFISH_CHASSIS_SENSORS_URI}  ${0} | 
 |     ${sensors_values_redfish}=  gen_robot_print.Sprint Vars | 
 |     ...  redfish_chassis_power  redfish_chassis_thermal  redfish_chassis_sensors | 
 |     Set Suite Variable  ${sensors_values_redfish} | 
 |     Log To Console  ${sensors_values_redfish} | 
 |  | 
 |     ${health_check_filter_dict}=  Create Dictionary  Health=OK | 
 |     ${merged_dicts}=  Evaluate  {**$redfish_chassis_power, **$redfish_chassis_thermal} | 
 |     Log  ${merged_dicts}  level=DEBUG | 
 |     ${sensors_flagged_redfish}=  Filter Struct  ${merged_dicts}  ${health_check_filter_dict}  invert=${TRUE} | 
 |     ${sensors_flagged_redfish}=  gen_robot_print.Sprint Vars  sensors_flagged_redfish | 
 |     Set Suite Variable  ${sensors_flagged_redfish} | 
 |  | 
 |  | 
 | *** Keywords *** | 
 |  | 
 | Suite Setup Execution | 
 |     [Documentation]  Do suite setup tasks. | 
 |  | 
 |     Set Log Level  DEBUG | 
 |     REST Power On  stack_mode=skip | 
 |  | 
 |  | 
 | Suite Teardown Execution | 
 |     [Documentation]  Do suite teardown tasks. Log sensor values collected. | 
 |  | 
 |     Log Many  ${sensors_values_rest}  ${sensors_values_redfish} | 
 |     Log  Sensors detected out of bounds via Rest:${\n}${sensors_flagged_rest}  console=true | 
 |     Log  Sensors detected out of bounds via Redfish:${\n}${sensors_flagged_redfish}  console=true | 
 |  | 
 |  | 
 | Redfish Test Teardown Execution | 
 |     [Documentation]  Do the post test teardown for redfish. | 
 |  | 
 |     Redfish.Logout | 
 |     FFDC On Test Case Fail |