2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2017 AT&T Intellectual Property. All rights
 
   7  * ================================================================================
 
   8  * Licensed under the Apache License, Version 2.0 (the "License");
 
   9  * you may not use this file except in compliance with the License.
 
  10  * You may obtain a copy of the License at
 
  12  *      http://www.apache.org/licenses/LICENSE-2.0
 
  14  * Unless required by applicable law or agreed to in writing, software
 
  15  * distributed under the License is distributed on an "AS IS" BASIS,
 
  16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  17  * See the License for the specific language governing permissions and
 
  18  * limitations under the License.
 
  19  * ============LICENSE_END=========================================================
 
  22 package org.openecomp.appc.lockmanager.api;
 
  24 import org.junit.Assert;
 
  25 import org.junit.Before;
 
  26 import org.junit.Test;
 
  27 import org.openecomp.appc.lockmanager.api.LockException;
 
  28 import org.openecomp.appc.lockmanager.api.LockManager;
 
  30 public abstract class LockManagerBaseTests {
 
  32         protected enum Resource {Resource1, Resource2};
 
  33         protected enum Owner {A, B};
 
  35         protected LockManager lockManager;
 
  38         public void beforeTest() {
 
  39                 lockManager = createLockManager();
 
  42         protected abstract LockManager createLockManager();
 
  45         public void testAcquireLock() throws LockException {
 
  46                 boolean lockRes = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
 
  48                         Assert.assertTrue(lockRes);
 
  50                         lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
 
  55         public void testAcquireLock_AlreadyLockedBySameOwner() throws LockException {
 
  56                 boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
 
  58                         Assert.assertTrue(lockRes1);
 
  59                         boolean lockRes2 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
 
  60                         Assert.assertFalse(lockRes2);
 
  62                         lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
 
  66         @Test(expected = LockException.class)
 
  67         public void testAcquireLock_AlreadyLockedByOtherOwner() throws LockException {
 
  69                 boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
 
  71                         Assert.assertTrue(lockRes1);
 
  72                         boolean lockRes2 = lockManager.acquireLock(Resource.Resource1.name(), owner2);
 
  73                         Assert.assertFalse(lockRes2);
 
  75                         lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
 
  80         public void testAcquireLock_LockDifferentResources() throws LockException {
 
  81                 boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
 
  83                         Assert.assertTrue(lockRes1);
 
  84                         boolean lockRes2 = lockManager.acquireLock(Resource.Resource2.name(), Owner.B.name());
 
  86                                 Assert.assertTrue(lockRes2);
 
  88                                 lockManager.releaseLock(Resource.Resource2.name(), Owner.B.name());
 
  91                         lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
 
  95         @Test(expected = LockException.class)
 
  96         public void testReleaseLock_NotLockedResource() throws LockException {
 
  97                 lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
 
 100         @Test(expected = LockException.class)
 
 101         public void testReleaseLock_LockedByOtherOwnerResource() throws LockException {
 
 102                 boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
 
 104                         Assert.assertTrue(lockRes1);
 
 105                         lockManager.releaseLock(Resource.Resource1.name(), Owner.B.name());
 
 107                         lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
 
 111         @Test(expected = LockException.class)
 
 112         public void testAcquireLock_LockExpired() throws LockException, InterruptedException {
 
 113                 boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name(), 50);
 
 114                 Assert.assertTrue(lockRes1);
 
 116                 lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
 
 120         public void testAcquireLock_OtherLockExpired() throws LockException, InterruptedException {
 
 121                 boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name(), 50);
 
 122                 Assert.assertTrue(lockRes1);
 
 124                 boolean lockRes2 = lockManager.acquireLock(Resource.Resource1.name(), Owner.B.name());
 
 126                         Assert.assertTrue(lockRes2);
 
 128                         lockManager.releaseLock(Resource.Resource1.name(), Owner.B.name());
 
 133         public void testIsLocked_WhenLocked() throws LockException, InterruptedException {
 
 134                 boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name(), 50);
 
 136                 Assert.assertTrue(lockManager.isLocked(Resource.Resource1.name()));
 
 138                         lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
 
 143     @Test(expected = LockException.class)
 
 144         public void testIsLocked_LockExpired() throws LockException, InterruptedException {
 
 145                 boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name(), 50);
 
 146                 Assert.assertTrue(lockRes1);
 
 147                 Assert.assertTrue(lockManager.isLocked(Resource.Resource1.name()));
 
 150                         Assert.assertFalse(lockManager.isLocked(Resource.Resource1.name()));
 
 152                         lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
 
 157         public void testIsLocked_LockReleased() throws LockException, InterruptedException {
 
 158                 boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name(), 50);
 
 159                 lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
 
 160                 Assert.assertFalse(lockManager.isLocked(Resource.Resource1.name()));
 
 164         public void testIsLocked_NoLock() throws LockException, InterruptedException {
 
 165                 Assert.assertFalse(lockManager.isLocked(Resource.Resource1.name()));