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