xref: /openbmc/openbmc-test-automation/lib/utils.robot (revision f329f73269a3a4e50d12d1681596447e7fb3e6cd)
1*** Settings ***
2
3Documentation  Utilities for Robot keywords that use REST.
4
5Resource                ../lib/resource.txt
6Resource                ../lib/rest_client.robot
7Resource                ../lib/connection_client.robot
8Resource                ../lib/boot_utils.robot
9Resource                ../lib/common_utils.robot
10Library                 String
11Library                 DateTime
12Library                 Process
13Library                 OperatingSystem
14Library                 gen_print.py
15Library                 gen_robot_print.py
16Library                 gen_cmd.py
17Library                 gen_robot_keyword.py
18Library                 bmc_ssh_utils.py
19Library                 utils.py
20Library                 var_funcs.py
21Library                 SCPLibrary  WITH NAME  scp
22
23
24*** Variables ***
25
26${SYSTEM_SHUTDOWN_TIME}   ${5}
27
28# Assign default value to QUIET for programs which may not define it.
29${QUIET}  ${0}
30
31${HOST_SETTING}    ${SETTINGS_URI}host0
32
33${boot_prog_method}               ${EMPTY}
34${power_policy_setup}             ${0}
35${bmc_power_policy_method}        ${EMPTY}
36
37
38*** Keywords ***
39
40
41Verify Ping and REST Authentication
42    [Documentation]  Verify ping and rest authentication.
43    ${l_ping}=   Run Keyword And Return Status
44    ...    Ping Host  ${OPENBMC_HOST}
45    Run Keyword If  '${l_ping}' == '${False}'
46    ...    Fail   msg=Ping Failed
47
48    ${l_rest}=   Run Keyword And Return Status
49    ...    Initialize OpenBMC
50    Run Keyword If  '${l_rest}' == '${False}'
51    ...    Fail   msg=REST Authentication Failed
52
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
58
59Check 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.
63    [Arguments]      ${max_timeout}=${OPENBMC_REBOOT_TIMEOUT} min
64    ...              ${interval}=10 sec
65
66    # 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
74    Wait Until Keyword Succeeds
75    ...   ${max_timeout}  ${interval}   Verify Ping and REST Authentication
76
77
78Flush REST Sessions
79    [Documentation]   Removes all the active session objects
80    Delete All Sessions
81
82
83Trigger Host Watchdog Error
84    [Documentation]  Inject host watchdog timeout error via REST.
85    [Arguments]  ${milliseconds}=1000  ${sleep_time}=5s
86
87    # Description of argument(s):
88    # milliseconds  The time watchdog timer value in milliseconds (e.g. 1000 =
89    #               1 second).
90    # sleep_time    Time delay for host watchdog error to get injected.
91    #               Default is 5 seconds.
92
93    ${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}
99
100    ${data}=  Create Dictionary  data=${milliseconds}
101    Write Attribute  ${HOST_WATCHDOG_URI}  Interval  data=${data}
102
103    ${data}=  Create Dictionary  data=${True}
104    Write Attribute  ${HOST_WATCHDOG_URI}  Enabled  data=${data}
105
106    Sleep  ${sleep_time}
107
108
109Login To OS Host
110    [Documentation]  Login to OS Host and return the Login response code.
111    [Arguments]  ${os_host}=${OS_HOST}  ${os_username}=${OS_USERNAME}
112    ...          ${os_password}=${OS_PASSWORD}
113
114    # Description of arguments:
115    # ${os_host} IP address of the OS Host.
116    # ${os_username}  OS Host Login user name.
117    # ${os_password}  OS Host Login passwrd.
118
119    REST Power On  stack_mode=skip  quiet=1
120
121    SSHLibrary.Open Connection  ${os_host}
122    ${resp}=  Login  ${os_username}  ${os_password}
123    [Return]  ${resp}
124
125
126Initiate Auto Reboot
127    [Documentation]  Initiate an auto reboot.
128    [Arguments]  ${milliseconds}=5000
129
130    # Description of argument(s):
131    # milliseconds  The number of milliseconds for the watchdog timer.
132
133    # 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}
179
180
181Set 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
195Read Turbo Setting Via REST
196    [Documentation]  Return turbo setting via REST.
197    # Returns 1 if TurboAllowed, 0 if not.
198
199    ${turbo_setting}=  Read Attribute
200    ...  ${CONTROL_HOST_URI}turbo_allowed  TurboAllowed
201    [Return]  ${turbo_setting}
202
203
204Set Turbo Setting Via REST
205    [Documentation]  Set turbo setting via REST.
206    [Arguments]  ${setting}  ${verify}=${False}
207
208    # Description of argument(s):
209    # setting  State to set TurboAllowed, 1=allowed, 0=not allowed.
210    # verify   If True, read the TurboAllowed setting to confirm.
211
212    ${data}=  Create Dictionary  data=${${setting}}
213    Write Attribute  ${CONTROL_HOST_URI}turbo_allowed  TurboAllowed
214    ...  verify=${verify}  data=${data}
215
216
217Set REST Logging Policy
218    [Documentation]  Enable or disable REST logging setting.
219    [Arguments]  ${policy_setting}=${True}
220
221    # Description of argument(s):
222    # policy_setting    The policy setting value which can be either
223    #                   True or False.
224
225    ${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}
228
229
230Old Get Boot Progress
231    [Documentation]  Get the boot progress the old way (via org location).
232    [Arguments]  ${quiet}=${QUIET}
233
234    # Description of argument(s):
235    # 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.
545
546    # Example:
547    # 0  - indicates chip select is current side.
548    # 32 - indicates chip select is alternate side.
549
550    ${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}.
571
572
573Watchdog 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.
579
580
581Get System LED State
582    [Documentation]  Return the state of given system LED.
583    [Arguments]  ${led_name}
584
585    # Description of argument(s):
586    # led_name     System LED name (e.g. heartbeat, identify, beep).
587
588    ${state}=  Read Attribute  ${LED_PHYSICAL_URI}${led_name}  State
589    [Return]  ${state.rsplit('.', 1)[1]}
590
591
592Verify 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).
598
599    ${state}=  Get System LED State  ${led_name}
600    Should Be Equal  ${state}  ${led_state}
601
602
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}
613
614
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
633
634Verify The Attribute
635    [Documentation]  Verify the given attribute.
636    [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.
647
648
649New Set Power Policy
650    [Documentation]   Set the given BMC power policy (new method).
651    [Arguments]   ${policy}
652
653    # Description of argument(s):
654    # policy    Power restore policy (e.g. ${ALWAYS_POWER_OFF}).
655
656    ${valueDict}=  Create Dictionary  data=${policy}
657    Write Attribute
658    ...  ${POWER_RESTORE_URI}  PowerRestorePolicy  data=${valueDict}
659
660
661Old Set Power Policy
662    [Documentation]   Set the given BMC power policy (old method).
663    [Arguments]   ${policy}
664
665    # Description of argument(s):
666    # 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}
670
671
672Set Auto Reboot
673    [Documentation]  Set the given auto reboot setting.
674    [Arguments]  ${setting}
675
676    # Description of argument(s):
677    # setting    The reboot setting, 1 for enabling and 0 for disabling.
678
679    ${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}
684
685
686Set Control Boot Mode
687    [Documentation]  Set given boot mode on the boot object path attribute.
688    [Arguments]  ${boot_path}  ${boot_mode}
689
690    # Description of argument(s):
691    # 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"
698
699    ${valueDict}=  Create Dictionary  data=${boot_mode}
700    Write Attribute  ${boot_path}  BootMode  data=${valueDict}
701
702
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}
713