blob: b959f5e816a3db0f7a1b97971ea39894dfc2d09f [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
Chris Austenb29d2e82016-06-07 12:25:35 -05005Resource ../lib/resource.txt
6Resource ../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
Michael Walsh391ba9b2017-08-24 11:36:24 -050010Library String
George Keishing30c12ff2016-09-02 10:25:29 -050011Library DateTime
12Library Process
Chris Austenb29d2e82016-06-07 12:25:35 -050013Library OperatingSystem
Michael Walsha6723f22016-11-22 11:12:01 -060014Library gen_print.py
15Library gen_robot_print.py
Michael Walsh5f3f4142017-05-22 17:09:47 -050016Library gen_cmd.py
Sunil Macd110a2017-05-23 04:14:32 -050017Library gen_robot_keyword.py
Michael Walshe53e47a2017-06-30 17:03:24 -050018Library bmc_ssh_utils.py
Michael Walshfdc5ced2017-08-17 13:15:15 -050019Library utils.py
Charles Paul Hofer35816152017-10-02 11:55:11 -050020Library var_funcs.py
Sridevi Ramesh0d88ab32017-09-21 11:07:28 -050021Library SCPLibrary WITH NAME scp
Chris Austenb29d2e82016-06-07 12:25:35 -050022
Steven Sombarf60cbcf2018-12-07 08:12:18 -060023
Chris Austenb29d2e82016-06-07 12:25:35 -050024*** Variables ***
Steven Sombar0acb3412018-01-24 09:38:42 -060025
Steven Sombar0acb3412018-01-24 09:38:42 -060026${SYSTEM_SHUTDOWN_TIME} ${5}
27
Michael Walsha6723f22016-11-22 11:12:01 -060028# Assign default value to QUIET for programs which may not define it.
29${QUIET} ${0}
Steven Sombar0acb3412018-01-24 09:38:42 -060030
Sridevi Ramesh1699d372016-12-06 00:20:22 -060031${HOST_SETTING} ${SETTINGS_URI}host0
Steven Sombar0acb3412018-01-24 09:38:42 -060032
Steven Sombar0acb3412018-01-24 09:38:42 -060033${boot_prog_method} ${EMPTY}
Michael Walshfdc5ced2017-08-17 13:15:15 -050034${power_policy_setup} ${0}
35${bmc_power_policy_method} ${EMPTY}
Michael Walshfdc5ced2017-08-17 13:15:15 -050036
Sridevi Ramesh0d88ab32017-09-21 11:07:28 -050037
Chris Austenb29d2e82016-06-07 12:25:35 -050038*** Keywords ***
Sridevi Ramesh1699d372016-12-06 00:20:22 -060039
Steven Sombar0acb3412018-01-24 09:38:42 -060040
George Keishing5e870cd2016-08-24 10:05:47 -050041Verify Ping and REST Authentication
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -050042 [Documentation] Verify ping and rest authentication.
Michael Walsha6723f22016-11-22 11:12:01 -060043 ${l_ping}= Run Keyword And Return Status
George Keishing5e870cd2016-08-24 10:05:47 -050044 ... Ping Host ${OPENBMC_HOST}
George Keishingc4d3dc02016-09-19 03:45:55 -050045 Run Keyword If '${l_ping}' == '${False}'
46 ... Fail msg=Ping Failed
George Keishing5e870cd2016-08-24 10:05:47 -050047
Michael Walsha6723f22016-11-22 11:12:01 -060048 ${l_rest}= Run Keyword And Return Status
George Keishing5e870cd2016-08-24 10:05:47 -050049 ... Initialize OpenBMC
George Keishingc4d3dc02016-09-19 03:45:55 -050050 Run Keyword If '${l_rest}' == '${False}'
51 ... Fail msg=REST Authentication Failed
George Keishing5e870cd2016-08-24 10:05:47 -050052
53 # Just to make sure the SSH is working for SCP
54 Open Connection And Log In
55 ${system} ${stderr}= Execute Command hostname return_stderr=True
56 Should Be Empty ${stderr}
57
Steven Sombar0acb3412018-01-24 09:38:42 -060058
George Keishingc4d3dc02016-09-19 03:45:55 -050059Check If BMC is Up
60 [Documentation] Wait for Host to be online. Checks every X seconds
61 ... interval for Y minutes and fails if timed out.
62 ... Default MAX timedout is 10 min, interval 10 seconds.
Gunnar Mills38032802016-12-12 13:43:40 -060063 [Arguments] ${max_timeout}=${OPENBMC_REBOOT_TIMEOUT} min
George Keishingc4d3dc02016-09-19 03:45:55 -050064 ... ${interval}=10 sec
65
Steven Sombar0acb3412018-01-24 09:38:42 -060066 # Description of argument(s):
67 # max_timeout Maximum time to wait.
68 # This should be expressed in Robot Framework's time format
69 # (e.g. "10 minutes").
70 # interfal Interval to wait between status checks.
71 # This should be expressed in Robot Framework's time format
72 # (e.g. "5 seconds").
73
George Keishingc4d3dc02016-09-19 03:45:55 -050074 Wait Until Keyword Succeeds
75 ... ${max_timeout} ${interval} Verify Ping and REST Authentication
76
George Keishingb3700812016-08-31 03:03:30 -050077
George Keishing06ae4aa2016-08-30 01:41:28 -050078Flush REST Sessions
79 [Documentation] Removes all the active session objects
80 Delete All Sessions
George Keishingb3700812016-08-31 03:03:30 -050081
Steven Sombar0acb3412018-01-24 09:38:42 -060082
Rahul Maheshwarie95622c2017-02-24 10:04:29 -060083Trigger Host Watchdog Error
George Keishing37cfa6b2017-06-15 10:25:55 -050084 [Documentation] Inject host watchdog timeout error via REST.
Rahul Maheshwarie95622c2017-02-24 10:04:29 -060085 [Arguments] ${milliseconds}=1000 ${sleep_time}=5s
Steven Sombar0acb3412018-01-24 09:38:42 -060086
Michael Walshb5839d02017-04-12 16:11:20 -050087 # Description of argument(s):
88 # milliseconds The time watchdog timer value in milliseconds (e.g. 1000 =
89 # 1 second).
Rahul Maheshwarie95622c2017-02-24 10:04:29 -060090 # sleep_time Time delay for host watchdog error to get injected.
91 # Default is 5 seconds.
92
Michael Walsh4ffd1a12018-03-14 10:35:44 -050093 ${data}= Create Dictionary
94 ... data=xyz.openbmc_project.State.Watchdog.Action.PowerCycle
95 ${status} ${result}= Run Keyword And Ignore Error
96 ... Read Attribute ${HOST_WATCHDOG_URI} ExpireAction
97 Run Keyword If '${status}' == 'PASS'
98 ... Write Attribute ${HOST_WATCHDOG_URI} ExpireAction data=${data}
George Keishing37cfa6b2017-06-15 10:25:55 -050099
100 ${data}= Create Dictionary data=${milliseconds}
Michael Walsh4ffd1a12018-03-14 10:35:44 -0500101 Write Attribute ${HOST_WATCHDOG_URI} Interval data=${data}
102
103 ${data}= Create Dictionary data=${True}
104 Write Attribute ${HOST_WATCHDOG_URI} Enabled data=${data}
George Keishing37cfa6b2017-06-15 10:25:55 -0500105
Rahul Maheshwarie95622c2017-02-24 10:04:29 -0600106 Sleep ${sleep_time}
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500107
Steven Sombar0acb3412018-01-24 09:38:42 -0600108
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500109Login To OS Host
Steven Sombar0acb3412018-01-24 09:38:42 -0600110 [Documentation] Login to OS Host and return the Login response code.
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500111 [Arguments] ${os_host}=${OS_HOST} ${os_username}=${OS_USERNAME}
112 ... ${os_password}=${OS_PASSWORD}
Steven Sombar0acb3412018-01-24 09:38:42 -0600113
Gunnar Mills28e403b2017-10-25 16:16:38 -0500114 # Description of arguments:
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500115 # ${os_host} IP address of the OS Host.
116 # ${os_username} OS Host Login user name.
117 # ${os_password} OS Host Login passwrd.
118
Rahul Maheshwarid1f45f22018-10-26 05:16:39 -0500119 REST Power On stack_mode=skip quiet=1
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500120
George Keishing3f223b82017-06-28 03:50:35 -0500121 SSHLibrary.Open Connection ${os_host}
Sridevi Rameshea36b412017-03-09 04:08:02 -0600122 ${resp}= Login ${os_username} ${os_password}
123 [Return] ${resp}
Prashanth Katti884ee062017-03-16 05:05:03 -0500124
Steven Sombar0acb3412018-01-24 09:38:42 -0600125
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600126Initiate Auto Reboot
127 [Documentation] Initiate an auto reboot.
128 [Arguments] ${milliseconds}=5000
Sweta Potthurie5a9fc72017-05-03 07:02:46 -0500129
130 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600131 # milliseconds The number of milliseconds for the watchdog timer.
Sweta Potthurie5a9fc72017-05-03 07:02:46 -0500132
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600133 # Set the auto reboot policy.
134 Set Auto Reboot ${1}
135 # Set the watchdog timer.
136 Trigger Host Watchdog Error ${milliseconds}
137
138
139Initiate OS Host Reboot
140 [Documentation] Initiate an OS reboot.
141 [Arguments] ${os_host}=${OS_HOST} ${os_username}=${OS_USERNAME}
142 ... ${os_password}=${OS_PASSWORD}
143
144 # Description of argument(s):
145 # os_host The host name or IP address of the OS.
146 # os_username The username to be used to sign in to the OS.
147 # os_password The password to be used to sign in to the OS.
148
149 ${cmd_buf}= Run Keyword If '${os_username}' == 'root'
150 ... Set Variable reboot
151 ... ELSE
152 ... Set Variable echo ${os_password} | sudo -S reboot
153
154 ${output} ${stderr} ${rc}= OS Execute Command
155 ... ${cmd_buf} fork=${1}
156
157
158Initiate OS Host Power Off
159 [Documentation] Initiate an OS reboot.
160 [Arguments] ${os_host}=${OS_HOST} ${os_username}=${OS_USERNAME}
161 ... ${os_password}=${OS_PASSWORD} ${hard}=${0}
162
163 # Description of argument(s):
164 # os_host The DNS name or IP of the OS.
165 # os_username The username to be used to sign in to the OS.
166 # os_password The password to be used to sign in to the OS.
167 # hard Indicates whether to do a hard vs. soft power off.
168
169 ${time_string}= Run Keyword If ${hard} Set Variable ${SPACE}now
170 ... ELSE Set Variable ${EMPTY}
171
172 ${cmd_buf}= Run Keyword If '${os_username}' == 'root'
173 ... Set Variable shutdown${time_string}
174 ... ELSE
175 ... Set Variable echo ${os_password} | sudo -S shutdown${time_string}
176
177 ${output} ${stderr} ${rc}= OS Execute Command
178 ... ${cmd_buf} fork=${1}
Sweta Potthurie5a9fc72017-05-03 07:02:46 -0500179
George Keishing3987a1e2017-09-20 09:13:02 -0500180
Steven Sombar5f3af442018-02-14 08:30:15 -0600181Set System LED State
182 [Documentation] Set given system LED via REST.
183 [Arguments] ${led_name} ${led_state}
184 # Description of argument(s):
185 # led_name System LED name (e.g. heartbeat, identify, beep).
186 # led_state LED state to be set (e.g. On, Off).
187
188 ${args}= Create Dictionary
189 ... data=xyz.openbmc_project.Led.Physical.Action.${led_state}
190 Write Attribute ${LED_PHYSICAL_URI}${led_name} State data=${args}
191
192 Verify LED State ${led_name} ${led_state}
193
194
Steven Sombaraaf72c42017-09-05 12:02:00 -0500195Read Turbo Setting Via REST
196 [Documentation] Return turbo setting via REST.
Steven Sombarea79a492018-04-18 11:14:57 -0500197 # Returns 1 if TurboAllowed, 0 if not.
Steven Sombaraaf72c42017-09-05 12:02:00 -0500198
Steven Sombarea79a492018-04-18 11:14:57 -0500199 ${turbo_setting}= Read Attribute
200 ... ${CONTROL_HOST_URI}turbo_allowed TurboAllowed
201 [Return] ${turbo_setting}
202
Steven Sombaraaf72c42017-09-05 12:02:00 -0500203
Steven Sombaraaf72c42017-09-05 12:02:00 -0500204Set Turbo Setting Via REST
205 [Documentation] Set turbo setting via REST.
Steven Sombar80bc8592018-04-24 11:44:53 -0500206 [Arguments] ${setting} ${verify}=${False}
Steven Sombar0acb3412018-01-24 09:38:42 -0600207
Steven Sombaraaf72c42017-09-05 12:02:00 -0500208 # Description of argument(s):
Steven Sombar80bc8592018-04-24 11:44:53 -0500209 # setting State to set TurboAllowed, 1=allowed, 0=not allowed.
210 # verify If True, read the TurboAllowed setting to confirm.
Steven Sombaraaf72c42017-09-05 12:02:00 -0500211
Steven Sombarea79a492018-04-18 11:14:57 -0500212 ${data}= Create Dictionary data=${${setting}}
Steven Sombar80bc8592018-04-24 11:44:53 -0500213 Write Attribute ${CONTROL_HOST_URI}turbo_allowed TurboAllowed
214 ... verify=${verify} data=${data}
George Keishingef74a8c2017-10-20 10:23:52 -0500215
Steven Sombar0acb3412018-01-24 09:38:42 -0600216
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600217Set REST Logging Policy
218 [Documentation] Enable or disable REST logging setting.
219 [Arguments] ${policy_setting}=${True}
George Keishingef74a8c2017-10-20 10:23:52 -0500220
221 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600222 # policy_setting The policy setting value which can be either
223 # True or False.
George Keishingef74a8c2017-10-20 10:23:52 -0500224
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600225 ${log_dict}= Create Dictionary data=${policy_setting}
226 Write Attribute ${BMC_LOGGING_URI}${/}rest_api_logs Enabled
227 ... data=${log_dict} verify=${1} expected_value=${policy_setting}
Sridevi Ramesh0d88ab32017-09-21 11:07:28 -0500228
Steven Sombar0acb3412018-01-24 09:38:42 -0600229
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600230Old Get Boot Progress
231 [Documentation] Get the boot progress the old way (via org location).
232 [Arguments] ${quiet}=${QUIET}
George Keishing034902d2017-11-10 13:15:38 -0600233
234 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600235 # quiet Indicates whether this keyword should run without any output to
236 # the console.
237
238 ${state}= Read Attribute ${OPENBMC_BASE_URI}sensors/host/BootProgress
239 ... value quiet=${quiet}
240
241 [Return] ${state}
242
243
244Set Boot Progress Method
245 [Documentation] Set the boot_prog_method to either 'Old' or 'New'.
246
247 # The boot progress data has moved from an 'org' location to an 'xyz'
248 # location. This keyword will determine whether the new method of getting
249 # the boot progress is valid and will set the global boot_prog_method
250 # variable accordingly. If boot_prog_method is already set (either by a
251 # prior call to this function or via a -v parm), this keyword will simply
252 # return.
253
254 # Note: There are interim builds that contain boot_progress in both the
255 # old and the new location values. It is nearly impossible for this
256 # keyword to determine whether the old boot_progress or the new one is
257 # active. When using such builds where the old boot_progress is active,
258 # the only recourse users will have is that they may specify
259 # -v boot_prog_method:Old to force old behavior on such builds.
260
261 Run Keyword If '${boot_prog_method}' != '${EMPTY}' Return From Keyword
262
263 ${new_status} ${new_value}= Run Keyword And Ignore Error
264 ... New Get Boot Progress
265 # If the new style read fails, the method must necessarily be "Old".
266 Run Keyword If '${new_status}' == 'PASS'
267 ... Run Keywords
268 ... Set Global Variable ${boot_prog_method} New AND
269 ... Rqpvars boot_prog_method AND
270 ... Return From Keyword
271
272 # Default method is "Old".
273 Set Global Variable ${boot_prog_method} Old
274 Rqpvars boot_prog_method
275
276
277Initiate Power On
278 [Documentation] Initiates the power on and waits until the Is Power On
279 ... keyword returns that the power state has switched to on.
280 [Arguments] ${wait}=${1}
281
282 # Description of argument(s):
283 # wait Indicates whether to wait for a powered on state after issuing
284 # the power on command.
285
286 @{arglist}= Create List
287 ${args}= Create Dictionary data=@{arglist}
288 ${resp}= Call Method ${OPENBMC_BASE_URI}control/chassis0/ powerOn
289 ... data=${args}
290 should be equal as strings ${resp.status_code} ${HTTP_OK}
291
292 # Does caller want to wait for power on status?
293 Run Keyword If '${wait}' == '${0}' Return From Keyword
294 Wait Until Keyword Succeeds 3 min 10 sec Is Power On
295
296
297Initiate Power Off
298 [Documentation] Initiates the power off and waits until the Is Power Off
299 ... keyword returns that the power state has switched to off.
300
301 @{arglist}= Create List
302 ${args}= Create Dictionary data=@{arglist}
303 ${resp}= Call Method ${OPENBMC_BASE_URI}control/chassis0/ powerOff
304 ... data=${args}
305 should be equal as strings ${resp.status_code} ${HTTP_OK}
306 Wait Until Keyword Succeeds 1 min 10 sec Is Power Off
307
308
309Get Boot Progress
310 [Documentation] Get the boot progress and return it.
311 [Arguments] ${quiet}=${QUIET}
312
313 # Description of argument(s):
314 # quiet Indicates whether this keyword should run without any output to
315 # the console.
316
317 Set Boot Progress Method
318 ${state}= Run Keyword If '${boot_prog_method}' == 'New'
319 ... New Get Boot Progress quiet=${quiet}
320 ... ELSE
321 ... Old Get Boot Progress quiet=${quiet}
322
323 [Return] ${state}
324
325
326New Get Boot Progress
327 [Documentation] Get the boot progress the new way (via xyz location).
328 [Arguments] ${quiet}=${QUIET}
329
330 # Description of argument(s):
331 # quiet Indicates whether this keyword should run without any output to
332 # the console.
333
334 ${state}= Read Attribute ${HOST_STATE_URI} BootProgress quiet=${quiet}
335
336 [Return] ${state.rsplit('.', 1)[1]}
337
338
339New Get Power Policy
340 [Documentation] Returns the BMC power policy (new method).
341 ${currentPolicy}= Read Attribute ${POWER_RESTORE_URI} PowerRestorePolicy
342
343 [Return] ${currentPolicy}
344
345
346Old Get Power Policy
347 [Documentation] Returns the BMC power policy (old method).
348 ${currentPolicy}= Read Attribute ${HOST_SETTING} power_policy
349
350 [Return] ${currentPolicy}
351
352
353Get Auto Reboot
354 [Documentation] Returns auto reboot setting.
355 ${setting}= Read Attribute ${CONTROL_HOST_URI}/auto_reboot AutoReboot
356
357 [Return] ${setting}
358
359
360Trigger Warm Reset
361 [Documentation] Initiate a warm reset.
362
363 log to console "Triggering warm reset"
364 ${data}= create dictionary data=@{EMPTY}
365 ${resp}= openbmc post request
366 ... ${OPENBMC_BASE_URI}control/bmc0/action/warmReset data=${data}
367 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
368 ${session_active}= Check If warmReset is Initiated
369 Run Keyword If '${session_active}' == '${True}'
370 ... Fail msg=warm reset didn't occur
371
372 Sleep ${SYSTEM_SHUTDOWN_TIME}min
373 Check If BMC Is Up
374
375
376Get Power State
377 [Documentation] Returns the power state as an integer. Either 0 or 1.
378 [Arguments] ${quiet}=${QUIET}
379
380 # Description of argument(s):
381 # quiet Indicates whether this keyword should run without any output to
382 # the console.
383
384 @{arglist}= Create List
385 ${args}= Create Dictionary data=@{arglist}
386
387 ${resp}= Call Method ${OPENBMC_BASE_URI}control/chassis0/ getPowerState
388 ... data=${args} quiet=${quiet}
389 Should be equal as strings ${resp.status_code} ${HTTP_OK}
390 ${content}= to json ${resp.content}
391
392 [Return] ${content["data"]}
393
394
395Clear BMC Gard Record
396 [Documentation] Clear gard records from the system.
397
398 @{arglist}= Create List
399 ${args}= Create Dictionary data=@{arglist}
400 ${resp}= Call Method
401 ... ${OPENPOWER_CONTROL}gard Reset data=${args}
402 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
403
404
405Flash PNOR
406 [Documentation] Calls flash bios update method to flash PNOR image
407 [Arguments] ${pnor_image}
408
409 # Description of argument(s):
410 # pnor_image The filename and path of the PNOR image
411 # (e.g. "/home/image/zaius.pnor").
412
413 @{arglist}= Create List ${pnor_image}
414 ${args}= Create Dictionary data=@{arglist}
415 ${resp}= Call Method /org/openbmc/control/flash/bios/ update
416 ... data=${args}
417 should be equal as strings ${resp.status_code} ${HTTP_OK}
418 Wait Until Keyword Succeeds 2 min 10 sec Is PNOR Flashing
419
420
421Get Flash BIOS Status
422 [Documentation] Returns the status of the flash BIOS API as a string. For
423 ... example 'Flashing', 'Flash Done', etc
424 ${data}= Read Properties /org/openbmc/control/flash/bios
425 [Return] ${data['status']}
426
427
428Is PNOR Flashing
429 [Documentation] Get BIOS 'Flashing' status. This indicates that PNOR
430 ... flashing has started.
431 ${status}= Get Flash BIOS Status
432 Should Contain ${status} Flashing
433
434
435Is PNOR Flash Done
436 [Documentation] Get BIOS 'Flash Done' status. This indicates that the
437 ... PNOR flashing has completed.
438 ${status}= Get Flash BIOS Status
439 should be equal as strings ${status} Flash Done
440
441
442Create OS Console File Path
443 [Documentation] Create OS console file path name and return it.
444 [Arguments] ${log_file_path}=${EMPTY}
445
446 # Description of arguments:
447 # file_path The caller's candidate value. If this value is ${EMPTY}, this
448 # keyword will compose a file path name. Otherwise, this
449 # keyword will use the caller's file_path value. In either
450 # case, the value will be returned.
451
452 ${status}= Run Keyword And Return Status Variable Should Exist
453 ... ${TEST_NAME}
454
455 ${default_file_path}= Set Variable If ${status} == ${TRUE}
456 ... /tmp/${OPENBMC_HOST}_${TEST_NAME.replace(' ', '')}_os_console.txt
457 ... /tmp/${OPENBMC_HOST}_os_console.txt
458
459 ${log_file_path}= Set Variable If '${log_file_path}' == '${EMPTY}'
460 ... ${default_file_path} ${log_file_path}
461
462 [Return] ${log_file_path}
463
464
465Get Endpoint Paths
466 [Documentation] Returns all url paths ending with given endpoint
467 ... Example:
468 ... Given the following endpoint: cpu
469 ... This keyword will return: list of all urls ending with
470 ... cpu -
471 ... /org/openbmc/inventory/system/chassis/motherboard/cpu0,
472 ... /org/openbmc/inventory/system/chassis/motherboard/cpu1
473 [Arguments] ${path} ${endpoint}
474
475 # Description of arguments:
476 # path URL path for enumeration.
477 # endpoint Endpoint string (url path ending).
478
479 ${resp}= Read Properties ${path}/enumerate timeout=30
480 Log Dictionary ${resp}
481
482 ${list}= Get Dictionary Keys ${resp}
483 # For a given string, look for prefix and suffix for matching expression.
484 # Start of string followed by zero or more of any character followed by
485 # any digit or lower case character.
486 ${resp}= Get Matches ${list} regexp=^.*[0-9a-z_].${endpoint}\[0-9a-z]*$
487
488 [Return] ${resp}
489
490
491Set BMC Power Policy
492 [Documentation] Set the given BMC power policy.
493 [Arguments] ${policy}
494
495 # Note that this function will translate the old style "RESTORE_LAST_STATE"
496 # policy to the new style "xyz.openbmc_project.Control.Power.RestorePolicy.
497 # Policy.Restore" for you.
498
499 # Description of argument(s):
500 # policy Power restore policy (e.g "RESTORE_LAST_STATE",
501 # ${RESTORE_LAST_STATE}).
502
503 # Set the bmc_power_policy_method to either 'Old' or 'New'.
504 Set Power Policy Method
505 # This translation helps bridge between old and new method for calling.
506 ${policy}= Translate Power Policy Value ${policy}
507 # Run the appropriate keyword.
508 Run Key ${bmc_power_policy_method} Set Power Policy \ ${policy}
509 ${currentPolicy}= Get System Power Policy
510 Should Be Equal ${currentPolicy} ${policy}
511
512
513Delete Error Logs
514 [Documentation] Delete error logs.
515
516 # Check if error logs entries exist, if not return.
517 ${resp}= OpenBMC Get Request ${BMC_LOGGING_ENTRY}${/}list quiet=${1}
518 Return From Keyword If ${resp.status_code} == ${HTTP_NOT_FOUND}
519
520 # Get the list of error logs entries and delete them all.
521 ${elog_entries}= Get URL List ${BMC_LOGGING_ENTRY}
522 :FOR ${entry} IN @{elog_entries}
523 \ Delete Error Log Entry ${entry}
524
525
526Delete All Error Logs
527 [Documentation] Delete all error log entries using "DeleteAll" interface.
528
529 ${data}= Create Dictionary data=@{EMPTY}
530 ${resp}= Openbmc Post Request ${BMC_LOGGING_URI}action/DeleteAll
531 ... data=${data}
532 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
533
534
535Get Elog URL List
536 [Documentation] Return error log entry list of URLs.
537
538 ${url_list}= Read Properties /xyz/openbmc_project/logging/entry/
539 Sort List ${url_list}
540 [Return] ${url_list}
541
542
543Get BMC Flash Chip Boot Side
544 [Documentation] Return the BMC flash chip boot side.
George Keishing034902d2017-11-10 13:15:38 -0600545
546 # Example:
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600547 # 0 - indicates chip select is current side.
548 # 32 - indicates chip select is alternate side.
George Keishing034902d2017-11-10 13:15:38 -0600549
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600550 ${boot_side} ${stderr} ${rc}= BMC Execute Command
551 ... cat /sys/class/watchdog/watchdog1/bootstatus
552
553 [Return] ${boot_side}
554
555
556Update Root Password
557 [Documentation] Update system "root" user password.
558 [Arguments] ${openbmc_password}=${OPENBMC_PASSWORD}
559
560 # Description of argument(s):
561 # openbmc_password The root password for the open BMC system.
562
563 @{password}= Create List ${openbmc_password}
564 ${data}= Create Dictionary data=@{password}
565
566 ${headers}= Create Dictionary Content-Type=application/json
567 ${resp}= Post Request openbmc ${BMC_USER_URI}root/action/SetPassword
568 ... data=${data} headers=${headers}
569 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
570 ... msg=Updating the new root password failed, RC=${resp.status_code}.
Sweta Potthuri7d3af3c2018-01-29 03:07:07 -0600571
Sweta Potthurif39022d2018-02-06 03:40:07 -0600572
Sweta Potthuri7d3af3c2018-01-29 03:07:07 -0600573Watchdog Object Should Exist
574 [Documentation] Check that watchdog object exists.
575
576 ${resp}= OpenBMC Get Request ${WATCHDOG_URI}host0
577 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
578 ... msg=Expected watchdog object does not exist.
Sweta Potthurif39022d2018-02-06 03:40:07 -0600579
580
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600581Get System LED State
582 [Documentation] Return the state of given system LED.
583 [Arguments] ${led_name}
Sweta Potthurif39022d2018-02-06 03:40:07 -0600584
585 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600586 # led_name System LED name (e.g. heartbeat, identify, beep).
Sweta Potthurif39022d2018-02-06 03:40:07 -0600587
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600588 ${state}= Read Attribute ${LED_PHYSICAL_URI}${led_name} State
589 [Return] ${state.rsplit('.', 1)[1]}
George Keishingb9f407b2018-02-20 00:07:46 -0600590
591
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600592Verify LED State
593 [Documentation] Checks if LED is in given state.
594 [Arguments] ${led_name} ${led_state}
595 # Description of argument(s):
596 # led_name System LED name (e.g. heartbeat, identify, beep).
597 # led_state LED state to be verified (e.g. On, Off).
George Keishingb9f407b2018-02-20 00:07:46 -0600598
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600599 ${state}= Get System LED State ${led_name}
600 Should Be Equal ${state} ${led_state}
George Keishingb9f407b2018-02-20 00:07:46 -0600601
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600602
603Get LED State XYZ
604 [Documentation] Returns state of given LED.
605 [Arguments] ${led_name}
606
607 # Description of argument(s):
608 # led_name Name of LED.
609
610 ${state}= Read Attribute ${LED_GROUPS_URI}${led_name} Asserted
611 # Returns the state of the LED, either On or Off.
612 [Return] ${state}
George Keishingb9f407b2018-02-20 00:07:46 -0600613
George Keishing78ce8dc2018-03-30 11:49:06 -0500614
615Verify Identify LED State
616 [Documentation] Verify the identify LED state
617 ... matches caller's expectations.
618 [Arguments] ${expected_state}
619
620 # Description of argument(s):
621 # expected_state The LED state expected by the caller ("Blink" or "Off").
622
623 ${resp}= Read Attribute ${LED_PHYSICAL_URI}/front_id State
624 Should Be Equal ${resp}
625 ... xyz.openbmc_project.Led.Physical.Action.${expected_state}
626 ... msg=Unexpected LED state.
627
628 ${resp}= Read Attribute ${LED_PHYSICAL_URI}/rear_id State
629 Should Be Equal ${resp}
630 ... xyz.openbmc_project.Led.Physical.Action.${expected_state}
631 ... msg=Unexpected LED state.
632
Sweta Potthuri39255032018-03-28 10:12:14 -0500633
634Verify The Attribute
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -0500635 [Documentation] Verify the given attribute.
Sweta Potthuri39255032018-03-28 10:12:14 -0500636 [Arguments] ${uri} ${attribute_name} ${attribute_value}
637
638 # Description of argument(s):
639 # uri URI path
640 # (e.g. "/xyz/openbmc_project/control/host0/TPMEnable").
641 # attribute_name Name of attribute to be verified (e.g. "TPMEnable").
642 # attribute_value The expected value of attribute (e.g. "1", "0", etc.)
643
644 ${output}= Read Attribute ${uri} ${attribute_name}
645 Should Be Equal ${attribute_value} ${output}
646 ... msg=Attribute "${attribute_name} does not have the expected value.
George Keishingcf0d7772018-05-04 08:22:50 -0500647
648
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600649New Set Power Policy
650 [Documentation] Set the given BMC power policy (new method).
651 [Arguments] ${policy}
George Keishingb4adfc72018-10-26 09:39:32 -0500652
653 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600654 # policy Power restore policy (e.g. ${ALWAYS_POWER_OFF}).
George Keishingc5fef582018-07-18 08:41:28 -0500655
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600656 ${valueDict}= Create Dictionary data=${policy}
657 Write Attribute
658 ... ${POWER_RESTORE_URI} PowerRestorePolicy data=${valueDict}
George Keishing216e5842018-08-31 14:58:15 -0500659
660
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600661Old Set Power Policy
662 [Documentation] Set the given BMC power policy (old method).
663 [Arguments] ${policy}
George Keishing3c004dc2018-10-10 07:16:47 -0500664
665 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600666 # policy Power restore policy (e.g. "ALWAYS_POWER_OFF").
667
668 ${valueDict}= create dictionary data=${policy}
669 Write Attribute ${HOST_SETTING} power_policy data=${valueDict}
George Keishing3c004dc2018-10-10 07:16:47 -0500670
671
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600672Set Auto Reboot
673 [Documentation] Set the given auto reboot setting.
674 [Arguments] ${setting}
George Keishing3c004dc2018-10-10 07:16:47 -0500675
676 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600677 # setting The reboot setting, 1 for enabling and 0 for disabling.
George Keishing3c004dc2018-10-10 07:16:47 -0500678
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600679 ${valueDict}= Set Variable ${setting}
680 ${data}= Create Dictionary data=${valueDict}
681 Write Attribute ${CONTROL_HOST_URI}/auto_reboot AutoReboot data=${data}
682 ${current_setting}= Get Auto Reboot
683 Should Be Equal As Integers ${current_setting} ${setting}
George Keishing3c004dc2018-10-10 07:16:47 -0500684
George Keishingc25c55d2018-10-30 02:23:44 -0500685
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600686Set Control Boot Mode
687 [Documentation] Set given boot mode on the boot object path attribute.
688 [Arguments] ${boot_path} ${boot_mode}
George Keishingc25c55d2018-10-30 02:23:44 -0500689
690 # Description of argument(s):
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600691 # boot_path Boot object path.
692 # Example:
693 # /xyz/openbmc_project/control/host0/boot
694 # /xyz/openbmc_project/control/host0/boot/one_time
695 # boot_mode Boot mode which need to be set.
696 # Example:
697 # "xyz.openbmc_project.Control.Boot.Mode.Modes.Regular"
George Keishingc25c55d2018-10-30 02:23:44 -0500698
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600699 ${valueDict}= Create Dictionary data=${boot_mode}
700 Write Attribute ${boot_path} BootMode data=${valueDict}
George Keishingc25c55d2018-10-30 02:23:44 -0500701
Steven Sombarf60cbcf2018-12-07 08:12:18 -0600702
703Is Power On
704 [Documentation] Verify that the BMC chassis state is on.
705 ${state}= Get Power State
706 Should be equal ${state} ${1}
707
708
709Is Power Off
710 [Documentation] Verify that the BMC chassis state is off.
711 ${state}= Get Power State
712 Should be equal ${state} ${0}