Port suite from mkumatag personal repo w/o history
All these files came from https://github.com/mkumatag/openbmc-automation
The decision to remove the commit history was because most of the 122
commits did not follow commit comment AND content best practices.
The ability to remove the commit history was possible because all
contributors where from the same company (IBM) making the coordination /
notification/acceptence easy. See all the gory details about the
first try to commit with history here...
https://github.com/openbmc/openbmc-test-automation/pull/1
This suite of tests will run against an OpenBMC based server. It will
run good/bad path testing against the REST interface. There are tests
that will also run ipmitool on the victim BMC too.
If you want to support a new system in to the suite you should only
have to edit two files...
data/<system>.py
tox.ini
The README.md contains details on how to setup for the first time along
with how to execute the test suite
NOTE: some test cases require tools that do not exist on the system.
Currently the ipmitool is needed and if you do not manually copy / link
it in to the tools directory some suites will fail.
diff --git a/lib/rest_client.robot b/lib/rest_client.robot
new file mode 100644
index 0000000..bd2db37
--- /dev/null
+++ b/lib/rest_client.robot
@@ -0,0 +1,149 @@
+*** 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
+
+*** Keywords ***
+OpenBMC Get Request
+ [Arguments] ${uri} &{kwargs}
+ ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
+ Log Request method=Get base_uri=${base_uri} args=&{kwargs}
+ Initialize OpenBMC
+ ${ret}= Get Request openbmc ${base_uri} &{kwargs}
+ Log Response ${ret}
+ [Return] ${ret}
+
+OpenBMC Post Request
+ [Arguments] ${uri} &{kwargs}
+ ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
+ ${headers}= Create Dictionary Content-Type=application/json
+ set to dictionary ${kwargs} headers ${headers}
+ Log Request method=Post base_uri=${base_uri} args=&{kwargs}
+ Initialize OpenBMC
+ ${ret}= Post Request openbmc ${base_uri} &{kwargs}
+ Log Response ${ret}
+ [Return] ${ret}
+
+OpenBMC Put Request
+ [Arguments] ${uri} &{kwargs}
+ ${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}
+ Initialize OpenBMC
+ ${ret}= Put Request openbmc ${base_uri} &{kwargs}
+ Log Response ${ret}
+ [Return] ${ret}
+
+OpenBMC Delete Request
+ [Arguments] ${uri} &{kwargs}
+ ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
+ Log Request method=Delete base_uri=${base_uri} args=&{kwargs}
+ Initialize OpenBMC
+ ${ret}= Put Request openbmc ${base_uri} &{kwargs}
+ Log Response ${ret}
+ [Return] ${ret}
+
+Initialize OpenBMC
+ Create Session openbmc ${AUTH_URI} timeout=5 max_retries=1
+ ${headers}= Create Dictionary Content-Type=application/json
+ @{credentials} = Create List ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD}
+ ${data} = create dictionary data=@{credentials}
+ ${resp} = Post Request openbmc /login data=${data} headers=${headers}
+ should be equal as strings ${resp.status_code} ${HTTP_OK}
+
+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}
+ ${resp} = OpenBMC Get Request ${uri}/attr/${attr}
+ ${content}= To Json ${resp.content}
+ [return] ${content["data"]}
+
+Write Attribute
+ [Arguments] ${uri} ${attr} &{kwargs}
+ ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
+ ${resp} = openbmc put request ${base_uri}/attr/${attr} &{kwargs}
+ should be equal as strings ${resp.status_code} ${HTTP_OK}
+ ${json} = to json ${resp.content}
+
+Read Properties
+ [arguments] ${uri}
+ ${resp} = OpenBMC Get Request ${uri} timeout=10
+ Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
+ ${content}= To Json ${resp.content}
+ [return] ${content["data"]}
+
+Call Method
+ [arguments] ${uri} ${method} &{kwargs}
+ ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
+ ${resp} = openbmc post request ${base_uri}/action/${method} &{kwargs}
+ [return] ${resp}