blob: 29bd240ea0c5137166ac837b76f5f7e4842a0fd9 [file] [log] [blame]
Chris Austenb29d2e82016-06-07 12:25:35 -05001*** Settings ***
Steven Sombar0acb3412018-01-24 09:38:42 -06002
Steven Sombarf60cbcf2018-12-07 08:12:18 -06003Documentation Utilities for Robot keywords that use REST.
Steven Sombar0acb3412018-01-24 09:38:42 -06004
Sandhya Somashekar839a0c22019-01-31 05:05:43 -06005Resource ../lib/resource.robot
Chris Austenb29d2e82016-06-07 12:25:35 -05006Resource ../lib/rest_client.robot
George Keishing5e870cd2016-08-24 10:05:47 -05007Resource ../lib/connection_client.robot
Rahul Maheshwarid1f45f22018-10-26 05:16:39 -05008Resource ../lib/boot_utils.robot
Steven Sombarf60cbcf2018-12-07 08:12:18 -06009Resource ../lib/common_utils.robot
George Keishingc0701102021-09-30 12:12:04 -050010Resource ../lib/bmc_redfish_utils.robot
George Keishing9a288602021-12-10 04:50:25 -060011Resource ../lib/ipmi_client.robot
Michael Walsh391ba9b2017-08-24 11:36:24 -050012Library String
George Keishing30c12ff2016-09-02 10:25:29 -050013Library DateTime
14Library Process
Chris Austenb29d2e82016-06-07 12:25:35 -050015Library OperatingSystem
Michael Walsha6723f22016-11-22 11:12:01 -060016Library gen_print.py
Steven Sombaraaaab222018-12-19 13:16:23 -060017Library gen_misc.py
Michael Walsha6723f22016-11-22 11:12:01 -060018Library gen_robot_print.py
Michael Walsh5f3f4142017-05-22 17:09:47 -050019Library gen_cmd.py
Sunil Macd110a2017-05-23 04:14:32 -050020Library gen_robot_keyword.py
Michael Walshe53e47a2017-06-30 17:03:24 -050021Library bmc_ssh_utils.py
Michael Walshfdc5ced2017-08-17 13:15:15 -050022Library utils.py
Charles Paul Hofer35816152017-10-02 11:55:11 -050023Library var_funcs.py
Sridevi Ramesh0d88ab32017-09-21 11:07:28 -050024Library SCPLibrary WITH NAME scp
George Keishing61364e52019-10-01 12:01:19 -050025Library gen_robot_valid.py
Chris Austenb29d2e82016-06-07 12:25:35 -050026
Steven Sombarf60cbcf2018-12-07 08:12:18 -060027
Chris Austenb29d2e82016-06-07 12:25:35 -050028*** Variables ***
Steven Sombar0acb3412018-01-24 09:38:42 -060029
Steven Sombar0acb3412018-01-24 09:38:42 -060030${SYSTEM_SHUTDOWN_TIME} ${5}
31
Michael Walsha6723f22016-11-22 11:12:01 -060032# Assign default value to QUIET for programs which may not define it.
33${QUIET} ${0}
Steven Sombar0acb3412018-01-24 09:38:42 -060034
Sridevi Ramesh1699d372016-12-06 00:20:22 -060035${HOST_SETTING} ${SETTINGS_URI}host0
Steven Sombar0acb3412018-01-24 09:38:42 -060036
Steven Sombar0acb3412018-01-24 09:38:42 -060037${boot_prog_method} ${EMPTY}
Michael Walshfdc5ced2017-08-17 13:15:15 -050038${power_policy_setup} ${0}
39${bmc_power_policy_method} ${EMPTY}
Michael Walshfdc5ced2017-08-17 13:15:15 -050040
Sridevi Ramesh0d88ab32017-09-21 11:07:28 -050041
Chris Austenb29d2e82016-06-07 12:25:35 -050042*** Keywords ***
Sridevi Ramesh1699d372016-12-06 00:20:22 -060043
Steven Sombar0acb3412018-01-24 09:38:42 -060044
George Keishing5e870cd2016-08-24 10:05:47 -050045Verify Ping and REST Authentication
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -050046 [Documentation] Verify ping and rest authentication.
Michael Walsha6723f22016-11-22 11:12:01 -060047 ${l_ping}= Run Keyword And Return Status
George Keishing5e870cd2016-08-24 10:05:47 -050048 ... Ping Host ${OPENBMC_HOST}
George Keishingc4d3dc02016-09-19 03:45:55 -050049 Run Keyword If '${l_ping}' == '${False}'
50 ... Fail msg=Ping Failed
George Keishing5e870cd2016-08-24 10:05:47 -050051
Michael Walsha6723f22016-11-22 11:12:01 -060052 ${l_rest}= Run Keyword And Return Status
George Keishing5e870cd2016-08-24 10:05:47 -050053 ... Initialize OpenBMC
George Keishingc4d3dc02016-09-19 03:45:55 -050054 Run Keyword If '${l_rest}' == '${False}'
55 ... Fail msg=REST Authentication Failed
George Keishing5e870cd2016-08-24 10:05:47 -050056
57 # Just to make sure the SSH is working for SCP
58 Open Connection And Log In
59 ${system} ${stderr}= Execute Command hostname return_stderr=True
60 Should Be Empty ${stderr}
61
Steven Sombar0acb3412018-01-24 09:38:42 -060062
George Keishing90b555a2021-05-20 11:54:16 -050063Verify Ping SSH And Redfish Authentication
64 [Documentation] Verify ping, SSH and redfish authentication.
65
66 ${l_ping}= Run Keyword And Return Status Ping Host ${OPENBMC_HOST}
67 Run Keyword If '${l_ping}' == '${False}' Fail msg=Ping Failed
68
69 ${l_rest}= Run Keyword And Return Status Redfish.Login
70 Run Keyword If '${l_rest}' == '${False}' Fail msg=REST Authentication Failed
71
72 # Just to make sure the SSH is working.
73 Open Connection And Log In
74 ${system} ${stderr}= Execute Command hostname return_stderr=True
75 Should Be Empty ${stderr}
76
77
George Keishingc4d3dc02016-09-19 03:45:55 -050078Check If BMC is Up
79 [Documentation] Wait for Host to be online. Checks every X seconds
80 ... interval for Y minutes and fails if timed out.
81 ... Default MAX timedout is 10 min, interval 10 seconds.
Gunnar Mills38032802016-12-12 13:43:40 -060082 [Arguments] ${max_timeout}=${OPENBMC_REBOOT_TIMEOUT} min
George Keishingc4d3dc02016-09-19 03:45:55 -050083 ... ${interval}=10 sec
84
Steven Sombar0acb3412018-01-24 09:38:42 -060085 # Description of argument(s):
86 # max_timeout Maximum time to wait.
87 # This should be expressed in Robot Framework's time format
88 # (e.g. "10 minutes").
George Keishing16b3c7b2021-01-28 09:23:37 -060089 # interval Interval to wait between status checks.
Steven Sombar0acb3412018-01-24 09:38:42 -060090 # This should be expressed in Robot Framework's time format
91 # (e.g. "5 seconds").
92
George Keishingc4d3dc02016-09-19 03:45:55 -050093 Wait Until Keyword Succeeds
94 ... ${max_timeout} ${interval} Verify Ping and REST Authentication
95
George Keishingb3700812016-08-31 03:03:30 -050096
George Keishing06ae4aa2016-08-30 01:41:28 -050097Flush REST Sessions
98 [Documentation] Removes all the active session objects
99 Delete All Sessions
George Keishingb3700812016-08-31 03:03:30 -0500100
Steven Sombar0acb3412018-01-24 09:38:42 -0600101
Rahul Maheshwarie95622c2017-02-24 10:04:29 -0600102Trigger Host Watchdog Error
George Keishing37cfa6b2017-06-15 10:25:55 -0500103 [Documentation] Inject host watchdog timeout error via REST.
Rahul Maheshwarie95622c2017-02-24 10:04:29 -0600104 [Arguments] ${milliseconds}=1000 ${sleep_time}=5s
Steven Sombar0acb3412018-01-24 09:38:42 -0600105
Michael Walshb5839d02017-04-12 16:11:20 -0500106 # Description of argument(s):
107 # milliseconds The time watchdog timer value in milliseconds (e.g. 1000 =
108 # 1 second).
Rahul Maheshwarie95622c2017-02-24 10:04:29 -0600109 # sleep_time Time delay for host watchdog error to get injected.
110 # Default is 5 seconds.
111
Michael Walsh4ffd1a12018-03-14 10:35:44 -0500112 ${data}= Create Dictionary
113 ... data=xyz.openbmc_project.State.Watchdog.Action.PowerCycle
114 ${status} ${result}= Run Keyword And Ignore Error
115 ... Read Attribute ${HOST_WATCHDOG_URI} ExpireAction
116 Run Keyword If '${status}' == 'PASS'
117 ... Write Attribute ${HOST_WATCHDOG_URI} ExpireAction data=${data}
George Keishing37cfa6b2017-06-15 10:25:55 -0500118
Sridevi Ramesheadeef02019-01-17 08:56:18 -0600119 ${int_milliseconds}= Convert To Integer ${milliseconds}
120 ${data}= Create Dictionary data=${int_milliseconds}
Michael Walsh4ffd1a12018-03-14 10:35:44 -0500121 Write Attribute ${HOST_WATCHDOG_URI} Interval data=${data}
122
123 ${data}= Create Dictionary data=${True}
124 Write Attribute ${HOST_WATCHDOG_URI} Enabled data=${data}
George Keishing37cfa6b2017-06-15 10:25:55 -0500125
Rahul Maheshwarie95622c2017-02-24 10:04:29 -0600126 Sleep ${sleep_time}
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500127
Steven Sombar0acb3412018-01-24 09:38:42 -0600128
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500129Login To OS Host
Steven Sombar0acb3412018-01-24 09:38:42 -0600130 [Documentation] Login to OS Host and return the Login response code.
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500131 [Arguments] ${os_host}=${OS_HOST} ${os_username}=${OS_USERNAME}
132 ... ${os_password}=${OS_PASSWORD}
Steven Sombar0acb3412018-01-24 09:38:42 -0600133
Gunnar Mills28e403b2017-10-25 16:16:38 -0500134 # Description of arguments:
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500135 # ${os_host} IP address of the OS Host.
136 # ${os_username} OS Host Login user name.
137 # ${os_password} OS Host Login passwrd.
138
George Keishing1856d332021-11-15 08:38:53 -0600139 Redfish Power On stack_mode=skip quiet=1
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500140
George Keishing3f223b82017-06-28 03:50:35 -0500141 SSHLibrary.Open Connection ${os_host}
George Keishinge0030882019-02-21 03:48:27 -0600142 ${resp}= SSHLibrary.Login ${os_username} ${os_password}
Sridevi Rameshea36b412017-03-09 04:08:02 -0600143 [Return] ${resp}
Prashanth Katti884ee062017-03-16 05:05:03 -0500144
Steven Sombar0acb3412018-01-24 09:38:42 -0600145
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600146Initiate Auto Reboot
147 [Documentation] Initiate an auto reboot.
148 [Arguments] ${milliseconds}=5000
Sweta Potthurie5a9fc72017-05-03 07:02:46 -0500149
150 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600151 # milliseconds The number of milliseconds for the watchdog timer.
Sweta Potthurie5a9fc72017-05-03 07:02:46 -0500152
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600153 # Set the auto reboot policy.
154 Set Auto Reboot ${1}
155 # Set the watchdog timer.
156 Trigger Host Watchdog Error ${milliseconds}
157
158
159Initiate OS Host Reboot
160 [Documentation] Initiate an OS reboot.
161 [Arguments] ${os_host}=${OS_HOST} ${os_username}=${OS_USERNAME}
162 ... ${os_password}=${OS_PASSWORD}
163
164 # Description of argument(s):
165 # os_host The host name or IP address of the OS.
166 # os_username The username to be used to sign in to the OS.
167 # os_password The password to be used to sign in to the OS.
168
169 ${cmd_buf}= Run Keyword If '${os_username}' == 'root'
170 ... Set Variable reboot
171 ... ELSE
172 ... Set Variable echo ${os_password} | sudo -S reboot
173
174 ${output} ${stderr} ${rc}= OS Execute Command
175 ... ${cmd_buf} fork=${1}
176
177
178Initiate OS Host Power Off
179 [Documentation] Initiate an OS reboot.
180 [Arguments] ${os_host}=${OS_HOST} ${os_username}=${OS_USERNAME}
181 ... ${os_password}=${OS_PASSWORD} ${hard}=${0}
182
183 # Description of argument(s):
184 # os_host The DNS name or IP of the OS.
185 # os_username The username to be used to sign in to the OS.
186 # os_password The password to be used to sign in to the OS.
187 # hard Indicates whether to do a hard vs. soft power off.
188
189 ${time_string}= Run Keyword If ${hard} Set Variable ${SPACE}now
190 ... ELSE Set Variable ${EMPTY}
191
192 ${cmd_buf}= Run Keyword If '${os_username}' == 'root'
193 ... Set Variable shutdown${time_string}
194 ... ELSE
195 ... Set Variable echo ${os_password} | sudo -S shutdown${time_string}
196
197 ${output} ${stderr} ${rc}= OS Execute Command
198 ... ${cmd_buf} fork=${1}
Sweta Potthurie5a9fc72017-05-03 07:02:46 -0500199
George Keishing3987a1e2017-09-20 09:13:02 -0500200
Steven Sombar5f3af442018-02-14 08:30:15 -0600201Set System LED State
202 [Documentation] Set given system LED via REST.
203 [Arguments] ${led_name} ${led_state}
204 # Description of argument(s):
205 # led_name System LED name (e.g. heartbeat, identify, beep).
206 # led_state LED state to be set (e.g. On, Off).
207
208 ${args}= Create Dictionary
209 ... data=xyz.openbmc_project.Led.Physical.Action.${led_state}
210 Write Attribute ${LED_PHYSICAL_URI}${led_name} State data=${args}
211
212 Verify LED State ${led_name} ${led_state}
213
214
Steven Sombaraaf72c42017-09-05 12:02:00 -0500215Read Turbo Setting Via REST
216 [Documentation] Return turbo setting via REST.
Steven Sombarea79a492018-04-18 11:14:57 -0500217 # Returns 1 if TurboAllowed, 0 if not.
Steven Sombaraaf72c42017-09-05 12:02:00 -0500218
Steven Sombarea79a492018-04-18 11:14:57 -0500219 ${turbo_setting}= Read Attribute
220 ... ${CONTROL_HOST_URI}turbo_allowed TurboAllowed
221 [Return] ${turbo_setting}
222
Steven Sombaraaf72c42017-09-05 12:02:00 -0500223
Steven Sombaraaf72c42017-09-05 12:02:00 -0500224Set Turbo Setting Via REST
225 [Documentation] Set turbo setting via REST.
Steven Sombar80bc8592018-04-24 11:44:53 -0500226 [Arguments] ${setting} ${verify}=${False}
Steven Sombar0acb3412018-01-24 09:38:42 -0600227
Steven Sombaraaf72c42017-09-05 12:02:00 -0500228 # Description of argument(s):
Steven Sombar80bc8592018-04-24 11:44:53 -0500229 # setting State to set TurboAllowed, 1=allowed, 0=not allowed.
230 # verify If True, read the TurboAllowed setting to confirm.
Steven Sombaraaf72c42017-09-05 12:02:00 -0500231
Steven Sombarea79a492018-04-18 11:14:57 -0500232 ${data}= Create Dictionary data=${${setting}}
Steven Sombar80bc8592018-04-24 11:44:53 -0500233 Write Attribute ${CONTROL_HOST_URI}turbo_allowed TurboAllowed
234 ... verify=${verify} data=${data}
George Keishingef74a8c2017-10-20 10:23:52 -0500235
Steven Sombar0acb3412018-01-24 09:38:42 -0600236
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600237Set REST Logging Policy
238 [Documentation] Enable or disable REST logging setting.
239 [Arguments] ${policy_setting}=${True}
George Keishingef74a8c2017-10-20 10:23:52 -0500240
241 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600242 # policy_setting The policy setting value which can be either
243 # True or False.
George Keishingef74a8c2017-10-20 10:23:52 -0500244
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600245 ${log_dict}= Create Dictionary data=${policy_setting}
George Keishingdf3e65f2018-12-18 13:06:56 -0600246 Write Attribute ${BMC_LOGGING_URI}rest_api_logs Enabled
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600247 ... data=${log_dict} verify=${1} expected_value=${policy_setting}
Sridevi Ramesh0d88ab32017-09-21 11:07:28 -0500248
Steven Sombar0acb3412018-01-24 09:38:42 -0600249
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600250Old Get Boot Progress
251 [Documentation] Get the boot progress the old way (via org location).
252 [Arguments] ${quiet}=${QUIET}
George Keishing034902d2017-11-10 13:15:38 -0600253
254 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600255 # quiet Indicates whether this keyword should run without any output to
256 # the console.
257
258 ${state}= Read Attribute ${OPENBMC_BASE_URI}sensors/host/BootProgress
259 ... value quiet=${quiet}
260
261 [Return] ${state}
262
263
264Set Boot Progress Method
265 [Documentation] Set the boot_prog_method to either 'Old' or 'New'.
266
267 # The boot progress data has moved from an 'org' location to an 'xyz'
268 # location. This keyword will determine whether the new method of getting
269 # the boot progress is valid and will set the global boot_prog_method
270 # variable accordingly. If boot_prog_method is already set (either by a
271 # prior call to this function or via a -v parm), this keyword will simply
272 # return.
273
274 # Note: There are interim builds that contain boot_progress in both the
275 # old and the new location values. It is nearly impossible for this
276 # keyword to determine whether the old boot_progress or the new one is
277 # active. When using such builds where the old boot_progress is active,
278 # the only recourse users will have is that they may specify
279 # -v boot_prog_method:Old to force old behavior on such builds.
280
281 Run Keyword If '${boot_prog_method}' != '${EMPTY}' Return From Keyword
282
283 ${new_status} ${new_value}= Run Keyword And Ignore Error
284 ... New Get Boot Progress
285 # If the new style read fails, the method must necessarily be "Old".
286 Run Keyword If '${new_status}' == 'PASS'
287 ... Run Keywords
288 ... Set Global Variable ${boot_prog_method} New AND
289 ... Rqpvars boot_prog_method AND
290 ... Return From Keyword
291
292 # Default method is "Old".
293 Set Global Variable ${boot_prog_method} Old
294 Rqpvars boot_prog_method
295
296
297Initiate Power On
298 [Documentation] Initiates the power on and waits until the Is Power On
299 ... keyword returns that the power state has switched to on.
300 [Arguments] ${wait}=${1}
301
302 # Description of argument(s):
303 # wait Indicates whether to wait for a powered on state after issuing
304 # the power on command.
305
306 @{arglist}= Create List
307 ${args}= Create Dictionary data=@{arglist}
308 ${resp}= Call Method ${OPENBMC_BASE_URI}control/chassis0/ powerOn
309 ... data=${args}
310 should be equal as strings ${resp.status_code} ${HTTP_OK}
311
312 # Does caller want to wait for power on status?
313 Run Keyword If '${wait}' == '${0}' Return From Keyword
314 Wait Until Keyword Succeeds 3 min 10 sec Is Power On
315
316
317Initiate Power Off
318 [Documentation] Initiates the power off and waits until the Is Power Off
319 ... keyword returns that the power state has switched to off.
320
321 @{arglist}= Create List
322 ${args}= Create Dictionary data=@{arglist}
323 ${resp}= Call Method ${OPENBMC_BASE_URI}control/chassis0/ powerOff
324 ... data=${args}
325 should be equal as strings ${resp.status_code} ${HTTP_OK}
326 Wait Until Keyword Succeeds 1 min 10 sec Is Power Off
327
328
329Get Boot Progress
330 [Documentation] Get the boot progress and return it.
331 [Arguments] ${quiet}=${QUIET}
332
333 # Description of argument(s):
334 # quiet Indicates whether this keyword should run without any output to
335 # the console.
336
337 Set Boot Progress Method
338 ${state}= Run Keyword If '${boot_prog_method}' == 'New'
339 ... New Get Boot Progress quiet=${quiet}
340 ... ELSE
341 ... Old Get Boot Progress quiet=${quiet}
342
343 [Return] ${state}
344
345
346New Get Boot Progress
347 [Documentation] Get the boot progress the new way (via xyz location).
348 [Arguments] ${quiet}=${QUIET}
349
350 # Description of argument(s):
351 # quiet Indicates whether this keyword should run without any output to
352 # the console.
353
354 ${state}= Read Attribute ${HOST_STATE_URI} BootProgress quiet=${quiet}
355
356 [Return] ${state.rsplit('.', 1)[1]}
357
358
359New Get Power Policy
360 [Documentation] Returns the BMC power policy (new method).
361 ${currentPolicy}= Read Attribute ${POWER_RESTORE_URI} PowerRestorePolicy
362
363 [Return] ${currentPolicy}
364
365
366Old Get Power Policy
367 [Documentation] Returns the BMC power policy (old method).
368 ${currentPolicy}= Read Attribute ${HOST_SETTING} power_policy
369
370 [Return] ${currentPolicy}
371
372
George Keishinga54e06f2020-06-12 10:42:41 -0500373Redfish Get Power Restore Policy
374 [Documentation] Returns the BMC power restore policy.
375
376 ${power_restore_policy}= Redfish.Get Attribute /redfish/v1/Systems/system PowerRestorePolicy
377 [Return] ${power_restore_policy}
378
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600379Get Auto Reboot
380 [Documentation] Returns auto reboot setting.
381 ${setting}= Read Attribute ${CONTROL_HOST_URI}/auto_reboot AutoReboot
382
383 [Return] ${setting}
384
385
George Keishingc8a6dd22020-06-12 12:01:33 -0500386Redfish Get Auto Reboot
387 [Documentation] Returns auto reboot setting.
388
George Keishinga8cb28d2020-06-15 03:10:29 -0500389 ${resp}= Redfish.Get Attribute /redfish/v1/Systems/system Boot
George Keishinga8cb28d2020-06-15 03:10:29 -0500390 [Return] ${resp["AutomaticRetryConfig"]}
George Keishingc8a6dd22020-06-12 12:01:33 -0500391
392
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600393Trigger Warm Reset
394 [Documentation] Initiate a warm reset.
395
396 log to console "Triggering warm reset"
397 ${data}= create dictionary data=@{EMPTY}
398 ${resp}= openbmc post request
399 ... ${OPENBMC_BASE_URI}control/bmc0/action/warmReset data=${data}
400 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
401 ${session_active}= Check If warmReset is Initiated
402 Run Keyword If '${session_active}' == '${True}'
403 ... Fail msg=warm reset didn't occur
404
405 Sleep ${SYSTEM_SHUTDOWN_TIME}min
406 Check If BMC Is Up
407
408
409Get Power State
410 [Documentation] Returns the power state as an integer. Either 0 or 1.
411 [Arguments] ${quiet}=${QUIET}
412
413 # Description of argument(s):
414 # quiet Indicates whether this keyword should run without any output to
415 # the console.
416
417 @{arglist}= Create List
418 ${args}= Create Dictionary data=@{arglist}
419
420 ${resp}= Call Method ${OPENBMC_BASE_URI}control/chassis0/ getPowerState
421 ... data=${args} quiet=${quiet}
422 Should be equal as strings ${resp.status_code} ${HTTP_OK}
423 ${content}= to json ${resp.content}
424
425 [Return] ${content["data"]}
426
427
428Clear BMC Gard Record
429 [Documentation] Clear gard records from the system.
430
431 @{arglist}= Create List
432 ${args}= Create Dictionary data=@{arglist}
433 ${resp}= Call Method
434 ... ${OPENPOWER_CONTROL}gard Reset data=${args}
435 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
436
437
438Flash PNOR
439 [Documentation] Calls flash bios update method to flash PNOR image
440 [Arguments] ${pnor_image}
441
442 # Description of argument(s):
443 # pnor_image The filename and path of the PNOR image
444 # (e.g. "/home/image/zaius.pnor").
445
446 @{arglist}= Create List ${pnor_image}
447 ${args}= Create Dictionary data=@{arglist}
448 ${resp}= Call Method /org/openbmc/control/flash/bios/ update
449 ... data=${args}
450 should be equal as strings ${resp.status_code} ${HTTP_OK}
451 Wait Until Keyword Succeeds 2 min 10 sec Is PNOR Flashing
452
453
454Get Flash BIOS Status
455 [Documentation] Returns the status of the flash BIOS API as a string. For
456 ... example 'Flashing', 'Flash Done', etc
457 ${data}= Read Properties /org/openbmc/control/flash/bios
458 [Return] ${data['status']}
459
460
461Is PNOR Flashing
462 [Documentation] Get BIOS 'Flashing' status. This indicates that PNOR
463 ... flashing has started.
464 ${status}= Get Flash BIOS Status
465 Should Contain ${status} Flashing
466
467
468Is PNOR Flash Done
469 [Documentation] Get BIOS 'Flash Done' status. This indicates that the
470 ... PNOR flashing has completed.
471 ${status}= Get Flash BIOS Status
472 should be equal as strings ${status} Flash Done
473
474
475Create OS Console File Path
476 [Documentation] Create OS console file path name and return it.
477 [Arguments] ${log_file_path}=${EMPTY}
478
479 # Description of arguments:
480 # file_path The caller's candidate value. If this value is ${EMPTY}, this
481 # keyword will compose a file path name. Otherwise, this
482 # keyword will use the caller's file_path value. In either
483 # case, the value will be returned.
484
485 ${status}= Run Keyword And Return Status Variable Should Exist
486 ... ${TEST_NAME}
487
488 ${default_file_path}= Set Variable If ${status} == ${TRUE}
George Keishing9161b102021-12-10 02:26:30 -0600489 ... ${EXECDIR}${/}tmp${/}${OPENBMC_HOST}_${TEST_NAME.replace(' ', '')}_os_console.txt
490 ... ${EXECDIR}${/}tmp${/}${OPENBMC_HOST}_os_console.txt
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600491
492 ${log_file_path}= Set Variable If '${log_file_path}' == '${EMPTY}'
493 ... ${default_file_path} ${log_file_path}
494
495 [Return] ${log_file_path}
496
497
498Get Endpoint Paths
499 [Documentation] Returns all url paths ending with given endpoint
500 ... Example:
501 ... Given the following endpoint: cpu
502 ... This keyword will return: list of all urls ending with
503 ... cpu -
504 ... /org/openbmc/inventory/system/chassis/motherboard/cpu0,
505 ... /org/openbmc/inventory/system/chassis/motherboard/cpu1
506 [Arguments] ${path} ${endpoint}
507
508 # Description of arguments:
509 # path URL path for enumeration.
510 # endpoint Endpoint string (url path ending).
511
Steven Sombaraaaab222018-12-19 13:16:23 -0600512 # Make sure path ends with slash.
513 ${path}= Add Trailing Slash ${path}
514
515 ${resp}= Read Properties ${path}enumerate timeout=30
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600516 Log Dictionary ${resp}
517
518 ${list}= Get Dictionary Keys ${resp}
519 # For a given string, look for prefix and suffix for matching expression.
520 # Start of string followed by zero or more of any character followed by
521 # any digit or lower case character.
George Keishing585afa32020-07-09 04:55:15 -0500522 ${resp}= Get Matches ${list} regexp=^.*[0-9a-z_].${endpoint}\[_0-9a-z]*$ case_insensitive=${True}
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600523
524 [Return] ${resp}
525
526
527Set BMC Power Policy
528 [Documentation] Set the given BMC power policy.
529 [Arguments] ${policy}
530
531 # Note that this function will translate the old style "RESTORE_LAST_STATE"
532 # policy to the new style "xyz.openbmc_project.Control.Power.RestorePolicy.
533 # Policy.Restore" for you.
534
535 # Description of argument(s):
536 # policy Power restore policy (e.g "RESTORE_LAST_STATE",
537 # ${RESTORE_LAST_STATE}).
538
539 # Set the bmc_power_policy_method to either 'Old' or 'New'.
540 Set Power Policy Method
541 # This translation helps bridge between old and new method for calling.
542 ${policy}= Translate Power Policy Value ${policy}
543 # Run the appropriate keyword.
544 Run Key ${bmc_power_policy_method} Set Power Policy \ ${policy}
545 ${currentPolicy}= Get System Power Policy
546 Should Be Equal ${currentPolicy} ${policy}
547
548
549Delete Error Logs
550 [Documentation] Delete error logs.
Michael Sheposcc490b42020-08-26 12:53:01 -0500551 [Arguments] ${quiet}=${0}
552 # Description of argument(s):
553 # quiet If enabled, turns off logging to console.
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600554
555 # Check if error logs entries exist, if not return.
Steven Sombara8800da2018-12-18 16:19:05 -0600556 ${resp}= OpenBMC Get Request ${BMC_LOGGING_ENTRY}list quiet=${1}
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600557 Return From Keyword If ${resp.status_code} == ${HTTP_NOT_FOUND}
558
559 # Get the list of error logs entries and delete them all.
560 ${elog_entries}= Get URL List ${BMC_LOGGING_ENTRY}
David Shaw79247e42020-06-18 17:16:02 -0500561 FOR ${entry} IN @{elog_entries}
Michael Sheposcc490b42020-08-26 12:53:01 -0500562 Delete Error Log Entry ${entry} quiet=${quiet}
David Shaw79247e42020-06-18 17:16:02 -0500563 END
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600564
565
566Delete All Error Logs
567 [Documentation] Delete all error log entries using "DeleteAll" interface.
568
569 ${data}= Create Dictionary data=@{EMPTY}
570 ${resp}= Openbmc Post Request ${BMC_LOGGING_URI}action/DeleteAll
571 ... data=${data}
572 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
573
574
575Get Elog URL List
576 [Documentation] Return error log entry list of URLs.
577
578 ${url_list}= Read Properties /xyz/openbmc_project/logging/entry/
579 Sort List ${url_list}
580 [Return] ${url_list}
581
582
583Get BMC Flash Chip Boot Side
584 [Documentation] Return the BMC flash chip boot side.
George Keishing034902d2017-11-10 13:15:38 -0600585
586 # Example:
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600587 # 0 - indicates chip select is current side.
588 # 32 - indicates chip select is alternate side.
George Keishing034902d2017-11-10 13:15:38 -0600589
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600590 ${boot_side} ${stderr} ${rc}= BMC Execute Command
591 ... cat /sys/class/watchdog/watchdog1/bootstatus
592
593 [Return] ${boot_side}
594
595
Sweta Potthuri7d3af3c2018-01-29 03:07:07 -0600596Watchdog Object Should Exist
597 [Documentation] Check that watchdog object exists.
598
599 ${resp}= OpenBMC Get Request ${WATCHDOG_URI}host0
600 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
601 ... msg=Expected watchdog object does not exist.
Sweta Potthurif39022d2018-02-06 03:40:07 -0600602
603
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600604Get System LED State
605 [Documentation] Return the state of given system LED.
606 [Arguments] ${led_name}
Sweta Potthurif39022d2018-02-06 03:40:07 -0600607
608 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600609 # led_name System LED name (e.g. heartbeat, identify, beep).
Sweta Potthurif39022d2018-02-06 03:40:07 -0600610
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600611 ${state}= Read Attribute ${LED_PHYSICAL_URI}${led_name} State
612 [Return] ${state.rsplit('.', 1)[1]}
George Keishingb9f407b2018-02-20 00:07:46 -0600613
614
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600615Verify LED State
616 [Documentation] Checks if LED is in given state.
617 [Arguments] ${led_name} ${led_state}
618 # Description of argument(s):
619 # led_name System LED name (e.g. heartbeat, identify, beep).
620 # led_state LED state to be verified (e.g. On, Off).
George Keishingb9f407b2018-02-20 00:07:46 -0600621
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600622 ${state}= Get System LED State ${led_name}
623 Should Be Equal ${state} ${led_state}
George Keishingb9f407b2018-02-20 00:07:46 -0600624
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600625
626Get LED State XYZ
627 [Documentation] Returns state of given LED.
628 [Arguments] ${led_name}
629
630 # Description of argument(s):
631 # led_name Name of LED.
632
633 ${state}= Read Attribute ${LED_GROUPS_URI}${led_name} Asserted
634 # Returns the state of the LED, either On or Off.
635 [Return] ${state}
George Keishingb9f407b2018-02-20 00:07:46 -0600636
George Keishing78ce8dc2018-03-30 11:49:06 -0500637
638Verify Identify LED State
Alvin Wang32f7b3d2019-07-25 02:05:39 -0500639 [Documentation] Verify that the identify state of the LED group matches caller's expectations.
George Keishing78ce8dc2018-03-30 11:49:06 -0500640 [Arguments] ${expected_state}
641
642 # Description of argument(s):
Alvin Wang32f7b3d2019-07-25 02:05:39 -0500643 # expected_state The expected LED asserted state (1 = asserted, 0 = not asserted).
George Keishing78ce8dc2018-03-30 11:49:06 -0500644
Alvin Wang32f7b3d2019-07-25 02:05:39 -0500645 ${led_state}= Get LED State XYZ enclosure_identify
646 Should Be Equal ${led_state} ${expected_state} msg=Unexpected LED state.
Sweta Potthuri39255032018-03-28 10:12:14 -0500647
648Verify The Attribute
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -0500649 [Documentation] Verify the given attribute.
Sweta Potthuri39255032018-03-28 10:12:14 -0500650 [Arguments] ${uri} ${attribute_name} ${attribute_value}
651
652 # Description of argument(s):
653 # uri URI path
654 # (e.g. "/xyz/openbmc_project/control/host0/TPMEnable").
655 # attribute_name Name of attribute to be verified (e.g. "TPMEnable").
656 # attribute_value The expected value of attribute (e.g. "1", "0", etc.)
657
658 ${output}= Read Attribute ${uri} ${attribute_name}
659 Should Be Equal ${attribute_value} ${output}
660 ... msg=Attribute "${attribute_name} does not have the expected value.
George Keishingcf0d7772018-05-04 08:22:50 -0500661
662
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600663New Set Power Policy
664 [Documentation] Set the given BMC power policy (new method).
665 [Arguments] ${policy}
George Keishingb4adfc72018-10-26 09:39:32 -0500666
667 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600668 # policy Power restore policy (e.g. ${ALWAYS_POWER_OFF}).
George Keishingc5fef582018-07-18 08:41:28 -0500669
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600670 ${valueDict}= Create Dictionary data=${policy}
671 Write Attribute
672 ... ${POWER_RESTORE_URI} PowerRestorePolicy data=${valueDict}
George Keishing216e5842018-08-31 14:58:15 -0500673
674
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600675Old Set Power Policy
676 [Documentation] Set the given BMC power policy (old method).
677 [Arguments] ${policy}
George Keishing3c004dc2018-10-10 07:16:47 -0500678
679 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600680 # policy Power restore policy (e.g. "ALWAYS_POWER_OFF").
681
682 ${valueDict}= create dictionary data=${policy}
683 Write Attribute ${HOST_SETTING} power_policy data=${valueDict}
George Keishing3c004dc2018-10-10 07:16:47 -0500684
685
George Keishinga54e06f2020-06-12 10:42:41 -0500686Redfish Set Power Restore Policy
687 [Documentation] Set the BMC power restore policy.
688 [Arguments] ${power_restore_policy}
689
690 # Description of argument(s):
691 # power_restore_policy Power restore policy (e.g. "AlwaysOff", "AlwaysOn", "LastState").
692
693 Redfish.Patch /redfish/v1/Systems/system body={"PowerRestorePolicy": "${power_restore_policy}"}
694 ... valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
695
696
George Keishing9a288602021-12-10 04:50:25 -0600697IPMI Set Power Restore Policy
698 [Documentation] Set the BMC power restore policy using IPMI.
699 [Arguments] ${power_restore_policy}=always-off
700
701 # Description of argument(s):
702 # power_restore_policy Power restore policies
703 # always-on : turn on when power is restored
704 # previous : return to previous state when power is restored
705 # always-off : stay off after power is restored
706
707 ${resp}= Run IPMI Standard Command chassis policy ${power_restore_policy}
708 # Example: Set chassis power restore policy to always-off
709 Should Contain ${resp} ${power_restore_policy}
710
711
George Keishinga5cedb32020-07-17 15:50:34 -0500712Set Auto Reboot Setting
713 [Documentation] Set the given auto reboot setting (REST or Redfish).
714 [Arguments] ${value}
715
716 # Description of argument(s):
717 # value The reboot setting, 1 for enabling and 0 for disabling.
718
719 # This is to cater to boot call points and plugin script which will always
720 # send using value 0 or 1. This dictionary maps to redfish string values.
721 ${rest_redfish_dict}= Create Dictionary
722 ... 1=RetryAttempts
723 ... 0=Disabled
724
George Keishinge1879642020-12-09 13:20:15 -0600725 Run Keyword If ${REDFISH_SUPPORT_TRANS_STATE} == ${1}
George Keishinga5cedb32020-07-17 15:50:34 -0500726 ... Redfish Set Auto Reboot ${rest_redfish_dict["${value}"]}
George Keishinge1879642020-12-09 13:20:15 -0600727 ... ELSE
728 ... Set Auto Reboot ${value}
George Keishinga5cedb32020-07-17 15:50:34 -0500729
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600730Set Auto Reboot
731 [Documentation] Set the given auto reboot setting.
732 [Arguments] ${setting}
George Keishing3c004dc2018-10-10 07:16:47 -0500733
734 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600735 # setting The reboot setting, 1 for enabling and 0 for disabling.
George Keishing3c004dc2018-10-10 07:16:47 -0500736
Sridevi Ramesh68d72ff2019-02-04 09:24:46 -0600737 ${valueDict}= Convert To Integer ${setting}
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600738 ${data}= Create Dictionary data=${valueDict}
739 Write Attribute ${CONTROL_HOST_URI}/auto_reboot AutoReboot data=${data}
740 ${current_setting}= Get Auto Reboot
741 Should Be Equal As Integers ${current_setting} ${setting}
George Keishing3c004dc2018-10-10 07:16:47 -0500742
George Keishingc25c55d2018-10-30 02:23:44 -0500743
George Keishingc8a6dd22020-06-12 12:01:33 -0500744Redfish Set Auto Reboot
745 [Documentation] Set the given auto reboot setting.
746 [Arguments] ${setting}
747
748 # Description of argument(s):
749 # setting The reboot setting, "RetryAttempts" and "Disabled".
750
George Keishinga8cb28d2020-06-15 03:10:29 -0500751 Redfish.Patch /redfish/v1/Systems/system body={"Boot": {"AutomaticRetryConfig": "${setting}"}}
752 ... valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
George Keishinga8cb28d2020-06-15 03:10:29 -0500753
George Keishingc8a6dd22020-06-12 12:01:33 -0500754 ${current_setting}= Redfish Get Auto Reboot
755 Should Be Equal As Strings ${current_setting} ${setting}
756
757
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600758Set Control Boot Mode
759 [Documentation] Set given boot mode on the boot object path attribute.
760 [Arguments] ${boot_path} ${boot_mode}
George Keishingc25c55d2018-10-30 02:23:44 -0500761
762 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600763 # boot_path Boot object path.
764 # Example:
765 # /xyz/openbmc_project/control/host0/boot
766 # /xyz/openbmc_project/control/host0/boot/one_time
767 # boot_mode Boot mode which need to be set.
768 # Example:
769 # "xyz.openbmc_project.Control.Boot.Mode.Modes.Regular"
George Keishingc25c55d2018-10-30 02:23:44 -0500770
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600771 ${valueDict}= Create Dictionary data=${boot_mode}
772 Write Attribute ${boot_path} BootMode data=${valueDict}
George Keishingc25c55d2018-10-30 02:23:44 -0500773
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600774
775Is Power On
776 [Documentation] Verify that the BMC chassis state is on.
777 ${state}= Get Power State
778 Should be equal ${state} ${1}
779
780
781Is Power Off
782 [Documentation] Verify that the BMC chassis state is off.
783 ${state}= Get Power State
784 Should be equal ${state} ${0}
Sivas SRR0e3bc6d2019-04-23 08:36:35 -0500785
786
787CLI Get BMC DateTime
788 [Documentation] Returns BMC date time from date command.
789
790 ${bmc_time_via_date} ${stderr} ${rc}= BMC Execute Command date +"%Y-%m-%d %H:%M:%S" print_err=1
791 [Return] ${bmc_time_via_date}
George Keishing61364e52019-10-01 12:01:19 -0500792
793
794Update Root Password
795 [Documentation] Update system "root" user password.
796 [Arguments] ${openbmc_password}=${OPENBMC_PASSWORD}
797
798 # Description of argument(s):
799 # openbmc_password The root password for the open BMC system.
800
801 @{password}= Create List ${openbmc_password}
802 ${data}= Create Dictionary data=@{password}
803
804 ${headers}= Create Dictionary Content-Type=application/json X-Auth-Token=${XAUTH_TOKEN}
805 ${resp}= Post Request openbmc ${BMC_USER_URI}root/action/SetPassword
806 ... data=${data} headers=${headers}
807 Valid Value resp.status_code [${HTTP_OK}]
Sushil Singh6624ce52020-01-22 00:53:41 -0600808
809
810Get Post Boot Action
811 [Documentation] Get post boot action.
812
George Keishing879f0842020-02-05 11:00:47 -0600813 # Post code update action dictionary.
Sushil Singh6624ce52020-01-22 00:53:41 -0600814 #
815 # {
816 # BMC image: {
817 # OnReset: Redfish OBMC Reboot (off),
818 # Immediate: Wait For Reboot start_boot_seconds=${state['epoch_seconds']}
819 # },
820 # Host image: {
George Keishinge523fc02020-03-23 12:28:01 -0500821 # OnReset: RF SYS GracefulRestart,
Sushil Singh6624ce52020-01-22 00:53:41 -0600822 # Immediate: Wait State os_running_match_state 10 mins
823 # }
824 # }
825
826 ${code_base_dir_path}= Get Code Base Dir Path
827 ${post_code_update_actions}= Evaluate
828 ... json.load(open('${code_base_dir_path}data/applytime_table.json')) modules=json
829 Rprint Vars post_code_update_actions
830
831 [Return] ${post_code_update_actions}
832
George Keishing1eeff9c2020-06-16 04:03:34 -0500833
834Redfish Set Boot Default
Konstantin Aladyshev0043fc52021-04-15 12:07:29 +0300835 [Documentation] Set and Verify Boot source override
836 [Arguments] ${override_enabled} ${override_target} ${override_mode}=UEFI
George Keishing1eeff9c2020-06-16 04:03:34 -0500837
838 # Description of argument(s):
Konstantin Aladyshev0043fc52021-04-15 12:07:29 +0300839 # override_enabled Boot source override enable type.
George Keishing1eeff9c2020-06-16 04:03:34 -0500840 # ('Once', 'Continuous', 'Disabled').
Konstantin Aladyshev0043fc52021-04-15 12:07:29 +0300841 # override_target Boot source override target.
George Keishing1eeff9c2020-06-16 04:03:34 -0500842 # ('Pxe', 'Cd', 'Hdd', 'Diags', 'BiosSetup', 'None').
Konstantin Aladyshev0043fc52021-04-15 12:07:29 +0300843 # override_mode Boot source override mode (relevant only for x86 arch).
844 # ('Legacy', 'UEFI').
George Keishing1eeff9c2020-06-16 04:03:34 -0500845
846 ${data}= Create Dictionary BootSourceOverrideEnabled=${override_enabled}
847 ... BootSourceOverrideTarget=${override_target}
Konstantin Aladyshev0043fc52021-04-15 12:07:29 +0300848
849 Run Keyword If '${PLATFORM_ARCH_TYPE}' == 'x86'
850 ... Set To Dictionary ${data} BootSourceOverrideMode ${override_mode}
851
George Keishing1eeff9c2020-06-16 04:03:34 -0500852 ${payload}= Create Dictionary Boot=${data}
853
854 Redfish.Patch /redfish/v1/Systems/system body=&{payload}
855 ... valid_status_codes=[${HTTP_OK},${HTTP_NO_CONTENT}]
856
857 ${resp}= Redfish.Get Attribute /redfish/v1/Systems/system Boot
858 Should Be Equal As Strings ${resp["BootSourceOverrideEnabled"]} ${override_enabled}
859 Should Be Equal As Strings ${resp["BootSourceOverrideTarget"]} ${override_target}
Konstantin Aladyshev0043fc52021-04-15 12:07:29 +0300860 Run Keyword If '${PLATFORM_ARCH_TYPE}' == 'x86'
861 ... Should Be Equal As Strings ${resp["BootSourceOverrideMode"]} ${override_mode}
George Keishinge1879642020-12-09 13:20:15 -0600862
863
864# Redfish state keywords.
865
866Redfish Get BMC State
867 [Documentation] Return BMC health state.
868
869 # "Enabled" -> BMC Ready, "Starting" -> BMC NotReady
870
871 # Example:
872 # "Status": {
873 # "Health": "OK",
874 # "HealthRollup": "OK",
875 # "State": "Enabled"
876 # },
877
878 ${status}= Redfish.Get Attribute /redfish/v1/Managers/bmc Status
879 [Return] ${status["State"]}
880
881
882Redfish Get Host State
883 [Documentation] Return host power and health state.
884
885 # Refer: http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Status
886
887 # Example:
888 # "PowerState": "Off",
889 # "Status": {
890 # "Health": "OK",
891 # "HealthRollup": "OK",
892 # "State": "StandbyOffline"
893 # },
894
George Keishingb51d1502021-03-25 03:30:33 -0500895 ${chassis}= Redfish.Get Properties /redfish/v1/Chassis/${CHASSIS_ID}
George Keishinge1879642020-12-09 13:20:15 -0600896 [Return] ${chassis["PowerState"]} ${chassis["Status"]["State"]}
897
898
899Redfish Get Boot Progress
900 [Documentation] Return boot progress state.
901
902 # Example: /redfish/v1/Systems/system/
903 # "BootProgress": {
904 # "LastState": "OSRunning"
905 # },
906
907 ${boot_progress}= Redfish.Get Properties /redfish/v1/Systems/system/
George Keishingb51d1502021-03-25 03:30:33 -0500908
909 Return From Keyword If "${PLATFORM_ARCH_TYPE}" == "x86"
910 ... NA ${boot_progress["Status"]["State"]}
911
George Keishinge1879642020-12-09 13:20:15 -0600912 [Return] ${boot_progress["BootProgress"]["LastState"]} ${boot_progress["Status"]["State"]}
913
914
915Redfish Get States
916 [Documentation] Return all the BMC and host states in dictionary.
George Keishing366033f2021-04-01 13:49:06 -0500917 [Timeout] 120 Seconds
George Keishinge1879642020-12-09 13:20:15 -0600918
919 # Refer: openbmc/docs/designs/boot-progress.md
920
George Keishing205f95f2021-03-10 02:25:53 -0600921 Redfish.Login
George Keishinge1879642020-12-09 13:20:15 -0600922
923 ${bmc_state}= Redfish Get BMC State
924 ${chassis_state} ${chassis_status}= Redfish Get Host State
925 ${boot_progress} ${host_state}= Redfish Get Boot Progress
926
927 ${states}= Create Dictionary
928 ... bmc=${bmc_state}
929 ... chassis=${chassis_state}
930 ... host=${host_state}
931 ... boot_progress=${boot_progress}
932
George Keishing64293c52021-03-24 08:21:23 -0500933 # Disable loggoing state to prevent huge log.html record when boot
934 # test is run in loops.
935 #Log ${states}
George Keishing95cf8652021-02-08 11:32:33 -0600936
George Keishinge1879642020-12-09 13:20:15 -0600937 [Return] ${states}
George Keishing95cf8652021-02-08 11:32:33 -0600938
939
940Is BMC Standby
941 [Documentation] Check if BMC is ready and host at standby.
942
943 ${standby_states}= Create Dictionary
944 ... bmc=Enabled
945 ... chassis=Off
946 ... host=Disabled
947 ... boot_progress=None
948
949 Wait Until Keyword Succeeds 3 min 10 sec Redfish Get States
950
Sushil Singhb910d892021-11-17 05:34:29 -0600951 Wait Until Keyword Succeeds 2 min 10 sec Match State ${standby_states}
George Keishing95cf8652021-02-08 11:32:33 -0600952
953
954Match State
955 [Documentation] Check if the expected and current states are matched.
956 [Arguments] ${match_state}
957
958 # Description of argument(s):
959 # match_state Expected states in dictionary.
960
961 ${current_state}= Redfish Get States
962 Dictionaries Should Be Equal ${match_state} ${current_state}
Peter D Phan49739b22021-09-29 14:30:08 -0500963
964
965Redfish Initiate Auto Reboot
966 [Documentation] Initiate an auto reboot.
967 [Arguments] ${interval}=2000
968
969 # Description of argument(s):
970 # interval Value in milliseconds to set Watchdog interval
971
972 # Set auto reboot policy
973 Redfish Set Auto Reboot RetryAttempts
974
George Keishingc0701102021-09-30 12:12:04 -0500975 Redfish Power Operation On
George Keishinga4e13522022-04-13 11:14:53 -0500976
977 Wait Until Keyword Succeeds 2 min 5 sec Is Boot Progress Changed
George Keishingc0701102021-09-30 12:12:04 -0500978
Peter D Phan49739b22021-09-29 14:30:08 -0500979 # Set watchdog timer
980 Set Watchdog Interval Using Busctl ${interval}
981
982
George Keishinga4e13522022-04-13 11:14:53 -0500983Is Boot Progress Changed
984 [Documentation] Get BootProgress state and expect boot state mismatch.
985 [Arguments] ${boot_state}=None
986
987 # Description of argument(s):
988 # boot_state Value of the BootProgress state to match against.
989
990 ${boot_progress} ${host_state}= Redfish Get Boot Progress
991
992 Should Not Be Equal ${boot_progress} ${boot_state}
993
Peter D Phan49739b22021-09-29 14:30:08 -0500994
995Set Watchdog Interval Using Busctl
996 [Documentation] Set Watchdog time interval.
997 [Arguments] ${milliseconds}=1000
998
999 # Description of argument(s):
George Keishing4b729492021-11-10 12:51:10 -06001000 # milliseconds Time interval for watchdog timer
Peter D Phan49739b22021-09-29 14:30:08 -05001001
George Keishingc0701102021-09-30 12:12:04 -05001002 ${cmd}= Catenate busctl set-property xyz.openbmc_project.Watchdog
1003 ... /xyz/openbmc_project/watchdog/host0
1004 ... xyz.openbmc_project.State.Watchdog Interval t ${milliseconds}
Peter D Phan49739b22021-09-29 14:30:08 -05001005 BMC Execute Command ${cmd}
1006
George Keishingf5fec0d2021-10-08 12:38:45 -05001007
1008Stop PLDM Service And Wait
1009 [Documentation] Stop PLDM service and wait for Host to initiate reset.
1010
1011 BMC Execute Command systemctl stop pldmd.service
1012
George Keishingca76e372022-03-16 12:45:26 -05001013
1014Get BIOS Attribute
1015 [Documentation] Get the BIOS attribute for /redfish/v1/Systems/system/Bios.
1016
1017 # Python module: get_member_list(resource_path)
1018 ${systems}= Redfish_Utils.Get Member List /redfish/v1/Systems
1019 ${bios_attr_dict}= Redfish.Get Attribute ${systems[0]}/Bios Attributes
1020
1021 [Return] ${bios_attr_dict}
nagarjunb22cfb2c412022-03-15 15:49:27 +05301022
George Keishing8f610e72022-03-28 10:43:08 -05001023
1024Set BIOS Attribute
1025 [Documentation] PATCH the BIOS attribute for /redfish/v1/Systems/system/Bios.
1026 [Arguments] ${attribute_name} ${attribute_value}
1027
1028 # Description of argument(s):
1029 # attribute_name Any valid BIOS attribute.
1030 # attribute_value Valid allowed attribute values.
1031
1032 # Python module: get_member_list(resource_path)
1033 ${systems}= Redfish_Utils.Get Member List /redfish/v1/Systems
1034 Redfish.Patch ${systems[0]}/Bios/Settings body={"Attributes":{"${attribute_name}":"${attribute_value}"}}
1035
1036
nagarjunb22cfb2c412022-03-15 15:49:27 +05301037Is BMC Operational
1038 [Documentation] Check if BMC is enabled.
1039
1040 ${bmc_status} = Redfish Get BMC State
1041 Should Be Equal ${bmc_status} Enabled