*** 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/bmc_redfish_utils.robot Resource ../../lib/utils.robot Suite Setup Suite Setup Execution Test Teardown Test Teardown Execution Suite Teardown Suite Teardown Execution *** Variables *** ${MAX_SIZE_MSG} File size exceeds 200KB. Maximum allowed size is 200KB ${UPLOADED_MSG} File Created ${FORBIDDEN_MSG} Forbidden ${FILE_CREATE_ERROR_MSG} Error while creating the file @{ADMIN} admin_user TestPwd123 @{OPERATOR} operator_user TestPwd123 &{USERS} Administrator=${ADMIN} Operator=${OPERATOR} *** 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 # partition delete # file_name size_kb name expect_resp_code expected_msg partition username 201KB_file 201 201KB ${HTTP_BAD_REQUEST} ${MAX_SIZE_MSG} ${True} ${OPENBMC_USERNAME} 15KB_file 15 15KB ${HTTP_OK} ${UPLOADED_MSG} ${True} ${OPENBMC_USERNAME} 200KB_file 200 200KB ${HTTP_OK} ${UPLOADED_MSG} ${True} ${OPENBMC_USERNAME} Verify Multiple Files Upload [Documentation] Verify multiple files upload. [Tags] Verify_Multiple_Files_Upload [Template] Upload File To Create Partition Then Delete Partition # partition delete # file_name size_kb name expect_resp_code expected_msg partition username 0KB_file 0 0KB ${HTTP_OK} ${UPLOADED_MSG} ${False} ${OPENBMC_USERNAME} 10KB_file 10 10KB ${HTTP_OK} ${UPLOADED_MSG} ${False} ${OPENBMC_USERNAME} 50KB_file 50 50KB ${HTTP_OK} ${UPLOADED_MSG} ${False} ${OPENBMC_USERNAME} 250KB_file 250 250KB ${HTTP_BAD_REQUEST} ${MAX_SIZE_MSG} ${False} ${OPENBMC_USERNAME} 19KB_file 19 19KB ${HTTP_OK} ${UPLOADED_MSG} ${False} ${OPENBMC_USERNAME} 199KB_file 199 199KB ${HTTP_OK} ${UPLOADED_MSG} ${False} ${OPENBMC_USERNAME} 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} Verify Non-Admin User Is Forbidden To Upload Partition File [Documentation] Verify non-admin user is forbidden to upload partition file. [Tags] Verify_Non-Admin_User_Is_Forbidden_To_Upload_Partition_File [Template] Upload File To Create Partition Then Delete Partition # partition delete # file_name size_kb name expect_resp_code expected_msg partition username 12KB_file 12 12KB ${HTTP_FORBIDDEN} ${FORBIDDEN_MSG} ${False} operator_user Verify Partition Update On BMC [Documentation] Verify partition update on BMC. [Tags] Verify_Partition_Update_On_BMC Set Test Variable ${file_name} testfile Set Test Variable ${partition_name} part_read Set Test Variable ${content1} Sample Content to test partition file upload Set Test Variable ${content2} Sample Content to test partition file update Upload Partition File With Some Known Contents ${file_name} ${partition_name} ${content1} Read Partition And Verify Content ${partition_name} ${content1} # Upload the same partition with modified contents to verify update partition feature. Upload Partition File With Some Known Contents ${file_name} ${partition_name} ${content2} Read Partition And Verify Content ${partition_name} ${content2} Verify Delete Partition When Partition Does Not Exist [Documentation] Verify delete partition when partition does not exist. [Tags] Verify_Delete_Partition_When_Partition_Does_Not_Exist [Template] Delete Partition And Verify On BMC # partition_name expect_resp_code username Does_not_exist ${HTTP_NOT_FOUND} ${OPENBMC_USERNAME} Does_not_exist ${HTTP_FORBIDDEN} operator_user Verify Partition Files Persistency And Re-upload After BMC Reboot [Documentation] Verify partition files persistency and re-upload after BMC reboot. [Tags] Verify_Partition_Files_Persistency_And_Re-upload_After_BMC_Reboot Set Test Variable ${file_name} testfile Set Test Variable ${partition_name} part_read Set Test Variable ${content} Sample Content to test partition file upload Upload Partition File With Some Known Contents ... ${file_name}_1 ${partition_name}_1 ${content}_${file_name}_1 Upload Partition File With Some Known Contents ... ${file_name}_2 ${partition_name}_2 ${content}_${file_name}_2 OBMC Reboot (off) # Get REST session to BMC. Initialize OpenBMC # Checking for the content of uploaded partitions after BMC reboot. Read Partition And Verify Content ${partition_name}_1 ${content}_${file_name}_1 Read Partition And Verify Content ${partition_name}_2 ${content}_${file_name}_2 # Upload same partition with different content to test partition update after BMC reboot. Upload Partition File With Some Known Contents ... ${file_name}_1 ${partition_name}_1 ${content}_${file_name}_2 # Upload different partition. Upload Partition File With Some Known Contents ${file_name} ${partition_name} ${content} Verify One Thousand Partitions File Upload [Documentation] Verify One Thousand Partitions File Upload. [Tags] Verify_One_Thousand_Partitions_File_Upload # Note: 1000 Partitions file upload would take 15-20 minutes. FOR ${INDEX} IN RANGE 1 1000 ${status}= Run Keyword And Return Status Upload File To Create Partition Then Delete Partition ... 200KB 200 p${INDEX} delete_partition=${False} Run Keyword If ${status} == ${True} Continue For Loop # Check if /var is full on BMC. ${status} ${stderr} ${rc}= BMC Execute Command df -k | grep \' /var\' | grep -v /var/ ${var_size}= Set Variable ${status.split('%')[0].split()[1]} # Should be a problem if partition file upload request has failed when /var is not full. Exit For Loop If ${var_size} != ${100} # Expect HTTP_INTERNAL_SERVER_ERROR and FILE_CREATE_ERROR_MSG when /var is full. Upload File To Create Partition Then Delete Partition ... 200KB 200 p${INDEX} ${HTTP_INTERNAL_SERVER_ERROR} ${FILE_CREATE_ERROR_MSG} ${False} END *** 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, default 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} Delete All Sessions And Login Using Given User [Documentation] Delete all sessions and login using given user. [Arguments] ${username}=${OPENBMC_USERNAME} # Description of argument(s): # username Username to login. Default is OPENBMC_USERNAME. # Ex: root, operator_user, admin_user, readonly_user etc. Delete All Sessions ${password}= Set Variable If '${username}' == '${OPENBMC_USERNAME}' ${OPENBMC_PASSWORD} TestPwd123 Initialize OpenBMC rest_username=${username} rest_password=${password} 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} ${username}=${OPENBMC_USERNAME} # 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. # username Login username # Create a session with given user to test upload partition file. Run Keyword If '${username}' != '${OPENBMC_USERNAME}' ... Delete All Sessions And Login Using Given User ${username} # 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} ${description}= Run Keyword If ${expect_resp_code} != ${HTTP_FORBIDDEN} ... Return Description Of REST Response ${resp.text} ... ELSE Set Variable ${FORBIDDEN_MSG} Should Be Equal As Strings ${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} ${username} # Delete partition and verify on BMC. ${expect_resp_code}= Set Variable If ${expect_resp_code} != ${HTTP_OK} ${HTTP_NOT_FOUND} ${HTTP_OK} Run Keyword If ${delete_partition} == ${True} Delete Partition And Verify On BMC ... ${partition_name} ${expect_resp_code} ${username} Return Description Of REST Response [Documentation] Return description of REST response. [Arguments] ${resp_text} # Description of argument(s): # resp_text REST response body. # resp_text after successful partition file upload looks like: # { # "Description": "File Created" # } ${message}= Evaluate json.loads('''${resp_text}''') json [Return] ${message["Description"]} Delete Partition And Verify On BMC [Documentation] Delete partition and verify on BMC. [Arguments] ${partition_name} ${expect_resp_code}=${HTTP_OK} ${username}=${OPENBMC_USERNAME} # Description of argument(s): # partition_name Name of the partition on BMC. # expect_resp_code Expected REST response code from DELETE request, default is ${HTTP_OK}. # username Username to login, if other than OPENBMC_USERNAME user. # Create a session with given user to test delete operation. # If user is a non-admin user then DELETE request is forbidden for the user. Run Keyword If '${username}' != '${OPENBMC_USERNAME}' ... Delete All Sessions And Login Using Given User ${username} Delete Partition ${partition_name} ${expect_resp_code} Verify Partition Available On BMC ${partition_name} ${False} ${username} 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} ${username}=${OPENBMC_USERNAME} # 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. # username Username used to upload/delete. Default is ${OPENBMC_USERNAME}. # Non admin users will not have an access to do GET list Run Keyword If '${username}' != '${OPENBMC_USERNAME}' ... Delete All Sessions And Login Using Given User ${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} Upload Partition File With Some Known Contents [Documentation] Upload partition file with some known contents. [Arguments] ${file_name} ${partition_name} ${content} # Description of argument(s): # file_name Name of the partition file to be uploaded. # partition_name Name of the partition on BMC. # content Content of the partition file to be uploaded. 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} Suite Setup Execution [Documentation] Suite setup execution. # Create different user accounts. Redfish.Login Create Users With Different Roles users=${USERS} force=${True} # 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 Suite Teardown Execution [Documentation] Suite teardown execution. Delete BMC Users Via Redfish users=${USERS} Delete All Sessions