1*** Settings *** 2 3Documentation Test lock management feature of management console on BMC. 4 5Resource ../../lib/resource.robot 6Resource ../../lib/openbmc_ffdc.robot 7Resource ../../lib/bmc_redfish_utils.robot 8Resource ../../lib/external_intf/management_console_utils.robot 9Library ../../lib/bmc_network_utils.py 10 11Suite Setup Run Keyword And Ignore Error Delete All Redfish Sessions 12Suite Teardown Redfish.Logout 13Test Setup Printn 14Test Teardown FFDC On Test Case Fail 15 16*** Variables *** 17 18${BAD_REQUEST} Bad Request 19 20*** Test Cases *** 21 22Acquire Read Write Lock 23 [Documentation] Acquire and release different read locks. 24 [Tags] Acquire_Read_Write_Lock 25 [Template] Acquire Lock On Resource 26 27 # client_id lock_type reboot_flag 28 HMCID-01 ReadCase1 False 29 HMCID-01 ReadCase2 False 30 HMCID-01 ReadCase3 False 31 HMCID-01 WriteCase1 False 32 HMCID-01 WriteCase2 False 33 HMCID-01 WriteCase3 False 34 35 36Check Lock Persistency On BMC Reboot 37 [Documentation] Acquire lock and check after reboot it remain same. 38 [Tags] Check_Lock_Persistency_On_BMC_Reboot 39 [Template] Acquire Lock On Resource 40 41 # client_id lock_type reboot_flag 42 HMCID-01 ReadCase1 True 43 HMCID-01 ReadCase2 True 44 HMCID-01 ReadCase3 True 45 HMCID-01 WriteCase1 True 46 HMCID-01 WriteCase2 True 47 HMCID-01 WriteCase3 True 48 49 50Acquire Read Lock On Read Lock 51 [Documentation] Acquire read lock on another read lock. 52 [Tags] Acquire_Read_Lock_On_Read_Lock 53 [Template] Acquire Lock On Another Lock 54 55 # client_id 56 HMCID-01 57 58 59Get Lock Records Empty For Invalid Session 60 [Documentation] Record of lock list is empty for invalid session. 61 [Tags] Get_Lock_Records_Empty_For_Invalid_Session 62 [Template] Verify Empty Lock Records For Invalid Session 63 64 # client_id 65 HMCID-01 66 67 68Fail To Acquire Lock On Another Lock 69 [Documentation] Fail to acquire another lock. 70 [Tags] Fail_To_Acquire_Lock_On_Another_Lock 71 [Template] Verify Acquire Lock Fails On Another Lock 72 73 # client_id lock_type 74 HMCID-01 ReadCase2,WriteCase2 75 HMCID-01 WriteCase2,WriteCase2 76 HMCID-01 WriteCase2,ReadCase2 77 78 79Acquire Lock After Reboot 80 [Documentation] Acquire and release read and write locks after reboot. 81 [Tags] Acquire_Lock_After_Reboot 82 [Template] Verify Acquire Lock After Reboot 83 84 # client_id lock_type 85 HMCID-01 ReadCase1 86 HMCID-01 ReadCase2 87 HMCID-01 ReadCase3 88 HMCID-01 WriteCase1 89 HMCID-01 WriteCase2 90 HMCID-01 WriteCase3 91 92 93Acquire And Release Lock In Loop 94 [Documentation] Acquire and release read, write locks in loop. 95 [Tags] Acquire_And_Release_Lock_In_Loop 96 [Template] Verify Acquire And Release Lock In Loop 97 98 # client_id lock_type 99 HMCID-01 ReadCase1 100 HMCID-01 ReadCase2 101 HMCID-01 ReadCase3 102 HMCID-01 WriteCase1 103 HMCID-01 WriteCase2 104 HMCID-01 WriteCase3 105 106 107Verify Release Of Valid Locks 108 [Documentation] Release all valid locks. 109 [Tags] Verify_Release_Of_Valid_Locks 110 [Template] Acquire And Release Multiple Locks 111 112 # client_id lock_type release_lock_type 113 HMCID-01 ReadCase1,ReadCase1,ReadCase1 Transaction 114 HMCID-02 ReadCase1,ReadCase1,ReadCase1 Session 115 116 117Invalid Locks Fail To Release 118 [Documentation] Release in-valid lock result in fail. 119 [Tags] Invalid_Locks_Fail_To_Release 120 [Template] Verify Invalid Locks Fail To Release 121 122 # client_id lock_type release_lock_type 123 HMCID-01 ReadCase1,ReadCase1,ReadCase1 Transaction 124 12345 ReadCase2,ReadCase2,ReadCase2 Transaction 125 HMCID ReadCase3,ReadCase3,ReadCase3 Transaction 126 127 128Fail To Release Lock For Another Session 129 [Documentation] Failed to release locks from another session. 130 [Tags] Fail_To_Release_Lock_For_Another_Session 131 [Template] Verify Fail To Release Lock For Another Session 132 133 # client_id lock_type 134 HMCID-01,HMCID-02 ReadCase1,ReadCase1 135 136 137Test Invalid Resource ID Data Type Locking 138 [Documentation] Failed to acquire lock for invalid resource id data type. 139 [Tags] Test_Invalid_Resource_ID_Data_Type_Locking 140 [Template] Verify Fail To Acquire Lock For Invalid Resource ID Data Type 141 142 # client_id lock_type 143 HMCID-01 ReadCase1 144 HMCID-01 ReadCase2 145 HMCID-01 ReadCase3 146 HMCID-01 WriteCase1 147 HMCID-01 WriteCase2 148 HMCID-01 WriteCase3 149 150 151Fail To Acquire Lock For Invalid Lock Type 152 [Documentation] Failed to acquire read, write lock for invalid lock data passed. 153 [Tags] Fail_To_Acquire_Lock_For_Invalid_Lock_Type 154 [Template] Verify Fail To Acquire Lock For Invalid Lock Data 155 156 # client_id lock_type message 157 HMCID-01 ReadCase1 ${BAD_REQUEST} 158 HMCID-01 ReadCase2 ${BAD_REQUEST} 159 HMCID-01 ReadCase3 ${BAD_REQUEST} 160 HMCID-01 ReadCase4 ${BAD_REQUEST} 161 HMCID-01 ReadCase5 ${BAD_REQUEST} 162 HMCID-01 WriteCase1 ${BAD_REQUEST} 163 HMCID-01 WriteCase2 ${BAD_REQUEST} 164 HMCID-01 WriteCase3 ${BAD_REQUEST} 165 HMCID-01 WriteCase4 ${BAD_REQUEST} 166 HMCID-01 WriteCase5 ${BAD_REQUEST} 167 168 169Fail To Acquire Lock For Invalid Lock Flag 170 [Documentation] Failed to acquire read write lock for invalid lock flag passed. 171 [Tags] Fail_To_Acquire_Lock_For_Invalid_Lock_Flag 172 [Template] Verify Fail To Acquire Lock For Invalid Lock Data 173 174 # client_id lock_type message 175 HMCID-01 ReadCase6 ${BAD_REQUEST} 176 HMCID-01 ReadCase7 ${BAD_REQUEST} 177 HMCID-01 ReadCase8 ${BAD_REQUEST} 178 HMCID-01 ReadCase9 ${BAD_REQUEST} 179 HMCID-01 ReadCase10 ${BAD_REQUEST} 180 HMCID-01 ReadCase11 ${BAD_REQUEST} 181 HMCID-01 WriteCase6 ${BAD_REQUEST} 182 HMCID-01 WriteCase7 ${BAD_REQUEST} 183 HMCID-01 WriteCase8 ${BAD_REQUEST} 184 HMCID-01 WriteCase9 ${BAD_REQUEST} 185 HMCID-01 WriteCase10 ${BAD_REQUEST} 186 HMCID-01 WriteCase11 ${BAD_REQUEST} 187 188 189Fail To Acquire Lock For Invalid Segment Flag 190 [Documentation] Failed to acquire read write lock for invalid segment flag passed. 191 [Tags] Fail_To_Acquire_Lock_For_Invalid_Segment_Flag 192 [Template] Verify Fail To Acquire Lock For Invalid Lock Data 193 194 # client_id lock_type message 195 HMCID-01 ReadCase12 ${BAD_REQUEST} 196 HMCID-01 ReadCase13 ${BAD_REQUEST} 197 HMCID-01 ReadCase14 ${BAD_REQUEST} 198 HMCID-01 WriteCase12 ${BAD_REQUEST} 199 HMCID-01 WriteCase13 ${BAD_REQUEST} 200 HMCID-01 WriteCase14 ${BAD_REQUEST} 201 202 203Fail To Acquire Lock For Invalid Segment Data Type Flag 204 [Documentation] Failed to acquire read write lock for invalid segment flag passed. 205 [Tags] Fail_To_Acquire_Lock_For_Invalid_Segment_Data_Type_Flag 206 [Template] Verify Fail To Acquire Lock For Invalid Lock Data 207 208 # client_id lock_type message 209 HMCID-01 ReadCase15 ${EMPTY} 210 HMCID-01 ReadCase16 ${EMPTY} 211 HMCID-01 ReadCase17 ${EMPTY} 212 HMCID-01 ReadCase18 ${EMPTY} 213 HMCID-01 WriteCase15 ${EMPTY} 214 HMCID-01 WriteCase16 ${EMPTY} 215 HMCID-01 WriteCase17 ${EMPTY} 216 HMCID-01 WriteCase18 ${EMPTY} 217 218 219Get Empty Lock Records For Session Where No Locks Acquired 220 [Documentation] If session does not acquire locks then get lock should return 221 ... empty lock records. 222 [Tags] Get_Empty_Lock_Records_For_Session_Where_No_Locks_Acquired 223 [Template] Verify No Locks Records For Session With No Acquired Lock 224 225 # client_id 226 HMCID-01 227 228 229Get Lock Records For Multiple Session 230 [Documentation] Get lock records of multiple session. 231 [Tags] Get_Lock_Records_For_Multiple_Session 232 [Template] Verify Lock Records Of Multiple Session 233 234 # client_ids lock_type 235 HMCID-01,HMCID-02 ReadCase1,ReadCase1 236 237 238*** Keywords *** 239 240Create Redfish Session With ClientID 241 [Documentation] Create redifish session with client id. 242 [Arguments] ${client_id} 243 244 # Description of argument(s): 245 # client_id This client id can contain string value 246 # (e.g. 12345, "HMCID"). 247 248 ${session_info}= Create Dictionary 249 ${session}= Redfish Login kwargs= "Oem":{"OpenBMC" : {"ClientID":"${client_id}"}} 250 251 Set To Dictionary ${session_info} SessionIDs ${session['Id']} 252 Set To Dictionary ${session_info} ClientID ${session["Oem"]["OpenBMC"]["ClientID"]} 253 254 [Return] ${session_info} 255 256 257RW General Dictionary 258 [Documentation] Create dictionay of lock request. 259 [Arguments] ${read_case} ${res_id} 260 261 # Description of argument(s): 262 # read_case Read or Write lock type. 263 # res_id Resource id. 264 265 ${request_dict}= Create Dictionary 266 267 FOR ${key} IN @{read_case.keys()} 268 Set To Dictionary ${request_dict} LockType ${key} 269 Set To Dictionary ${request_dict} SegmentFlags ${read_case["${key}"]} 270 END 271 272 Set To Dictionary ${request_dict} ResourceID ${res_id} 273 274 [Return] ${request_dict} 275 276 277Return Description Of Response 278 [Documentation] Return description of REST response. 279 [Arguments] ${resp_text} 280 281 # Description of argument(s): 282 # resp_text REST response body. 283 284 # resp_text after successful partition file upload looks like: 285 # { 286 # "Description": "File Created" 287 # } 288 289 ${message}= Evaluate json.loads('''${resp_text}''') json 290 291 [Return] ${message} 292 293 294Verify Redfish Session Deleted 295 [Documentation] Verify the redfish session is deleted. 296 [Arguments] ${session_info} 297 298 # Description of argument(s): 299 # session_info Session information are stored in dictionary. 300 301 # ${session_info} = { 302 # 'SessionIDs': 'XXXXXXXXX', 303 # 'ClientID': 'XXXXXX', 304 # 'SessionToken': 'XXXXXXXXX', 305 # 'SessionResp': session response from redfish login 306 # } 307 308 # SessionIDs : Session IDs 309 # ClientID : Client ID 310 # SessionToken : Session token 311 # SessionResp : Response of creating an redfish login session 312 313 ${sessions}= Redfish.Get Properties /redfish/v1/SessionService/Sessions 314 315 FOR ${session} IN @{sessions['Members']} 316 Should Not Be Equal As Strings session ['/redfish/v1/SessionService/Sessions/${session_info["SessionIDs"]}'] 317 END 318 319 320Verify Redfish List Of Session Deleted 321 [Documentation] Verify all the list of redfish session is deleted. 322 [Arguments] ${session_info_list} 323 324 # Description of argument(s): 325 # session_info_list List contains individual session record are stored in dictionary. 326 327 # ${session_info_list} = [{ 328 # 'SessionIDs': 'XXXXXXXXX', 329 # 'ClientID': 'XXXXXX', 330 # 'SessionToken': 'XXXXXXXXX', 331 # 'SessionResp': session response from redfish login 332 # }] 333 334 # SessionIDs : Session IDs 335 # ClientID : Client ID 336 # SessionToken : Session token 337 # SessionResp : Response of creating an redfish login session 338 339 FOR ${session_record} IN @{session_info_list} 340 Verify Redfish Session Deleted ${session_record} 341 END 342 343 344Redfish Post Acquire Lock 345 [Documentation] Acquire and release lock. 346 [Arguments] ${lock_type} ${status_code}=${HTTP_OK} 347 348 # Description of argument(s): 349 # lock_type Read lock or Write lock. 350 # status_code HTTP status code. 351 352 ${lock_dict_param}= Form Data To Acquire Lock ${lock_type} 353 ${resp}= Redfish Post Request /ibm/v1/HMC/LockService/Actions/LockService.AcquireLock data=${lock_dict_param} 354 Should Be Equal As Strings ${resp.status_code} ${status_code} 355 ${resp}= Return Description Of Response ${resp.content} 356 357 [Return] ${resp} 358 359 360Redfish Post Acquire Invalid Lock 361 [Documentation] Redfish to post request to acquire in-valid lock. 362 [Arguments] ${lock_type} ${message} ${status_code}=${HTTP_OK} 363 364 # Description of argument(s): 365 # lock_type Read lock or Write lock. 366 # message Return message from URI. 367 # status_code HTTP status code. 368 369 ${lock_dict_param}= Form Data To Acquire Invalid Lock ${lock_type} 370 ${resp}= Redfish Post Request /ibm/v1/HMC/LockService/Actions/LockService.AcquireLock data=${lock_dict_param} 371 Should Be Equal As Strings ${resp.status_code} ${status_code} 372 Run Keyword If '${message}' != '${EMPTY}' 373 ... Valid Value message ['${resp.content}'] 374 375 [Return] ${resp} 376 377 378Redfish Post Acquire Invalid Lock With Invalid Data Type Of Resource ID 379 [Documentation] Redfish to post request to acquire in-valid lock with invalid data type of resource id. 380 [Arguments] ${lock_type} ${status_code}=${HTTP_OK} 381 382 # Description of argument(s): 383 # lock_type Read lock or Write lock. 384 # status_code HTTP status code. 385 386 ${lock_dict_param}= Form Data To Acquire Invalid Lock With Invalid Data Type Of Resource ID ${lock_type} 387 ${resp}= Redfish Post Request /ibm/v1/HMC/LockService/Actions/LockService.AcquireLock data=${lock_dict_param} 388 Should Be Equal As Strings ${resp.status_code} ${status_code} 389 390 [Return] ${resp} 391 392 393Form Data To Acquire Lock 394 [Documentation] Create a dictionay for lock request. 395 [Arguments] ${lock_type} 396 397 # Description of argument(s): 398 # lock_type Read lock or Write lock. 399 400 ${lock_res_info}= Get Lock Resource Information 401 ${resp}= RW General Dictionary 402 ... ${lock_res_info["Valid Case"]["${lock_type}"]} 403 ... ${lock_res_info["Valid Case"]["ResourceID"]} 404 ${temp_list}= Create List ${resp} 405 ${lock_request_dict}= Create Dictionary Request=${temp_list} 406 407 [Return] ${lock_request_dict} 408 409 410Form Data To Acquire Invalid Lock With Invalid Data Type Of Resource ID 411 [Documentation] Create a dictionay for in-valid lock request. 412 [Arguments] ${lock_type} 413 414 # Description of argument(s): 415 # lock_type Read lock or Write lock. 416 417 ${lock_res_info}= Get Lock Resource Information 418 ${resp}= RW General Dictionary 419 ... ${lock_res_info["Valid Case"]["${lock_type}"]} 420 ... ${lock_res_info["Invalid Case"]["ResourceIDInvalidDataType"]} 421 ${temp_list}= Create List ${resp} 422 ${lock_request_dict}= Create Dictionary Request=${temp_list} 423 424 [Return] ${lock_request_dict} 425 426 427Form Data To Acquire Invalid Lock 428 [Documentation] Create a dictionay for in-valid lock request. 429 [Arguments] ${lock_type} 430 431 # Description of argument(s): 432 # lock_type Read lock or Write lock. 433 434 ${lock_res_info}= Get Lock Resource Information 435 ${resp}= RW General Dictionary 436 ... ${lock_res_info["Invalid Case"]["${lock_type}"]} 437 ... ${lock_res_info["Valid Case"]["ResourceID"]} 438 ${temp_list}= Create List ${resp} 439 ${lock_request_dict}= Create Dictionary Request=${temp_list} 440 441 [Return] ${lock_request_dict} 442 443 444Get Locks List On Resource 445 [Documentation] Get locks list. 446 [Arguments] ${session_info} ${exp_status_code}=${HTTP_OK} 447 448 # Description of argument(s): 449 # session_info Session information in dict. 450 # exp_status_code Expected HTTP status code. 451 452 ${data}= Set Variable {"SessionIDs": ["${session_info['SessionIDs']}"]} 453 ${resp}= Redfish Post Request /ibm/v1/HMC/LockService/Actions/LockService.GetLockList 454 ... data=${data} 455 ${locks}= Evaluate json.loads('''${resp.text}''') json 456 457 [Return] ${locks["Records"]} 458 459 460Verify Lock On Resource 461 [Documentation] Verify lock on resource. 462 [Arguments] ${session_info} ${transaction_id} 463 464 # Description of argument(s): 465 # session_info Session information in dict. 466 # transaction_id Transaction id in list stored in dict. 467 468 ${sessions}= Redfish.Get Properties /redfish/v1/SessionService/Sessions/${session_info['SessionIDs']} 469 Rprint Vars sessions 470 ${lock_list}= Get Locks List On Resource ${session_info} 471 ${lock_length}= Get Length ${lock_list} 472 ${tran_id_length}= Get Length ${transaction_id} 473 Should Be Equal As Integers ${tran_id_length} ${lock_length} 474 475 FOR ${tran_id} ${lock} IN ZIP ${transaction_id} ${lock_list} 476 Valid Value session_info['ClientID'] ['${lock['HMCID']}'] 477 Valid Value session_info['SessionIDs'] ['${lock['SessionID']}'] 478 Should Be Equal As Integers ${tran_id['TransactionID']} ${lock['TransactionID']} 479 END 480 481 482Acquire Lock On Resource 483 [Documentation] Acquire lock on resource. 484 [Arguments] ${client_id} ${lock_type} ${reboot_flag}=False 485 486 # Description of argument(s): 487 # client_id This client id can contain string value 488 # (e.g. 12345, "HMCID"). 489 # lock_type Read lock or Write lock. 490 # reboot_flag Flag is used to run reboot the BMC code. 491 # (e.g. True or False). 492 493 ${trans_id_list}= Create List 494 ${session_info}= Create Redfish Session With ClientID ${client_id} 495 ${trans_id}= Redfish Post Acquire Lock ${lock_type} 496 Append To List ${trans_id_list} ${trans_id} 497 Verify Lock On Resource ${session_info} ${trans_id_list} 498 499 ${before_reboot_xauth_token}= Set Variable ${XAUTH_TOKEN} 500 501 Run Keyword If '${reboot_flag}' == 'True' 502 ... Run Keywords Redfish OBMC Reboot (off) AND 503 ... Redfish Login AND 504 ... Set Global Variable ${XAUTH_TOKEN} ${before_reboot_xauth_token} AND 505 ... Verify Lock On Resource ${session_info} ${trans_id_list} AND 506 ... Release Locks On Resource ${session_info} ${trans_id_list} Transaction ${HTTP_OK} 507 508 Run Keyword If '${reboot_flag}' == 'False' 509 ... Release Locks On Resource ${session_info} ${trans_id_list} Transaction ${HTTP_OK} 510 511 ${trans_id_emptylist}= Create List 512 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 513 Redfish Delete Session ${session_info} 514 515 516Form Data To Release Lock 517 [Documentation] Create a dictonay to release lock. 518 [Arguments] ${trans_id_list} 519 520 # Description of argument(s): 521 # trans_id_list 522 523 @{tran_ids}= Create List 524 525 FOR ${item} IN @{trans_id_list} 526 Append To List ${tran_ids} ${item['TransactionID']} 527 END 528 529 [Return] ${tran_ids} 530 531 532Release Locks On Resource 533 [Documentation] Redfish request to release a lock. 534 [Arguments] ${session_info} ${trans_id_list} ${release_lock_type}=Transaction ${status_code}=${HTTP_OK} 535 536 # Description of argument(s): 537 # session_info Session information in dict. 538 # trans_id_list Transaction id list. 539 # release_lock_type Release lock by Transaction, Session. 540 # status_code HTTP status code. 541 542 ${tran_ids}= Form Data To Release Lock ${trans_id_list} 543 ${data}= Set Variable {"Type": "${release_lock_type}", "TransactionIDs":${tran_ids}} 544 ${data}= Evaluate json.dumps(${data}) json 545 ${resp}= Redfish Post Request /ibm/v1/HMC/LockService/Actions/LockService.ReleaseLock data=${data} 546 Should Be Equal As Strings ${resp.status_code} ${status_code} 547 548 549Acquire Lock On Another Lock 550 [Documentation] Acquire lock on another lock. 551 [Arguments] ${client_id} 552 553 # Description of argument(s): 554 # client_id This client id can contain string value 555 # (e.g. 12345, "HMCID"). 556 557 ${trans_id_list}= Create List 558 ${session_info}= Create Redfish Session With ClientID ${client_id} 559 560 ${trans_id}= Redfish Post Acquire Lock ReadCase1 561 Append To List ${trans_id_list} ${trans_id} 562 563 ${trans_id}= Redfish Post Acquire Lock ReadCase1 564 Append To List ${trans_id_list} ${trans_id} 565 566 Verify Lock On Resource ${session_info} ${trans_id_list} 567 Release Locks On Resource ${session_info} ${trans_id_list} 568 569 ${trans_id_emptylist}= Create List 570 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 571 Redfish Delete Session ${session_info} 572 573 574Verify Empty Lock Records For Invalid Session 575 [Documentation] Verify no lock record found for invalid session. 576 [Arguments] ${client_id} 577 578 # Description of argument(s): 579 # client_id This client id can contain string value 580 # (e.g. 12345, "HMCID"). 581 582 ${session_info1}= Create Redfish Session With ClientID ${client_id} 583 584 ${lock_list1}= Get Locks List On Resource ${session_info1} 585 ${lock_length1}= Get Length ${lock_list1} 586 587 ${session_info2}= Copy Dictionary ${session_info1} deepcopy=True 588 set to dictionary ${session_info2} SessionIDs xxyXyyYZZz 589 590 ${lock_list2}= Get Locks List On Resource ${session_info2} 591 ${lock_length2}= Get Length ${lock_list1} 592 593 Valid Value lock_length1 ${lock_list2} 594 595 Redfish Delete Session ${session_info1} 596 597 598Verify Acquire Lock Fails On Another Lock 599 [Documentation] Verify acquire lock on another lock fails. 600 [Arguments] ${client_id} ${lock_type} 601 602 # Description of argument(s): 603 # client_id This client id can contain string value 604 # (e.g. 12345, "HMCID"). 605 # lock_type Read lock or Write lock. 606 607 @{lock_type_list}= Split String ${lock_type} , 608 ${session_info}= Create Redfish Session With ClientID ${client_id} 609 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[0] 610 611 ${trans_id_list}= Create List 612 Append To List ${trans_id_list} ${trans_id} 613 614 Verify Lock On Resource ${session_info} ${trans_id_list} 615 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[1] status_code=${HTTP_CONFLICT} 616 Release Locks On Resource ${session_info} ${trans_id_list} 617 618 ${trans_id_emptylist}= Create List 619 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 620 621 Redfish Delete Session ${session_info} 622 623 624Verify Acquire Lock After Reboot 625 [Documentation] Acquire read and write lock after the reboot and release lock. 626 [Arguments] ${client_id} ${lock_type} 627 628 # Description of argument(s): 629 # client_id This client id can contain string value 630 # (e.g. 12345, "HMCID"). 631 # lock_type Read lock or Write lock. 632 633 ${trans_id_list}= Create List 634 ${session_info}= Create Redfish Session With ClientID ${client_id} 635 ${before_reboot_xauth_token}= Set Variable ${XAUTH_TOKEN} 636 Redfish OBMC Reboot (off) 637 Redfish Login 638 Set Global Variable ${XAUTH_TOKEN} ${before_reboot_xauth_token} 639 640 ${trans_id}= Redfish Post Acquire Lock ${lock_type} 641 Append To List ${trans_id_list} ${trans_id} 642 Verify Lock On Resource ${session_info} ${trans_id_list} 643 Release Locks On Resource ${session_info} ${trans_id_list} Transaction ${HTTP_OK} 644 645 ${trans_id_emptylist}= Create List 646 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 647 Redfish Delete Session ${session_info} 648 649 650Verify Acquire And Release Lock In Loop 651 [Documentation] Acquire lock in loop. 652 [Arguments] ${client_id} ${lock_type} 653 654 # Description of argument(s): 655 # client_id This client id can contain string value 656 # (e.g. 12345, "HMCID"). 657 # lock_type Read lock or Write lock. 658 659 FOR ${count} IN RANGE 1 11 660 ${trans_id_list}= Create List 661 ${session_info}= Create Redfish Session With ClientID ${client_id} 662 ${trans_id}= Redfish Post Acquire Lock ${lock_type} 663 Append To List ${trans_id_list} ${trans_id} 664 Verify Lock On Resource ${session_info} ${trans_id_list} 665 Release Locks On Resource ${session_info} ${trans_id_list} Transaction ${HTTP_OK} 666 ${trans_id_emptylist}= Create List 667 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 668 END 669 670 Redfish Delete Session ${session_info} 671 672 673Acquire And Release Multiple Locks 674 [Documentation] Acquire mutilple locks on resource. 675 [Arguments] ${client_id} ${lock_type} ${release_lock_type} 676 677 # Description of argument(s): 678 # client_id This client id can contain string value 679 # (e.g. 12345, "HMCID"). 680 # lock_type Read lock or Write lock. 681 # release_lock_type The value can be Transaction or Session. 682 683 @{lock_type_list}= Split String ${lock_type} , 684 ${session_info}= Create Redfish Session With ClientID ${client_id} 685 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[0] 686 687 ${trans_id_list}= Create List 688 689 Append To List ${trans_id_list} ${trans_id} 690 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[1] 691 692 Append To List ${trans_id_list} ${trans_id} 693 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[2] 694 695 Append To List ${trans_id_list} ${trans_id} 696 Verify Lock On Resource ${session_info} ${trans_id_list} 697 Release Locks On Resource ${session_info} ${trans_id_list} release_lock_type=${release_lock_type} 698 699 ${trans_id_emptylist}= Create List 700 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 701 Redfish Delete Session ${session_info} 702 703 704Verify Invalid Locks Fail To Release 705 [Documentation] Verify invalid locks fails to be released. 706 [Arguments] ${client_id} ${lock_type} ${release_lock_type} 707 708 # Description of argument(s): 709 # client_id This client id can contain string value 710 # (e.g. 12345, "HMCID"). 711 # lock_type Read lock or Write lock. 712 # release_lock_type The value can be Transaction or Session. 713 714 ${trans_id_list}= Create List 715 @{lock_type_list}= Split String ${lock_type} , 716 717 ${session_info}= Create Redfish Session With ClientID ${client_id} 718 719 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[0] 720 ${value}= Get From Dictionary ${trans_id} TransactionID 721 ${value}= Evaluate ${value} + 10 722 Set To Dictionary ${trans_id} TransactionID ${value} 723 Append To List ${trans_id_list} ${trans_id} 724 725 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[1] 726 ${value}= Get From Dictionary ${trans_id} TransactionID 727 ${value}= Evaluate ${value} + 10 728 Set To Dictionary ${trans_id} TransactionID ${value} 729 Append To List ${trans_id_list} ${trans_id} 730 731 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[2] 732 ${value}= Get From Dictionary ${trans_id} TransactionID 733 ${value}= Evaluate ${value} + 10 734 Set To Dictionary ${trans_id} TransactionID ${value} 735 Append To List ${trans_id_list} ${trans_id} 736 737 Release Locks On Resource 738 ... ${session_info} ${trans_id_list} 739 ... release_lock_type=${release_lock_type} status_code=${HTTP_BAD_REQUEST} 740 Release Locks On Resource ${session_info} ${trans_id_list} release_lock_type=Session 741 742 ${trans_id_emptylist}= Create List 743 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 744 Redfish Delete Session ${session_info} 745 746 747Verify Fail To Release Lock For Another Session 748 [Documentation] Verify failed to release the lock form another session. 749 [Arguments] ${client_id} ${lock_type} 750 751 # Description of argument(s): 752 # client_id This client id can contain string value 753 # (e.g. 12345, "HMCID"). 754 # lock_type Read lock or Write lock. 755 756 ${client_ids}= Split String ${client_id} , 757 ${lock_type_list}= Split String ${lock_type} , 758 ${trans_id_list1}= Create List 759 ${trans_id_list2}= Create List 760 761 ${session_info1}= Create Redfish Session With ClientID ${client_ids}[0] 762 763 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[0] 764 Append To List ${trans_id_list1} ${trans_id} 765 Verify Lock On Resource ${session_info1} ${trans_id_list1} 766 767 ${session_info2}= Create Redfish Session With ClientID ${client_ids}[1] 768 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[1] 769 Append To List ${trans_id_list2} ${trans_id} 770 Verify Lock On Resource ${session_info2} ${trans_id_list2} 771 772 Release Locks On Resource 773 ... ${session_info1} ${trans_id_list1} Transaction status_code=${HTTP_UNAUTHORIZED} 774 Verify Lock On Resource ${session_info1} ${trans_id_list1} 775 Release Locks On Resource ${session_info1} ${trans_id_list1} release_lock_type=Session 776 Release Locks On Resource ${session_info2} ${trans_id_list2} release_lock_type=Session 777 Redfish Delete Session ${session_info1} 778 Redfish Delete Session ${session_info2} 779 780 781Verify Fail To Acquire Lock For Invalid Resource ID Data Type 782 [Documentation] Verify fail to acquire the lock with invalid resource id data type. 783 [Arguments] ${client_id} ${lock_type} 784 785 # Description of argument(s): 786 # client_id This client id can contain string value 787 # (e.g. 12345, "HMCID"). 788 # lock_type Read lock or Write lock. 789 790 ${session_info}= Create Redfish Session With ClientID ${client_id} 791 Redfish Post Acquire Invalid Lock With Invalid Data Type Of Resource ID 792 ... ${lock_type} status_code=${HTTP_BAD_REQUEST} 793 Redfish Delete Session ${session_info} 794 795 796Verify Fail To Acquire Lock For Invalid Lock Data 797 [Documentation] Verify fail to acquired lock with invalid lock types, lock flags, segement flags. 798 [Arguments] ${client_id} ${lock_type} ${message} 799 800 # Description of argument(s): 801 # client_id This client id can contain string value 802 # (e.g. 12345, "HMCID"). 803 # lock_type Read lock or Write lock. 804 # message Return message from URI. 805 806 ${session_info}= Create Redfish Session With ClientID ${client_id} 807 ${trans_id}= Redfish Post Acquire Invalid Lock ${lock_type} message=${message} status_code=${HTTP_BAD_REQUEST} 808 Redfish Delete Session ${session_info} 809 810 811Verify No Locks Records For Session With No Acquired Lock 812 [Documentation] Verify no records found for a session where no lock is acquired. 813 [Arguments] ${client_id} 814 815 # Description of argument(s): 816 # client_id This client id can contain string value 817 # (e.g. 12345, "HMCID"). 818 819 ${session_info}= Create Redfish Session With ClientID ${client_id} 820 ${trans_id_emptylist}= Create List 821 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 822 Redfish Delete Session ${session_info} 823 824 825Create List Of Session ID 826 [Documentation] Create session id list from session dict info. 827 [Arguments] ${session_dict_info} 828 829 # Description of argument(s): 830 # session_dict_info Session information in dict. 831 832 @{session_id_list}= Create List 833 834 FOR ${session} IN @{session_dict_info} 835 Append To List ${session_id_list} ${session["SessionIDs"]} 836 END 837 838 ${num_id}= Get Length ${session_id_list} 839 Should Not Be Equal As Integers ${num_id} ${0} 840 841 ${session_id_list}= Evaluate json.dumps(${session_id_list}) json 842 843 [Return] ${session_id_list} 844 845 846Get Locks List On Resource With Session List 847 [Documentation] Get locks list from session of list. 848 [Arguments] ${session_id_list} ${exp_status_code}=${HTTP_OK} 849 850 # Description of argument(s): 851 # session_id_list Session ids list. 852 # exp_status_code Expected HTTP status code. 853 854 ${resp}= Redfish Post Request /ibm/v1/HMC/LockService/Actions/LockService.GetLockList 855 ... data={"SessionIDs": ${session_id_list}} 856 ${locks}= Evaluate json.loads('''${resp.text}''') json 857 858 [Return] ${locks} 859 860 861Verify List Of Session Lock On Resource 862 [Documentation] Verify list of lock record from list of sessions. 863 [Arguments] ${session_dict_info} ${transaction_id_list} 864 865 # Description of argument(s): 866 # session_dict_info Session information in dict. 867 # transaction_id_list Transaction id in list stored in dict. 868 869 ${session_id_list}= Create List Of Session ID ${session_dict_info} 870 ${lock_list_resp}= Get Locks List On Resource With Session List ${session_id_list} 871 ${lock_list}= Set Variable ${lock_list_resp['Records']} 872 873 FOR ${session_id} ${tran_id} ${lock_record} IN ZIP ${session_dict_info} ${transaction_id_list} ${lock_list} 874 Valid Value session_id['SessionIDs'] ['${lock_record['SessionID']}'] 875 Should Be Equal As Integers ${tran_id['TransactionID']} ${lock_record['TransactionID']} 876 END 877 878 879Verify Lock Records Of Multiple Session 880 [Documentation] Verify all records found for a multiple sessions. 881 [Arguments] ${client_ids} ${lock_type} 882 883 # Description of argument(s): 884 # client_ids This client id can contain string value 885 # (e.g. 12345, "HMCID"). 886 # lock_type Read lock or Write lock. 887 888 ${client_id_list}= Split String ${client_ids} , 889 ${lock_type_list}= Split String ${lock_type} , 890 ${trans_id_list1}= Create List 891 ${trans_id_list2}= Create List 892 893 ${session_dict_list}= Create List 894 ${lock_list}= Create List 895 896 ${client_id1}= Create List 897 Append To List ${client_id1} ${client_id_list}[0] 898 ${session_info1}= Create Session With List Of ClientID ${client_id1} 899 Append To List ${session_dict_list} ${session_info1}[0] 900 Verify A Session Created With ClientID ${client_id1} ${session_info1} 901 902 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[0] 903 Append To List ${trans_id_list1} ${trans_id} 904 Append To List ${lock_list} ${trans_id} 905 Verify Lock On Resource ${session_info1}[0] ${trans_id_list1} 906 907 908 ${client_id2}= Create List 909 Append To List ${client_id2} ${client_id_list}[1] 910 ${session_info2}= Create Session With List Of ClientID ${client_id2} 911 Append To List ${session_dict_list} ${session_info2}[0] 912 Verify A Session Created With ClientID ${client_id2} ${session_info2} 913 914 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[1] 915 Append To List ${trans_id_list2} ${trans_id} 916 Append To List ${lock_list} ${trans_id} 917 Verify Lock On Resource ${session_info2}[0] ${trans_id_list2} 918 919 Verify List Of Session Lock On Resource ${session_dict_list} ${lock_list} 920 921 ${session_token}= Get From Dictionary ${session_info1}[0] SessionToken 922 Set Global Variable ${XAUTH_TOKEN} ${session_token} 923 924 Release Locks On Resource ${session_info1} ${trans_id_list1} release_lock_type=Transaction 925 926 ${session_token}= Get From Dictionary ${session_info2}[0] SessionToken 927 Set Global Variable ${XAUTH_TOKEN} ${session_token} 928 929 Release Locks On Resource ${session_info2} ${trans_id_list2} release_lock_type=Transaction 930 931 ${trans_id_emptylist}= Create List 932 Verify Lock On Resource ${session_info1}[0] ${trans_id_emptylist} 933 Verify Lock On Resource ${session_info2}[0] ${trans_id_emptylist} 934 935 Redfish Delete List Of Session ${session_dict_list} 936