xref: /openbmc/openbmc-test-automation/lib/utils.robot (revision 2b70ead659b432acb0c40a3d9267e05ddff851a4)
1*** Settings ***
2Resource                ../lib/resource.txt
3Resource                ../lib/rest_client.robot
4Resource                ../lib/connection_client.robot
5Library                 DateTime
6Library                 Process
7Library                 OperatingSystem
8Library                 gen_print.py
9Library                 gen_robot_print.py
10
11*** Variables ***
12${SYSTEM_SHUTDOWN_TIME}       ${5}
13${dbuscmdBase}
14...  dbus-send --system --print-reply --dest=${OPENBMC_BASE_DBUS}.settings.Host
15${dbuscmdGet}
16...  ${SETTINGS_URI}host0  org.freedesktop.DBus.Properties.Get
17# Enable when ready with openbmc/openbmc-test-automation#203
18#${dbuscmdString}=  string:"xyz.openbmc_project.settings.Host" string:
19${dbuscmdString}=   string:"org.openbmc.settings.Host" string:
20
21# Assign default value to QUIET for programs which may not define it.
22${QUIET}  ${0}
23${bmc_mem_free_cmd}=   free | tr -s ' ' | sed '/^Mem/!d' | cut -d" " -f4
24${bmc_mem_total_cmd}=   free | tr -s ' ' | sed '/^Mem/!d' | cut -d" " -f2
25${bmc_cpu_usage_cmd}=   top -n 1  | grep CPU: | cut -c 7-9
26${HOST_SETTING}    ${SETTINGS_URI}host0
27# /run/initramfs/ro associate filesystem  should be 100% full always
28${bmc_file_system_usage_cmd}=
29...  df -h | grep -v /run/initramfs/ro | cut -c 52-54 | grep 100 | wc -l
30
31${BOOT_TIME}     ${0}
32${BOOT_COUNT}    ${0}
33${devicetree_base}  /sys/firmware/devicetree/base/model
34
35*** Keywords ***
36
37Get BMC System Model
38    [Documentation]  Get the BMC model from the device tree.
39
40    ${bmc_model}  ${stderr}=  Execute Command  cat ${devicetree_base} | cut -f 1
41    ...  -d ${SPACE}  return_stderr=True
42    Should Be Empty  ${stderr}
43    Should Not Be Empty  ${bmc_model}
44    [Return]  ${bmc_model}
45
46Verify BMC System Model
47    [Documentation]  Verify the BMC model with ${OPENBMC_MODEL}.
48    [Arguments]  ${bmc_model}
49
50    ${tmp_bmc_model}=  Fetch From Right  ${OPENBMC_MODEL}  /
51    ${tmp_bmc_model}=  Fetch From Left  ${tmp_bmc_model}  .
52    ${ret}=  Run Keyword And Return Status  Should Contain  ${bmc_model}
53    ...  ${tmp_bmc_model}  ignore_case=True
54    [Return]  ${ret}
55
56Wait For Host To Ping
57    [Arguments]  ${host}  ${timeout}=${OPENBMC_REBOOT_TIMEOUT}min
58    ...          ${interval}=5 sec
59
60    # host      The DNS name or IP of the host to ping.
61    # timeout   The amount of time after which attempts to ping cease.
62    # interval  The amount of time in between attempts to ping.
63
64    Wait Until Keyword Succeeds  ${timeout}  ${interval}  Ping Host  ${host}
65
66Ping Host
67    [Arguments]     ${host}
68    Should Not Be Empty    ${host}   msg=No host provided
69    ${RC}   ${output}=     Run and return RC and Output    ping -c 4 ${host}
70    Log     RC: ${RC}\nOutput:\n${output}
71    Should be equal     ${RC}   ${0}
72
73Get Boot Progress
74    [Arguments]  ${quiet}=${QUIET}
75
76    ${state}=  Read Attribute  ${OPENBMC_BASE_URI}sensors/host/BootProgress
77    ...  value  quiet=${quiet}
78    [Return]  ${state}
79
80Is Power On
81    ${state}=  Get Power State
82    Should be equal  ${state}  ${1}
83
84Is Power Off
85    ${state}=  Get Power State
86    Should be equal  ${state}  ${0}
87
88Initiate Power On
89    [Documentation]  Initiates the power on and waits until the Is Power On
90    ...  keyword returns that the power state has switched to on.
91    [Arguments]  ${wait}=${1}
92
93    @{arglist}=   Create List
94    ${args}=     Create Dictionary    data=@{arglist}
95    ${resp}=  Call Method  ${OPENBMC_BASE_URI}control/chassis0/  powerOn
96    ...  data=${args}
97    should be equal as strings      ${resp.status_code}     ${HTTP_OK}
98
99    # Does caller want to wait for power on status?
100    Run Keyword If  '${wait}' == '${0}'  Return From Keyword
101    Wait Until Keyword Succeeds  3 min  10 sec  Is Power On
102
103Initiate Power Off
104    [Documentation]  Initiates the power off and waits until the Is Power Off
105    ...  keyword returns that the power state has switched to off.
106    @{arglist}=   Create List
107    ${args}=     Create Dictionary    data=@{arglist}
108    ${resp}=  Call Method  ${OPENBMC_BASE_URI}control/chassis0/  powerOff
109    ...  data=${args}
110    should be equal as strings      ${resp.status_code}     ${HTTP_OK}
111    Wait Until Keyword Succeeds  1 min  10 sec  Is Power Off
112
113Trigger Warm Reset
114    log to console    "Triggering warm reset"
115    ${data}=   create dictionary   data=@{EMPTY}
116    ${resp}=  openbmc post request
117    ...  ${OPENBMC_BASE_URI}control/bmc0/action/warmReset  data=${data}
118    Should Be Equal As Strings      ${resp.status_code}     ${HTTP_OK}
119    ${session_active}=   Check If warmReset is Initiated
120    Run Keyword If   '${session_active}' == '${True}'
121    ...    Fail   msg=warm reset didn't occur
122
123    Sleep   ${SYSTEM_SHUTDOWN_TIME}min
124    Check If BMC Is Up
125
126Check OS
127    [Documentation]  Attempts to ping the host OS and then checks that the host
128    ...              OS is up by running an SSH command.
129
130    [Arguments]  ${os_host}=${OS_HOST}  ${os_username}=${OS_USERNAME}
131    ...          ${os_password}=${OS_PASSWORD}  ${quiet}=${QUIET}
132    ...          ${print_string}=${EMPTY}
133    [Teardown]  Close Connection
134
135    # os_host           The DNS name/IP of the OS host associated with our BMC.
136    # os_username       The username to be used to sign on to the OS host.
137    # os_password       The password to be used to sign on to the OS host.
138    # quiet             Indicates whether this keyword should write to console.
139    # print_string      A string to be printed before checking the OS.
140
141    rprint  ${print_string}
142
143    # Attempt to ping the OS. Store the return code to check later.
144    ${ping_rc}=  Run Keyword and Return Status  Ping Host  ${os_host}
145
146    Open connection  ${os_host}
147
148    ${status}  ${msg}=  Run Keyword And Ignore Error  Login  ${os_username}
149    ...  ${os_password}
150    ${err_msg1}=  Sprint Error  ${msg}
151    ${err_msg}=  Catenate  SEPARATOR=  \n  ${err_msg1}
152    Run Keyword If  '${status}' == 'FAIL'  Fail  msg=${err_msg}
153    ${output}  ${stderr}  ${rc}=  Execute Command  uptime  return_stderr=True
154    ...        return_rc=True
155
156    ${temp_msg}=  Catenate  Could not execute a command on the operating
157    ...  system.\n
158    ${err_msg1}=  Sprint Error  ${temp_msg}
159    ${err_msg}=  Catenate  SEPARATOR=  \n  ${err_msg1}
160
161    # If the return code returned by "Execute Command" is non-zero, this
162    # keyword will fail.
163    Should Be Equal  ${rc}  ${0}  msg=${err_msg}
164    # We will likewise fail if there is any stderr data.
165    Should Be Empty  ${stderr}
166
167    ${temp_msg}=  Set Variable  Could not ping the operating system.\n
168    ${err_msg1}=  Sprint Error  ${temp_msg}
169    ${err_msg}=  Catenate  SEPARATOR=  \n  ${err_msg1}
170    # We will likewise fail if the OS did not ping, as we could SSH but not
171    # ping
172    Should Be Equal As Strings  ${ping_rc}  ${TRUE}  msg=${err_msg}
173
174Wait for OS
175    [Documentation]  Waits for the host OS to come up via calls to "Check OS".
176    [Arguments]  ${os_host}=${OS_HOST}  ${os_username}=${OS_USERNAME}
177    ...          ${os_password}=${OS_PASSWORD}  ${timeout}=${OS_WAIT_TIMEOUT}
178    ...          ${quiet}=${0}
179    [Teardown]  rprintn
180
181    # os_host           The DNS name or IP of the OS host associated with our
182    #                   BMC.
183    # os_username       The username to be used to sign on to the OS host.
184    # os_password       The password to be used to sign on to the OS host.
185    # timeout           The timeout in seconds indicating how long you're
186    #                   willing to wait for the OS to respond.
187    # quiet             Indicates whether this keyword should write to console.
188
189    # The interval to be used between calls to "Check OS".
190    ${interval}=  Set Variable  5
191
192    ${message}=  Catenate  Checking every ${interval} seconds for up to
193    ...  ${timeout} seconds for the operating system to communicate.
194    rqprint_timen  ${message}
195
196    Wait Until Keyword Succeeds  ${timeout} sec  ${interval}  Check OS
197    ...                          ${os_host}  ${os_username}  ${os_password}
198    ...                          print_string=\#
199
200    rqprintn
201
202    rqprint_timen  The operating system is now communicating.
203
204Get BMC State Deprecated
205    [Documentation]  Returns the state of the BMC as a string. (i.e: BMC_READY)
206    [Arguments]  ${quiet}=${QUIET}
207
208    @{arglist}=  Create List
209    ${args}=  Create Dictionary  data=@{arglist}
210    ${resp}=  Call Method  ${OPENBMC_BASE_URI}managers/System/  getSystemState
211    ...        data=${args}  quiet=${quiet}
212    Should be equal as strings  ${resp.status_code}  ${HTTP_OK}
213    ${content}=  to json  ${resp.content}
214    [Return]  ${content["data"]}
215
216Get Power State
217    [Documentation]  Returns the power state as an integer. Either 0 or 1.
218    [Arguments]  ${quiet}=${QUIET}
219
220    @{arglist}=  Create List
221    ${args}=  Create Dictionary  data=@{arglist}
222
223    ${resp}=  Call Method  ${OPENBMC_BASE_URI}control/chassis0/  getPowerState
224    ...        data=${args}  quiet=${quiet}
225    Should be equal as strings  ${resp.status_code}  ${HTTP_OK}
226    ${content}=  to json  ${resp.content}
227    [Return]  ${content["data"]}
228
229Clear BMC Record Log
230    [Documentation]  Clears all the event logs on the BMC. This would be
231    ...              equivalent to ipmitool sel clear.
232    @{arglist}=   Create List
233    ${args}=     Create Dictionary    data=@{arglist}
234    ${resp}=  Call Method
235    ...  ${OPENBMC_BASE_URI}records/events/  clear  data=${args}
236    should be equal as strings      ${resp.status_code}     ${HTTP_OK}
237
238Copy PNOR to BMC
239    Import Library      SCPLibrary      WITH NAME       scp
240    Open Connection for SCP
241    Log    Copying ${PNOR_IMAGE_PATH} to /tmp
242    scp.Put File    ${PNOR_IMAGE_PATH}   /tmp
243
244Flash PNOR
245    [Documentation]    Calls flash bios update method to flash PNOR image
246    [Arguments]    ${pnor_image}
247    @{arglist}=   Create List    ${pnor_image}
248    ${args}=     Create Dictionary    data=@{arglist}
249    ${resp}=  Call Method  ${OPENBMC_BASE_URI}control/flash/bios/  update
250    ...  data=${args}
251    should be equal as strings      ${resp.status_code}     ${HTTP_OK}
252    Wait Until Keyword Succeeds    2 min   10 sec    Is PNOR Flashing
253
254Get Flash BIOS Status
255    [Documentation]  Returns the status of the flash BIOS API as a string. For
256    ...              example 'Flashing', 'Flash Done', etc
257    ${data}=      Read Properties     ${OPENBMC_BASE_URI}control/flash/bios
258    [Return]    ${data['status']}
259
260Is PNOR Flashing
261    [Documentation]  Get BIOS 'Flashing' status. This indicates that PNOR
262    ...              flashing has started.
263    ${status}=    Get Flash BIOS Status
264    should be equal as strings     ${status}     Flashing
265
266Is PNOR Flash Done
267    [Documentation]  Get BIOS 'Flash Done' status.  This indicates that the
268    ...              PNOR flashing has completed.
269    ${status}=    Get Flash BIOS Status
270    should be equal as strings     ${status}     Flash Done
271
272Is System State Host Booted
273    [Documentation]  Checks whether system state is HOST_BOOTED.
274    ${state}=    Get BMC State Deprecated
275    should be equal as strings     ${state}     HOST_BOOTED
276
277Is OS Starting
278    [Documentation]  Check if boot progress is OS starting.
279    ${boot_progress}=  Get Boot Progress
280    Should Be Equal  ${boot_progress}  FW Progress, Starting OS
281
282Verify Ping and REST Authentication
283    ${l_ping}=   Run Keyword And Return Status
284    ...    Ping Host  ${OPENBMC_HOST}
285    Run Keyword If  '${l_ping}' == '${False}'
286    ...    Fail   msg=Ping Failed
287
288    ${l_rest}=   Run Keyword And Return Status
289    ...    Initialize OpenBMC
290    Run Keyword If  '${l_rest}' == '${False}'
291    ...    Fail   msg=REST Authentication Failed
292
293    # Just to make sure the SSH is working for SCP
294    Open Connection And Log In
295    ${system}   ${stderr}=    Execute Command   hostname   return_stderr=True
296    Should Be Empty     ${stderr}
297
298Check If BMC is Up
299    [Documentation]  Wait for Host to be online. Checks every X seconds
300    ...              interval for Y minutes and fails if timed out.
301    ...              Default MAX timedout is 10 min, interval 10 seconds.
302    [Arguments]      ${max_timeout}=${OPENBMC_REBOOT_TIMEOUT} min
303    ...              ${interval}=10 sec
304
305    Wait Until Keyword Succeeds
306    ...   ${max_timeout}  ${interval}   Verify Ping and REST Authentication
307
308
309Check If warmReset is Initiated
310    [Documentation]  Ping would be still alive, so try SSH to connect
311    ...              if fails the ports are down indicating reboot
312    ...              is in progress
313
314    # Warm reset adds 3 seconds delay before forcing reboot
315    # To minimize race conditions, we wait for 7 seconds
316    Sleep  7s
317    ${alive}=   Run Keyword and Return Status
318    ...    Open Connection And Log In
319    Return From Keyword If   '${alive}' == '${False}'    ${False}
320    [Return]    ${True}
321
322Flush REST Sessions
323    [Documentation]   Removes all the active session objects
324    Delete All Sessions
325
326Initialize DBUS cmd
327    [Documentation]  Initialize dbus string with property string to extract
328    [Arguments]   ${boot_property}
329    ${cmd}=     Catenate  ${dbuscmdBase} ${dbuscmdGet} ${dbuscmdString}
330    ${cmd}=     Catenate  ${cmd}${boot_property}
331    Set Global Variable   ${dbuscmd}     ${cmd}
332
333
334Stop OBMC Console Client
335    [Documentation]   Stop any running obmc_console_client
336    ...               writing to file_path.
337    [Arguments]   ${file_path}=/tmp/obmc-console.log
338
339    ${cmd_buf}=  Catenate  SEPARATOR=${SPACE}
340    ...  ps ax | grep obmc-console-client | grep ${file_path} | grep -v grep
341    ...  | awk '{print $1}'
342
343    ${pid}=
344    ...  Execute Command  ${cmd_buf}
345
346    Run Keyword If  '${pid}' != '${EMPTY}'
347    ...  Execute Command  kill -s KILL ${pid}
348    ...  ELSE  Log  "No obmc-console-client process running"
349
350
351Start SOL Console Logging
352    [Documentation]   Start a new obmc_console_client process and direct
353    ...               output to a file.
354    [Arguments]   ${file_path}=/tmp/obmc-console.log
355
356    Open Connection And Log In
357
358    Stop OBMC Console Client  ${file_path}
359
360    Start Command
361    ...  obmc-console-client > ${file_path}
362
363
364Stop SOL Console Logging
365    [Documentation]  Stop obmc_console_client process, if any, and
366    ...              return the console output as a string.
367    [Arguments]  ${file_path}=/tmp/obmc-console.log  ${targ_file_path}=${EMPTY}
368
369    # Description of arguments:
370    # file_path       The path on the obmc system where SOL output may be
371    #                 found.
372    # targ_file_path  If specified, the file path to which SOL data should be
373    #                 written.
374
375    Open Connection And Log In
376
377    Stop OBMC Console Client  ${file_path}
378
379    ${cmd_buf}=  Set Variable  cat ${file_path}
380
381    ${console}  ${stderr}=
382    ...  Execute Command
383    ...  if [ -f ${file_path} ] ; then cat ${file_path} ; fi
384    ...  return_stderr=True
385    Should Be Empty  ${stderr}
386
387    Run Keyword If  '${targ_file_path}' != '${EMPTY}'
388    ...  Append To File  ${targ_file_path}  ${console}
389
390    [Return]  ${console}
391
392Get Time Stamp
393    [Documentation]     Get the current time stamp data
394    ${cur_time}=    Get Current Date   result_format=%Y%m%d%H%M%S%f
395    [Return]   ${cur_time}
396
397
398Verify BMC State
399    [Documentation]   Get the BMC state and verify if the current
400    ...               BMC state is as expected.
401    [Arguments]       ${expected}
402
403    ${current}=  Get BMC State Deprecated
404    Should Contain  ${expected}   ${current}
405
406Start Journal Log
407    [Documentation]   Start capturing journal log to a file in /tmp using
408    ...               journalctl command. By default journal log is collected
409    ...               at /tmp/journal_log else user input location.
410    ...               The File is appended with datetime.
411    [Arguments]       ${file_path}=/tmp/journal_log
412
413    Open Connection And Log In
414
415    ${cur_time}=    Get Time Stamp
416    Set Global Variable   ${LOG_TIME}   ${cur_time}
417    Start Command
418    ...  journalctl -f > ${file_path}-${LOG_TIME}
419    Log    Journal Log Started: ${file_path}-${LOG_TIME}
420
421Stop Journal Log
422    [Documentation]   Stop journalctl process if its running.
423    ...               By default return log from /tmp/journal_log else
424    ...               user input location.
425    [Arguments]       ${file_path}=/tmp/journal_log
426
427    Open Connection And Log In
428
429    ${rc}=
430    ...  Execute Command
431    ...  ps ax | grep journalctl | grep -v grep
432    ...  return_stdout=False  return_rc=True
433
434    Return From Keyword If   '${rc}' == '${1}'
435    ...   No journal log process running
436
437    ${output}  ${stderr}=
438    ...  Execute Command   killall journalctl
439    ...  return_stderr=True
440    Should Be Empty     ${stderr}
441
442    ${journal_log}  ${stderr}=
443    ...  Execute Command
444    ...  cat ${file_path}-${LOG_TIME}
445    ...  return_stderr=True
446    Should Be Empty     ${stderr}
447
448    Log    ${journal_log}
449
450    Execute Command    rm ${file_path}-${LOG_TIME}
451
452    [Return]    ${journal_log}
453
454Mac Address To Hex String
455    [Documentation]   Converts MAC address into hex format.
456    ...               Example
457    ...               Given the following MAC: 00:01:6C:80:02:78
458    ...               This keyword will return: 0x00 0x01 0x6C 0x80 0x02 0x78
459    ...               Description of arguments:
460    ...               i_macaddress  MAC address in the following format
461    ...               00:01:6C:80:02:78
462    [Arguments]    ${i_macaddress}
463
464    ${mac_hex}=  Catenate  0x${i_macaddress.replace(':', ' 0x')}
465    [Return]    ${mac_hex}
466
467IP Address To Hex String
468    [Documentation]   Converts IP address into hex format.
469    ...               Example:
470    ...               Given the following IP: 10.3.164.100
471    ...               This keyword will return: 0xa 0x3 0xa4 0xa0
472    ...               Description of arguments:
473    ...               i_ipaddress  IP address in the following format
474    ...               10.10.10.10
475    [Arguments]    ${i_ipaddress}
476
477    @{ip}=  Split String  ${i_ipaddress}    .
478    ${index}=  Set Variable  ${0}
479
480    :FOR    ${item}     IN      @{ip}
481    \   ${hex}=  Convert To Hex    ${item}    prefix=0x    lowercase=yes
482    \   Set List Value    ${ip}    ${index}    ${hex}
483    \   ${index}=  Set Variable    ${index + 1}
484    ${ip_hex}=  Catenate    @{ip}
485    [Return]    ${ip_hex}
486
487BMC CPU Performance Check
488   [Documentation]   Minimal 10% of proc should be free in this instance
489
490    ${bmc_cpu_usage_output}  ${stderr}=  Execute Command  ${bmc_cpu_usage_cmd}
491    ...                   return_stderr=True
492    Should be empty  ${stderr}
493    ${bmc_cpu_percentage}=  Fetch From Left  ${bmc_cpu_usage_output}  %
494    Should be true  ${bmc_cpu_percentage} < 90
495
496BMC Mem Performance Check
497    [Documentation]   Minimal 10% of memory should be free in this instance
498
499    ${bmc_mem_free_output}  ${stderr}=   Execute Command  ${bmc_mem_free_cmd}
500    ...                   return_stderr=True
501    Should be empty  ${stderr}
502
503    ${bmc_mem_total_output}  ${stderr}=   Execute Command  ${bmc_mem_total_cmd}
504    ...                   return_stderr=True
505    Should be empty  ${stderr}
506
507    ${bmc_mem_percentage}=   Evaluate  ${bmc_mem_free_output}*100
508    ${bmc_mem_percentage}=  Evaluate
509    ...   ${bmc_mem_percentage}/${bmc_mem_total_output}
510    Should be true  ${bmc_mem_percentage} > 10
511
512BMC File System Usage Check
513    [Documentation]   Check the file system space. None should be 100% full
514    ...   except /run/initramfs/ro
515    ${bmc_fs_usage_output}  ${stderr}=   Execute Command
516    ...   ${bmc_file_system_usage_cmd}  return_stderr=True
517    Should Be Empty  ${stderr}
518    Should Be True  ${bmc_fs_usage_output}==0
519
520Check BMC CPU Performance
521    [Documentation]   Minimal 10% of proc should be free in 3 sample
522    :FOR  ${var}  IN Range  1  4
523    \     BMC CPU Performance check
524
525Check BMC Mem Performance
526    [Documentation]   Minimal 10% of memory should be free
527
528    :FOR  ${var}  IN Range  1  4
529    \     BMC Mem Performance check
530
531Check BMC File System Performance
532    [Documentation]  Check for file system usage for 4 times
533
534    :FOR  ${var}  IN Range  1  4
535    \     BMC File System Usage check
536
537Get Endpoint Paths
538    [Documentation]   Returns all url paths ending with given endpoint
539    ...               Example:
540    ...               Given the following endpoint: cpu
541    ...               This keyword will return: list of all urls ending with
542    ...               cpu -
543    ...               /org/openbmc/inventory/system/chassis/motherboard/cpu0,
544    ...               /org/openbmc/inventory/system/chassis/motherboard/cpu1
545    ...               Description of arguments:
546    ...               path       URL path for enumeration
547    ...               endpoint   string for which url path ending
548    [Arguments]   ${path}   ${endpoint}
549
550    ${resp}=   Read Properties   ${path}/enumerate   timeout=30
551    log Dictionary   ${resp}
552
553    ${list}=   Get Dictionary Keys   ${resp}
554    ${resp}=   Get Matches   ${list}   regexp=^.*[0-9a-z_].${endpoint}[0-9]*$
555    [Return]   ${resp}
556
557
558Check Zombie Process
559    [Documentation]    Check if any defunct process exist or not on BMC
560    ${count}  ${stderr}  ${rc}=  Execute Command  ps -o stat | grep Z | wc -l
561    ...    return_stderr=True  return_rc=True
562    Should Be True    ${count}==0
563    Should Be Empty    ${stderr}
564
565Prune Journal Log
566    [Documentation]   Prune archived journal logs.
567    [Arguments]   ${vacuum_size}=1M
568
569    # This keyword can be used to prevent the journal
570    # log from filling up the /run filesystem.
571    # This command will retain only the latest logs
572    # of the user specified size.
573
574    Open Connection And Log In
575    ${output}  ${stderr}  ${rc}=
576    ...  Execute Command
577    ...  journalctl --vacuum-size=${vacuum_size}
578    ...  return_stderr=True  return_rc=True
579
580    Should Be Equal  ${rc}  ${0}  msg=${stderr}
581    Should Contain   ${stderr}  Vacuuming done
582
583Set BMC Power Policy
584    [Documentation]   Set the given BMC power policy.
585    [arguments]   ${policy}
586
587    ${valueDict}=     create dictionary  data=${policy}
588    Write Attribute    ${HOST_SETTING}    power_policy   data=${valueDict}
589    ${currentPolicy}=  Read Attribute     ${HOST_SETTING}   power_policy
590    Should Be Equal    ${currentPolicy}   ${policy}
591
592Get System Power Policy
593    [Documentation]  Get the BMC power policy.
594    ${currentPolicy}=  Read Attribute  ${HOST_SETTING}  power_policy
595    [Return]  ${currentPolicy}
596
597Get Auto Reboot
598    [Documentation]  Returns auto reboot setting.
599    ${setting}=  Read Attribute  ${HOST_SETTINGS}  auto_reboot
600    [Return]  ${setting}
601
602
603Set Auto Reboot
604    [Documentation]  Set the given auto reboot setting.
605    [Arguments]  ${setting}
606    # setting  auto reboot's setting, i.e. yes or no
607
608    ${valueDict}=  Set Variable  ${setting}
609    ${data}=  Create Dictionary  data=${valueDict}
610    Write Attribute  ${HOST_SETTINGS}  auto_reboot  data=${data}
611    ${current_setting}=  Get Auto Reboot
612    Should Be Equal  ${current_setting}  ${setting}
613
614
615Set BMC Reset Reference Time
616    [Documentation]  Set current boot time as a reference and increment
617    ...              boot count.
618
619    ${cur_btime}=  Get BMC Boot Time
620    Run Keyword If  ${BOOT_TIME} == ${0} and ${BOOT_COUNT} == ${0}
621    ...  Set Global Variable  ${BOOT_TIME}  ${cur_btime}
622    ...  ELSE IF  ${cur_btime} > ${BOOT_TIME}
623    ...  Run Keywords  Set Global Variable  ${BOOT_TIME}  ${cur_btime}
624    ...  AND
625    ...  Set Global Variable  ${BOOT_COUNT}  ${BOOT_COUNT + 1}
626
627Get BMC Boot Time
628    [Documentation]  Get boot time from /proc/stat.
629
630    Open Connection And Log In
631    ${output}  ${stderr}=
632    ...  Execute Command  egrep '^btime ' /proc/stat | cut -f 2 -d ' '
633    ...  return_stderr=True
634    Should Be Empty  ${stderr}
635    ${btime}=  Convert To Integer  ${output}
636    [Return]  ${btime}
637
638
639Execute Command On BMC
640    [Documentation]  Execute given command on BMC and return output.
641    [Arguments]  ${command}
642    ${stdout}  ${stderr}=  Execute Command  ${command}  return_stderr=True
643    Should Be Empty  ${stderr}
644    [Return]  ${stdout}
645