*** Settings ***
Documentation  Does random repeated IPLs based on the state of the machine. The
...  number of repetitions is designated by ${IPL_TOTAL}. Keyword names that are
...  listed in @{AVAIL_IPLS} become the selection of possible IPLs for the test.

Resource  ../lib/boot/boot_resource_master.robot
Resource  ../lib/dvt/obmc_call_points.robot
Resource  ../lib/dvt/obmc_driver_vars.txt
Resource  ../lib/list_utils.robot

*** Test Cases ***
Repeated Testing
    [Documentation]  Performs random, repeated IPLs.
    [Tags]  Repeated_Testing

    # Call the Main keyword to prevent any dots from appearing in the console
    # due to top level keywords.
    Main

*** Keywords ***
Main
    Log to Console  ${SUITE NAME}

    Do Test Setup
    Call Point Setup

    Log  Doing ${IPL_TOTAL} IPLs  console=True

    :FOR  ${IPL_COUNT}  IN RANGE  ${IPL_TOTAL}
    \  Log  ${\n}***Starting IPL ${IPL_COUNT+1} of ${IPL_TOTAL}***  console=True
    \  Validate Or Open Connection  alias=${master_alias}
    \  ${cur_state}=  Get Power State
    \  ${next_IPL}=  Select IPL  ${cur_state}
    \  Call Point Pre Boot
    \  Log  We are doing a ${next_IPL}${\n}  console=True
    \  Update Last Ten  ${next_IPL}
    \  Run Keyword and Continue On Failure  Run IPL  ${next_IPL}
    \  Call Point Post Boot
    \  Run Keyword If  '${IPL_STATUS}' == 'PASS'
    ...  Log  IPL_SUCCESS: "${next_IPL}" succeeded.  console=True
    ...  ELSE  Log  IPL_FAILED: ${next_IPL} failed.  console=True
    \  Update Run Table Values  ${next_IPL}
    \  Log  FFDC Dump requested!  console=True
    \  Log  ***Beginning dump of FFDC***  console=True
    \  Call Point FFDC
    \  Log Defect Information
    \  Log Last Ten IPLs
    \  Log FFDC Files
    \  Log  ***Finished dumping of FFDC***  console=True
    \  Call Point Stop Check
    \  Log FFDC Summary
    \  Log Run Table
    \  Log  ${\n}***Finished IPL ${IPL_COUNT+1} of ${IPL_TOTAL}***  console=True

Do Test Setup
    [Documentation]  Do any setup that needs to be done before running a series
    ...  of IPLs.

    Should Not Be Empty  ${AVAIL_IPLS}

    Setup Run Table
    Log  ***Start of status file for ${OPENBMC_HOST}***  console=True

Setup Run Table
    [Documentation]  For each available IPL, create a variable that stores the
    ...  number of passes and fails for each IPL.

    Log to Console  Setting up run table.

    :FOR  ${ipl}  IN  @{AVAIL_IPLS}
    \  Set Global Variable  ${${ipl}_PASS}  ${0}
    \  Set Global Variable  ${${ipl}_FAIL}  ${0}

Select IPL
    [Documentation]  Contains all of the logic for which IPLs can be chosen
    ...  given the inputted state. Returns the chosen IPL.
    [Arguments]  ${cur_state}

    # cur_state      The power state of the machine, either zero or one.

    ${ipl}=  Run Keyword If  ${cur_state} == ${0}  Select Power On
    ...  ELSE  Run Keyword If  ${cur_state} == ${1}  Select Power Off
    ...  ELSE  Run Keywords  Log to Console
    ...  **ERROR** BMC not in state to power on or off: "${cur_state}"  AND
    ...  Fatal Error

    [return]  ${ipl}

Select Power On
    [Documentation]  Randomly chooses an IPL from the list of Power On IPLs.

    @{power_on_choices}=  Intersect Lists  ${VALID_POWER_ON}  ${AVAIL_IPLS}

    ${length}=  Get Length  ${power_on_choices}

    # Currently selects the first IPL in the list of options, rather than
    # selecting randomly.
    ${chosen}=  Set Variable  @{power_on_choices}[0]

    [return]  ${chosen}

