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 20Resource ../lib/bmc_redfish_resource.robot 21Resource ../lib/bmc_redfish_utils.robot 22Library ../lib/gen_misc.py 23 24# Force the test to timedout to prevent test hanging. 25Test Timeout 10 minutes 26 27 28*** Variables *** 29${HOST_SETTING} /org/openbmc/settings/host0 30 31${ERROR_REGEX} xyz.openbmc_project.Software.BMC.Updater.service: Failed with result 'core-dump' 32 33*** Test Cases *** 34 35Get To Stable State 36 [Documentation] BMC cleanup drive to stable state 37 ... 1. PDU powercycle if specified 38 ... 1. Ping Test 39 ... 2. SSH Connection session Test 40 ... 3. REST Connection session Test 41 ... 4. Reboot BMC if REST Test failed 42 ... 5. Get BMC in Ready state if its not in this state 43 ... 6. Get Host in Off state if its not in this state 44 ... 7. Update restore policy 45 ... 8. Verify and Update MAC address. 46 [Tags] Get_To_Stable_State 47 48 Run Keyword And Ignore Error Powercycle System Via PDU 49 50 ${ping_status}= Run Keyword And Return Status 51 ... Wait For Host To Ping ${OPENBMC_HOST} 2 mins 52 53 # Check if the ping works using 1400 MTU. 54 #IF ${ping_status} == ${True} MTU Ping Test 55 56 IF ${ping_status} == ${False} Fail ${OPENBMC_HOST} ping test failed. 57 58 Open Connection And Log In host=${OPENBMC_HOST} 59 60 IF ${REDFISH_SUPPORTED} 61 Redfish Clean Up 62 ELSE 63 REST Clean Up 64 END 65 66 67 Prune Journal Log 68 Check For Current Boot Application Failures 69 70*** Keywords *** 71 72 73REST Clean Up 74 [Documentation] Check states, reboot if needed and poweroff. 75 76 Wait Until Keyword Succeeds 1 min 30 sec Initialize OpenBMC 77 78 ${ready_status}= Run Keyword And Return Status Is BMC Ready 79 IF '${ready_status}' == '${False}' 80 Put BMC State Ready 81 ELSE 82 REST Power Off stack_mode=skip 83 END 84 85 Run Keyword And Ignore Error Set BMC Power Policy ${ALWAYS_POWER_OFF} 86 Run Keyword And Ignore Error Delete All Error Logs 87 Run Keyword And Ignore Error Delete All Dumps 88 89 90Redfish Clean Up 91 [Documentation] Check states, reboot if needed and poweroff. 92 93 Wait Until Keyword Succeeds 1 min 30 sec Redfish.Login 94 95 Redfish Power Off stack_mode=skip 96 97 Run Keyword And Ignore Error Redfish Set Power Restore Policy AlwaysOff 98 Run Keyword And Ignore Error Redfish Purge Event Log 99 Run Keyword And Ignore Error Redfish Delete All BMC Dumps 100 Run Keyword And Ignore Error Redfish Delete All System Dumps 101 Run Keyword And Ignore Error Clear All Subscriptions 102 Run Keyword And Ignore Error Delete All Redfish Sessions 103 104 105BMC Online Test 106 [Documentation] BMC ping, SSH, REST connection Test 107 108 ${l_status}= Run Keyword and Return Status 109 ... Verify Ping and REST Authentication 110 IF '${l_status}' == '${False}' 111 Fail msg=System not in ideal state to continue [ERROR] 112 END 113 114 115Update Policy Setting 116 [Documentation] Update the given restore policy 117 [Arguments] ${policy} 118 119 # Description of argument(s): 120 # policy Restore policy. 121 122 ${valueDict}= create dictionary data=${policy} 123 Write Attribute ${HOST_SETTING} power_policy data=${valueDict} 124 ${currentPolicy}= Read Attribute ${HOST_SETTING} power_policy 125 Should Be Equal ${currentPolicy} ${policy} 126 127 128Trigger Warm Reset via Reboot 129 [Documentation] Execute reboot command on the remote BMC and 130 ... returns immediately. This keyword "Start Command" 131 ... returns nothing and does not wait for the command 132 ... execution to be finished. 133 Open Connection And Log In 134 135 Start Command /sbin/reboot 136 137 138Powercycle System Via PDU 139 [Documentation] AC cycle the system via PDU. 140 141 Validate Parameters 142 PDU Power Cycle 143 Check If BMC is Up 5 min 10 sec 144 145 146Check For Current Boot Application Failures 147 [Documentation] Parse the journal log and check for failures. 148 [Arguments] ${error_regex}=${ERROR_REGEX} 149 150 # Description of argument(s): 151 # error_regex Regex error pattern to be checked in the journal log. 152 153 ${error_regex}= Escape Bash Quotes ${error_regex} 154 ${journal_log} ${stderr} ${rc}= BMC Execute Command 155 ... journalctl -b --no-pager | egrep '${error_regex}' ignore_err=1 156 157 Should Be Empty ${journal_log} 158 159 160Validate Parameters 161 [Documentation] Validate PDU parameters. 162 163 Should Not Be Empty ${PDU_IP} 164 Should Not Be Empty ${PDU_TYPE} 165 Should Not Be Empty ${PDU_SLOT_NO} 166 Should Not Be Empty ${PDU_USERNAME} 167 Should Not Be Empty ${PDU_PASSWORD} 168 169 170MTU Ping Test 171 [Documentation] Ping test using MTU. 172 [Arguments] ${mtu}=${1400} 173 174 # Description of argument(s): 175 # mtu The maximum transmission unit (MTU) of a network interface. 176 177 ${rc} ${output}= Run And Return RC And Output 178 ... ping -M do -s ${mtu} -c 10 ${OPENBMC_HOST} 179 Should Be Equal As Integers ${rc} 0 180 Should Not Contain ${output} 100% packet loss 181 182 183Clear All Subscriptions 184 [Documentation] Delete all subscriptions. 185 186 ${subscriptions}= Redfish.Get Attribute /redfish/v1/EventService/Subscriptions Members 187 FOR ${subscription} IN @{subscriptions} 188 Redfish.Delete ${subscription['@odata.id']} 189 END 190