*** Settings ***

Documentation    Module to test IPMI Get BIOS POST Code Command.
Resource         ../lib/ipmi_client.robot
Resource         ../lib/boot_utils.robot
Library          ../lib/ipmi_utils.py
Variables        ../data/ipmi_raw_cmd_table.py

Suite Setup  IPMI Power On
Suite Teardown  IPMI Power On  stack_mode=skip  quiet=1

*** Test Cases ***
Test Get BIOS POST Code via IPMI Raw Command
    [Documentation]  Get BIOS POST Code via IPMI raw command.
    [Tags]  Test_Get_BIOS_POST_Code_via_IPMI_Raw_Command

    Wait Until Keyword Succeeds  10 min  1 sec  Check Host Is Pinging  ${OS_HOST}
    Wait Until Keyword Succeeds  1 min  1 sec  Check Chassis Power Status  on
    ${resp}=  Run IPMI Standard Command  raw ${IPMI_RAW_CMD['BIOS_POST_Code']['Get'][0]}
    Verify POST Code Response Length  ${resp}

Test Get BIOS POST Code via IPMI Raw Command After Power Cycle
    [Documentation]  Get BIOS POST Code via IPMI raw command after power cycle.
    [Tags]  Test_Get_BIOS_POST_Code_via_IPMI_Raw_Command_After_Power_Cycle

    ${resp}=  Run IPMI Standard Command  chassis power cycle
    Wait Until Keyword Succeeds  1 min  1 sec  Check Host Is Not Pinging  ${OS_HOST}
    Wait Until Keyword Succeeds  10 min  1 sec  Check Host Is Pinging  ${OS_HOST}

    ${resp}=  Run IPMI Standard Command  raw ${IPMI_RAW_CMD['BIOS_POST_Code']['Get'][0]}
    Verify POST Code Response Length  ${resp}

Test Get BIOS POST Code via IPMI Raw Command With Host Powered Off
    [Documentation]  Get BIOS POST Code via IPMI raw command after power off.
    [Tags]  Test_Get_BIOS_POST_Code_via_IPMI_Raw_Command_With_Host_Powered_Off

    ${resp}=  Run IPMI Standard Command  chassis power off
    Wait Until Keyword Succeeds  1 min  1 sec  Check Host Is Not Pinging  ${OS_HOST}
    Wait Until Keyword Succeeds  1 min  1 sec  Check Chassis Power Status  off

    ${resp}=  Run IPMI Standard Command  raw ${IPMI_RAW_CMD['BIOS_POST_Code']['Get'][0]}  fail_on_err=0
    Should Contain  ${resp}  ${IPMI_RAW_CMD['BIOS_POST_Code']['Get'][3]}

*** Keywords ***
Verify POST Code Response Length
    [Documentation]  Verify the BIOS POST Code response byte length.
    [Tags]  Verify_POST_Code_Response_Length
    [Arguments]  ${resp}

    # Description of argument(s):
    # resp                          The complete response bytes from
    #                               Get BIOS POST Code command returned
    #                               in one string.

    @{resp_bytes}=  Split String  ${resp}
    ${string_length}=  Get Length  ${resp_bytes}

    # Convert response byte length to integer.
    ${value}=  Get Slice From List  ${resp_bytes}   2   4
    Reverse List   ${value}
    ${byte_length_string}=  Evaluate   "".join(${value})
    ${byte_length_integer}=  Convert To Integer  ${byte_length_string}  16
    ${true_length}=  Evaluate  (${string_length} - 4)

    Should Be Equal  ${true_length}  ${byte_length_integer}

Check Chassis Power Status
    [Documentation]  Validate chassis power status.
    [Arguments]  ${expected_state}

    # Description of argument(s):
    # expected_state    on, off

    ${resp}=  Run IPMI Standard Command  chassis power status
    Should Contain  ${resp}  ${expected_state}

Check Host Is Pinging
    [Documentation]  Check given ip/hostname is pinging.
    [Arguments]  ${host_ip}

    # Description of argument(s):
    # host_ip      The host name or IP of the host to ping.

    ${ping_rsp}=  Host Ping  ${host_ip}
    # Should Not Contain  ${ping_rsp}  Destination Host Unreachable
    # ...  msg=${host_ip} is not pinging.
    Should Not Contain  ${ping_rsp}  100% packet loss
    ...  msg=${host_ip} is not pinging.

Check Host Is Not Pinging
    [Documentation]  Check given ip/hostname is not pinging.
    [Arguments]  ${host_ip}

    # Description of argument(s):
    # host_ip      The host name or IP of the host to ping.

    ${ping_rsp}=  Host Ping  ${host_ip}
    Should Contain  ${ping_rsp}  100% packet loss
    ...  msg=${host_ip} is pinging.

Host Ping
    [Documentation]  Ping the given host.
    [Arguments]  ${host_ip}

    # Description of argument(s):
    # host_ip      The host name or IP of the host to ping.

    ${cmd}=  Catenate  ping -c 4 ${host_ip}
    ${output}=  Run  ${cmd}

    [Return]  ${output}
