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