blob: cae879bebabb933d617e9451b60e17b17912d70d [file] [log] [blame]
George Keishingc5fab992019-02-02 08:50:37 -06001*** Settings ***
Joy Onyerikwudbfe97d2019-03-11 19:44:56 -05002Documentation Verify that Redfish software inventory can be collected.
3
George Keishing2db7bca2019-02-14 13:03:08 -06004Resource ../../lib/resource.robot
George Keishingc5fab992019-02-02 08:50:37 -06005Resource ../../lib/bmc_redfish_resource.robot
George Keishing3298d5c2019-02-12 06:59:25 -06006Resource ../../lib/openbmc_ffdc.robot
Sushil Singh5bd50022021-06-03 07:11:59 -05007Resource ../../lib/redfish_code_update_utils.robot
George Keishing40f76642019-07-01 02:09:33 -05008Library ../../lib/gen_robot_valid.py
George Keishing3298d5c2019-02-12 06:59:25 -06009
George Keishing97c93942019-03-04 12:45:07 -060010Test Setup Test Setup Execution
11Test Teardown Test Teardown Execution
George Keishingc5fab992019-02-02 08:50:37 -060012
13*** Test Cases ***
14
George Keishing5ee33d92019-02-02 12:33:25 -060015Verify Redfish Update Service Enabled
George Keishingc5fab992019-02-02 08:50:37 -060016 [Documentation] Verify "ServiceEnabled" is enabled.
17 [Tags] Verify_Update_Service_Enabled
18
19 # Example:
20 # "HttpPushUri": "/redfish/v1/UpdateService",
21 # "Id": "UpdateService",
22 # "Name": "Update Service",
23 # "ServiceEnabled": true
24
George Keishing97c93942019-03-04 12:45:07 -060025 ${resp}= Redfish.Get /redfish/v1/UpdateService
George Keishingc5fab992019-02-02 08:50:37 -060026 Should Be Equal As Strings ${resp.dict["ServiceEnabled"]} ${True}
George Keishingc5fab992019-02-02 08:50:37 -060027
28
George Keishing5ee33d92019-02-02 12:33:25 -060029Verify Redfish Software Inventory Collection
George Keishingc5fab992019-02-02 08:50:37 -060030 [Documentation] Verify software inventory collection member and object entries.
George Keishing5ee33d92019-02-02 12:33:25 -060031 [Tags] Verify_Redfish_Software_Inventory_Collection
George Keishingc5fab992019-02-02 08:50:37 -060032
33 # Example:
34 # {
35 # "@odata.type": "#SoftwareInventoryCollection.SoftwareInventoryCollection",
36 # "Members": [
37 # {
38 # "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/a3522998"
39 # },
40 # {
41 # "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/a7c79f71"
42 # },
43 # {
44 # "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/ace821ef"
45 # }
46 # ],
47 # "Members@odata.count": 3,
48 # "Name": "Software Inventory Collection"
49 # }
50
George Keishing97c93942019-03-04 12:45:07 -060051 ${resp}= Redfish.Get /redfish/v1/UpdateService/FirmwareInventory
George Keishingc5fab992019-02-02 08:50:37 -060052
53 Should Be True ${resp.dict["Members@odata.count"]} >= ${1}
54 Length Should Be ${resp.dict["Members"]} ${resp.dict["Members@odata.count"]}
George Keishingc5fab992019-02-02 08:50:37 -060055
56
George Keishing5ee33d92019-02-02 12:33:25 -060057Redfish Software Inventory Status Check
George Keishingc5fab992019-02-02 08:50:37 -060058 [Documentation] Get firmware inventory entries and do health check status.
George Keishing5ee33d92019-02-02 12:33:25 -060059 [Tags] Redfish_Software_Inventory_Status_Check
George Keishingc5fab992019-02-02 08:50:37 -060060
George Keishing97c93942019-03-04 12:45:07 -060061 ${resp}= Redfish.Get /redfish/v1/UpdateService/FirmwareInventory
George Keishingc5fab992019-02-02 08:50:37 -060062
63 # Entries "Members@odata.count": 3,
64 # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/a3522998'}
65 # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/a7c79f71'}
66 # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/ace821ef'}
67
Sushil Singh50621142020-06-16 11:12:21 -050068 FOR ${entry} IN RANGE 0 ${resp.dict["Members@odata.count"]}
69 ${resp_resource}= Redfish.Get ${resp.dict["Members"][${entry}]["@odata.id"]}
George Keishingc5fab992019-02-02 08:50:37 -060070 # Example:
71 # "Status": {
72 # "Health": "OK",
73 # "HealthRollup": "OK",
74 # "State": "Enabled"
75 # },
Sushil Singh50621142020-06-16 11:12:21 -050076 Should Be Equal As Strings ${resp_resource.dict["Status"]["Health"]} OK
77 Should Be Equal As Strings ${resp_resource.dict["Status"]["HealthRollup"]} OK
78 Should Be Equal As Strings ${resp_resource.dict["Status"]["State"]} Enabled
79 END
George Keishing97c93942019-03-04 12:45:07 -060080
81
Sivas SRRd099d362019-03-07 03:33:03 -060082Verify BMC Version Matches With FirmwareInventory
83 [Documentation] Verify BMC version from FirmwareInventory same as in manager.
84 [Tags] Verify_BMC_Version_Matches_With_FirmwareInventory
85
86 ${bmc_manager}= Redfish.Get /redfish/v1/Managers/bmc
87 ${manager_bmc_version}= Get BMC Version
88 # Check for manager version and cat /etc/os-release.
89 Should Be Equal As Strings
90 ... ${bmc_manager.dict["FirmwareVersion"]} ${manager_bmc_version.strip('"')}
91
92 ${resp}= Redfish.Get /redfish/v1/UpdateService/FirmwareInventory
93
94 # Entries "Members@odata.count": 3,
95 # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/a3522998'}
96 # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/a7c79f71'}
97 # {'@odata.id': '/redfish/v1/UpdateService/FirmwareInventory/ace821ef'}
98
99 ${actual_count}= Evaluate ${resp.dict["Members@odata.count"]}-1
Sushil Singh50621142020-06-16 11:12:21 -0500100 FOR ${entry} IN RANGE 0 ${resp.dict["Members@odata.count"]}
101 ${resp_resource}= Redfish.Get ${resp.dict["Members"][${entry}]["@odata.id"]}
Sivas SRRd099d362019-03-07 03:33:03 -0600102 # 3rd comparison of BMC version and verify FirmwareInventory bmc version.
103 # Example:
104 # "Version": 2.7.0-dev-19-g9b44ea7
Sushil Singh50621142020-06-16 11:12:21 -0500105 Exit For Loop If '${resp_resource.dict["Version"]}' == '${manager_bmc_version.strip('"')}'
106 Run Keyword If '${entry}' == '${actual_count}' Fail BMC version not there in Firmware Inventory
107 END
Sivas SRRd099d362019-03-07 03:33:03 -0600108
Sushil Singh50a1be92021-06-15 06:52:36 -0500109
George Keishing40f76642019-07-01 02:09:33 -0500110Verify UpdateService Supports TransferProtocol TFTP
111 [Documentation] Verify update service supported values have TFTP protocol.
112 [Tags] Verify_UpdateService_Supports_TransferProtocol_TFTP
113
114 # Example:
115 # "Actions": {
116 # "#UpdateService.SimpleUpdate": {
117 # "TransferProtocol@Redfish.AllowableValues": [
118 # "TFTP"
119 # ],
120 # "target": "/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate"
121 # }
122 # },
123
124 ${allowable_values}= Redfish.Get Attribute /redfish/v1/UpdateService Actions
125
George Keishinge4d41422019-12-12 11:17:03 -0600126 Valid Value
127 ... allowable_values["#UpdateService.SimpleUpdate"]["TransferProtocol@Redfish.AllowableValues"][0]
128 ... valid_values=['TFTP']
129 Valid Value allowable_values["#UpdateService.SimpleUpdate"]["target"]
130 ... valid_values=['/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate']
George Keishing40f76642019-07-01 02:09:33 -0500131
132
Sushil Singh5bd50022021-06-03 07:11:59 -0500133Verify Redfish Software Hex ID
134 [Documentation] Verify BMC images have valid 8-digit hex IDs.
135 [Tags] Verify_Redfish_Software_Hex_ID
136
137 ${sw_inv_dict}= Get Software Inventory State
138
139 FOR ${id_key} IN @{sw_inv_dict}
140 ${sw_inv}= Get From Dictionary ${sw_inv_dict} ${id_key}
141 Should Be Equal As Strings ${id_key} ${sw_inv['image_id']}
142 Length Should Be ${sw_inv['image_id']} ${8}
143 Should Match Regexp ${sw_inv['image_id']} [0-9a-f]*
144 END
145
146
Sushil Singh1d5bd9a2021-06-07 00:51:42 -0500147Verify Redfish FirmwareInventory Is Updateable
148 [Documentation] Verify the redfish firmware inventory path is updateable.
149 [Tags] Verify_Redfish_FirmwareInventory_Is_Updateable
150
151 ${sw_member_list}= Redfish_Utils.Get Member List /redfish/v1/UpdateService/FirmwareInventory
152
153 # sw_member_list:
154 # [0]: /redfish/v1/UpdateService/FirmwareInventory/98744d76
155 # [1]: /redfish/v1/UpdateService/FirmwareInventory/9a8028ec
156 # [2]: /redfish/v1/UpdateService/FirmwareInventory/acc9e073
157
158 FOR ${sw_member} IN @{sw_member_list}
159 ${resp}= Redfish.Get Attribute ${sw_member} Updateable
160
161 # Example:
162 # "Updateable": true,
163
164 Should Be Equal As Strings ${resp} True
Sushil Singh1d5bd9a2021-06-07 00:51:42 -0500165 END
166
167
Sushil Singh50a1be92021-06-15 06:52:36 -0500168Check Redfish Functional Image Version Is Same
169 [Documentation] Verify functional image version is same as in Redfish managers.
170 [Tags] Check_Redfish_Functional_Image_Version_Is_Same
171 [Template] Verify Redfish Functional Image Version Is Same
Sushil Singh54551002021-06-08 02:35:48 -0500172
Sushil Singh50a1be92021-06-15 06:52:36 -0500173 # image
174 functional_image
175 backup_image
Sushil Singh54551002021-06-08 02:35:48 -0500176
Sushil Singh54551002021-06-08 02:35:48 -0500177
Sushil Singh50a1be92021-06-15 06:52:36 -0500178Check Redfish Backup Image Version Is Same
179 [Documentation] Switch to backup image and then verify functional image version
180 ... is same as in Redfish managers..
181 [Tags] Check_Redfish_Backup_Image_Version_Is_Same
182 [Template] Verify Redfish Functional Image Version Is Same
Sushil Singh54551002021-06-08 02:35:48 -0500183
Sushil Singh50a1be92021-06-15 06:52:36 -0500184 # image
185 switch_backup_image
Sushil Singh54551002021-06-08 02:35:48 -0500186
187
Sushil Singhfcce0d32021-06-18 00:06:51 -0500188Verify Redfish Software Image And Firmware Inventory Are Same
189 [Documentation] Verify the firmware software inventory is same as software images of managers.
190 [Tags] Verify_Redfish_Software_Image_And_Firmware_Inventory_Are_Same
191
192 # SoftwareImages
193 # /redfish/v1/UpdateService/FirmwareInventory/632c5114
194 # /redfish/v1/UpdateService/FirmwareInventory/e702a011
195
196 ${firmware_inv_path}= Redfish.Get Properties ${REDFISH_BASE_URI}Managers/bmc
197 ${firmware_inv_path}= Get From Dictionary ${firmware_inv_path} Links
198 ${sw_image}= Get From Dictionary ${firmware_inv_path} SoftwareImages
199
200 ${sw_member_list}= Redfish_Utils.Get Member List /redfish/v1/UpdateService/FirmwareInventory
201
202 FOR ${sw_inv_path} IN @{sw_image}
203 List Should Contain Value ${sw_member_list} ${sw_inv_path['@odata.id']}
204 END
205
206 ${num_records_sw_image}= Get Length ${sw_image}
207 ${num_records_sw_inv}= Get Length ${sw_member_list}
208 Should Be Equal ${num_records_sw_image} ${num_records_sw_inv}
209
210
Sushil Singhd8af36d2021-08-10 02:14:34 -0500211Check If Firmware Image Is Same In Firmware Inventory And Redfish Read Operation
212 [Documentation] Check the Redfish firmware inventory path is same as in
213 ... active software image of Redfish managers and firmware inventory of update service.
214 [Tags] Check_If_Firmware_Image_Is_Same_In_Firmware_Inventory_And_Redfish_Read_Operation
215
216 Verify Active Software Image And Firmware Inventory Is Same
217
218
219Check If Backup Firmware Image Is Same In Firmware Inventory And Redfish Read Operation
220 [Documentation] Check the Redfish backup image firmware inventory path is same as in
221 ... active software image of Redfish managers and firmware inventory of update service.
222 [Tags] Check_If_Backup_Firmware_Image_Is_Same_In_Firmware_Inventory_And_Redfish_Read_Operation
223
224 Verify Active Software Image And Firmware Inventory Is Same
225 Set Backup Firmware Image As Functional
226 Verify Active Software Image And Firmware Inventory Is Same
227 Set Backup Firmware Image As Functional
228 Verify Active Software Image And Firmware Inventory Is Same
229
230
George Keishing1b8865c2019-07-04 12:16:49 -0500231Verify Redfish BIOS Version
232 [Documentation] Get host firmware version from system inventory.
233 [Tags] Verify_Redfish_BIOS_Version
234
235 ${bios_version}= Redfish.Get Attribute /redfish/v1/Systems/system/ BiosVersion
236 ${pnor_version}= Get PNOR Version
237 Should Be Equal ${pnor_version} ${bios_version}
238
239
George Keishing97c93942019-03-04 12:45:07 -0600240*** Keywords ***
241
242Test Setup Execution
243 [Documentation] Do test case setup tasks.
244
245 Redfish.Login
246
247
248Test Teardown Execution
249 [Documentation] Do the post test teardown.
250
251 FFDC On Test Case Fail
252 Redfish.Logout
Sushil Singh50a1be92021-06-15 06:52:36 -0500253
254
255Verify Firmware Version Same In Firmware Inventory And Managers
Sushil Singhd8af36d2021-08-10 02:14:34 -0500256 [Documentation] Verify the Redfish firmware inventory path version is same as Redfish managers.
Sushil Singh50a1be92021-06-15 06:52:36 -0500257
258 # User defined state for software objects.
259 # Note: "Functional" term refers to firmware which system is currently booted with.
260
261 # sw_inv_dict:
262 # [b9101858]:
263 # [image_type]: BMC update
264 # [image_id]: b9101858
265 # [functional]: True
266 # [version]: 2.8.0-dev-150-g04508dc9f
267
268 ${sw_inv_list}= Get Functional Firmware BMC image
269 ${sw_inv_dict}= Get Non Functional Firmware ${sw_inv_list} True
270
271 # /redfish/v1/Managers/bmc
272 # "FirmwareVersion": "2.8.0-dev-150-g04508dc9f"
273
274 ${firmware_version}= Redfish.Get Attribute
275 ... ${REDFISH_BASE_URI}Managers/bmc FirmwareVersion
276
277 Should Be Equal ${sw_inv_dict['version']} ${firmware_version}
278
279
280Verify Firmware Version Is Not Same In Firmware Inventory And Managers
Sushil Singhd8af36d2021-08-10 02:14:34 -0500281 [Documentation] Verify the Redfish firmware inventory path version is not same as
Sushil Singh50a1be92021-06-15 06:52:36 -0500282 ... Redfish managers for backup image.
283
284 # User defined state for software objects.
285 # Note: "Functional" term refers to firmware which system is currently booted with.
286
287 # sw_inv_dict:
288 # [b9101858]:
289 # [image_type]: BMC update
290 # [image_id]: b9101858
291 # [functional]: True
292 # [version]: 2.8.0-dev-150-g04508dc9f
293
294 ${sw_inv_list}= Get Functional Firmware BMC image
295 ${sw_inv_list}= Get Non Functional Firmware List ${sw_inv_list} False
296
297 # /redfish/v1/Managers/bmc
298 # "FirmwareVersion": "2.8.0-dev-150-g04508dc9f"
299
300 ${firmware_version}= Redfish.Get Attribute
301 ... ${REDFISH_BASE_URI}Managers/bmc FirmwareVersion
302
303 FOR ${sw_inv} IN @{sw_inv_list}
304 Should Not Be Equal ${sw_inv['version']} ${firmware_version}
305 END
306
307
308Set Backup Firmware Image As Functional
309 [Documentation] Switch to the backup firmware image to make functional.
310
311 ${state}= Get Pre Reboot State
312 Rprint Vars state
313
314 Switch Backup Firmware Image To Functional
315 Wait For Reboot start_boot_seconds=${state['epoch_seconds']}
316
317
318Verify Redfish Functional Image Version Is Same
319 [Documentation] Verify the functional image version is same as in firmware inventory and managers.
320 [Arguments] ${image}
321
322 # Description of argument(s):
323 # image Fucntional Image or Backup Image
324
325 Verify Firmware Version Same In Firmware Inventory And Managers
326
327 Run Keyword If 'backup_image' == '${image}'
328 ... Verify Firmware Version Is Not Same In Firmware Inventory And Managers
329
330 Run Keyword If 'switch_backup_image' == '${image}'
331 ... Run Keywords Set Backup Firmware Image As Functional AND
332 ... Verify Firmware Version Same In Firmware Inventory And Managers AND
333 ... Set Backup Firmware Image As Functional AND
334 ... Verify Firmware Version Same In Firmware Inventory And Managers
335
Sushil Singhd8af36d2021-08-10 02:14:34 -0500336
337Verify Active Software Image And Firmware Inventory Is Same
338 [Documentation] Verify Redfish firmware inventory path and active software image is same.
339
340 # ActiveSoftwareImage
341 # /redfish/v1/UpdateService/FirmwareInventory/632c5114
342
343 # Firmware Inventory
344 # /redfish/v1/UpdateService/FirmwareInventory
345 # /redfish/v1/UpdateService/FirmwareInventory/632c5114
346 # /redfish/v1/UpdateService/FirmwareInventory/632c5444
347
348 ${firmware_inv_path}= Redfish.Get Properties ${REDFISH_BASE_URI}Managers/bmc
349 ${firmware_inv_path}= Get From Dictionary ${firmware_inv_path} Links
350 ${active_sw_image}= Get From Dictionary ${firmware_inv_path} ActiveSoftwareImage
351 ${active_sw_image}= Get From Dictionary ${active_sw_image} @odata.id
352
353 ${sw_member_list}= Redfish_Utils.Get Member List /redfish/v1/UpdateService/FirmwareInventory
354 List Should Contain Value ${sw_member_list} ${active_sw_image}