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