blob: 731340338150ca6eab4944b737f25eb7bf2019ce [file] [log] [blame]
Vijaybc331e22020-02-27 04:17:37 -06001*** Settings ***
2
3Documentation Test Lock Management feature of Management Console on BMC.
4
5Resource ../../lib/resource.robot
6Resource ../../lib/bmc_redfish_resource.robot
7Resource ../../lib/openbmc_ffdc.robot
8
9Test Setup Create New Session
10Test Teardown Test Teardown Execution
11
12*** Variables ***
13
14# Data-sets for testing different test cases.
15&{LOCKALL_LEN1} LockFlag=LockAll SegmentLength=${1}
16&{LOCKALL_LEN2} LockFlag=LockAll SegmentLength=${2}
17&{LOCKALL_LEN3} LockFlag=LockAll SegmentLength=${3}
18&{LOCKALL_LEN4} LockFlag=LockAll SegmentLength=${4}
19&{LOCKALL_LEN5} LockFlag=LockAll SegmentLength=${5}
20
21&{LOCKALL_INVALID_LOCKFLAG1} LockFlag=LocAll SegmentLength=${2}
22&{LOCKALL_INVALID_LOCKFLAG2} LockFlag=LOCKALL SegmentLength=${3}
23&{LOCKALL_INVALID_LOCKFLAG3} LOCKFLAG=LockAll SegmentLength=${4}
24&{LOCKSAME_INVALID_LOCKFLAG3} Lock=LockSame SegmentLength=${1}
25&{LOCKSAME_INVALID_LOCKFLAG4} Lock=LockSame SegmentLength=${True}
26
27&{LOCKSAME_LEN1} LockFlag=LockSame SegmentLength=${1}
28&{LOCKSAME_LEN2} LockFlag=LockSame SegmentLength=${2}
29&{LOCKSAME_LEN3} LockFlag=LockSame SegmentLength=${3}
30&{LOCKSAME_LEN4} LockFlag=LockSame SegmentLength=${4}
31&{LOCKSAME_INVALID_LEN1} LockFlag=LockSame SegmentLength=${0}
32&{LOCKSAME_INVALID_LEN2} LockFlag=LockSame SegmentLength=${5}
33&{LOCKSAME_INVALID_LEN_STR} LockFlag=LockSame SegmentLength=2
34&{LOCKSAME_INVALID_LEN_NEG} LockFlag=LockSame SegmentLength=${-3}
35&{LOCKSAME_INVALID_LEN_BOOL} Lock=LockSame SegmentLength=${True}
36
37&{DONTLOCK_LEN1} LockFlag=DontLock SegmentLength=${1}
38&{DONTLOCK_LEN2} LockFlag=DontLock SegmentLength=${2}
39&{DONTLOCK_LEN3} LockFlag=DontLock SegmentLength=${3}
40&{DONTLOCK_LEN4} LockFlag=DontLock SegmentLength=${4}
41&{DONTLOCK_INVALID_LEN} LockFlag=DontLock SegmentLength=${5}
42&{DONTLOCK_INVALID_LEN_BOOL} LockFlag=DONTLOCK SegmentLength=${False}
43&{DONTLOCK_INVALID_LOCKFLAG} LOCKFLAG=LockAll SegmentLength=${4}
44
45@{ONE_SEG_FLAG_ALL} ${LOCKALL_LEN1}
46@{ONE_SEG_FLAG_SAME} ${LOCKSAME_LEN3}
47@{ONE_SEG_FLAG_DONT} ${DONTLOCK_LEN4}
48
49@{TWO_SEG_FLAG_1} ${LOCKALL_LEN1} ${LOCKSAME_LEN2}
50@{TWO_SEG_FLAG_2} ${DONTLOCK_LEN3} ${LOCKALL_LEN1}
51@{TWO_SEG_FLAG_3} ${DONTLOCK_LEN4} ${LOCKSAME_LEN3}
52@{TWO_SEG_FLAG_4} ${DONTLOCK_INVALID_LEN} ${LOCKSAME_LEN3}
53@{TWO_SEG_FLAG_5} ${DONTLOCK_LEN2} ${LOCKSAME_INVALID_LEN1}
54
55@{TWO_SEG_FLAG_INVALID1} ${DONTLOCK_LEN4} ${LOCKSAME_INVALID_LEN1}
56@{TWO_SEG_FLAG_INVALID2} ${LOCKALL_LEN5} ${DONTLOCK_LEN1}
57@{TWO_SEG_FLAG_INVALID3} ${DONTLOCK_LEN1} ${LOCKALL_INVALID_LOCKFLAG1}
58@{TWO_SEG_FLAG_INVALID4} ${DONTLOCK_LEN2} ${LOCKALL_INVALID_LOCKFLAG2}
59@{TWO_SEG_FLAG_INVALID5} ${DONTLOCK_LEN2} ${LOCKALL_INVALID_LOCKFLAG3}
60@{TWO_SEG_FLAG_INVALID6} ${LOCKALL_LEN3} ${LOCKSAME_INVALID_LOCKFLAG3}
61@{TWO_SEG_FLAG_INVALID7} ${DONTLOCK_LEN2} ${LOCKSAME_INVALID_LOCKFLAG4}
62@{TWO_SEG_FLAG_INVALID8} ${DONTLOCK_INVALID_LOCKFLAG} ${LOCKSAME_INVALID_LEN_BOOL}
63@{TWO_SEG_FLAG_INVALID9} ${DONTLOCK_LEN2} ${LOCKSAME_INVALID_LOCKFLAG4}
64
65@{THREE_SEG_FLAG_1} ${LOCKALL_LEN1} @{TWO_SEG_FLAG_3}
66@{THREE_SEG_FLAG_2} ${LOCKSAME_LEN4} @{TWO_SEG_FLAG_2}
67@{THREE_SEG_FLAG_3} ${DONTLOCK_LEN3} @{TWO_SEG_FLAG_1}
68
69@{FOUR_SEG_FLAG_1} ${LOCKALL_LEN1} @{THREE_SEG_FLAG_2}
70@{FOUR_SEG_FLAG_2} ${LOCKSAME_LEN4} @{THREE_SEG_FLAG_3}
71@{FOUR_SEG_FLAG_3} ${DONTLOCK_LEN3} @{THREE_SEG_FLAG_1}
72
73@{FIVE_SEG_FLAG_1} ${LOCKALL_LEN1} @{FOUR_SEG_FLAG_2}
74@{FIVE_SEG_FLAG_2} ${LOCKSAME_LEN4} @{FOUR_SEG_FLAG_3}
75@{FIVE_SEG_FLAG_3} ${DONTLOCK_LEN3} @{FOUR_SEG_FLAG_1}
76
77@{SIX_SEG_FLAG_1} ${LOCKALL_LEN1} @{FIVE_SEG_FLAG_2}
78@{SIX_SEG_FLAG_2} ${LOCKSAME_LEN4} @{FIVE_SEG_FLAG_3}
79@{SIX_SEG_FLAG_3} ${DONTLOCK_LEN3} @{FIVE_SEG_FLAG_1}
80
81@{SEVEN_SEG_FLAG_1} ${LOCKALL_LEN1} @{SIX_SEG_FLAG_2}
82@{SEVEN_SEG_FLAG_2} ${LOCKSAME_LEN4} @{SIX_SEG_FLAG_3}
83@{SEVEN_SEG_FLAG_3} ${DONTLOCK_LEN3} @{SIX_SEG_FLAG_1}
84
85# Different messages to be verified.
86${PROP_REQ_ERR} is a required property and must be included in the request.
87${PROP_ERR} is not in the list of valid properties for the resource.
88${PROP_TYPE_ERR} is of a different type than the property can accept.
89
90# Build error patterns list.
91@{EMPTY LIST}
92@{ERR_PATTERN1} ${PROP_REQ_ERR} ${PROP_ERR}
93@{ERR_PATTERN2} ${PROP_TYPE_ERR}
94@{ERR_PATTERN3} ${PROP_REQ_ERR} ${PROP_ERR} ${PROP_TYPE_ERR}
95
96# Dictionary of Locks with Transaction ID as key and Session ID as a value.
97&{LOCKS}
98
99
100*** Test Cases ***
101
102Acquire And Release Different Read Locks
103 [Documentation] Acquire and release different read locks.
104 [Tags] Acquire_And_Release_Different_Read_Locks
105 [Template] Acquire And Release Lock
106
107 # lock seg_flags resource_id hmc_id exp_status_code err_msgs new_sess
108 # type req
109 Read ${ONE_SEG_FLAG_ALL} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
110 Read ${ONE_SEG_FLAG_SAME} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
111 Read ${ONE_SEG_FLAG_DONT} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
112 Read ${TWO_SEG_FLAG_1} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
113 Read ${TWO_SEG_FLAG_2} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
114 Read ${TWO_SEG_FLAG_3} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
115 Read ${TWO_SEG_FLAG_4} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
116 Read ${TWO_SEG_FLAG_5} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
117 Read ${THREE_SEG_FLAG_1} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
118 Read ${THREE_SEG_FLAG_2} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
119 Read ${THREE_SEG_FLAG_3} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
120 Read ${FOUR_SEG_FLAG_1} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
121 Read ${FOUR_SEG_FLAG_2} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
122 Read ${FOUR_SEG_FLAG_3} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
123 Read ${FIVE_SEG_FLAG_1} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
124 Read ${FIVE_SEG_FLAG_2} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
125 Read ${FIVE_SEG_FLAG_3} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
126 Read ${SIX_SEG_FLAG_1} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
127 Read ${SIX_SEG_FLAG_2} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
128 Read ${SIX_SEG_FLAG_3} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
129 Read ${SEVEN_SEG_FLAG_1} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
130 Read ${SEVEN_SEG_FLAG_2} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
131 Read ${SEVEN_SEG_FLAG_3} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
132 Read ${LOCKSAME_INVALID_LEN1} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
133 Read ${LOCKSAME_INVALID_LEN_STR} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True}
134 Read ${LOCKSAME_INVALID_LEN_NEG} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True}
135 Read ${LOCKSAME_INVALID_LEN_BOOL} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True}
136 Read ${DONTLOCK_INVALID_LEN_BOOL} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True}
137 Read ${TWO_SEG_FLAG_INVALID1} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
138 Read ${TWO_SEG_FLAG_INVALID2} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
139 Read ${TWO_SEG_FLAG_INVALID3} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
140 Read ${TWO_SEG_FLAG_INVALID4} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
141 Read ${TWO_SEG_FLAG_INVALID5} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN1} ${True}
142 Read ${TWO_SEG_FLAG_INVALID6} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN1} ${True}
143 Read ${TWO_SEG_FLAG_INVALID7} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN3} ${True}
144 Read ${TWO_SEG_FLAG_INVALID8} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN1} ${True}
145 Read ${TWO_SEG_FLAG_INVALID9} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True}
146 Read ${TWO_SEG_FLAG_3} 234 hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True}
147
148
149Acquire And Release Different Write Locks
150 [Documentation] Acquire and release different write locks.
151 [Tags] Acquire_And_Release_Different_Write_Locks
152 [Template] Acquire And Release Lock
153
154 # lock seg_flags resource_id hmc_id exp_status_code err_msgs new_sess
155 # type req
156 Write ${ONE_SEG_FLAG_ALL} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
157 Write ${ONE_SEG_FLAG_SAME} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
158 Write ${ONE_SEG_FLAG_DONT} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
159 Write ${TWO_SEG_FLAG_1} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY LIST} ${True}
160 Write ${TWO_SEG_FLAG_2} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
161 Write ${TWO_SEG_FLAG_3} ${234} hmc-id ${HTTP_OK} ${EMPTY LIST} ${True}
162 Write ${TWO_SEG_FLAG_INVALID4} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
163 Write ${THREE_SEG_FLAG_1} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY LIST} ${True}
164 Write ${THREE_SEG_FLAG_2} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY LIST} ${True}
165 Write ${THREE_SEG_FLAG_3} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY LIST} ${True}
166 Write ${FOUR_SEG_FLAG_1} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY LIST} ${True}
167 Write ${FOUR_SEG_FLAG_2} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY LIST} ${True}
168 Write ${FOUR_SEG_FLAG_3} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY LIST} ${True}
169 Write ${FIVE_SEG_FLAG_1} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY LIST} ${True}
170 Write ${FIVE_SEG_FLAG_2} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY LIST} ${True}
171 Write ${FIVE_SEG_FLAG_3} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY LIST} ${True}
172 Write ${SIX_SEG_FLAG_1} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY LIST} ${True}
173 Write ${SIX_SEG_FLAG_2} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY LIST} ${True}
174 Write ${SIX_SEG_FLAG_3} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY LIST} ${True}
175 Write ${SEVEN_SEG_FLAG_1} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
176 Write ${SEVEN_SEG_FLAG_2} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
177 Write ${SEVEN_SEG_FLAG_3} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
178 Write ${LOCKSAME_INVALID_LEN1} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
179 Write ${LOCKSAME_INVALID_LEN_STR} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
180 Write ${LOCKSAME_INVALID_LEN_NEG} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
181 Write ${LOCKSAME_INVALID_LEN_BOOL} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
182 Write ${DONTLOCK_INVALID_LEN_BOOL} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
183 Write ${TWO_SEG_FLAG_INVALID1} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
184 Write ${TWO_SEG_FLAG_INVALID2} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY LIST} ${True}
185 Write ${TWO_SEG_FLAG_INVALID8} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN1} ${True}
186 Write ${TWO_SEG_FLAG_INVALID5} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN1} ${True}
187 Write ${TWO_SEG_FLAG_INVALID9} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True}
188 Write ${TWO_SEG_FLAG_3} 234 hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True}
189
190
191Verify GetLockList Returns An Empty Record For An Invalid Session Id
192 [Documentation] Verify GetLockList returns an empty record for an invalid session id.
193 [Tags] Verify_GetLockList_Returns_An_Empty_Record_For_An_Invalid_Session_Id
194
195 ${session_location}= Redfish.Get Session Location
196 ${session_id}= Evaluate os.path.basename($session_location) modules=os
197
198 ${records}= Run Keyword Get Locks List ${session_id}
199 ${records}= Run Keyword Get Locks List ZZzZZz9zzZ
200 ${length}= Get Length ${records}
201 Should Be Equal ${length} ${0}
202
203
204*** Keywords ***
205
206Return Data Dictionary For Single Request
207 [Documentation] Return data dictionary for single request.
208 [Arguments] ${lock_type} ${seg_flags} ${resource_id}
209
210 # Description of argument(s):
211 # lock_type Type of lock (Read/Write).
212 # seg_flags Segmentation Flags to identify lock elements under system level in the hierarchy.
213 # resource_id Decimal +ve integer value of maximum 8 hex bytes. Ex: 134, 2048 etc.
214
215 ${SEG_FLAGS_LOCK}= Create Dictionary LockType=${lock_type} SegmentFlags=@{seg_flags}
216 ... ResourceID=${resource_id}
217 ${SEG_FLAGS_ENTRIES}= Create List ${SEG_FLAGS_LOCK}
218 ${LOCK_REQUEST}= Create Dictionary Request=${SEG_FLAGS_ENTRIES}
219 Log To Console ${LOCK_REQUEST}
220
221 [Return] ${LOCK_REQUEST}
222
223
224Acquire Lock On A Given Resource
225 [Documentation] Acquire lock on a given resource.
226 [Arguments] ${lock_type} ${seg_flags} ${resource_id} ${exp_status_code}=${HTTP_OK}
227 ... ${err_msgs}=${EMPTY LIST}
228
229 # Description of argument(s):
230 # lock_type Type of lock (Read/Write).
231 # seg_flags Segmentation Flags to identify lock elements under system level in the hierarchy.
232 # Ex: [{'LockFlag': 'LockAll', 'SegmentLength': 1},
233 # {'LockFlag': 'LockSame', 'SegmentLength': 2}]
234 # resource_id Decimal +ve integer value of maximum 8 hex bytes. Ex: 134, 2048 etc.
235 # exp_status_code expected status code from the AcquireLock request for given inputs.
236
237 ${data}= Return Data Dictionary For Single Request ${lock_type} ${seg_flags} ${resource_id}
238 ${resp}= Redfish.Post /ibm/v1/HMC/LockService/Actions/LockService.AcquireLock
239 ... body=${data} valid_status_codes=[${exp_status_code}]
240
241 Log To Console ${resp.text}
242 ${transaction_id}= Run Keyword If ${exp_status_code} != ${HTTP_OK}
243 ... Set Variable ${0}
244 ... ELSE Load Lock Record And Build Transaction To Session Map ${resp.text}
245
246 Run Keyword If ${exp_status_code} != ${HTTP_OK} and ${err_msgs} != ${EMPTY LIST}
247 ... Load Response And Verify Error ${resp.text} err_msgs=${err_msgs}
248 Append Transaction Id And Session Id To Locks Dictionary ${transaction_id}
249
250 [Return] ${transaction_id}
251
252
253Load Lock Record And Build Transaction To Session Map
254 [Documentation] Load lock record and build transaction to session map.
255 [Arguments] ${resp_text}
256
257 # Description of argument(s):
258 # resp_text Response test from a REST request.
259
260 ${acquire_lock}= Evaluate json.loads('''${resp_text}''') json
261 Append Transaction Id And Session Id To Locks Dictionary ${acquire_lock["TransactionID"]}
262
263 [Return] ${acquire_lock["TransactionID"]}
264
265
266Load Response And Verify Error
267 [Documentation] Load response and verify error.
268 [Arguments] ${error_resp} ${err_msgs}=${EMPTY LIST}
269
270 # Description of argument(s):
271 # error_resp Error response from a REST request.
272 # err_msgs List of error msg patterns.
273
274 ${error_resp}= Replace String ${error_resp} \" \\"
275 ${error_response}= Evaluate json.loads('''${error_resp}''') json
276
277 ${errors}= Get Dictionary Values ${error_response}
278 ${extended_errors}= Create List
279
280 FOR ${error} IN @{errors}
281 Append To List ${extended_errors} ${error[0]["Message"]}
282 END
283
284 Log To Console EXTENDED = ${extended_errors}
285
286 FOR ${exp_error} IN @{err_msgs}
287 Run Keyword Expect List Of Errors In An Extended Errors ${exp_error} ${extended_errors}
288 END
289
290
291Expect List Of Errors In An Extended Errors
292 [Documentation] Expect list of errors in an extended errors.
293 [Arguments] ${exp_error} ${extended_errors}=${EMPTY LIST}
294
295 ${found}= Set Variable ${False}
296
297 FOR ${error_record} IN @{extended_errors}
298 ${found}= Evaluate '${exp_error}' in '${error_record}'
299 Exit For Loop If ${found} == ${True}
300 END
301
302 Should Be True ${found}
303
304
305Append Transaction Id And Session Id To Locks Dictionary
306 [Documentation] Append transaction id and session id to locks dictionary.
307 [Arguments] ${transaction_id}
308
309 # Description of argument(s):
310 # transaction_id Transaction ID created from acquire lock request. Ex: 8, 9 etc.
311
312 ${session_location}= Redfish.Get Session Location
313 ${session_key}= Redfish.Get Session Key
314 ${session_id}= Evaluate os.path.basename($session_location) modules=os
315 Set To Dictionary ${LOCKS} ${${transaction_id}} ${session_id}
316 Log To Console session=${session_id}
317 Log To Console X-AUTH-Token=${session_key}
318 Log To Console LOCKS=${LOCKS}
319
320
321Get Locks List
322 [Documentation] Get locks list.
323 [Arguments] @{sessions} ${exp_status_code}=${HTTP_OK}
324
325 # Description of argument(s):
326 # sessions List of comma separated strings. Ex: ["euHoAQpvNe", "ecTjANqwFr"]
327 # exp_status_code expected status code from the GetLockList request for given inputs.
328
329 ${sessions}= Evaluate json.dumps(${sessions}) json
330 ${data}= Set Variable {"SessionIDs": ${sessions}}
331 ${resp}= Redfish.Post /ibm/v1/HMC/LockService/Actions/LockService.GetLockList
332 ... body=${data} valid_status_codes=[${exp_status_code}]
333
334 ${locks}= Evaluate json.loads('''${resp.text}''') json
335
336 [Return] ${locks["Records"]}
337
338
339Release Lock
340 [Documentation] Release lock.
341 [Arguments] @{transaction_ids} ${release_type}=Transaction ${exp_status_code}=${HTTP_OK}
342
343 # Description of argument(s):
344 # transaction_ids List of transaction ids. Ex: [15, 18]
345 # release_type Release all locks acquired using current session or only given transaction numbers.
346 # Ex: Session, Transaction. Default will be Transaction.
347 # exp_status_code expected status code from the ReleaseLock request for given inputs.
348
349 ${data}= Set Variable {"Type": "${release_type}", "TransactionIDs": ${transaction_ids}}
350 ${data}= Evaluate json.dumps(${data}) json
351 Redfish.Post /ibm/v1/HMC/LockService/Actions/LockService.ReleaseLock
352 ... body=${data} valid_status_codes=[${exp_status_code}]
353
354
355Verify Lock Record
356 [Documentation] Verify lock record.
357 [Arguments] ${lock_found} &{lock_records}
358
359 # Description of argument(s):
360 # lock_found True if lock record is expected to be present, else False.
361 # lock_records A dictionary containing key value pairs of a lock record.
362
363 ${session}= Get From Dictionary ${LOCKS} ${lock_records["TransactionID"]}
364 ${locks}= Run Keyword Get Locks List ${session}
365
366 ${lock_record_found}= Set Variable ${False}
367
368 FOR ${record} IN @{locks}
369 ${record}= Evaluate json.dumps(${record}) json
370 ${record}= Evaluate json.loads('''${record}''') json
371 ${lock_record_found}= Set Variable If ${record["TransactionID"]} == ${lock_records["TransactionID"]}
372 ... ${True} ${False}
373
374 Continue For Loop If ${lock_record_found} == ${False}
375 Dictionaries Should Be Equal ${record} ${lock_records}
376 Exit For Loop
377 END
378
379 Should Be Equal ${lock_record_found} ${lock_found}
380
381
382Acquire And Release Lock
383 [Documentation] Acquire and release lock.
384 [Arguments] ${lock_type} ${seg_flags} ${resource_id} ${hmc_id} ${exp_status_code}=${HTTP_OK}
385 ... ${err_msgs}=${EMPTY LIST} ${new_sess_req}=${True}
386
387 # Description of argument(s):
388 # lock_type Type of lock (Read/Write).
389 # seg_flags Segmentation Flags to identify lock elements under system level in the hierarchy.
390 # Ex: [{'LockFlag': 'LockAll', 'SegmentLength': 1},
391 # {'LockFlag': 'LockSame', 'SegmentLength': 2}]
392 # resource_id Decimal +ve integer value of maximum 8 hex bytes. Ex: 134, 2048 etc.
393 # hmc_id Hardware management console id.
394 # exp_status_code Expected status code from the AcquireLock request for given inputs.
395
396 # Get REST session to BMC.
397 Run Keyword If ${new_sess_req} == ${True} Create New Session
398
399 ${inputs}= Create Dictionary LockType=${lock_type} ResourceID=${resource_id}
400 ... SegmentFlags=${seg_flags} HMCID=${hmc_id}
401
402 ${transaction_id}= Run Keyword Acquire Lock On A Given Resource ${inputs["LockType"]}
403 ... ${inputs["SegmentFlags"]} ${inputs["ResourceID"]} ${exp_status_code} err_msgs=${err_msgs}
404
405 ${session}= Get From Dictionary ${LOCKS} ${transaction_id}
406 ${locks}= Run Keyword Get Locks List ${session}
407
408 Set To Dictionary ${inputs} TransactionID=${${transaction_id}} SessionID=${session}
409 ${lock_found}= Set Variable If ${exp_status_code} == ${HTTP_OK} ${True} ${False}
410 Verify Lock Record ${lock_found} &{inputs}
411
412 Return From Keyword If ${exp_status_code} != ${HTTP_OK}
413
414 Release Lock ${transaction_id}
415 ${locks}= Run Keyword Get Locks List ${session}
416 Verify Lock Record ${False} &{inputs}
417
418 # Delete the session.
419 Redfish.Logout
420
421
422Create New Session
423 [Documentation] Create new session.
424
425 # Delete current session if any.
426 Redfish.Logout
427
428 # Get a redfish session to BMC.
429 Redfish.Login
430 ${session_location}= Redfish.Get Session Location
431 ${session_key}= Redfish.Get Session Key
432
433
434Test Teardown Execution
435 [Documentation] Test teardown execution.
436
437 FFDC On Test Case Fail
438 Redfish.Logout
439