*** Settings ***

Documentation  Compare processor speed in turbo and non-turbo modes.

# Test Parameters:
# OPENBMC_HOST   The BMC host name or IP address.
# OS_HOST        The OS host name or IP Address.
# OS_USERNAME    The OS login userid (usually root).
# OS_PASSWORD    The password for the OS login.

Resource        ../syslib/utils_os.robot
Resource        ../lib/boot_utils.robot
Library         ../syslib/utils_keywords.py
Variables       ../data/variables.py
Library         ../lib/bmc_ssh_utils.py
Resource        ../lib/connection_client.robot
Resource        ../lib/resource.txt
Resource        ../lib/rest_client.robot
Resource        ../lib/utils.robot


Test Setup      Pre Test Case Execution
Test Teardown   Post Test Case Execution


*** Test Cases ***

Turbo And Non-Turbo Processor Speed Test
    [Documentation]  Compare processor turbo and non-turbo speeds.
    [Tags]  Turbo_And_Non-Turbo_Processor_Speed_Test

    Set Turbo Setting Via REST  True
    ${mode}=  Read Turbo Setting Via REST
    Should Be Equal  ${mode}  True
    ...  msg=Issued call to set Turbo mode but it was not set.

    # The OS governor determines the maximum processor speed at boot-up time.
    REST Power On  stack_mode=skip
    ${proc_speed_turbo}=  Get Processor Max Speed Setting

    Smart Power Off

    Set Turbo Setting Via REST  False
    ${mode}=  Read Turbo Setting Via REST
    Should Be Equal  ${mode}  False
    ...  msg=Issued call to disable Turbo mode but it was not disabled.

    REST Power On  stack_mode=skip
    ${proc_speed_non_turbo}=  Get Processor Max Speed Setting

    Rprintn
    Rpvars  proc_speed_turbo  proc_speed_non_turbo

    ${err_msg}=  Catenate  Reported turbo processor speed should be
    ...  greater than non-turbo speed.
    Should Be True  ${proc_speed_turbo} > ${proc_speed_non_turbo}
    ...  msg=${err_msg}


*** Keywords ***

Get Processor Max Speed Setting
    [Documentation]  Get processor maximum speed setting from the OS.
    # - On the OS run: ppc64_cpu --frequency
    # - Return the maximum frequency value reported.
    # The command ppc64_cpu is provided in both Ubuntu and RHEL on Power.

    ${command}=  Set Variable
    ...  ppc64_cpu --frequency | grep max | cut -f 2 | cut -d ' ' -f 1
    # The ppc64_cpu --frequency command returns min, max, and average
    # cpu frequencies. For example,
    # min:    2.500 GHz (cpu 143)
    # max:    2.700 GHz (cpu 1)
    # avg:    2.600 GHz
    # The ${command} selects the max: line, selects only the
    # 2.700 GHz (cpu 1) part, then selects the 2.700 number.

    # Get the maximum processor frequency reported.
    ${output}  ${stderr}  ${rc}=  OS Execute Command
    ...  ${command}  print_out=${1}

    ${frequency}=  Convert To Number  ${output}
    [Return]  ${frequency}


Pre Test Case Execution
    [Documentation]  Do the pre test setup.
    # Save the initial system turbo setting.
    # Start (setup) console logging.

    ${initial_turbo_setting}=  Read Turbo Setting Via REST
    Set Suite Variable  ${initial_turbo_setting}  children=true
    Start SOL Console Logging


Post Test Case Execution
    [Documentation]  Do the post test teardown.
    # - Restore original turbo setting on the system.
    # - Capture FFDC on test failure.
    # - Power off the OS and close all open SSH connections.

    Set Turbo Setting Via REST  ${initial_turbo_setting}

    FFDC On Test Case Fail
    Smart Power Off
    Close All Connections
