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 203Get Empty Lock Records For Session Where No Locks Acquired 204 [Documentation] If session does not acquire locks then get lock should return 205 ... empty lock records. 206 [Tags] Get_Empty_Lock_Records_For_Session_Where_No_Locks_Acquired 207 [Template] Verify No Locks Records For Session With No Acquired Lock 208 209 # client_id 210 HMCID-01 211 212 213Get Lock Records For Multiple Session 214 [Documentation] Get lock records of multiple session. 215 [Tags] Get_Lock_Records_For_Multiple_Session 216 [Template] Verify Lock Records Of Multiple Session 217 218 # client_ids lock_type 219 HMCID-01,HMCID-02 ReadCase1,ReadCase1 220 221 222*** Keywords *** 223 224Create Redfish Session With ClientID 225 [Documentation] Create redifish session with client id. 226 [Arguments] ${client_id} 227 228 # Description of argument(s): 229 # client_id This client id can contain string value 230 # (e.g. 12345, "HMCID"). 231 232 ${session_info}= Create Dictionary 233 ${session}= Redfish Login kwargs= "Oem":{"OpenBMC" : {"ClientID":"${client_id}"}} 234 235 Set To Dictionary ${session_info} SessionIDs ${session['Id']} 236 Set To Dictionary ${session_info} ClientID ${session["Oem"]["OpenBMC"]["ClientID"]} 237 238 [Return] ${session_info} 239 240 241RW General Dictionary 242 [Documentation] Create dictionay of lock request. 243 [Arguments] ${read_case} ${res_id} 244 245 # Description of argument(s): 246 # read_case Read or Write lock type. 247 # res_id Resource id. 248 249 ${request_dict}= Create Dictionary 250 251 FOR ${key} IN @{read_case.keys()} 252 Set To Dictionary ${request_dict} LockType ${key} 253 Set To Dictionary ${request_dict} SegmentFlags ${read_case["${key}"]} 254 END 255 256 Set To Dictionary ${request_dict} ResourceID ${res_id} 257 258 [Return] ${request_dict} 259 260 261Return Description Of Response 262 [Documentation] Return description of REST response. 263 [Arguments] ${resp_text} 264 265 # Description of argument(s): 266 # resp_text REST response body. 267 268 # resp_text after successful partition file upload looks like: 269 # { 270 # "Description": "File Created" 271 # } 272 273 ${message}= Evaluate json.loads('''${resp_text}''') json 274 275 [Return] ${message} 276 277 278Verify Redfish Session Deleted 279 [Documentation] Verify the redfish session is deleted. 280 [Arguments] ${session_info} 281 282 # Description of argument(s): 283 # session_info Session information are stored in dictionary. 284 285 # ${session_info} = { 286 # 'SessionIDs': 'XXXXXXXXX', 287 # 'ClientID': 'XXXXXX', 288 # 'SessionToken': 'XXXXXXXXX', 289 # 'SessionResp': session response from redfish login 290 # } 291 292 # SessionIDs : Session IDs 293 # ClientID : Client ID 294 # SessionToken : Session token 295 # SessionResp : Response of creating an redfish login session 296 297 ${sessions}= Redfish.Get Properties /redfish/v1/SessionService/Sessions 298 299 FOR ${session} IN @{sessions['Members']} 300 Should Not Be Equal As Strings session ['/redfish/v1/SessionService/Sessions/${session_info["SessionIDs"]}'] 301 END 302 303 304Verify Redfish List Of Session Deleted 305 [Documentation] Verify all the list of redfish session is deleted. 306 [Arguments] ${session_info_list} 307 308 # Description of argument(s): 309 # session_info_list List contains individual session record are stored in dictionary. 310 311 # ${session_info_list} = [{ 312 # 'SessionIDs': 'XXXXXXXXX', 313 # 'ClientID': 'XXXXXX', 314 # 'SessionToken': 'XXXXXXXXX', 315 # 'SessionResp': session response from redfish login 316 # }] 317 318 # SessionIDs : Session IDs 319 # ClientID : Client ID 320 # SessionToken : Session token 321 # SessionResp : Response of creating an redfish login session 322 323 FOR ${session_record} IN @{session_info_list} 324 Verify Redfish Session Deleted ${session_record} 325 END 326 327 328Redfish Post Acquire Lock 329 [Documentation] Acquire and release lock. 330 [Arguments] ${lock_type} ${status_code}=${HTTP_OK} 331 332 # Description of argument(s): 333 # lock_type Read lock or Write lock. 334 # status_code HTTP status code. 335 336 ${lock_dict_param}= Form Data To Acquire Lock ${lock_type} 337 ${resp}= Redfish Post Request /ibm/v1/HMC/LockService/Actions/LockService.AcquireLock data=${lock_dict_param} 338 Should Be Equal As Strings ${resp.status_code} ${status_code} 339 ${resp}= Return Description Of Response ${resp.content} 340 341 [Return] ${resp} 342 343 344Redfish Post Acquire Invalid Lock 345 [Documentation] Redfish to post request to acquire in-valid lock. 346 [Arguments] ${lock_type} ${message} ${status_code}=${HTTP_OK} 347 348 # Description of argument(s): 349 # lock_type Read lock or Write lock. 350 # message Return message from URI. 351 # status_code HTTP status code. 352 353 ${lock_dict_param}= Form Data To Acquire Invalid Lock ${lock_type} 354 ${resp}= Redfish Post Request /ibm/v1/HMC/LockService/Actions/LockService.AcquireLock data=${lock_dict_param} 355 Should Be Equal As Strings ${resp.status_code} ${status_code} 356 Valid Value message ['${resp.content}'] 357 358 [Return] ${resp} 359 360 361Redfish Post Acquire Invalid Lock With Invalid Data Type Of Resource ID 362 [Documentation] Redfish to post request to acquire in-valid lock with invalid data type of resource id. 363 [Arguments] ${lock_type} ${status_code}=${HTTP_OK} 364 365 # Description of argument(s): 366 # lock_type Read lock or Write lock. 367 # status_code HTTP status code. 368 369 ${lock_dict_param}= Form Data To Acquire Invalid Lock With Invalid Data Type Of Resource ID ${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 373 [Return] ${resp} 374 375 376Form Data To Acquire Lock 377 [Documentation] Create a dictionay for lock request. 378 [Arguments] ${lock_type} 379 380 # Description of argument(s): 381 # lock_type Read lock or Write lock. 382 383 ${lock_res_info}= Get Lock Resource Information 384 ${resp}= RW General Dictionary 385 ... ${lock_res_info["Valid Case"]["${lock_type}"]} 386 ... ${lock_res_info["Valid Case"]["ResourceID"]} 387 ${temp_list}= Create List ${resp} 388 ${lock_request_dict}= Create Dictionary Request=${temp_list} 389 390 [Return] ${lock_request_dict} 391 392 393Form Data To Acquire Invalid Lock With Invalid Data Type Of Resource ID 394 [Documentation] Create a dictionay for in-valid 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["Invalid Case"]["ResourceIDInvalidDataType"]} 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 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["Invalid Case"]["${lock_type}"]} 420 ... ${lock_res_info["Valid Case"]["ResourceID"]} 421 ${temp_list}= Create List ${resp} 422 ${lock_request_dict}= Create Dictionary Request=${temp_list} 423 424 [Return] ${lock_request_dict} 425 426 427Get Locks List On Resource 428 [Documentation] Get locks list. 429 [Arguments] ${session_info} ${exp_status_code}=${HTTP_OK} 430 431 # Description of argument(s): 432 # session_info Session information in dict. 433 # exp_status_code Expected HTTP status code. 434 435 ${data}= Set Variable {"SessionIDs": ["${session_info['SessionIDs']}"]} 436 ${resp}= Redfish Post Request /ibm/v1/HMC/LockService/Actions/LockService.GetLockList 437 ... data=${data} 438 ${locks}= Evaluate json.loads('''${resp.text}''') json 439 440 [Return] ${locks["Records"]} 441 442 443Verify Lock On Resource 444 [Documentation] Verify lock on resource. 445 [Arguments] ${session_info} ${transaction_id} 446 447 # Description of argument(s): 448 # session_info Session information in dict. 449 # transaction_id Transaction id in list stored in dict. 450 451 ${sessions}= Redfish.Get Properties /redfish/v1/SessionService/Sessions/${session_info['SessionIDs']} 452 Rprint Vars sessions 453 ${lock_list}= Get Locks List On Resource ${session_info} 454 ${lock_length}= Get Length ${lock_list} 455 ${tran_id_length}= Get Length ${transaction_id} 456 Should Be Equal As Integers ${tran_id_length} ${lock_length} 457 458 FOR ${tran_id} ${lock} IN ZIP ${transaction_id} ${lock_list} 459 Valid Value session_info['ClientID'] ['${lock['HMCID']}'] 460 Valid Value session_info['SessionIDs'] ['${lock['SessionID']}'] 461 Should Be Equal As Integers ${tran_id['TransactionID']} ${lock['TransactionID']} 462 END 463 464 465Acquire Lock On Resource 466 [Documentation] Acquire lock on resource. 467 [Arguments] ${client_id} ${lock_type} ${reboot_flag}=False 468 469 # Description of argument(s): 470 # client_id This client id can contain string value 471 # (e.g. 12345, "HMCID"). 472 # lock_type Read lock or Write lock. 473 # reboot_flag Flag is used to run reboot the BMC code. 474 # (e.g. True or False). 475 476 ${trans_id_list}= Create List 477 ${session_info}= Create Redfish Session With ClientID ${client_id} 478 ${trans_id}= Redfish Post Acquire Lock ${lock_type} 479 Append To List ${trans_id_list} ${trans_id} 480 Verify Lock On Resource ${session_info} ${trans_id_list} 481 482 ${before_reboot_xauth_token}= Set Variable ${XAUTH_TOKEN} 483 484 Run Keyword If '${reboot_flag}' == 'True' 485 ... Run Keywords Redfish OBMC Reboot (off) AND 486 ... Redfish Login AND 487 ... Set Global Variable ${XAUTH_TOKEN} ${before_reboot_xauth_token} AND 488 ... Verify Lock On Resource ${session_info} ${trans_id_list} AND 489 ... Release Locks On Resource ${session_info} ${trans_id_list} Transaction ${HTTP_OK} 490 491 Run Keyword If '${reboot_flag}' == 'False' 492 ... Release Locks On Resource ${session_info} ${trans_id_list} Transaction ${HTTP_OK} 493 494 ${trans_id_emptylist}= Create List 495 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 496 Redfish Delete Session ${session_info} 497 498 499Form Data To Release Lock 500 [Documentation] Create a dictonay to release lock. 501 [Arguments] ${trans_id_list} 502 503 # Description of argument(s): 504 # trans_id_list 505 506 @{tran_ids}= Create List 507 508 FOR ${item} IN @{trans_id_list} 509 Append To List ${tran_ids} ${item['TransactionID']} 510 END 511 512 [Return] ${tran_ids} 513 514 515Release Locks On Resource 516 [Documentation] Redfish request to release a lock. 517 [Arguments] ${session_info} ${trans_id_list} ${release_lock_type}=Transaction ${status_code}=${HTTP_OK} 518 519 # Description of argument(s): 520 # session_info Session information in dict. 521 # trans_id_list Transaction id list. 522 # release_lock_type Release lock by Transaction, Session. 523 # status_code HTTP status code. 524 525 ${tran_ids}= Form Data To Release Lock ${trans_id_list} 526 ${data}= Set Variable {"Type": "${release_lock_type}", "TransactionIDs":${tran_ids}} 527 ${data}= Evaluate json.dumps(${data}) json 528 ${resp}= Redfish Post Request /ibm/v1/HMC/LockService/Actions/LockService.ReleaseLock data=${data} 529 Should Be Equal As Strings ${resp.status_code} ${status_code} 530 531 532Acquire Lock On Another Lock 533 [Documentation] Acquire lock on another lock. 534 [Arguments] ${client_id} 535 536 # Description of argument(s): 537 # client_id This client id can contain string value 538 # (e.g. 12345, "HMCID"). 539 540 ${trans_id_list}= Create List 541 ${session_info}= Create Redfish Session With ClientID ${client_id} 542 543 ${trans_id}= Redfish Post Acquire Lock ReadCase1 544 Append To List ${trans_id_list} ${trans_id} 545 546 ${trans_id}= Redfish Post Acquire Lock ReadCase1 547 Append To List ${trans_id_list} ${trans_id} 548 549 Verify Lock On Resource ${session_info} ${trans_id_list} 550 Release Locks On Resource ${session_info} ${trans_id_list} 551 552 ${trans_id_emptylist}= Create List 553 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 554 Redfish Delete Session ${session_info} 555 556 557Verify Empty Lock Records For Invalid Session 558 [Documentation] Verify no lock record found for invalid session. 559 [Arguments] ${client_id} 560 561 # Description of argument(s): 562 # client_id This client id can contain string value 563 # (e.g. 12345, "HMCID"). 564 565 ${session_info1}= Create Redfish Session With ClientID ${client_id} 566 567 ${lock_list1}= Get Locks List On Resource ${session_info1} 568 ${lock_length1}= Get Length ${lock_list1} 569 570 ${session_info2}= Copy Dictionary ${session_info1} deepcopy=True 571 set to dictionary ${session_info2} SessionIDs xxyXyyYZZz 572 573 ${lock_list2}= Get Locks List On Resource ${session_info2} 574 ${lock_length2}= Get Length ${lock_list1} 575 576 Valid Value lock_length1 ${lock_list2} 577 578 Redfish Delete Session ${session_info1} 579 580 581Verify Acquire Lock Fails On Another Lock 582 [Documentation] Verify acquire lock on another lock fails. 583 [Arguments] ${client_id} ${lock_type} 584 585 # Description of argument(s): 586 # client_id This client id can contain string value 587 # (e.g. 12345, "HMCID"). 588 # lock_type Read lock or Write lock. 589 590 @{lock_type_list}= Split String ${lock_type} , 591 ${session_info}= Create Redfish Session With ClientID ${client_id} 592 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[0] 593 594 ${trans_id_list}= Create List 595 Append To List ${trans_id_list} ${trans_id} 596 597 Verify Lock On Resource ${session_info} ${trans_id_list} 598 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[1] status_code=${HTTP_CONFLICT} 599 Release Locks On Resource ${session_info} ${trans_id_list} 600 601 ${trans_id_emptylist}= Create List 602 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 603 604 Redfish Delete Session ${session_info} 605 606 607Verify Acquire Lock After Reboot 608 [Documentation] Acquire read and write lock after the reboot and release lock. 609 [Arguments] ${client_id} ${lock_type} 610 611 # Description of argument(s): 612 # client_id This client id can contain string value 613 # (e.g. 12345, "HMCID"). 614 # lock_type Read lock or Write lock. 615 616 ${trans_id_list}= Create List 617 ${session_info}= Create Redfish Session With ClientID ${client_id} 618 ${before_reboot_xauth_token}= Set Variable ${XAUTH_TOKEN} 619 Redfish OBMC Reboot (off) 620 Redfish Login 621 Set Global Variable ${XAUTH_TOKEN} ${before_reboot_xauth_token} 622 623 ${trans_id}= Redfish Post Acquire Lock ${lock_type} 624 Append To List ${trans_id_list} ${trans_id} 625 Verify Lock On Resource ${session_info} ${trans_id_list} 626 Release Locks On Resource ${session_info} ${trans_id_list} Transaction ${HTTP_OK} 627 628 ${trans_id_emptylist}= Create List 629 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 630 Redfish Delete Session ${session_info} 631 632 633Verify Acquire And Release Lock In Loop 634 [Documentation] Acquire lock in loop. 635 [Arguments] ${client_id} ${lock_type} 636 637 # Description of argument(s): 638 # client_id This client id can contain string value 639 # (e.g. 12345, "HMCID"). 640 # lock_type Read lock or Write lock. 641 642 FOR ${count} IN RANGE 1 11 643 ${trans_id_list}= Create List 644 ${session_info}= Create Redfish Session With ClientID ${client_id} 645 ${trans_id}= Redfish Post Acquire Lock ${lock_type} 646 Append To List ${trans_id_list} ${trans_id} 647 Verify Lock On Resource ${session_info} ${trans_id_list} 648 Release Locks On Resource ${session_info} ${trans_id_list} Transaction ${HTTP_OK} 649 ${trans_id_emptylist}= Create List 650 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 651 END 652 653 Redfish Delete Session ${session_info} 654 655 656Acquire And Release Multiple Locks 657 [Documentation] Acquire mutilple locks on resource. 658 [Arguments] ${client_id} ${lock_type} ${release_lock_type} 659 660 # Description of argument(s): 661 # client_id This client id can contain string value 662 # (e.g. 12345, "HMCID"). 663 # lock_type Read lock or Write lock. 664 # release_lock_type The value can be Transaction or Session. 665 666 @{lock_type_list}= Split String ${lock_type} , 667 ${session_info}= Create Redfish Session With ClientID ${client_id} 668 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[0] 669 670 ${trans_id_list}= Create List 671 672 Append To List ${trans_id_list} ${trans_id} 673 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[1] 674 675 Append To List ${trans_id_list} ${trans_id} 676 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[2] 677 678 Append To List ${trans_id_list} ${trans_id} 679 Verify Lock On Resource ${session_info} ${trans_id_list} 680 Release Locks On Resource ${session_info} ${trans_id_list} release_lock_type=${release_lock_type} 681 682 ${trans_id_emptylist}= Create List 683 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 684 Redfish Delete Session ${session_info} 685 686 687Verify Invalid Locks Fail To Release 688 [Documentation] Verify invalid locks fails to be released. 689 [Arguments] ${client_id} ${lock_type} ${release_lock_type} 690 691 # Description of argument(s): 692 # client_id This client id can contain string value 693 # (e.g. 12345, "HMCID"). 694 # lock_type Read lock or Write lock. 695 # release_lock_type The value can be Transaction or Session. 696 697 ${trans_id_list}= Create List 698 @{lock_type_list}= Split String ${lock_type} , 699 700 ${session_info}= Create Redfish Session With ClientID ${client_id} 701 702 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[0] 703 ${value}= Get From Dictionary ${trans_id} TransactionID 704 ${value}= Evaluate ${value} + 10 705 Set To Dictionary ${trans_id} TransactionID ${value} 706 Append To List ${trans_id_list} ${trans_id} 707 708 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[1] 709 ${value}= Get From Dictionary ${trans_id} TransactionID 710 ${value}= Evaluate ${value} + 10 711 Set To Dictionary ${trans_id} TransactionID ${value} 712 Append To List ${trans_id_list} ${trans_id} 713 714 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[2] 715 ${value}= Get From Dictionary ${trans_id} TransactionID 716 ${value}= Evaluate ${value} + 10 717 Set To Dictionary ${trans_id} TransactionID ${value} 718 Append To List ${trans_id_list} ${trans_id} 719 720 Release Locks On Resource 721 ... ${session_info} ${trans_id_list} 722 ... release_lock_type=${release_lock_type} status_code=${HTTP_BAD_REQUEST} 723 Release Locks On Resource ${session_info} ${trans_id_list} release_lock_type=Session 724 725 ${trans_id_emptylist}= Create List 726 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 727 Redfish Delete Session ${session_info} 728 729 730Verify Fail To Release Lock For Another Session 731 [Documentation] Verify failed to release the lock form another session. 732 [Arguments] ${client_id} ${lock_type} 733 734 # Description of argument(s): 735 # client_id This client id can contain string value 736 # (e.g. 12345, "HMCID"). 737 # lock_type Read lock or Write lock. 738 739 ${client_ids}= Split String ${client_id} , 740 ${lock_type_list}= Split String ${lock_type} , 741 ${trans_id_list1}= Create List 742 ${trans_id_list2}= Create List 743 744 ${session_info1}= Create Redfish Session With ClientID ${client_ids}[0] 745 746 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[0] 747 Append To List ${trans_id_list1} ${trans_id} 748 Verify Lock On Resource ${session_info1} ${trans_id_list1} 749 750 ${session_info2}= Create Redfish Session With ClientID ${client_ids}[1] 751 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[1] 752 Append To List ${trans_id_list2} ${trans_id} 753 Verify Lock On Resource ${session_info2} ${trans_id_list2} 754 755 Release Locks On Resource 756 ... ${session_info1} ${trans_id_list1} Transaction status_code=${HTTP_UNAUTHORIZED} 757 Verify Lock On Resource ${session_info1} ${trans_id_list1} 758 Release Locks On Resource ${session_info1} ${trans_id_list1} release_lock_type=Session 759 Release Locks On Resource ${session_info2} ${trans_id_list2} release_lock_type=Session 760 Redfish Delete Session ${session_info1} 761 Redfish Delete Session ${session_info2} 762 763 764Verify Fail To Acquire Lock For Invalid Resource ID Data Type 765 [Documentation] Verify fail to acquire the lock with invalid resource id data type. 766 [Arguments] ${client_id} ${lock_type} 767 768 # Description of argument(s): 769 # client_id This client id can contain string value 770 # (e.g. 12345, "HMCID"). 771 # lock_type Read lock or Write lock. 772 773 ${session_info}= Create Redfish Session With ClientID ${client_id} 774 Redfish Post Acquire Invalid Lock With Invalid Data Type Of Resource ID 775 ... ${lock_type} status_code=${HTTP_BAD_REQUEST} 776 Redfish Delete Session ${session_info} 777 778 779Verify Fail To Acquire Lock For Invalid Lock Data 780 [Documentation] Verify fail to acquired lock with invalid lock types, lock flags, segement flags. 781 [Arguments] ${client_id} ${lock_type} ${message} 782 783 # Description of argument(s): 784 # client_id This client id can contain string value 785 # (e.g. 12345, "HMCID"). 786 # lock_type Read lock or Write lock. 787 # message Return message from URI. 788 789 ${session_info}= Create Redfish Session With ClientID ${client_id} 790 ${trans_id}= Redfish Post Acquire Invalid Lock ${lock_type} message=${message} status_code=${HTTP_BAD_REQUEST} 791 Redfish Delete Session ${session_info} 792 793 794Verify No Locks Records For Session With No Acquired Lock 795 [Documentation] Verify no records found for a session where no lock is acquired. 796 [Arguments] ${client_id} 797 798 # Description of argument(s): 799 # client_id This client id can contain string value 800 # (e.g. 12345, "HMCID"). 801 802 ${session_info}= Create Redfish Session With ClientID ${client_id} 803 ${trans_id_emptylist}= Create List 804 Verify Lock On Resource ${session_info} ${trans_id_emptylist} 805 Redfish Delete Session ${session_info} 806 807 808Create List Of Session ID 809 [Documentation] Create session id list from session dict info. 810 [Arguments] ${session_dict_info} 811 812 # Description of argument(s): 813 # session_dict_info Session information in dict. 814 815 @{session_id_list}= Create List 816 817 FOR ${session} IN @{session_dict_info} 818 Append To List ${session_id_list} ${session["SessionIDs"]} 819 END 820 821 ${num_id}= Get Length ${session_id_list} 822 Should Not Be Equal As Integers ${num_id} ${0} 823 824 ${session_id_list}= Evaluate json.dumps(${session_id_list}) json 825 826 [Return] ${session_id_list} 827 828 829Get Locks List On Resource With Session List 830 [Documentation] Get locks list from session of list. 831 [Arguments] ${session_id_list} ${exp_status_code}=${HTTP_OK} 832 833 # Description of argument(s): 834 # session_id_list Session ids list. 835 # exp_status_code Expected HTTP status code. 836 837 ${resp}= Redfish Post Request /ibm/v1/HMC/LockService/Actions/LockService.GetLockList 838 ... data={"SessionIDs": ${session_id_list}} 839 ${locks}= Evaluate json.loads('''${resp.text}''') json 840 841 [Return] ${locks} 842 843 844Verify List Of Session Lock On Resource 845 [Documentation] Verify list of lock record from list of sessions. 846 [Arguments] ${session_dict_info} ${transaction_id_list} 847 848 # Description of argument(s): 849 # session_dict_info Session information in dict. 850 # transaction_id_list Transaction id in list stored in dict. 851 852 ${session_id_list}= Create List Of Session ID ${session_dict_info} 853 ${lock_list_resp}= Get Locks List On Resource With Session List ${session_id_list} 854 ${lock_list}= Set Variable ${lock_list_resp['Records']} 855 856 FOR ${session_id} ${tran_id} ${lock_record} IN ZIP ${session_dict_info} ${transaction_id_list} ${lock_list} 857 Valid Value session_id['SessionIDs'] ['${lock_record['SessionID']}'] 858 Should Be Equal As Integers ${tran_id['TransactionID']} ${lock_record['TransactionID']} 859 END 860 861 862Verify Lock Records Of Multiple Session 863 [Documentation] Verify all records found for a multiple sessions. 864 [Arguments] ${client_ids} ${lock_type} 865 866 # Description of argument(s): 867 # client_ids This client id can contain string value 868 # (e.g. 12345, "HMCID"). 869 # lock_type Read lock or Write lock. 870 871 ${client_id_list}= Split String ${client_ids} , 872 ${lock_type_list}= Split String ${lock_type} , 873 ${trans_id_list1}= Create List 874 ${trans_id_list2}= Create List 875 876 ${session_dict_list}= Create List 877 ${lock_list}= Create List 878 879 ${client_id1}= Create List 880 Append To List ${client_id1} ${client_id_list}[0] 881 ${session_info1}= Create Session With List Of ClientID ${client_id1} 882 Append To List ${session_dict_list} ${session_info1}[0] 883 Verify A Session Created With ClientID ${client_id1} ${session_info1} 884 885 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[0] 886 Append To List ${trans_id_list1} ${trans_id} 887 Append To List ${lock_list} ${trans_id} 888 Verify Lock On Resource ${session_info1}[0] ${trans_id_list1} 889 890 891 ${client_id2}= Create List 892 Append To List ${client_id2} ${client_id_list}[1] 893 ${session_info2}= Create Session With List Of ClientID ${client_id2} 894 Append To List ${session_dict_list} ${session_info2}[0] 895 Verify A Session Created With ClientID ${client_id2} ${session_info2} 896 897 ${trans_id}= Redfish Post Acquire Lock ${lock_type_list}[1] 898 Append To List ${trans_id_list2} ${trans_id} 899 Append To List ${lock_list} ${trans_id} 900 Verify Lock On Resource ${session_info2}[0] ${trans_id_list2} 901 902 Verify List Of Session Lock On Resource ${session_dict_list} ${lock_list} 903 904 ${session_token}= Get From Dictionary ${session_info1}[0] SessionToken 905 Set Global Variable ${XAUTH_TOKEN} ${session_token} 906 907 Release Locks On Resource ${session_info1} ${trans_id_list1} release_lock_type=Transaction 908 909 ${session_token}= Get From Dictionary ${session_info2}[0] SessionToken 910 Set Global Variable ${XAUTH_TOKEN} ${session_token} 911 912 Release Locks On Resource ${session_info2} ${trans_id_list2} release_lock_type=Transaction 913 914 ${trans_id_emptylist}= Create List 915 Verify Lock On Resource ${session_info1}[0] ${trans_id_emptylist} 916 Verify Lock On Resource ${session_info2}[0] ${trans_id_emptylist} 917 918 Redfish Delete List Of Session ${session_dict_list} 919