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
11Library                 JSONLibrary
12
13Suite Setup              Run Keyword And Ignore Error  Delete All Redfish Sessions
14Suite Teardown           Run Keyword And Ignore Error  Delete All Redfish Sessions
15Test Setup               Printn
16Test Teardown            FFDC On Test Case Fail
17
18Force Tags               Lock_Management
19
20*** Variables ***
21
22${CONFLICT_RQUEST}       Conflict
23${BAD_REQUEST}           Bad Request
24&{default_trans_id}      TransactionID=${1}
25
26*** Test Cases ***
27
28Acquire Read Write Lock
29    [Documentation]  Acquire and release different read locks.
30    [Tags]  Acquire_Read_Write_Lock
31    [Template]  Acquire Lock On Resource
32
33    # client_id    lock_type     reboot_flag
34    HMCID-01       ReadCase1     False
35    HMCID-01       ReadCase2     False
36    HMCID-01       ReadCase3     False
37    HMCID-01       WriteCase1    False
38    HMCID-01       WriteCase2    False
39    HMCID-01       WriteCase3    False
40
41
42Acquire Read Lock On Read Lock
43    [Documentation]  Acquire read lock on another read lock.
44    [Tags]  Acquire_Read_Lock_On_Read_Lock
45    [Template]  Acquire Lock On Another Lock
46
47    # client_id
48    HMCID-01
49
50
51Fail To Acquire Lock On Another Lock
52    [Documentation]  Fail to acquire another lock.
53    [Tags]  Fail_To_Acquire_Lock_On_Another_Lock
54    [Template]  Verify Acquire Lock Fails On Another Lock
55
56    # client_id    lock_type
57    HMCID-01       ReadCase7,WriteCase6
58    HMCID-01       WriteCase6,WriteCase6
59    HMCID-01       WriteCase6,ReadCase7
60
61
62Acquire Lock After Reboot
63    [Documentation]  Acquire and release read and write locks after reboot.
64    [Tags]  Acquire_Lock_After_Reboot
65    [Template]  Verify Acquire Lock After Reboot
66
67    # client_id    lock_type
68    HMCID-01       ReadCase1
69    HMCID-01       ReadCase2
70    HMCID-01       ReadCase3
71    HMCID-01       WriteCase1
72    HMCID-01       WriteCase2
73    HMCID-01       WriteCase3
74
75
76Acquire And Release Lock In Loop
77    [Documentation]  Acquire and release read, write locks in loop.
78    [Tags]  Acquire_And_Release_Lock_In_Loop
79    [Template]  Verify Acquire And Release Lock In Loop
80
81    # client_id    lock_type
82    HMCID-01       ReadCase1
83    HMCID-01       ReadCase2
84    HMCID-01       ReadCase3
85    HMCID-01       WriteCase1
86    HMCID-01       WriteCase2
87    HMCID-01       WriteCase3
88
89
90Fail To Acquire Read And Write In Single Request
91    [Documentation]  Fail to acquire read and write lock in single request.
92    [Tags]  Fail_To_Acquire_Read_And_Write_In_Single_Request
93    [Template]  Verify Fail To Acquire Read And Write In Single Request
94
95    # client_id    lock_type               status_code
96    HMCID-01       ReadCase1,WriteCase1    ${HTTP_CONFLICT}
97    HMCID-01       WriteCase1,ReadCase1    ${HTTP_CONFLICT}
98    HMCID-01       WriteCase1,WriteCase1   ${HTTP_CONFLICT}
99
100
101Acquire Read In Single Request
102    [Documentation]  Acquire read in single request.
103    [Tags]  Acquire_Read_In_Single_Request
104    [Template]  Verify Acquire Read In Single Request
105
106    # client_id    lock_type
107    HMCID-01       ReadCase1,ReadCase1
108
109
110Acquire Multiple Lock Request At CEC Level
111    [Documentation]  Acquire write lock on read lock under CEC level.
112    [Tags]  Acquire_Multiple_Lock_Request_At_CEC_Level
113    [Template]  Verify Acquire Multiple Lock Request At CEC Level
114
115    # client_id    lock_type
116    HMCID-01       ReadCase4,WriteCase4
117    HMCID-01       WriteCase5,ReadCase5
118    HMCID-01       ReadCase6,WriteCase6
119    HMCID-01       WriteCase7,ReadCase7
120
121
122Verify Release Of Valid Locks
123    [Documentation]  Release all valid locks.
124    [Tags]  Verify_Release_Of_Valid_Locks
125    [Template]  Acquire And Release Multiple Locks
126
127    # client_id    lock_type                        release_lock_type
128    HMCID-01       ReadCase1,ReadCase1,ReadCase1    Transaction
129    HMCID-02       ReadCase1,ReadCase1,ReadCase1    Session
130
131
132Release Lock When Session Deleted
133    [Documentation]  Release lock when session gets deleted.
134    [Tags]  Release_Lock_When_Session_Deleted
135    [Template]  Verify Release Lock When Session Deleted
136
137    # client_id    lock_type
138    HMCID-01       ReadCase1
139    HMCID-01       WriteCase1
140
141
142Fail To Release Lock With Invalid TransactionID
143    [Documentation]  Fail to release lock with invalid transaction id.
144    [Tags]  Fail_To_Release_Lock_With_Invalid_TransactionID
145    [Template]  Verify Fail To Release Lock With Invalid TransactionID
146
147    # client_id    lock_type     release_lock_type
148    HMCID-01       ReadCase1     Transaction
149    HMCID-01       WriteCase1    Transaction
150
151
152Fail To Release Multiple Lock With Invalid TransactionID
153    [Documentation]  Release in-valid lock result in fail.
154    [Tags]  Fail_To_Release_Multiple_Lock_With_Invalid_TransactionID
155    [Template]  Verify Fail To Release Multiple Lock With Invalid TransactionID
156
157    # client_id    lock_type                        release_lock_type
158    HMCID-01       ReadCase1,ReadCase1,ReadCase1    Transaction
159    12345          ReadCase2,ReadCase2,ReadCase2    Transaction
160    HMCID          ReadCase3,ReadCase3,ReadCase3    Transaction
161
162
163Fail To Release Multiple Lock With Valid And Invalid TransactionID
164    [Documentation]  Release multiple lock with valid and invalid transaction.
165    [Tags]  Fail_To_Release_Multiple_Lock_With_Valid_And_Invalid_TransactionID
166    [Template]  Verify Fail To Release Multiple Lock With Valid And Invalid TransactionID
167
168    # client_id    lock_type              release_lock_type
169    HMCID-01       ReadCase1,ReadCase1    Transaction
170
171
172Fail To Release Lock With String As TransactionID Data Type
173    [Documentation]  Fail to release lock with string as transaction id data type.
174    [Tags]  Fail_To_Release_Lock_With_String_As_TransactionID_Data_Type
175    [Template]  Verify Fail To Release Lock With TransactionID As String Type
176
177    # client_id    lock_type     release_lock_type
178    HMCID-01       ReadCase1     Transaction
179    HMCID-01       WriteCase1    Transaction
180
181
182Fail To Release Lock For Another Session
183    [Documentation]  Failed to release locks from another session.
184    [Tags]  Fail_To_Release_Lock_For_Another_Session
185    [Template]  Verify Fail To Release Lock For Another Session
186
187    # client_id          lock_type
188    HMCID-01,HMCID-02    ReadCase1,ReadCase1
189
190
191Verify Lock Is Not Persistent On BMC Reboot
192    [Documentation]  Acquire lock and after reboot the locks are removed as no persistency
193    ...  maintained.
194    [Tags]  Verify_Lock_Is_Not_Persistent_On_BMC_Reboot
195    [Template]  Acquire Lock On Resource
196
197    # client_id    lock_type     reboot_flag
198    HMCID-01       ReadCase1     True
199    HMCID-01       ReadCase2     True
200    HMCID-01       ReadCase3     True
201    HMCID-01       WriteCase1    True
202    HMCID-01       WriteCase2    True
203    HMCID-01       WriteCase3    True
204
205
206Test Invalid Resource ID Data Type Locking
207    [Documentation]  Failed to acquire lock for invalid resource id data type.
208    [Tags]  Test_Invalid_Resource_ID_Data_Type_Locking
209    [Template]  Verify Fail To Acquire Lock For Invalid Resource ID Data Type
210
211    # client_id    lock_type
212    HMCID-01       ReadCase1
213    HMCID-01       ReadCase2
214    HMCID-01       ReadCase3
215    HMCID-01       WriteCase1
216    HMCID-01       WriteCase2
217    HMCID-01       WriteCase3
218
219
220Fail To Acquire Lock For Invalid Lock Type
221    [Documentation]  Failed to acquire read, write lock for invalid lock data passed.
222    [Tags]  Fail_To_Acquire_Lock_For_Invalid_Lock_Type
223    [Template]  Verify Fail To Acquire Lock For Invalid Lock Data
224
225    # client_id    lock_type      message
226    HMCID-01       ReadCase1      ${BAD_REQUEST}
227    HMCID-01       ReadCase2      ${BAD_REQUEST}
228    HMCID-01       ReadCase3      ${BAD_REQUEST}
229    HMCID-01       ReadCase4      ${BAD_REQUEST}
230    HMCID-01       ReadCase5      ${BAD_REQUEST}
231    HMCID-01       WriteCase1     ${BAD_REQUEST}
232    HMCID-01       WriteCase2     ${BAD_REQUEST}
233    HMCID-01       WriteCase3     ${BAD_REQUEST}
234    HMCID-01       WriteCase4     ${BAD_REQUEST}
235    HMCID-01       WriteCase5     ${BAD_REQUEST}
236
237
238Fail To Acquire Lock For Invalid Lock Flag
239    [Documentation]  Failed to acquire read write lock for invalid lock flag passed.
240    [Tags]  Fail_To_Acquire_Lock_For_Invalid_Lock_Flag
241    [Template]  Verify Fail To Acquire Lock For Invalid Lock Data
242
243    # client_id    lock_type       message
244    HMCID-01       ReadCase6       ${BAD_REQUEST}
245    HMCID-01       ReadCase7       ${BAD_REQUEST}
246    HMCID-01       ReadCase8       ${BAD_REQUEST}
247    HMCID-01       ReadCase9       ${BAD_REQUEST}
248    HMCID-01       ReadCase10      ${BAD_REQUEST}
249    HMCID-01       ReadCase11      ${BAD_REQUEST}
250    HMCID-01       WriteCase6      ${BAD_REQUEST}
251    HMCID-01       WriteCase7      ${BAD_REQUEST}
252    HMCID-01       WriteCase8      ${BAD_REQUEST}
253    HMCID-01       WriteCase9      ${BAD_REQUEST}
254    HMCID-01       WriteCase10     ${BAD_REQUEST}
255    HMCID-01       WriteCase11     ${BAD_REQUEST}
256
257
258Check After Reboot Transaction ID Set To Default
259    [Documentation]  After reboot, the transaction id starts with default i.e. 1,
260    ...  if any lock is acquired.
261    [Tags]  Check_After_Reboot_Transaction_ID_Set_To_Default
262    [Template]  Verify Acquire And Release Lock In Loop
263
264    # client_id    lock_type     reboot_flag
265    HMCID-01       ReadCase1     True
266    HMCID-01       WriteCase1    True
267
268
269Fail To Acquire Lock For Invalid Segment Flag
270    [Documentation]  Failed to acquire read write lock for invalid segment flag passed.
271    [Tags]  Fail_To_Acquire_Lock_For_Invalid_Segment_Flag
272    [Template]  Verify Fail To Acquire Lock For Invalid Lock Data
273
274    # client_id    lock_type       message
275    HMCID-01       ReadCase12      ${BAD_REQUEST}
276    HMCID-01       ReadCase13      ${BAD_REQUEST}
277    HMCID-01       ReadCase14      ${BAD_REQUEST}
278    HMCID-01       WriteCase12     ${BAD_REQUEST}
279    HMCID-01       WriteCase13     ${BAD_REQUEST}
280    HMCID-01       WriteCase14     ${BAD_REQUEST}
281
282
283Fail To Acquire Lock For Invalid Segment Data Type Flag
284    [Documentation]  Failed to acquire read write lock for invalid segment flag passed.
285    [Tags]  Fail_To_Acquire_Lock_For_Invalid_Segment_Data_Type_Flag
286    [Template]  Verify Fail To Acquire Lock For Invalid Lock Data
287
288    # client_id    lock_type       message
289    HMCID-01       ReadCase15      ${EMPTY}
290    HMCID-01       ReadCase16      ${EMPTY}
291    HMCID-01       ReadCase17      ${EMPTY}
292    HMCID-01       ReadCase18      ${EMPTY}
293    HMCID-01       WriteCase15     ${EMPTY}
294    HMCID-01       WriteCase16     ${EMPTY}
295    HMCID-01       WriteCase17     ${EMPTY}
296    HMCID-01       WriteCase18     ${EMPTY}
297
298
299Get Empty Lock Records For Session Where No Locks Acquired
300    [Documentation]  If session does not acquire locks then get lock should return
301    ...              empty lock records.
302    [Tags]  Get_Empty_Lock_Records_For_Session_Where_No_Locks_Acquired
303    [Template]  Verify No Locks Records For Session With No Acquired Lock
304
305    # client_id
306    HMCID-01
307
308
309Get Lock Records Empty For Invalid Session
310    [Documentation]  Record of lock list is empty for invalid session.
311    [Tags]  Get_Lock_Records_Empty_For_Invalid_Session
312    [Template]  Verify Empty Lock Records For Invalid Session
313
314    # client_id
315    HMCID-01
316
317
318Get Lock Records For Multiple Session
319    [Documentation]  Get lock records of multiple session.
320    [Tags]  Get_Lock_Records_For_Multiple_Session
321    [Template]  Verify Lock Records Of Multiple Session
322
323    # client_ids         lock_type
324    HMCID-01,HMCID-02    ReadCase1,ReadCase1
325
326
327Get Lock Records For Multiple Invalid Session
328    [Documentation]  Record of lock list is empty for list of invalid session.
329    [Tags]  Get_Lock_Records_For_Multiple_Invalid_Session
330    [Template]  Verify Lock Records For Multiple Invalid Session
331
332    # client_id
333    HMCID-01
334
335
336Get Lock Records For Multiple Invalid And Valid Session
337    [Documentation]  Get record of lock from invalid and valid session.
338    [Tags]  Get_Lock_Records_For_Multiple_Invalid_And_Valid_Session
339    [Template]  Verify Lock Records For Multiple Invalid And Valid Session
340
341    # client_id          lock_type
342    HMCID-01,HMCID-02    ReadCase1
343
344*** Keywords ***
345
346Create Redfish Session With ClientID
347    [Documentation]  Create redifish session with client id.
348    [Arguments]  ${client_id}
349
350    # Description of argument(s):
351    # client_id    This client id can contain string value
352    #              (e.g. 12345, "HMCID").
353
354    ${session_info}=  Create Dictionary
355
356    ${session}=  Redfish Login  kwargs="Context": "${client_id}"
357
358    Set To Dictionary  ${session_info}  SessionIDs  ${session['Id']}
359    Set To Dictionary  ${session_info}  ClientID  ${session["Context"]}
360
361    [Return]  ${session_info}
362
363
364RW General Dictionary
365    [Documentation]  Create dictionary of lock request.
366    [Arguments]  ${read_case}  ${res_id}
367
368    # Description of argument(s):
369    # read_case    Read or Write lock type.
370    # res_id       Resource id.
371
372    ${request_dict}=  Create Dictionary
373
374    FOR  ${key}  IN  @{read_case.keys()}
375      Set To Dictionary  ${request_dict}  LockType  ${key}
376      Set To Dictionary  ${request_dict}  SegmentFlags  ${read_case["${key}"]}
377    END
378
379    Set To Dictionary  ${request_dict}  ResourceID  ${res_id}
380
381    [Return]  ${request_dict}
382
383
384Return Description Of Response
385    [Documentation]  Return description of REST response.
386    [Arguments]  ${resp_text}
387
388    # Description of argument(s):
389    # resp_text    REST response body.
390
391    # resp_text after successful partition file upload looks like:
392    # {
393    #    "Description": "File Created"
394    # }
395
396    ${message}=  Evaluate  json.loads('''${resp_text}''')  json
397
398    [Return]  ${message}
399
400
401Verify Redfish Session Deleted
402    [Documentation]  Verify the redfish session is deleted.
403    [Arguments]  ${session_info}
404
405    # Description of argument(s):
406    # session_info    Session information are stored in dictionary.
407
408    # ${session_info} = {
409    #     'SessionIDs': 'XXXXXXXXX',
410    #     'ClientID': 'XXXXXX',
411    #     'SessionToken': 'XXXXXXXXX',
412    #     'SessionResp': session response from redfish login
413    # }
414
415    # SessionIDs   : Session IDs
416    # ClientID     : Client ID
417    # SessionToken : Session token
418    # SessionResp  : Response of creating an redfish login session
419
420    ${sessions}=  Redfish.Get Properties  /redfish/v1/SessionService/Sessions
421
422    FOR  ${session}  IN  @{sessions['Members']}
423      Should Not Be Equal As Strings
424      ...  session  ['/redfish/v1/SessionService/Sessions/${session_info["SessionIDs"]}']
425    END
426
427
428Verify Redfish List Of Session Deleted
429    [Documentation]  Verify all the list of redfish session is deleted.
430    [Arguments]  ${session_info_list}
431
432    # Description of argument(s):
433    # session_info_list    List contains individual session record are stored in dictionary.
434
435    # ${session_info_list} = [{
436    #     'SessionIDs': 'XXXXXXXXX',
437    #     'ClientID': 'XXXXXX',
438    #     'SessionToken': 'XXXXXXXXX',
439    #     'SessionResp': session response from redfish login
440    # }]
441
442    # SessionIDs   : Session IDs
443    # ClientID     : Client ID
444    # SessionToken : Session token
445    # SessionResp  : Response of creating an redfish login session
446
447    FOR  ${session_record}  IN  @{session_info_list}
448      Verify Redfish Session Deleted  ${session_record}
449    END
450
451
452Redfish Post Acquire Lock
453    [Documentation]  Acquire and release lock.
454    [Arguments]  ${lock_type}  ${status_code}=${HTTP_OK}
455
456    # Description of argument(s):
457    # lock_type      Read lock or Write lock.
458    # status_code    HTTP status code.
459
460    ${lock_dict_param}=  Form Data To Acquire Lock  ${lock_type}
461    ${lock_dict_param}=  Convert JSON To String  ${lock_dict_param}
462    ${resp}=  Redfish Post Request
463    ...  /ibm/v1/HMC/LockService/Actions/LockService.AcquireLock  data=${lock_dict_param}
464    ...  expected_status=any
465    Should Be Equal As Strings  ${resp.status_code}  ${status_code}
466
467    Run Keyword If  ${status_code} == ${HTTP_BAD_REQUEST}
468    ...    Valid Value  ${BAD_REQUEST}  ['${resp.content}']
469    ...  ELSE
470    ...    Run Keyword And Return  Return Description Of Response  ${resp.content}
471
472    [Return]  ${resp}
473
474
475Redfish Post Acquire List Lock
476    [Documentation]  Acquire and release lock.
477    [Arguments]  ${lock_type}  ${status_code}=${HTTP_OK}
478
479    # Description of argument(s):
480    # lock_type      Read lock or Write lock.
481    # status_code    HTTP status code.
482
483    ${lock_dict_param}=  Create Data To Acquire List Of Lock  ${lock_type}
484    ${lock_dict_param}=  Convert JSON To String  ${lock_dict_param}
485    ${resp}=  Redfish Post Request
486    ...  /ibm/v1/HMC/LockService/Actions/LockService.AcquireLock  data=${lock_dict_param}
487    ...   expected_status=any
488    Should Be Equal As Strings  ${resp.status_code}  ${status_code}
489
490    Run Keyword If  ${status_code} == ${HTTP_CONFLICT}
491    ...    Should Be Equal As Strings  ${CONFLICT_RQUEST}  ${resp.content}
492    ...  ELSE
493    ...    Run Keyword And Return  Return Description Of Response  ${resp.content}
494
495    [Return]  ${resp}
496
497
498Redfish Post Acquire Invalid Lock
499    [Documentation]  Redfish to post request to acquire in-valid lock.
500    [Arguments]  ${lock_type}  ${message}  ${status_code}=${HTTP_OK}
501
502    # Description of argument(s):
503    # lock_type      Read lock or Write lock.
504    # message        Return message from URI.
505    # status_code    HTTP status code.
506
507    ${lock_dict_param}=  Form Data To Acquire Invalid Lock  ${lock_type}
508    ${lock_dict_param}=  Convert JSON To String  ${lock_dict_param}
509    ${resp}=  Redfish Post Request
510    ...  /ibm/v1/HMC/LockService/Actions/LockService.AcquireLock  data=${lock_dict_param}
511    Should Be Equal As Strings  ${resp.status_code}  ${status_code}
512    Run Keyword If  '${message}' != '${EMPTY}'
513    ...  Valid Value  message  ['${resp.content}']
514
515    [Return]  ${resp}
516
517
518Redfish Post Acquire Invalid Lock With Invalid Data Type Of Resource ID
519    [Documentation]  Redfish to post request to acquire in-valid lock with invalid data type of resource id.
520    [Arguments]  ${lock_type}  ${status_code}=${HTTP_OK}
521
522    # Description of argument(s):
523    # lock_type      Read lock or Write lock.
524    # status_code    HTTP status code.
525
526    ${lock_dict_param}=
527    ...  Form Data To Acquire Invalid Lock With Invalid Data Type Of Resource ID  ${lock_type}
528    ${lock_dict_param}=  Convert JSON To String  ${lock_dict_param}
529    ${resp}=  Redfish Post Request
530    ...  /ibm/v1/HMC/LockService/Actions/LockService.AcquireLock  data=${lock_dict_param}
531    Should Be Equal As Strings  ${resp.status_code}  ${status_code}
532
533    [Return]  ${resp}
534
535
536Form Data To Acquire Lock
537    [Documentation]  Create a dictionary for lock request.
538    [Arguments]  ${lock_type}
539
540    # Description of argument(s):
541    # lock_type      Read lock or Write lock.
542
543    ${lock_res_info}=  Get Lock Resource Information
544    ${resp}=  RW General Dictionary
545    ...    ${lock_res_info["Valid Case"]["${lock_type}"]}
546    ...    ${lock_res_info["Valid Case"]["ResourceID"]}
547    ${temp_list}=  Create List  ${resp}
548    ${lock_request_dict}=  Create Dictionary  Request=${temp_list}
549
550    [Return]  ${lock_request_dict}
551
552
553Create Data To Acquire List Of Lock
554    [Documentation]  Create a dictionary for list of lock request.
555    [Arguments]  ${lock_type_list}
556
557    # Description of argument(s):
558    # lock_type      Read lock or Write lock.
559
560    ${temp_list}=  Create List
561    ${lock_res_info}=  Get Lock Resource Information
562
563    FOR  ${lock_type}  IN  @{lock_type_list}
564      ${resp}=  RW General Dictionary
565      ...    ${lock_res_info["Valid Case"]["${lock_type}"]}
566      ...    ${lock_res_info["Valid Case"]["ResourceID"]}
567      Append To List  ${temp_list}  ${resp}
568    END
569
570    ${lock_request_dict}=  Create Dictionary  Request=${temp_list}
571
572    [Return]  ${lock_request_dict}
573
574
575Form Data To Acquire Invalid Lock With Invalid Data Type Of Resource ID
576    [Documentation]  Create a dictionary for in-valid lock request.
577    [Arguments]  ${lock_type}
578
579    # Description of argument(s):
580    # lock_type      Read lock or Write lock.
581
582    ${lock_res_info}=  Get Lock Resource Information
583    ${resp}=  RW General Dictionary
584    ...    ${lock_res_info["Valid Case"]["${lock_type}"]}
585    ...    ${lock_res_info["Invalid Case"]["ResourceIDInvalidDataType"]}
586    ${temp_list}=  Create List  ${resp}
587    ${lock_request_dict}=  Create Dictionary  Request=${temp_list}
588
589    [Return]  ${lock_request_dict}
590
591
592Form Data To Acquire Invalid Lock
593    [Documentation]  Create a dictionary for in-valid lock request.
594    [Arguments]  ${lock_type}
595
596    # Description of argument(s):
597    # lock_type      Read lock or Write lock.
598
599    ${lock_res_info}=  Get Lock Resource Information
600    ${resp}=  RW General Dictionary
601    ...    ${lock_res_info["Invalid Case"]["${lock_type}"]}
602    ...    ${lock_res_info["Valid Case"]["ResourceID"]}
603    ${temp_list}=  Create List  ${resp}
604    ${lock_request_dict}=  Create Dictionary  Request=${temp_list}
605
606    [Return]  ${lock_request_dict}
607
608
609Get Locks List On Resource
610    [Documentation]  Get locks list.
611    [Arguments]  ${session_info}  ${exp_status_code}=${HTTP_OK}
612
613    # Description of argument(s):
614    # session_info       Session information in dict.
615    # exp_status_code    Expected HTTP status code.
616
617    ${data}=  Set Variable  {"SessionIDs": ["${session_info['SessionIDs']}"]}
618    ${resp}=  Redfish Post Request  /ibm/v1/HMC/LockService/Actions/LockService.GetLockList
619    ...  data=${data}
620    ${locks}=  Evaluate  json.loads('''${resp.text}''')  json
621
622    [Return]  ${locks["Records"]}
623
624
625Verify Lock On Resource
626    [Documentation]  Verify lock on resource.
627    [Arguments]  ${session_info}  ${transaction_id}
628
629    # Description of argument(s):
630    # session_info      Session information in dict.
631    # transaction_id    Transaction id in list stored in dict.
632
633    ${sessions}=  Redfish.Get Properties  /redfish/v1/SessionService/Sessions/${session_info['SessionIDs']}
634    Rprint Vars  sessions
635    ${lock_list}=  Get Locks List On Resource  ${session_info}
636    ${lock_length}=  Get Length  ${lock_list}
637    ${tran_id_length}=  Get Length  ${transaction_id}
638    Should Be Equal As Integers  ${tran_id_length}  ${lock_length}
639
640    FOR  ${tran_id}  ${lock}  IN ZIP  ${transaction_id}  ${lock_list}
641      Valid Value  session_info['ClientID']  ['${lock['HMCID']}']
642      Valid Value  session_info['SessionIDs']  ['${lock['SessionID']}']
643      Should Be Equal As Integers  ${tran_id['TransactionID']}  ${lock['TransactionID']}
644    END
645
646
647Acquire Lock On Resource
648    [Documentation]  Acquire lock on resource.
649    [Arguments]  ${client_id}  ${lock_type}  ${reboot_flag}=False
650
651    # Description of argument(s):
652    # client_id    This client id can contain string value
653    #              (e.g. 12345, "HMCID").
654    # lock_type    Read lock or Write lock.
655    # reboot_flag  Flag is used to run reboot the BMC code.
656    #               (e.g. True or False).
657
658    ${trans_id_emptylist}=  Create List
659    ${trans_id_list}=  Create List
660
661    ${session_info}=  Create Redfish Session With ClientID  ${client_id}
662    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type}
663    Append To List  ${trans_id_list}  ${trans_id}
664
665    Verify Lock On Resource  ${session_info}  ${trans_id_list}
666
667    ${before_reboot_xauth_token}=  Set Variable  ${XAUTH_TOKEN}
668
669    Run Keyword If  '${reboot_flag}' == 'True'
670    ...  Run Keywords  Redfish BMC Reset Operation  AND
671    ...  Set Global Variable  ${XAUTH_TOKEN}  ${before_reboot_xauth_token}  AND
672    ...  Wait Until Keyword Succeeds  3 min  10 sec  Redfish BMC Match States  match_state=Enabled  AND
673    ...  Is BMC Standby  AND
674    ...  Verify Lock On Resource  ${session_info}  ${trans_id_emptylist}
675
676    Run Keyword If  '${reboot_flag}' == 'False'
677    ...  Release Locks On Resource  ${session_info}  ${trans_id_list}  Transaction  ${HTTP_OK}
678
679    ${trans_id_emptylist}=  Create List
680    Verify Lock On Resource  ${session_info}  ${trans_id_emptylist}
681    Redfish Delete Session  ${session_info}
682
683
684Form Data To Release Lock
685    [Documentation]  Create a dictonay to release lock.
686    [Arguments]  ${trans_id_list}
687
688    # Description of argument(s):
689    # trans_id_list
690
691    @{tran_ids}=  Create List
692
693    FOR  ${item}  IN  @{trans_id_list}
694      Append To List  ${tran_ids}  ${item['TransactionID']}
695    END
696
697    [Return]  ${tran_ids}
698
699
700Release Locks On Resource
701    [Documentation]  Redfish request to release a lock.
702    [Arguments]  ${session_info}  ${trans_id_list}  ${release_lock_type}=Transaction
703    ...  ${status_code}=${HTTP_OK}
704
705    # Description of argument(s):
706    # session_info        Session information in dict.
707    # trans_id_list       Transaction id list.
708    # release_lock_type   Release lock by Transaction, Session.
709    # status_code         HTTP status code.
710
711    ${tran_ids}=  Form Data To Release Lock  ${trans_id_list}
712    ${data}=  Set Variable  {"Type": "${release_lock_type}", "TransactionIDs":${tran_ids}}
713    ${data}=  Evaluate  json.dumps(${data})  json
714    ${resp}=  Redfish Post Request  /ibm/v1/HMC/LockService/Actions/LockService.ReleaseLock  data=${data}
715    Should Be Equal As Strings  ${resp.status_code}  ${status_code}
716
717
718Release locks And Delete Session
719    [Documentation]  Release locks and delete redfish session.
720    [Arguments]  ${session_info}  ${trans_id_list}
721
722    Release Locks On Resource  ${session_info}  ${trans_id_list}
723
724    ${trans_id_emptylist}=  Create List
725    Verify Lock On Resource  ${session_info}  ${trans_id_emptylist}
726
727    Redfish Delete Session  ${session_info}
728
729
730Acquire Lock On Another Lock
731    [Documentation]  Acquire lock on another lock.
732    [Arguments]  ${client_id}
733
734    # Description of argument(s):
735    # client_id    This client id can contain string value
736    #              (e.g. 12345, "HMCID").
737
738    ${trans_id_list}=  Create List
739    ${session_info}=  Create Redfish Session With ClientID  ${client_id}
740
741    ${trans_id}=  Redfish Post Acquire Lock  ReadCase1
742    Append To List  ${trans_id_list}  ${trans_id}
743
744    ${trans_id}=  Redfish Post Acquire Lock  ReadCase1
745    Append To List  ${trans_id_list}  ${trans_id}
746
747    Verify Lock On Resource  ${session_info}  ${trans_id_list}
748
749    Release locks And Delete Session  ${session_info}  ${trans_id_list}
750
751
752Verify Fail To Acquire Read And Write In Single Request
753    [Documentation]  Verify fail to acquire read and write lock passed in single request.
754    [Arguments]  ${client_id}  ${lock_type}  ${status_code}
755
756    # Description of argument(s):
757    # client_id     This client id can contain string value
758    #               (e.g. 12345, "HMCID").
759    # lock_type     Read lock or Write lock.
760    # status_code   HTTP status code
761
762    ${lock_type_list}=  Split String  ${lock_type}  ,
763
764    ${session_info}=  Create Redfish Session With ClientID  ${client_id}
765    ${trans_id}=  Redfish Post Acquire List Lock  ${lock_type_list}  status_code=${status_code}
766    Redfish Delete Session  ${session_info}
767
768
769Verify Acquire Read In Single Request
770    [Documentation]  Verify acquire read in single request.
771    [Arguments]  ${client_id}  ${lock_type}
772
773    # Description of argument(s):
774    # client_id    This client id can contain string value
775    #              (e.g. 12345, "HMCID").
776    # lock_type    Read lock or Write lock.
777
778    ${trans_id_list}=  Create List
779    ${lock_type_list}=  Split String  ${lock_type}  ,
780
781    ${session_info}=  Create Redfish Session With ClientID  ${client_id}
782    ${trans_id}=  Redfish Post Acquire List Lock  ${lock_type_list}
783    Append To List  ${trans_id_list}  ${trans_id}
784    Append To List  ${trans_id_list}  ${trans_id}
785
786    Verify Lock On Resource  ${session_info}  ${trans_id_list}
787    Remove From List  ${trans_id_list}  1
788    Release Locks On Resource  ${session_info}  ${trans_id_list}
789
790    Redfish Delete Session  ${session_info}
791
792
793Verify Empty Lock Records For Invalid Session
794    [Documentation]  Verify no lock record found for invalid session.
795    [Arguments]  ${client_id}
796
797    # Description of argument(s):
798    # client_id    This client id can contain string value
799    #              (e.g. 12345, "HMCID").
800
801    ${session_info1}=  Create Redfish Session With ClientID  ${client_id}
802
803    ${lock_list1}=  Get Locks List On Resource  ${session_info1}
804    ${lock_length1}=  Get Length  ${lock_list1}
805
806    ${session_info2}=  Copy Dictionary  ${session_info1}  deepcopy=True
807    set to dictionary  ${session_info2}  SessionIDs  xxyXyyYZZz
808
809    ${lock_list2}=  Get Locks List On Resource  ${session_info2}
810    ${lock_length2}=  Get Length  ${lock_list2}
811
812    Should Be Equal As Integers  ${lock_length1}  ${lock_length2}
813
814    Redfish Delete Session  ${session_info1}
815
816
817Verify Acquire Lock Fails On Another Lock
818    [Documentation]  Verify acquire lock on another lock fails.
819    [Arguments]  ${client_id}  ${lock_type}
820
821    # Description of argument(s):
822    # client_id    This client id can contain string value
823    #              (e.g. 12345, "HMCID").
824    # lock_type    Read lock or Write lock.
825
826    @{lock_type_list}=  Split String  ${lock_type}  ,
827    ${session_info}=  Create Redfish Session With ClientID  ${client_id}
828    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[0]
829
830    ${trans_id_list}=  Create List
831    Append To List  ${trans_id_list}  ${trans_id}
832
833    Verify Lock On Resource  ${session_info}  ${trans_id_list}
834    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[1]  status_code=${HTTP_CONFLICT}
835
836    Release locks And Delete Session  ${session_info}  ${trans_id_list}
837
838
839Verify Acquire Lock After Reboot
840    [Documentation]  Acquire read and write lock after the reboot and release lock.
841    [Arguments]  ${client_id}  ${lock_type}
842
843    # Description of argument(s):
844    # client_id    This client id can contain string value
845    #              (e.g. 12345, "HMCID").
846    # lock_type    Read lock or Write lock.
847
848    ${trans_id_list}=  Create List
849    ${session_info}=  Create Session With ClientID  ${client_id}
850
851    ${before_reboot_xauth_token}=  Set Variable  ${XAUTH_TOKEN}
852    Redfish BMC Reset Operation
853    Set Global Variable  ${XAUTH_TOKEN}  ${before_reboot_xauth_token}
854    Wait Until Keyword Succeeds  3 min  10 sec  Redfish BMC Match States  match_state=Enabled
855    Is BMC Standby
856
857    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type}
858    Append To List  ${trans_id_list}  ${trans_id}
859    Verify Lock On Resource  ${session_info}  ${trans_id_list}
860
861    Release locks And Delete Session  ${session_info}  ${trans_id_list}
862
863
864Verify Acquire Multiple Lock Request At CEC Level
865    [Documentation]  Acquire lock in loop.
866    [Arguments]  ${client_id}  ${lock_type}
867
868    # Description of argument(s):
869    # client_id    This client id can contain string value
870    #              (e.g. 12345, "HMCID").
871    # lock_type    Read lock or Write lock.
872
873    ${trans_id_list}=  Create List
874    @{lock_type_list}=  Split String  ${lock_type}  ,
875    ${session_info}=  Create Redfish Session With ClientID  ${client_id}
876
877    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[0]
878    Append To List  ${trans_id_list}  ${trans_id}
879
880    Verify Lock On Resource  ${session_info}  ${trans_id_list}
881
882    Redfish Post Acquire Lock  ${lock_type_list}[1]  status_code=${HTTP_CONFLICT}
883
884    Release locks And Delete Session  ${session_info}  ${trans_id_list}
885
886
887Post Reboot Acquire Lock
888    [Documentation]  Post reboot acquire lock and verify the transaction id is 1.
889    [Arguments]  ${session_info}  ${lock_type}
890
891    # Description of argument(s):
892    # session_info     Session information.
893    # lock_type        Read lock or Write lock.
894
895    ${trans_id_list}=  Create List
896    ${trans_id_list_var}=  Create List
897    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type}
898    Append To List  ${trans_id_list}  ${trans_id}
899    Append To List  ${trans_id_list_var}  ${default_trans_id}
900    Verify Lock On Resource  ${session_info}  ${trans_id_list}
901    Verify Lock On Resource  ${session_info}  ${trans_id_list_var}
902    Release Locks On Resource  ${session_info}  ${trans_id_list}  Transaction  ${HTTP_OK}
903    ${trans_id_emptylist}=  Create List
904    Verify Lock On Resource  ${session_info}  ${trans_id_emptylist}
905
906
907Verify Acquire And Release Lock In Loop
908    [Documentation]  Acquire lock in loop.
909    [Arguments]  ${client_id}  ${lock_type}  ${reboot_flag}=False
910
911    # Description of argument(s):
912    # client_id    This client id can contain string value
913    #              (e.g. 12345, "HMCID").
914    # lock_type    Read lock or Write lock.
915    # reboot_flag  Flag is used to run reboot the BMC code.
916    #               (e.g. True or False).
917
918    FOR  ${count}  IN RANGE  1  11
919      ${trans_id_list}=  Create List
920      ${session_info}=  Create Redfish Session With ClientID  ${client_id}
921      ${trans_id}=  Redfish Post Acquire Lock  ${lock_type}
922      Append To List  ${trans_id_list}  ${trans_id}
923      Verify Lock On Resource  ${session_info}  ${trans_id_list}
924      Release Locks On Resource  ${session_info}  ${trans_id_list}  Transaction  ${HTTP_OK}
925      ${trans_id_emptylist}=  Create List
926      Verify Lock On Resource  ${session_info}  ${trans_id_emptylist}
927      Redfish Delete Session  ${session_info}
928    END
929
930    ${session_info}=  Create Redfish Session With ClientID  ${client_id}
931    ${before_reboot_xauth_token}=  Set Variable  ${XAUTH_TOKEN}
932
933    Run Keyword If  '${reboot_flag}' == 'True'
934    ...  Run Keywords  Redfish BMC Reset Operation  AND
935    ...  Set Global Variable  ${XAUTH_TOKEN}  ${before_reboot_xauth_token}  AND
936    ...  Wait Until Keyword Succeeds  3 min  10 sec  Redfish BMC Match States  match_state=Enabled  AND
937    ...  Is BMC Standby  AND
938    ...  Post Reboot Acquire Lock  ${session_info}  ${lock_type}
939    Redfish Delete Session  ${session_info}
940
941
942Acquire And Release Multiple Locks
943    [Documentation]  Acquire mutilple locks on resource.
944    [Arguments]  ${client_id}  ${lock_type}  ${release_lock_type}
945
946    # Description of argument(s):
947    # client_id          This client id can contain string value
948    #                    (e.g. 12345, "HMCID").
949    # lock_type          Read lock or Write lock.
950    # release_lock_type  The value can be Transaction or Session.
951
952    @{lock_type_list}=  Split String  ${lock_type}  ,
953    ${session_info}=  Create Redfish Session With ClientID  ${client_id}
954    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[0]
955
956    ${trans_id_list}=  Create List
957
958    Append To List  ${trans_id_list}  ${trans_id}
959    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[1]
960
961    Append To List  ${trans_id_list}  ${trans_id}
962    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[2]
963
964    Append To List  ${trans_id_list}  ${trans_id}
965    Verify Lock On Resource  ${session_info}  ${trans_id_list}
966    Release Locks On Resource  ${session_info}  ${trans_id_list}  release_lock_type=${release_lock_type}
967
968    ${trans_id_emptylist}=  Create List
969    Verify Lock On Resource  ${session_info}  ${trans_id_emptylist}
970    Redfish Delete Session  ${session_info}
971
972
973Verify Release Lock When Session Deleted
974    [Documentation]  Verify lock get released when session are deleted.
975    [Arguments]  ${client_id}  ${lock_type}
976
977    # Description of argument(s):
978    # client_ids    This client id can contain string value
979    #               (e.g. 12345, "HMCID").
980    # lock_type     Read lock or Write lock.
981
982    ${trans_id_list}=  Create List
983    @{lock_type_list}=  Split String  ${lock_type}  ,
984
985    ${pre_session_info}=  Create Redfish Session With ClientID  ${client_id}
986
987    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[0]
988    Append To List  ${trans_id_list}  ${trans_id}
989    Verify Lock On Resource  ${pre_session_info}  ${trans_id_list}
990
991    Redfish Delete Session  ${pre_session_info}
992    ${post_session_info}=  Create Redfish Session With ClientID  ${client_id}
993    ${resp}=  Get Locks List On Resource With Session List  ${pre_session_info}  ${HTTP_BAD_REQUEST}
994
995    Redfish Delete Session  ${post_session_info}
996
997
998
999Verify Fail To Release Lock With Invalid TransactionID
1000    [Documentation]  Verify fail to be release lock with invalid transaction ID.
1001    [Arguments]  ${client_id}  ${lock_type}  ${release_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    # release_lock_type  The value can be Transaction or Session.
1008
1009    ${trans_id_list}=  Create List
1010    @{lock_type_list}=  Split String  ${lock_type}  ,
1011
1012    ${session_info}=  Create Redfish Session With ClientID  ${client_id}
1013
1014    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[0]
1015    ${value}=  Get From Dictionary  ${trans_id}  TransactionID
1016    ${value}=  Evaluate  ${value} + 10
1017    Set To Dictionary  ${trans_id}  TransactionID  ${value}
1018    Append To List  ${trans_id_list}  ${trans_id}
1019
1020    Release Locks On Resource
1021    ...  ${session_info}  ${trans_id_list}
1022    ...  release_lock_type=${release_lock_type}  status_code=${HTTP_BAD_REQUEST}
1023    Release Locks On Resource  ${session_info}  ${trans_id_list}  release_lock_type=Session
1024
1025    ${trans_id_emptylist}=  Create List
1026    Verify Lock On Resource  ${session_info}  ${trans_id_emptylist}
1027    Redfish Delete Session  ${session_info}
1028
1029
1030Verify Fail To Release Multiple Lock With Invalid TransactionID
1031    [Documentation]  Verify release multiple locks with invalid transaction ID fails.
1032    [Arguments]  ${client_id}  ${lock_type}  ${release_lock_type}
1033
1034    # Description of argument(s):
1035    # client_id          This client id can contain string value
1036    #                    (e.g. 12345, "HMCID").
1037    # lock_type          Read lock or Write lock.
1038    # release_lock_type  The value can be Transaction or Session.
1039
1040    ${trans_id_list}=  Create List
1041    @{lock_type_list}=  Split String  ${lock_type}  ,
1042
1043    ${session_info}=  Create Redfish Session With ClientID  ${client_id}
1044
1045    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[0]
1046    ${value}=  Get From Dictionary  ${trans_id}  TransactionID
1047    ${value}=  Evaluate  ${value} + 10
1048    Set To Dictionary  ${trans_id}  TransactionID  ${value}
1049    Append To List  ${trans_id_list}  ${trans_id}
1050
1051    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[1]
1052    ${value}=  Get From Dictionary  ${trans_id}  TransactionID
1053    ${value}=  Evaluate  ${value} + 10
1054    Set To Dictionary  ${trans_id}  TransactionID  ${value}
1055    Append To List  ${trans_id_list}  ${trans_id}
1056
1057    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[2]
1058    ${value}=  Get From Dictionary  ${trans_id}  TransactionID
1059    ${value}=  Evaluate  ${value} + 10
1060    Set To Dictionary  ${trans_id}  TransactionID  ${value}
1061    Append To List  ${trans_id_list}  ${trans_id}
1062
1063    Release Locks On Resource
1064    ...  ${session_info}  ${trans_id_list}
1065    ...  release_lock_type=${release_lock_type}  status_code=${HTTP_BAD_REQUEST}
1066    Release Locks On Resource  ${session_info}  ${trans_id_list}  release_lock_type=Session
1067
1068    ${trans_id_emptylist}=  Create List
1069    Verify Lock On Resource  ${session_info}  ${trans_id_emptylist}
1070    Redfish Delete Session  ${session_info}
1071
1072
1073Verify Fail To Release Multiple Lock With Valid And Invalid TransactionID
1074    [Documentation]  Verify fail to be release multiple lock with valid and invalid transaction ID.
1075    [Arguments]  ${client_id}  ${lock_type}  ${release_lock_type}
1076
1077    # Description of argument(s):
1078    # client_id          This client id can contain string value
1079    #                    (e.g. 12345, "HMCID").
1080    # lock_type          Read lock or Write lock.
1081    # release_lock_type  The value can be Transaction or Session.
1082
1083    ${trans_id_list}=  Create List
1084    @{lock_type_list}=  Split String  ${lock_type}  ,
1085
1086    ${session_info}=  Create Redfish Session With ClientID  ${client_id}
1087
1088    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[0]
1089    Append To List  ${trans_id_list}  ${trans_id}
1090
1091    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[1]
1092    ${value}=  Get From Dictionary  ${trans_id}  TransactionID
1093    ${value}=  Evaluate  ${value} + 10
1094    Set To Dictionary  ${trans_id}  TransactionID  ${value}
1095    Append To List  ${trans_id_list}  ${trans_id}
1096
1097    Release Locks On Resource
1098    ...  ${session_info}  ${trans_id_list}
1099    ...  release_lock_type=${release_lock_type}  status_code=${HTTP_BAD_REQUEST}
1100    Release Locks On Resource  ${session_info}  ${trans_id_list}  release_lock_type=Session
1101
1102    ${trans_id_emptylist}=  Create List
1103    Verify Lock On Resource  ${session_info}  ${trans_id_emptylist}
1104    Redfish Delete Session  ${session_info}
1105
1106
1107Verify Fail To Release Lock With TransactionID As String Type
1108    [Documentation]  Verify fail to be release lock with transaction ID as string data type.
1109    [Arguments]  ${client_id}  ${lock_type}  ${release_lock_type}
1110
1111    # Description of argument(s):
1112    # client_id          This client id can contain string value
1113    #                    (e.g. 12345, "HMCID").
1114    # lock_type          Read lock or Write lock.
1115    # release_lock_type  The value can be Transaction or Session.
1116
1117    ${trans_id_list}=  Create List
1118    @{lock_type_list}=  Split String  ${lock_type}  ,
1119
1120    ${session_info}=  Create Redfish Session With ClientID  ${client_id}
1121
1122    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[0]
1123
1124    Append To List  ${trans_id_list}  ${trans_id}
1125
1126    ${temp_trans_id_list}=  Copy List  ${trans_id_list}  deepcopy=True
1127
1128    ${value}=  Get From Dictionary  ${trans_id_list}[0]  TransactionID
1129    ${value}=  Set Variable  \'${value}\'
1130    Set To Dictionary  ${temp_trans_id_list}[0]  TransactionID  ${value}
1131
1132    Release Locks On Resource
1133    ...  ${session_info}  ${temp_trans_id_list}
1134    ...  release_lock_type=${release_lock_type}  status_code=${HTTP_BAD_REQUEST}
1135
1136    Release Locks On Resource  ${session_info}  ${trans_id_list}  release_lock_type=${release_lock_type}
1137
1138    ${trans_id_emptylist}=  Create List
1139    Verify Lock On Resource  ${session_info}  ${trans_id_emptylist}
1140    Redfish Delete Session  ${session_info}
1141
1142
1143Verify Fail To Release Lock For Another Session
1144    [Documentation]  Verify failed to release the lock form another session.
1145    [Arguments]  ${client_id}  ${lock_type}
1146
1147    # Description of argument(s):
1148    # client_id    This client id can contain string value
1149    #              (e.g. 12345, "HMCID").
1150    # lock_type    Read lock or Write lock.
1151
1152    ${client_ids}=  Split String  ${client_id}  ,
1153    ${lock_type_list}=  Split String  ${lock_type}  ,
1154    ${trans_id_list1}=  Create List
1155    ${trans_id_list2}=  Create List
1156
1157    ${session_info1}=  Create Redfish Session With ClientID  ${client_ids}[0]
1158
1159    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[0]
1160    Append To List  ${trans_id_list1}  ${trans_id}
1161    Verify Lock On Resource  ${session_info1}  ${trans_id_list1}
1162
1163    ${session_info2}=  Create Redfish Session With ClientID  ${client_ids}[1]
1164    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[1]
1165    Append To List  ${trans_id_list2}  ${trans_id}
1166    Verify Lock On Resource  ${session_info2}  ${trans_id_list2}
1167
1168    Release Locks On Resource
1169    ...  ${session_info1}  ${trans_id_list1}  Transaction  status_code=${HTTP_BAD_REQUEST}
1170    Verify Lock On Resource  ${session_info1}  ${trans_id_list1}
1171    Release Locks On Resource  ${session_info1}  ${trans_id_list1}  release_lock_type=Session
1172    Release Locks On Resource  ${session_info2}  ${trans_id_list2}  release_lock_type=Session
1173    Redfish Delete Session  ${session_info1}
1174    Redfish Delete Session  ${session_info2}
1175
1176
1177Verify Fail To Acquire Lock For Invalid Resource ID Data Type
1178    [Documentation]  Verify fail to acquire the lock with invalid resource id data type.
1179    [Arguments]  ${client_id}  ${lock_type}
1180
1181    # Description of argument(s):
1182    # client_id    This client id can contain string value
1183    #              (e.g. 12345, "HMCID").
1184    # lock_type    Read lock or Write lock.
1185
1186    ${session_info}=  Create Redfish Session With ClientID  ${client_id}
1187    Redfish Post Acquire Invalid Lock With Invalid Data Type Of Resource ID
1188    ...  ${lock_type}  status_code=${HTTP_BAD_REQUEST}
1189    Redfish Delete Session  ${session_info}
1190
1191
1192Verify Fail To Acquire Lock For Invalid Lock Data
1193    [Documentation]  Verify fail to acquired lock with invalid lock types, lock flags, segment flags.
1194    [Arguments]  ${client_id}  ${lock_type}  ${message}
1195
1196    # Description of argument(s):
1197    # client_id    This client id can contain string value
1198    #              (e.g. 12345, "HMCID").
1199    # lock_type    Read lock or Write lock.
1200    # message      Return message from URI.
1201
1202    ${session_info}=  Create Redfish Session With ClientID  ${client_id}
1203    ${trans_id}=  Redfish Post Acquire Invalid Lock
1204    ...  ${lock_type}  message=${message}  status_code=${HTTP_BAD_REQUEST}
1205    Redfish Delete Session  ${session_info}
1206
1207
1208Verify No Locks Records For Session With No Acquired Lock
1209    [Documentation]  Verify no records found for a session where no lock is acquired.
1210    [Arguments]  ${client_id}
1211
1212    # Description of argument(s):
1213    # client_id    This client id can contain string value
1214    #              (e.g. 12345, "HMCID").
1215
1216    ${session_info}=  Create Redfish Session With ClientID  ${client_id}
1217    ${trans_id_emptylist}=  Create List
1218    Verify Lock On Resource  ${session_info}  ${trans_id_emptylist}
1219    Redfish Delete Session  ${session_info}
1220
1221
1222Create List Of Session ID
1223    [Documentation]  Create session id list from session dict info.
1224    [Arguments]  ${session_dict_info}
1225
1226    # Description of argument(s):
1227    # session_dict_info      Session information in dict.
1228
1229    @{session_id_list}=  Create List
1230
1231    FOR  ${session}  IN  @{session_dict_info}
1232      Append To List  ${session_id_list}  ${session["SessionIDs"]}
1233    END
1234
1235    ${num_id}=  Get Length  ${session_id_list}
1236    Should Not Be Equal As Integers  ${num_id}  ${0}
1237
1238    ${session_id_list}=  Evaluate  json.dumps(${session_id_list})  json
1239
1240    [Return]  ${session_id_list}
1241
1242
1243Get Locks List On Resource With Session List
1244    [Documentation]  Get locks list from session of list.
1245    [Arguments]  ${session_id_list}  ${exp_status_code}=${HTTP_OK}
1246
1247    # Description of argument(s):
1248    # session_id_list    Session ids list.
1249    # exp_status_code    Expected HTTP status code.
1250
1251    ${resp}=  Redfish Post Request  /ibm/v1/HMC/LockService/Actions/LockService.GetLockList
1252    ...  data={"SessionIDs":${session_id_list}}  expected_status=any
1253    Should Be Equal As Strings  ${resp.status_code}  ${exp_status_code}
1254    ${locks}=  Evaluate  json.loads('''${resp.text}''')  json
1255
1256    [Return]  ${locks}
1257
1258
1259Verify List Of Session Lock On Resource
1260    [Documentation]  Verify list of lock record from list of sessions.
1261    [Arguments]  ${session_dict_info}  ${transaction_id_list}
1262
1263    # Description of argument(s):
1264    # session_dict_info      Session information in dict.
1265    # transaction_id_list    Transaction id in list stored in dict.
1266
1267    ${session_id_list}=  Create List Of Session ID  ${session_dict_info}
1268    ${lock_list_resp}=  Get Locks List On Resource With Session List  ${session_id_list}
1269    ${lock_list}=  Set Variable  ${lock_list_resp['Records']}
1270
1271    FOR  ${session_id}  ${tran_id}  ${lock_record}  IN ZIP
1272    ...  ${session_dict_info}  ${transaction_id_list}  ${lock_list}
1273      Valid Value  session_id['SessionIDs']  ['${lock_record['SessionID']}']
1274      Should Be Equal As Integers  ${tran_id['TransactionID']}  ${lock_record['TransactionID']}
1275    END
1276
1277
1278Verify Lock Records Of Multiple Session
1279    [Documentation]  Verify all records found for a multiple sessions.
1280    [Arguments]  ${client_ids}  ${lock_type}
1281
1282    # Description of argument(s):
1283    # client_ids    This client id can contain string value
1284    #               (e.g. 12345, "HMCID").
1285    # lock_type     Read lock or Write lock.
1286
1287    ${client_id_list}=  Split String  ${client_ids}  ,
1288    ${lock_type_list}=  Split String  ${lock_type}  ,
1289    ${trans_id_list1}=  Create List
1290    ${trans_id_list2}=  Create List
1291
1292    ${session_dict_list}=  Create List
1293    ${lock_list}=  Create List
1294
1295    ${client_id1}=  Create List
1296    Append To List  ${client_id1}  ${client_id_list}[0]
1297    ${session_info1}=  Create Session With List Of ClientID  ${client_id1}
1298    Append To List  ${session_dict_list}  ${session_info1}[0]
1299    Verify A Session Created With ClientID  ${client_id1}  ${session_info1}
1300
1301    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[0]
1302    Append To List  ${trans_id_list1}  ${trans_id}
1303    Append To List  ${lock_list}  ${trans_id}
1304    Verify Lock On Resource  ${session_info1}[0]  ${trans_id_list1}
1305
1306
1307    ${client_id2}=  Create List
1308    Append To List  ${client_id2}  ${client_id_list}[1]
1309    ${session_info2}=  Create Session With List Of ClientID  ${client_id2}
1310    Append To List  ${session_dict_list}  ${session_info2}[0]
1311    Verify A Session Created With ClientID  ${client_id2}  ${session_info2}
1312
1313    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[1]
1314    Append To List  ${trans_id_list2}  ${trans_id}
1315    Append To List  ${lock_list}  ${trans_id}
1316    Verify Lock On Resource  ${session_info2}[0]  ${trans_id_list2}
1317
1318    Verify List Of Session Lock On Resource  ${session_dict_list}  ${lock_list}
1319
1320    ${session_token}=  Get From Dictionary  ${session_info1}[0]  SessionToken
1321    Set Global Variable  ${XAUTH_TOKEN}  ${session_token}
1322
1323    Release Locks On Resource  ${session_info1}  ${trans_id_list1}  release_lock_type=Transaction
1324
1325    ${session_token}=  Get From Dictionary  ${session_info2}[0]  SessionToken
1326    Set Global Variable  ${XAUTH_TOKEN}  ${session_token}
1327
1328    Release Locks On Resource  ${session_info2}  ${trans_id_list2}  release_lock_type=Transaction
1329
1330    ${trans_id_emptylist}=  Create List
1331    Verify Lock On Resource  ${session_info1}[0]  ${trans_id_emptylist}
1332    Verify Lock On Resource  ${session_info2}[0]  ${trans_id_emptylist}
1333
1334    Redfish Delete List Of Session  ${session_dict_list}
1335
1336
1337Verify Lock Records For Multiple Invalid Session
1338    [Documentation]  Verify no lock record found for multiple invalid session.
1339    [Arguments]  ${client_id}
1340
1341    # Description of argument(s):
1342    # client_id    This client id can contain string value
1343    #              (e.g. 12345, "HMCID").
1344
1345    ${session_dict_list}=  Create List
1346    ${invalid_session_ids}=  Create List  xxyXyyYZZz  xXyXYyYZzz
1347
1348    ${session_info1}=  Create Session With ClientID  ${client_id}
1349
1350    ${session_info2}=  Copy Dictionary  ${session_info1}  deepcopy=True
1351    set to dictionary  ${session_info2}  SessionIDs  ${invalid_session_ids}[0]
1352    Append To List  ${session_dict_list}  ${session_info2}
1353
1354    ${session_info3}=  Copy Dictionary  ${session_info1}  deepcopy=True
1355    set to dictionary  ${session_info3}  SessionIDs  ${invalid_session_ids}[0]
1356    Append To List  ${session_dict_list}  ${session_info3}
1357
1358    ${lock_list1}=  Get Locks List On Resource  ${session_info1}
1359    ${lock_length1}=  Get Length  ${lock_list1}
1360
1361    ${session_id_list}=  Create List Of Session ID  ${session_dict_list}
1362    ${lock_list_resp}=  Get Locks List On Resource With Session List  ${session_id_list}
1363    ${lock_length2}=  Get Length  ${lock_list_resp['Records']}
1364
1365    Should Be Equal As Integers  ${lock_length1}  ${lock_length2}
1366
1367    Redfish Delete Session  ${session_info1}
1368
1369
1370Verify Lock Records For Multiple Invalid And Valid Session
1371    [Documentation]  Verify all records found for a valid and invalid sessions.
1372    [Arguments]  ${client_ids}  ${lock_type}
1373
1374    # Description of argument(s):
1375    # client_ids    This client id can contain string value
1376    #               (e.g. 12345, "HMCID").
1377    # lock_type     Read lock or Write lock.
1378
1379    ${client_id_list}=  Split String  ${client_ids}  ,
1380    ${lock_type_list}=  Split String  ${lock_type}  ,
1381    ${trans_id_list1}=  Create List
1382    ${invalid_session_ids}=  Create List  xxyXyyYZZz
1383
1384    ${session_dict_list}=  Create List
1385    ${lock_list}=  Create List
1386
1387    ${client_id1}=  Create List
1388    Append To List  ${client_id1}  ${client_id_list}[0]
1389    ${session_info1}=  Create Session With List Of ClientID  ${client_id1}
1390    Append To List  ${session_dict_list}  ${session_info1}[0]
1391    Verify A Session Created With ClientID  ${client_id1}  ${session_info1}
1392
1393    ${trans_id}=  Redfish Post Acquire Lock  ${lock_type_list}[0]
1394    Append To List  ${trans_id_list1}  ${trans_id}
1395    Append To List  ${lock_list}  ${trans_id}
1396    Verify Lock On Resource  ${session_info1}[0]  ${trans_id_list1}
1397
1398    ${session_info2}=  Copy List  ${session_info1}  deepcopy=True
1399    set to dictionary  ${session_info2}[0]  SessionIDs  ${invalid_session_ids}[0]
1400    Append To List  ${session_dict_list}  ${session_info2}[0]
1401
1402    Verify List Of Session Lock On Resource  ${session_dict_list}  ${lock_list}
1403
1404    ${session_token}=  Get From Dictionary  ${session_info1}[0]  SessionToken
1405    Set Global Variable  ${XAUTH_TOKEN}  ${session_token}
1406
1407    Release Locks On Resource  ${session_info1}  ${trans_id_list1}  release_lock_type=Transaction
1408
1409    ${trans_id_emptylist}=  Create List
1410    Verify Lock On Resource  ${session_info1}[0]  ${trans_id_emptylist}
1411
1412    Redfish Delete Session  ${session_info1}[0]
1413
1414
1415Delete All Redfish and HMC Sessions
1416    [Documentation]  Delete all active redfish sessions.
1417
1418    ${saved_session_info}=  Get Redfish Session Info
1419
1420    ${resp_list}=  Redfish_Utils.Get Member List
1421    ...  /redfish/v1/SessionService/Sessions
1422
1423    # Remove the current login session from the list.
1424    Remove Values From List  ${resp_list}  ${saved_session_info["location"]}
1425
1426    FOR  ${session}  IN  @{resp_list}
1427        Run Keyword And Ignore Error  Redfish.Delete  ${session}
1428    END
1429
1430
1431Restart Bmcweb On Failure
1432    [Documentation]  Restart bmcweb only if test failed.
1433
1434    Return From Keyword If  "${TEST_STATUS}" == "PASS"
1435
1436    # This procedure is needs to be corrected or removed, when we figure out
1437    # what is causing the real failure here.
1438
1439    Log To Console  Likely ConnectionResetError: Restarting bmcweb
1440
1441    ${stdout}  ${stderr}  ${rc}=  BMC Execute Command
1442    ...  systemctl restart bmcweb  print_out=1
1443
1444    Should Be Empty  ${stderr}
1445
1446    Sleep  10s  reason=Wait for service to restart properly.
1447