blob: fe458bdf7dcfb3f0d6390a739dbbcef1055f5565 [file] [log] [blame]
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -05001*** Settings ***
2Documentation Update the PNOR code on a target BMC.
3... Execution Method:
4... python -m robot -v OPENBMC_HOST:<hostname>
5... -v DELETE_OLD_PNOR_IMAGES:<"true" or "false">
Charles Paul Hofera5673162017-08-30 09:49:16 -05006... -v IMAGE_FILE_PATH:<path/*.tar>
7... -v ALTERNATE_IMAGE_FILE_PATH:<path/*.tar>
8... host_code_update.robot
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -05009...
10... Code update method BMC
11... Update work flow sequence:
12... - Upload image via REST
13... - Verify that the file exists on the BMC
14... - Check that software "Activation" is set to "Ready"
15... - Set "Requested Activation" to "Active"
16... - Wait for code update to complete
17... - Verify the new version
18
19Library ../../lib/bmc_ssh_utils.py
20Library ../../lib/code_update_utils.py
Michael Walshe78a4432018-03-29 16:36:04 -050021Library ../../lib/gen_robot_keyword.py
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -050022Variables ../../data/variables.py
23Resource ../../lib/boot_utils.robot
24Resource code_update_utils.robot
25Resource ../../lib/code_update_utils.robot
George Keishing1eb85f52017-08-30 22:55:13 -050026Resource ../../lib/openbmc_ffdc.robot
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -050027Resource ../../lib/state_manager.robot
George Keishing1eb85f52017-08-30 22:55:13 -050028Resource ../../lib/dump_utils.robot
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -050029
George Keishing00715492017-08-18 11:46:37 -050030Test Teardown Code Update Test Teardown
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -050031
Matt Fischer6fb70d92023-10-24 19:06:33 -060032Test Tags Host_Code_Update
George Keishing09712a12017-10-16 12:52:42 -050033
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -050034*** Variables ***
35
Steven Sombar9629b0e2018-08-23 07:26:58 -050036${QUIET} ${1}
37${IMAGE_FILE_PATH} ${EMPTY}
38${DELETE_OLD_PNOR_IMAGES} false
39${DELETE_OLD_GUARD_FILE} false
40${ALTERNATE_IMAGE_FILE_PATH} ${EMPTY}
Michael Walsh1ca51442018-09-18 16:38:43 -050041${SKIP_UPDATE_IF_ACTIVE} false
Steven Sombar9629b0e2018-08-23 07:26:58 -050042${cache_files_dir_path} /var/lib/phosphor-software-manager/pnor/prsv/
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -050043
44*** Test Cases ***
45
46REST Host Code Update
47 [Documentation] Do a PNOR code update by uploading image on BMC via REST.
George Keishing00715492017-08-18 11:46:37 -050048 # 1. Delete error logs if there is any.
49 # 1. Do code update.
50 # 2. Do post update the following:
51 # - Collect FFDC if error log exist and delete error logs.
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -050052 [Tags] REST_Host_Code_Update
53 [Setup] Code Update Setup
54
Sweta Potthuri8c7ada42018-01-15 05:05:59 -060055 Run Keyword And Ignore Error List Installed Images Host
56
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -050057 Upload And Activate Image ${IMAGE_FILE_PATH}
Michael Walsh1ca51442018-09-18 16:38:43 -050058 ... skip_if_active=${SKIP_UPDATE_IF_ACTIVE}
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -050059 OBMC Reboot (off)
60
61
62Post Update Boot To OS
63 [Documentation] Boot the host OS
64 [Tags] Post_Update_Boot_To_OS
Charles Paul Hofer0c4a87d2017-10-11 17:27:40 -050065 [Setup] Start SOL Console Logging
George Keishingda6bace2017-09-14 07:42:27 -050066 [Teardown] Run Keywords Stop SOL Console Logging
67 ... AND Code Update Test Teardown
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -050068
George Keishingd5e8d862025-05-13 21:59:19 +053069 IF '${PREV_TEST_STATUS}' == 'FAIL'
70 Fail Code update failed. No need to boot to OS.
71 END
George Keishing32fe4e12018-07-13 05:06:47 -050072 Delete All Error Logs
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -050073 REST Power On
Charles Paul Hofere43fb2f2017-09-26 15:36:18 -050074 Verify Running Host Image ${IMAGE_FILE_PATH}
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -050075
76
Steven Sombar9629b0e2018-08-23 07:26:58 -050077Test Boot With No VPD Cache
78 [Documentation] After having done a PNOR update and
79 ... booted the OS in the tests above, remove the cached
80 ... VPD files and verify that the OS can still boot.
81 [Tags] Test_Boot_With_No_VPD_Cache
82 [Setup] Start SOL Console Logging
83 [Teardown] Run Keywords Stop SOL Console Logging
84 ... AND Code Update Test Teardown
85
86 ${num_vpd_files} ${stderr} ${rc}= BMC Execute Command
87 ... ls ${cache_files_dir_path} | grep VPD -c
88 # Typically, vpd files = "CVPD DJVPD MVPD NVRAM".
89 Should Be Equal As Integers ${num_vpd_files} ${3}
90 ... msg=Missing VPD files at ${cache_files_dir_path}.
91
92 # Delete the *VPD* files.
93 BMC Execute Command rm -f ${xxx_dir_path}*VPD*
94
95 REST Power On
96
97 # After powering-on the system, the VPD files should be present.
98 ${num_vpd_files} ${stderr} ${rc}= BMC Execute Command
99 ... ls ${cache_files_dir_path} | grep VPD -c
100 Should Be Equal As Integers ${num_vpd_files} ${3}
101 ... msg=Three VPD files expected at ${cache_files_dir_path}.
102
103 # Power off. The next test case will boot the OS with the new VPD files.
104 REST Power Off
105
106
Charles Paul Hofer7c6e7522017-10-18 17:09:27 -0500107REST Host Code Update While OS Is Running
108 [Documentation] Do a PNOR code update while the host is running.
109 [Tags] REST_Host_Code_Update_While_OS_Is_Running
Charles Paul Hofer4e8c09b2017-11-03 14:59:05 -0500110 [Teardown] Run Keywords REST Power Off stack_mode=skip
111 ... AND Code Update Test Teardown
Charles Paul Hofer7c6e7522017-10-18 17:09:27 -0500112
George Keishingd5e8d862025-05-13 21:59:19 +0530113 IF '${PREV_TEST_STATUS}' == 'FAIL' Fail Cannot boot the OS.
Charles Paul Hofer7c6e7522017-10-18 17:09:27 -0500114
115 REST Power On stack_mode=skip
George Keishing72373f82017-11-20 09:18:41 -0600116 Upload And Activate Image
117 ... ${ALTERNATE_IMAGE_FILE_PATH} skip_if_active=true
Charles Paul Hofer7c6e7522017-10-18 17:09:27 -0500118 REST Power On stack_mode=normal
119 Verify Running Host Image ${ALTERNATE_IMAGE_FILE_PATH}
120
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -0500121Host Image Priority Attribute Test
122 [Documentation] Set "Priority" attribute.
123 [Tags] Host_Image_Priority_Attribute_Test
124 [Template] Temporarily Set PNOR Attribute
125
126 # Property Value
127 Priority ${0}
128 Priority ${1}
129 Priority ${127}
George Keishing97ecb272017-09-12 04:30:20 -0500130 Priority ${255}
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -0500131
132
Charles Paul Hofer42f17462017-09-12 14:09:32 -0500133Host Set Priority To Invalid Values
134 [Documentation] Attempt to set the priority of an image to an invalid
135 ... value and expect an error.
136 [Tags] Host_Set_Priority_To_Invalid_Values
137 [Template] Set Priority To Invalid Value And Expect Error
138
139 # Version Type Priority
140 ${VERSION_PURPOSE_HOST} ${-1}
141 ${VERSION_PURPOSE_HOST} ${256}
142
143
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -0500144Set RequestedActivation To None
145 [Documentation] Set the RequestedActivation of the image to None and
146 ... verify that it is in fact set to None.
147 [Tags] Set_RequestedActivation_To_None
148
149 ${software_objects}= Get Software Objects
150 Set Host Software Property @{software_objects}[0] RequestedActivation
151 ... ${REQUESTED_NONE}
152 ${software_properties}= Get Host Software Property @{software_objects}[0]
George Keishinga2f6d422023-06-28 18:58:05 +0530153 Should Be Equal As Strings ${software_properties}[RequestedActivation]
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -0500154 ... ${REQUESTED_NONE}
155
156
157Set RequestedActivation And Activation To Invalid Value
George Keishinge16f1582022-12-15 07:32:21 -0600158 [Documentation] Set the RequestedActivation and Activation properties of
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -0500159 ... the image to an invalid value and verify that it was not
160 ... changed.
161 [Template] Set Property To Invalid Value And Verify No Change
162 [Tags] Set_RequestedActivation_And_Activation_To_Invalid_Value
163
164 # Property Version Type
165 RequestedActivation ${VERSION_PURPOSE_HOST}
166 Activation ${VERSION_PURPOSE_HOST}
167
168
Charles Paul Hoferc1fa2bc2017-08-18 16:44:03 -0500169Upload And Activate Multiple Host Images
170 [Documentation] Upload another PNOR image and verify that its state is
171 ... different from all others.
172 [Tags] Upload_And_Activate_Multiple_Host_Images
173 [Template] Activate Image And Verify No Duplicate Priorities
174 [Setup] Upload And Activate Multiple BMC Images Setup
175
176 # Image File Path Image Purpose
177 ${ALTERNATE_IMAGE_FILE_PATH} ${VERSION_PURPOSE_HOST}
178
179
Charles Paul Hofera5673162017-08-30 09:49:16 -0500180Set Same Priority For Multiple Host Images
181 [Documentation] Attempt to set the priority to be the same for two PNOR
182 ... images and verify that the priorities are not the same.
183 [Tags] Set_Same_Priority_For_Multiple_Host_Images
184
George Keishingd5e8d862025-05-13 21:59:19 +0530185 IF '${PREV_TEST_STATUS}' == 'FAIL'
186 Fail Activation of alternate image failed. Cannot set priority.
187 END
Charles Paul Hofera5673162017-08-30 09:49:16 -0500188 Set Same Priority For Multiple Images ${VERSION_PURPOSE_HOST}
189
190
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -0500191Delete Host Image
192 [Documentation] Delete a PNOR image from the BMC and PNOR flash chip.
193 [Tags] Delete_Host_Image
194 [Setup] Initiate Host PowerOff
195
196 ${software_objects}= Get Software Objects
197 ... version_type=${VERSION_PURPOSE_HOST}
198 ${num_images}= Get Length ${software_objects}
199 Should Be True 0 < ${num_images}
200 ... msg=There are no PNOR images on the BMC to delete.
201 Delete Image And Verify @{software_objects}[0] ${VERSION_PURPOSE_HOST}
202
203
George Keishing287faaf2017-11-21 12:31:03 -0600204Verify Host Update When Host Reboot During Activation In Progress
205 [Documentation] Attempt to reboot the host while an image is activating.
206 [Tags] Verify_Host_Update_When_Host_Reboot_During_Activation_In_Progress
207
208 Upload And Activate Image ${IMAGE_FILE_PATH}
209 REST Power On
George Keishing32fe4e12018-07-13 05:06:47 -0500210 Delete All Error Logs
George Keishing287faaf2017-11-21 12:31:03 -0600211
212 ${version_id}= Upload And Activate Image ${ALTERNATE_IMAGE_FILE_PATH}
213 ... wait=${0}
214
215 ${resp}= OpenBMC Get Request ${SOFTWARE_VERSION_URI}${version_id}
216 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
217
218 # Reboot Host during activation.
219 Host Reboot
220
221 Wait For Activation State Change ${version_id} ${ACTIVATING}
222
223 # New image priority should be 0.
224 ${new_host_properties}=
225 ... Get Host Software Property ${SOFTWARE_VERSION_URI}${version_id}
226 Should Be Equal As Integers ${new_host_properties["Priority"]} ${0}
227
228 # Reboot host to boot up with the new host image version.
229 Host Reboot
230 Verify Running Host Image ${ALTERNATE_IMAGE_FILE_PATH}
231
232
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -0500233*** Keywords ***
234
235Temporarily Set PNOR Attribute
236 [Documentation] Update the PNOR attribute value.
237 [Arguments] ${attribute_name} ${attribute_value}
238
239 # Description of argument(s):
240 # attribute_name Host software attribute name (e.g. "Priority").
241 # attribute_value Value to be written.
242
243 ${image_ids}= Get Software Objects
244 ${init_host_properties}= Get Host Software Property ${image_ids[0]}
245 ${initial_priority}= Set Variable ${init_host_properties["Priority"]}
246
247 Set Host Software Property ${image_ids[0]} ${attribute_name}
248 ... ${attribute_value}
249
250 ${cur_host_properties}= Get Host Software Property ${image_ids[0]}
251 Should Be Equal As Integers ${cur_host_properties["Priority"]}
252 ... ${attribute_value}
253
254 # Revert to to initial value.
255 Set Host Software Property
256 ... ${image_ids[0]} ${attribute_name} ${initial_priority}
257
258
259Code Update Setup
260 [Documentation] Do code update test case setup.
George Keishing1eb85f52017-08-30 22:55:13 -0500261 # - Clean up all existing BMC dumps.
262 # - Clean up all currently install PNOR images.
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -0500263
Charles Paul Hoferb9264082017-09-29 15:00:19 -0500264 Run Keyword And Ignore Error Smart Power Off
Michael Walshe78a4432018-03-29 16:36:04 -0500265 Run Key Delete All Dumps ignore=1
George Keishing32fe4e12018-07-13 05:06:47 -0500266 Run Key Delete All Error Logs ignore=1
George Keishingd5e8d862025-05-13 21:59:19 +0530267 IF 'true' == '${DELETE_OLD_PNOR_IMAGES}' Delete All PNOR Images
268 IF 'true' == '${DELETE_OLD_GUARD_FILE}'
269 BMC Execute Command
270 ... rm -f /var/lib/phosphor-software-manager/pnor/prsv/GUARD
271 END
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -0500272
George Keishingfd717562019-07-02 13:30:04 -0500273 BMC Execute Command rm -rf /tmp/images/*
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -0500274
Charles Paul Hoferc1fa2bc2017-08-18 16:44:03 -0500275Upload And Activate Multiple BMC Images Setup
276 [Documentation] Check that the ALTERNATE_FILE_PATH variable is set.
277
278 Should Not Be Empty ${ALTERNATE_IMAGE_FILE_PATH}
Charles Paul Hofer4e8c09b2017-11-03 14:59:05 -0500279 Delete All PNOR Images
George Keishing72373f82017-11-20 09:18:41 -0600280 Upload And Activate Image ${IMAGE_FILE_PATH} skip_if_active=true
Charles Paul Hoferc1fa2bc2017-08-18 16:44:03 -0500281
Charles Paul Hofer9f74d3a2017-08-18 09:54:28 -0500282Get PNOR Extended Version
283 [Documentation] Return the PNOR extended version.
284 [Arguments] ${manifest_path}
285
286 # Description of argument(s):
287 # manifest_path Path of the MANIFEST file
288 # (e.g. "/tmp/images/abc123/MANIFEST").
289
290 ${version}= BMC Execute Command
291 ... grep extended_version= ${manifest_path}
George Keishing409df052024-01-17 22:36:14 +0530292 RETURN ${version.split(",")}
George Keishing00715492017-08-18 11:46:37 -0500293
294
295Code Update Test Teardown
296 [Documentation] Do code update test case teardown.
297 # 1. Collect FFDC if test case failed.
298 # 2. Collect FFDC if test PASS but error log exists.
299
300 FFDC On Test Case Fail
George Keishingd5e8d862025-05-13 21:59:19 +0530301 IF '${TEST_STATUS}' == 'PASS' Check Error And Collect FFDC