1*** Settings *** 2Documentation This module will take whatever action is necessary 3... to bring the BMC to a stable, standby state. For our 4... purposes, a stable state is defined as: 5... - BMC is communicating 6... (pinging, sshing and REST commands working) 7... - Power state is 0 (off) 8... - BMC state is "Ready" 9... - HOST state is "Off" 10... - Boot policy is "ALWAYS_POWER_OFF" 11... Power cycle system via PDU if specified 12... Prune archived journal logs 13 14Resource ../lib/utils.robot 15Resource ../lib/pdu/pdu.robot 16Resource ../lib/state_manager.robot 17Resource ../lib/bmc_network_utils.robot 18Resource ../lib/bmc_cleanup.robot 19Resource ../lib/dump_utils.robot 20Library ../lib/gen_misc.py 21 22*** Variables *** 23${HOST_SETTING} /org/openbmc/settings/host0 24 25${ERROR_REGEX} xyz.openbmc_project.Software.BMC.Updater.service: Failed with result 'core-dump' 26 27*** Test Cases *** 28 29Get To Stable State 30 [Documentation] BMC cleanup drive to stable state 31 ... 1. PDU powercycle if specified 32 ... 1. Ping Test 33 ... 2. SSH Connection session Test 34 ... 3. REST Connection session Test 35 ... 4. Reboot BMC if REST Test failed 36 ... 5. Get BMC in Ready state if its not in this state 37 ... 6. Get Host in Off state if its not in this state 38 ... 7. Update restore policy 39 ... 8. Verify and Update MAC address. 40 [Tags] Get_To_Stable_State 41 42 Run Keyword And Ignore Error Powercycle System Via PDU 43 44 ${ping_status}= Run Keyword And Return Status 45 ... Wait For Host To Ping ${OPENBMC_HOST} 2 mins 46 47 # Check if the ping works using 1400 MTU. 48 Run Keyword if ${ping_status} == ${True} MTU Ping Test 49 50 Run Keyword if ${ping_status} == ${False} 51 ... Fail ${OPENBMC_HOST} ping test failed. 52 53 Open Connection And Log In host=${OPENBMC_HOST} 54 55 Wait Until Keyword Succeeds 56 ... 1 min 30 sec Initialize OpenBMC 57 58 ${ready_status}= Run Keyword And Return Status Is BMC Ready 59 Run Keyword If '${ready_status}' == '${False}' Put BMC State Ready 60 61 ${host_off_status}= Run Keyword And Return Status Is Host Off 62 Run Keyword If '${host_off_status}' == '${False}' Initiate Host PowerOff 63 64 Prune Journal Log 65 66 Run Keyword And Ignore Error Set BMC Power Policy ${ALWAYS_POWER_OFF} 67 68 # TODO: Enable MAC AES check latter. 69 # Reference : openbmc/openbmc-test-automation#998 70 #Run Keyword If '${MAC_ADDRESS}' != '${EMPTY}' 71 #... Check And Reset MAC 72 73 # TODO: Add new UBI File system cleanup. 74 # Reference : openbmc/openbmc-test-automation#998 75 #${rc}= Execute Command find ${CLEANUP_DIR_PATH} 76 #... return_stdout=False return_rc=True 77 #Run Keyword If '${CLEANUP_DIR_PATH}' != '${EMPTY}' and ${rc} == 0 78 #... Cleanup Dir 79 80 Run Keyword And Ignore Error Delete All Error Logs 81 Run Keyword And Ignore Error Delete All Dumps 82 Check For Current Boot Application Failures 83 84*** Keywords *** 85 86BMC Online Test 87 [Documentation] BMC ping, SSH, REST connection Test 88 89 ${l_status}= Run Keyword and Return Status 90 ... Verify Ping and REST Authentication 91 Run Keyword If '${l_status}' == '${False}' 92 ... Fail msg=System not in ideal state to continue [ERROR] 93 94 95Update Policy Setting 96 [Documentation] Update the given restore policy 97 [Arguments] ${policy} 98 99 ${valueDict}= create dictionary data=${policy} 100 Write Attribute ${HOST_SETTING} power_policy data=${valueDict} 101 ${currentPolicy}= Read Attribute ${HOST_SETTING} power_policy 102 Should Be Equal ${currentPolicy} ${policy} 103 104 105Trigger Warm Reset via Reboot 106 [Documentation] Execute reboot command on the remote BMC and 107 ... returns immediately. This keyword "Start Command" 108 ... returns nothing and does not wait for the command 109 ... execution to be finished. 110 Open Connection And Log In 111 112 Start Command /sbin/reboot 113 114 115Powercycle System Via PDU 116 [Documentation] AC cycle the system via PDU. 117 118 Validate Parameters 119 PDU Power Cycle 120 Check If BMC is Up 5 min 10 sec 121 122 123Check For Current Boot Application Failures 124 [Documentation] Parse the journal log and check for failures. 125 [Arguments] ${error_regex}=${ERROR_REGEX} 126 127 ${error_regex}= Escape Bash Quotes ${error_regex} 128 ${journal_log} ${stderr} ${rc}= BMC Execute Command 129 ... journalctl -b --no-pager | egrep '${error_regex}' ignore_err=1 130 131 Should Be Empty ${journal_log} 132 133 134Validate Parameters 135 [Documentation] Validate PDU parameters. 136 Should Not Be Empty ${PDU_IP} 137 Should Not Be Empty ${PDU_TYPE} 138 Should Not Be Empty ${PDU_SLOT_NO} 139 Should Not Be Empty ${PDU_USERNAME} 140 Should Not Be Empty ${PDU_PASSWORD} 141 142 143MTU Ping Test 144 [Documentation] Ping test using MTU. 145 [Arguments] ${mtu}=${1400} 146 147 # Description of argument(s): 148 # mtu The maximum transmission unit (MTU) of a network interface. 149 150 ${rc} ${output}= Run And Return RC And Output 151 ... ping -M do -s ${mtu} -c 10 ${OPENBMC_HOST} 152 Should Be Equal As Integers ${rc} 0 153 Should Not Contain ${output} 100% packet loss 154