Move test_uploadimage.robot to test_image_upload.robot
Change-Id: I260b835b74dad8cdb69596f145f4d32d92618a39
Signed-off-by: Charles Paul Hofer <Charles.Hofer@ibm.com>
diff --git a/extended/code_update/test_image_upload.robot b/extended/code_update/test_image_upload.robot
new file mode 100644
index 0000000..477113a
--- /dev/null
+++ b/extended/code_update/test_image_upload.robot
@@ -0,0 +1,282 @@
+*** Settings ***
+Documentation Test upload image with both valid and invalid images.
+... This test expects there to be bad image tarballs named
+... pnor_bad_manifest.tar, pnor_no_image.tar,
+... bmc_bad_manifest.tar, and bmc_no_image.tar on the TFTP
+... server and in the BAD_IMAGES_DIR_PATH directory.
+... Execution Method :
+... python -m robot -v OPENBMC_HOST:<hostname>
+... -v TFTP_SERVER:<TFTP server IP>
+... -v PNOR_TFTP_FILE_NAME:<filename.tar>
+... -v BMC_TFTP_FILE_NAME:<filename.tar>
+... -v PNOR_IMAGE_FILE_PATH:<path/*.tar>
+... -v BMC_IMAGE_FILE_PATH:<path/*.tar>
+... -v BAD_IMAGES_DIR_PATH:<path> test_uploadimage.robot
+
+Resource ../../lib/connection_client.robot
+Resource ../../lib/rest_client.robot
+Resource ../../lib/openbmc_ffdc.robot
+Library Collections
+Library String
+Library OperatingSystem
+Library ../../lib/code_update_utils.py
+
+Test Teardown Upload Image Teardown
+
+Force Tags Upload_Test
+
+*** Variables ***
+${timeout} 10
+${QUIET} ${1}
+
+*** Test Cases ***
+
+Upload Host Image Via REST
+ # Image File Path
+
+ ${PNOR_IMAGE_FILE_PATH}
+
+ [Documentation] Upload a PNOR image via REST.
+ [Template] Upload Image Via REST And Verify Success
+ [Tags] Upload_Host_Image_Via_REST
+
+
+Upload BMC Image Via REST
+ # Image File Path
+
+ ${BMC_IMAGE_FILE_PATH}
+
+ [Documentation] Upload a BMC image via REST.
+ [Template] Upload Image Via REST And Verify Success
+ [Tags] Upload_BMC_Image_Via_REST
+
+
+Upload Host Image Via TFTP
+ # Image File Path
+
+ ${PNOR_TFTP_FILE_NAME}
+
+ [Documentation] Upload a PNOR image via TFTP.
+ [Template] Upload Image Via TFTP And Verify Success
+ [Tags] Upload_Host_Image_Via_TFTP
+
+
+Upload BMC Image Via TFTP
+ # Image File Path
+
+ ${BMC_TFTP_FILE_NAME}
+
+ [Documentation] Upload a BMC image via TFTP
+ [Template] Upload Image Via TFTP And Verify Success
+ [Tags] Upload_BMC_Image_Via_TFTP
+
+
+Upload Host Image With Bad Manifest Via REST
+ # Image File Name
+
+ pnor_bad_manifest.tar
+
+ [Documentation] Upload a PNOR image with a bad MANIFEST via REST and
+ ... verify that the BMC does not unpack it.
+ [Template] Upload Bad Image Via REST And Verify Failure
+ [Tags] Upload_Host_Image_With_Bad_Manifest_Via_REST
+
+
+Upload Host Image With No Squashfs Via REST
+ # Image File Name
+
+ pnor_no_image.tar
+
+ [Documentation] Upload a PNOR image with just a MANIFEST file via REST
+ ... and verify that the BMC does not unpack it.
+ [Template] Upload Bad Image Via REST And Verify Failure
+ [Tags] Upload_Host_Image_With_No_Squashfs_Via_REST
+
+
+Upload BMC Image With Bad Manifest Via REST
+ # Image File Name
+
+ bmc_bad_manifest.tar
+
+ [Documentation] Upload a BMC image with a bad MANFIEST file via REST and
+ ... verify that the BMC does not unpack it.
+ [Template] Upload Bad Image Via REST And Verify Failure
+ [Tags] Upload_BMC_Image_With_Bad_Manifest_Via_REST
+
+
+Upload BMC Image With No Image Via REST
+ # Image File Name
+
+ bmc_no_image.tar
+
+ [Documentation] Upload a BMC image with no just a MANIFEST file via REST
+ ... and verify that the BMC does not unpack it.
+ [Template] Upload Bad Image Via REST And Verify Failure
+ [Tags] Upload_BMC_Image_With_No_Image_Via_REST
+
+
+Upload Host Image With Bad Manifest Via TFTP
+ # Image File Name
+
+ pnor_bad_manifest.tar
+
+ [Documentation] Upload a PNOR image with a bad MANIFEST file via TFTP and
+ ... verify that the BMC does not unpack it.
+ [Template] Upload Bad Image Via TFTP And Verify Failure
+ [Tags] Upload_Host_Image_With_Bad_Manifest_Via_TFTP
+
+
+Upload Host Image With No Squashfs Via TFTP
+ # Image File Name
+
+ pnor_no_image.tar
+
+ [Documentation] Upload a PNOR image with just a MANIFEST file via TFTP and
+ ... verify that the BMC does not unpack it.
+ [Template] Upload Bad Image Via TFTP And Verify Failure
+ [Tags] Upload_Host_Image_With_No_Squashfs_Via_TFTP
+
+
+Upload BMC Image With Bad Manifest Via TFTP
+ # Image File Name
+
+ bmc_bad_manifest.tar
+
+ [Documentation] Upload a BMC image with a bad MANIFEST file via TFTP and
+ ... verify that the BMC does not unpack it.
+ [Template] Upload Bad Image Via TFTP And Verify Failure
+ [Tags] Upload_BMC_Image_With_Bad_Manifest_Via_TFTP
+
+
+Upload BMC Image With No Image Via TFTP
+ # Image File Name
+
+ bmc_no_image.tar
+
+ [Documentation] Upload a BMC image with just a MANIFEST file via TFTP and
+ ... verify that the BMC does not unpack it.
+ [Template] Upload Bad Image Via TFTP And Verify Failure
+ [Tags] Upload_BMC_Image_With_No_Image_Via_TFTP
+
+
+*** Keywords ***
+
+Upload Image Teardown
+ [Documentation] Log FFDC if test fails for debugging purposes.
+
+ Open Connection And Log In
+ Execute Command On BMC rm -rf /tmp/images/*
+
+ Close All Connections
+ FFDC On Test Case Fail
+
+
+Upload Post Request
+ [Arguments] ${uri} ${timeout}=10 ${quiet}=${QUIET} &{kwargs}
+
+ # Description of argument(s):
+ # uri URI for uploading image via REST.
+ # timeout Time allocated for the REST command to return status.
+ # quiet If enabled turns off logging to console.
+ # kwargs A dictionary that maps each keyword to a value.
+
+ Initialize OpenBMC ${timeout} quiet=${quiet}
+ ${base_uri}= Catenate SEPARATOR= ${DBUS_PREFIX} ${uri}
+ ${headers}= Create Dictionary Content-Type=application/octet-stream
+ ... Accept=application/octet-stream
+ Set To Dictionary ${kwargs} headers ${headers}
+ Run Keyword If '${quiet}' == '${0}' Log Request method=Post
+ ... base_uri=${base_uri} args=&{kwargs}
+ ${ret}= Post Request openbmc ${base_uri} &{kwargs} timeout=${timeout}
+ Run Keyword If '${quiet}' == '${0}' Log Response ${ret}
+ Should Be Equal As Strings ${ret.status_code} ${HTTP_OK}
+
+Get Image Version From TFTP Server
+ [Documentation] Get the version dfound in the MANIFEST file of
+ ... an image on the given TFTP server.
+ [Arguments] ${tftp_image_file_path}
+
+ # Description of argument(s):
+ # tftp_image_file_path The path to the image on the TFTP server.
+
+ ${stripped_file_path}= Strip String ${tftp_image_file_path} characters=/
+ ${rc}= OperatingSystem.Run And Return RC
+ ... curl -s tftp://${TFTP_SERVER}/${stripped_file_path} > tftp_image.tar
+ Should Be Equal As Integers 0 ${rc}
+ ... msg=Could not download image to check version.
+ ${version}= Get Version Tar tftp_image.tar
+ OperatingSystem.Remove File tftp_image.tar
+ [Return] ${version}
+
+Upload Image Via REST And Verify Success
+ [Documentation] Upload an image to the BMC and check that it is unpacked.
+
+ # Upload the given good image to the BMC via REST, and check that the
+ # BMC has unpacked the image and created a valid D-Bus entry for it.
+
+ [Arguments] ${image_file_path}
+
+ # Description of argument(s):
+ # image_file_path The path to the image file to upload.
+
+ OperatingSystem.File Should Exist ${image_file_path}
+ ${image_version}= Get Version Tar ${image_file_path}
+ ${image_data}= OperatingSystem.Get Binary File ${image_file_path}
+ Upload Image To BMC /upload/image data=${image_data}
+ ${ret} ${version_id}= Verify Image Upload ${image_version}
+ Should Be True ${ret}
+
+Upload Image Via TFTP And Verify Success
+ [Documentation] Upload an image to the BMC and check that it was unpacked.
+
+ # Upload the given good image to the BMC via TFTP, and check that the
+ # BMC has unpacked the image and created a valid D-Bus entry for it.
+
+ [Arguments] ${image_file_name}
+
+ # Description of argument(s):
+ # image_file_name The name of the image file on the TFTP server.
+
+ @{image}= Create List ${image_file_name} ${TFTP_SERVER}
+ ${data}= Create Dictionary data=@{image}
+ ${resp}= OpenBMC Post Request
+ ... ${SOFTWARE_VERSION_URI}/action/DownloadViaTFTP data=${data}
+ Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
+ Sleep 1 minute
+ ${image_version}= Get Image Version From TFTP Server ${image_file_name}
+ ${ret} ${version_id}= Verify Image Upload ${image_version}
+ Should Be True ${ret}
+
+Upload Bad Image Via REST And Verify Failure
+ [Documentation] Upload the given bad image to the BMC via REST and check
+ ... that the BMC did not unpack the invalid image.
+ [Arguments] ${bad_image_file_name}
+
+ # Description of argument(s):
+ # image_file_name The name of the bad image to upload via REST.
+
+ ${bad_image_file_path}= OperatingSystem.Join Path ${BAD_IMAGES_DIR_PATH}
+ ... ${bad_image_file_name}
+ OperatingSystem.File Should Exist ${bad_image_file_path}
+ ... msg=Bad image file ${bad_image_file_name} not found.
+ ${bad_image_version}= Get Version Tar ${bad_image_file_path}
+ ${bad_image_data}= OperatingSystem.Get Binary File ${bad_image_file_path}
+ Upload Post Request /upload/image data=${bad_image_data}
+ Verify Image Not In BMC Uploads Dir ${bad_image_version}
+
+Upload Bad Image Via TFTP And Verify Failure
+ [Documentation] Upload the given bad image to the BMC via TFTP and check
+ ... that the BMC did not unpack the invalid image.
+ [Arguments] ${bad_image_file_name}
+
+ # Description of argument(s):
+ # image_file_name The name of the bad image to upload via TFTP.
+
+ @{image}= Create List ${bad_image_file_name} ${TFTP_SERVER}
+ ${data}= Create Dictionary data=@{image}
+ ${resp}= OpenBMC Post Request
+ ... ${SOFTWARE_VERSION_URI}/action/DownloadViaTFTP data=${data}
+ Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
+ ${bad_image_version}= Get Image Version From TFTP Server
+ ... ${bad_image_file_name}
+ Verify Image Not In BMC Uploads Dir ${bad_image_version}