blob: a5bb0b9f84a50e1564a1d183c5738d296e298121 [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 SRRaca55712016-12-21 04:32:35 -060027# /dev/mtdblock5 filesystem should be 100% full always
28${bmc_file_system_usage_cmd}=
29... df -h | grep -v /dev/mtdblock5 | 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}
33
Chris Austenb29d2e82016-06-07 12:25:35 -050034*** Keywords ***
Sridevi Ramesh1699d372016-12-06 00:20:22 -060035
Chris Austenb29d2e82016-06-07 12:25:35 -050036Wait For Host To Ping
root442f0ef2016-08-04 20:23:05 +000037 [Arguments] ${host} ${timeout}=${OPENBMC_REBOOT_TIMEOUT}min
38 ... ${interval}=5 sec
39
40 # host The DNS name or IP of the host to ping.
41 # timeout The amount of time after which attempts to ping cease.
42 # interval The amount of time in between attempts to ping.
43
44 Wait Until Keyword Succeeds ${timeout} ${interval} Ping Host ${host}
Chris Austenb29d2e82016-06-07 12:25:35 -050045
46Ping Host
47 [Arguments] ${host}
George Keishing8a84f952016-08-25 04:54:53 -050048 Should Not Be Empty ${host} msg=No host provided
Michael Walsha6723f22016-11-22 11:12:01 -060049 ${RC} ${output}= Run and return RC and Output ping -c 4 ${host}
Chris Austenb29d2e82016-06-07 12:25:35 -050050 Log RC: ${RC}\nOutput:\n${output}
51 Should be equal ${RC} ${0}
52
53Get Boot Progress
Michael Walsha6723f22016-11-22 11:12:01 -060054 [Arguments] ${quiet}=${QUIET}
55
George Keishing85ca05e2016-11-30 09:47:18 -060056 ${state}= Read Attribute ${OPENBMC_BASE_URI}sensors/host/BootProgress
Michael Walsha6723f22016-11-22 11:12:01 -060057 ... value quiet=${quiet}
Gunnar Millsc9ea9362016-12-13 16:21:13 -060058 [Return] ${state}
Chris Austenb29d2e82016-06-07 12:25:35 -050059
60Is Power On
root442f0ef2016-08-04 20:23:05 +000061 ${state}= Get Power State
62 Should be equal ${state} ${1}
Chris Austenb29d2e82016-06-07 12:25:35 -050063
64Is Power Off
root442f0ef2016-08-04 20:23:05 +000065 ${state}= Get Power State
66 Should be equal ${state} ${0}
Chris Austenb29d2e82016-06-07 12:25:35 -050067
root442f0ef2016-08-04 20:23:05 +000068Initiate Power On
69 [Documentation] Initiates the power on and waits until the Is Power On
70 ... keyword returns that the power state has switched to on.
Michael Walsha6723f22016-11-22 11:12:01 -060071 [Arguments] ${wait}=${1}
72
Chris Austenb29d2e82016-06-07 12:25:35 -050073 @{arglist}= Create List
74 ${args}= Create Dictionary data=@{arglist}
George Keishing85ca05e2016-11-30 09:47:18 -060075 ${resp}= Call Method ${OPENBMC_BASE_URI}control/chassis0/ powerOn
Michael Walsha6723f22016-11-22 11:12:01 -060076 ... data=${args}
Chris Austenb29d2e82016-06-07 12:25:35 -050077 should be equal as strings ${resp.status_code} ${HTTP_OK}
Chris Austenb29d2e82016-06-07 12:25:35 -050078
Michael Walsha6723f22016-11-22 11:12:01 -060079 # Does caller want to wait for power on status?
80 Run Keyword If '${wait}' == '${0}' Return From Keyword
81 Wait Until Keyword Succeeds 3 min 10 sec Is Power On
Rahul Maheshwarif684ba72016-10-25 07:24:41 -050082
root442f0ef2016-08-04 20:23:05 +000083Initiate Power Off
84 [Documentation] Initiates the power off and waits until the Is Power Off
85 ... keyword returns that the power state has switched to off.
Chris Austenb29d2e82016-06-07 12:25:35 -050086 @{arglist}= Create List
87 ${args}= Create Dictionary data=@{arglist}
George Keishing85ca05e2016-11-30 09:47:18 -060088 ${resp}= Call Method ${OPENBMC_BASE_URI}control/chassis0/ powerOff
Michael Walsha6723f22016-11-22 11:12:01 -060089 ... data=${args}
Chris Austenb29d2e82016-06-07 12:25:35 -050090 should be equal as strings ${resp.status_code} ${HTTP_OK}
Michael Walsha6723f22016-11-22 11:12:01 -060091 Wait Until Keyword Succeeds 1 min 10 sec Is Power Off
Chris Austenb29d2e82016-06-07 12:25:35 -050092
93Trigger Warm Reset
94 log to console "Triggering warm reset"
Michael Walsha6723f22016-11-22 11:12:01 -060095 ${data}= create dictionary data=@{EMPTY}
George Keishing85ca05e2016-11-30 09:47:18 -060096 ${resp}= openbmc post request
97 ... ${OPENBMC_BASE_URI}control/bmc0/action/warmReset data=${data}
Chris Austenb29d2e82016-06-07 12:25:35 -050098 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
George Keishingb3700812016-08-31 03:03:30 -050099 ${session_active}= Check If warmReset is Initiated
100 Run Keyword If '${session_active}' == '${True}'
101 ... Fail msg=warm reset didn't occur
102
Chris Austenb29d2e82016-06-07 12:25:35 -0500103 Sleep ${SYSTEM_SHUTDOWN_TIME}min
Rahul Maheshwari5f253c42017-01-30 05:19:51 -0600104 Check If BMC Is Up
Michael Walsh49ab0f42016-07-20 11:44:33 -0500105
106Check OS
root442f0ef2016-08-04 20:23:05 +0000107 [Documentation] Attempts to ping the host OS and then checks that the host
108 ... OS is up by running an SSH command.
Michael Walsh49ab0f42016-07-20 11:44:33 -0500109
110 [Arguments] ${os_host}=${OS_HOST} ${os_username}=${OS_USERNAME}
Michael Walsha6723f22016-11-22 11:12:01 -0600111 ... ${os_password}=${OS_PASSWORD} ${quiet}=${QUIET}
112 ... ${print_string}=${EMPTY}
Michael Walsh49ab0f42016-07-20 11:44:33 -0500113 [Teardown] Close Connection
114
115 # os_host The DNS name/IP of the OS host associated with our BMC.
116 # os_username The username to be used to sign on to the OS host.
117 # os_password The password to be used to sign on to the OS host.
Michael Walsha6723f22016-11-22 11:12:01 -0600118 # quiet Indicates whether this keyword should write to console.
119 # print_string A string to be printed before checking the OS.
120
121 rprint ${print_string}
Michael Walsh49ab0f42016-07-20 11:44:33 -0500122
root442f0ef2016-08-04 20:23:05 +0000123 # Attempt to ping the OS. Store the return code to check later.
124 ${ping_rc}= Run Keyword and Return Status Ping Host ${os_host}
125
Michael Walsh49ab0f42016-07-20 11:44:33 -0500126 Open connection ${os_host}
Michael Walsh49ab0f42016-07-20 11:44:33 -0500127
Michael Walsha6723f22016-11-22 11:12:01 -0600128 ${status} ${msg}= Run Keyword And Ignore Error Login ${os_username}
129 ... ${os_password}
130 ${err_msg1}= Sprint Error ${msg}
131 ${err_msg}= Catenate SEPARATOR= \n ${err_msg1}
132 Run Keyword If '${status}' == 'FAIL' Fail msg=${err_msg}
Michael Walsh49ab0f42016-07-20 11:44:33 -0500133 ${output} ${stderr} ${rc}= Execute Command uptime return_stderr=True
134 ... return_rc=True
135
Michael Walsha6723f22016-11-22 11:12:01 -0600136 ${temp_msg}= Catenate Could not execute a command on the operating
137 ... system.\n
138 ${err_msg1}= Sprint Error ${temp_msg}
139 ${err_msg}= Catenate SEPARATOR= \n ${err_msg1}
140
141 # If the return code returned by "Execute Command" is non-zero, this
142 # keyword will fail.
143 Should Be Equal ${rc} ${0} msg=${err_msg}
Michael Walsh49ab0f42016-07-20 11:44:33 -0500144 # We will likewise fail if there is any stderr data.
145 Should Be Empty ${stderr}
146
Michael Walsha6723f22016-11-22 11:12:01 -0600147 ${temp_msg}= Set Variable Could not ping the operating system.\n
148 ${err_msg1}= Sprint Error ${temp_msg}
149 ${err_msg}= Catenate SEPARATOR= \n ${err_msg1}
150 # We will likewise fail if the OS did not ping, as we could SSH but not
151 # ping
152 Should Be Equal As Strings ${ping_rc} ${TRUE} msg=${err_msg}
root442f0ef2016-08-04 20:23:05 +0000153
Michael Walsh49ab0f42016-07-20 11:44:33 -0500154Wait for OS
155 [Documentation] Waits for the host OS to come up via calls to "Check OS".
156 [Arguments] ${os_host}=${OS_HOST} ${os_username}=${OS_USERNAME}
157 ... ${os_password}=${OS_PASSWORD} ${timeout}=${OS_WAIT_TIMEOUT}
Michael Walsha6723f22016-11-22 11:12:01 -0600158 ... ${quiet}=${0}
159 [Teardown] rprintn
Michael Walsh49ab0f42016-07-20 11:44:33 -0500160
161 # os_host The DNS name or IP of the OS host associated with our
162 # BMC.
163 # os_username The username to be used to sign on to the OS host.
164 # os_password The password to be used to sign on to the OS host.
165 # timeout The timeout in seconds indicating how long you're
166 # willing to wait for the OS to respond.
Michael Walsha6723f22016-11-22 11:12:01 -0600167 # quiet Indicates whether this keyword should write to console.
Michael Walsh49ab0f42016-07-20 11:44:33 -0500168
169 # The interval to be used between calls to "Check OS".
170 ${interval}= Set Variable 5
171
Michael Walsha6723f22016-11-22 11:12:01 -0600172 ${message}= Catenate Checking every ${interval} seconds for up to
173 ... ${timeout} seconds for the operating system to communicate.
174 rqprint_timen ${message}
175
Michael Walsh49ab0f42016-07-20 11:44:33 -0500176 Wait Until Keyword Succeeds ${timeout} sec ${interval} Check OS
177 ... ${os_host} ${os_username} ${os_password}
Michael Walsha6723f22016-11-22 11:12:01 -0600178 ... print_string=\#
179
180 rqprintn
181
182 rqprint_timen The operating system is now communicating.
root442f0ef2016-08-04 20:23:05 +0000183
Rahul Maheshwari2c725042017-01-29 22:55:28 -0600184Get BMC State Deprecated
root442f0ef2016-08-04 20:23:05 +0000185 [Documentation] Returns the state of the BMC as a string. (i.e: BMC_READY)
Michael Walsha6723f22016-11-22 11:12:01 -0600186 [Arguments] ${quiet}=${QUIET}
187
root442f0ef2016-08-04 20:23:05 +0000188 @{arglist}= Create List
189 ${args}= Create Dictionary data=@{arglist}
George Keishing85ca05e2016-11-30 09:47:18 -0600190 ${resp}= Call Method ${OPENBMC_BASE_URI}managers/System/ getSystemState
Michael Walsha6723f22016-11-22 11:12:01 -0600191 ... data=${args} quiet=${quiet}
root442f0ef2016-08-04 20:23:05 +0000192 Should be equal as strings ${resp.status_code} ${HTTP_OK}
193 ${content}= to json ${resp.content}
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600194 [Return] ${content["data"]}
root442f0ef2016-08-04 20:23:05 +0000195
196Get Power State
197 [Documentation] Returns the power state as an integer. Either 0 or 1.
Michael Walsha6723f22016-11-22 11:12:01 -0600198 [Arguments] ${quiet}=${QUIET}
199
root442f0ef2016-08-04 20:23:05 +0000200 @{arglist}= Create List
201 ${args}= Create Dictionary data=@{arglist}
Michael Walsha6723f22016-11-22 11:12:01 -0600202
George Keishing85ca05e2016-11-30 09:47:18 -0600203 ${resp}= Call Method ${OPENBMC_BASE_URI}control/chassis0/ getPowerState
Michael Walsha6723f22016-11-22 11:12:01 -0600204 ... data=${args} quiet=${quiet}
root442f0ef2016-08-04 20:23:05 +0000205 Should be equal as strings ${resp.status_code} ${HTTP_OK}
206 ${content}= to json ${resp.content}
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600207 [Return] ${content["data"]}
Jay Azurine4c52eb2016-08-16 20:51:10 -0500208
209Clear BMC Record Log
210 [Documentation] Clears all the event logs on the BMC. This would be
211 ... equivalent to ipmitool sel clear.
212 @{arglist}= Create List
213 ${args}= Create Dictionary data=@{arglist}
George Keishing85ca05e2016-11-30 09:47:18 -0600214 ${resp}= Call Method
215 ... ${OPENBMC_BASE_URI}records/events/ clear data=${args}
Jay Azurine4c52eb2016-08-16 20:51:10 -0500216 should be equal as strings ${resp.status_code} ${HTTP_OK}
217
218Copy PNOR to BMC
219 Import Library SCPLibrary WITH NAME scp
220 Open Connection for SCP
221 Log Copying ${PNOR_IMAGE_PATH} to /tmp
222 scp.Put File ${PNOR_IMAGE_PATH} /tmp
223
224Flash PNOR
225 [Documentation] Calls flash bios update method to flash PNOR image
Gunnar Mills38032802016-12-12 13:43:40 -0600226 [Arguments] ${pnor_image}
Jay Azurine4c52eb2016-08-16 20:51:10 -0500227 @{arglist}= Create List ${pnor_image}
228 ${args}= Create Dictionary data=@{arglist}
George Keishing85ca05e2016-11-30 09:47:18 -0600229 ${resp}= Call Method ${OPENBMC_BASE_URI}control/flash/bios/ update
Michael Walsha6723f22016-11-22 11:12:01 -0600230 ... data=${args}
Jay Azurine4c52eb2016-08-16 20:51:10 -0500231 should be equal as strings ${resp.status_code} ${HTTP_OK}
232 Wait Until Keyword Succeeds 2 min 10 sec Is PNOR Flashing
233
234Get Flash BIOS Status
235 [Documentation] Returns the status of the flash BIOS API as a string. For
236 ... example 'Flashing', 'Flash Done', etc
George Keishing85ca05e2016-11-30 09:47:18 -0600237 ${data}= Read Properties ${OPENBMC_BASE_URI}control/flash/bios
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600238 [Return] ${data['status']}
Jay Azurine4c52eb2016-08-16 20:51:10 -0500239
240Is PNOR Flashing
241 [Documentation] Get BIOS 'Flashing' status. This indicates that PNOR
242 ... flashing has started.
243 ${status}= Get Flash BIOS Status
244 should be equal as strings ${status} Flashing
245
246Is PNOR Flash Done
247 [Documentation] Get BIOS 'Flash Done' status. This indicates that the
248 ... PNOR flashing has completed.
Leah McNutt9ba32272016-11-17 15:48:39 +0000249 ${status}= Get Flash BIOS Status
Jay Azurine4c52eb2016-08-16 20:51:10 -0500250 should be equal as strings ${status} Flash Done
251
252Is System State Host Booted
253 [Documentation] Checks whether system state is HOST_BOOTED.
Rahul Maheshwari2c725042017-01-29 22:55:28 -0600254 ${state}= Get BMC State Deprecated
Jay Azurine4c52eb2016-08-16 20:51:10 -0500255 should be equal as strings ${state} HOST_BOOTED
George Keishing5e870cd2016-08-24 10:05:47 -0500256
Rahul Maheshwari2c725042017-01-29 22:55:28 -0600257Is OS Starting
258 [Documentation] Check if boot progress is OS starting.
259 ${boot_progress}= Get Boot Progress
260 Should Be Equal ${boot_progress} FW Progress, Starting OS
261
George Keishing5e870cd2016-08-24 10:05:47 -0500262Verify Ping and REST Authentication
Michael Walsha6723f22016-11-22 11:12:01 -0600263 ${l_ping}= Run Keyword And Return Status
George Keishing5e870cd2016-08-24 10:05:47 -0500264 ... Ping Host ${OPENBMC_HOST}
George Keishingc4d3dc02016-09-19 03:45:55 -0500265 Run Keyword If '${l_ping}' == '${False}'
266 ... Fail msg=Ping Failed
George Keishing5e870cd2016-08-24 10:05:47 -0500267
Michael Walsha6723f22016-11-22 11:12:01 -0600268 ${l_rest}= Run Keyword And Return Status
George Keishing5e870cd2016-08-24 10:05:47 -0500269 ... Initialize OpenBMC
George Keishingc4d3dc02016-09-19 03:45:55 -0500270 Run Keyword If '${l_rest}' == '${False}'
271 ... Fail msg=REST Authentication Failed
George Keishing5e870cd2016-08-24 10:05:47 -0500272
273 # Just to make sure the SSH is working for SCP
274 Open Connection And Log In
275 ${system} ${stderr}= Execute Command hostname return_stderr=True
276 Should Be Empty ${stderr}
277
George Keishingc4d3dc02016-09-19 03:45:55 -0500278Check If BMC is Up
279 [Documentation] Wait for Host to be online. Checks every X seconds
280 ... interval for Y minutes and fails if timed out.
281 ... Default MAX timedout is 10 min, interval 10 seconds.
Gunnar Mills38032802016-12-12 13:43:40 -0600282 [Arguments] ${max_timeout}=${OPENBMC_REBOOT_TIMEOUT} min
George Keishingc4d3dc02016-09-19 03:45:55 -0500283 ... ${interval}=10 sec
284
285 Wait Until Keyword Succeeds
286 ... ${max_timeout} ${interval} Verify Ping and REST Authentication
287
George Keishingb3700812016-08-31 03:03:30 -0500288
289Check If warmReset is Initiated
290 [Documentation] Ping would be still alive, so try SSH to connect
291 ... if fails the ports are down indicating reboot
292 ... is in progress
George Keishing3c05d352016-12-13 06:54:50 -0600293
294 # Warm reset adds 3 seconds delay before forcing reboot
295 # To minimize race conditions, we wait for 7 seconds
296 Sleep 7s
George Keishingb3700812016-08-31 03:03:30 -0500297 ${alive}= Run Keyword and Return Status
298 ... Open Connection And Log In
299 Return From Keyword If '${alive}' == '${False}' ${False}
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600300 [Return] ${True}
George Keishingb3700812016-08-31 03:03:30 -0500301
George Keishing06ae4aa2016-08-30 01:41:28 -0500302Flush REST Sessions
303 [Documentation] Removes all the active session objects
304 Delete All Sessions
George Keishingb3700812016-08-31 03:03:30 -0500305
Sivas SRRe1143ae2016-08-26 22:31:02 -0500306Initialize DBUS cmd
307 [Documentation] Initialize dbus string with property string to extract
Gunnar Mills38032802016-12-12 13:43:40 -0600308 [Arguments] ${boot_property}
Michael Walsha6723f22016-11-22 11:12:01 -0600309 ${cmd}= Catenate ${dbuscmdBase} ${dbuscmdGet} ${dbuscmdString}
310 ${cmd}= Catenate ${cmd}${boot_property}
Sivas SRRe1143ae2016-08-26 22:31:02 -0500311 Set Global Variable ${dbuscmd} ${cmd}
312
George Keishing30c12ff2016-09-02 10:25:29 -0500313
Gunnar Mills9c760342016-12-08 10:12:06 -0600314Stop OBMC Console Client
315 [Documentation] Stop any running obmc_console_client
316 ... writing to file_path.
317 [Arguments] ${file_path}=/tmp/obmc-console.log
318
Michael Walsh01bd3682017-01-10 11:21:05 -0600319 ${cmd_buf}= Catenate SEPARATOR=${SPACE}
320 ... ps ax | grep obmc-console-client | grep ${file_path} | grep -v grep
321 ... | awk '{print $1}'
322
Gunnar Mills9c760342016-12-08 10:12:06 -0600323 ${pid}=
Michael Walsh01bd3682017-01-10 11:21:05 -0600324 ... Execute Command ${cmd_buf}
Gunnar Mills9c760342016-12-08 10:12:06 -0600325
326 Run Keyword If '${pid}' != '${EMPTY}'
327 ... Execute Command kill -s KILL ${pid}
328 ... ELSE Log "No obmc-console-client process running"
329
330
George Keishing30c12ff2016-09-02 10:25:29 -0500331Start SOL Console Logging
Gunnar Mills9c760342016-12-08 10:12:06 -0600332 [Documentation] Start a new obmc_console_client process and direct
333 ... output to a file.
334 [Arguments] ${file_path}=/tmp/obmc-console.log
George Keishing30c12ff2016-09-02 10:25:29 -0500335
336 Open Connection And Log In
337
Gunnar Mills9c760342016-12-08 10:12:06 -0600338 Stop OBMC Console Client ${file_path}
339
George Keishing30c12ff2016-09-02 10:25:29 -0500340 Start Command
Gunnar Mills9c760342016-12-08 10:12:06 -0600341 ... obmc-console-client > ${file_path}
George Keishing30c12ff2016-09-02 10:25:29 -0500342
343
344Stop SOL Console Logging
Michael Walsh01bd3682017-01-10 11:21:05 -0600345 [Documentation] Stop obmc_console_client process, if any, and
346 ... return the console output as a string.
347 [Arguments] ${file_path}=/tmp/obmc-console.log ${targ_file_path}=${EMPTY}
348
349 # Description of arguments:
350 # file_path The path on the obmc system where SOL output may be
351 # found.
352 # targ_file_path If specified, the file path to which SOL data should be
353 # written.
George Keishing30c12ff2016-09-02 10:25:29 -0500354
355 Open Connection And Log In
356
Gunnar Mills9c760342016-12-08 10:12:06 -0600357 Stop OBMC Console Client ${file_path}
George Keishing30c12ff2016-09-02 10:25:29 -0500358
Michael Walsh01bd3682017-01-10 11:21:05 -0600359 ${cmd_buf}= Set Variable cat ${file_path}
360
George Keishing30c12ff2016-09-02 10:25:29 -0500361 ${console} ${stderr}=
362 ... Execute Command
Michael Walsh01bd3682017-01-10 11:21:05 -0600363 ... if [ -f ${file_path} ] ; then cat ${file_path} ; fi
George Keishing30c12ff2016-09-02 10:25:29 -0500364 ... return_stderr=True
Gunnar Mills9c760342016-12-08 10:12:06 -0600365 Should Be Empty ${stderr}
George Keishing30c12ff2016-09-02 10:25:29 -0500366
Michael Walsh01bd3682017-01-10 11:21:05 -0600367 Run Keyword If '${targ_file_path}' != '${EMPTY}'
368 ... Append To File ${targ_file_path} ${console}
George Keishing30c12ff2016-09-02 10:25:29 -0500369
Michael Walsh01bd3682017-01-10 11:21:05 -0600370 [Return] ${console}
George Keishing30c12ff2016-09-02 10:25:29 -0500371
372Get Time Stamp
373 [Documentation] Get the current time stamp data
374 ${cur_time}= Get Current Date result_format=%Y%m%d%H%M%S%f
Sridevi Rameshb96a0c32016-10-19 05:09:52 -0500375 [Return] ${cur_time}
George Keishing30c12ff2016-09-02 10:25:29 -0500376
George Keishing1b150202016-09-29 08:51:58 -0500377
378Verify BMC State
379 [Documentation] Get the BMC state and verify if the current
380 ... BMC state is as expected.
381 [Arguments] ${expected}
382
Rahul Maheshwari2c725042017-01-29 22:55:28 -0600383 ${current}= Get BMC State Deprecated
George Keishing8db0e1b2016-10-20 13:46:54 -0500384 Should Contain ${expected} ${current}
George Keishing1b150202016-09-29 08:51:58 -0500385
Rahul Maheshwarif684ba72016-10-25 07:24:41 -0500386Start Journal Log
387 [Documentation] Start capturing journal log to a file in /tmp using
388 ... journalctl command. By default journal log is collected
389 ... at /tmp/journal_log else user input location.
390 ... The File is appended with datetime.
391 [Arguments] ${file_path}=/tmp/journal_log
392
393 Open Connection And Log In
394
395 ${cur_time}= Get Time Stamp
396 Set Global Variable ${LOG_TIME} ${cur_time}
397 Start Command
398 ... journalctl -f > ${file_path}-${LOG_TIME}
399 Log Journal Log Started: ${file_path}-${LOG_TIME}
400
401Stop Journal Log
402 [Documentation] Stop journalctl process if its running.
403 ... By default return log from /tmp/journal_log else
404 ... user input location.
405 [Arguments] ${file_path}=/tmp/journal_log
406
407 Open Connection And Log In
408
409 ${rc}=
410 ... Execute Command
411 ... ps ax | grep journalctl | grep -v grep
412 ... return_stdout=False return_rc=True
413
414 Return From Keyword If '${rc}' == '${1}'
415 ... No journal log process running
416
417 ${output} ${stderr}=
418 ... Execute Command killall journalctl
419 ... return_stderr=True
420 Should Be Empty ${stderr}
421
422 ${journal_log} ${stderr}=
423 ... Execute Command
424 ... cat ${file_path}-${LOG_TIME}
425 ... return_stderr=True
426 Should Be Empty ${stderr}
427
428 Log ${journal_log}
429
430 Execute Command rm ${file_path}-${LOG_TIME}
431
432 [Return] ${journal_log}
Rahul Maheshwari757d80c2016-10-17 01:09:55 -0500433
434Mac Address To Hex String
435 [Documentation] Converts MAC address into hex format.
436 ... Example
437 ... Given the following MAC: 00:01:6C:80:02:78
438 ... This keyword will return: 0x00 0x01 0x6C 0x80 0x02 0x78
439 ... Description of arguments:
Michael Walsh01bd3682017-01-10 11:21:05 -0600440 ... i_macaddress MAC address in the following format
441 ... 00:01:6C:80:02:78
Rahul Maheshwari757d80c2016-10-17 01:09:55 -0500442 [Arguments] ${i_macaddress}
443
444 ${mac_hex}= Catenate 0x${i_macaddress.replace(':', ' 0x')}
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600445 [Return] ${mac_hex}
Rahul Maheshwari757d80c2016-10-17 01:09:55 -0500446
447IP Address To Hex String
448 [Documentation] Converts IP address into hex format.
449 ... Example:
450 ... Given the following IP: 10.3.164.100
451 ... This keyword will return: 0xa 0x3 0xa4 0xa0
452 ... Description of arguments:
Michael Walsh01bd3682017-01-10 11:21:05 -0600453 ... i_ipaddress IP address in the following format
454 ... 10.10.10.10
Rahul Maheshwari757d80c2016-10-17 01:09:55 -0500455 [Arguments] ${i_ipaddress}
456
457 @{ip}= Split String ${i_ipaddress} .
458 ${index}= Set Variable ${0}
459
460 :FOR ${item} IN @{ip}
461 \ ${hex}= Convert To Hex ${item} prefix=0x lowercase=yes
462 \ Set List Value ${ip} ${index} ${hex}
463 \ ${index}= Set Variable ${index + 1}
464 ${ip_hex}= Catenate @{ip}
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600465 [Return] ${ip_hex}
Sivas SRRea85d1f2016-11-13 22:44:28 -0600466
467BMC CPU Performance Check
468 [Documentation] Minimal 10% of proc should be free in this instance
469
470 ${bmc_cpu_usage_output} ${stderr}= Execute Command ${bmc_cpu_usage_cmd}
471 ... return_stderr=True
472 Should be empty ${stderr}
473 ${bmc_cpu_percentage}= Fetch From Left ${bmc_cpu_usage_output} %
474 Should be true ${bmc_cpu_percentage} < 90
475
476BMC Mem Performance Check
477 [Documentation] Minimal 10% of memory should be free in this instance
478
479 ${bmc_mem_free_output} ${stderr}= Execute Command ${bmc_mem_free_cmd}
480 ... return_stderr=True
481 Should be empty ${stderr}
482
483 ${bmc_mem_total_output} ${stderr}= Execute Command ${bmc_mem_total_cmd}
484 ... return_stderr=True
485 Should be empty ${stderr}
486
487 ${bmc_mem_percentage}= Evaluate ${bmc_mem_free_output}*100
488 ${bmc_mem_percentage}= Evaluate
489 ... ${bmc_mem_percentage}/${bmc_mem_total_output}
490 Should be true ${bmc_mem_percentage} > 10
491
Sivas SRRaca55712016-12-21 04:32:35 -0600492BMC File System Usage Check
493 [Documentation] Check the file system space. None should be 100% full
494 ... except /dev/mtdblock5
495 ${bmc_fs_usage_output} ${stderr}= Execute Command
496 ... ${bmc_file_system_usage_cmd} return_stderr=True
497 Should Be Empty ${stderr}
498 Should Be True ${bmc_fs_usage_output}==0
499
Sivas SRRea85d1f2016-11-13 22:44:28 -0600500Check BMC CPU Performance
501 [Documentation] Minimal 10% of proc should be free in 3 sample
502 :FOR ${var} IN Range 1 4
503 \ BMC CPU Performance check
504
505Check BMC Mem Performance
506 [Documentation] Minimal 10% of memory should be free
507
508 :FOR ${var} IN Range 1 4
509 \ BMC Mem Performance check
510
Sivas SRRaca55712016-12-21 04:32:35 -0600511Check BMC File System Performance
512 [Documentation] Check for file system usage for 4 times
513
514 :FOR ${var} IN Range 1 4
515 \ BMC File System Usage check
516
Rahul Maheshwari9a8d3b12016-12-05 04:06:16 -0600517Get Endpoint Paths
518 [Documentation] Returns all url paths ending with given endpoint
519 ... Example:
520 ... Given the following endpoint: cpu
Michael Walsh01bd3682017-01-10 11:21:05 -0600521 ... This keyword will return: list of all urls ending with
522 ... cpu -
Rahul Maheshwari9a8d3b12016-12-05 04:06:16 -0600523 ... /org/openbmc/inventory/system/chassis/motherboard/cpu0,
524 ... /org/openbmc/inventory/system/chassis/motherboard/cpu1
525 ... Description of arguments:
526 ... path URL path for enumeration
527 ... endpoint string for which url path ending
528 [Arguments] ${path} ${endpoint}
529
530 ${resp}= Read Properties ${path}/enumerate timeout=30
531 log Dictionary ${resp}
532
533 ${list}= Get Dictionary Keys ${resp}
534 ${resp}= Get Matches ${list} regexp=^.*[0-9a-z_].${endpoint}[0-9]*$
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600535 [Return] ${resp}
Sridevi Rameshb96a0c32016-10-19 05:09:52 -0500536
Sridevi Ramesh1699d372016-12-06 00:20:22 -0600537
Sridevi Rameshb96a0c32016-10-19 05:09:52 -0500538Check Zombie Process
539 [Documentation] Check if any defunct process exist or not on BMC
Michael Walsh01bd3682017-01-10 11:21:05 -0600540 ${count} ${stderr} ${rc}= Execute Command ps -o stat | grep Z | wc -l
Sridevi Rameshb96a0c32016-10-19 05:09:52 -0500541 ... return_stderr=True return_rc=True
542 Should Be True ${count}==0
543 Should Be Empty ${stderr}
George Keishing5327d012016-12-08 08:43:29 -0600544
545Prune Journal Log
546 [Documentation] Prune archived journal logs.
547 [Arguments] ${vacuum_size}=1M
548
549 # This keyword can be used to prevent the journal
550 # log from filling up the /run filesystem.
551 # This command will retain only the latest logs
552 # of the user specified size.
553
554 Open Connection And Log In
555 ${output} ${stderr} ${rc}=
556 ... Execute Command
557 ... journalctl --vacuum-size=${vacuum_size}
558 ... return_stderr=True return_rc=True
559
560 Should Be Equal ${rc} ${0} msg=${stderr}
561 Should Contain ${stderr} Vacuuming done
Sridevi Ramesh1699d372016-12-06 00:20:22 -0600562
563Set BMC Power Policy
564 [Documentation] Set the given BMC power policy.
565 [arguments] ${policy}
566
567 ${valueDict}= create dictionary data=${policy}
568 Write Attribute ${HOST_SETTING} power_policy data=${valueDict}
569 ${currentPolicy}= Read Attribute ${HOST_SETTING} power_policy
570 Should Be Equal ${currentPolicy} ${policy}
George Keishingcce9df22017-01-24 06:19:33 -0600571
George Keishing4d6f3d62017-02-06 09:50:41 -0600572Get System Power Policy
573 [Documentation] Get the BMC power policy.
574 ${currentPolicy}= Read Attribute ${HOST_SETTING} power_policy
575 [Return] ${currentPolicy}
George Keishingcce9df22017-01-24 06:19:33 -0600576
577Set BMC Reset Reference Time
578 [Documentation] Set current boot time as a reference and increment
579 ... boot count.
580
581 ${cur_btime}= Get BMC Boot Time
582 Run Keyword If ${cur_btime} > ${BOOT_TIME}
583 ... Run Keywords
584 ... Set Global Variable ${BOOT_TIME} ${cur_btime}
585 ... AND
586 ... Set Global Variable ${BOOT_COUNT} ${BOOT_COUNT + 1}
587
588
589Get BMC Boot Time
590 [Documentation] Get boot time from /proc/stat.
591
592 Open Connection And Log In
593 ${output} ${stderr}=
594 ... Execute Command egrep '^btime ' /proc/stat | cut -f 2 -d ' '
595 ... return_stderr=True
596 Should Be Empty ${stderr}
597 ${btime}= Convert To Integer ${output}
598 [Return] ${btime}