*** 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

*** Variables ***
${power_state_change}  10
${host_reboot_time}  360

*** Test Cases ***

IPMI Chassis Status On
    [Documentation]  This test case verifies system power on status
    ...               using IPMI Get Chassis status command.
    [Tags]  IPMI_Chassis_Status_On

    # Check the chassis status.
    Verify Host PowerOn Via IPMI
    ${resp}=  Run IPMI Standard Command  chassis power status
    Should Be Equal As Strings  '${resp}'  'Chassis Power is on'

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

    ${resp}=  Run IPMI Standard Command  raw ${IPMI_RAW_CMD['BIOS_POST_Code']['Get'][0]}
    Sleep  10

    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
    Sleep  ${power_state_change}
    Should Contain  ${resp}  Chassis Power Control: Cycle
    sleep  ${host_reboot_time}
    ${ipmi_state}=  Get Host State Via External IPMI
    Valid Value  ipmi_state  ['on']

    ${resp}=  Run IPMI Standard Command  raw ${IPMI_RAW_CMD['BIOS_POST_Code']['Get'][0]}
    Sleep  ${host_reboot_time}

    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
    Sleep  ${power_state_change}
    Should Contain  ${resp}  Chassis Power Control: Down/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]}

    # Turn host back on.
    IPMI Power On  stack_mode=skip  quiet=1
    Verify Host PowerOn Via IPMI
    ${resp}=  Run IPMI Standard Command  chassis power status
    Should Be Equal As Strings  '${resp}'  'Chassis Power is on'

*** Keywords ***

Verify Host PowerOn Via IPMI
    [Documentation]   Verify host power on operation using external IPMI command.
    [Tags]  Verify_Host_PowerOn_Via_IPMI

    IPMI Power On  stack_mode=skip  quiet=1
    ${ipmi_state}=  Get Host State Via External IPMI
    Valid Value  ipmi_state  ['on']


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}

