1*** Settings *** 2Documentation Test IPMI Inband SDR commands. 3... Following IPMI command are verified, 4... 1. Get SDR, 5... 2. Get Device SDR Info, 6... 3. Reserve Device SDR Repository, 7... 4. Get Device SDR. 8 9Resource ../lib/ipmi_client.robot 10Resource ../lib/openbmc_ffdc.robot 11Resource ../lib/boot_utils.robot 12Library ../lib/ipmi_utils.py 13Variables ../data/ipmi_raw_cmd_table.py 14 15Suite setup Suite Setup Execution 16Suite Teardown Redfish.Logout 17Test Teardown FFDC On Test Case Fail 18 19Force Tags IPMI_Inband_SDR 20 21*** Test Cases *** 22 23Verify Get SDR For Maximum Record Via IPMI 24 [Documentation] Verify Get SDR for each and every record one by one via IPMI lanplus. 25 [Tags] Verify_Get_SDR_For_Maximum_Record_Via_IPMI 26 27 # Gets the Total Record Count from SDR Info and the last Record entry number. 28 ${record_count} ${last_record}= Get Record Count And Last Record From SDR 29 30 # Validate each and every record till the last record. 31 FOR ${record} IN RANGE 0 ${record_count} 32 # Convert number to hexadecimal record ID. 33 ${recordhex}= Convert To Hex ${record} length=4 lowercase=yes 34 ${first_digit} Set Variable ${recordhex}[0:2] 35 ${second_digit} Set Variable ${recordhex}[2:4] 36 37 # Get SDR command. 38 ${resp}= Run IPMI Standard Command 39 ... raw ${IPMI_RAW_CMD['Get SDR']['Get'][1]} 0x00 0x00 0x${second_digit} 0x${first_digit} 0x00 0xff 40 ${get_SDR}= Split String ${resp} 41 42 # If the record ID reaches the last data available, the next record ID will be ff ff. 43 # eg, If total record ID available is 115, record IDs : 0 - 114, 44 # Then when record ID reaches last record ID (i.e 114 (decimal) - 72h), 45 # Get SDR response bytes 0:2 will be - ff ff 72 00 .... 46 # If not then (say 25 - 19h ), 1a 00 19 00 .... 47 48 IF '${record}' != '${last_record}' 49 # current record ID in response data. 50 Should Be Equal ${get_SDR[2]} ${second_digit} 51 Should Be Equal ${get_SDR[3]} ${first_digit} 52 53 # Next record ID in response data. 54 ${record_next}= Evaluate ${record} + 1 55 ${record_next}= Convert To Hex ${record_next} length=4 lowercase=yes 56 ${record_next_msb} Set Variable ${record_next}[0:2] 57 ${record_next_lsb} Set Variable ${record_next}[2:4] 58 Should Be Equal ${get_SDR[0]} ${record_next_lsb} 59 Should Be Equal ${get_SDR[1]} ${record_next_msb} 60 ELSE 61 # Next record ID in response data. 62 Should Be Equal ${get_SDR[0]} ff 63 Should Be Equal ${get_SDR[1]} ff 64 65 # current record ID in response data. 66 Should Be Equal ${get_SDR[2]} ${second_digit} 67 Should Be Equal ${get_SDR[3]} ${first_digit} 68 END 69 70 # Response Data Count - total records (max - FFh - 255 in decimal). 71 ${response_data}= Set Variable ${get_SDR[2:]} 72 ${length}= Get Length ${response_data} 73 Should Be True 0<${length}<=255 74 END 75 76 77Verify Sensor And SDR Count In Get Device SDR Info Via Inband IPMI 78 [Documentation] Verify Sensor and SDR Count in Get Device SDR Info via inband IPMI. 79 [Tags] Verify_Sensor_And_SDR_Count_In_Get_Device_SDR_Info_Via_Inband_IPMI 80 81 # Get Sensor count and SDR elist all count from IPMI LAN interface. 82 ${sensor_count_lan1} ${SDR_count_lan1}= Get Count for Sensor And SDR Elist All 83 84 # Get Sensor Count From Get Device SDR Info command. 85 ${sensor_count1}= Get Sensor Count From SDR Info 86 # Compare Get Device SDR Sensor count with Sensor count from lanplus. 87 Should Be Equal As Integers ${sensor_count1} ${sensor_count_lan1} 88 89 # Get SDR Count From Get Device SDR Info command. 90 ${SDR_count1}= Get SDR Count From SDR Info 91 # Compare Get Device SDR Sdr count with SDR Elist All count from lanplus. 92 Should Be Equal As Integers ${SDR_count1} ${SDR_count_lan1} 93 94 # Reboot Host using Chassis Power Cycle. 95 IPMI Power Cycle 96 97 # Get Sensor count and SDR elist all count from IPMI lanplus interface. 98 ${sensor_count_lan2} ${SDR_count_lan2}= Get Count for Sensor And SDR Elist All 99 100 # Get Sensor Count From Get Device SDR Info command. 101 ${sensor_count2}= Get Sensor Count From SDR Info 102 # Compare Get Device SDR Sensor count with Sensor count from lanplus. 103 Should Be Equal As Integers ${sensor_count2} ${sensor_count_lan2} 104 105 # Get SDR Count From Get Device SDR Info command. 106 ${SDR_count2}= Get SDR Count From SDR Info 107 # Compare Get Device SDR Sdr count with SDR Elist All count from lanplus. 108 Should Be Equal As Integers ${SDR_count2} ${SDR_count_lan2} 109 110 111Verify Timestamp In Get Device SDR Info Via Inband IPMI 112 [Documentation] Verify timestamp In Get Device SDR Info via inband IPMI. 113 [Tags] Verify_Timestamp_In_Get_Device_SDR_Info_Via_Inband_IPMI 114 115 # Reboot Host using Chassis Power Cycle. 116 IPMI Power Cycle 117 118 # Get epoch Timestamp obtained from Get Device SDR Info command. 119 ${SDR_timestamp}= Get Device SDR Timestamp 120 121 # Get current date from BMC Native Date command and convert to epoch. 122 ${bmc_date}= Get Current Date from BMC 123 ${epoch_bmc}= Convert Date ${bmc_date} epoch exclude_millis=yes date_format=%m/%d/%Y %H:%M:%S 124 125 # Compare time difference between bmc time and Get Device SDR Info timestamp. 126 # The maximum time difference should be less then 6 minute - 360 seconds. 127 ${difference}= Evaluate int(${epoch_bmc}) - int(${SDR_timestamp}) 128 Should Be True ${difference}<=360 129 130 131Verify Get Device SDR Info For Invalid Data Request 132 [Documentation] Verify Get Device SDR Info via inband IPMI with extra bytes. 133 [Tags] Verify_Get_Device_SDR_Info_For_Invalid_Data_Request 134 135 # Sensor Count Via Device SDR Info with extra bytes. 136 ${resp}= Run Keyword and Expect Error *${IPMI_RAW_CMD['Device_SDR']['Get_Info'][3]}* 137 ... Run Inband IPMI Standard Command 138 ... raw ${IPMI_RAW_CMD['Device_SDR']['Get_Info'][0]} 0x00 139 # Proper error code should be returned. 140 Should Contain ${resp} ${IPMI_RAW_CMD['Device_SDR']['Get_Info'][2]} 141 142 # SDR Count Via Device SDR Info with extra bytes. 143 ${resp}= Run Keyword and Expect Error *${IPMI_RAW_CMD['Device_SDR']['Get_Info'][3]}* 144 ... Run Inband IPMI Standard Command 145 ... raw ${IPMI_RAW_CMD['Device_SDR']['Get_Info'][1]} 0x00 146 # Proper error code should be returned. 147 Should Contain ${resp} ${IPMI_RAW_CMD['Device_SDR']['Get_Info'][2]} 148 149 150Verify Device SDR Info Via IPMI Lanplus 151 [Documentation] Verify whether Get Device SDR Info command is accessible via lanplus. 152 [Tags] Verify_Device_SDR_Info_Via_IPMI_Lanplus 153 154 # Sensor Count Via Device SDR Info via lanplus. 155 ${resp}= Run Keyword and Expect Error *${IPMI_RAW_CMD['Device_SDR']['Get_Info'][5]}* 156 ... Run IPMI Standard Command 157 ... raw ${IPMI_RAW_CMD['Device_SDR']['Get_Info'][0]} 158 # Proper error code should be returned. 159 Should Contain ${resp} ${IPMI_RAW_CMD['Device_SDR']['Get_Info'][4]} 160 161 # SDR Count Via Device SDR Info via lanplus. 162 ${resp}= Run Keyword and Expect Error *${IPMI_RAW_CMD['Device_SDR']['Get_Info'][5]}* 163 ... Run IPMI Standard Command 164 ... raw ${IPMI_RAW_CMD['Device_SDR']['Get_Info'][1]} 165 # Proper error code should be returned. 166 Should Contain ${resp} ${IPMI_RAW_CMD['Device_SDR']['Get_Info'][4]} 167 168 169Verify Reserve Device SDR Repository Via Inband IPMI 170 [Documentation] Verify Reserve Device SDR Repository via inband IPMI. 171 [Tags] Verify_Reserve_Device_SDR_Repository_Via_Inband_IPMI 172 173 # Reserve Device SDR Repository via inband IPMI. 174 ${resp}= Get Reserve Device SDR Repository 175 ${reserve_id}= Split String ${resp} 176 177 # Identify the byte count. 178 ${length}= Get Length ${reserve_id} 179 Should Be Equal As Integers ${length} 2 180 181 182Verify Reserve Device SDR Repository For Invalid Data Request 183 [Documentation] Verify Reserve Device SDR Repository via inband IPMI with extra request bytes. 184 [Tags] Verify_Reserve_Device_SDR_Repository_For_Invalid_Data_Request 185 186 # Reserve Device SDR Repository with extra request bytes. 187 ${resp}= Run Keyword and Expect Error *${IPMI_RAW_CMD['Device_SDR']['Reserve_Repository'][2]}* 188 ... Run Inband IPMI Standard Command 189 ... raw ${IPMI_RAW_CMD['Device_SDR']['Reserve_Repository'][0]} 0x00 190 # Proper error code should be returned. 191 Should Contain ${resp} ${IPMI_RAW_CMD['Device_SDR']['Reserve_Repository'][1]} 192 193 194Verify Reserve Device SDR Repository Info Via IPMI Lanplus 195 [Documentation] Verify whether Reserve Device SDR Repository command is accessible via lanplus. 196 [Tags] Verify_Reserve_Device_SDR_Repository_Info_Via_IPMI_Lanplus 197 198 # Reserve Device SDR Repository via lanplus. 199 ${resp}= Run Keyword and Expect Error *${IPMI_RAW_CMD['Device_SDR']['Reserve_Repository'][4]}* 200 ... Run IPMI Standard Command 201 ... raw ${IPMI_RAW_CMD['Device_SDR']['Reserve_Repository'][0]} 202 # Proper error code should be returned. 203 Should Contain ${resp} ${IPMI_RAW_CMD['Device_SDR']['Reserve_Repository'][3]} 204 205 206Verify Reserve Device SDR Repository For Partial Record 207 [Documentation] Verify whether reservation ID of Reserve Device SDR Repository is accessible 208 ... to fetch partial record from Get Device SDR. 209 [Tags] Verify_Reserve_Device_SDR_Repository_For_Partial_Record 210 211 # Get Reservation ID. 212 ${resp}= Get Reserve Device SDR Repository 213 ${reserve_id}= Split String ${resp} 214 215 # Check whether the response for Get device SDR command is obtained with the given Reservation ID. 216 ${resp}= Run Inband IPMI Standard Command 217 ... raw ${IPMI_RAW_CMD['Device_SDR']['Get'][0]} 0x${reserve_id[0]} 0x${reserve_id[1]} 0x00 0x00 0x01 0x0f 218 ${resp}= Split String ${resp} 219 # Record data starts from ${resp[2]}. 220 ${resp}= Set Variable ${resp[2:]} 221 ${length}= Get Length ${resp} 222 Should Be Equal As Integers ${length} 15 223 224 225Verify Reserve Device SDR Repository For Partial Record After BMC Reboot 226 [Documentation] Verify whether Reservation ID of Reserve Device SDR Repository, 227 ... is accessible after bmc reboot to fetch partial record from Get Device SDR. 228 [Tags] Verify_Reserve_Device_SDR_Repository_For_Partial_Record_After_BMC_Reboot 229 230 # Generate Reservation ID. 231 ${resp}= Get Reserve Device SDR Repository 232 ${reserve_id}= Split String ${resp} 233 234 # Check whether the response for Get device SDR command is obtained with the given Reservation ID. 235 ${resp1}= Run Inband IPMI Standard Command 236 ... raw ${IPMI_RAW_CMD['Device_SDR']['Get'][0]} 0x${reserve_id[0]} 0x${reserve_id[1]} 0x00 0x00 0x01 0x0f 237 238 # Reboot bmc. 239 IPMI MC Reset Cold (run) 240 241 # Check whether the response for Get device SDR command is obtained with the given Reservation ID. 242 # Reserve IDs are volatile so once bmc is rebooted, new Reserve ID should be generated. 243 ${resp2}= Run Keyword and Expect Error *${IPMI_RAW_CMD['Device_SDR']['Reserve_Repository'][5]}* 244 ... Run Inband IPMI Standard Command 245 ... raw ${IPMI_RAW_CMD['Device_SDR']['Get'][0]} 0x${reserve_id[0]} 0x${reserve_id[1]} 0x00 0x00 0x01 0x0f 246 247 248Verify Reserve Device SDR Repository Invalid Reservation ID For Partial Record 249 [Documentation] Verify whether invalid reservation ID of Reserve Device SDR Repository, 250 ... is accessible to fetch partial record from Get Device SDR. 251 [Tags] Verify_Reserve_Device_SDR_Repository_Invalid_Reservation_ID_For_Partial_Record 252 253 # Generate Reservation ID 1. 254 ${resp}= Get Reserve Device SDR Repository 255 ${reserve_id}= Split String ${resp} 256 257 # Generate Reservation ID 2. 258 ${resp2}= Get Reserve Device SDR Repository 259 260 # Check whether response for Gner device SDR command is obtained with Reservation ID 1. 261 # Once Reservation ID is overwritten, old Reservation ID will be invalid. 262 ${resp1}= Run Keyword and Expect Error *${IPMI_RAW_CMD['Device_SDR']['Reserve_Repository'][5]}* 263 ... Run Inband IPMI Standard Command 264 ... raw ${IPMI_RAW_CMD['Device_SDR']['Get'][0]} 0x${reserve_id[0]} 0x${reserve_id[1]} 0x00 0x00 0x01 0x0f 265 266 267Verify Get Device SDR For Maximum Record Via IPMI 268 [Documentation] Verify Get Device SDR for each and every Record Via IPMI Inband. 269 [Tags] Verify_Get_Device_SDR_For_Maximum_Record_Via_IPMI 270 271 # Gets the Total Record Count from SDR Info and the last Record entry number. 272 ${record_count} ${last_record}= Get Record Count And Last Record From SDR 273 274 # Validate each and every record till the last record. 275 FOR ${record} IN RANGE 0 ${record_count} 276 # Convert number to hexadecimal record ID. 277 ${recordhex}= Convert To Hex ${record} length=4 lowercase=yes 278 ${first_digit} Set Variable ${recordhex}[0:2] 279 ${second_digit} Set Variable ${recordhex}[2:4] 280 281 # Get Device SDR command. 282 ${resp}= Run Inband IPMI Standard Command 283 ... raw ${IPMI_RAW_CMD['Device_SDR']['Get'][0]} 0x00 0x00 0x${second_digit} 0x${first_digit} 0x00 0xff 284 ${get_dev_SDR}= Split String ${resp} 285 286 # If the record ID reaches the last data available, the next record ID will be ff ff 287 # eg, If total record ID available is 115, record IDs : 0 - 114, 288 # Then when record ID reaches last record ID (i.e 114 (in decimal) - 72h), 289 # Get SDR response bytes 0:2 will be - ff ff 72 00 .... 290 # If not then (say 25 - 19h ), 1a 00 19 00 .... 291 292 IF '${record}' != '${last_record}' 293 # current record ID in response data. 294 Should Be Equal ${get_dev_SDR[2]} ${second_digit} 295 Should Be Equal ${get_dev_SDR[3]} ${first_digit} 296 297 # Next record ID in response data. 298 ${record_next}= Evaluate ${record} + 1 299 ${record_next}= Convert To Hex ${record_next} length=4 lowercase=yes 300 ${record_next_msb} Set Variable ${record_next}[0:2] 301 ${record_next_lsb} Set Variable ${record_next}[2:4] 302 Should Be Equal ${get_dev_SDR[0]} ${record_next_lsb} 303 Should Be Equal ${get_dev_SDR[1]} ${record_next_msb} 304 305 ELSE 306 # Next record ID in response data. 307 Should Be Equal ${get_dev_SDR[0]} ff 308 Should Be Equal ${get_dev_SDR[1]} ff 309 310 # current record ID in response data. 311 Should Be Equal ${get_dev_SDR[2]} ${second_digit} 312 Should Be Equal ${get_dev_SDR[3]} ${first_digit} 313 314 END 315 # Response data count - total record ID (max - FFh - 255 in decimal). 316 ${response_data}= Set Variable ${get_dev_SDR[2:]} 317 ${length}= Get Length ${response_data} 318 Should Be True 0<${length}<=255 319 END 320 321 322Verify Get Device SDR For Invalid Data Request Via IPMI 323 [Documentation] Verify Get Device SDR via IPMI lanplus with extra bytes. 324 [Tags] Verify_Get_Device_SDR_For_Invalid_Data_Request_Via_IPMI 325 326 # Get SDR command with extra bytes. 327 ${resp}= Run Keyword and Expect Error *${IPMI_RAW_CMD['Device_SDR']['Get'][3]}* 328 ... Run Inband IPMI Standard Command 329 ... raw ${IPMI_RAW_CMD['Device_SDR']['Get'][0]} 0x00 0x00 ${IPMI_RAW_CMD['Device_SDR']['Get'][1]} 0x00 330 # Proper error code should be returned. 331 Should Contain ${resp} ${IPMI_RAW_CMD['Device_SDR']['Get'][2]} 332 333 334*** Keywords *** 335 336Get IPMI Sensor Count 337 [Documentation] Get sensors count using "SDR elist all" command. 338 # Example of "SDR elist all" command output: 339 # BootProgress | 03h | ok | 34.2 | 340 # OperatingSystemS | 05h | ok | 35.1 | 341 # AttemptsLeft | 07h | ok | 34.1 | 342 # occ0 | 08h | ok | 210.1 | Device Disabled 343 # occ1 | 09h | ok | 210.2 | Device Disabled 344 # p0_core0_temp | 11h | ns | 3.1 | Disabled 345 # cpu0_core0 | 12h | ok | 208.1 | Presence detected 346 # p0_core1_temp | 14h | ns | 3.2 | Disabled 347 # cpu0_core1 | 15h | ok | 208.2 | Presence detected 348 # p0_core2_temp | 17h | ns | 3.3 | Disabled 349 # .. 350 # .. 351 # .. 352 # .. 353 # .. 354 # .. 355 # fan3 | 00h | ns | 29.4 | Logical FRU @35h 356 # bmc | 00h | ns | 6.1 | Logical FRU @3Ch 357 # ethernet | 00h | ns | 1.1 | Logical FRU @46h 358 359 ${output}= Run IPMI Standard Command sdr elist all 360 ${sensor_list}= Split String ${output} \n 361 ${sensor_count}= Get Length ${sensor_list} 362 [Return] ${sensor_count} 363 364 365Get Device SDR Info For Sensor Data 366 [Documentation] Get Device SDR Info via inband IPMI and return response data with Sensor count. 367 368 # Get Device SDR Info for Sensor data. 369 ${sensor_data}= Run Inband IPMI Standard Command 370 ... raw ${IPMI_RAW_CMD['Device_SDR']['Get_Info'][0]} 371 372 [Return] ${sensor_data} 373 374 375Get Device SDR Info For SDR Data 376 [Documentation] Get Device SDR Info via inband IPMI and return response data with SDR count. 377 378 # Get Device SDR Info for SDR data. 379 ${SDR_data}= Run Inband IPMI Standard Command 380 ... raw ${IPMI_RAW_CMD['Device_SDR']['Get_Info'][1]} 381 382 [Return] ${SDR_data} 383 384 385Get Sensor Count From SDR Info 386 [Documentation] Get Sensor Count from Get Device SDR Info data. 387 388 # Get Device SDR Info Via inband IPMI for Sensor count. 389 ${sensor_data}= Get Device SDR Info For Sensor Data 390 391 # Get Sensor count from Get Device SDR Info count - bytie 0. 392 ${sensor_data}= Split String ${sensor_data} 393 ${sensor_count}= Set Variable ${sensor_data[0]} 394 ${sensor_count}= Convert To Integer ${sensor_count} 16 395 396 [Return] ${sensor_count} 397 398 399Get SDR Count From SDR Info 400 [Documentation] Get SDR Count from Get Device SDR Info data. 401 402 # Get Device SDR Info Via inband IPMI for SDR count. 403 ${SDR_data}= Get Device SDR Info For SDR Data 404 405 # Get SDR count from Get Device SDR Info count - byte 0. 406 ${SDR_data}= Split String ${SDR_data} 407 ${SDR_count}= Set Variable ${SDR_data[0]} 408 ${SDR_count}= Convert To Integer ${SDR_count} 16 409 410 [Return] ${SDR_count} 411 412 413Get Device SDR Timestamp 414 [Documentation] Get Timestamp from Get Device SDR Info. 415 416 # Get Device SDR Info Via inband IPMI for Sendor count. 417 ${sensor_data}= Get Device SDR Info For Sensor Data 418 # Get Device SDR Info Via inband IPMI for SDR count. 419 ${SDR_data}= Get Device SDR Info For SDR Data 420 421 # Split into list. 422 ${sensor_data}= Split String ${sensor_data} 423 ${SDR_data}= Split String ${SDR_data} 424 425 # Timestamp for the Get SDR count will be from Response byte 2 to N. 426 # Compare the timestamps for Sensor data and SDR data. 427 Should Be Equal ${sensor_data[2:]} ${SDR_data[2:]} 428 429 # Convert Bytestamp to Epoch timestamp. 430 ${timestamp}= Set Variable ${SDR_data[2:]} 431 Reverse List ${timestamp} 432 ${timestamp}= Evaluate "".join(${timestamp}) 433 # Prefixes 0s for expected bytes. 434 ${timestamp}= Zfill Data ${timestamp} 8 435 ${timestamp}= Convert To Integer ${timestamp} 16 436 437 [Return] ${timestamp} 438 439 440Get Count for Sensor And SDR Elist All 441 [Documentation] Get Sensor and SDR elist all count via IPMI lanplus. 442 443 # Get Sensor list via IPMI lanplus. 444 ${sensor_count}= Run IPMI Standard Command sensor | wc -l 445 # Get SDR elist all via IPMI lanplus. 446 ${SDR_count}= Get IPMI Sensor Count 447 448 [Return] ${sensor_count} ${SDR_count} 449 450 451Get Reserve Device SDR Repository 452 [Documentation] Get Reserve Device SDR Repository via Inband IPMI. 453 454 # Reserve Device SDR Repository command via inband. 455 ${resp}= Run Inband IPMI Standard Command 456 ... raw ${IPMI_RAW_CMD['Device_SDR']['Reserve_Repository'][0]} 457 458 [Return] ${resp} 459 460 461Get IPMI SDR Status Info 462 [Documentation] Returns status for given IPMI SDR Info. 463 [Arguments] ${setting} 464 # Description of argument(s): 465 # setting SDR Info which needs to be read(e.g. "SDR Version"). 466 # SDR Version : 0x51 467 # Record Count : 58 468 # Free Space : 9312 bytes 469 # Most recent Addition : 03/10/2022 05:56:02 470 # Most recent Erase : 02/07/2106 06:28:15 471 # SDR overflow : yes 472 # SDR Repository Update Support : unspecified 473 # Delete SDR supported : no 474 # Partial Add SDR supported : no 475 # Reserve SDR repository supported : yes 476 # SDR Repository Alloc info supported : yes 477 478 # Get SDR Info IPMI command. 479 ${resp}= Run IPMI Standard Command sdr info 480 481 # Return lines for given IPMI SDR Info. 482 ${setting_line}= Get Lines Containing String ${resp} ${setting} 483 ... case-insensitive 484 ${setting_status}= Fetch From Right ${setting_line} :${SPACE} 485 486 [Return] ${setting_status} 487 488 489Get Record Count And Last Record From SDR 490 [Documentation] Returns total record count from IPMI SDR Info and last SDR record. 491 492 # Returns Record count from IPMI SDR Info. 493 ${record_count}= Get IPMI SDR Status Info Record Count 494 495 # Identifies Last record ID. 496 # If Record Count = 58 (3Ah), record IDs range from 0 to 57. 497 # Then Last record ID will be 57 (in decimal) - 39h. 498 ${last_record}= Evaluate ${record_count} - 1 499 500 [Return] ${record_count} ${last_record} 501 502 503Suite Setup Execution 504 [Documentation] Do suite setup tasks. 505 Redfish.Login 506 Should Not Be Empty ${OS_HOST} msg=Please provide required parameter OS_HOST 507 Should Not Be Empty ${OS_USERNAME} msg=Please provide required parameter OS_USERNAME 508 Should Not Be Empty ${OS_PASSWORD} msg=Please provide required parameter OS_PASSWORD 509