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