1bc331e22SVijay*** Settings *** 2bc331e22SVijay 3bc331e22SVijayDocumentation Test Lock Management feature of Management Console on BMC. 4bc331e22SVijay 5bc331e22SVijayResource ../../lib/resource.robot 6bc331e22SVijayResource ../../lib/bmc_redfish_resource.robot 7bc331e22SVijayResource ../../lib/openbmc_ffdc.robot 8bc331e22SVijay 9355daac7SVijayTest Setup Test Setup Execution 10bc331e22SVijayTest Teardown Test Teardown Execution 11bc331e22SVijay 12bc331e22SVijay*** Variables *** 13bc331e22SVijay 14bc331e22SVijay# Data-sets for testing different test cases. 15bc331e22SVijay&{LOCKALL_LEN1} LockFlag=LockAll SegmentLength=${1} 16bc331e22SVijay&{LOCKALL_LEN2} LockFlag=LockAll SegmentLength=${2} 17bc331e22SVijay&{LOCKALL_LEN3} LockFlag=LockAll SegmentLength=${3} 18bc331e22SVijay&{LOCKALL_LEN4} LockFlag=LockAll SegmentLength=${4} 19bc331e22SVijay&{LOCKALL_LEN5} LockFlag=LockAll SegmentLength=${5} 20bc331e22SVijay 21bc331e22SVijay&{LOCKALL_INVALID_LOCKFLAG1} LockFlag=LocAll SegmentLength=${2} 22bc331e22SVijay&{LOCKALL_INVALID_LOCKFLAG2} LockFlag=LOCKALL SegmentLength=${3} 23bc331e22SVijay&{LOCKALL_INVALID_LOCKFLAG3} LOCKFLAG=LockAll SegmentLength=${4} 24bc331e22SVijay&{LOCKSAME_INVALID_LOCKFLAG3} Lock=LockSame SegmentLength=${1} 25bc331e22SVijay&{LOCKSAME_INVALID_LOCKFLAG4} Lock=LockSame SegmentLength=${True} 26bc331e22SVijay 27bc331e22SVijay&{LOCKSAME_LEN1} LockFlag=LockSame SegmentLength=${1} 28bc331e22SVijay&{LOCKSAME_LEN2} LockFlag=LockSame SegmentLength=${2} 29bc331e22SVijay&{LOCKSAME_LEN3} LockFlag=LockSame SegmentLength=${3} 30bc331e22SVijay&{LOCKSAME_LEN4} LockFlag=LockSame SegmentLength=${4} 31bc331e22SVijay&{LOCKSAME_INVALID_LEN1} LockFlag=LockSame SegmentLength=${0} 32bc331e22SVijay&{LOCKSAME_INVALID_LEN2} LockFlag=LockSame SegmentLength=${5} 33bc331e22SVijay&{LOCKSAME_INVALID_LEN_STR} LockFlag=LockSame SegmentLength=2 34bc331e22SVijay&{LOCKSAME_INVALID_LEN_NEG} LockFlag=LockSame SegmentLength=${-3} 35bc331e22SVijay&{LOCKSAME_INVALID_LEN_BOOL} Lock=LockSame SegmentLength=${True} 36bc331e22SVijay 37bc331e22SVijay&{DONTLOCK_LEN1} LockFlag=DontLock SegmentLength=${1} 38bc331e22SVijay&{DONTLOCK_LEN2} LockFlag=DontLock SegmentLength=${2} 39bc331e22SVijay&{DONTLOCK_LEN3} LockFlag=DontLock SegmentLength=${3} 40bc331e22SVijay&{DONTLOCK_LEN4} LockFlag=DontLock SegmentLength=${4} 41bc331e22SVijay&{DONTLOCK_INVALID_LEN} LockFlag=DontLock SegmentLength=${5} 42bc331e22SVijay&{DONTLOCK_INVALID_LEN_BOOL} LockFlag=DONTLOCK SegmentLength=${False} 43bc331e22SVijay&{DONTLOCK_INVALID_LOCKFLAG} LOCKFLAG=LockAll SegmentLength=${4} 44bc331e22SVijay 45bc331e22SVijay@{ONE_SEG_FLAG_ALL} ${LOCKALL_LEN1} 46bc331e22SVijay@{ONE_SEG_FLAG_SAME} ${LOCKSAME_LEN3} 47bc331e22SVijay@{ONE_SEG_FLAG_DONT} ${DONTLOCK_LEN4} 48bc331e22SVijay 49bc331e22SVijay@{TWO_SEG_FLAG_1} ${LOCKALL_LEN1} ${LOCKSAME_LEN2} 50bc331e22SVijay@{TWO_SEG_FLAG_2} ${DONTLOCK_LEN3} ${LOCKALL_LEN1} 51bc331e22SVijay@{TWO_SEG_FLAG_3} ${DONTLOCK_LEN4} ${LOCKSAME_LEN3} 52bc331e22SVijay@{TWO_SEG_FLAG_4} ${DONTLOCK_INVALID_LEN} ${LOCKSAME_LEN3} 53bc331e22SVijay@{TWO_SEG_FLAG_5} ${DONTLOCK_LEN2} ${LOCKSAME_INVALID_LEN1} 54bc331e22SVijay 55bc331e22SVijay@{TWO_SEG_FLAG_INVALID1} ${DONTLOCK_LEN4} ${LOCKSAME_INVALID_LEN1} 56bc331e22SVijay@{TWO_SEG_FLAG_INVALID2} ${LOCKALL_LEN5} ${DONTLOCK_LEN1} 57bc331e22SVijay@{TWO_SEG_FLAG_INVALID3} ${DONTLOCK_LEN1} ${LOCKALL_INVALID_LOCKFLAG1} 58bc331e22SVijay@{TWO_SEG_FLAG_INVALID4} ${DONTLOCK_LEN2} ${LOCKALL_INVALID_LOCKFLAG2} 59bc331e22SVijay@{TWO_SEG_FLAG_INVALID5} ${DONTLOCK_LEN2} ${LOCKALL_INVALID_LOCKFLAG3} 60bc331e22SVijay@{TWO_SEG_FLAG_INVALID6} ${LOCKALL_LEN3} ${LOCKSAME_INVALID_LOCKFLAG3} 61bc331e22SVijay@{TWO_SEG_FLAG_INVALID7} ${DONTLOCK_LEN2} ${LOCKSAME_INVALID_LOCKFLAG4} 62bc331e22SVijay@{TWO_SEG_FLAG_INVALID8} ${DONTLOCK_INVALID_LOCKFLAG} ${LOCKSAME_INVALID_LEN_BOOL} 63bc331e22SVijay@{TWO_SEG_FLAG_INVALID9} ${DONTLOCK_LEN2} ${LOCKSAME_INVALID_LOCKFLAG4} 64bc331e22SVijay 65bc331e22SVijay@{THREE_SEG_FLAG_1} ${LOCKALL_LEN1} @{TWO_SEG_FLAG_3} 66bc331e22SVijay@{THREE_SEG_FLAG_2} ${LOCKSAME_LEN4} @{TWO_SEG_FLAG_2} 67bc331e22SVijay@{THREE_SEG_FLAG_3} ${DONTLOCK_LEN3} @{TWO_SEG_FLAG_1} 68bc331e22SVijay 69bc331e22SVijay@{FOUR_SEG_FLAG_1} ${LOCKALL_LEN1} @{THREE_SEG_FLAG_2} 70bc331e22SVijay@{FOUR_SEG_FLAG_2} ${LOCKSAME_LEN4} @{THREE_SEG_FLAG_3} 71bc331e22SVijay@{FOUR_SEG_FLAG_3} ${DONTLOCK_LEN3} @{THREE_SEG_FLAG_1} 72bc331e22SVijay 73bc331e22SVijay@{FIVE_SEG_FLAG_1} ${LOCKALL_LEN1} @{FOUR_SEG_FLAG_2} 74bc331e22SVijay@{FIVE_SEG_FLAG_2} ${LOCKSAME_LEN4} @{FOUR_SEG_FLAG_3} 75bc331e22SVijay@{FIVE_SEG_FLAG_3} ${DONTLOCK_LEN3} @{FOUR_SEG_FLAG_1} 76bc331e22SVijay 77bc331e22SVijay@{SIX_SEG_FLAG_1} ${LOCKALL_LEN1} @{FIVE_SEG_FLAG_2} 78bc331e22SVijay@{SIX_SEG_FLAG_2} ${LOCKSAME_LEN4} @{FIVE_SEG_FLAG_3} 79bc331e22SVijay@{SIX_SEG_FLAG_3} ${DONTLOCK_LEN3} @{FIVE_SEG_FLAG_1} 80bc331e22SVijay 81bc331e22SVijay@{SEVEN_SEG_FLAG_1} ${LOCKALL_LEN1} @{SIX_SEG_FLAG_2} 82bc331e22SVijay@{SEVEN_SEG_FLAG_2} ${LOCKSAME_LEN4} @{SIX_SEG_FLAG_3} 83bc331e22SVijay@{SEVEN_SEG_FLAG_3} ${DONTLOCK_LEN3} @{SIX_SEG_FLAG_1} 84bc331e22SVijay 85bc331e22SVijay# Different messages to be verified. 86bc331e22SVijay${PROP_REQ_ERR} is a required property and must be included in the request. 87bc331e22SVijay${PROP_ERR} is not in the list of valid properties for the resource. 88bc331e22SVijay${PROP_TYPE_ERR} is of a different type than the property can accept. 89bc331e22SVijay 90bc331e22SVijay# Build error patterns list. 91355daac7SVijay@{EMPTY_LIST} 92bc331e22SVijay@{ERR_PATTERN1} ${PROP_REQ_ERR} ${PROP_ERR} 93bc331e22SVijay@{ERR_PATTERN2} ${PROP_TYPE_ERR} 94bc331e22SVijay@{ERR_PATTERN3} ${PROP_REQ_ERR} ${PROP_ERR} ${PROP_TYPE_ERR} 95bc331e22SVijay 96bc331e22SVijay# Dictionary of Locks with Transaction ID as key and Session ID as a value. 97bc331e22SVijay&{LOCKS} 98bc331e22SVijay 99bc331e22SVijay 100bc331e22SVijay*** Test Cases *** 101bc331e22SVijay 102bc331e22SVijayAcquire And Release Different Read Locks 103bc331e22SVijay [Documentation] Acquire and release different read locks. 104bc331e22SVijay [Tags] Acquire_And_Release_Different_Read_Locks 105bc331e22SVijay [Template] Acquire And Release Lock 106bc331e22SVijay 107bc331e22SVijay # lock seg_flags resource_id hmc_id exp_status_code err_msgs new_sess 108bc331e22SVijay # type req 109355daac7SVijay Read ${ONE_SEG_FLAG_ALL} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 110355daac7SVijay Read ${ONE_SEG_FLAG_SAME} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 111355daac7SVijay Read ${ONE_SEG_FLAG_DONT} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 112355daac7SVijay Read ${TWO_SEG_FLAG_1} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 113355daac7SVijay Read ${TWO_SEG_FLAG_2} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 114355daac7SVijay Read ${TWO_SEG_FLAG_3} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 115355daac7SVijay Read ${TWO_SEG_FLAG_4} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 116355daac7SVijay Read ${TWO_SEG_FLAG_5} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 117355daac7SVijay Read ${THREE_SEG_FLAG_1} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 118355daac7SVijay Read ${THREE_SEG_FLAG_2} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 119355daac7SVijay Read ${THREE_SEG_FLAG_3} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 120355daac7SVijay Read ${FOUR_SEG_FLAG_1} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 121355daac7SVijay Read ${FOUR_SEG_FLAG_2} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 122355daac7SVijay Read ${FOUR_SEG_FLAG_3} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 123355daac7SVijay Read ${FIVE_SEG_FLAG_1} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 124355daac7SVijay Read ${FIVE_SEG_FLAG_2} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 125355daac7SVijay Read ${FIVE_SEG_FLAG_3} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 126355daac7SVijay Read ${SIX_SEG_FLAG_1} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 127355daac7SVijay Read ${SIX_SEG_FLAG_2} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 128355daac7SVijay Read ${SIX_SEG_FLAG_3} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 129355daac7SVijay Read ${SEVEN_SEG_FLAG_1} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 130355daac7SVijay Read ${SEVEN_SEG_FLAG_2} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 131355daac7SVijay Read ${SEVEN_SEG_FLAG_3} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 132355daac7SVijay Read ${LOCKSAME_INVALID_LEN1} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 133bc331e22SVijay Read ${LOCKSAME_INVALID_LEN_STR} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True} 134bc331e22SVijay Read ${LOCKSAME_INVALID_LEN_NEG} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True} 135bc331e22SVijay Read ${LOCKSAME_INVALID_LEN_BOOL} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True} 136bc331e22SVijay Read ${DONTLOCK_INVALID_LEN_BOOL} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True} 137355daac7SVijay Read ${TWO_SEG_FLAG_INVALID1} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 138355daac7SVijay Read ${TWO_SEG_FLAG_INVALID2} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 139355daac7SVijay Read ${TWO_SEG_FLAG_INVALID3} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 140355daac7SVijay Read ${TWO_SEG_FLAG_INVALID4} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 141bc331e22SVijay Read ${TWO_SEG_FLAG_INVALID5} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN1} ${True} 142bc331e22SVijay Read ${TWO_SEG_FLAG_INVALID6} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN1} ${True} 143bc331e22SVijay Read ${TWO_SEG_FLAG_INVALID7} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN3} ${True} 144bc331e22SVijay Read ${TWO_SEG_FLAG_INVALID8} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN1} ${True} 145bc331e22SVijay Read ${TWO_SEG_FLAG_INVALID9} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True} 146bc331e22SVijay Read ${TWO_SEG_FLAG_3} 234 hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True} 147bc331e22SVijay 148bc331e22SVijay 149bc331e22SVijayAcquire And Release Different Write Locks 150bc331e22SVijay [Documentation] Acquire and release different write locks. 151bc331e22SVijay [Tags] Acquire_And_Release_Different_Write_Locks 152bc331e22SVijay [Template] Acquire And Release Lock 153bc331e22SVijay 154bc331e22SVijay # lock seg_flags resource_id hmc_id exp_status_code err_msgs new_sess 155bc331e22SVijay # type req 156355daac7SVijay Write ${ONE_SEG_FLAG_ALL} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 157355daac7SVijay Write ${ONE_SEG_FLAG_SAME} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 158355daac7SVijay Write ${ONE_SEG_FLAG_DONT} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 159355daac7SVijay Write ${TWO_SEG_FLAG_1} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY_LIST} ${True} 160355daac7SVijay Write ${TWO_SEG_FLAG_2} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 161355daac7SVijay Write ${TWO_SEG_FLAG_3} ${234} hmc-id ${HTTP_OK} ${EMPTY_LIST} ${True} 162355daac7SVijay Write ${TWO_SEG_FLAG_INVALID4} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 163355daac7SVijay Write ${THREE_SEG_FLAG_1} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY_LIST} ${True} 164355daac7SVijay Write ${THREE_SEG_FLAG_2} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY_LIST} ${True} 165355daac7SVijay Write ${THREE_SEG_FLAG_3} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY_LIST} ${True} 166355daac7SVijay Write ${FOUR_SEG_FLAG_1} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY_LIST} ${True} 167355daac7SVijay Write ${FOUR_SEG_FLAG_2} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY_LIST} ${True} 168355daac7SVijay Write ${FOUR_SEG_FLAG_3} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY_LIST} ${True} 169355daac7SVijay Write ${FIVE_SEG_FLAG_1} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY_LIST} ${True} 170355daac7SVijay Write ${FIVE_SEG_FLAG_2} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY_LIST} ${True} 171355daac7SVijay Write ${FIVE_SEG_FLAG_3} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY_LIST} ${True} 172355daac7SVijay Write ${SIX_SEG_FLAG_1} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY_LIST} ${True} 173355daac7SVijay Write ${SIX_SEG_FLAG_2} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY_LIST} ${True} 174355daac7SVijay Write ${SIX_SEG_FLAG_3} ${234} hmc-id ${HTTP_CONFLICT} ${EMPTY_LIST} ${True} 175355daac7SVijay Write ${SEVEN_SEG_FLAG_1} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 176355daac7SVijay Write ${SEVEN_SEG_FLAG_2} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 177355daac7SVijay Write ${SEVEN_SEG_FLAG_3} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 178355daac7SVijay Write ${LOCKSAME_INVALID_LEN1} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 179355daac7SVijay Write ${LOCKSAME_INVALID_LEN_STR} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 180355daac7SVijay Write ${LOCKSAME_INVALID_LEN_NEG} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 181355daac7SVijay Write ${LOCKSAME_INVALID_LEN_BOOL} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 182355daac7SVijay Write ${DONTLOCK_INVALID_LEN_BOOL} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 183355daac7SVijay Write ${TWO_SEG_FLAG_INVALID1} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 184355daac7SVijay Write ${TWO_SEG_FLAG_INVALID2} ${234} hmc-id ${HTTP_BAD_REQUEST} ${EMPTY_LIST} ${True} 185bc331e22SVijay Write ${TWO_SEG_FLAG_INVALID8} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN1} ${True} 186bc331e22SVijay Write ${TWO_SEG_FLAG_INVALID5} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN1} ${True} 187bc331e22SVijay Write ${TWO_SEG_FLAG_INVALID9} ${234} hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True} 188bc331e22SVijay Write ${TWO_SEG_FLAG_3} 234 hmc-id ${HTTP_BAD_REQUEST} ${ERR_PATTERN2} ${True} 189bc331e22SVijay 190bc331e22SVijay 191bc331e22SVijayVerify GetLockList Returns An Empty Record For An Invalid Session Id 192bc331e22SVijay [Documentation] Verify GetLockList returns an empty record for an invalid session id. 193bc331e22SVijay [Tags] Verify_GetLockList_Returns_An_Empty_Record_For_An_Invalid_Session_Id 194bc331e22SVijay 195bc331e22SVijay ${session_location}= Redfish.Get Session Location 196bc331e22SVijay ${session_id}= Evaluate os.path.basename($session_location) modules=os 197bc331e22SVijay 198bc331e22SVijay ${records}= Run Keyword Get Locks List ${session_id} 199bc331e22SVijay ${records}= Run Keyword Get Locks List ZZzZZz9zzZ 200bc331e22SVijay ${length}= Get Length ${records} 201bc331e22SVijay Should Be Equal ${length} ${0} 202bc331e22SVijay 203bc331e22SVijay 204355daac7SVijayVerify Lock Conflicts 205355daac7SVijay [Documentation] Verify lock conflicts. 206355daac7SVijay [Tags] Verify_Lock_Conflicts 207355daac7SVijay [Template] Acquire And Release Lock 208355daac7SVijay 209355daac7SVijay Write ${TWO_SEG_FLAG_2} ${234} hmc-id ${HTTP_OK} ['NA'] ${True} 210355daac7SVijay Read ${TWO_SEG_FLAG_2} ${234} hmc-id ${HTTP_CONFLICT} ['NA'] ${False} 211355daac7SVijay Read ${TWO_SEG_FLAG_2} ${234} hmc-id ${HTTP_OK} ['NA'] ${True} 212355daac7SVijay Write ${TWO_SEG_FLAG_2} ${234} hmc-id ${HTTP_CONFLICT} ['NA'] ${False} 213355daac7SVijay Write ${TWO_SEG_FLAG_2} ${234} hmc-id ${HTTP_OK} ['NA'] ${True} 214355daac7SVijay Write ${TWO_SEG_FLAG_2} ${234} hmc-id ${HTTP_CONFLICT} ['NA'] ${False} 215355daac7SVijay 216355daac7SVijay 217*85610eeeSVijayVerify Persistency Of Locks After BMC Reboot 218*85610eeeSVijay [Documentation] Verify persistency of locks after BMC reboot. 219*85610eeeSVijay [Tags] Verify_Persistency_Of_Locks_After_BMC_Reboot 220*85610eeeSVijay [Template] Locks Persistency Check After BMC Reboot 221*85610eeeSVijay 222*85610eeeSVijay # lock_type seg_flags resource_id 223*85610eeeSVijay Read ${TWO_SEG_FLAG_2} ${234} 224*85610eeeSVijay Write ${TWO_SEG_FLAG_2} ${234} 225*85610eeeSVijay 226*85610eeeSVijay 227bc331e22SVijay*** Keywords *** 228bc331e22SVijay 229*85610eeeSVijayLocks Persistency Check After BMC Reboot 230*85610eeeSVijay [Documentation] Locks persistency check after BMC reboot. 231*85610eeeSVijay [Arguments] ${lock_type} ${seg_flags} ${resource_id} 232*85610eeeSVijay 233*85610eeeSVijay # Description of argument(s): 234*85610eeeSVijay # lock_type Type of lock (Read/Write). 235*85610eeeSVijay # seg_flags Segmentation Flags to identify lock elements under system level in the hierarchy. 236*85610eeeSVijay # resource_id Decimal +ve integer value of maximum 8 hex bytes. Ex: 134, 2048 etc. 237*85610eeeSVijay 238*85610eeeSVijay ${transaction_id}= Run Keyword Acquire Lock On A Given Resource 239*85610eeeSVijay ... ${lock_type} ${seg_flags} ${resource_id} 240*85610eeeSVijay 241*85610eeeSVijay ${locks_prev}= Run Keyword Get Locks List ${SESSION_ID} 242*85610eeeSVijay 243*85610eeeSVijay Initialize OpenBMC 244*85610eeeSVijay OBMC Reboot (off) 245*85610eeeSVijay 246*85610eeeSVijay ${locks_curr}= Run Keyword Get Locks List ${SESSION_ID} 247*85610eeeSVijay Should Be Equal ${locks_prev} ${locks_curr} 248*85610eeeSVijay Release Lock ${transaction_id} 249*85610eeeSVijay 250*85610eeeSVijay 251bc331e22SVijayReturn Data Dictionary For Single Request 252bc331e22SVijay [Documentation] Return data dictionary for single request. 253bc331e22SVijay [Arguments] ${lock_type} ${seg_flags} ${resource_id} 254bc331e22SVijay 255bc331e22SVijay # Description of argument(s): 256bc331e22SVijay # lock_type Type of lock (Read/Write). 257bc331e22SVijay # seg_flags Segmentation Flags to identify lock elements under system level in the hierarchy. 258bc331e22SVijay # resource_id Decimal +ve integer value of maximum 8 hex bytes. Ex: 134, 2048 etc. 259bc331e22SVijay 260bc331e22SVijay ${SEG_FLAGS_LOCK}= Create Dictionary LockType=${lock_type} SegmentFlags=@{seg_flags} 261bc331e22SVijay ... ResourceID=${resource_id} 262bc331e22SVijay ${SEG_FLAGS_ENTRIES}= Create List ${SEG_FLAGS_LOCK} 263bc331e22SVijay ${LOCK_REQUEST}= Create Dictionary Request=${SEG_FLAGS_ENTRIES} 264bc331e22SVijay Log To Console ${LOCK_REQUEST} 265bc331e22SVijay 266bc331e22SVijay [Return] ${LOCK_REQUEST} 267bc331e22SVijay 268bc331e22SVijay 269bc331e22SVijayAcquire Lock On A Given Resource 270bc331e22SVijay [Documentation] Acquire lock on a given resource. 271bc331e22SVijay [Arguments] ${lock_type} ${seg_flags} ${resource_id} ${exp_status_code}=${HTTP_OK} 272355daac7SVijay ... ${err_msgs}=${EMPTY_LIST} 273bc331e22SVijay 274bc331e22SVijay # Description of argument(s): 275bc331e22SVijay # lock_type Type of lock (Read/Write). 276bc331e22SVijay # seg_flags Segmentation Flags to identify lock elements under system level in the hierarchy. 277bc331e22SVijay # Ex: [{'LockFlag': 'LockAll', 'SegmentLength': 1}, 278bc331e22SVijay # {'LockFlag': 'LockSame', 'SegmentLength': 2}] 279bc331e22SVijay # resource_id Decimal +ve integer value of maximum 8 hex bytes. Ex: 134, 2048 etc. 280355daac7SVijay # exp_status_code Expected status code from the AcquireLock request for given inputs. 281355daac7SVijay # err_msgs List of expected error messages. 282bc331e22SVijay 283bc331e22SVijay ${data}= Return Data Dictionary For Single Request ${lock_type} ${seg_flags} ${resource_id} 284bc331e22SVijay ${resp}= Redfish.Post /ibm/v1/HMC/LockService/Actions/LockService.AcquireLock 285bc331e22SVijay ... body=${data} valid_status_codes=[${exp_status_code}] 286bc331e22SVijay 287bc331e22SVijay ${transaction_id}= Run Keyword If ${exp_status_code} != ${HTTP_OK} 288bc331e22SVijay ... Set Variable ${0} 289bc331e22SVijay ... ELSE Load Lock Record And Build Transaction To Session Map ${resp.text} 290bc331e22SVijay 291355daac7SVijay Run Keyword If ${exp_status_code} == ${HTTP_CONFLICT} and ${err_msgs} == ['NA'] 292355daac7SVijay ... Load Response And Verify Conflict ${resp.text} ${SESSION_ID} 293355daac7SVijay ... ELSE Run Keyword If ${exp_status_code} != ${HTTP_OK} and ${err_msgs} != ${EMPTY_LIST} 294bc331e22SVijay ... Load Response And Verify Error ${resp.text} err_msgs=${err_msgs} 295355daac7SVijay 296bc331e22SVijay Append Transaction Id And Session Id To Locks Dictionary ${transaction_id} 297bc331e22SVijay 298bc331e22SVijay [Return] ${transaction_id} 299bc331e22SVijay 300bc331e22SVijay 301bc331e22SVijayLoad Lock Record And Build Transaction To Session Map 302bc331e22SVijay [Documentation] Load lock record and build transaction to session map. 303bc331e22SVijay [Arguments] ${resp_text} 304bc331e22SVijay 305bc331e22SVijay # Description of argument(s): 306bc331e22SVijay # resp_text Response test from a REST request. 307bc331e22SVijay 308bc331e22SVijay ${acquire_lock}= Evaluate json.loads('''${resp_text}''') json 309bc331e22SVijay Append Transaction Id And Session Id To Locks Dictionary ${acquire_lock["TransactionID"]} 310bc331e22SVijay 311bc331e22SVijay [Return] ${acquire_lock["TransactionID"]} 312bc331e22SVijay 313bc331e22SVijay 314bc331e22SVijayLoad Response And Verify Error 315bc331e22SVijay [Documentation] Load response and verify error. 316355daac7SVijay [Arguments] ${error_resp} ${err_msgs}=${EMPTY_LIST} 317bc331e22SVijay 318bc331e22SVijay # Description of argument(s): 319bc331e22SVijay # error_resp Error response from a REST request. 320bc331e22SVijay # err_msgs List of error msg patterns. 321bc331e22SVijay 322bc331e22SVijay ${error_resp}= Replace String ${error_resp} \" \\" 323bc331e22SVijay ${error_response}= Evaluate json.loads('''${error_resp}''') json 324bc331e22SVijay 325bc331e22SVijay ${errors}= Get Dictionary Values ${error_response} 326bc331e22SVijay ${extended_errors}= Create List 327bc331e22SVijay 328bc331e22SVijay FOR ${error} IN @{errors} 329bc331e22SVijay Append To List ${extended_errors} ${error[0]["Message"]} 330bc331e22SVijay END 331bc331e22SVijay 332bc331e22SVijay Log To Console EXTENDED = ${extended_errors} 333bc331e22SVijay 334bc331e22SVijay FOR ${exp_error} IN @{err_msgs} 335bc331e22SVijay Run Keyword Expect List Of Errors In An Extended Errors ${exp_error} ${extended_errors} 336bc331e22SVijay END 337bc331e22SVijay 338bc331e22SVijay 339bc331e22SVijayExpect List Of Errors In An Extended Errors 340bc331e22SVijay [Documentation] Expect list of errors in an extended errors. 341355daac7SVijay [Arguments] ${exp_error} ${extended_errors}=${EMPTY_LIST} 342bc331e22SVijay 343bc331e22SVijay ${found}= Set Variable ${False} 344bc331e22SVijay 345bc331e22SVijay FOR ${error_record} IN @{extended_errors} 346bc331e22SVijay ${found}= Evaluate '${exp_error}' in '${error_record}' 347bc331e22SVijay Exit For Loop If ${found} == ${True} 348bc331e22SVijay END 349bc331e22SVijay 350bc331e22SVijay Should Be True ${found} 351bc331e22SVijay 352bc331e22SVijay 353bc331e22SVijayAppend Transaction Id And Session Id To Locks Dictionary 354bc331e22SVijay [Documentation] Append transaction id and session id to locks dictionary. 355bc331e22SVijay [Arguments] ${transaction_id} 356bc331e22SVijay 357bc331e22SVijay # Description of argument(s): 358bc331e22SVijay # transaction_id Transaction ID created from acquire lock request. Ex: 8, 9 etc. 359bc331e22SVijay 360bc331e22SVijay Set To Dictionary ${LOCKS} ${${transaction_id}} ${session_id} 361bc331e22SVijay 362bc331e22SVijay 363bc331e22SVijayGet Locks List 364bc331e22SVijay [Documentation] Get locks list. 365bc331e22SVijay [Arguments] @{sessions} ${exp_status_code}=${HTTP_OK} 366bc331e22SVijay 367bc331e22SVijay # Description of argument(s): 368bc331e22SVijay # sessions List of comma separated strings. Ex: ["euHoAQpvNe", "ecTjANqwFr"] 369bc331e22SVijay # exp_status_code expected status code from the GetLockList request for given inputs. 370bc331e22SVijay 371bc331e22SVijay ${sessions}= Evaluate json.dumps(${sessions}) json 372bc331e22SVijay ${data}= Set Variable {"SessionIDs": ${sessions}} 373bc331e22SVijay ${resp}= Redfish.Post /ibm/v1/HMC/LockService/Actions/LockService.GetLockList 374bc331e22SVijay ... body=${data} valid_status_codes=[${exp_status_code}] 375bc331e22SVijay 376bc331e22SVijay ${locks}= Evaluate json.loads('''${resp.text}''') json 377bc331e22SVijay 378bc331e22SVijay [Return] ${locks["Records"]} 379bc331e22SVijay 380bc331e22SVijay 381bc331e22SVijayRelease Lock 382bc331e22SVijay [Documentation] Release lock. 383bc331e22SVijay [Arguments] @{transaction_ids} ${release_type}=Transaction ${exp_status_code}=${HTTP_OK} 384bc331e22SVijay 385bc331e22SVijay # Description of argument(s): 386bc331e22SVijay # transaction_ids List of transaction ids. Ex: [15, 18] 387bc331e22SVijay # release_type Release all locks acquired using current session or only given transaction numbers. 388bc331e22SVijay # Ex: Session, Transaction. Default will be Transaction. 389bc331e22SVijay # exp_status_code expected status code from the ReleaseLock request for given inputs. 390bc331e22SVijay 391bc331e22SVijay ${data}= Set Variable {"Type": "${release_type}", "TransactionIDs": ${transaction_ids}} 392bc331e22SVijay ${data}= Evaluate json.dumps(${data}) json 393bc331e22SVijay Redfish.Post /ibm/v1/HMC/LockService/Actions/LockService.ReleaseLock 394bc331e22SVijay ... body=${data} valid_status_codes=[${exp_status_code}] 395bc331e22SVijay 396bc331e22SVijay 397bc331e22SVijayVerify Lock Record 398bc331e22SVijay [Documentation] Verify lock record. 399bc331e22SVijay [Arguments] ${lock_found} &{lock_records} 400bc331e22SVijay 401bc331e22SVijay # Description of argument(s): 402bc331e22SVijay # lock_found True if lock record is expected to be present, else False. 403bc331e22SVijay # lock_records A dictionary containing key value pairs of a lock record. 404bc331e22SVijay 405bc331e22SVijay ${session}= Get From Dictionary ${LOCKS} ${lock_records["TransactionID"]} 406bc331e22SVijay ${locks}= Run Keyword Get Locks List ${session} 407bc331e22SVijay 408bc331e22SVijay ${lock_record_found}= Set Variable ${False} 409bc331e22SVijay 410bc331e22SVijay FOR ${record} IN @{locks} 411bc331e22SVijay ${record}= Evaluate json.dumps(${record}) json 412bc331e22SVijay ${record}= Evaluate json.loads('''${record}''') json 413bc331e22SVijay ${lock_record_found}= Set Variable If ${record["TransactionID"]} == ${lock_records["TransactionID"]} 414bc331e22SVijay ... ${True} ${False} 415bc331e22SVijay 416bc331e22SVijay Continue For Loop If ${lock_record_found} == ${False} 417bc331e22SVijay Dictionaries Should Be Equal ${record} ${lock_records} 418bc331e22SVijay Exit For Loop 419bc331e22SVijay END 420bc331e22SVijay 421bc331e22SVijay Should Be Equal ${lock_record_found} ${lock_found} 422bc331e22SVijay 423bc331e22SVijay 424355daac7SVijayLoad Response And Verify Conflict 425355daac7SVijay [Documentation] Load response and verify conflict. 426355daac7SVijay [Arguments] ${conflict_resp} ${sessions} 427355daac7SVijay 428355daac7SVijay # Description of argument(s): 429355daac7SVijay # conflict_resp Conflict response from a REST request. 430355daac7SVijay # Example : { "Record": { "HMCID": "hmc-id", "LockType": "Write", "ResourceID": 234, 431355daac7SVijay # "SegmentFlags": [ { "LockFlag": "DontLock", "SegmentLength": 3}, 432355daac7SVijay # { "LockFlag": "LockAll", "SegmentLength": 1}], 433355daac7SVijay # "SessionID": "B6geYEdo6T", "TransactionID": 104 } } 434355daac7SVijay # sessions Comma separated list of sessions 435355daac7SVijay 436355daac7SVijay ${curr_locks}= Run Keyword Get Locks List ${sessions} 437355daac7SVijay ${conflict_resp}= Replace String ${conflict_resp} \" \\" 438355daac7SVijay ${conflict_response}= Evaluate json.loads('''${conflict_resp}''') json 439355daac7SVijay 440355daac7SVijay ${conflicts}= Get Dictionary Values ${conflict_response} 441355daac7SVijay List Should Contain Value ${conflicts} ${PREV_INPUTS} 442355daac7SVijay 443355daac7SVijay 444bc331e22SVijayAcquire And Release Lock 445bc331e22SVijay [Documentation] Acquire and release lock. 446bc331e22SVijay [Arguments] ${lock_type} ${seg_flags} ${resource_id} ${hmc_id} ${exp_status_code}=${HTTP_OK} 447355daac7SVijay ... ${err_msgs}=${EMPTY_LIST} ${new_sess_req}=${True} 448bc331e22SVijay 449bc331e22SVijay # Description of argument(s): 450bc331e22SVijay # lock_type Type of lock (Read/Write). 451bc331e22SVijay # seg_flags Segmentation Flags to identify lock elements under system level in the hierarchy. 452bc331e22SVijay # Ex: [{'LockFlag': 'LockAll', 'SegmentLength': 1}, 453bc331e22SVijay # {'LockFlag': 'LockSame', 'SegmentLength': 2}] 454bc331e22SVijay # resource_id Decimal +ve integer value of maximum 8 hex bytes. Ex: 134, 2048 etc. 455bc331e22SVijay # hmc_id Hardware management console id. 456bc331e22SVijay # exp_status_code Expected status code from the AcquireLock request for given inputs. 457355daac7SVijay # err_msgs List of expected error messages. 458355daac7SVijay # new_sess_req Create a new session before acquiring a lock if True. 459bc331e22SVijay 460bc331e22SVijay # Get REST session to BMC. 461bc331e22SVijay Run Keyword If ${new_sess_req} == ${True} Create New Session 462bc331e22SVijay 463bc331e22SVijay ${inputs}= Create Dictionary LockType=${lock_type} ResourceID=${resource_id} 464bc331e22SVijay ... SegmentFlags=${seg_flags} HMCID=${hmc_id} 465bc331e22SVijay 466bc331e22SVijay ${transaction_id}= Run Keyword Acquire Lock On A Given Resource ${inputs["LockType"]} 467bc331e22SVijay ... ${inputs["SegmentFlags"]} ${inputs["ResourceID"]} ${exp_status_code} err_msgs=${err_msgs} 468bc331e22SVijay 469355daac7SVijay # Each lock request from a new session is saved so that for next lock request using same session 470355daac7SVijay # can refer to previous lock data to verify conflict records if any. 471355daac7SVijay Run Keyword If ${new_sess_req} == ${True} Set Test Variable Dictionary Of Previous Lock Request 472355daac7SVijay ... ${lock_type} ${seg_flags} ${resource_id} ${hmc_id} ${SESSION_ID} ${transaction_id} 473bc331e22SVijay 474355daac7SVijay ${session}= Get From Dictionary ${LOCKS} ${transaction_id} 475bc331e22SVijay Set To Dictionary ${inputs} TransactionID=${${transaction_id}} SessionID=${session} 476355daac7SVijay 477bc331e22SVijay ${lock_found}= Set Variable If ${exp_status_code} == ${HTTP_OK} ${True} ${False} 478bc331e22SVijay Verify Lock Record ${lock_found} &{inputs} 479bc331e22SVijay 480355daac7SVijay Return From Keyword If '${exp_status_code}' != '${HTTP_OK}' or ${err_msgs} == ['NA'] 481bc331e22SVijay 482bc331e22SVijay Release Lock ${transaction_id} 483bc331e22SVijay Verify Lock Record ${False} &{inputs} 484bc331e22SVijay 485bc331e22SVijay # Delete the session. 486bc331e22SVijay Redfish.Logout 487bc331e22SVijay 488bc331e22SVijay 489bc331e22SVijayCreate New Session 490bc331e22SVijay [Documentation] Create new session. 491bc331e22SVijay 492355daac7SVijay # Delete current session. 493bc331e22SVijay Redfish.Logout 494bc331e22SVijay 495bc331e22SVijay # Get a redfish session to BMC. 496bc331e22SVijay Redfish.Login 497355daac7SVijay ${session_id} ${session_key}= Return Session Id And Session Key 498355daac7SVijay Set Test Variable ${SESSION_ID} ${session_id} 499355daac7SVijay Set Test Variable ${SESSION_KEY} ${session_key} 500bc331e22SVijay 501bc331e22SVijay 502bc331e22SVijayTest Teardown Execution 503bc331e22SVijay [Documentation] Test teardown execution. 504bc331e22SVijay 505bc331e22SVijay FFDC On Test Case Fail 506bc331e22SVijay Redfish.Logout 507bc331e22SVijay 508355daac7SVijay 509355daac7SVijayReturn Session Id And Session Key 510355daac7SVijay [Documentation] Return session id and sesion key. 511355daac7SVijay 512355daac7SVijay ${session_location}= Redfish.Get Session Location 513355daac7SVijay ${session_id}= Evaluate os.path.basename($session_location) modules=os 514355daac7SVijay ${session_key}= Redfish.Get Session Key 515355daac7SVijay 516355daac7SVijay [Return] ${session_id} ${session_key} 517355daac7SVijay 518355daac7SVijay 519355daac7SVijayTest Setup Execution 520355daac7SVijay [Documentation] Test setup execution. 521355daac7SVijay 522355daac7SVijay Create New Session 523355daac7SVijay 524355daac7SVijay Set Test Variable Dictionary Of Previous Lock Request ${EMPTY} ${EMPTY_LIST} ${EMPTY} ${EMPTY} 525355daac7SVijay ... ${EMPTY} ${EMPTY} 526355daac7SVijay 527355daac7SVijay 528355daac7SVijaySet Test Variable Dictionary Of Previous Lock Request 529355daac7SVijay [Documentation] Set test variable dictionary of previous lock request. 530355daac7SVijay [Arguments] ${lock_type} ${seg_flags} ${resource_id} ${hmc_id} ${session_id} ${transaction_id} 531355daac7SVijay 532355daac7SVijay # Description of argument(s): 533355daac7SVijay # lock_type Type of lock (Read/Write). 534355daac7SVijay # seg_flags Segmentation Flags to identify lock elements under system level in the hierarchy. 535355daac7SVijay # Ex: [{'LockFlag': 'LockAll', 'SegmentLength': 1}, 536355daac7SVijay # {'LockFlag': 'LockSame', 'SegmentLength': 2}] 537355daac7SVijay # resource_id Decimal +ve integer value of maximum 8 hex bytes. Ex: 134, 2048 etc. 538355daac7SVijay # hmc_id Hardware management console id. 539355daac7SVijay # session_id Session id of the transaction. 540355daac7SVijay # transaction_id Transaction_id of the lock request. 541355daac7SVijay 542355daac7SVijay ${prev_inputs}= Create Dictionary LockType=${lock_type} ResourceID=${resource_id} 543355daac7SVijay ... SegmentFlags=${seg_flags} HMCID=${hmc_id} SessionID=${session_id} TransactionID=${transaction_id} 544355daac7SVijay 545355daac7SVijay Set Test Variable ${PREV_INPUTS} ${prev_inputs} 546