blob: 87f1f528743fc205832111cf8a80da639b2a745c [file] [log] [blame]
Chris Austenb29d2e82016-06-07 12:25:35 -05001*** Settings ***
2Resource ../lib/resource.txt
3Resource ../lib/rest_client.robot
George Keishing5e870cd2016-08-24 10:05:47 -05004Resource ../lib/connection_client.robot
George Keishing30c12ff2016-09-02 10:25:29 -05005Library DateTime
6Library Process
Chris Austenb29d2e82016-06-07 12:25:35 -05007Library OperatingSystem
Michael Walsha6723f22016-11-22 11:12:01 -06008Library gen_print.py
9Library gen_robot_print.py
Chris Austenb29d2e82016-06-07 12:25:35 -050010
11*** Variables ***
12${SYSTEM_SHUTDOWN_TIME} ${5}
Michael Walsha6723f22016-11-22 11:12:01 -060013${dbuscmdBase}
George Keishing85ca05e2016-11-30 09:47:18 -060014... dbus-send --system --print-reply --dest=${OPENBMC_BASE_DBUS}.settings.Host
Michael Walsha6723f22016-11-22 11:12:01 -060015${dbuscmdGet}
George Keishing9485af92017-01-04 10:21:43 -060016... ${SETTINGS_URI}host0 org.freedesktop.DBus.Properties.Get
George Keishing85ca05e2016-11-30 09:47:18 -060017# Enable when ready with openbmc/openbmc-test-automation#203
18#${dbuscmdString}= string:"xyz.openbmc_project.settings.Host" string:
Michael Walsha6723f22016-11-22 11:12:01 -060019${dbuscmdString}= string:"org.openbmc.settings.Host" string:
20
21# Assign default value to QUIET for programs which may not define it.
22${QUIET} ${0}
Sivas SRRea85d1f2016-11-13 22:44:28 -060023${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
Sridevi Ramesh1699d372016-12-06 00:20:22 -060026${HOST_SETTING} ${SETTINGS_URI}host0
Sivas SRR352bc162017-02-13 22:12:29 -060027# /run/initramfs/ro associate filesystem should be 100% full always
Sivas SRRaca55712016-12-21 04:32:35 -060028${bmc_file_system_usage_cmd}=
Sivas SRR352bc162017-02-13 22:12:29 -060029... df -h | grep -v /run/initramfs/ro | cut -c 52-54 | grep 100 | wc -l
Chris Austenb29d2e82016-06-07 12:25:35 -050030
George Keishingcce9df22017-01-24 06:19:33 -060031${BOOT_TIME} ${0}
32${BOOT_COUNT} ${0}
Sivas SRR8254db62017-02-07 09:39:46 -060033${devicetree_base} /sys/firmware/devicetree/base/model
George Keishingcce9df22017-01-24 06:19:33 -060034
Chris Austenb29d2e82016-06-07 12:25:35 -050035*** Keywords ***
Sridevi Ramesh1699d372016-12-06 00:20:22 -060036
Sivas SRR8254db62017-02-07 09:39:46 -060037Get 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
Chris Austenb29d2e82016-06-07 12:25:35 -050056Wait For Host To Ping
root442f0ef2016-08-04 20:23:05 +000057 [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}
Chris Austenb29d2e82016-06-07 12:25:35 -050065
66Ping Host
67 [Arguments] ${host}
George Keishing8a84f952016-08-25 04:54:53 -050068 Should Not Be Empty ${host} msg=No host provided
Michael Walsha6723f22016-11-22 11:12:01 -060069 ${RC} ${output}= Run and return RC and Output ping -c 4 ${host}
Chris Austenb29d2e82016-06-07 12:25:35 -050070 Log RC: ${RC}\nOutput:\n${output}
71 Should be equal ${RC} ${0}
72
73Get Boot Progress
Michael Walsha6723f22016-11-22 11:12:01 -060074 [Arguments] ${quiet}=${QUIET}
75
George Keishing85ca05e2016-11-30 09:47:18 -060076 ${state}= Read Attribute ${OPENBMC_BASE_URI}sensors/host/BootProgress
Michael Walsha6723f22016-11-22 11:12:01 -060077 ... value quiet=${quiet}
Gunnar Millsc9ea9362016-12-13 16:21:13 -060078 [Return] ${state}
Chris Austenb29d2e82016-06-07 12:25:35 -050079
80Is Power On
root442f0ef2016-08-04 20:23:05 +000081 ${state}= Get Power State
82 Should be equal ${state} ${1}
Chris Austenb29d2e82016-06-07 12:25:35 -050083
84Is Power Off
root442f0ef2016-08-04 20:23:05 +000085 ${state}= Get Power State
86 Should be equal ${state} ${0}
Chris Austenb29d2e82016-06-07 12:25:35 -050087
root442f0ef2016-08-04 20:23:05 +000088Initiate 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.
Michael Walsha6723f22016-11-22 11:12:01 -060091 [Arguments] ${wait}=${1}
92
Chris Austenb29d2e82016-06-07 12:25:35 -050093 @{arglist}= Create List
94 ${args}= Create Dictionary data=@{arglist}
George Keishing85ca05e2016-11-30 09:47:18 -060095 ${resp}= Call Method ${OPENBMC_BASE_URI}control/chassis0/ powerOn
Michael Walsha6723f22016-11-22 11:12:01 -060096 ... data=${args}
Chris Austenb29d2e82016-06-07 12:25:35 -050097 should be equal as strings ${resp.status_code} ${HTTP_OK}
Chris Austenb29d2e82016-06-07 12:25:35 -050098
Michael Walsha6723f22016-11-22 11:12:01 -060099 # 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
Rahul Maheshwarif684ba72016-10-25 07:24:41 -0500102
root442f0ef2016-08-04 20:23:05 +0000103Initiate 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.
Chris Austenb29d2e82016-06-07 12:25:35 -0500106 @{arglist}= Create List
107 ${args}= Create Dictionary data=@{arglist}
George Keishing85ca05e2016-11-30 09:47:18 -0600108 ${resp}= Call Method ${OPENBMC_BASE_URI}control/chassis0/ powerOff
Michael Walsha6723f22016-11-22 11:12:01 -0600109 ... data=${args}
Chris Austenb29d2e82016-06-07 12:25:35 -0500110 should be equal as strings ${resp.status_code} ${HTTP_OK}
Michael Walsha6723f22016-11-22 11:12:01 -0600111 Wait Until Keyword Succeeds 1 min 10 sec Is Power Off
Chris Austenb29d2e82016-06-07 12:25:35 -0500112
113Trigger Warm Reset
114 log to console "Triggering warm reset"
Michael Walsha6723f22016-11-22 11:12:01 -0600115 ${data}= create dictionary data=@{EMPTY}
George Keishing85ca05e2016-11-30 09:47:18 -0600116 ${resp}= openbmc post request
117 ... ${OPENBMC_BASE_URI}control/bmc0/action/warmReset data=${data}
Chris Austenb29d2e82016-06-07 12:25:35 -0500118 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
George Keishingb3700812016-08-31 03:03:30 -0500119 ${session_active}= Check If warmReset is Initiated
120 Run Keyword If '${session_active}' == '${True}'
121 ... Fail msg=warm reset didn't occur
122
Chris Austenb29d2e82016-06-07 12:25:35 -0500123 Sleep ${SYSTEM_SHUTDOWN_TIME}min
Rahul Maheshwari5f253c42017-01-30 05:19:51 -0600124 Check If BMC Is Up
Michael Walsh49ab0f42016-07-20 11:44:33 -0500125
126Check OS
root442f0ef2016-08-04 20:23:05 +0000127 [Documentation] Attempts to ping the host OS and then checks that the host
128 ... OS is up by running an SSH command.
Michael Walsh49ab0f42016-07-20 11:44:33 -0500129
130 [Arguments] ${os_host}=${OS_HOST} ${os_username}=${OS_USERNAME}
Michael Walsha6723f22016-11-22 11:12:01 -0600131 ... ${os_password}=${OS_PASSWORD} ${quiet}=${QUIET}
132 ... ${print_string}=${EMPTY}
Michael Walsh49ab0f42016-07-20 11:44:33 -0500133 [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.
Michael Walsha6723f22016-11-22 11:12:01 -0600138 # 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}
Michael Walsh49ab0f42016-07-20 11:44:33 -0500142
root442f0ef2016-08-04 20:23:05 +0000143 # 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
Michael Walsh49ab0f42016-07-20 11:44:33 -0500146 Open connection ${os_host}
Michael Walsh49ab0f42016-07-20 11:44:33 -0500147
Michael Walsha6723f22016-11-22 11:12:01 -0600148 ${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}
Michael Walsh49ab0f42016-07-20 11:44:33 -0500153 ${output} ${stderr} ${rc}= Execute Command uptime return_stderr=True
154 ... return_rc=True
155
Michael Walsha6723f22016-11-22 11:12:01 -0600156 ${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}
Michael Walsh49ab0f42016-07-20 11:44:33 -0500164 # We will likewise fail if there is any stderr data.
165 Should Be Empty ${stderr}
166
Michael Walsha6723f22016-11-22 11:12:01 -0600167 ${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}
root442f0ef2016-08-04 20:23:05 +0000173
Michael Walsh49ab0f42016-07-20 11:44:33 -0500174Wait 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}
Michael Walsha6723f22016-11-22 11:12:01 -0600178 ... ${quiet}=${0}
179 [Teardown] rprintn
Michael Walsh49ab0f42016-07-20 11:44:33 -0500180
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.
Michael Walsha6723f22016-11-22 11:12:01 -0600187 # quiet Indicates whether this keyword should write to console.
Michael Walsh49ab0f42016-07-20 11:44:33 -0500188
189 # The interval to be used between calls to "Check OS".
190 ${interval}= Set Variable 5
191
Michael Walsha6723f22016-11-22 11:12:01 -0600192 ${message}= Catenate Checking every ${interval} seconds for up to
193 ... ${timeout} seconds for the operating system to communicate.
194 rqprint_timen ${message}
195
Michael Walsh49ab0f42016-07-20 11:44:33 -0500196 Wait Until Keyword Succeeds ${timeout} sec ${interval} Check OS
197 ... ${os_host} ${os_username} ${os_password}
Michael Walsha6723f22016-11-22 11:12:01 -0600198 ... print_string=\#
199
200 rqprintn
201
202 rqprint_timen The operating system is now communicating.
root442f0ef2016-08-04 20:23:05 +0000203
Rahul Maheshwari2c725042017-01-29 22:55:28 -0600204Get BMC State Deprecated
root442f0ef2016-08-04 20:23:05 +0000205 [Documentation] Returns the state of the BMC as a string. (i.e: BMC_READY)
Michael Walsha6723f22016-11-22 11:12:01 -0600206 [Arguments] ${quiet}=${QUIET}
207
root442f0ef2016-08-04 20:23:05 +0000208 @{arglist}= Create List
209 ${args}= Create Dictionary data=@{arglist}
George Keishing85ca05e2016-11-30 09:47:18 -0600210 ${resp}= Call Method ${OPENBMC_BASE_URI}managers/System/ getSystemState
Michael Walsha6723f22016-11-22 11:12:01 -0600211 ... data=${args} quiet=${quiet}
root442f0ef2016-08-04 20:23:05 +0000212 Should be equal as strings ${resp.status_code} ${HTTP_OK}
213 ${content}= to json ${resp.content}
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600214 [Return] ${content["data"]}
root442f0ef2016-08-04 20:23:05 +0000215
216Get Power State
217 [Documentation] Returns the power state as an integer. Either 0 or 1.
Michael Walsha6723f22016-11-22 11:12:01 -0600218 [Arguments] ${quiet}=${QUIET}
219
root442f0ef2016-08-04 20:23:05 +0000220 @{arglist}= Create List
221 ${args}= Create Dictionary data=@{arglist}
Michael Walsha6723f22016-11-22 11:12:01 -0600222
George Keishing85ca05e2016-11-30 09:47:18 -0600223 ${resp}= Call Method ${OPENBMC_BASE_URI}control/chassis0/ getPowerState
Michael Walsha6723f22016-11-22 11:12:01 -0600224 ... data=${args} quiet=${quiet}
root442f0ef2016-08-04 20:23:05 +0000225 Should be equal as strings ${resp.status_code} ${HTTP_OK}
226 ${content}= to json ${resp.content}
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600227 [Return] ${content["data"]}
Jay Azurine4c52eb2016-08-16 20:51:10 -0500228
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}
George Keishing85ca05e2016-11-30 09:47:18 -0600234 ${resp}= Call Method
235 ... ${OPENBMC_BASE_URI}records/events/ clear data=${args}
Jay Azurine4c52eb2016-08-16 20:51:10 -0500236 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
Gunnar Mills38032802016-12-12 13:43:40 -0600246 [Arguments] ${pnor_image}
Jay Azurine4c52eb2016-08-16 20:51:10 -0500247 @{arglist}= Create List ${pnor_image}
248 ${args}= Create Dictionary data=@{arglist}
George Keishing85ca05e2016-11-30 09:47:18 -0600249 ${resp}= Call Method ${OPENBMC_BASE_URI}control/flash/bios/ update
Michael Walsha6723f22016-11-22 11:12:01 -0600250 ... data=${args}
Jay Azurine4c52eb2016-08-16 20:51:10 -0500251 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
George Keishing85ca05e2016-11-30 09:47:18 -0600257 ${data}= Read Properties ${OPENBMC_BASE_URI}control/flash/bios
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600258 [Return] ${data['status']}
Jay Azurine4c52eb2016-08-16 20:51:10 -0500259
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.
Leah McNutt9ba32272016-11-17 15:48:39 +0000269 ${status}= Get Flash BIOS Status
Jay Azurine4c52eb2016-08-16 20:51:10 -0500270 should be equal as strings ${status} Flash Done
271
272Is System State Host Booted
273 [Documentation] Checks whether system state is HOST_BOOTED.
Rahul Maheshwari2c725042017-01-29 22:55:28 -0600274 ${state}= Get BMC State Deprecated
Jay Azurine4c52eb2016-08-16 20:51:10 -0500275 should be equal as strings ${state} HOST_BOOTED
George Keishing5e870cd2016-08-24 10:05:47 -0500276
Rahul Maheshwari2c725042017-01-29 22:55:28 -0600277Is 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
George Keishing5e870cd2016-08-24 10:05:47 -0500282Verify Ping and REST Authentication
Michael Walsha6723f22016-11-22 11:12:01 -0600283 ${l_ping}= Run Keyword And Return Status
George Keishing5e870cd2016-08-24 10:05:47 -0500284 ... Ping Host ${OPENBMC_HOST}
George Keishingc4d3dc02016-09-19 03:45:55 -0500285 Run Keyword If '${l_ping}' == '${False}'
286 ... Fail msg=Ping Failed
George Keishing5e870cd2016-08-24 10:05:47 -0500287
Michael Walsha6723f22016-11-22 11:12:01 -0600288 ${l_rest}= Run Keyword And Return Status
George Keishing5e870cd2016-08-24 10:05:47 -0500289 ... Initialize OpenBMC
George Keishingc4d3dc02016-09-19 03:45:55 -0500290 Run Keyword If '${l_rest}' == '${False}'
291 ... Fail msg=REST Authentication Failed
George Keishing5e870cd2016-08-24 10:05:47 -0500292
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
George Keishingc4d3dc02016-09-19 03:45:55 -0500298Check 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.
Gunnar Mills38032802016-12-12 13:43:40 -0600302 [Arguments] ${max_timeout}=${OPENBMC_REBOOT_TIMEOUT} min
George Keishingc4d3dc02016-09-19 03:45:55 -0500303 ... ${interval}=10 sec
304
305 Wait Until Keyword Succeeds
306 ... ${max_timeout} ${interval} Verify Ping and REST Authentication
307
George Keishingb3700812016-08-31 03:03:30 -0500308
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
George Keishing3c05d352016-12-13 06:54:50 -0600313
314 # Warm reset adds 3 seconds delay before forcing reboot
315 # To minimize race conditions, we wait for 7 seconds
316 Sleep 7s
George Keishingb3700812016-08-31 03:03:30 -0500317 ${alive}= Run Keyword and Return Status
318 ... Open Connection And Log In
319 Return From Keyword If '${alive}' == '${False}' ${False}
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600320 [Return] ${True}
George Keishingb3700812016-08-31 03:03:30 -0500321
George Keishing06ae4aa2016-08-30 01:41:28 -0500322Flush REST Sessions
323 [Documentation] Removes all the active session objects
324 Delete All Sessions
George Keishingb3700812016-08-31 03:03:30 -0500325
Sivas SRRe1143ae2016-08-26 22:31:02 -0500326Initialize DBUS cmd
327 [Documentation] Initialize dbus string with property string to extract
Gunnar Mills38032802016-12-12 13:43:40 -0600328 [Arguments] ${boot_property}
Michael Walsha6723f22016-11-22 11:12:01 -0600329 ${cmd}= Catenate ${dbuscmdBase} ${dbuscmdGet} ${dbuscmdString}
330 ${cmd}= Catenate ${cmd}${boot_property}
Sivas SRRe1143ae2016-08-26 22:31:02 -0500331 Set Global Variable ${dbuscmd} ${cmd}
332
George Keishing30c12ff2016-09-02 10:25:29 -0500333
Gunnar Mills9c760342016-12-08 10:12:06 -0600334Stop 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
Michael Walsh01bd3682017-01-10 11:21:05 -0600339 ${cmd_buf}= Catenate SEPARATOR=${SPACE}
340 ... ps ax | grep obmc-console-client | grep ${file_path} | grep -v grep
341 ... | awk '{print $1}'
342
Gunnar Mills9c760342016-12-08 10:12:06 -0600343 ${pid}=
Michael Walsh01bd3682017-01-10 11:21:05 -0600344 ... Execute Command ${cmd_buf}
Gunnar Mills9c760342016-12-08 10:12:06 -0600345
346 Run Keyword If '${pid}' != '${EMPTY}'
347 ... Execute Command kill -s KILL ${pid}
348 ... ELSE Log "No obmc-console-client process running"
349
350
George Keishing30c12ff2016-09-02 10:25:29 -0500351Start SOL Console Logging
Gunnar Mills9c760342016-12-08 10:12:06 -0600352 [Documentation] Start a new obmc_console_client process and direct
353 ... output to a file.
354 [Arguments] ${file_path}=/tmp/obmc-console.log
George Keishing30c12ff2016-09-02 10:25:29 -0500355
356 Open Connection And Log In
357
Gunnar Mills9c760342016-12-08 10:12:06 -0600358 Stop OBMC Console Client ${file_path}
359
George Keishing30c12ff2016-09-02 10:25:29 -0500360 Start Command
Gunnar Mills9c760342016-12-08 10:12:06 -0600361 ... obmc-console-client > ${file_path}
George Keishing30c12ff2016-09-02 10:25:29 -0500362
363
364Stop SOL Console Logging
Michael Walsh01bd3682017-01-10 11:21:05 -0600365 [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.
George Keishing30c12ff2016-09-02 10:25:29 -0500374
375 Open Connection And Log In
376
Gunnar Mills9c760342016-12-08 10:12:06 -0600377 Stop OBMC Console Client ${file_path}
George Keishing30c12ff2016-09-02 10:25:29 -0500378
Michael Walsh01bd3682017-01-10 11:21:05 -0600379 ${cmd_buf}= Set Variable cat ${file_path}
380
George Keishing30c12ff2016-09-02 10:25:29 -0500381 ${console} ${stderr}=
382 ... Execute Command
Michael Walsh01bd3682017-01-10 11:21:05 -0600383 ... if [ -f ${file_path} ] ; then cat ${file_path} ; fi
George Keishing30c12ff2016-09-02 10:25:29 -0500384 ... return_stderr=True
Gunnar Mills9c760342016-12-08 10:12:06 -0600385 Should Be Empty ${stderr}
George Keishing30c12ff2016-09-02 10:25:29 -0500386
Michael Walsh01bd3682017-01-10 11:21:05 -0600387 Run Keyword If '${targ_file_path}' != '${EMPTY}'
388 ... Append To File ${targ_file_path} ${console}
George Keishing30c12ff2016-09-02 10:25:29 -0500389
Michael Walsh01bd3682017-01-10 11:21:05 -0600390 [Return] ${console}
George Keishing30c12ff2016-09-02 10:25:29 -0500391
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
Sridevi Rameshb96a0c32016-10-19 05:09:52 -0500395 [Return] ${cur_time}
George Keishing30c12ff2016-09-02 10:25:29 -0500396
George Keishing1b150202016-09-29 08:51:58 -0500397
398Verify BMC State
399 [Documentation] Get the BMC state and verify if the current
400 ... BMC state is as expected.
401 [Arguments] ${expected}
402
Rahul Maheshwari2c725042017-01-29 22:55:28 -0600403 ${current}= Get BMC State Deprecated
George Keishing8db0e1b2016-10-20 13:46:54 -0500404 Should Contain ${expected} ${current}
George Keishing1b150202016-09-29 08:51:58 -0500405
Rahul Maheshwarif684ba72016-10-25 07:24:41 -0500406Start 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}
Rahul Maheshwari757d80c2016-10-17 01:09:55 -0500453
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:
Michael Walsh01bd3682017-01-10 11:21:05 -0600460 ... i_macaddress MAC address in the following format
461 ... 00:01:6C:80:02:78
Rahul Maheshwari757d80c2016-10-17 01:09:55 -0500462 [Arguments] ${i_macaddress}
463
464 ${mac_hex}= Catenate 0x${i_macaddress.replace(':', ' 0x')}
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600465 [Return] ${mac_hex}
Rahul Maheshwari757d80c2016-10-17 01:09:55 -0500466
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:
Michael Walsh01bd3682017-01-10 11:21:05 -0600473 ... i_ipaddress IP address in the following format
474 ... 10.10.10.10
Rahul Maheshwari757d80c2016-10-17 01:09:55 -0500475 [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}
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600485 [Return] ${ip_hex}
Sivas SRRea85d1f2016-11-13 22:44:28 -0600486
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
Sivas SRRaca55712016-12-21 04:32:35 -0600512BMC File System Usage Check
513 [Documentation] Check the file system space. None should be 100% full
Sivas SRR352bc162017-02-13 22:12:29 -0600514 ... except /run/initramfs/ro
Sivas SRRaca55712016-12-21 04:32:35 -0600515 ${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
Sivas SRRea85d1f2016-11-13 22:44:28 -0600520Check 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
Sivas SRRaca55712016-12-21 04:32:35 -0600531Check 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
Rahul Maheshwari9a8d3b12016-12-05 04:06:16 -0600537Get Endpoint Paths
538 [Documentation] Returns all url paths ending with given endpoint
539 ... Example:
540 ... Given the following endpoint: cpu
Michael Walsh01bd3682017-01-10 11:21:05 -0600541 ... This keyword will return: list of all urls ending with
542 ... cpu -
Rahul Maheshwari9a8d3b12016-12-05 04:06:16 -0600543 ... /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]*$
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600555 [Return] ${resp}
Sridevi Rameshb96a0c32016-10-19 05:09:52 -0500556
Sridevi Ramesh1699d372016-12-06 00:20:22 -0600557
Sridevi Rameshb96a0c32016-10-19 05:09:52 -0500558Check Zombie Process
559 [Documentation] Check if any defunct process exist or not on BMC
Michael Walsh01bd3682017-01-10 11:21:05 -0600560 ${count} ${stderr} ${rc}= Execute Command ps -o stat | grep Z | wc -l
Sridevi Rameshb96a0c32016-10-19 05:09:52 -0500561 ... return_stderr=True return_rc=True
562 Should Be True ${count}==0
563 Should Be Empty ${stderr}
George Keishing5327d012016-12-08 08:43:29 -0600564
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
Sridevi Ramesh1699d372016-12-06 00:20:22 -0600582
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}
George Keishingcce9df22017-01-24 06:19:33 -0600591
George Keishing4d6f3d62017-02-06 09:50:41 -0600592Get System Power Policy
593 [Documentation] Get the BMC power policy.
594 ${currentPolicy}= Read Attribute ${HOST_SETTING} power_policy
595 [Return] ${currentPolicy}
George Keishingcce9df22017-01-24 06:19:33 -0600596
Rahul Maheshwari1cbf0042017-02-13 05:17:37 -0600597Get 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
George Keishingcce9df22017-01-24 06:19:33 -0600615Set BMC Reset Reference Time
616 [Documentation] Set current boot time as a reference and increment
George Keishing80dd5af2017-02-08 07:01:25 -0600617 ... boot count.
George Keishingcce9df22017-01-24 06:19:33 -0600618
619 ${cur_btime}= Get BMC Boot Time
George Keishing80dd5af2017-02-08 07:01:25 -0600620 Run Keyword If ${BOOT_TIME} == ${0} and ${BOOT_COUNT} == ${0}
George Keishingcce9df22017-01-24 06:19:33 -0600621 ... Set Global Variable ${BOOT_TIME} ${cur_btime}
George Keishing80dd5af2017-02-08 07:01:25 -0600622 ... ELSE IF ${cur_btime} > ${BOOT_TIME}
623 ... Run Keywords Set Global Variable ${BOOT_TIME} ${cur_btime}
George Keishingcce9df22017-01-24 06:19:33 -0600624 ... AND
625 ... Set Global Variable ${BOOT_COUNT} ${BOOT_COUNT + 1}
626
George Keishingcce9df22017-01-24 06:19:33 -0600627Get 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}
George Keishingede30002017-02-02 09:33:07 -0600637
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}