|  | *** 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} |