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