|  | *** Settings *** | 
|  |  | 
|  | Documentation  Test certificate in OpenBMC. | 
|  |  | 
|  | Resource       ../lib/rest_client.robot | 
|  | Resource       ../lib/resource.robot | 
|  | Resource       ../lib/openbmc_ffdc.robot | 
|  | Resource       ../lib/certificate_utils.robot | 
|  |  | 
|  | Suite Setup    Suite Setup Execution | 
|  | Test Teardown  Test Teardown Execution | 
|  |  | 
|  | Force Tags     Certificate_Test | 
|  |  | 
|  |  | 
|  | *** Test Cases *** | 
|  |  | 
|  | Test Server Certificate Install With Valid Certificate And Valid Private Key | 
|  | [Documentation]  Test server certificate install with valid certificate | 
|  | ...  and valid private key. | 
|  | [Tags]  Test_Server_Certificate_Install_With_Valid_Certificate_And_Valid_Private_Key | 
|  | [Template]  Certificate Install Via REST | 
|  | # Certificate type    Certificate file format             Expected Status | 
|  | Server                Valid Certificate Valid Privatekey  ok | 
|  |  | 
|  |  | 
|  | Test Server Certificate Install With Empty Certificate And Valid Private Key | 
|  | [Documentation]  Test server certificate install with empty certificate | 
|  | ...  and valid private key. | 
|  | [Tags]  Test_Server_Certificate_Install_With_Empty_Certificate_And_Valid_Private_Key | 
|  | [Template]  Certificate Install Via REST | 
|  |  | 
|  | # Certificate type    Certificate file format             Expected Status | 
|  | Server                Empty Certificate Valid Privatekey  error | 
|  |  | 
|  |  | 
|  | Test Server Certificate Install With Valid Certificate And Empty Private Key | 
|  | [Documentation]  Test server certificate install with valid certificate | 
|  | ...  and empty private key. | 
|  | [Tags]  Test_Server_Certificate_Install_With_Valid_Certificate_And_Empty_Private_Key | 
|  | [Template]  Certificate Install Via REST | 
|  |  | 
|  | # Certificate type    Certificate file format             Expected Status | 
|  | Server                Valid Certificate Empty Privatekey  error | 
|  |  | 
|  |  | 
|  | Test Server Certificate Install With Empty Certificate And Empty Private Key | 
|  | [Documentation]  Test server certificate install with empty certificate | 
|  | ...  and empty private key. | 
|  | [Tags]  Test_Server_Certificate_Install_With_Empty_Certificate_And_Empty_Private_Key | 
|  | [Template]  Certificate Install Via REST | 
|  |  | 
|  | # Certificate type    Certificate file format             Expected Status | 
|  | Server                Empty Certificate Empty Privatekey  error | 
|  |  | 
|  |  | 
|  | Test Server Certificate Install With Expired Certificate | 
|  | [Documentation]  Test server certificate install with expired certificate. | 
|  | [Tags]  Test_Server_Certificate_Install_With_Expired_Certificate | 
|  | [Template]  Certificate Install Via REST | 
|  | # Certificate type    Certificate file format             Expected Status | 
|  | Server                Expired Certificate                 error | 
|  |  | 
|  |  | 
|  | Test Client Certificate Install With Valid Certificate And Valid Private Key | 
|  | [Documentation]  Test client certificate install with valid certificate | 
|  | ...  and valid private key. | 
|  | [Tags]  Test_Client_Certificate_Install_With_Valid_Certificate_And_Valid_Private_Key | 
|  | [Template]  Certificate Install Via REST | 
|  | # Certificate type    Certificate file format             Expected Status | 
|  | Client                Valid Certificate Valid Privatekey  ok | 
|  |  | 
|  |  | 
|  | Test Client Certificate Install With Empty Certificate And Valid Private Key | 
|  | [Documentation]  Test client certificate install with empty certificate | 
|  | ...  and valid private key. | 
|  | [Tags]  Test_Client_Certificate_Install_With_Empty_Certificate_And_Valid_Private_Key | 
|  | [Template]  Certificate Install Via REST | 
|  |  | 
|  | # Certificate type    Certificate file format             Expected Status | 
|  | Client                Empty Certificate Valid Privatekey  error | 
|  |  | 
|  |  | 
|  | Test Client Certificate Install With Valid Certificate And Empty Private Key | 
|  | [Documentation]  Test client certificate install with valid certificate | 
|  | ...  and empty private key. | 
|  | [Tags]  Test_Client_Certificate_Install_With_Valid_Certificate_And_Empty_Private_Key | 
|  | [Template]  Certificate Install Via REST | 
|  |  | 
|  | # Certificate type    Certificate file format             Expected Status | 
|  | Client                Valid Certificate Empty Privatekey  error | 
|  |  | 
|  |  | 
|  | Test Client Certificate Install With Empty Certificate And Empty Private Key | 
|  | [Documentation]  Test client certificate install with empty certificate | 
|  | ...  and empty private key. | 
|  | [Tags]  Test_Client_Certificate_Install_With_Empty_Certificate_And_Empty_Private_Key | 
|  | [Template]  Certificate Install Via REST | 
|  |  | 
|  | # Certificate type    Certificate file format             Expected Status | 
|  | Client                Empty Certificate Empty Privatekey  error | 
|  |  | 
|  |  | 
|  | Test Client Certificate Install With Expired Certificate | 
|  | [Documentation]  Test client certificate install with expired certificate. | 
|  | [Tags]  Test_Client_Certificate_Install_With_Expired_Certificate | 
|  | [Template]  Certificate Install Via REST | 
|  | # Certificate type    Certificate file format             Expected Status | 
|  | Client                Expired Certificate                 error | 
|  |  | 
|  |  | 
|  | Test CA Certificate Install With Valid Certificate | 
|  | [Documentation]  Test CA certificate install with valid certificate. | 
|  | [Tags]  Test_CA_Certificate_Install_With_Valid_Certificate | 
|  | [Template]  Certificate Install Via REST | 
|  |  | 
|  | # Certificate type    Certificate file format             Expected Status | 
|  | CA                    Valid Certificate                   ok | 
|  |  | 
|  |  | 
|  | Test CA Certificate Install With Empty Certificate | 
|  | [Documentation]  Test CA certificate install with empty certificate. | 
|  | [Tags]  Test_CA_Certificate_Install_With_Empty_Certificate | 
|  | [Template]  Certificate Install Via REST | 
|  |  | 
|  | # Certificate type    Certificate file format             Expected Status | 
|  | CA                    Empty Certificate                   error | 
|  |  | 
|  |  | 
|  | Test Delete Server Certificate | 
|  | [Documentation]  Delete server certificate and verify. | 
|  | [Tags]  Test_Delete_Server_Certificate | 
|  |  | 
|  | ${cert_file_path}=  Generate Certificate File Via Openssl | 
|  | ...  Valid Certificate Valid Privatekey | 
|  | ${file_data}=  OperatingSystem.Get Binary File  ${cert_file_path} | 
|  | ${cert_file_content}=  OperatingSystem.Get File  ${cert_file_path} | 
|  |  | 
|  | Install Certificate File On BMC  ${SERVER_CERTIFICATE_URI} | 
|  | ...  data=${file_data} | 
|  |  | 
|  | OpenBMC Delete Request  ${SERVER_CERTIFICATE_URI} | 
|  | # Adding delay after certificate deletion | 
|  | Sleep  30s | 
|  |  | 
|  | ${bmc_cert_content}=  Get Certificate Content From BMC Via Openssl | 
|  | Should Not Contain  ${cert_file_content}  ${bmc_cert_content} | 
|  |  | 
|  |  | 
|  | Test Delete Client Certificate | 
|  | [Documentation]  Delete client certificate and verify. | 
|  | [Tags]  Test_Delete_Client_Certificate | 
|  |  | 
|  | ${cert_file_path}=  Generate Certificate File Via Openssl | 
|  | ...  Valid Certificate Valid Privatekey | 
|  | ${file_data}=  OperatingSystem.Get Binary File  ${cert_file_path} | 
|  | ${cert_file_content}=  OperatingSystem.Get File  ${cert_file_path} | 
|  |  | 
|  | Install Certificate File On BMC  ${CLIENT_CERTIFICATE_URI} | 
|  | ...  data=${file_data} | 
|  |  | 
|  | OpenBMC Delete Request  ${CLIENT_CERTIFICATE_URI} | 
|  | # Adding delay after certificate deletion | 
|  | Sleep  30s | 
|  |  | 
|  | ${msg}=  Run Keyword And Expect Error  * | 
|  | ...  Get Certificate File Content From BMC  Client | 
|  |  | 
|  | Should Contain  ${msg}  No such file or directory  ignore_case=True | 
|  |  | 
|  |  | 
|  | Test Delete CA Certificate | 
|  | [Documentation]  Delete CA certificate and verify. | 
|  | [Tags]  Test_Delete_CA_Certificate | 
|  |  | 
|  | ${cert_file_path}=  Generate Certificate File Via Openssl | 
|  | ...  Valid Certificate | 
|  | ${file_data}=  OperatingSystem.Get Binary File  ${cert_file_path} | 
|  | ${cert_file_content}=  OperatingSystem.Get File  ${cert_file_path} | 
|  |  | 
|  | Install Certificate File On BMC  ${CA_CERTIFICATE_URI} | 
|  | ...  data=${file_data} | 
|  |  | 
|  | OpenBMC Delete Request  ${CA_CERTIFICATE_URI} | 
|  | # Adding delay after certificate deletion. | 
|  | Sleep  30s | 
|  |  | 
|  | ${msg}=  Run Keyword And Expect Error  * | 
|  | ...  Get Certificate File Content From BMC  CA | 
|  |  | 
|  | Should Contain  ${msg}  No such file or directory  ignore_case=True | 
|  |  | 
|  |  | 
|  |  | 
|  | Test Continuous Server Certificate Install | 
|  | [Documentation]  Stress server certificate installtion. | 
|  | [Tags]  Test_Continuous_Server_Certificate_Install | 
|  |  | 
|  | Repeat Keyword  3 times  Certificate Install Via REST | 
|  | ...  Server  Valid Certificate Valid Privatekey  ok | 
|  |  | 
|  |  | 
|  | Test Continuous Client Certificate Install | 
|  | [Documentation]  Stress client certificate installtion. | 
|  | [Tags]  Test_Continuous_Client_Certificate_Install | 
|  |  | 
|  | Repeat Keyword  3 times  Certificate Install Via REST | 
|  | ...  Client  Valid Certificate Valid Privatekey  ok | 
|  |  | 
|  |  | 
|  | ***Keywords*** | 
|  |  | 
|  | Certificate Install Via REST | 
|  | [Documentation]  Test certificate install in the BMC via REST. | 
|  | [Arguments]  ${cert_type}  ${cert_format}  ${expected_status} | 
|  |  | 
|  | # Description of argument(s): | 
|  | # cert_type           Certificate type (e.g. "Server" or "Client"). | 
|  | # cert_format         Certificate file format | 
|  | #                     (e.g. Valid_Certificate_Valid_Privatekey). | 
|  | # expected_status     Expected status of certificate installation REST | 
|  | #                     request(i.e. "ok" or "error"). | 
|  |  | 
|  | ${cert_file_path}=  Run Keyword if  '${cert_format}' == 'Expired Certificate' | 
|  | ...  Generate Certificate File Via Openssl  ${cert_format}  -10 | 
|  | ...  ELSE  Generate Certificate File Via Openssl  ${cert_format} | 
|  |  | 
|  | ${file_data}=  OperatingSystem.Get Binary File  ${cert_file_path} | 
|  |  | 
|  | Run Keyword If  '${cert_type}' == 'Server' | 
|  | ...    Install Certificate File On BMC  ${SERVER_CERTIFICATE_URI} | 
|  | ...    ${expected_status}  ${1}  data=${file_data} | 
|  | ...  ELSE IF  '${cert_type}' == 'Client' | 
|  | ...    Install Certificate File On BMC  ${CLIENT_CERTIFICATE_URI} | 
|  | ...    ${expected_status}  ${1}  data=${file_data} | 
|  | ...  ELSE IF  '${cert_type}' == 'CA' | 
|  | ...    Install Certificate File On BMC  ${CA_CERTIFICATE_URI} | 
|  | ...    ${expected_status}  ${1}  data=${file_data} | 
|  |  | 
|  | # Adding delay after certificate installation. | 
|  | sleep  10s | 
|  | ${cert_file_content}=  OperatingSystem.Get File  ${cert_file_path} | 
|  | Should Not Be Empty  ${cert_file_content} | 
|  |  | 
|  | ${bmc_cert_content}=  Run Keyword If  '${cert_type}' == 'Server' | 
|  | ...    Get Certificate Content From BMC Via Openssl | 
|  | ...  ELSE IF  '${cert_type}' == 'Client' | 
|  | ...    Get Certificate File Content From BMC  Client | 
|  | ...  ELSE IF  '${cert_type}' == 'CA' | 
|  | ...    Get Certificate File Content From BMC  CA | 
|  |  | 
|  | Run Keyword if  '${expected_status}' == 'ok' | 
|  | ...  Should Contain  ${cert_file_content}  ${bmc_cert_content} | 
|  | ...  ELSE IF  '${expected_status}' == 'error' | 
|  | ...  Should Not Contain  ${cert_file_content}  ${bmc_cert_content} | 
|  |  | 
|  |  | 
|  | Suite Setup Execution | 
|  | [Documentation]  Do suite setup tasks. | 
|  |  | 
|  | # Create certificate sub-directory in current working directory. | 
|  | Create Directory  certificate_dir | 
|  | OperatingSystem.Directory Should Exist  ${EXECDIR}${/}certificate_dir | 
|  |  | 
|  |  | 
|  | Test Teardown Execution | 
|  | [Documentation]  Do the post test teardown. | 
|  |  | 
|  | Empty Directory  ${EXECDIR}${/}certificate_dir | 
|  | FFDC On Test Case Fail |