blob: 572a73f2a3b972f021c15d750af7aa71537ba666 [file] [log] [blame]
Chris Austenb29d2e82016-06-07 12:25:35 -05001*** Settings ***
2Library Collections
3Library String
4Library RequestsLibrary.RequestsKeywords
5Library OperatingSystem
Sandhya Somashekar839a0c22019-01-31 05:05:43 -06006Resource resource.robot
George Keishingeaa73b72018-07-30 09:30:16 -05007Library disable_warning_urllib.py
Michael Walshad66c952018-10-04 15:12:47 -05008Library utils.py
Steven Sombarb3489242018-12-13 15:59:02 -06009Library gen_misc.py
Sridevi Ramesheadeef02019-01-17 08:56:18 -060010Library var_funcs.py
George Keishingeaa73b72018-07-30 09:30:16 -050011Resource rest_response_code.robot
Chris Austenb29d2e82016-06-07 12:25:35 -050012
13*** Variables ***
Michael Walsha6723f22016-11-22 11:12:01 -060014# Assign default value to QUIET for programs which may not define it.
15${QUIET} ${0}
Chris Austenb29d2e82016-06-07 12:25:35 -050016
Sridevi Ramesheadeef02019-01-17 08:56:18 -060017${XAUTH_TOKEN} ${EMPTY}
18
Chris Austenb29d2e82016-06-07 12:25:35 -050019*** Keywords ***
20OpenBMC Get Request
manasarm604b8cd2018-01-29 12:14:20 +053021 [Documentation] Do REST GET request and return the result.
22 # Example result data:
23 # Response code:200, Content:{
24 # "data": [
25 # "/xyz/openbmc_project/state/host0",
26 # "/xyz/openbmc_project/state/chassis0",
27 # "/xyz/openbmc_project/state/bmc0"
28 # ],
29 # "message": "200 OK",
30 # "status": "ok"
31 # }
George Keishing41c44cf2017-11-15 08:02:59 -060032 [Arguments] ${uri} ${timeout}=30 ${quiet}=${QUIET} &{kwargs}
manasarm604b8cd2018-01-29 12:14:20 +053033 # Description of argument(s):
34 # uri The URI to establish connection with
35 # (e.g. '/xyz/openbmc_project/software/').
36 # timeout Timeout in seconds to establish connection with URI.
37 # quiet If enabled, turns off logging to console.
38 # kwargs Any additional arguments to be passed directly to the
39 # Get Request call. For example, the caller might
40 # set kwargs as follows:
41 # ${kwargs}= Create Dictionary allow_redirect=${True}.
Michael Walshf00edee2016-12-09 14:10:26 -060042
Sridevi Ramesheadeef02019-01-17 08:56:18 -060043 Initialize OpenBMC ${timeout} quiet=${quiet}
44
Chris Austenb29d2e82016-06-07 12:25:35 -050045 ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
Sridevi Ramesheadeef02019-01-17 08:56:18 -060046 ${headers}= Create Dictionary Content-Type=application/octet-stream
47 ... X-Auth-Token=${XAUTH_TOKEN} Accept=application/octet-stream
48 Set To Dictionary ${kwargs} headers ${headers}
Michael Walsha6723f22016-11-22 11:12:01 -060049 Run Keyword If '${quiet}' == '${0}' Log Request method=Get
50 ... base_uri=${base_uri} args=&{kwargs}
Michael Walsha6723f22016-11-22 11:12:01 -060051 ${ret}= Get Request openbmc ${base_uri} &{kwargs} timeout=${timeout}
52 Run Keyword If '${quiet}' == '${0}' Log Response ${ret}
George Keishing08540c02017-07-19 09:42:50 -050053 Delete All Sessions
Chris Austenb29d2e82016-06-07 12:25:35 -050054 [Return] ${ret}
55
56OpenBMC Post Request
manasarm604b8cd2018-01-29 12:14:20 +053057 [Documentation] Do REST POST request and return the result.
58 # Example result data:
59 # <Response [200]>
Michael Walsha6723f22016-11-22 11:12:01 -060060 [Arguments] ${uri} ${timeout}=10 ${quiet}=${QUIET} &{kwargs}
manasarm604b8cd2018-01-29 12:14:20 +053061 # Description of argument(s):
62 # uri The URI to establish connection with
63 # (e.g. '/xyz/openbmc_project/software/').
64 # timeout Timeout in seconds to establish connection with URI.
65 # quiet If enabled, turns off logging to console.
66 # kwargs Any additional arguments to be passed directly to the
67 # Post Request call. For example, the caller might
68 # set kwargs as follows:
69 # ${kwargs}= Create Dictionary allow_redirect=${True}.
Michael Walsha6723f22016-11-22 11:12:01 -060070
Michael Walshf00edee2016-12-09 14:10:26 -060071 Initialize OpenBMC ${timeout} quiet=${quiet}
Chris Austenb29d2e82016-06-07 12:25:35 -050072 ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
Sridevi Ramesheadeef02019-01-17 08:56:18 -060073 ${headers}= Create Dictionary Content-Type=application/json
74 ... X-Auth-Token=${XAUTH_TOKEN}
Chris Austenb29d2e82016-06-07 12:25:35 -050075 set to dictionary ${kwargs} headers ${headers}
Michael Walsha6723f22016-11-22 11:12:01 -060076 Run Keyword If '${quiet}' == '${0}' Log Request method=Post
77 ... base_uri=${base_uri} args=&{kwargs}
Michael Walsha6723f22016-11-22 11:12:01 -060078 ${ret}= Post Request openbmc ${base_uri} &{kwargs} timeout=${timeout}
79 Run Keyword If '${quiet}' == '${0}' Log Response ${ret}
George Keishing08540c02017-07-19 09:42:50 -050080 Delete All Sessions
Chris Austenb29d2e82016-06-07 12:25:35 -050081 [Return] ${ret}
82
83OpenBMC Put Request
manasarm604b8cd2018-01-29 12:14:20 +053084 [Documentation] Do REST PUT request on the resource identified by the URI.
Rahul Maheshwari79c12942016-10-17 09:39:17 -050085 [Arguments] ${uri} ${timeout}=10 &{kwargs}
manasarm604b8cd2018-01-29 12:14:20 +053086 # Description of argument(s):
87 # uri The URI to establish connection with
88 # (e.g. '/xyz/openbmc_project/software/').
89 # timeout Timeout in seconds to establish connection with URI.
90 # kwargs Arguments passed to the REST call.
91 # kwargs Any additional arguments to be passed directly to the
92 # Put Request call. For example, the caller might
93 # set kwargs as follows:
94 # ${kwargs}= Create Dictionary allow_redirect=${True}.
Michael Walshf00edee2016-12-09 14:10:26 -060095
96 Initialize OpenBMC ${timeout}
Chris Austenb29d2e82016-06-07 12:25:35 -050097 ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
98 ${headers}= Create Dictionary Content-Type=application/json
Sridevi Ramesheadeef02019-01-17 08:56:18 -060099 ... X-Auth-Token=${XAUTH_TOKEN}
Chris Austenb29d2e82016-06-07 12:25:35 -0500100 set to dictionary ${kwargs} headers ${headers}
101 Log Request method=Put base_uri=${base_uri} args=&{kwargs}
Michael Walsha6723f22016-11-22 11:12:01 -0600102 ${ret}= Put Request openbmc ${base_uri} &{kwargs} timeout=${timeout}
Chris Austenb29d2e82016-06-07 12:25:35 -0500103 Log Response ${ret}
George Keishing08540c02017-07-19 09:42:50 -0500104 Delete All Sessions
Chris Austenb29d2e82016-06-07 12:25:35 -0500105 [Return] ${ret}
106
107OpenBMC Delete Request
manasarm604b8cd2018-01-29 12:14:20 +0530108 [Documentation] Do REST request to delete the resource identified by the
109 ... URI.
Michael Sheposcc490b42020-08-26 12:53:01 -0500110 [Arguments] ${uri} ${timeout}=10 ${quiet}=${QUIET} &{kwargs}
manasarm604b8cd2018-01-29 12:14:20 +0530111 # Description of argument(s):
112 # uri The URI to establish connection with
113 # (e.g. '/xyz/openbmc_project/software/').
114 # timeout Timeout in seconds to establish connection with URI.
Michael Sheposcc490b42020-08-26 12:53:01 -0500115 # quiet If enabled, turns off logging to console.
manasarm604b8cd2018-01-29 12:14:20 +0530116 # kwargs Any additional arguments to be passed directly to the
117 # Delete Request call. For example, the caller might
118 # set kwargs as follows:
119 # ${kwargs}= Create Dictionary allow_redirect=${True}.
Michael Walshf00edee2016-12-09 14:10:26 -0600120
121 Initialize OpenBMC ${timeout}
Chris Austenb29d2e82016-06-07 12:25:35 -0500122 ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
Sridevi Ramesheadeef02019-01-17 08:56:18 -0600123 ${headers}= Create Dictionary Content-Type=application/json
124 ... X-Auth-Token=${XAUTH_TOKEN}
125 Set To Dictionary ${kwargs} headers ${headers}
Michael Sheposcc490b42020-08-26 12:53:01 -0500126 Run Keyword If '${quiet}' == '${0}' Log Request method=Delete
127 ... base_uri=${base_uri} args=&{kwargs}
George Keishing0e7c3a02017-04-17 05:01:14 -0500128 ${ret}= Delete Request openbmc ${base_uri} &{kwargs} timeout=${timeout}
Michael Sheposcc490b42020-08-26 12:53:01 -0500129 Run Keyword If '${quiet}' == '${0}' Log Response ${ret}
George Keishing08540c02017-07-19 09:42:50 -0500130 Delete All Sessions
Chris Austenb29d2e82016-06-07 12:25:35 -0500131 [Return] ${ret}
132
133Initialize OpenBMC
manasarm604b8cd2018-01-29 12:14:20 +0530134 [Documentation] Do a REST login connection within specified time.
George Keishing1cdc6dd2017-04-24 15:31:03 -0500135 [Arguments] ${timeout}=20 ${quiet}=${1}
Sridevi Ramesheadeef02019-01-17 08:56:18 -0600136 ... ${rest_username}=${REST_USERNAME}
137 ... ${rest_password}=${REST_PASSWORD}
Michael Walshf00edee2016-12-09 14:10:26 -0600138
George Keishing1cdc6dd2017-04-24 15:31:03 -0500139 # Description of argument(s):
Sridevi Ramesheadeef02019-01-17 08:56:18 -0600140 # timeout REST login attempt time out.
141 # quiet Suppress console log if set.
142 # rest_username The REST username.
143 # rest_password The REST password.
144
145 ${bmcweb_status}= Run Keyword And Return Status BMC Web Login Request
146 ... ${timeout} ${rest_username} ${rest_password}
147
148 Return From Keyword If ${bmcweb_status} == ${True}
George Keishing1cdc6dd2017-04-24 15:31:03 -0500149
George Keishing1cdc6dd2017-04-24 15:31:03 -0500150 # This will retry at 20 second interval.
151 Wait Until Keyword Succeeds 40 sec 20 sec
152 ... Post Login Request ${timeout} ${quiet}
Sridevi Ramesheadeef02019-01-17 08:56:18 -0600153 ... ${rest_username} ${rest_password}
154
155
156BMC Web Login Request
157 [Documentation] Do BMC web-based login.
158 [Arguments] ${timeout}=20 ${rest_username}=${REST_USERNAME}
159 ... ${rest_password}=${REST_PASSWORD}
160
161 # Description of argument(s):
162 # timeout REST login attempt time out.
163 # rest_username The REST username.
164 # rest_password The REST password.
165
166 Create Session openbmc ${AUTH_URI} timeout=${timeout}
167
168 ${headers}= Create Dictionary Content-Type=application/json
169 @{credentials}= Create List ${rest_username} ${rest_password}
170 ${data}= Create Dictionary data=@{credentials}
171 ${resp}= Post Request openbmc /login data=${data} headers=${headers}
172 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
173
174 ${processed_token_data}=
175 ... Evaluate re.split(r'[;,]', '${resp.headers["Set-Cookie"]}') modules=re
176 ${result}= Key Value List To Dict ${processed_token_data} delim==
177
178 # Example result data:
179 # 'XSRF-TOKEN=hQuOyDJFEIbrN4aOg2CT; Secure,
180 # SESSION=c4wloTiETumSxPI9nLeg; Secure; HttpOnly'
181 Set Global Variable ${XAUTH_TOKEN} ${result['session']}
182
George Keishing1cdc6dd2017-04-24 15:31:03 -0500183
184Post Login Request
manasarm604b8cd2018-01-29 12:14:20 +0530185 [Documentation] Do REST login request.
George Keishing1cdc6dd2017-04-24 15:31:03 -0500186 [Arguments] ${timeout}=20 ${quiet}=${1}
Sridevi Ramesheadeef02019-01-17 08:56:18 -0600187 ... ${rest_username}=${REST_USERNAME}
188 ... ${rest_password}=${REST_PASSWORD}
George Keishing1cdc6dd2017-04-24 15:31:03 -0500189
190 # Description of argument(s):
Sridevi Ramesheadeef02019-01-17 08:56:18 -0600191 # timeout REST login attempt time out.
192 # quiet Suppress console log if set.
193 # rest_username The REST username.
194 # rest_password The REST password.
George Keishing1cdc6dd2017-04-24 15:31:03 -0500195
196 Create Session openbmc ${AUTH_URI} timeout=${timeout} max_retries=3
Sridevi Ramesheadeef02019-01-17 08:56:18 -0600197
Michael Walsha6723f22016-11-22 11:12:01 -0600198 ${headers}= Create Dictionary Content-Type=application/json
Sridevi Ramesheadeef02019-01-17 08:56:18 -0600199 @{credentials}= Create List ${rest_username} ${rest_password}
Michael Walsha6723f22016-11-22 11:12:01 -0600200 ${data}= create dictionary data=@{credentials}
Michael Walshf00edee2016-12-09 14:10:26 -0600201 ${status} ${resp}= Run Keyword And Ignore Error Post Request openbmc
202 ... /login data=${data} headers=${headers}
203
204 Should Be Equal ${status} PASS msg=${resp}
205 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
Chris Austenb29d2e82016-06-07 12:25:35 -0500206
Sridevi Ramesheadeef02019-01-17 08:56:18 -0600207
George Keishinge8225522017-03-31 09:21:13 -0500208Log Out OpenBMC
manasarm604b8cd2018-01-29 12:14:20 +0530209 [Documentation] Log out of the openbmc REST session.
George Keishinge8225522017-03-31 09:21:13 -0500210
211 ${headers}= Create Dictionary Content-Type=application/json
Sridevi Ramesheadeef02019-01-17 08:56:18 -0600212 ... X-Auth-Token=${XAUTH_TOKEN}
George Keishinge8225522017-03-31 09:21:13 -0500213 ${data}= Create dictionary data=@{EMPTY}
214
215 # If there is no active sesion it will throw the following exception
216 # "Non-existing index or alias 'openbmc'"
217 ${resp}= Post Request openbmc
218 ... /logout data=${data} headers=${headers}
219
220 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
221 ... msg=${resp}
222
Chris Austenb29d2e82016-06-07 12:25:35 -0500223Log Request
manasarm604b8cd2018-01-29 12:14:20 +0530224 [Documentation] Log the specific REST URI, method name on the console.
Chris Austenb29d2e82016-06-07 12:25:35 -0500225 [Arguments] &{kwargs}
Michael Walsha6723f22016-11-22 11:12:01 -0600226 ${msg}= Catenate SEPARATOR= URI: ${AUTH_URI} ${kwargs["base_uri"]}
227 ... , method: ${kwargs["method"]} , args: ${kwargs["args"]}
Chris Austenb29d2e82016-06-07 12:25:35 -0500228 Logging ${msg} console=True
229
230Log Response
manasarm604b8cd2018-01-29 12:14:20 +0530231 [Documentation] Log the response code on the console.
Chris Austenb29d2e82016-06-07 12:25:35 -0500232 [Arguments] ${resp}
Michael Walsha6723f22016-11-22 11:12:01 -0600233 ${msg}= Catenate SEPARATOR= Response code: ${resp.status_code}
234 ... , Content: ${resp.content}
Chris Austenb29d2e82016-06-07 12:25:35 -0500235 Logging ${msg} console=True
236
237Logging
manasarm604b8cd2018-01-29 12:14:20 +0530238 [Documentation] Log the specified message on the console.
Chris Austenb29d2e82016-06-07 12:25:35 -0500239 [Arguments] ${msg} ${console}=default False
240 Log ${msg} console=True
241
242Read Attribute
manasarm604b8cd2018-01-29 12:14:20 +0530243 [Documentation] Retrieve attribute value from URI and return result.
244 # Example result data for the attribute 'FieldModeEnabled' in
245 # "/xyz/openbmc_project/software/attr/" :
246 # 0
Gunnar Mills38032802016-12-12 13:43:40 -0600247 [Arguments] ${uri} ${attr} ${timeout}=10 ${quiet}=${QUIET}
manasarmc505e382018-02-05 14:05:48 +0530248 ... ${expected_value}=${EMPTY}
manasarm604b8cd2018-01-29 12:14:20 +0530249 # Description of argument(s):
250 # uri URI of the object that the attribute lives on
251 # (e.g. '/xyz/openbmc_project/software/').
252 # attr Name of the attribute (e.g. 'FieldModeEnabled').
253 # timeout Timeout for the REST call.
254 # quiet If enabled, turns off logging to console.
manasarmc505e382018-02-05 14:05:48 +0530255 # expected_value If this argument is not empty, the retrieved value
256 # must match this value.
manasarm604b8cd2018-01-29 12:14:20 +0530257
Steven Sombarb3489242018-12-13 15:59:02 -0600258 # Make sure uri ends with slash.
259 ${uri}= Add Trailing Slash ${uri}
260
261 ${resp}= OpenBMC Get Request ${uri}attr/${attr} timeout=${timeout}
Michael Walsha6723f22016-11-22 11:12:01 -0600262 ... quiet=${quiet}
Michael Walsh9cd61932017-01-17 16:11:02 -0600263 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
Chris Austenb29d2e82016-06-07 12:25:35 -0500264 ${content}= To Json ${resp.content}
manasarmc505e382018-02-05 14:05:48 +0530265 Run Keyword If '${expected_value}' != '${EMPTY}'
266 ... Should Be Equal As Strings ${expected_value} ${content["data"]}
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600267 [Return] ${content["data"]}
Chris Austenb29d2e82016-06-07 12:25:35 -0500268
Charles Paul Hoferf45e5ee2017-10-04 12:15:48 -0500269
Chris Austenb29d2e82016-06-07 12:25:35 -0500270Write Attribute
Charles Paul Hoferf45e5ee2017-10-04 12:15:48 -0500271 [Documentation] Write a D-Bus attribute with REST.
272 [Arguments] ${uri} ${attr} ${timeout}=10 ${verify}=${FALSE}
273 ... ${expected_value}=${EMPTY} &{kwargs}
274
275 # Description of argument(s):
276 # uri URI of the object that the attribute lives on
277 # (e.g. '/xyz/openbmc_project/software/').
278 # attr Name of the attribute (e.g. 'FieldModeEnabled').
279 # timeout Timeout for the REST call.
280 # verify If set to ${TRUE}, the attribute will be read back to
281 # ensure that its value is set to ${verify_attr}.
282 # expected_value Only used if verify is set to ${TRUE}. The value that
283 # ${attr} should be set to. This defaults to
284 # ${kwargs['data']. There are cases where the caller
285 # expects some other value in which case this value can
286 # be explicitly specified.
287 # kwargs Arguments passed to the REST call. This should always
288 # contain the value to set the property to at the 'data'
289 # key (e.g. data={"data": 1}).
290
George Keishingdf3e65f2018-12-18 13:06:56 -0600291 # Make sure uri ends with slash.
292 ${uri}= Add Trailing Slash ${uri}
293
Charles Paul Hoferf45e5ee2017-10-04 12:15:48 -0500294 ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
George Keishingdf3e65f2018-12-18 13:06:56 -0600295 ${resp}= Openbmc Put Request ${base_uri}attr/${attr}
Michael Walsha6723f22016-11-22 11:12:01 -0600296 ... timeout=${timeout} &{kwargs}
Charles Paul Hoferf45e5ee2017-10-04 12:15:48 -0500297 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
298
299 # Verify the attribute was set correctly if the caller requested it.
300 Return From Keyword If ${verify} == ${FALSE}
301
302 ${expected_value}= Set Variable If '${expected_value}' == '${EMPTY}'
Charles Paul Hofer00401e72017-10-31 11:42:30 -0500303 ... ${kwargs['data']['data']} ${expected_value}
Charles Paul Hoferf45e5ee2017-10-04 12:15:48 -0500304 ${value}= Read Attribute ${uri} ${attr}
305 Should Be Equal ${value} ${expected_value}
306
Chris Austenb29d2e82016-06-07 12:25:35 -0500307Read Properties
manasarm604b8cd2018-01-29 12:14:20 +0530308 [Documentation] Read data part of the URI object and return result.
309 # Example result data:
310 # [u'/xyz/openbmc_project/software/cf7bf9d5',
311 # u'/xyz/openbmc_project/software/5ecb8b2c',
312 # u'/xyz/openbmc_project/software/active',
313 # u'/xyz/openbmc_project/software/functional']
George Keishing335f5362017-06-30 15:11:20 -0500314 [Arguments] ${uri} ${timeout}=10 ${quiet}=${QUIET}
manasarm604b8cd2018-01-29 12:14:20 +0530315 # Description of argument(s):
316 # uri URI of the object
317 # (e.g. '/xyz/openbmc_project/software/').
318 # timeout Timeout for the REST call.
319 # quiet If enabled, turns off logging to console.
320
George Keishing335f5362017-06-30 15:11:20 -0500321 ${resp}= OpenBMC Get Request ${uri} timeout=${timeout} quiet=${quiet}
322 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
Michael Walshad66c952018-10-04 15:12:47 -0500323 ${content}= To Json Ordered ${resp.content}
324
George Keishing335f5362017-06-30 15:11:20 -0500325 [Return] ${content["data"]}
Chris Austenb29d2e82016-06-07 12:25:35 -0500326
327Call Method
manasarm604b8cd2018-01-29 12:14:20 +0530328 [Documentation] Invoke the specific REST service method.
Gunnar Mills38032802016-12-12 13:43:40 -0600329 [Arguments] ${uri} ${method} ${timeout}=10 ${quiet}=${QUIET} &{kwargs}
manasarm604b8cd2018-01-29 12:14:20 +0530330 # Description of arguments:
331 # uri The URI to establish connection with
332 # (e.g. '/xyz/openbmc_project/software/').
333 # timeout Timeout in seconds to establish connection with URI.
334 # quiet If enabled, turns off logging to console.
335 # kwargs Arguments passed to the REST call.
Michael Walsha6723f22016-11-22 11:12:01 -0600336
Chris Austenb29d2e82016-06-07 12:25:35 -0500337 ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
George Keishing5c231a82019-02-05 09:02:04 -0600338 ${resp}= OpenBmc Post Request ${base_uri}action/${method}
Michael Walsha6723f22016-11-22 11:12:01 -0600339 ... timeout=${timeout} quiet=${quiet} &{kwargs}
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600340 [Return] ${resp}
Saqib Khanbb8b63f2017-05-24 10:58:01 -0500341
Sushil Singh47f80132019-08-27 04:53:24 -0500342
Saqib Khanbb8b63f2017-05-24 10:58:01 -0500343Upload Image To BMC
Sushil Singh47f80132019-08-27 04:53:24 -0500344 [Documentation] Upload image to BMC via REST and return status code.
345 [Arguments] ${uri} ${timeout}=10 ${quiet}=${1}
Sushil Singhc08df052020-03-30 00:39:22 -0500346 ... ${valid_status_codes}=[${HTTP_OK}, ${HTTP_ACCEPTED}] &{kwargs}
Saqib Khanbb8b63f2017-05-24 10:58:01 -0500347
348 # Description of argument(s):
Sushil Singh47f80132019-08-27 04:53:24 -0500349 # uri URI for uploading image via REST e.g.
350 # "/upload/image".
351 # timeout Time allocated for the REST command to
352 # return status (specified in Robot
353 # Framework Time Format e.g. "3 mins").
354 # quiet If enabled, turns off logging to console.
355 # valid_status_codes A list of status codes that are valid for
356 # the REST post command. This can be
357 # specified as a string the evaluates to a
358 # python object (e.g. [${HTTP_OK}]).
359 # kwargs A dictionary keys/values to be passed
360 # directly to Post Request.
Saqib Khanbb8b63f2017-05-24 10:58:01 -0500361
362 Initialize OpenBMC ${timeout} quiet=${quiet}
363 ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
364 ${headers}= Create Dictionary Content-Type=application/octet-stream
Sridevi Ramesheadeef02019-01-17 08:56:18 -0600365 ... X-Auth-Token=${XAUTH_TOKEN} Accept=application/octet-stream
Saqib Khanbb8b63f2017-05-24 10:58:01 -0500366 Set To Dictionary ${kwargs} headers ${headers}
367 Run Keyword If '${quiet}' == '${0}' Log Request method=Post
368 ... base_uri=${base_uri} args=&{kwargs}
369 ${ret}= Post Request openbmc ${base_uri} &{kwargs} timeout=${timeout}
370 Run Keyword If '${quiet}' == '${0}' Log Response ${ret}
Sushil Singh47f80132019-08-27 04:53:24 -0500371 Valid Value ret.status_code ${valid_status_codes}
George Keishing08540c02017-07-19 09:42:50 -0500372 Delete All Sessions
Sushil Singh47f80132019-08-27 04:53:24 -0500373
374 [Return] ${ret.status_code}
375
George Keishingf4a43972020-06-29 03:55:38 -0500376
377Redfish Login
378 [Documentation] Do BMC web-based login.
379 [Arguments] ${timeout}=20 ${rest_username}=${REST_USERNAME}
380 ... ${rest_password}=${REST_PASSWORD} ${kwargs}=${EMPTY}
381
382 # Description of argument(s):
383 # timeout REST login attempt time out.
384 # rest_username The REST username.
385 # rest_password The REST password.
386 # kwargs Any additional arguments to be passed directly to the
387 # Get Request call. For example, the caller might
388 # set kwargs as follows:
389 # ${kwargs}= Create Dictionary allow_redirect=${True}.
390
George Keishing566daaf2020-07-02 06:18:50 -0500391 Create Session redfish ${AUTH_URI} timeout=${timeout}
George Keishingf4a43972020-06-29 03:55:38 -0500392 ${headers}= Create Dictionary Content-Type=application/json
393 ${data}= Set Variable If '${kwargs}' == '${EMPTY}'
394 ... {"UserName":"${rest_username}", "Password":"${rest_password}"}
395 ... {"UserName":"${rest_username}", "Password":"${rest_password}", ${kwargs}}
396
George Keishing566daaf2020-07-02 06:18:50 -0500397 ${resp}= Post Request redfish /redfish/v1/SessionService/Sessions
George Keishingf4a43972020-06-29 03:55:38 -0500398 ... data=${data} headers=${headers}
399 Should Be Equal As Strings ${resp.status_code} ${HTTP_CREATED}
400
George Keishing0f94f6f2020-06-30 08:02:43 -0500401 ${content}= To JSON ${resp.content}
402
George Keishingf4a43972020-06-29 03:55:38 -0500403 Set Global Variable ${XAUTH_TOKEN} ${resp.headers["X-Auth-Token"]}
404
George Keishing0f94f6f2020-06-30 08:02:43 -0500405 [Return] ${content}
George Keishing566daaf2020-07-02 06:18:50 -0500406
407
408Redfish Post Request
409 [Documentation] Do REST POST request and return the result.
410 [Arguments] ${uri} ${timeout}=10 ${quiet}=${QUIET} &{kwargs}
411
412 # Description of argument(s):
413 # uri The URI to establish connection with
414 # (e.g. '/xyz/openbmc_project/software/').
415 # timeout Timeout in seconds to establish connection with URI.
416 # quiet If enabled, turns off logging to console.
417 # kwargs Any additional arguments to be passed directly to the
418 # Post Request call. For example, the caller might
419 # set kwargs as follows:
420 # ${kwargs}= Create Dictionary allow_redirect=${True}.
421
422 ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
423 ${headers}= Create Dictionary Content-Type=application/json X-Auth-Token=${XAUTH_TOKEN}
424 Set To Dictionary ${kwargs} headers ${headers}
425 Run Keyword If '${quiet}' == '${0}' Log Request method=Post base_uri=${base_uri} args=&{kwargs}
426 ${resp}= Post Request redfish ${base_uri} &{kwargs} timeout=${timeout}
427 Run Keyword If '${quiet}' == '${0}' Log Response ${resp}
428
429 [Return] ${resp}