xref: /openbmc/openbmc-test-automation/extended/standby_bmc.robot (revision 94041a34a992d9b5f6418a43e1cd5273a6d9f9b2)
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