*** Settings *** Documentation This module will take whatever action is necessary ... to bring the BMC to a stable, standby state. For our ... purposes, a stable state is defined as: ... - BMC is communicating ... (pinging, sshing and REST commands working) ... - Power state is 0 (off) ... - BMC state is "Ready" ... - HOST state is "Off" ... - Boot policy is "ALWAYS_POWER_OFF" ... Power cycle system via PDU if specified ... Prune archived journal logs Resource ../lib/utils.robot Resource ../lib/pdu/pdu.robot Resource ../lib/state_manager.robot Resource ../lib/bmc_network_utils.robot Resource ../lib/bmc_cleanup.robot Resource ../lib/dump_utils.robot Resource ../lib/bmc_redfish_resource.robot Resource ../lib/bmc_redfish_utils.robot Library ../lib/gen_misc.py *** Variables *** ${HOST_SETTING} /org/openbmc/settings/host0 ${ERROR_REGEX} xyz.openbmc_project.Software.BMC.Updater.service: Failed with result 'core-dump' *** Test Cases *** Get To Stable State [Documentation] BMC cleanup drive to stable state ... 1. PDU powercycle if specified ... 1. Ping Test ... 2. SSH Connection session Test ... 3. REST Connection session Test ... 4. Reboot BMC if REST Test failed ... 5. Get BMC in Ready state if its not in this state ... 6. Get Host in Off state if its not in this state ... 7. Update restore policy ... 8. Verify and Update MAC address. [Tags] Get_To_Stable_State Run Keyword And Ignore Error Powercycle System Via PDU ${ping_status}= Run Keyword And Return Status ... Wait For Host To Ping ${OPENBMC_HOST} 2 mins # Check if the ping works using 1400 MTU. Run Keyword if ${ping_status} == ${True} MTU Ping Test Run Keyword if ${ping_status} == ${False} ... Fail ${OPENBMC_HOST} ping test failed. Open Connection And Log In host=${OPENBMC_HOST} Wait Until Keyword Succeeds ... 1 min 30 sec Initialize OpenBMC ${ready_status}= Run Keyword And Return Status Is BMC Ready Run Keyword If '${ready_status}' == '${False}' Put BMC State Ready ${host_off_status}= Run Keyword And Return Status Is Host Off Run Keyword If '${host_off_status}' == '${False}' Initiate Host PowerOff Prune Journal Log Run Keyword And Ignore Error Set BMC Power Policy ${ALWAYS_POWER_OFF} # TODO: Enable MAC AES check latter. # Reference : openbmc/openbmc-test-automation#998 #Run Keyword If '${MAC_ADDRESS}' != '${EMPTY}' #... Check And Reset MAC # TODO: Add new UBI File system cleanup. # Reference : openbmc/openbmc-test-automation#998 #${rc}= Execute Command find ${CLEANUP_DIR_PATH} #... return_stdout=False return_rc=True #Run Keyword If '${CLEANUP_DIR_PATH}' != '${EMPTY}' and ${rc} == 0 #... Cleanup Dir Run Keyword And Ignore Error Delete All Error Logs Run Keyword And Ignore Error Redfish Purge Event Log Run Keyword And Ignore Error Delete All Dumps Run Keyword And Ignore Error Delete All Redfish Sessions Check For Current Boot Application Failures *** Keywords *** BMC Online Test [Documentation] BMC ping, SSH, REST connection Test ${l_status}= Run Keyword and Return Status ... Verify Ping and REST Authentication Run Keyword If '${l_status}' == '${False}' ... Fail msg=System not in ideal state to continue [ERROR] Update Policy Setting [Documentation] Update the given restore policy [Arguments] ${policy} ${valueDict}= create dictionary data=${policy} Write Attribute ${HOST_SETTING} power_policy data=${valueDict} ${currentPolicy}= Read Attribute ${HOST_SETTING} power_policy Should Be Equal ${currentPolicy} ${policy} Trigger Warm Reset via Reboot [Documentation] Execute reboot command on the remote BMC and ... returns immediately. This keyword "Start Command" ... returns nothing and does not wait for the command ... execution to be finished. Open Connection And Log In Start Command /sbin/reboot Powercycle System Via PDU [Documentation] AC cycle the system via PDU. Validate Parameters PDU Power Cycle Check If BMC is Up 5 min 10 sec Check For Current Boot Application Failures [Documentation] Parse the journal log and check for failures. [Arguments] ${error_regex}=${ERROR_REGEX} ${error_regex}= Escape Bash Quotes ${error_regex} ${journal_log} ${stderr} ${rc}= BMC Execute Command ... journalctl -b --no-pager | egrep '${error_regex}' ignore_err=1 Should Be Empty ${journal_log} Validate Parameters [Documentation] Validate PDU parameters. Should Not Be Empty ${PDU_IP} Should Not Be Empty ${PDU_TYPE} Should Not Be Empty ${PDU_SLOT_NO} Should Not Be Empty ${PDU_USERNAME} Should Not Be Empty ${PDU_PASSWORD} MTU Ping Test [Documentation] Ping test using MTU. [Arguments] ${mtu}=${1400} # Description of argument(s): # mtu The maximum transmission unit (MTU) of a network interface. ${rc} ${output}= Run And Return RC And Output ... ping -M do -s ${mtu} -c 10 ${OPENBMC_HOST} Should Be Equal As Integers ${rc} 0 Should Not Contain ${output} 100% packet loss