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

    # 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}"
