xref: /openbmc/openbmc-test-automation/extended/standby_bmc.robot (revision 1eb85f572b7aefc3f1c0d0237731e493e2f99cd3)
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 "RESTORE_LAST_STATE"
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
20
21*** Variables ***
22${HOST_SETTING}      /org/openbmc/settings/host0
23
24*** Test Cases ***
25
26Get To Stable State
27    [Documentation]  BMC cleanup drive to stable state
28    ...              1. PDU powercycle if specified
29    ...              1. Ping Test
30    ...              2. SSH Connection session Test
31    ...              3. REST Connection session Test
32    ...              4. Reboot BMC if REST Test failed
33    ...              5. Get BMC in Ready state if its not in this state
34    ...              6. Get Host in Off state if its not in this state
35    ...              7. Update restore policy
36    ...              8. Verify and Update MAC address.
37    [Tags]  Get_To_Stable_State
38
39    Run Keyword And Ignore Error  Powercycle System Via PDU
40
41    Wait For Host To Ping  ${OPENBMC_HOST}  2 mins
42    Run Keyword And Ignore Error
43    ...  Open Connection And Log In  host=${OPENBMC_HOST}
44
45    Wait Until Keyword Succeeds
46    ...  1 min  30 sec  Initialize OpenBMC
47
48    ${ready_status}=  Run Keyword And Return Status  Is BMC Ready
49    Run Keyword If  '${ready_status}' == '${False}'  Put BMC State  Ready
50
51    ${host_off_status}=  Run Keyword And Return Status  Is Host Off
52    Run Keyword If  '${host_off_status}' == '${False}'  Initiate Host PowerOff
53
54    Prune Journal Log
55
56    Run Keyword And Ignore Error  Set BMC Power Policy  ${RESTORE_LAST_STATE}
57
58    Run Keyword If  '${MAC_ADDRESS}' != '${EMPTY}'
59    ...  Check And Reset MAC
60    ${rc}=  Execute Command  find ${CLEANUP_DIR_PATH}
61    ...  return_stdout=False  return_rc=True
62    Run Keyword If  '${CLEANUP_DIR_PATH}' != '${EMPTY}' and ${rc} == 0
63    ...  Cleanup Dir
64
65    Delete Error Logs
66    Delete All Dumps
67
68*** Keywords ***
69
70Reboot and Wait for BMC Online
71    [Documentation]    Reboot BMC and wait for it to come online
72    ...                and boot to standby
73
74    Trigger Warm Reset via Reboot
75    Wait Until Keyword Succeeds
76    ...    5 min   10 sec    BMC Online Test
77
78    Wait For BMC Standby
79
80
81BMC Online Test
82    [Documentation]   BMC ping, SSH, REST connection Test
83
84    ${l_status}=   Run Keyword and Return Status
85    ...   Verify Ping and REST Authentication
86    Run Keyword If  '${l_status}' == '${False}'
87    ...   Fail  msg=System not in ideal state to continue [ERROR]
88
89
90Wait For BMC Standby
91    [Documentation]   Wait Until BMC standby post BMC reboot
92
93    @{states}=   Create List   BMC_READY   HOST_POWERED_OFF
94    Wait Until Keyword Succeeds
95    ...    10 min   10 sec   Verify BMC State   ${states}
96
97
98Get BMC State and Expect Standby
99    [Documentation]   Get BMC state and should be at standby
100
101    @{states}=     Create List   BMC_READY   HOST_POWERED_OFF
102    ${bmc_state}=  Get BMC State Deprecated
103    Should Contain  ${states}   ${bmc_state}
104
105
106Update Policy Setting
107    [Documentation]   Update the given restore policy
108    [Arguments]   ${policy}
109
110    ${valueDict}=     create dictionary  data=${policy}
111    Write Attribute    ${HOST_SETTING}    power_policy   data=${valueDict}
112    ${currentPolicy}=  Read Attribute     ${HOST_SETTING}   power_policy
113    Should Be Equal    ${currentPolicy}   ${policy}
114
115
116Trigger Warm Reset via Reboot
117    [Documentation]    Execute reboot command on the remote BMC and
118    ...                returns immediately. This keyword "Start Command"
119    ...                returns nothing and does not wait for the command
120    ...                execution to be finished.
121    Open Connection And Log In
122
123    Start Command   /sbin/reboot
124
125
126Powercycle System Via PDU
127    [Documentation]   AC cycle the system via PDU
128
129    Validate Parameters
130    PDU Power Cycle
131    Check If BMC is Up   5 min    10 sec
132
133
134Validate Parameters
135    Should Not Be Empty   ${PDU_IP}
136    Should Not Be Empty   ${PDU_TYPE}
137    Should Not Be Empty   ${PDU_SLOT_NO}
138    Should Not Be Empty   ${PDU_USERNAME}
139    Should Not Be Empty   ${PDU_PASSWORD}
140