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}