*** Settings ***

Documentation  Operational check of fans with OS booted.

# Test Parameters:
# OPENBMC_HOST       The BMC host name or IP address.
# OPENBMC_USERNAME   The userID to login to the BMC as.
# OPENBMC_PASSWORD   The password for OPENBMC_USERNAME.
#
# Approximate run time:   18 minutes.

Resource        ../syslib/utils_os.robot
Resource        ../lib/logging_utils.robot
Resource        ../lib/utils.robot
Resource        ../lib/fan_utils.robot
Library         ../syslib/utils_keywords.py
Library         OperatingSystem

Suite Setup     Suite Setup Execution
Test Teardown   Test Teardown Execution


*** Test Cases ***


Check Number Of Fans With Power On
    [Documentation]  Verify system has the minimum number of fans.
    [Tags]  Check_Number_Of_Fans_With_Power_On

    # Determine if system is water cooled.
    ${water_cooled}=  Is Water Cooled
    Rprint Vars  water_cooled

    Verify Minimum Number Of Fans With Cooling Type  ${number_of_fans}
    ...  ${water_cooled}


Check Number Of Fan Monitors With Power On
    [Documentation]  Verify monitors are present when power on.
    [Tags]  Check_Number_Of_Fan_Monitors_With_Power_On

    Verify Fan Monitors With State  On


Check Fans Running At Target Speed
    [Documentation]  Verify fans are running at or near target speed.
    [Tags]  Check_Fans_Running_At_Target_Speed

    # Set the speed tolerance criteria.
    # A tolerance value of .30 means that the fan's speed should be
    # within 30% of its set target speed.   Fans may be accelerating
    # or decelerating to meet a new target, so allow .20 extra.
    ${tolerance}=  Set Variable  .50
    Rpvars  tolerance

    Verify Fan Speed  ${tolerance}  ${fan_names}


Check Fan Manual Control
    [Documentation]  Check direct control of fans.
    [Tags]  Check_Fan_Manual_Control

    # The maximum target speed.
    ${max_fan_target_setting}=  Set Variable  ${10500}

    # Speed criteria for passing, which is 85% of max_fan_target_setting.
    ${min_speed}=  Set Variable  ${8925}

    # Time allowed for the fan daemon to take control and then return
    # the fans to normal speed.
    ${minutes_to_stabilize}=  Set Variable  4

    Verify Direct Fan Control
    ...  ${max_fan_target_setting}  ${min_speed}  ${minutes_to_stabilize}
    ...  ${number_of_fans}  ${fan_names}


Check Fan Speed Increase When One Disabled
    [Documentation]  Verify that the speed of working fans increase when
    ...  one fan is disabled.
    [Tags]  Check_Fan_Speed_Increase_When_One_Disabled
    #  A non-functional fan should cause an error log and
    #  an enclosure LED will light.  The other fans should speed up.

    Verify Fan Speed Increase  ${fan_names}


Check System Shutdown Due To Fans
    [Documentation]  Shut down when not enough fans.
    [Tags]  Check_System_Shutdown_Due_To_Fans

    # Previous test may have shut down the OS.
    REST Power On  stack_mode=skip

    Verify System Shutdown Due To Fans  ${fan_names}


*** Keywords ***


Suite Setup Execution
    [Documentation]  Do the pre-test setup.

    REST Power On  stack_mode=skip

    ${number_of_fans}  ${fan_names}=  Get Fan Count And Names
    Printn
    Rprint Vars  number_of_fans  fan_names
    Set Suite Variable  ${fan_names}  children=true
    Set Suite Variable  ${number_of_fans}  children=true

    Reset Fans  ${fan_names}
    Run Key U  Sleep \ 15s
    Delete All Error Logs
    Set System LED State  front_fault  Off
    Set System LED State  rear_fault  Off


Test Teardown Execution
    [Documentation]  Do the post-test teardown.

    FFDC On Test Case Fail
    Reset Fans  ${fan_names}
    Run Key U  Sleep \ 15s
    Delete All Error Logs
    Set System LED State  front_fault  Off
    Set System LED State  rear_fault  Off
