*** 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  boot_table_path  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}
# The path to the boot_table.json file which defines the boot requirements.  This defaults to the value of
# the BOOT_TABLE_PATH environment variable or to data/boot_table.json.
${boot_table_path}            ${None}
${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}

    Run Keyword And Ignore Error  Redfish.Login

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