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