| *** 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 |
| |
| # Force the test to timedout to prevent test hanging. |
| Test Timeout 10 minutes |
| |
| |
| *** 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} |
| |
| Run Keyword If ${REDFISH_SUPPORTED} |
| ... Redfish Clean Up |
| ... ELSE |
| ... REST Clean Up |
| |
| |
| Prune Journal Log |
| Check For Current Boot Application Failures |
| |
| *** Keywords *** |
| |
| |
| REST Clean Up |
| [Documentation] Check states, reboot if needed and poweroff. |
| |
| 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 |
| ... ELSE |
| ... REST Power Off stack_mode=skip |
| |
| Run Keyword And Ignore Error Set BMC Power Policy ${ALWAYS_POWER_OFF} |
| Run Keyword And Ignore Error Delete All Error Logs |
| Run Keyword And Ignore Error Delete All Dumps |
| |
| |
| Redfish Clean Up |
| [Documentation] Check states, reboot if needed and poweroff. |
| |
| Wait Until Keyword Succeeds 1 min 30 sec Redfish.Login |
| |
| Redfish Power Off stack_mode=skip |
| |
| Run Keyword And Ignore Error Redfish Set Power Restore Policy AlwaysOff |
| Run Keyword And Ignore Error Redfish Purge Event Log |
| Run Keyword And Ignore Error Redfish Delete All BMC Dumps |
| Run Keyword And Ignore Error Delete All Redfish Sessions |
| |
| |
| 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 |