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