Enable basic framework to test certificate upload
Also added test cases to test certificate install with
different format.
Resolves openbmc/openbmc-test-automation#1460
Change-Id: I0047242c2783e589c3095e829f43313e8ad82d81
Signed-off-by: Rahul Maheshwari <rahulmaheshwari@in.ibm.com>
diff --git a/tests/test_certificate.robot b/tests/test_certificate.robot
new file mode 100755
index 0000000..784b706
--- /dev/null
+++ b/tests/test_certificate.robot
@@ -0,0 +1,205 @@
+*** Settings ***
+
+Documentation Test certificate in OpenBMC.
+
+Resource ../lib/rest_client.robot
+Resource ../lib/resource.txt
+Resource ../lib/openbmc_ffdc.robot
+Resource ../lib/certificate_utils.robot
+
+Test Teardown FFDC On Test Case Fail
+
+
+*** 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 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 10s
+
+ ${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
+
+ ${bmc_cert_content}= Get Client Certificate File Content From BMC
+
+ Should Not Contain ${cert_file_content} ${bmc_cert_content}
+
+
+Test Continuous Server Certificate Install
+ [Documentation] Stress server certificate installtion.
+ [Tags] Test_Continuous_Server_Certificate_Install
+
+ Repeat Keyword 50 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 50 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}
+
+ # 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 Client Certificate File Content From BMC
+
+ 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}