*** Settings ***
Documentation  This file is resourced by obmc_boot_test.py to set initial
...            variable values, etc.

Resource  ../lib/openbmc_ffdc.robot
Library   ../lib/state.py

Library   ../lib/obmc_boot_test.py
Library   Collections

*** Variables ***
# Initialize program parameters variables.
# Create parm_list containing all of our program parameters.  This is used by
# 'Rqprint Pgm Header'
@{parm_list}                  openbmc_nickname  ssh_port  https_port  openbmc_host  openbmc_username
...  openbmc_password  rest_username  rest_password  ipmi_username
...  ipmi_password  os_host  os_username  os_password  pdu_host  pdu_username
...  pdu_password  pdu_slot_no  openbmc_serial_host  openbmc_serial_port
...  stack_mode  boot_stack  boot_list  max_num_tests  plug_in_dir_paths
...  status_file_path  openbmc_model  boot_pass  boot_fail  ffdc_dir_path_style
...  ffdc_check  ffdc_only  ffdc_function_list  state_change_timeout
...  power_on_timeout  power_off_timeout  boot_fail_threshold  delete_errlogs
...  call_post_stack_plug  do_pre_boot_plug_in_setup  test_mode  quiet  debug

# Initialize each program parameter.
${openbmc_host}               ${EMPTY}
${ssh_port}                   22
${https_port}                 443
${openbmc_nickname}           ${openbmc_host}
${openbmc_username}           root
${openbmc_password}           0penBmc
${rest_username}              ${openbmc_username}
${rest_password}              ${openbmc_password}
${ipmi_username}              ${openbmc_username}
${ipmi_password}              ${openbmc_password}
${os_host}                    ${EMPTY}
${os_username}                root
${os_password}                P@ssw0rd
${pdu_host}                   ${EMPTY}
${pdu_username}               admin
${pdu_password}               admin
${pdu_slot_no}                ${EMPTY}
${openbmc_serial_host}        ${EMPTY}
${openbmc_serial_port}        ${EMPTY}
${stack_mode}                 normal
${boot_stack}                 ${EMPTY}
${boot_list}                  ${EMPTY}
${max_num_tests}              0
${plug_in_dir_paths}          ${EMPTY}
${status_file_path}           ${EMPTY}
${openbmc_model}              ${EMPTY}
# The reason boot_pass and boot_fail are parameters is that it is possible to
# be called by a program that has already done some tests.  This allows us to
# keep the grand total.
${boot_pass}                  ${0}
${boot_fail}                  ${0}
${ffdc_dir_path_style}        ${EMPTY}
${ffdc_check}                 ${EMPTY}
${ffdc_only}                  ${0}
${ffdc_function_list}         ${EMPTY}
${state_change_timeout}       3 mins
${power_on_timeout}           14 mins
${power_off_timeout}          2 mins
# If the number of boot failures, exceeds boot_fail_threshold, this program
# returns non-zero.
${boot_fail_threshold}        ${0}
${delete_errlogs}             ${0}
# This variable indicates whether post_stack plug-in processing should be done.
${call_post_stack_plug}       ${1}
# do_pre_boot_plug_in_setup is only heeded when -v ffdc_only:1.  Callers may
# choose whether to run pre_boot_plug_in_setup which clears existing FFDC file
# lists and sets new ffdc_prefix value.
${do_pre_boot_plug_in_setup}  ${1}
${test_mode}                  0
${quiet}                      0
${debug}                      0

# Flag variables.
# test_really_running is needed by DB_Logging plug-in.
${test_really_running}      ${1}


*** Keywords ***
OBMC Boot Test
    [Documentation]  Run the OBMC boot test.
    [Teardown]  OBMC Boot Test Teardown
    [Arguments]  ${pos_arg1}=${EMPTY}  &{arguments}

    # Note: If I knew how to specify a keyword teardown in python, I would
    # rename the "OBMC Boot Test Py" python function to "OBMC Boot Test" and
    # do away with this robot keyword.

    Run Keyword If  '${pos_arg1}' != '${EMPTY}'
    ...  Set To Dictionary  ${arguments}  loc_boot_stack=${pos_arg1}

    OBMC Boot Test Py  &{arguments}
