summaryrefslogtreecommitdiffstats
path: root/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java')
-rw-r--r--appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/api/LockManagerBaseTests.java264
-rw-r--r--appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/MySqlLockManagerBaseTests.java98
-rw-r--r--appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/optimistic/MySqlLockManagerMock.java178
-rw-r--r--appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/optimistic/TestMySqlLockManager.java384
-rw-r--r--appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/pessimistic/MySqlLockManagerMock.java200
-rw-r--r--appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/pessimistic/TestMySqlLockManager.java18
6 files changed, 571 insertions, 571 deletions
diff --git a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/api/LockManagerBaseTests.java b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/api/LockManagerBaseTests.java
index 9f7e84c43..8a53372ce 100644
--- a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/api/LockManagerBaseTests.java
+++ b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/api/LockManagerBaseTests.java
@@ -32,139 +32,139 @@ import org.onap.appc.lockmanager.api.LockManager;
public abstract class LockManagerBaseTests {
- protected enum Resource {Resource1, Resource2};
- protected enum Owner {A, B};
-
- protected LockManager lockManager;
-
- @Before
- public void beforeTest() {
- lockManager = createLockManager();
- }
-
- protected abstract LockManager createLockManager();
-
- @Test
- public void testAcquireLock() throws LockException {
- boolean lockRes = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
- try {
- Assert.assertTrue(lockRes);
- } finally {
- lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
- }
- }
-
- @Test
- public void testAcquireLock_AlreadyLockedBySameOwner() throws LockException {
- boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
- try {
- Assert.assertTrue(lockRes1);
- boolean lockRes2 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
- Assert.assertFalse(lockRes2);
- } finally {
- lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
- }
- }
-
- @Test(expected = LockException.class)
- public void testAcquireLock_AlreadyLockedByOtherOwner() throws LockException {
- String owner2 = "B";
- boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
- try {
- Assert.assertTrue(lockRes1);
- boolean lockRes2 = lockManager.acquireLock(Resource.Resource1.name(), owner2);
- Assert.assertFalse(lockRes2);
- } finally {
- lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
- }
- }
-
- @Test
- public void testAcquireLock_LockDifferentResources() throws LockException {
- boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
- try {
- Assert.assertTrue(lockRes1);
- boolean lockRes2 = lockManager.acquireLock(Resource.Resource2.name(), Owner.B.name());
- try {
- Assert.assertTrue(lockRes2);
- } finally {
- lockManager.releaseLock(Resource.Resource2.name(), Owner.B.name());
- }
- } finally {
- lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
- }
- }
-
- @Test(expected = LockException.class)
- public void testReleaseLock_NotLockedResource() throws LockException {
- lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
- }
-
- @Test(expected = LockException.class)
- public void testReleaseLock_LockedByOtherOwnerResource() throws LockException {
- boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
- try {
- Assert.assertTrue(lockRes1);
- lockManager.releaseLock(Resource.Resource1.name(), Owner.B.name());
- } finally {
- lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
- }
- }
-
- @Test(expected = LockException.class)
- public void testAcquireLock_LockExpired() throws LockException, InterruptedException {
- boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name(), 50);
- Assert.assertTrue(lockRes1);
- Thread.sleep(1000);
- lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
- }
-
- @Test
- public void testAcquireLock_OtherLockExpired() throws LockException, InterruptedException {
- boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name(), 50);
- Assert.assertTrue(lockRes1);
- Thread.sleep(1000);
- boolean lockRes2 = lockManager.acquireLock(Resource.Resource1.name(), Owner.B.name());
- try {
- Assert.assertTrue(lockRes2);
- }finally {
- lockManager.releaseLock(Resource.Resource1.name(), Owner.B.name());
- }
- }
-
- @Test
- public void testIsLocked_WhenLocked() throws LockException, InterruptedException {
- boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name(), 50);
- try {
- Assert.assertTrue(lockManager.isLocked(Resource.Resource1.name()));
- }finally {
- lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
- }
- }
+ protected enum Resource {Resource1, Resource2};
+ protected enum Owner {A, B};
+
+ protected LockManager lockManager;
+
+ @Before
+ public void beforeTest() {
+ lockManager = createLockManager();
+ }
+
+ protected abstract LockManager createLockManager();
+
+ @Test
+ public void testAcquireLock() throws LockException {
+ boolean lockRes = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
+ try {
+ Assert.assertTrue(lockRes);
+ } finally {
+ lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
+ }
+ }
+
+ @Test
+ public void testAcquireLock_AlreadyLockedBySameOwner() throws LockException {
+ boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
+ try {
+ Assert.assertTrue(lockRes1);
+ boolean lockRes2 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
+ Assert.assertFalse(lockRes2);
+ } finally {
+ lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
+ }
+ }
+
+ @Test(expected = LockException.class)
+ public void testAcquireLock_AlreadyLockedByOtherOwner() throws LockException {
+ String owner2 = "B";
+ boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
+ try {
+ Assert.assertTrue(lockRes1);
+ boolean lockRes2 = lockManager.acquireLock(Resource.Resource1.name(), owner2);
+ Assert.assertFalse(lockRes2);
+ } finally {
+ lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
+ }
+ }
+
+ @Test
+ public void testAcquireLock_LockDifferentResources() throws LockException {
+ boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
+ try {
+ Assert.assertTrue(lockRes1);
+ boolean lockRes2 = lockManager.acquireLock(Resource.Resource2.name(), Owner.B.name());
+ try {
+ Assert.assertTrue(lockRes2);
+ } finally {
+ lockManager.releaseLock(Resource.Resource2.name(), Owner.B.name());
+ }
+ } finally {
+ lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
+ }
+ }
+
+ @Test(expected = LockException.class)
+ public void testReleaseLock_NotLockedResource() throws LockException {
+ lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
+ }
+
+ @Test(expected = LockException.class)
+ public void testReleaseLock_LockedByOtherOwnerResource() throws LockException {
+ boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
+ try {
+ Assert.assertTrue(lockRes1);
+ lockManager.releaseLock(Resource.Resource1.name(), Owner.B.name());
+ } finally {
+ lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
+ }
+ }
+
+ @Test(expected = LockException.class)
+ public void testAcquireLock_LockExpired() throws LockException, InterruptedException {
+ boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name(), 50);
+ Assert.assertTrue(lockRes1);
+ Thread.sleep(1000);
+ lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
+ }
+
+ @Test
+ public void testAcquireLock_OtherLockExpired() throws LockException, InterruptedException {
+ boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name(), 50);
+ Assert.assertTrue(lockRes1);
+ Thread.sleep(1000);
+ boolean lockRes2 = lockManager.acquireLock(Resource.Resource1.name(), Owner.B.name());
+ try {
+ Assert.assertTrue(lockRes2);
+ }finally {
+ lockManager.releaseLock(Resource.Resource1.name(), Owner.B.name());
+ }
+ }
+
+ @Test
+ public void testIsLocked_WhenLocked() throws LockException, InterruptedException {
+ boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name(), 50);
+ try {
+ Assert.assertTrue(lockManager.isLocked(Resource.Resource1.name()));
+ }finally {
+ lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
+ }
+ }
@Test(expected = LockException.class)
- public void testIsLocked_LockExpired() throws LockException, InterruptedException {
- boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name(), 50);
- Assert.assertTrue(lockRes1);
- Assert.assertTrue(lockManager.isLocked(Resource.Resource1.name()));
- Thread.sleep(1000);
- try {
- Assert.assertFalse(lockManager.isLocked(Resource.Resource1.name()));
- }finally {
- lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
- }
- }
-
- @Test
- public void testIsLocked_LockReleased() throws LockException, InterruptedException {
- boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name(), 50);
- lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
- Assert.assertFalse(lockManager.isLocked(Resource.Resource1.name()));
- }
-
- @Test
- public void testIsLocked_NoLock() throws LockException, InterruptedException {
- Assert.assertFalse(lockManager.isLocked(Resource.Resource1.name()));
- }
+ public void testIsLocked_LockExpired() throws LockException, InterruptedException {
+ boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name(), 50);
+ Assert.assertTrue(lockRes1);
+ Assert.assertTrue(lockManager.isLocked(Resource.Resource1.name()));
+ Thread.sleep(1000);
+ try {
+ Assert.assertFalse(lockManager.isLocked(Resource.Resource1.name()));
+ }finally {
+ lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
+ }
+ }
+
+ @Test
+ public void testIsLocked_LockReleased() throws LockException, InterruptedException {
+ boolean lockRes1 = lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name(), 50);
+ lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
+ Assert.assertFalse(lockManager.isLocked(Resource.Resource1.name()));
+ }
+
+ @Test
+ public void testIsLocked_NoLock() throws LockException, InterruptedException {
+ Assert.assertFalse(lockManager.isLocked(Resource.Resource1.name()));
+ }
}
diff --git a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/MySqlLockManagerBaseTests.java b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/MySqlLockManagerBaseTests.java
index b8cd95b94..12b587bfa 100644
--- a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/MySqlLockManagerBaseTests.java
+++ b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/MySqlLockManagerBaseTests.java
@@ -38,59 +38,59 @@ import java.sql.SQLException;
public abstract class MySqlLockManagerBaseTests extends LockManagerBaseTests {
- private static final boolean USE_REAL_DB = Boolean.getBoolean("lockmanager.tests.useRealDb");
- private static final String TABLE_LOCK_MANAGEMENT = "TEST_LOCK_MANAGEMENT";
- private static final String JDBC_URL = System.getProperty("lockmanager.tests.jdbcUrl", "jdbc:mysql://192.168.1.2/test");
- private static final String JDBC_USERNAME = System.getProperty("lockmanager.tests.jdbcUsername", "test");
- private static final String JDBC_PASSWORD = System.getProperty("lockmanager.tests.jdbcPassword", "123456");
+ private static final boolean USE_REAL_DB = Boolean.getBoolean("lockmanager.tests.useRealDb");
+ private static final String TABLE_LOCK_MANAGEMENT = "TEST_LOCK_MANAGEMENT";
+ private static final String JDBC_URL = System.getProperty("lockmanager.tests.jdbcUrl", "jdbc:mysql://192.168.1.2/test");
+ private static final String JDBC_USERNAME = System.getProperty("lockmanager.tests.jdbcUsername", "test");
+ private static final String JDBC_PASSWORD = System.getProperty("lockmanager.tests.jdbcPassword", "123456");
- protected static final int CONCURRENT_TEST_WAIT_TIME = 10; // secs
+ protected static final int CONCURRENT_TEST_WAIT_TIME = 10; // secs
- @Rule
- public TestName testName = new TestName();
+ @Rule
+ public TestName testName = new TestName();
- @Override
- protected LockManager createLockManager() {
- JdbcLockManager jdbcLockManager = createJdbcLockManager(USE_REAL_DB);
- DefaultJdbcConnectionFactory connectionFactory = new MySqlConnectionFactory();
- connectionFactory.setJdbcURL(JDBC_URL);
- connectionFactory.setJdbcUserName(JDBC_USERNAME);
- connectionFactory.setJdbcPassword(JDBC_PASSWORD);
- jdbcLockManager.setConnectionFactory(connectionFactory);
- jdbcLockManager.setTableName(TABLE_LOCK_MANAGEMENT);
- System.out.println("=> Running LockManager test [" + jdbcLockManager.getClass().getName() + "." + testName.getMethodName() + "]" + (USE_REAL_DB ? ". JDBC URL is [" + JDBC_URL + "]" : ""));
- clearTestLocks(jdbcLockManager);
- return jdbcLockManager;
- }
+ @Override
+ protected LockManager createLockManager() {
+ JdbcLockManager jdbcLockManager = createJdbcLockManager(USE_REAL_DB);
+ DefaultJdbcConnectionFactory connectionFactory = new MySqlConnectionFactory();
+ connectionFactory.setJdbcURL(JDBC_URL);
+ connectionFactory.setJdbcUserName(JDBC_USERNAME);
+ connectionFactory.setJdbcPassword(JDBC_PASSWORD);
+ jdbcLockManager.setConnectionFactory(connectionFactory);
+ jdbcLockManager.setTableName(TABLE_LOCK_MANAGEMENT);
+ System.out.println("=> Running LockManager test [" + jdbcLockManager.getClass().getName() + "." + testName.getMethodName() + "]" + (USE_REAL_DB ? ". JDBC URL is [" + JDBC_URL + "]" : ""));
+ clearTestLocks(jdbcLockManager);
+ return jdbcLockManager;
+ }
- protected abstract JdbcLockManager createJdbcLockManager(boolean useRealDb);
+ protected abstract JdbcLockManager createJdbcLockManager(boolean useRealDb);
- protected boolean setSynchronizer(Synchronizer synchronizer) {
- if(!(lockManager instanceof SynchronizerReceiver)) {
- System.err.println("Skipping concurrency test [" + testName.getMethodName() + "] for LockManager of type " + lockManager.getClass());
- return false;
- }
- ((SynchronizerReceiver)lockManager).setSynchronizer(synchronizer);
- return true;
- }
+ protected boolean setSynchronizer(Synchronizer synchronizer) {
+ if(!(lockManager instanceof SynchronizerReceiver)) {
+ System.err.println("Skipping concurrency test [" + testName.getMethodName() + "] for LockManager of type " + lockManager.getClass());
+ return false;
+ }
+ ((SynchronizerReceiver)lockManager).setSynchronizer(synchronizer);
+ return true;
+ }
- private static final String SQL_DELETE_LOCK_RECORD = String.format("DELETE FROM %s WHERE RESOURCE_ID=?", TABLE_LOCK_MANAGEMENT);
- private void clearTestLocks(JdbcLockManager jdbcLockManager) {
- Connection connection = jdbcLockManager.openDbConnection();
- if(connection == null) {
- return;
- }
- try {
- for(Resource resource: Resource.values()) {
- try(PreparedStatement statement = connection.prepareStatement(SQL_DELETE_LOCK_RECORD)) {
- statement.setString(1, resource.name());
- statement.executeUpdate();
- }
- }
- } catch(SQLException e) {
- throw new RuntimeException("Cannot clear test resources in table", e);
- } finally {
- jdbcLockManager.closeDbConnection(connection);
- }
- }
+ private static final String SQL_DELETE_LOCK_RECORD = String.format("DELETE FROM %s WHERE RESOURCE_ID=?", TABLE_LOCK_MANAGEMENT);
+ private void clearTestLocks(JdbcLockManager jdbcLockManager) {
+ Connection connection = jdbcLockManager.openDbConnection();
+ if(connection == null) {
+ return;
+ }
+ try {
+ for(Resource resource: Resource.values()) {
+ try(PreparedStatement statement = connection.prepareStatement(SQL_DELETE_LOCK_RECORD)) {
+ statement.setString(1, resource.name());
+ statement.executeUpdate();
+ }
+ }
+ } catch(SQLException e) {
+ throw new RuntimeException("Cannot clear test resources in table", e);
+ } finally {
+ jdbcLockManager.closeDbConnection(connection);
+ }
+ }
}
diff --git a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/optimistic/MySqlLockManagerMock.java b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/optimistic/MySqlLockManagerMock.java
index f9c072e6c..076e23343 100644
--- a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/optimistic/MySqlLockManagerMock.java
+++ b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/optimistic/MySqlLockManagerMock.java
@@ -36,100 +36,100 @@ import org.onap.appc.lockmanager.impl.sql.optimistic.MySqlLockManager;
class MySqlLockManagerMock extends MySqlLockManager implements SynchronizerReceiver {
- private final ConcurrentMap<String, LockRecord> locks = new ConcurrentHashMap<>();
- private boolean useReal;
- private Synchronizer synchronizer;
+ private final ConcurrentMap<String, LockRecord> locks = new ConcurrentHashMap<>();
+ private boolean useReal;
+ private Synchronizer synchronizer;
- MySqlLockManagerMock(boolean useReal) {
- this.useReal = useReal;
- }
+ MySqlLockManagerMock(boolean useReal) {
+ this.useReal = useReal;
+ }
- @Override
- public void setSynchronizer(Synchronizer synchronizer) {
- this.synchronizer = synchronizer;
- }
+ @Override
+ public void setSynchronizer(Synchronizer synchronizer) {
+ this.synchronizer = synchronizer;
+ }
- @Override
- protected Connection openDbConnection() {
- if(useReal) {
- return super.openDbConnection();
- }
- return null;
- }
+ @Override
+ protected Connection openDbConnection() {
+ if(useReal) {
+ return super.openDbConnection();
+ }
+ return null;
+ }
- @Override
- protected void closeDbConnection(Connection connection) {
- if(useReal) {
- super.closeDbConnection(connection);
- }
- }
+ @Override
+ protected void closeDbConnection(Connection connection) {
+ if(useReal) {
+ super.closeDbConnection(connection);
+ }
+ }
- @Override
- protected LockRecord loadLockRecord(Connection connection, String resource) throws SQLException {
- LockRecord res;
- if(useReal) {
- res = super.loadLockRecord(connection, resource);
- } else {
- res = locks.get(resource);
- }
- if(synchronizer != null) {
- synchronizer.postLoadLockRecord(resource, (res == null) ? null : res.getOwner());
- }
- return res;
- }
+ @Override
+ protected LockRecord loadLockRecord(Connection connection, String resource) throws SQLException {
+ LockRecord res;
+ if(useReal) {
+ res = super.loadLockRecord(connection, resource);
+ } else {
+ res = locks.get(resource);
+ }
+ if(synchronizer != null) {
+ synchronizer.postLoadLockRecord(resource, (res == null) ? null : res.getOwner());
+ }
+ return res;
+ }
- @Override
- protected void addLockRecord(Connection connection, String resource, String owner, long timeout) throws SQLException {
- if(synchronizer != null) {
- synchronizer.preAddLockRecord(resource, owner);
- }
- try {
- if(useReal) {
- super.addLockRecord(connection, resource, owner, timeout);
- return;
- }
- LockRecord lockRecord = new LockRecord(resource);
- lockRecord.setOwner(owner);
- lockRecord.setUpdated(System.currentTimeMillis());
- lockRecord.setTimeout(timeout);
- lockRecord.setVer(1);
- LockRecord prevLockRecord = locks.putIfAbsent(resource, lockRecord);
- if(prevLockRecord != null) {
- // simulate unique constraint violation
- throw new SQLException("Duplicate PK exception", "23000", 1062);
- }
- } finally {
- if(synchronizer != null) {
- synchronizer.postAddLockRecord(resource, owner);
- }
- }
- }
+ @Override
+ protected void addLockRecord(Connection connection, String resource, String owner, long timeout) throws SQLException {
+ if(synchronizer != null) {
+ synchronizer.preAddLockRecord(resource, owner);
+ }
+ try {
+ if(useReal) {
+ super.addLockRecord(connection, resource, owner, timeout);
+ return;
+ }
+ LockRecord lockRecord = new LockRecord(resource);
+ lockRecord.setOwner(owner);
+ lockRecord.setUpdated(System.currentTimeMillis());
+ lockRecord.setTimeout(timeout);
+ lockRecord.setVer(1);
+ LockRecord prevLockRecord = locks.putIfAbsent(resource, lockRecord);
+ if(prevLockRecord != null) {
+ // simulate unique constraint violation
+ throw new SQLException("Duplicate PK exception", "23000", 1062);
+ }
+ } finally {
+ if(synchronizer != null) {
+ synchronizer.postAddLockRecord(resource, owner);
+ }
+ }
+ }
- @Override
- protected boolean updateLockRecord(Connection connection, String resource, String owner, long timeout, long ver) throws SQLException {
- if(synchronizer != null) {
- synchronizer.preUpdateLockRecord(resource, owner);
- }
- try {
- if(useReal) {
- return super.updateLockRecord(connection, resource, owner, timeout, ver);
- }
- LockRecord lockRecord = loadLockRecord(connection, resource);
- synchronized(lockRecord) {
- // should be atomic operation
- if(ver != lockRecord.getVer()) {
- return false;
- }
- lockRecord.setOwner(owner);
- lockRecord.setUpdated(System.currentTimeMillis());
- lockRecord.setTimeout(timeout);
- lockRecord.setVer(ver + 1);
- }
- return true;
- } finally {
- if(synchronizer != null) {
- synchronizer.postUpdateLockRecord(resource, owner);
- }
- }
- }
+ @Override
+ protected boolean updateLockRecord(Connection connection, String resource, String owner, long timeout, long ver) throws SQLException {
+ if(synchronizer != null) {
+ synchronizer.preUpdateLockRecord(resource, owner);
+ }
+ try {
+ if(useReal) {
+ return super.updateLockRecord(connection, resource, owner, timeout, ver);
+ }
+ LockRecord lockRecord = loadLockRecord(connection, resource);
+ synchronized(lockRecord) {
+ // should be atomic operation
+ if(ver != lockRecord.getVer()) {
+ return false;
+ }
+ lockRecord.setOwner(owner);
+ lockRecord.setUpdated(System.currentTimeMillis());
+ lockRecord.setTimeout(timeout);
+ lockRecord.setVer(ver + 1);
+ }
+ return true;
+ } finally {
+ if(synchronizer != null) {
+ synchronizer.postUpdateLockRecord(resource, owner);
+ }
+ }
+ }
}
diff --git a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/optimistic/TestMySqlLockManager.java b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/optimistic/TestMySqlLockManager.java
index d652c7523..1ab1e4ef9 100644
--- a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/optimistic/TestMySqlLockManager.java
+++ b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/optimistic/TestMySqlLockManager.java
@@ -35,196 +35,196 @@ import java.util.concurrent.*;
public class TestMySqlLockManager extends MySqlLockManagerBaseTests {
- @Override
- protected JdbcLockManager createJdbcLockManager(boolean useReal) {
- return new MySqlLockManagerMock(useReal);
- }
-
- @Test
- public void testConcurrentLockDifferentOwners() throws LockException, InterruptedException, ExecutionException, TimeoutException {
-
- final int participantsNo = 2;
- Synchronizer synchronizer = new Synchronizer(participantsNo) {
-
- private boolean wait = true;
-
- @Override
- public void preAddLockRecord(String resource, String owner) {
- if(Owner.A.name().equals(owner)) {
- synchronized(this) {
- if(wait) {
- waitOn(this);
- }
- }
- }
- }
-
- @Override
- public void postAddLockRecord(String resource, String owner) {
- if(!Owner.A.name().equals(owner)) {
- synchronized(this) {
- notifyAll();
- wait = false;
- }
- }
- }
-
- @Override
- public void preUpdateLockRecord(String resource, String owner) {
- preAddLockRecord(resource, owner);
- }
-
- @Override
- public void postUpdateLockRecord(String resource, String owner) {
- postAddLockRecord(resource, owner);
- }
- };
- if(!setSynchronizer(synchronizer)) {
- return;
- }
- ExecutorService executor = Executors.newFixedThreadPool(participantsNo);
- // acquireLock by owner A should fail as it will wait for acquireLock by owner B
- Future<Boolean> future1 = executor.submit(new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- try {
- lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
- return false;
- } catch(LockException e) {
- // this call should fail as Synchronizer delays its lock to make sure the second call locks the resource first
- Assert.assertEquals("Cannot lock resource [" + Resource.Resource1.name() + "] for [" + Owner.A.name() + "]: already locked by [" + Owner.B.name() + "]", e.getMessage());
- return true;
- }
- }
- });
- try {
- // acquireLock by owner B should success
- Future<Boolean> future2 = executor.submit(new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- // this call should success as Synchronizer delays the above lock to make sure this call success to lock the resource
- return lockManager.acquireLock(Resource.Resource1.name(), Owner.B.name());
- }
- });
- try {
- Assert.assertTrue(future2.get(CONCURRENT_TEST_WAIT_TIME, TimeUnit.SECONDS));
- Assert.assertTrue(future1.get(CONCURRENT_TEST_WAIT_TIME, TimeUnit.SECONDS));
- } finally {
- future2.cancel(true);
- }
- } finally {
- future1.cancel(true);
- }
- }
-
- @Test
- public void testConcurrentLockSameOwner() throws LockException, InterruptedException, ExecutionException, TimeoutException {
- final int participantsNo = 2;
- Synchronizer synchronizer = new Synchronizer(participantsNo) {
-
- private boolean wait = true;
-
- @Override
- public void preAddLockRecord(String resource, String owner) {
- synchronized(this) {
- if(wait) {
- wait = false;
- waitOn(this);
- }
- }
- }
-
- @Override
- public void postAddLockRecord(String resource, String owner) {
- synchronized(this) {
- notifyAll();
- }
- }
- };
- if(!setSynchronizer(synchronizer)) {
- return;
- }
- ExecutorService executor = Executors.newFixedThreadPool(participantsNo);
- // one acquireLock should return true and the other should return false
- Callable<Boolean> callable = new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- return lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
- }
- };
- Future<Boolean> future1 = executor.submit(callable);
- try {
- Future<Boolean> future2 = executor.submit(callable);
- try {
- boolean future1Res = future1.get(CONCURRENT_TEST_WAIT_TIME, TimeUnit.SECONDS);
- boolean future2Res = future2.get(CONCURRENT_TEST_WAIT_TIME, TimeUnit.SECONDS);
- // one of the lock requests should return true, the other one false as lock is requested simultaneously from 2 threads by same owner
- Assert.assertNotEquals(future1Res, future2Res);
- } finally {
- future2.cancel(true);
- }
- } finally {
- future1.cancel(true);
- }
- }
-
- @Test
- public void testConcurrentUnlockSameOwner() throws LockException, InterruptedException, ExecutionException, TimeoutException {
- lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
- final int participantsNo = 2;
- Synchronizer synchronizer = new Synchronizer(participantsNo) {
-
- private boolean wait = true;
-
- @Override
- public void preUpdateLockRecord(String resource, String owner) {
- synchronized(this) {
- // make sure second call updates the LockRecord first
- if(wait) {
- wait = false;
- waitOn(this);
- }
- }
- }
-
- @Override
- public void postUpdateLockRecord(String resource, String owner) {
- synchronized(this) {
- notifyAll();
- }
- }
- };
- if(!setSynchronizer(synchronizer)) {
- return;
- }
- ExecutorService executor = Executors.newFixedThreadPool(participantsNo);
- Callable<Boolean> callable = new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- try {
- lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
- // one of the unlock calls should success
- return true;
- } catch(LockException e) {
- // one of the unlock calls should throw the LockException as the resource should already be unlocked by other call
- Assert.assertEquals("Error unlocking resource [" + Resource.Resource1.name() + "]: resource is not locked", e.getMessage());
- return false;
- }
- }
- };
- Future<Boolean> future1 = executor.submit(callable);
- try {
- Future<Boolean> future2 = executor.submit(callable);
- try {
- boolean future1Res = future1.get(CONCURRENT_TEST_WAIT_TIME, TimeUnit.SECONDS);
- boolean future2Res = future2.get(CONCURRENT_TEST_WAIT_TIME, TimeUnit.SECONDS);
- // one of the unlock calls should return true, the other one false as unlock is requested simultaneously from 2 threads by same owner
- Assert.assertNotEquals(future1Res, future2Res);
- } finally {
- future2.cancel(true);
- }
- } finally {
- future1.cancel(true);
- }
- }
+ @Override
+ protected JdbcLockManager createJdbcLockManager(boolean useReal) {
+ return new MySqlLockManagerMock(useReal);
+ }
+
+ @Test
+ public void testConcurrentLockDifferentOwners() throws LockException, InterruptedException, ExecutionException, TimeoutException {
+
+ final int participantsNo = 2;
+ Synchronizer synchronizer = new Synchronizer(participantsNo) {
+
+ private boolean wait = true;
+
+ @Override
+ public void preAddLockRecord(String resource, String owner) {
+ if(Owner.A.name().equals(owner)) {
+ synchronized(this) {
+ if(wait) {
+ waitOn(this);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void postAddLockRecord(String resource, String owner) {
+ if(!Owner.A.name().equals(owner)) {
+ synchronized(this) {
+ notifyAll();
+ wait = false;
+ }
+ }
+ }
+
+ @Override
+ public void preUpdateLockRecord(String resource, String owner) {
+ preAddLockRecord(resource, owner);
+ }
+
+ @Override
+ public void postUpdateLockRecord(String resource, String owner) {
+ postAddLockRecord(resource, owner);
+ }
+ };
+ if(!setSynchronizer(synchronizer)) {
+ return;
+ }
+ ExecutorService executor = Executors.newFixedThreadPool(participantsNo);
+ // acquireLock by owner A should fail as it will wait for acquireLock by owner B
+ Future<Boolean> future1 = executor.submit(new Callable<Boolean>() {
+ @Override
+ public Boolean call() throws Exception {
+ try {
+ lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
+ return false;
+ } catch(LockException e) {
+ // this call should fail as Synchronizer delays its lock to make sure the second call locks the resource first
+ Assert.assertEquals("VNF : [" + Resource.Resource1.name() + "] is locked by request id : [" + Owner.B.name() + "]", e.getMessage());
+ return true;
+ }
+ }
+ });
+ try {
+ // acquireLock by owner B should success
+ Future<Boolean> future2 = executor.submit(new Callable<Boolean>() {
+ @Override
+ public Boolean call() throws Exception {
+ // this call should success as Synchronizer delays the above lock to make sure this call success to lock the resource
+ return lockManager.acquireLock(Resource.Resource1.name(), Owner.B.name());
+ }
+ });
+ try {
+ Assert.assertTrue(future2.get(CONCURRENT_TEST_WAIT_TIME, TimeUnit.SECONDS));
+ Assert.assertTrue(future1.get(CONCURRENT_TEST_WAIT_TIME, TimeUnit.SECONDS));
+ } finally {
+ future2.cancel(true);
+ }
+ } finally {
+ future1.cancel(true);
+ }
+ }
+
+ @Test
+ public void testConcurrentLockSameOwner() throws LockException, InterruptedException, ExecutionException, TimeoutException {
+ final int participantsNo = 2;
+ Synchronizer synchronizer = new Synchronizer(participantsNo) {
+
+ private boolean wait = true;
+
+ @Override
+ public void preAddLockRecord(String resource, String owner) {
+ synchronized(this) {
+ if(wait) {
+ wait = false;
+ waitOn(this);
+ }
+ }
+ }
+
+ @Override
+ public void postAddLockRecord(String resource, String owner) {
+ synchronized(this) {
+ notifyAll();
+ }
+ }
+ };
+ if(!setSynchronizer(synchronizer)) {
+ return;
+ }
+ ExecutorService executor = Executors.newFixedThreadPool(participantsNo);
+ // one acquireLock should return true and the other should return false
+ Callable<Boolean> callable = new Callable<Boolean>() {
+ @Override
+ public Boolean call() throws Exception {
+ return lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
+ }
+ };
+ Future<Boolean> future1 = executor.submit(callable);
+ try {
+ Future<Boolean> future2 = executor.submit(callable);
+ try {
+ boolean future1Res = future1.get(CONCURRENT_TEST_WAIT_TIME, TimeUnit.SECONDS);
+ boolean future2Res = future2.get(CONCURRENT_TEST_WAIT_TIME, TimeUnit.SECONDS);
+ // one of the lock requests should return true, the other one false as lock is requested simultaneously from 2 threads by same owner
+ Assert.assertNotEquals(future1Res, future2Res);
+ } finally {
+ future2.cancel(true);
+ }
+ } finally {
+ future1.cancel(true);
+ }
+ }
+
+ @Test
+ public void testConcurrentUnlockSameOwner() throws LockException, InterruptedException, ExecutionException, TimeoutException {
+ lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
+ final int participantsNo = 2;
+ Synchronizer synchronizer = new Synchronizer(participantsNo) {
+
+ private boolean wait = true;
+
+ @Override
+ public void preUpdateLockRecord(String resource, String owner) {
+ synchronized(this) {
+ // make sure second call updates the LockRecord first
+ if(wait) {
+ wait = false;
+ waitOn(this);
+ }
+ }
+ }
+
+ @Override
+ public void postUpdateLockRecord(String resource, String owner) {
+ synchronized(this) {
+ notifyAll();
+ }
+ }
+ };
+ if(!setSynchronizer(synchronizer)) {
+ return;
+ }
+ ExecutorService executor = Executors.newFixedThreadPool(participantsNo);
+ Callable<Boolean> callable = new Callable<Boolean>() {
+ @Override
+ public Boolean call() throws Exception {
+ try {
+ lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
+ // one of the unlock calls should success
+ return true;
+ } catch(LockException e) {
+ // one of the unlock calls should throw the LockException as the resource should already be unlocked by other call
+ Assert.assertEquals("Error unlocking resource [" + Resource.Resource1.name() + "]: resource is not locked", e.getMessage());
+ return false;
+ }
+ }
+ };
+ Future<Boolean> future1 = executor.submit(callable);
+ try {
+ Future<Boolean> future2 = executor.submit(callable);
+ try {
+ boolean future1Res = future1.get(CONCURRENT_TEST_WAIT_TIME, TimeUnit.SECONDS);
+ boolean future2Res = future2.get(CONCURRENT_TEST_WAIT_TIME, TimeUnit.SECONDS);
+ // one of the unlock calls should return true, the other one false as unlock is requested simultaneously from 2 threads by same owner
+ Assert.assertNotEquals(future1Res, future2Res);
+ } finally {
+ future2.cancel(true);
+ }
+ } finally {
+ future1.cancel(true);
+ }
+ }
}
diff --git a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/pessimistic/MySqlLockManagerMock.java b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/pessimistic/MySqlLockManagerMock.java
index a4bbd3406..51b1c3111 100644
--- a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/pessimistic/MySqlLockManagerMock.java
+++ b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/pessimistic/MySqlLockManagerMock.java
@@ -40,114 +40,114 @@ import org.onap.appc.lockmanager.impl.sql.pessimistic.MySqlLockManager;
class MySqlLockManagerMock extends MySqlLockManager implements SynchronizerReceiver {
- private final Map<String, LockRecord> locks = new HashMap<>();
- private final Lock lock = new ReentrantLock();
- private boolean useReal;
- private Synchronizer synchronizer;
+ private final Map<String, LockRecord> locks = new HashMap<>();
+ private final Lock lock = new ReentrantLock();
+ private boolean useReal;
+ private Synchronizer synchronizer;
- MySqlLockManagerMock(boolean useReal) {
- this.useReal = useReal;
- }
+ MySqlLockManagerMock(boolean useReal) {
+ this.useReal = useReal;
+ }
- @Override
- public void setSynchronizer(Synchronizer synchronizer) {
- this.synchronizer = synchronizer;
- }
+ @Override
+ public void setSynchronizer(Synchronizer synchronizer) {
+ this.synchronizer = synchronizer;
+ }
- @Override
- protected Connection openDbConnection() {
- if(useReal) {
- return super.openDbConnection();
- }
- return null;
- }
+ @Override
+ protected Connection openDbConnection() {
+ if(useReal) {
+ return super.openDbConnection();
+ }
+ return null;
+ }
- @Override
- protected void closeDbConnection(Connection connection) {
- if(useReal) {
- super.closeDbConnection(connection);
- }
- }
+ @Override
+ protected void closeDbConnection(Connection connection) {
+ if(useReal) {
+ super.closeDbConnection(connection);
+ }
+ }
- @Override
- protected LockRecord loadLockRecord(Connection connection, String resource) throws SQLException {
- LockRecord res;
- if(useReal) {
- res = super.loadLockRecord(connection, resource);
- } else {
- res = locks.get(resource);
- }
- if(synchronizer != null) {
- synchronizer.postLoadLockRecord(resource, (res == null) ? null : res.getOwner());
- }
- return res;
- }
+ @Override
+ protected LockRecord loadLockRecord(Connection connection, String resource) throws SQLException {
+ LockRecord res;
+ if(useReal) {
+ res = super.loadLockRecord(connection, resource);
+ } else {
+ res = locks.get(resource);
+ }
+ if(synchronizer != null) {
+ synchronizer.postLoadLockRecord(resource, (res == null) ? null : res.getOwner());
+ }
+ return res;
+ }
- @Override
- protected void addLockRecord(Connection connection, String resource, String owner, long timeout) throws SQLException {
- if(synchronizer != null) {
- synchronizer.preAddLockRecord(resource, owner);
- }
- try {
- if(useReal) {
- super.addLockRecord(connection, resource, owner, timeout);
- return;
- }
- LockRecord lockRecord = new LockRecord(resource);
- lockRecord.setOwner(owner);
- lockRecord.setUpdated(System.currentTimeMillis());
- lockRecord.setTimeout(timeout);
- locks.put(resource, lockRecord);
- } finally {
- if(synchronizer != null) {
- synchronizer.postAddLockRecord(resource, owner);
- }
- }
- }
+ @Override
+ protected void addLockRecord(Connection connection, String resource, String owner, long timeout) throws SQLException {
+ if(synchronizer != null) {
+ synchronizer.preAddLockRecord(resource, owner);
+ }
+ try {
+ if(useReal) {
+ super.addLockRecord(connection, resource, owner, timeout);
+ return;
+ }
+ LockRecord lockRecord = new LockRecord(resource);
+ lockRecord.setOwner(owner);
+ lockRecord.setUpdated(System.currentTimeMillis());
+ lockRecord.setTimeout(timeout);
+ locks.put(resource, lockRecord);
+ } finally {
+ if(synchronizer != null) {
+ synchronizer.postAddLockRecord(resource, owner);
+ }
+ }
+ }
- @Override
- protected void updateLockRecord(Connection connection, String resource, String owner, long timeout) throws SQLException {
- if(synchronizer != null) {
- synchronizer.preUpdateLockRecord(resource, owner);
- }
- try {
- if(useReal) {
- super.updateLockRecord(connection, resource, owner, timeout);
- return;
- }
- LockRecord lockRecord = loadLockRecord(connection, resource);
- lockRecord.setOwner(owner);
- lockRecord.setUpdated(System.currentTimeMillis());
- lockRecord.setTimeout(timeout);
- locks.put(resource, lockRecord);
- } finally {
- if(synchronizer != null) {
- synchronizer.postUpdateLockRecord(resource, owner);
- }
- }
- }
+ @Override
+ protected void updateLockRecord(Connection connection, String resource, String owner, long timeout) throws SQLException {
+ if(synchronizer != null) {
+ synchronizer.preUpdateLockRecord(resource, owner);
+ }
+ try {
+ if(useReal) {
+ super.updateLockRecord(connection, resource, owner, timeout);
+ return;
+ }
+ LockRecord lockRecord = loadLockRecord(connection, resource);
+ lockRecord.setOwner(owner);
+ lockRecord.setUpdated(System.currentTimeMillis());
+ lockRecord.setTimeout(timeout);
+ locks.put(resource, lockRecord);
+ } finally {
+ if(synchronizer != null) {
+ synchronizer.postUpdateLockRecord(resource, owner);
+ }
+ }
+ }
- @Override
- protected void enterCriticalSection(Connection connection, String resource) {
- if(useReal) {
- super.enterCriticalSection(connection, resource);
- return;
- }
- try {
- if(!lock.tryLock(criticalSectionWaitTimeoutSecs, TimeUnit.SECONDS)) {
+ @Override
+ protected void enterCriticalSection(Connection connection, String resource) {
+ if(useReal) {
+ super.enterCriticalSection(connection, resource);
+ return;
+ }
+ try {
+ if(!lock.tryLock(criticalSectionWaitTimeoutSecs, TimeUnit.SECONDS)) {
throw new LockRuntimeException("Cannot obtain critical section lock for resource [" + resource + "].");
- }
- } catch(InterruptedException e) {
- throw new LockRuntimeException("Cannot obtain critical section lock.", e);
- }
- }
+ }
+ } catch(InterruptedException e) {
+ throw new LockRuntimeException("Cannot obtain critical section lock.", e);
+ }
+ }
- @Override
- protected void leaveCriticalSection(Connection connection, String resource) {
- if(useReal) {
- super.leaveCriticalSection(connection, resource);
- return;
- }
- lock.unlock();
- }
+ @Override
+ protected void leaveCriticalSection(Connection connection, String resource) {
+ if(useReal) {
+ super.leaveCriticalSection(connection, resource);
+ return;
+ }
+ lock.unlock();
+ }
}
diff --git a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/pessimistic/TestMySqlLockManager.java b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/pessimistic/TestMySqlLockManager.java
index c54cfc81a..b13207d6d 100644
--- a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/pessimistic/TestMySqlLockManager.java
+++ b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/onap/appc/lockmanager/impl/sql/pessimistic/TestMySqlLockManager.java
@@ -39,13 +39,13 @@ public class TestMySqlLockManager extends MySqlLockManagerBaseTests {
private static int CRITICAL_SECTION_WAIT_TIMEOUT = 1; // in secs
- @Override
- protected JdbcLockManager createJdbcLockManager(boolean useReal) {
- return new MySqlLockManagerMock(useReal);
- }
+ @Override
+ protected JdbcLockManager createJdbcLockManager(boolean useReal) {
+ return new MySqlLockManagerMock(useReal);
+ }
- @Test
- public void testConcurrentLock() throws LockException, InterruptedException, ExecutionException, TimeoutException {
+ @Test
+ public void testConcurrentLock() throws LockException, InterruptedException, ExecutionException, TimeoutException {
try {
callConcurrentTest(new Callable<Boolean>() {
@Override
@@ -61,10 +61,10 @@ public class TestMySqlLockManager extends MySqlLockManagerBaseTests {
});
} finally {
lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
- }
- }
+ }
+ }
- @Test
+ @Test
public void testConcurrentUnlock() throws LockException, InterruptedException, ExecutionException, TimeoutException {
lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
callConcurrentTest(new Callable<Boolean>() {