| *** Settings *** |
| Library Collections |
| Library String |
| Library RequestsLibrary.RequestsKeywords |
| Library OperatingSystem |
| Resource ../lib/resource.txt |
| Library ../lib/disable_warning_urllib.py |
| |
| *** Variables *** |
| # Response codes |
| ${HTTP_CONTINUE} 100 |
| ${HTTP_SWITCHING_PROTOCOLS} 101 |
| ${HTTP_PROCESSING} 102 |
| ${HTTP_OK} 200 |
| ${HTTP_CREATED} 201 |
| ${HTTP_ACCEPTED} 202 |
| ${HTTP_NON_AUTHORITATIVE_INFORMATION} 203 |
| ${HTTP_NO_CONTENT} 204 |
| ${HTTP_RESET_CONTENT} 205 |
| ${HTTP_PARTIAL_CONTENT} 206 |
| ${HTTP_MULTI_STATUS} 207 |
| ${HTTP_IM_USED} 226 |
| ${HTTP_MULTIPLE_CHOICES} 300 |
| ${HTTP_MOVED_PERMANENTLY} 301 |
| ${HTTP_FOUND} 302 |
| ${HTTP_SEE_OTHER} 303 |
| ${HTTP_NOT_MODIFIED} 304 |
| ${HTTP_USE_PROXY} 305 |
| ${HTTP_TEMPORARY_REDIRECT} 307 |
| ${HTTP_BAD_REQUEST} 400 |
| ${HTTP_UNAUTHORIZED} 401 |
| ${HTTP_PAYMENT_REQUIRED} 402 |
| ${HTTP_FORBIDDEN} 403 |
| ${HTTP_NOT_FOUND} 404 |
| ${HTTP_METHOD_NOT_ALLOWED} 405 |
| ${HTTP_NOT_ACCEPTABLE} 406 |
| ${HTTP_PROXY_AUTHENTICATION_REQUIRED} 407 |
| ${HTTP_REQUEST_TIMEOUT} 408 |
| ${HTTP_CONFLICT} 409 |
| ${HTTP_GONE} 410 |
| ${HTTP_LENGTH_REQUIRED} 411 |
| ${HTTP_PRECONDITION_FAILED} 412 |
| ${HTTP_REQUEST_ENTITY_TOO_LARGE} 413 |
| ${HTTP_REQUEST_URI_TOO_LONG} 414 |
| ${HTTP_UNSUPPORTED_MEDIA_TYPE} 415 |
| ${HTTP_REQUESTED_RANGE_NOT_SATISFIABLE} 416 |
| ${HTTP_EXPECTATION_FAILED} 417 |
| ${HTTP_UNPROCESSABLE_ENTITY} 422 |
| ${HTTP_LOCKED} 423 |
| ${HTTP_FAILED_DEPENDENCY} 424 |
| ${HTTP_UPGRADE_REQUIRED} 426 |
| ${HTTP_INTERNAL_SERVER_ERROR} 500 |
| ${HTTP_NOT_IMPLEMENTED} 501 |
| ${HTTP_BAD_GATEWAY} 502 |
| ${HTTP_SERVICE_UNAVAILABLE} 503 |
| ${HTTP_GATEWAY_TIMEOUT} 504 |
| ${HTTP_HTTP_VERSION_NOT_SUPPORTED} 505 |
| ${HTTP_INSUFFICIENT_STORAGE} 507 |
| ${HTTP_NOT_EXTENDED} 510 |
| # Assign default value to QUIET for programs which may not define it. |
| ${QUIET} ${0} |
| |
| *** Keywords *** |
| OpenBMC Get Request |
| [Arguments] ${uri} ${timeout}=10 ${quiet}=${QUIET} &{kwargs} |
| |
| Initialize OpenBMC ${timeout} quiet=${quiet} |
| ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri} |
| Run Keyword If '${quiet}' == '${0}' Log Request method=Get |
| ... base_uri=${base_uri} args=&{kwargs} |
| ${ret}= Get Request openbmc ${base_uri} &{kwargs} timeout=${timeout} |
| Run Keyword If '${quiet}' == '${0}' Log Response ${ret} |
| Delete All Sessions |
| [Return] ${ret} |
| |
| OpenBMC Post Request |
| [Arguments] ${uri} ${timeout}=10 ${quiet}=${QUIET} &{kwargs} |
| |
| Initialize OpenBMC ${timeout} quiet=${quiet} |
| ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri} |
| ${headers}= Create Dictionary Content-Type=application/json |
| set to dictionary ${kwargs} headers ${headers} |
| Run Keyword If '${quiet}' == '${0}' Log Request method=Post |
| ... base_uri=${base_uri} args=&{kwargs} |
| ${ret}= Post Request openbmc ${base_uri} &{kwargs} timeout=${timeout} |
| Run Keyword If '${quiet}' == '${0}' Log Response ${ret} |
| Delete All Sessions |
| [Return] ${ret} |
| |
| OpenBMC Put Request |
| [Arguments] ${uri} ${timeout}=10 &{kwargs} |
| |
| Initialize OpenBMC ${timeout} |
| ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri} |
| ${headers}= Create Dictionary Content-Type=application/json |
| set to dictionary ${kwargs} headers ${headers} |
| Log Request method=Put base_uri=${base_uri} args=&{kwargs} |
| ${ret}= Put Request openbmc ${base_uri} &{kwargs} timeout=${timeout} |
| Log Response ${ret} |
| Delete All Sessions |
| [Return] ${ret} |
| |
| OpenBMC Delete Request |
| [Arguments] ${uri} ${timeout}=10 &{kwargs} |
| |
| Initialize OpenBMC ${timeout} |
| ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri} |
| Log Request method=Delete base_uri=${base_uri} args=&{kwargs} |
| ${ret}= Delete Request openbmc ${base_uri} &{kwargs} timeout=${timeout} |
| Log Response ${ret} |
| Delete All Sessions |
| [Return] ${ret} |
| |
| Initialize OpenBMC |
| [Arguments] ${timeout}=20 ${quiet}=${1} |
| |
| # Description of argument(s): |
| # timeout REST login attempt time out. |
| # quiet Supress console log if set. |
| |
| # TODO : Task to revert this changes openbmc/openbmc-test-automation#532 |
| # This will retry at 20 second interval. |
| Wait Until Keyword Succeeds 40 sec 20 sec |
| ... Post Login Request ${timeout} ${quiet} |
| |
| Post Login Request |
| [Arguments] ${timeout}=20 ${quiet}=${1} |
| |
| # Description of argument(s): |
| # timeout REST login attempt time out. |
| # quiet Supress console log if set. |
| |
| Create Session openbmc ${AUTH_URI} timeout=${timeout} max_retries=3 |
| ${headers}= Create Dictionary Content-Type=application/json |
| @{credentials}= Create List ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} |
| ${data}= create dictionary data=@{credentials} |
| ${status} ${resp}= Run Keyword And Ignore Error Post Request openbmc |
| ... /login data=${data} headers=${headers} |
| |
| Should Be Equal ${status} PASS msg=${resp} |
| Should Be Equal As Strings ${resp.status_code} ${HTTP_OK} |
| |
| Log Out OpenBMC |
| [Documentation] Log out REST connection with active session "openbmc". |
| |
| ${headers}= Create Dictionary Content-Type=application/json |
| ${data}= Create dictionary data=@{EMPTY} |
| |
| # If there is no active sesion it will throw the following exception |
| # "Non-existing index or alias 'openbmc'" |
| ${resp}= Post Request openbmc |
| ... /logout data=${data} headers=${headers} |
| |
| Should Be Equal As Strings ${resp.status_code} ${HTTP_OK} |
| ... msg=${resp} |
| |
| Log Request |
| [Arguments] &{kwargs} |
| ${msg}= Catenate SEPARATOR= URI: ${AUTH_URI} ${kwargs["base_uri"]} |
| ... , method: ${kwargs["method"]} , args: ${kwargs["args"]} |
| Logging ${msg} console=True |
| |
| Log Response |
| [Arguments] ${resp} |
| ${msg}= Catenate SEPARATOR= Response code: ${resp.status_code} |
| ... , Content: ${resp.content} |
| Logging ${msg} console=True |
| |
| Logging |
| [Arguments] ${msg} ${console}=default False |
| Log ${msg} console=True |
| |
| Read Attribute |
| [Arguments] ${uri} ${attr} ${timeout}=10 ${quiet}=${QUIET} |
| ${resp}= OpenBMC Get Request ${uri}/attr/${attr} timeout=${timeout} |
| ... quiet=${quiet} |
| Should Be Equal As Strings ${resp.status_code} ${HTTP_OK} |
| ${content}= To Json ${resp.content} |
| [Return] ${content["data"]} |
| |
| |
| Write Attribute |
| [Documentation] Write a D-Bus attribute with REST. |
| [Arguments] ${uri} ${attr} ${timeout}=10 ${verify}=${FALSE} |
| ... ${expected_value}=${EMPTY} &{kwargs} |
| |
| # Description of argument(s): |
| # uri URI of the object that the attribute lives on |
| # (e.g. '/xyz/openbmc_project/software/'). |
| # attr Name of the attribute (e.g. 'FieldModeEnabled'). |
| # timeout Timeout for the REST call. |
| # verify If set to ${TRUE}, the attribute will be read back to |
| # ensure that its value is set to ${verify_attr}. |
| # expected_value Only used if verify is set to ${TRUE}. The value that |
| # ${attr} should be set to. This defaults to |
| # ${kwargs['data']. There are cases where the caller |
| # expects some other value in which case this value can |
| # be explicitly specified. |
| # kwargs Arguments passed to the REST call. This should always |
| # contain the value to set the property to at the 'data' |
| # key (e.g. data={"data": 1}). |
| |
| ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri} |
| ${resp}= Openbmc Put Request ${base_uri}/attr/${attr} |
| ... timeout=${timeout} &{kwargs} |
| Should Be Equal As Strings ${resp.status_code} ${HTTP_OK} |
| |
| # Verify the attribute was set correctly if the caller requested it. |
| Return From Keyword If ${verify} == ${FALSE} |
| |
| ${expected_value}= Set Variable If '${expected_value}' == '${EMPTY}' |
| ... ${kwargs['data']['data']} |
| ${value}= Read Attribute ${uri} ${attr} |
| Should Be Equal ${value} ${expected_value} |
| |
| |
| Read Properties |
| [Arguments] ${uri} ${timeout}=10 ${quiet}=${QUIET} |
| ${resp}= OpenBMC Get Request ${uri} timeout=${timeout} quiet=${quiet} |
| Should Be Equal As Strings ${resp.status_code} ${HTTP_OK} |
| ${content}= To Json ${resp.content} |
| [Return] ${content["data"]} |
| |
| Call Method |
| [Arguments] ${uri} ${method} ${timeout}=10 ${quiet}=${QUIET} &{kwargs} |
| |
| ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri} |
| ${resp}= OpenBmc Post Request ${base_uri}/action/${method} |
| ... timeout=${timeout} quiet=${quiet} &{kwargs} |
| [Return] ${resp} |
| |
| Upload Image To BMC |
| [Arguments] ${uri} ${timeout}=10 ${quiet}=${1} &{kwargs} |
| |
| # Description of argument(s): |
| # uri URI for uploading image via REST e.g. "/upload/image". |
| # timeout Time allocated for the REST command to return status |
| # (specified in Robot Framework Time Format e.g. "3 mins"). |
| # quiet If enabled turns off logging to console. |
| # kwargs A dictionary keys/values to be passed directly to |
| # Post Request. |
| |
| Initialize OpenBMC ${timeout} quiet=${quiet} |
| ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri} |
| ${headers}= Create Dictionary Content-Type=application/octet-stream |
| ... Accept=application/octet-stream |
| Set To Dictionary ${kwargs} headers ${headers} |
| Run Keyword If '${quiet}' == '${0}' Log Request method=Post |
| ... base_uri=${base_uri} args=&{kwargs} |
| ${ret}= Post Request openbmc ${base_uri} &{kwargs} timeout=${timeout} |
| Run Keyword If '${quiet}' == '${0}' Log Response ${ret} |
| Should Be Equal As Strings ${ret.status_code} ${HTTP_OK} |
| Delete All Sessions |