Select Power Off
    [Documentation]  Randomly chooses an IPL from the list of Power Off IPLs.

    @{power_off_choices}=  Intersect Lists  ${VALID_POWER_OFF}  ${AVAIL_IPLS}

    ${length}=  Get Length  ${power_off_choices}

    # Currently selects the first IPL in the list of options, rather than
    # selecting randomly.
    ${chosen}=  Set Variable  @{power_off_choices}[0]

    [return]  ${chosen}

Run IPL
    [Documentation]  Runs the selected IPL and marks the status when complete.
    [Arguments]  ${ipl_keyword}
    [Teardown]  Set Global Variable  ${IPL_STATUS}  ${KEYWORD STATUS}

    # ipl_keyword      The name of the IPL to run, which corresponds to the
    #                  keyword to run. (i.e "BMC Power On")

    Run Keyword  ${ipl_keyword}

Log Defect Information
    [Documentation]  Logs information needed for a defect. This information
    ...  can also be found within the FFDC gathered.

    Log  Copy this data to the defect:  console=True

Log Last Ten IPLs
    [Documentation]  Logs the last ten IPLs that were performed with their
    ...  starting time stamp.

    Log  ${\n}----------------------------------${\n}Last 10 IPLs${\n}
    ...  console=True
    :FOR  ${ipl}  IN  @{LAST_TEN}
    \  Log  ${ipl}  console=True
    Log  ----------------------------------${\n}  console=True

Log FFDC Files
    [Documentation]  Logs the files outputted during FFDC gathering.
    Log  This is where the list of FFDC files would be.  console=True

Log FFDC Summary
    [Documentation]  Logs finding from within the FFDC files gathered.
    Log  This is where the FFDC summary would go.  console=True

Log Run Table
    [Documentation]  Logs the table of IPLs that have passed and failed based on
    ...  the available IPLs, as well as the total passes and failures.

    Log  ${\n}IPL type${space*14}Pass${space*3}Fail  console=True
    Log  ==================================  console=True
    :FOR  ${ipl}  IN  @{AVAIL_IPLS}
    \  ${length}=  Get Length  ${ipl}
    \  ${space_num}=  Set Variable  ${24-${length}}
    \  Log  ${ipl}${space*${space_num}}${${ipl}_PASS}${space*5}${${ipl}_FAIL}
    ...  console=True
    Log  ==================================  console=True
    Log  Totals:${space*17}${IPL_PASSED}${space*5}${IPL_FAILED}${\n}
    ...  console=True

Update Run Table Values
    [Documentation]  Updates the table of IPLs that have passed and failed. See
    ...  the "Log Run Table" keyword for more information.
    [Arguments]  ${last_ipl}

    # last_ipl      The name of the last IPL that ran (i.e "BMC Power On").

    ${cur_value}=  Get Variable Value  ${${last_ipl}_${IPL_STATUS}}
    Set Global Variable  ${${last_ipl}_${IPL_STATUS}}  ${cur_value+1}
    ${total_value}=  Run Keyword If  '${IPL_STATUS}' == 'PASS'
    ...              Get Variable Value  ${IPL_PASSED}
    ...              ELSE  Get Variable Value  ${IPL_FAILED}
    Run Keyword If  '${IPL_STATUS}' == 'PASS'
    ...             Set Global Variable  ${IPL_PASSED}  ${total_value+1}
    ...             ELSE  Set Global Variable  ${IPL_FAILED}  ${total_value+1}

Update Last Ten
    [Documentation]  Updates the list of last ten IPLs
    [Arguments]  ${last_ipl}

    # last_ipl      The name of the last IPL that ran (i.e. "BMC Power On")

    ${time}=  Get Time
    Append to List  ${LAST_TEN}  ${time} - Doing "${last_ipl}"
