blob: 70c92613ab6d348749427fd628239e059e01544b [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
George Keishing9899a902023-09-07 20:57:53 +053034Force Tags Redfish_Bmc_Code_Update
Sushil Singhcdebdd52019-08-14 15:29:24 -050035
Anves Kumar rayankula7ed1ae82021-02-03 04:19:46 -060036*** Variables ***
37
Sushil Singh759f1482023-02-28 01:29:52 -060038@{ADMIN} admin_user TestPwd123
39&{USERS} Administrator=${ADMIN}
40${LOOP_COUNT} ${2}
41@{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
Sushil Singh62098652023-08-31 09:14:50 -050085 OnReset ${IMAGE_FILE_PATH} ${ALTERNATE_IMAGE_FILE_PATH}
Sushil Singhffbfedf2019-10-17 15:58:25 -050086
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
Sushil Singh86895062024-01-16 06:29:07 -0600175 [Teardown] Code Update Interrupted Operation Teardown
Sushil Singh44bfc202023-02-08 09:53:36 -0600176
Sushil Singh1ee3c932023-02-24 01:58:09 -0600177 # operation count
178 host_name 1
179 kernel_panic 1
180 https_certificate 1
Sushil Singh44bfc202023-02-08 09:53:36 -0600181
Sushil Singhcdebdd52019-08-14 15:29:24 -0500182*** Keywords ***
183
184Suite Setup Execution
185 [Documentation] Do the suite setup.
186
Sushil Singhcdebdd52019-08-14 15:29:24 -0500187 Valid File Path IMAGE_FILE_PATH
188 Redfish.Login
Sushil Singhc8526a22022-12-21 10:26:19 -0600189
Tim Lee4aff2d02021-06-08 13:26:25 +0800190 Redfish Delete All BMC Dumps
Sushil Singhcdebdd52019-08-14 15:29:24 -0500191 Redfish Purge Event Log
192
Sushil Singhc8526a22022-12-21 10:26:19 -0600193 Redfish Power Off stack_mode=skip
194
Sushil Singh759f1482023-02-28 01:29:52 -0600195
Sushil Singh86895062024-01-16 06:29:07 -0600196Code Update Interrupted Operation Teardown
197 [Documentation] Code update interrupted operation teardown.
198
199 ${task_inv_dict}= Get Task State from File
200
201 ${redfish_update_uri}= Get Redfish Update Service URI
202
203 IF '${TEST STATUS}' == 'FAIL'
204
205 ${task_inv}= Check Task With Match TargetUri ${redfish_update_uri}
206 Rprint Vars task_inv
207
208 Wait Until Keyword Succeeds 2 min 10 sec
209 ... Verify Task Progress State ${task_inv} ${task_inv_dict['TaskStarting']}
210
211 Wait Until Keyword Succeeds 5 min 10 sec
212 ... Verify Task Progress State ${task_inv} ${task_inv_dict['TaskCompleted']}
213
214 Redfish BMC Reset Operation
215 Is BMC Standby
216
217 END
218
219
Sushil Singh514a8402023-08-30 06:20:41 -0500220Get Redfish Update Service URI
221 [Documentation] Get Redfish firmware update URI.
Sushil Singh759f1482023-02-28 01:29:52 -0600222
Sushil Singh514a8402023-08-30 06:20:41 -0500223 ${update_url}= Redfish.Get Attribute ${REDFISH_BASE_URI}UpdateService HttpPushUri
Sushil Singh759f1482023-02-28 01:29:52 -0600224
Sushil Singh514a8402023-08-30 06:20:41 -0500225 Log To Console Firmware update URI: ${update_url}
226
227 [Return] ${update_url}
Sushil Singh759f1482023-02-28 01:29:52 -0600228
Sushil Singhcdebdd52019-08-14 15:29:24 -0500229
Sushil Singhffbfedf2019-10-17 15:58:25 -0500230Redfish Multiple Upload Image And Check Progress State
231 [Documentation] Update multiple BMC firmware via redfish interface and check status.
232 [Arguments] ${apply_time} ${IMAGE_FILE_PATH} ${ALTERNATE_IMAGE_FILE_PATH}
233
234 # Description of argument(s):
235 # apply_time ApplyTime allowed values (e.g. "OnReset", "Immediate").
236 # IMAGE_FILE_PATH The path to BMC image file.
237 # ALTERNATE_IMAGE_FILE_PATH The path to alternate BMC image file.
238
Sushil Singh62098652023-08-31 09:14:50 -0500239
240 ${task_inv_dict}= Get Task State from File
241
Sushil Singhb13fc362020-02-06 03:40:56 -0600242 ${post_code_update_actions}= Get Post Boot Action
Sushil Singh62098652023-08-31 09:14:50 -0500243
Sushil Singhffbfedf2019-10-17 15:58:25 -0500244 Valid File Path ALTERNATE_IMAGE_FILE_PATH
Sushil Singh62098652023-08-31 09:14:50 -0500245
Sushil Singhffbfedf2019-10-17 15:58:25 -0500246 ${state}= Get Pre Reboot State
247 Rprint Vars state
248
249 Set ApplyTime policy=${apply_time}
Sushil Singh514a8402023-08-30 06:20:41 -0500250
251 # URI : /redfish/v1/UpdateService
252 # "HttpPushUri": "/redfish/v1/UpdateService/update",
253
254 ${redfish_update_uri}= Get Redfish Update Service URI
Sushil Singhffbfedf2019-10-17 15:58:25 -0500255
Sushil Singh62098652023-08-31 09:14:50 -0500256 ${file_bin_data1}= OperatingSystem.Get Binary File ${IMAGE_FILE_PATH}
257 ${file_bin_data2}= OperatingSystem.Get Binary File ${ALTERNATE_IMAGE_FILE_PATH}
Sushil Singhffbfedf2019-10-17 15:58:25 -0500258
Sushil Singh62098652023-08-31 09:14:50 -0500259 Log To Console Uploading first image.
260 ${resp1}= Upload Image To BMC ${redfish_update_uri} timeout=${600} data=${file_bin_data1}
Sushil Singhffbfedf2019-10-17 15:58:25 -0500261
Sushil Singh62098652023-08-31 09:14:50 -0500262 Log To Console Uploading second image.
263 ${resp2}= Upload Image To BMC ${redfish_update_uri} timeout=${600} data=${file_bin_data2}
Sushil Singhffbfedf2019-10-17 15:58:25 -0500264
Sushil Singh62098652023-08-31 09:14:50 -0500265 ${task_info2}= evaluate json.loads('''${resp2.content}''') json
Sushil Singhffbfedf2019-10-17 15:58:25 -0500266
Sushil Singh62098652023-08-31 09:14:50 -0500267 Sleep 3s
268
269 ${task_inv2}= Get Task Inventory ${task_info2}
George Keishing365dd462023-10-12 18:56:00 +0530270 Log ${task_inv2}
Sushil Singh62098652023-08-31 09:14:50 -0500271
272 Wait Until Keyword Succeeds 5 min 10 sec
273 ... Verify Task Progress State ${task_inv2} ${task_inv_dict['TaskException']}
274
275 ${task_info1}= evaluate json.loads('''${resp1.content}''') json
276 Log ${task_info1}
277
278 ${task_inv1}= Get Task Inventory ${task_info1}
279 Log ${task_inv1}
280
281 Wait Until Keyword Succeeds 5 min 10 sec
282 ... Verify Task Progress State ${task_inv1} ${task_inv_dict['TaskCompleted']}
283
Sushil Singhb13fc362020-02-06 03:40:56 -0600284 Run Key ${post_code_update_actions['BMC image']['${apply_time}']}
285 Redfish.Login
286 Redfish Verify BMC Version ${IMAGE_FILE_PATH}
Sushil Singha83bba02023-01-18 08:43:45 -0600287
288
Sushil Singh44bfc202023-02-08 09:53:36 -0600289Run Configure BMC Hostname In Loop
290 [Documentation] Update hostname in loop.
291 [Arguments] ${count}
292
293 # Description of argument(s):
294 # count Loop count.
295
296 FOR ${index} IN RANGE ${count}
Sushil Singh514a8402023-08-30 06:20:41 -0500297 Configure Hostname  hostname=${HOSTNAME}[${index}] status_code=[${HTTP_OK}]
Sushil Singh44bfc202023-02-08 09:53:36 -0600298 END
299
300
Sushil Singh1ee3c932023-02-24 01:58:09 -0600301Redfish Update Certificate Upload In Loop
302 [Documentation] Upload HTTPS server certificate via Redfish and verify using OpenSSL.
303 [Arguments] ${count}
304
305 # Description of argument(s):
306 # count Loop count.
307
308 FOR ${index} IN RANGE ${count}
309 ${resp}= Run Keyword And Return Status Redfish.Get ${REDFISH_HTTPS_CERTIFICATE_URI}/1 valid_status_codes=[${HTTP_OK}]
310 Should Be Equal As Strings ${resp} ${True}
311
312 ${cert_file_path}= Generate Certificate File Via Openssl Valid Certificate Valid Privatekey
313 ${bytes}= OperatingSystem.Get Binary File ${cert_file_path}
314 ${file_data}= Decode Bytes To String ${bytes} UTF-8
315
316 ${certificate_dict}= Create Dictionary
317 ... @odata.id=${REDFISH_HTTPS_CERTIFICATE_URI}/1
318 ${payload}= Create Dictionary CertificateString=${file_data}
319 ... CertificateType=PEM CertificateUri=${certificate_dict}
320
321 ${resp}= Redfish.Post /redfish/v1/CertificateService/Actions/CertificateService.ReplaceCertificate
322 ... body=${payload}
323
324 Verify Certificate Visible Via OpenSSL ${cert_file_path}
325 END
326
327
Sushil Singh44bfc202023-02-08 09:53:36 -0600328Run Operation On BMC
329 [Documentation] Run operation on BMC.
330 [Arguments] ${operation} ${count}
331
332 # Description of argument(s):
Sushil Singh86895062024-01-16 06:29:07 -0600333 # operation Supports differnt variables.
334 # If host_name then change hostname,
335 # If kernel_panic then perform kernel panic,
336 # If https_certificate then change the https certificate.
Sushil Singh44bfc202023-02-08 09:53:36 -0600337 # count Loop count.
338
Sushil Singh86895062024-01-16 06:29:07 -0600339 # Below directory is required by keyword.
340 # Redfish Update Certificate Upload In Loop
341
342 IF '${operation}' == 'https_certificate'
343 Run rm -r certificate_dir
344 Run mkdir certificate_dir
345 END
346
Sushil Singh1ee3c932023-02-24 01:58:09 -0600347 Run Keyword If '${operation}' == 'host_name'
348 ... Run Configure BMC Hostname In Loop count=${count}
349 ... ELSE IF '${operation}' == 'kernel_panic'
350 ... Run Keywords Kernel Panic BMC Reset Operation AND
351 ... Is BMC Unpingable
352 ... ELSE IF '${operation}' == 'https_certificate'
353 ... Redfish Update Certificate Upload In Loop count=${count}
354 ... ELSE
355 ... Fail msg=Operation not handled.
Sushil Singh44bfc202023-02-08 09:53:36 -0600356
357
358Get Active Firmware Image
359 [Documentation] Return get active firmware image.
360
ganesanb4d430282023-04-27 14:33:23 +0000361 ${active_image}= Redfish.Get Attribute /redfish/v1/Managers/${MANAGER_ID} Links
Sushil Singh44bfc202023-02-08 09:53:36 -0600362 Rprint Vars active_image
363
364 [Return] ${active_image}
365
366
Sushil Singh1ee3c932023-02-24 01:58:09 -0600367Get New Image ID
368 [Documentation] Return the ID of the most recently extracted image.
369
370 ${image_id}= Get Image Id Updating
371
372 [Return] ${image_id}
373
374
Sushil Singh44bfc202023-02-08 09:53:36 -0600375Verify Redfish Code Update With Different Interrupted Operation
George Keishing4611b812023-02-16 09:44:33 -0600376 [Documentation] Verify code update is successful when other operation
Sushil Singh1ee3c932023-02-24 01:58:09 -0600377 ... getting executed i.e. change the hostname, updating http certificate
378 ... and code update will fail for kernel panic.
Sushil Singh44bfc202023-02-08 09:53:36 -0600379 [Arguments] ${operation} ${count}
380
381 # Description of argument(s):
382 # operation host_name to change Hostname, kernel_panic to perform kernel panic.
383 # count Number of times loop will get executed.
384
385 ${before_update_activeswimage}= Get Active Firmware Image
386
387 ${post_code_update_actions}= Get Post Boot Action
388
389 Set ApplyTime policy=OnReset
390
391 ${task_inv_dict}= Get Task State from File
392
393 ${file_bin_data}= OperatingSystem.Get Binary File ${image_file_path}
394
395 Log To Console Start uploading image to BMC.
Sushil Singh514a8402023-08-30 06:20:41 -0500396
397 # URI : /redfish/v1/UpdateService
398 # "HttpPushUri": "/redfish/v1/UpdateService/update",
399
400 ${redfish_update_uri}= Get Redfish Update Service URI
401 Upload Image To BMC ${redfish_update_uri} timeout=${600} data=${file_bin_data}
Sushil Singh44bfc202023-02-08 09:53:36 -0600402 Log To Console Completed image upload to BMC.
403
Sushil Singh86895062024-01-16 06:29:07 -0600404 Sleep 8
Sushil Singh1ee3c932023-02-24 01:58:09 -0600405
406 ${image_id}= Get New Image ID
407 Rprint Vars image_id
408
Sushil Singh514a8402023-08-30 06:20:41 -0500409 ${task_inv}= Check Task With Match TargetUri ${redfish_update_uri}
Sushil Singh44bfc202023-02-08 09:53:36 -0600410 Rprint Vars task_inv
411
Sushil Singh514a8402023-08-30 06:20:41 -0500412 Wait Until Keyword Succeeds 2 min 10 sec
Sushil Singh44bfc202023-02-08 09:53:36 -0600413 ... Verify Task Progress State ${task_inv} ${task_inv_dict['TaskStarting']}
414
415 Run Operation On BMC ${operation} ${count}
416
Sushil Singh1ee3c932023-02-24 01:58:09 -0600417 IF '${operation}' == 'kernel_panic'
418 Wait Until Keyword Succeeds 10 min 10 sec Is BMC Standby
419 ELSE IF '${operation}' == 'host_name'
420 Wait Until Keyword Succeeds 5 min 10 sec
421 ... Verify Task Progress State ${task_inv} ${task_inv_dict['TaskCompleted']}
422 Run Key ${post_code_update_actions['BMC image']['OnReset']}
423 Redfish Verify BMC Version ${IMAGE_FILE_PATH}
424 ELSE IF '${operation}' == 'https_certificate'
425 Check Image Update Progress State
426 ... match_state='Updating' image_id=${image_id}
427 Wait Until Keyword Succeeds 8 min 20 sec
428 ... Check Image Update Progress State
429 ... match_state='Enabled' image_id=${image_id}
430 Run Key ${post_code_update_actions['BMC image']['OnReset']}
431 Redfish Verify BMC Version ${IMAGE_FILE_PATH}
432 ELSE
433 Fail msg=Operation not handled.
434 END
Sushil Singh44bfc202023-02-08 09:53:36 -0600435
436 ${after_update_activeswimage}= Get Active Firmware Image
437
438 ${status}= Run Keyword And Return Status Should Be Equal As Strings
439 ... ${before_update_activeswimage['ActiveSoftwareImage']['@odata.id']}
440 ... ${after_update_activeswimage['ActiveSoftwareImage']['@odata.id']}
441
442 Run Keyword If '${operation}' == 'kernel_panic'
443 ... Should Be True ${status}
444 ... ELSE
445 ... Should Not Be True ${status}
446
447 Verify Get ApplyTime OnReset
448