blob: d9ab79b4445b4250c42fd7f6db63c65fa05e4ae9 [file] [log] [blame]
Chris Austenb29d2e82016-06-07 12:25:35 -05001*** Settings ***
2Library Collections
3Library String
4Library RequestsLibrary.RequestsKeywords
5Library OperatingSystem
6Resource ../lib/resource.txt
7Library ../lib/disable_warning_urllib.py
8
9*** Variables ***
10# Response codes
11${HTTP_CONTINUE} 100
12${HTTP_SWITCHING_PROTOCOLS} 101
13${HTTP_PROCESSING} 102
14${HTTP_OK} 200
15${HTTP_CREATED} 201
16${HTTP_ACCEPTED} 202
17${HTTP_NON_AUTHORITATIVE_INFORMATION} 203
18${HTTP_NO_CONTENT} 204
19${HTTP_RESET_CONTENT} 205
20${HTTP_PARTIAL_CONTENT} 206
21${HTTP_MULTI_STATUS} 207
22${HTTP_IM_USED} 226
23${HTTP_MULTIPLE_CHOICES} 300
24${HTTP_MOVED_PERMANENTLY} 301
25${HTTP_FOUND} 302
26${HTTP_SEE_OTHER} 303
27${HTTP_NOT_MODIFIED} 304
28${HTTP_USE_PROXY} 305
29${HTTP_TEMPORARY_REDIRECT} 307
30${HTTP_BAD_REQUEST} 400
31${HTTP_UNAUTHORIZED} 401
32${HTTP_PAYMENT_REQUIRED} 402
33${HTTP_FORBIDDEN} 403
34${HTTP_NOT_FOUND} 404
35${HTTP_METHOD_NOT_ALLOWED} 405
36${HTTP_NOT_ACCEPTABLE} 406
37${HTTP_PROXY_AUTHENTICATION_REQUIRED} 407
38${HTTP_REQUEST_TIMEOUT} 408
39${HTTP_CONFLICT} 409
40${HTTP_GONE} 410
41${HTTP_LENGTH_REQUIRED} 411
42${HTTP_PRECONDITION_FAILED} 412
43${HTTP_REQUEST_ENTITY_TOO_LARGE} 413
44${HTTP_REQUEST_URI_TOO_LONG} 414
45${HTTP_UNSUPPORTED_MEDIA_TYPE} 415
46${HTTP_REQUESTED_RANGE_NOT_SATISFIABLE} 416
47${HTTP_EXPECTATION_FAILED} 417
48${HTTP_UNPROCESSABLE_ENTITY} 422
49${HTTP_LOCKED} 423
50${HTTP_FAILED_DEPENDENCY} 424
51${HTTP_UPGRADE_REQUIRED} 426
52${HTTP_INTERNAL_SERVER_ERROR} 500
53${HTTP_NOT_IMPLEMENTED} 501
54${HTTP_BAD_GATEWAY} 502
55${HTTP_SERVICE_UNAVAILABLE} 503
56${HTTP_GATEWAY_TIMEOUT} 504
57${HTTP_HTTP_VERSION_NOT_SUPPORTED} 505
58${HTTP_INSUFFICIENT_STORAGE} 507
59${HTTP_NOT_EXTENDED} 510
Michael Walsha6723f22016-11-22 11:12:01 -060060# Assign default value to QUIET for programs which may not define it.
61${QUIET} ${0}
Chris Austenb29d2e82016-06-07 12:25:35 -050062
63*** Keywords ***
64OpenBMC Get Request
manasarm604b8cd2018-01-29 12:14:20 +053065 [Documentation] Do REST GET request and return the result.
66 # Example result data:
67 # Response code:200, Content:{
68 # "data": [
69 # "/xyz/openbmc_project/state/host0",
70 # "/xyz/openbmc_project/state/chassis0",
71 # "/xyz/openbmc_project/state/bmc0"
72 # ],
73 # "message": "200 OK",
74 # "status": "ok"
75 # }
George Keishing41c44cf2017-11-15 08:02:59 -060076 [Arguments] ${uri} ${timeout}=30 ${quiet}=${QUIET} &{kwargs}
manasarm604b8cd2018-01-29 12:14:20 +053077 # Description of argument(s):
78 # uri The URI to establish connection with
79 # (e.g. '/xyz/openbmc_project/software/').
80 # timeout Timeout in seconds to establish connection with URI.
81 # quiet If enabled, turns off logging to console.
82 # kwargs Any additional arguments to be passed directly to the
83 # Get Request call. For example, the caller might
84 # set kwargs as follows:
85 # ${kwargs}= Create Dictionary allow_redirect=${True}.
Michael Walshf00edee2016-12-09 14:10:26 -060086
87 Initialize OpenBMC ${timeout} quiet=${quiet}
Chris Austenb29d2e82016-06-07 12:25:35 -050088 ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
Michael Walsha6723f22016-11-22 11:12:01 -060089 Run Keyword If '${quiet}' == '${0}' Log Request method=Get
90 ... base_uri=${base_uri} args=&{kwargs}
Michael Walsha6723f22016-11-22 11:12:01 -060091 ${ret}= Get Request openbmc ${base_uri} &{kwargs} timeout=${timeout}
92 Run Keyword If '${quiet}' == '${0}' Log Response ${ret}
George Keishing08540c02017-07-19 09:42:50 -050093 Delete All Sessions
Chris Austenb29d2e82016-06-07 12:25:35 -050094 [Return] ${ret}
95
96OpenBMC Post Request
manasarm604b8cd2018-01-29 12:14:20 +053097 [Documentation] Do REST POST request and return the result.
98 # Example result data:
99 # <Response [200]>
Michael Walsha6723f22016-11-22 11:12:01 -0600100 [Arguments] ${uri} ${timeout}=10 ${quiet}=${QUIET} &{kwargs}
manasarm604b8cd2018-01-29 12:14:20 +0530101 # Description of argument(s):
102 # uri The URI to establish connection with
103 # (e.g. '/xyz/openbmc_project/software/').
104 # timeout Timeout in seconds to establish connection with URI.
105 # quiet If enabled, turns off logging to console.
106 # kwargs Any additional arguments to be passed directly to the
107 # Post Request call. For example, the caller might
108 # set kwargs as follows:
109 # ${kwargs}= Create Dictionary allow_redirect=${True}.
Michael Walsha6723f22016-11-22 11:12:01 -0600110
Michael Walshf00edee2016-12-09 14:10:26 -0600111 Initialize OpenBMC ${timeout} quiet=${quiet}
Chris Austenb29d2e82016-06-07 12:25:35 -0500112 ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
113 ${headers}= Create Dictionary Content-Type=application/json
114 set to dictionary ${kwargs} headers ${headers}
Michael Walsha6723f22016-11-22 11:12:01 -0600115 Run Keyword If '${quiet}' == '${0}' Log Request method=Post
116 ... base_uri=${base_uri} args=&{kwargs}
Michael Walsha6723f22016-11-22 11:12:01 -0600117 ${ret}= Post Request openbmc ${base_uri} &{kwargs} timeout=${timeout}
118 Run Keyword If '${quiet}' == '${0}' Log Response ${ret}
George Keishing08540c02017-07-19 09:42:50 -0500119 Delete All Sessions
Chris Austenb29d2e82016-06-07 12:25:35 -0500120 [Return] ${ret}
121
122OpenBMC Put Request
manasarm604b8cd2018-01-29 12:14:20 +0530123 [Documentation] Do REST PUT request on the resource identified by the URI.
Rahul Maheshwari79c12942016-10-17 09:39:17 -0500124 [Arguments] ${uri} ${timeout}=10 &{kwargs}
manasarm604b8cd2018-01-29 12:14:20 +0530125 # Description of argument(s):
126 # uri The URI to establish connection with
127 # (e.g. '/xyz/openbmc_project/software/').
128 # timeout Timeout in seconds to establish connection with URI.
129 # kwargs Arguments passed to the REST call.
130 # kwargs Any additional arguments to be passed directly to the
131 # Put Request call. For example, the caller might
132 # set kwargs as follows:
133 # ${kwargs}= Create Dictionary allow_redirect=${True}.
Michael Walshf00edee2016-12-09 14:10:26 -0600134
135 Initialize OpenBMC ${timeout}
Chris Austenb29d2e82016-06-07 12:25:35 -0500136 ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
137 ${headers}= Create Dictionary Content-Type=application/json
138 set to dictionary ${kwargs} headers ${headers}
139 Log Request method=Put base_uri=${base_uri} args=&{kwargs}
Michael Walsha6723f22016-11-22 11:12:01 -0600140 ${ret}= Put Request openbmc ${base_uri} &{kwargs} timeout=${timeout}
Chris Austenb29d2e82016-06-07 12:25:35 -0500141 Log Response ${ret}
George Keishing08540c02017-07-19 09:42:50 -0500142 Delete All Sessions
Chris Austenb29d2e82016-06-07 12:25:35 -0500143 [Return] ${ret}
144
145OpenBMC Delete Request
manasarm604b8cd2018-01-29 12:14:20 +0530146 [Documentation] Do REST request to delete the resource identified by the
147 ... URI.
Rahul Maheshwari79c12942016-10-17 09:39:17 -0500148 [Arguments] ${uri} ${timeout}=10 &{kwargs}
manasarm604b8cd2018-01-29 12:14:20 +0530149 # Description of argument(s):
150 # uri The URI to establish connection with
151 # (e.g. '/xyz/openbmc_project/software/').
152 # timeout Timeout in seconds to establish connection with URI.
153 # kwargs Any additional arguments to be passed directly to the
154 # Delete Request call. For example, the caller might
155 # set kwargs as follows:
156 # ${kwargs}= Create Dictionary allow_redirect=${True}.
Michael Walshf00edee2016-12-09 14:10:26 -0600157
158 Initialize OpenBMC ${timeout}
Chris Austenb29d2e82016-06-07 12:25:35 -0500159 ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
160 Log Request method=Delete base_uri=${base_uri} args=&{kwargs}
George Keishing0e7c3a02017-04-17 05:01:14 -0500161 ${ret}= Delete Request openbmc ${base_uri} &{kwargs} timeout=${timeout}
Chris Austenb29d2e82016-06-07 12:25:35 -0500162 Log Response ${ret}
George Keishing08540c02017-07-19 09:42:50 -0500163 Delete All Sessions
Chris Austenb29d2e82016-06-07 12:25:35 -0500164 [Return] ${ret}
165
166Initialize OpenBMC
manasarm604b8cd2018-01-29 12:14:20 +0530167 [Documentation] Do a REST login connection within specified time.
George Keishing1cdc6dd2017-04-24 15:31:03 -0500168 [Arguments] ${timeout}=20 ${quiet}=${1}
George Keishingf1331672018-01-18 05:19:02 -0600169 ... ${OPENBMC_USERNAME}=${OPENBMC_USERNAME}
170 ... ${OPENBMC_PASSWORD}=${OPENBMC_PASSWORD}
Michael Walshf00edee2016-12-09 14:10:26 -0600171
George Keishing1cdc6dd2017-04-24 15:31:03 -0500172 # Description of argument(s):
173 # timeout REST login attempt time out.
Gunnar Mills28e403b2017-10-25 16:16:38 -0500174 # quiet Suppress console log if set.
George Keishing1cdc6dd2017-04-24 15:31:03 -0500175
176 # TODO : Task to revert this changes openbmc/openbmc-test-automation#532
177 # This will retry at 20 second interval.
178 Wait Until Keyword Succeeds 40 sec 20 sec
179 ... Post Login Request ${timeout} ${quiet}
George Keishingf1331672018-01-18 05:19:02 -0600180 ... ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD}
George Keishing1cdc6dd2017-04-24 15:31:03 -0500181
182Post Login Request
manasarm604b8cd2018-01-29 12:14:20 +0530183 [Documentation] Do REST login request.
George Keishing1cdc6dd2017-04-24 15:31:03 -0500184 [Arguments] ${timeout}=20 ${quiet}=${1}
George Keishingf1331672018-01-18 05:19:02 -0600185 ... ${OPENBMC_USERNAME}=${OPENBMC_USERNAME}
186 ... ${OPENBMC_PASSWORD}=${OPENBMC_PASSWORD}
George Keishing1cdc6dd2017-04-24 15:31:03 -0500187
188 # Description of argument(s):
189 # timeout REST login attempt time out.
Gunnar Mills28e403b2017-10-25 16:16:38 -0500190 # quiet Suppress console log if set.
George Keishing1cdc6dd2017-04-24 15:31:03 -0500191
192 Create Session openbmc ${AUTH_URI} timeout=${timeout} max_retries=3
Michael Walsha6723f22016-11-22 11:12:01 -0600193 ${headers}= Create Dictionary Content-Type=application/json
194 @{credentials}= Create List ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD}
195 ${data}= create dictionary data=@{credentials}
Michael Walshf00edee2016-12-09 14:10:26 -0600196 ${status} ${resp}= Run Keyword And Ignore Error Post Request openbmc
197 ... /login data=${data} headers=${headers}
198
199 Should Be Equal ${status} PASS msg=${resp}
200 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
Chris Austenb29d2e82016-06-07 12:25:35 -0500201
George Keishinge8225522017-03-31 09:21:13 -0500202Log Out OpenBMC
manasarm604b8cd2018-01-29 12:14:20 +0530203 [Documentation] Log out of the openbmc REST session.
George Keishinge8225522017-03-31 09:21:13 -0500204
205 ${headers}= Create Dictionary Content-Type=application/json
206 ${data}= Create dictionary data=@{EMPTY}
207
208 # If there is no active sesion it will throw the following exception
209 # "Non-existing index or alias 'openbmc'"
210 ${resp}= Post Request openbmc
211 ... /logout data=${data} headers=${headers}
212
213 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
214 ... msg=${resp}
215
Chris Austenb29d2e82016-06-07 12:25:35 -0500216Log Request
manasarm604b8cd2018-01-29 12:14:20 +0530217 [Documentation] Log the specific REST URI, method name on the console.
Chris Austenb29d2e82016-06-07 12:25:35 -0500218 [Arguments] &{kwargs}
Michael Walsha6723f22016-11-22 11:12:01 -0600219 ${msg}= Catenate SEPARATOR= URI: ${AUTH_URI} ${kwargs["base_uri"]}
220 ... , method: ${kwargs["method"]} , args: ${kwargs["args"]}
Chris Austenb29d2e82016-06-07 12:25:35 -0500221 Logging ${msg} console=True
222
223Log Response
manasarm604b8cd2018-01-29 12:14:20 +0530224 [Documentation] Log the response code on the console.
Chris Austenb29d2e82016-06-07 12:25:35 -0500225 [Arguments] ${resp}
Michael Walsha6723f22016-11-22 11:12:01 -0600226 ${msg}= Catenate SEPARATOR= Response code: ${resp.status_code}
227 ... , Content: ${resp.content}
Chris Austenb29d2e82016-06-07 12:25:35 -0500228 Logging ${msg} console=True
229
230Logging
manasarm604b8cd2018-01-29 12:14:20 +0530231 [Documentation] Log the specified message on the console.
Chris Austenb29d2e82016-06-07 12:25:35 -0500232 [Arguments] ${msg} ${console}=default False
233 Log ${msg} console=True
234
235Read Attribute
manasarm604b8cd2018-01-29 12:14:20 +0530236 [Documentation] Retrieve attribute value from URI and return result.
237 # Example result data for the attribute 'FieldModeEnabled' in
238 # "/xyz/openbmc_project/software/attr/" :
239 # 0
Gunnar Mills38032802016-12-12 13:43:40 -0600240 [Arguments] ${uri} ${attr} ${timeout}=10 ${quiet}=${QUIET}
manasarmc505e382018-02-05 14:05:48 +0530241 ... ${expected_value}=${EMPTY}
manasarm604b8cd2018-01-29 12:14:20 +0530242 # Description of argument(s):
243 # uri URI of the object that the attribute lives on
244 # (e.g. '/xyz/openbmc_project/software/').
245 # attr Name of the attribute (e.g. 'FieldModeEnabled').
246 # timeout Timeout for the REST call.
247 # quiet If enabled, turns off logging to console.
manasarmc505e382018-02-05 14:05:48 +0530248 # expected_value If this argument is not empty, the retrieved value
249 # must match this value.
manasarm604b8cd2018-01-29 12:14:20 +0530250
Michael Walsha6723f22016-11-22 11:12:01 -0600251 ${resp}= OpenBMC Get Request ${uri}/attr/${attr} timeout=${timeout}
252 ... quiet=${quiet}
Michael Walsh9cd61932017-01-17 16:11:02 -0600253 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
Chris Austenb29d2e82016-06-07 12:25:35 -0500254 ${content}= To Json ${resp.content}
manasarmc505e382018-02-05 14:05:48 +0530255 Run Keyword If '${expected_value}' != '${EMPTY}'
256 ... Should Be Equal As Strings ${expected_value} ${content["data"]}
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600257 [Return] ${content["data"]}
Chris Austenb29d2e82016-06-07 12:25:35 -0500258
Charles Paul Hoferf45e5ee2017-10-04 12:15:48 -0500259
Chris Austenb29d2e82016-06-07 12:25:35 -0500260Write Attribute
Charles Paul Hoferf45e5ee2017-10-04 12:15:48 -0500261 [Documentation] Write a D-Bus attribute with REST.
262 [Arguments] ${uri} ${attr} ${timeout}=10 ${verify}=${FALSE}
263 ... ${expected_value}=${EMPTY} &{kwargs}
264
265 # Description of argument(s):
266 # uri URI of the object that the attribute lives on
267 # (e.g. '/xyz/openbmc_project/software/').
268 # attr Name of the attribute (e.g. 'FieldModeEnabled').
269 # timeout Timeout for the REST call.
270 # verify If set to ${TRUE}, the attribute will be read back to
271 # ensure that its value is set to ${verify_attr}.
272 # expected_value Only used if verify is set to ${TRUE}. The value that
273 # ${attr} should be set to. This defaults to
274 # ${kwargs['data']. There are cases where the caller
275 # expects some other value in which case this value can
276 # be explicitly specified.
277 # kwargs Arguments passed to the REST call. This should always
278 # contain the value to set the property to at the 'data'
279 # key (e.g. data={"data": 1}).
280
281 ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
282 ${resp}= Openbmc Put Request ${base_uri}/attr/${attr}
Michael Walsha6723f22016-11-22 11:12:01 -0600283 ... timeout=${timeout} &{kwargs}
Charles Paul Hoferf45e5ee2017-10-04 12:15:48 -0500284 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
285
286 # Verify the attribute was set correctly if the caller requested it.
287 Return From Keyword If ${verify} == ${FALSE}
288
289 ${expected_value}= Set Variable If '${expected_value}' == '${EMPTY}'
Charles Paul Hofer00401e72017-10-31 11:42:30 -0500290 ... ${kwargs['data']['data']} ${expected_value}
Charles Paul Hoferf45e5ee2017-10-04 12:15:48 -0500291 ${value}= Read Attribute ${uri} ${attr}
292 Should Be Equal ${value} ${expected_value}
293
Chris Austenb29d2e82016-06-07 12:25:35 -0500294Read Properties
manasarm604b8cd2018-01-29 12:14:20 +0530295 [Documentation] Read data part of the URI object and return result.
296 # Example result data:
297 # [u'/xyz/openbmc_project/software/cf7bf9d5',
298 # u'/xyz/openbmc_project/software/5ecb8b2c',
299 # u'/xyz/openbmc_project/software/active',
300 # u'/xyz/openbmc_project/software/functional']
George Keishing335f5362017-06-30 15:11:20 -0500301 [Arguments] ${uri} ${timeout}=10 ${quiet}=${QUIET}
manasarm604b8cd2018-01-29 12:14:20 +0530302 # Description of argument(s):
303 # uri URI of the object
304 # (e.g. '/xyz/openbmc_project/software/').
305 # timeout Timeout for the REST call.
306 # quiet If enabled, turns off logging to console.
307
George Keishing335f5362017-06-30 15:11:20 -0500308 ${resp}= OpenBMC Get Request ${uri} timeout=${timeout} quiet=${quiet}
309 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
310 ${content}= To Json ${resp.content}
311 [Return] ${content["data"]}
Chris Austenb29d2e82016-06-07 12:25:35 -0500312
313Call Method
manasarm604b8cd2018-01-29 12:14:20 +0530314 [Documentation] Invoke the specific REST service method.
Gunnar Mills38032802016-12-12 13:43:40 -0600315 [Arguments] ${uri} ${method} ${timeout}=10 ${quiet}=${QUIET} &{kwargs}
manasarm604b8cd2018-01-29 12:14:20 +0530316 # Description of arguments:
317 # uri The URI to establish connection with
318 # (e.g. '/xyz/openbmc_project/software/').
319 # timeout Timeout in seconds to establish connection with URI.
320 # quiet If enabled, turns off logging to console.
321 # kwargs Arguments passed to the REST call.
Michael Walsha6723f22016-11-22 11:12:01 -0600322
Chris Austenb29d2e82016-06-07 12:25:35 -0500323 ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
Michael Walsha6723f22016-11-22 11:12:01 -0600324 ${resp}= OpenBmc Post Request ${base_uri}/action/${method}
325 ... timeout=${timeout} quiet=${quiet} &{kwargs}
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600326 [Return] ${resp}
Saqib Khanbb8b63f2017-05-24 10:58:01 -0500327
328Upload Image To BMC
manasarm604b8cd2018-01-29 12:14:20 +0530329 [Documentation] Upload image to BMC device using REST POST operation.
George Keishingad9a8802017-08-08 12:41:48 -0500330 [Arguments] ${uri} ${timeout}=10 ${quiet}=${1} &{kwargs}
Saqib Khanbb8b63f2017-05-24 10:58:01 -0500331
332 # Description of argument(s):
333 # uri URI for uploading image via REST e.g. "/upload/image".
334 # timeout Time allocated for the REST command to return status
335 # (specified in Robot Framework Time Format e.g. "3 mins").
manasarm604b8cd2018-01-29 12:14:20 +0530336 # quiet If enabled, turns off logging to console.
Saqib Khanbb8b63f2017-05-24 10:58:01 -0500337 # kwargs A dictionary keys/values to be passed directly to
338 # Post Request.
339
340 Initialize OpenBMC ${timeout} quiet=${quiet}
341 ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
342 ${headers}= Create Dictionary Content-Type=application/octet-stream
343 ... Accept=application/octet-stream
344 Set To Dictionary ${kwargs} headers ${headers}
345 Run Keyword If '${quiet}' == '${0}' Log Request method=Post
346 ... base_uri=${base_uri} args=&{kwargs}
347 ${ret}= Post Request openbmc ${base_uri} &{kwargs} timeout=${timeout}
348 Run Keyword If '${quiet}' == '${0}' Log Response ${ret}
349 Should Be Equal As Strings ${ret.status_code} ${HTTP_OK}
George Keishing08540c02017-07-19 09:42:50 -0500350 Delete All Sessions