1*** Settings ***
2Documentation         Test upload image with invalid images.
3...                   This test expects the following bad tarball image files
4...                   to exist in the BAD_IMAGES_DIR_PATH/TFTP_SERVER:
5...                       bmc_bad_manifest.ubi.mtd.tar
6...                       bmc_nokernel_image.ubi.mtd.tar
7...                       bmc_invalid_key.ubi.mtd.tar
8...                       pnor_bad_manifest.pnor.squashfs.tar
9...                       pnor_nokernel_image.pnor.squashfs.tar
10...                       pnor_invalid_key.pnor.squashfs.tar
11
12# Refer below document to generate bad firmware images for testing.
13# openbmc/openbmc-test-automation/blob/master/docs/code_update.md#generating-bad-firmware-image-for-testing
14
15# Test Parameters:
16# OPENBMC_HOST         The BMC host name or IP address.
17# OPENBMC_USERNAME     The OS login userid.
18# OPENBMC_PASSWORD     The password for the OS login.
19# BAD_IMAGES_DIR_PATH  The path to the directory which contains the bad image files.
20# TFTP_SERVER          The host name or IP of the TFTP server.
21
22Resource               ../../lib/connection_client.robot
23Resource               ../../lib/rest_client.robot
24Resource               ../../lib/openbmc_ffdc.robot
25Resource               ../../lib/bmc_redfish_resource.robot
26Resource               ../../lib/code_update_utils.robot
27Library                OperatingSystem
28Library                ../../lib/code_update_utils.py
29Library                ../../lib/gen_robot_valid.py
30
31Suite Setup            Suite Setup Execution
32Suite Teardown         Redfish.Logout
33Test Setup             Printn
34Test Teardown          Test Teardown Execution
35
36Test Tags             Redfish_Image_Upload
37
38*** Variables ***
39${timeout}             20
40${QUIET}               ${1}
41${image_id}            ${EMPTY}
42
43*** Test Cases ***
44
45Redfish Failure To Upload BMC Image With Bad Manifest
46    [Documentation]  Upload a BMC firmware with a bad MANFIEST file.
47    [Tags]  Redfish_Failure_To_Upload_BMC_Image_With_Bad_Manifest
48    [Template]  Redfish Bad Firmware Update
49
50    # Image File Name
51    bmc_bad_manifest.ubi.mtd.tar
52
53
54Redfish Failure To Upload Empty BMC Image
55    [Documentation]  Upload a BMC firmware with no kernel image.
56    [Tags]  Redfish_Failure_To_Upload_Empty_BMC_Image
57    [Template]  Redfish Bad Firmware Update
58
59    # Image File Name
60    bmc_nokernel_image.ubi.mtd.tar
61
62
63Redfish Failure To Upload Host Image With Bad Manifest
64    [Documentation]  Upload a PNOR firmware with a bad MANIFEST file.
65    [Tags]  Redfish_Failure_To_Upload_Host_Image_With_Bad_Manifest
66    [Template]  Redfish Bad Firmware Update
67
68    # Image File Name
69    pnor_bad_manifest.pnor.squashfs.tar
70
71
72Redfish Failure To Upload Empty Host Image
73    [Documentation]  Upload a PNOR firmware with no kernel Image.
74    [Tags]  Redfish_Failure_To_Upload_Empty_Host_Image
75    [Template]  Redfish Bad Firmware Update
76
77    # Image File Name
78    pnor_nokernel_image.pnor.squashfs.tar
79
80
81Redfish TFTP Failure To Upload BMC Image With Bad Manifest
82    [Documentation]  Upload a BMC firmware with a bad MANFIEST file via TFTP.
83    [Tags]  Redfish_TFTP_Failure_To_Upload_BMC_Image_With_Bad_Manifest
84    [Template]  Redfish TFTP Bad Firmware Update
85
86    # Image File Name
87    bmc_bad_manifest.ubi.mtd.tar
88
89
90Redfish TFTP Failure To Upload Empty BMC Image
91    [Documentation]  Upload a BMC firmware with no kernel image via TFTP.
92    [Tags]  Redfish_TFTP_Failure_To_Upload_Empty_BMC_Image
93    [Template]  Redfish TFTP Bad Firmware Update
94
95    # Image File Name
96    bmc_nokernel_image.ubi.mtd.tar
97
98
99Redfish TFTP Failure To Upload Host Image With Bad Manifest
100    [Documentation]  Upload a PNOR firmware with a bad MANIFEST file via TFTP.
101    [Tags]  Redfish_TFTP_Failure_To_Upload_Host_Image_With_Bad_Manifest
102    [Template]  Redfish TFTP Bad Firmware Update
103
104    # Image File Name
105    pnor_bad_manifest.pnor.squashfs.tar
106
107
108Redfish TFTP Failure To Upload Empty Host Image
109    [Documentation]  Upload a PNOR firmware with no kernel Image via TFTP.
110    [Tags]  Redfish_TFTP_Failure_To_Upload_Empty_Host_Image
111    [Template]  Redfish TFTP Bad Firmware Update
112
113    # Image File Name
114    pnor_nokernel_image.pnor.squashfs.tar
115
116
117*** Keywords ***
118
119Suite Setup Execution
120    [Documentation]  Do the suite setup.
121
122    Valid Value  OPENBMC_HOST
123    Valid Value  OPENBMC_USERNAME
124    Valid Value  OPENBMC_PASSWORD
125    Valid Value  BAD_IMAGES_DIR_PATH
126    Valid Value  TFTP_SERVER
127    Redfish.Login
128    Redfish Delete All BMC Dumps
129    Redfish Purge Event Log
130
131
132Redfish Bad Firmware Update
133    [Documentation]  Redfish firmware update.
134    [Arguments]  ${image_file_name}
135
136    # Description of argument(s):
137    # image_file_name  The file name of the image.
138
139    Valid Dir Path  BAD_IMAGES_DIR_PATH
140    ${image_file_path}=  OperatingSystem.Join Path  ${BAD_IMAGES_DIR_PATH}
141    ...  ${image_file_name}
142    Valid File Path  image_file_path
143    Set ApplyTime  policy=OnReset
144    ${image_data}=  OperatingSystem.Get Binary File  ${image_file_path}
145    ${resp}=  Upload Image To BMC
146    ...  ${REDFISH_BASE_URI}UpdateService
147    ...  ${timeout}
148    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_INTERNAL_SERVER_ERROR}]
149    ...  data=${image_data}
150
151    Return From Keyword If  ${resp.status_code} == ${HTTP_INTERNAL_SERVER_ERROR}
152
153    ${image_id}=  Get Latest Image ID
154    Rprint Vars  image_id
155    Check Image Update Progress State
156    ...  match_state='Updating', 'Disabled'  image_id=${image_id}
157
158
159Redfish TFTP Bad Firmware Update
160    [Documentation]  Redfish bad firmware update via TFTP.
161    [Arguments]  ${image_file_name}
162
163    # Description of argument(s):
164    # image_file_name  The file name of the image.
165
166    Set ApplyTime  policy=OnReset
167    # Download image from TFTP server to BMC.
168    Redfish.Post  /redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate
169    ...  body={"TransferProtocol" : "TFTP", "ImageURI" : "${TFTP_SERVER}/${image_file_name}"}
170    Sleep  60s
171    ${image_version}=  Get Image Version From TFTP Server  ${TFTP_SERVER}  ${image_file_name}
172    Return From Keyword If  '${image_version}' == '${EMPTY}'
173    # Wait for image tar file to download complete.
174    ${image_id}=  Wait Until Keyword Succeeds  60 sec  10 sec  Get Latest Image ID
175    Rprint Vars  image_id
176
177    Check Image Update Progress State
178    ...  match_state='Updating', 'Disabled'  image_id=${image_id}
179
180
181Test Teardown Execution
182    [Documentation]  Do the post test teardown.
183
184    FFDC On Test Case Fail
185    Run Keyword If  '${image_id}'  Delete Software Object
186    ...  /xyz/openbmc_project/software/${image_id}
187
188