*** 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             ../syslib/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
