Management Console Save Area Tests on BMC
Signed-off-by: Vijay <vikantan@in.ibm.com>
Change-Id: Ibdc1ac94f0d9d3764dc5846ba51e0cb772e4c5d0
diff --git a/openpower/ext_interfaces/test_savearea_management.robot b/openpower/ext_interfaces/test_savearea_management.robot
new file mode 100644
index 0000000..123b923
--- /dev/null
+++ b/openpower/ext_interfaces/test_savearea_management.robot
@@ -0,0 +1,245 @@
+*** Settings ***
+
+Documentation Test Save Area feature of Management Console on BMC.
+
+Resource ../../lib/rest_client.robot
+Resource ../../lib/openbmc_ffdc.robot
+Resource ../../lib/resource.robot
+Resource ../../lib/utils.robot
+
+Suite Setup Suite Setup Execution
+Test Teardown Test Teardown Execution
+
+
+*** Variables ***
+
+${MAX_SIZE_UPLOAD_MSG} File size exceeds 200KB. Maximum allowed size is 200KB
+${FILE_UPLOADED_MSG} File Created
+
+
+*** Test Cases ***
+
+Verify Small Partition File Upload And Delete
+ [Documentation] Verify small partition file upload and delete.
+ [Tags] Verify_Small_Partition_File_Upload_And_Delete
+ [Template] Upload File To Create Partition Then Delete Partition
+
+ # file_name size_kb partition_name expect_resp_code expected_msg delete_partition
+ 201KB_file 201 201KB ${HTTP_BAD_REQUEST} ${MAX_SIZE_UPLOAD_MSG} ${True}
+ 15KB_file 15 15KB ${HTTP_OK} ${FILE_UPLOADED_MSG} ${True}
+ 200KB_file 200 200KB ${HTTP_OK} ${FILE_UPLOADED_MSG} ${True}
+
+
+Verify Multiple Files Upload
+ [Documentation] Verify multiple files upload.
+ [Tags] Verify_Multiple_Files_Upload
+ [Template] Upload File To Create Partition Then Delete Partition
+
+ # file_name size_kb partition_name expect_resp_code expected_msg delete_partition
+ 0KB_file 0 0KB ${HTTP_OK} ${FILE_UPLOADED_MSG} ${False}
+ 10KB_file 10 10KB ${HTTP_OK} ${FILE_UPLOADED_MSG} ${False}
+ 50KB_file 50 50KB ${HTTP_OK} ${FILE_UPLOADED_MSG} ${False}
+ 250KB_file 250 250KB ${HTTP_BAD_REQUEST} ${MAX_SIZE_UPLOAD_MSG} ${False}
+ 15KB_file 15 15KB ${HTTP_OK} ${FILE_UPLOADED_MSG} ${False}
+ 199KB_file 199 199KB ${HTTP_OK} ${FILE_UPLOADED_MSG} ${False}
+
+
+Verify Read Partition
+ [Documentation] Verify read partition.
+ [Tags] Verify_Read_Partition
+
+ Set Test Variable ${file_name} testfile
+ Set Test Variable ${partition_name} part_read
+ Set Test Variable ${content} Sample Content to test partition file upload
+
+ Run echo "${content}" > ${file_name}
+ OperatingSystem.File Should Exist ${file_name}
+
+ Upload File To Create Partition Then Delete Partition ${file_name} 1 ${partition_name}
+ ... delete_partition=${False}
+
+ Read Partition And Verify Content ${partition_name} ${content}
+
+
+*** Keywords ***
+
+Create Partition File
+ [Documentation] Create partition file.
+ [Arguments] ${file_name}=dummyfile ${size_kb}=15
+
+ # Description of argument(s):
+ # file_name Name of the test file to be created. Examples: p1.log, part1.txt etc.
+ # size_kb Size of the test file to be created in KB, deafult is 15KB.
+ # Example : 15, 200 etc.
+
+ ${file_exist}= Run Keyword And Return Status OperatingSystem.File Should Exist ${file_name}
+ Return From Keyword If ${file_exist} ${True}
+
+ # Create a partition file if it does not exist locally.
+ Run dd if=/dev/zero of=${file_name} bs=1 count=0 seek=${size_kb}KB
+ OperatingSystem.File Should Exist ${file_name}
+
+
+Upload File To Create Partition Then Delete Partition
+ [Documentation] Upload file to create partition the delete partition.
+ [Arguments] ${file_name}=dummyfile ${size_kb}=15 ${partition_name}=p1 ${expect_resp_code}=${HTTP_OK}
+ ... ${expected_msg}=File Created ${delete_partition}=${True}
+
+ # Description of argument(s):
+ # file_name Name of the test file to be created.
+ # partition_name Name of the partition on BMC.
+ # expect_resp_code Expected REST response code, default is ${HTTP_OK}.
+ # expected_msg Expected message from file upload, default is 'File Created'.
+ # delete_partition Partition will be deleted if this is True.
+
+ # Create a partition file.
+ Create Partition File ${file_name} ${size_kb}
+
+ # Get the content of the file and upload to BMC.
+ ${image_data}= OperatingSystem.Get Binary File ${file_name}
+ ${data}= Create Dictionary data ${image_data}
+ ${headers}= Create Dictionary X-Auth-Token=${XAUTH_TOKEN}
+
+ Set To Dictionary ${data} headers ${headers}
+ ${resp}= Put Request openbmc /ibm/v1/Host/ConfigFiles/${partition_name} &{data}
+ Should Be Equal As Strings ${resp.status_code} ${expect_resp_code}
+
+ # Upload Success will have a response body as :
+ # {
+ # "Description": "File Created"
+ # }
+ ${message}= evaluate json.loads('''${resp.text}''') json
+ Should Be Equal As Strings ${message["Description"]} ${expected_msg}
+
+ # Cleanup local space after upload attempt.
+ Run Keyword And Ignore Error Delete Local File Created To Upload ${file_name}
+
+ ${upload_success}= Set Variable If ${expect_resp_code} != ${HTTP_OK} ${False} ${True}
+ Verify Partition Available On BMC ${partition_name} ${upload_success}
+
+ # Delete partition and verify on BMC.
+ Return From Keyword If ${delete_partition} == ${False}
+ ${del_resp_code}= Set Variable If ${expect_resp_code} != ${HTTP_OK} ${HTTP_NOT_FOUND} ${HTTP_OK}
+ Delete Partition ${partition_name} ${del_resp_code}
+ Verify Partition Available On BMC ${partition_name} ${False}
+
+
+Get List Of Partitions
+ [Documentation] Get list of partitions.
+ [Arguments] ${expect_resp_code}=${HTTP_OK}
+
+ # Description of argument(s):
+ # expect_resp_code Expected REST response code, default is ${HTTP_OK}.
+
+ ${resp}= Get Request openbmc /ibm/v1/Host/ConfigFiles
+ Should Be Equal As Strings ${resp.status_code} ${expect_resp_code}
+ Return From Keyword If ${expect_resp_code} != ${HTTP_OK}
+
+ ${resp_json}= To JSON ${resp.content}
+ ${partitions_cnt}= Get Length ${resp_json['Members']}
+
+ [Return] ${resp_json['Members']} ${partitions_cnt}
+
+
+Verify Partition Available On BMC
+ [Documentation] Verify partition available on BMC.
+ [Arguments] ${partition_name}=${EMPTY} ${operation_status}=${True}
+
+ # Description of argument(s):
+ # partition_name Name of the partition on BMC.
+ # operation_success Status of the previous operation like upload/delete success or failure.
+ # True if operation was a success else False.
+
+
+ ${partitions} ${partitions_cnt}= Get List Of Partitions
+ ${rest_response}= Run Keyword And Return Status List Should Contain Value ${partitions}
+ ... /ibm/v1/Host/ConfigFiles/${partition_name}
+
+ ${status} ${stderr} ${rc}= BMC Execute Command
+ ... ls -l /var/lib/obmc/bmc-console-mgmt/save-area/${partition_name} | wc -l
+ ${bmc_response}= Run Keyword And Return Status Should Be True ${status} == ${1}
+
+ Run Keyword If '${partition_name}' == '${EMPTY}' Run Keywords
+ ... Should Be Equal ${rest_response} ${False} AND Should Be Equal ${bmc_response} ${False}
+
+ Run Keyword And Return If '${partition_name}' != '${EMPTY}' Run Keywords
+ ... Should Be True ${rest_response} == ${operation_status} AND
+ ... Should Be True ${bmc_response} == ${operation_status}
+
+
+Delete Partition
+ [Documentation] Delete partition.
+ [Arguments] ${partition_name}='${EMPTY}' ${expect_resp_code}=${HTTP_OK}
+
+ # Description of argument(s):
+ # partition_name Name of the partition on BMC.
+ # expect_resp_code Expected REST response code, default is ${HTTP_OK}.
+
+ ${data}= Create Dictionary
+ ${headers}= Create Dictionary X-Auth-Token=${XAUTH_TOKEN}
+ Set To Dictionary ${data} headers ${headers}
+
+ ${resp}= Delete Request openbmc /ibm/v1/Host/ConfigFiles/${partition_name} &{data}
+ ${expect_resp_code}= Set Variable If '${partition_name}' == '${EMPTY}'
+ ... ${HTTP_NOT_FOUND} ${expect_resp_code}
+ Should Be Equal As Strings ${resp.status_code} ${expect_resp_code}
+
+
+Delete And Verify All Partitions on BMC
+ [Documentation] Delete and verify all partitions on BMC.
+ [Arguments] ${expect_resp_code}=${HTTP_OK}
+
+ # Description of argument(s):
+ # expect_resp_code Expected REST response code, default is ${HTTP_OK}.
+
+ ${data}= Create Dictionary
+ ${headers}= Create Dictionary X-Auth-Token=${XAUTH_TOKEN}
+ Set To Dictionary ${data} headers ${headers}
+
+ ${resp}= Post Request openbmc /ibm/v1/Host/ConfigFiles/Actions/FileCollection.DeleteAll &{data}
+ Should Be Equal As Strings ${resp.status_code} ${expect_resp_code}
+
+ Return From Keyword If ${expect_resp_code} != ${HTTP_OK}
+ Verify Partition Available On BMC operation_status=${False}
+
+
+Read Partition And Verify Content
+ [Documentation] Read partition and verify content.
+ [Arguments] ${partition_name}=p1 ${content}=${EMPTY} ${expect_resp_code}=${HTTP_OK}
+
+ # Description of argument(s):
+ # partition_name Name of the partition on BMC.
+ # content Content of the partition file uploaded.
+ # expect_resp_code Expected REST response code, default is ${HTTP_OK}.
+
+ ${resp}= Get Request openbmc /ibm/v1/Host/ConfigFiles/${partition_name}
+ Should Be Equal As Strings ${resp.status_code} ${expect_resp_code}
+
+ ${partition_data}= Remove String ${resp.text} \\n
+ ${partition_data}= Evaluate json.loads('''${partition_data}''') json
+ Should Be Equal As Strings ${partition_data["Data"]} ${content}
+
+
+Delete Local File Created To Upload
+ [Documentation] Delete local file created to upload.
+ [Arguments] ${file_name}
+
+ # Description of argument(s):
+ # file_name Name of the local file to be deleted.
+
+ Run Keyword And Ignore Error Run rm -f ${file_name}
+
+
+Suite Setup Execution
+ [Documentation] Suite setup execution.
+
+ # Get REST session to BMC.
+ Initialize OpenBMC
+
+
+Test Teardown Execution
+ [Documentation] Test teardown execution.
+
+ Delete And Verify All Partitions on BMC
+# FFDC On Test Case Fail
+