|  | *** Settings *** | 
|  |  | 
|  |  | 
|  | Documentation   Utilities for Redfishtool testing. | 
|  |  | 
|  | Resource        resource.robot | 
|  | Resource        bmc_redfish_resource.robot | 
|  | Library         OperatingSystem | 
|  | Library         String | 
|  | Library         Collections | 
|  |  | 
|  |  | 
|  | *** Keywords *** | 
|  |  | 
|  | Redfishtool Get | 
|  | [Documentation]  Execute redfishtool for GET operation. | 
|  | [Arguments]  ${uri}  ${cmd_args}=${root_cmd_args}  ${expected_error}=200 | 
|  |  | 
|  | # Description of argument(s): | 
|  | # uri             URI for GET operation (e.g. /redfish/v1/AccountService/Accounts/). | 
|  | # cmd_args        Commandline arguments. | 
|  | # expected_error  Expected error optionally provided in testcase (e.g. 401 / | 
|  | #                 authentication error, etc. ). | 
|  |  | 
|  | ${cmd}=  Catenate  ${cmd_args} GET ${uri} | 
|  | Log  ${cmd} | 
|  | ${rc}  ${cmd_output}=  Run and Return RC and Output  ${cmd} | 
|  | IF  ${rc} != 0  Is HTTP error Expected  ${cmd_output}  ${expected_error} | 
|  |  | 
|  | RETURN  ${cmd_output} | 
|  |  | 
|  |  | 
|  | Redfishtool Patch | 
|  | [Documentation]  Execute redfishtool for  Patch operation. | 
|  | [Arguments]  ${payload}  ${uri}  ${cmd_args}=${root_cmd_args}  ${expected_error}=200 | 
|  |  | 
|  | # Description of argument(s): | 
|  | # payload         Payload with POST operation (e.g. data for user name, role, etc. ). | 
|  | # uri             URI for PATCH operation (e.g. /redfish/v1/AccountService/Accounts/ ). | 
|  | # cmd_args        Commandline arguments. | 
|  | # expected_error  Expected error optionally provided in testcase (e.g. 401 / | 
|  | #                 authentication error, etc. ). | 
|  |  | 
|  | ${cmd}=  Catenate  ${cmd_args} PATCH ${uri} --data=${payload} | 
|  | Log  ${cmd} | 
|  | ${rc}  ${cmd_output}=  Run and Return RC and Output  ${cmd} | 
|  | IF  ${rc} != 0  Is HTTP error Expected  ${cmd_output}  ${expected_error} | 
|  |  | 
|  | RETURN  ${cmd_output} | 
|  |  | 
|  |  | 
|  | Redfishtool Post | 
|  | [Documentation]  Execute redfishtool for  Post operation. | 
|  | [Arguments]  ${payload}  ${uri}  ${cmd_args}=${root_cmd_args}  ${expected_error}=200 | 
|  |  | 
|  | # Description of argument(s): | 
|  | # payload         Payload with POST operation (e.g. data for user name, password, role, | 
|  | #                 enabled attribute) | 
|  | # uri             URI for POST operation (e.g. /redfish/v1/AccountService/Accounts/). | 
|  | # cmd_args        Commandline arguments. | 
|  | # expected_error  Expected error optionally provided in testcase (e.g. 401 / | 
|  | #                 authentication error, etc. ). | 
|  |  | 
|  | ${cmd}=  Catenate  ${cmd_args} POST ${uri} --data=${payload} | 
|  | Log  ${cmd} | 
|  | ${rc}  ${cmd_output}=  Run and Return RC and Output  ${cmd} | 
|  | IF  ${rc} != 0  Is HTTP error Expected  ${cmd_output}  ${expected_error} | 
|  |  | 
|  | RETURN  ${cmd_output} | 
|  |  | 
|  |  | 
|  | Redfishtool Delete | 
|  | [Documentation]  Execute redfishtool for  Post operation. | 
|  | [Arguments]  ${uri}  ${cmd_args}=${root_cmd_args}  ${expected_error}=200 | 
|  |  | 
|  | # Description of argument(s): | 
|  | # uri             URI for DELETE operation. | 
|  | # cmd_args        Commandline arguments. | 
|  | # expected_error  Expected error optionally provided in testcase (e.g. 401 / | 
|  | #                 authentication error, etc. ). | 
|  |  | 
|  | ${cmd}=  Catenate  ${cmd_args} DELETE ${uri} | 
|  | Log  ${cmd} | 
|  | ${rc}  ${cmd_output}=  Run and Return RC and Output  ${cmd} | 
|  | IF  ${rc} != 0  Is HTTP error Expected  ${cmd_output}  ${expected_error} | 
|  |  | 
|  | RETURN  ${cmd_output} | 
|  |  | 
|  |  | 
|  | Is HTTP error Expected | 
|  | [Documentation]  Check if the HTTP error is expected. | 
|  | [Arguments]  ${cmd_output}  ${error_expected} | 
|  |  | 
|  | # Description of argument(s): | 
|  | # cmd_output      Output of an HTTP operation. | 
|  | # error_expected  Expected error. | 
|  |  | 
|  | ${cmd_rsp}=  Get Regexp Matches  ${cmd_output}  200|204 | 
|  | ${cmd_rsp_status}=  Run Keyword And Return Status  Should Not Be Empty  ${cmd_rsp} | 
|  | Return From Keyword IF  ${cmd_rsp_status} == True | 
|  | ${matches}=  Get Regexp Matches  ${error_expected}  200|204 | 
|  | ${rsp_status}=  Run Keyword And Return Status  Should Be Empty  ${matches} | 
|  | IF  ${rsp_status} == False | 
|  | ...  Fail  msg=${cmd_output} | 
|  | @{words} =  Split String  ${error_expected}  , | 
|  | @{errorString}=  Split String  ${cmd_output}  ${SPACE} | 
|  | FOR  ${error}  IN  @{words} | 
|  | ${status}=  Run Keyword And Return Status  Should Contain Any  ${errorString}  ${error} | 
|  | Return From Keyword If  ${status} == True | 
|  | END | 
|  | ${rsp_code}=  Set Variable If  ${status} == False  Get Regexp Matches  ${cmd_output}  [0-9][0-9][0-9] | 
|  | ${rsp_code_status}=  Run Keyword And Return Status  Should Not Be Empty  ${rsp_code} | 
|  |  | 
|  | IF  ${rsp_code_status} == True | 
|  | Fail  msg=Getting status code as ${rsp_code[0]} instead of ${error_expected}, status code mismatch. | 
|  | ELSE | 
|  | Fail  msg=${cmd_output} | 
|  | END | 
|  |  |