blob: b603a4b4b95b1f4c2ee132bc5aa51b1a71dd08fe [file] [log] [blame]
Sushil Singhcdebdd52019-08-14 15:29:24 -05001*** Settings ***
2Documentation Update firmware on a target BMC via Redifsh.
3
4# Test Parameters:
5# IMAGE_FILE_PATH The path to the BMC image file.
6#
7# Firmware update states:
8# Enabled Image is installed and either functional or active.
9# Disabled Image installation failed or ready for activation.
10# Updating Image installation currently in progress.
11
12Resource ../../lib/resource.robot
13Resource ../../lib/bmc_redfish_resource.robot
14Resource ../../lib/openbmc_ffdc.robot
15Resource ../../lib/common_utils.robot
16Resource ../../lib/code_update_utils.robot
17Resource ../../lib/dump_utils.robot
18Resource ../../lib/logging_utils.robot
19Resource ../../lib/redfish_code_update_utils.robot
Sushil Singhb13fc362020-02-06 03:40:56 -060020Resource ../../lib/utils.robot
Anves Kumar rayankula7ed1ae82021-02-03 04:19:46 -060021Resource ../../lib/bmc_redfish_utils.robot
Sushil Singhc8526a22022-12-21 10:26:19 -060022Resource ../../lib/external_intf/management_console_utils.robot
Sushil Singh44bfc202023-02-08 09:53:36 -060023Resource ../../lib/bmc_network_utils.robot
Sushil Singh1ee3c932023-02-24 01:58:09 -060024Resource ../../lib/certificate_utils.robot
Sushil Singhcdebdd52019-08-14 15:29:24 -050025Library ../../lib/gen_robot_valid.py
26Library ../../lib/tftp_update_utils.py
Sushil Singhf7674a52019-11-19 00:36:15 -060027Library ../../lib/gen_robot_keyword.py
Sushil Singhcdebdd52019-08-14 15:29:24 -050028
29Suite Setup Suite Setup Execution
30Suite Teardown Redfish.Logout
31Test Setup Printn
32Test Teardown FFDC On Test Case Fail
33
34Force Tags BMC_Code_Update
35
Anves Kumar rayankula7ed1ae82021-02-03 04:19:46 -060036*** Variables ***
37
38@{ADMIN} admin_user TestPwd123
39&{USERS} Administrator=${ADMIN}
Sushil Singhc915f5e2022-12-21 08:18:31 -060040${LOOP_COUNT} ${2}
Sushil Singh44bfc202023-02-08 09:53:36 -060041@{HOSTNAME} bmc_system01 bmc_system02 bmc_system03 bmc_system04 bmc_system05
Anves Kumar rayankula7ed1ae82021-02-03 04:19:46 -060042
Sushil Singhcdebdd52019-08-14 15:29:24 -050043*** Test Cases ***
44
45Redfish Code Update With ApplyTime OnReset
George Keishing16b3c7b2021-01-28 09:23:37 -060046 [Documentation] Update the firmware image with ApplyTime of OnReset.
Sushil Singhcdebdd52019-08-14 15:29:24 -050047 [Tags] Redfish_Code_Update_With_ApplyTime_OnReset
48 [Template] Redfish Update Firmware
49
50 # policy
51 OnReset
52
53
54Redfish Code Update With ApplyTime Immediate
George Keishing16b3c7b2021-01-28 09:23:37 -060055 [Documentation] Update the firmware image with ApplyTime of Immediate.
Sushil Singhcdebdd52019-08-14 15:29:24 -050056 [Tags] Redfish_Code_Update_With_ApplyTime_Immediate
57 [Template] Redfish Update Firmware
58
59 # policy
60 Immediate
61
62
Sushil Singhc915f5e2022-12-21 08:18:31 -060063Redfish Code Update Same Firmware Multiple Times
64 [Documentation] Multiple times update the firmware image for update service.
65 [Tags] Redfish_Code_Update_Same_Firmware_Multiple_Times
66
67 ${temp_update_loop_count}= Evaluate ${LOOP_COUNT} + 1
68
69 FOR ${count} IN RANGE 1 ${temp_update_loop_count}
Sushil Singha83bba02023-01-18 08:43:45 -060070 Print Timen ***************************************
Sushil Singhc915f5e2022-12-21 08:18:31 -060071 Print Timen * The Current Loop Count is ${count} of ${LOOP_COUNT} *
Sushil Singha83bba02023-01-18 08:43:45 -060072 Print Timen ***************************************
Sushil Singhc915f5e2022-12-21 08:18:31 -060073
74 Redfish Update Firmware apply_time=OnReset
75 END
76
77
78
Sushil Singhffbfedf2019-10-17 15:58:25 -050079Redfish Code Update With Multiple Firmware
George Keishing16b3c7b2021-01-28 09:23:37 -060080 [Documentation] Update the firmware image with ApplyTime of Immediate.
Sushil Singhffbfedf2019-10-17 15:58:25 -050081 [Tags] Redfish_Code_Update_With_Multiple_Firmware
82 [Template] Redfish Multiple Upload Image And Check Progress State
83
84 # policy image_file_path alternate_image_file_path
85 Immediate ${IMAGE_FILE_PATH} ${ALTERNATE_IMAGE_FILE_PATH}
86
87
Sushil Singhc8526a22022-12-21 10:26:19 -060088Post BMC Reset Perform Redfish Code Update
89 [Documentation] Test to reset BMC at standby and then perform BMC firmware update and
90 ... ensure there is not error or dump logs post update.
91 [Tags] Post_BMC_Reset_Perform_Redfish_Code_Update
92
93 Redfish Delete All BMC Dumps
94 Redfish Purge Event Log
95
96 Redfish OBMC Reboot (off)
97
98 Redfish Update Firmware apply_time=OnReset
99
100 Event Log Should Not Exist
101 Redfish BMC Dump Should Not Exist
102
103 Redfish Power Off
104
105
106Post BMC Reset Perform Image Switched To Backup Multiple Times
George Keishing0d930e92023-01-25 13:19:37 -0600107 [Documentation] Test to reset BMC at standby and then perform switch
108 ... to backup image multiple times.
Sushil Singhc8526a22022-12-21 10:26:19 -0600109 ... Then ensure no event and dump logs exist.
110 [Tags] Post_BMC_Reset_Perform_Image_Switched_To_Backup_Multiple_Times
111
112 Redfish Delete All BMC Dumps
113 Redfish Purge Event Log
114
115 Redfish OBMC Reboot (off)
116
117 ${temp_update_loop_count}= Evaluate ${LOOP_COUNT} + 1
118
119 FOR ${count} IN RANGE 1 ${temp_update_loop_count}
120 ${state}= Get Pre Reboot State
121
122 # change to backup image and reset the BMC.
123 Switch Backup Firmware Image To Functional
124
125 Wait For Reboot start_boot_seconds=${state['epoch_seconds']}
126 END
127
128 Event Log Should Not Exist
129 Redfish BMC Dump Should Not Exist
130
131
Anves Kumar rayankula7ed1ae82021-02-03 04:19:46 -0600132Verify If The Modified Admin Credential Is Valid Post Image Switched To Backup
Sushil Singh5166ebd2021-05-31 01:24:16 -0500133 [Documentation] Verify updated admin credential remain same post switch to back up image.
George Keishing5236ec52022-01-31 12:07:58 -0600134 [Tags] Verify_If_The_Modified_Admin_Credential_Is_Valid_Post_Image_Switched_To_Backup
Anves Kumar rayankula7ed1ae82021-02-03 04:19:46 -0600135 [Setup] Create Users With Different Roles users=${USERS} force=${True}
136 [Teardown] Run Keywords Redfish.Login AND Delete BMC Users Via Redfish users=${USERS}
137
138 ${post_code_update_actions}= Get Post Boot Action
139 ${state}= Get Pre Reboot State
140 Expire And Update New Password Via Redfish ${ADMIN[0]} ${ADMIN[1]} 0penBmc123
141
142 Redfish.Login
143 # change to backup image and reset the BMC.
144 Switch Backup Firmware Image To Functional
145 Wait For Reboot start_boot_seconds=${state['epoch_seconds']}
146
147 # verify modified admin password on backup image.
148 Redfish.Login admin_user 0penBmc123
149 Redfish.Logout
150
Sushil Singh5166ebd2021-05-31 01:24:16 -0500151
Anves Kumar rayankula7ed1ae82021-02-03 04:19:46 -0600152Verify If The Modified Admin Credential Is Valid Post Update
Sushil Singh5166ebd2021-05-31 01:24:16 -0500153 [Documentation] Verify updated admin credential remain same post code update image.
George Keishing5236ec52022-01-31 12:07:58 -0600154 [Tags] Verify_If_The_Modified_Admin_Credential_Is_Valid_Post_Update
Anves Kumar rayankula7ed1ae82021-02-03 04:19:46 -0600155 [Setup] Create Users With Different Roles users=${USERS} force=${True}
156 [Teardown] Run Keywords Redfish.Login AND Delete BMC Users Via Redfish users=${USERS}
157
158 Expire And Update New Password Via Redfish ${ADMIN[0]} ${ADMIN[1]} 0penBmc123
159
160 Redfish.Login
161 # Flash latest firmware using redfish.
162 Redfish Update Firmware OnReset
163
164 # verify modified admin credentails on latest image.
165 Redfish.Login admin_user 0penBmc123
166 Redfish.Logout
167
Sushil Singh44bfc202023-02-08 09:53:36 -0600168
169Redfish Code Update With Different Interrupted Operation
170 [Documentation] Ensure firmware update is successful when different interrupted operation executed
Sushil Singh1ee3c932023-02-24 01:58:09 -0600171 ... i.e. change the hostname, updating https certificate and firmware update fail
172 ... when kernel panic.
Sushil Singh44bfc202023-02-08 09:53:36 -0600173 [Tags] Redfish_Code_Update_With_Different_Interrupted_Operation
174 [Template] Verify Redfish Code Update With Different Interrupted Operation
175
Sushil Singh1ee3c932023-02-24 01:58:09 -0600176 # operation count
177 host_name 1
178 kernel_panic 1
179 https_certificate 1
Sushil Singh44bfc202023-02-08 09:53:36 -0600180
Sushil Singhcdebdd52019-08-14 15:29:24 -0500181*** Keywords ***
182
183Suite Setup Execution
184 [Documentation] Do the suite setup.
185
Sushil Singhcdebdd52019-08-14 15:29:24 -0500186 Valid File Path IMAGE_FILE_PATH
187 Redfish.Login
Sushil Singhc8526a22022-12-21 10:26:19 -0600188
Tim Lee4aff2d02021-06-08 13:26:25 +0800189 Redfish Delete All BMC Dumps
Sushil Singhcdebdd52019-08-14 15:29:24 -0500190 Redfish Purge Event Log
191
Sushil Singhc8526a22022-12-21 10:26:19 -0600192 Redfish Power Off stack_mode=skip
193
Sushil Singhcdebdd52019-08-14 15:29:24 -0500194
195Redfish Update Firmware
196 [Documentation] Update the BMC firmware via redfish interface.
197 [Arguments] ${apply_time}
198
199 # Description of argument(s):
200 # policy ApplyTime allowed values (e.g. "OnReset", "Immediate").
201
Sushil Singhb13fc362020-02-06 03:40:56 -0600202 ${post_code_update_actions}= Get Post Boot Action
Sushil Singhcdebdd52019-08-14 15:29:24 -0500203 ${state}= Get Pre Reboot State
204 Rprint Vars state
Sushil Singh6f86f172019-10-30 11:36:25 -0500205 Set ApplyTime policy=${apply_Time}
Sushil Singh1560e652022-08-03 13:25:01 -0500206
207 ${task_inv_dict}= Get Task State from File
208
209 ${file_bin_data}= OperatingSystem.Get Binary File ${image_file_path}
210
211 Log To Console Start uploading image to BMC.
212 Upload Image To BMC ${REDFISH_BASE_URI}UpdateService timeout=${600} data=${file_bin_data}
213 Log To Console Completed image upload to BMC.
214
215 ${task_inv}= Check Task With Match TargetUri /redfish/v1/UpdateService
216
217 Rprint Vars task_inv
218
219 Wait Until Keyword Succeeds 5 min 10 sec
220 ... Verify Task Progress State ${task_inv} ${task_inv_dict['TaskCompleted']}
221
Sushil Singhb13fc362020-02-06 03:40:56 -0600222 Run Key ${post_code_update_actions['BMC image']['${apply_time}']}
Sushil Singhf7674a52019-11-19 00:36:15 -0600223 Redfish.Login
Sushil Singhb13fc362020-02-06 03:40:56 -0600224 Redfish Verify BMC Version ${IMAGE_FILE_PATH}
Sushil Singh811ffae2019-10-23 05:16:22 -0500225 Verify Get ApplyTime ${apply_time}
Sushil Singhcdebdd52019-08-14 15:29:24 -0500226
Sushil Singhffbfedf2019-10-17 15:58:25 -0500227
228Redfish Multiple Upload Image And Check Progress State
229 [Documentation] Update multiple BMC firmware via redfish interface and check status.
230 [Arguments] ${apply_time} ${IMAGE_FILE_PATH} ${ALTERNATE_IMAGE_FILE_PATH}
231
232 # Description of argument(s):
233 # apply_time ApplyTime allowed values (e.g. "OnReset", "Immediate").
234 # IMAGE_FILE_PATH The path to BMC image file.
235 # ALTERNATE_IMAGE_FILE_PATH The path to alternate BMC image file.
236
Sushil Singhb13fc362020-02-06 03:40:56 -0600237 ${post_code_update_actions}= Get Post Boot Action
Sushil Singhffbfedf2019-10-17 15:58:25 -0500238 Valid File Path ALTERNATE_IMAGE_FILE_PATH
239 ${state}= Get Pre Reboot State
240 Rprint Vars state
241
242 Set ApplyTime policy=${apply_time}
243 Redfish Upload Image ${REDFISH_BASE_URI}UpdateService ${IMAGE_FILE_PATH}
244
245 ${first_image_id}= Get Latest Image ID
246 Rprint Vars first_image_id
247 Sleep 5s
248 Redfish Upload Image ${REDFISH_BASE_URI}UpdateService ${ALTERNATE_IMAGE_FILE_PATH}
249
250 ${second_image_id}= Get Latest Image ID
251 Rprint Vars second_image_id
252
253 Check Image Update Progress State
254 ... match_state='Updating', 'Disabled' image_id=${second_image_id}
255
256 Check Image Update Progress State
257 ... match_state='Updating' image_id=${first_image_id}
258
259 Wait Until Keyword Succeeds 8 min 20 sec
260 ... Check Image Update Progress State
261 ... match_state='Enabled' image_id=${first_image_id}
Sushil Singhb13fc362020-02-06 03:40:56 -0600262 Run Key ${post_code_update_actions['BMC image']['${apply_time}']}
263 Redfish.Login
264 Redfish Verify BMC Version ${IMAGE_FILE_PATH}
Sushil Singha83bba02023-01-18 08:43:45 -0600265
266
Sushil Singh44bfc202023-02-08 09:53:36 -0600267Run Configure BMC Hostname In Loop
268 [Documentation] Update hostname in loop.
269 [Arguments] ${count}
270
271 # Description of argument(s):
272 # count Loop count.
273
274 FOR ${index} IN RANGE ${count}
275 Configure Hostname  hostname=${HOSTNAME}[${index}] status_code=[${HTTP_INTERNAL_SERVER_ERROR}]
276 END
277
278
Sushil Singh1ee3c932023-02-24 01:58:09 -0600279Redfish Update Certificate Upload In Loop
280 [Documentation] Upload HTTPS server certificate via Redfish and verify using OpenSSL.
281 [Arguments] ${count}
282
283 # Description of argument(s):
284 # count Loop count.
285
286 FOR ${index} IN RANGE ${count}
287 ${resp}= Run Keyword And Return Status Redfish.Get ${REDFISH_HTTPS_CERTIFICATE_URI}/1 valid_status_codes=[${HTTP_OK}]
288 Should Be Equal As Strings ${resp} ${True}
289
290 ${cert_file_path}= Generate Certificate File Via Openssl Valid Certificate Valid Privatekey
291 ${bytes}= OperatingSystem.Get Binary File ${cert_file_path}
292 ${file_data}= Decode Bytes To String ${bytes} UTF-8
293
294 ${certificate_dict}= Create Dictionary
295 ... @odata.id=${REDFISH_HTTPS_CERTIFICATE_URI}/1
296 ${payload}= Create Dictionary CertificateString=${file_data}
297 ... CertificateType=PEM CertificateUri=${certificate_dict}
298
299 ${resp}= Redfish.Post /redfish/v1/CertificateService/Actions/CertificateService.ReplaceCertificate
300 ... body=${payload}
301
302 Verify Certificate Visible Via OpenSSL ${cert_file_path}
303 END
304
305
Sushil Singh44bfc202023-02-08 09:53:36 -0600306Run Operation On BMC
307 [Documentation] Run operation on BMC.
308 [Arguments] ${operation} ${count}
309
310 # Description of argument(s):
311 # operation If host_name then change hostname.
312 # count Loop count.
313
Sushil Singh1ee3c932023-02-24 01:58:09 -0600314 Run Keyword If '${operation}' == 'host_name'
315 ... Run Configure BMC Hostname In Loop count=${count}
316 ... ELSE IF '${operation}' == 'kernel_panic'
317 ... Run Keywords Kernel Panic BMC Reset Operation AND
318 ... Is BMC Unpingable
319 ... ELSE IF '${operation}' == 'https_certificate'
320 ... Redfish Update Certificate Upload In Loop count=${count}
321 ... ELSE
322 ... Fail msg=Operation not handled.
Sushil Singh44bfc202023-02-08 09:53:36 -0600323
324
325Get Active Firmware Image
326 [Documentation] Return get active firmware image.
327
328 ${active_image}= Redfish.Get Attribute /redfish/v1/Managers/bmc Links
329 Rprint Vars active_image
330
331 [Return] ${active_image}
332
333
Sushil Singh1ee3c932023-02-24 01:58:09 -0600334Get New Image ID
335 [Documentation] Return the ID of the most recently extracted image.
336
337 ${image_id}= Get Image Id Updating
338
339 [Return] ${image_id}
340
341
Sushil Singh44bfc202023-02-08 09:53:36 -0600342Verify Redfish Code Update With Different Interrupted Operation
George Keishing4611b812023-02-16 09:44:33 -0600343 [Documentation] Verify code update is successful when other operation
Sushil Singh1ee3c932023-02-24 01:58:09 -0600344 ... getting executed i.e. change the hostname, updating http certificate
345 ... and code update will fail for kernel panic.
Sushil Singh44bfc202023-02-08 09:53:36 -0600346 [Arguments] ${operation} ${count}
347
348 # Description of argument(s):
349 # operation host_name to change Hostname, kernel_panic to perform kernel panic.
350 # count Number of times loop will get executed.
351
352 ${before_update_activeswimage}= Get Active Firmware Image
353
354 ${post_code_update_actions}= Get Post Boot Action
355
356 Set ApplyTime policy=OnReset
357
358 ${task_inv_dict}= Get Task State from File
359
360 ${file_bin_data}= OperatingSystem.Get Binary File ${image_file_path}
361
362 Log To Console Start uploading image to BMC.
363 Upload Image To BMC ${REDFISH_BASE_URI}UpdateService timeout=${600} data=${file_bin_data}
364 Log To Console Completed image upload to BMC.
365
Sushil Singh1ee3c932023-02-24 01:58:09 -0600366 Sleep 5
367
368 ${image_id}= Get New Image ID
369 Rprint Vars image_id
370
Sushil Singh44bfc202023-02-08 09:53:36 -0600371 ${task_inv}= Check Task With Match TargetUri /redfish/v1/UpdateService
372 Rprint Vars task_inv
373
374 Wait Until Keyword Succeeds 1 min 10 sec
375 ... Verify Task Progress State ${task_inv} ${task_inv_dict['TaskStarting']}
376
377 Run Operation On BMC ${operation} ${count}
378
Sushil Singh1ee3c932023-02-24 01:58:09 -0600379 IF '${operation}' == 'kernel_panic'
380 Wait Until Keyword Succeeds 10 min 10 sec Is BMC Standby
381 ELSE IF '${operation}' == 'host_name'
382 Wait Until Keyword Succeeds 5 min 10 sec
383 ... Verify Task Progress State ${task_inv} ${task_inv_dict['TaskCompleted']}
384 Run Key ${post_code_update_actions['BMC image']['OnReset']}
385 Redfish Verify BMC Version ${IMAGE_FILE_PATH}
386 ELSE IF '${operation}' == 'https_certificate'
387 Check Image Update Progress State
388 ... match_state='Updating' image_id=${image_id}
389 Wait Until Keyword Succeeds 8 min 20 sec
390 ... Check Image Update Progress State
391 ... match_state='Enabled' image_id=${image_id}
392 Run Key ${post_code_update_actions['BMC image']['OnReset']}
393 Redfish Verify BMC Version ${IMAGE_FILE_PATH}
394 ELSE
395 Fail msg=Operation not handled.
396 END
Sushil Singh44bfc202023-02-08 09:53:36 -0600397
398 ${after_update_activeswimage}= Get Active Firmware Image
399
400 ${status}= Run Keyword And Return Status Should Be Equal As Strings
401 ... ${before_update_activeswimage['ActiveSoftwareImage']['@odata.id']}
402 ... ${after_update_activeswimage['ActiveSoftwareImage']['@odata.id']}
403
404 Run Keyword If '${operation}' == 'kernel_panic'
405 ... Should Be True ${status}
406 ... ELSE
407 ... Should Not Be True ${status}
408
409 Verify Get ApplyTime OnReset
410