package liquibase.lockservice; import org.junit.After; import org.junit.Before; @SuppressWarnings({"EqualsWhichDoesntCheckParameterClass"}) public class StandardLockServiceTest { private StandardLockService lockService; @Before public void before() { lockService = new StandardLockService(); lockService.reset(); } @After public void after() { lockService.reset(); } // @Test // public void aquireLock_hasLockAlready() throws Exception { // Database database = createMock(Database.class); // replay(database); // // lockService.setDatabase(database); // assertFalse(lockService.hasChangeLogLock()); // // Field field = lockService.getClass().getDeclaredField("hasChangeLogLock"); // field.setAccessible(true); // field.set(lockService, true); // // assertTrue(lockService.hasChangeLogLock()); // // assertTrue(lockService.acquireLock()); // } // @Test // public void acquireLock_tableExistsNotLocked() throws Exception { // Database database = createMock(Database.class); // Executor executor = createMock(Executor.class); // //// database.checkDatabaseChangeLogLockTable(); //// expectLastCall(); // // database.rollback(); // expectLastCall().anyTimes(); // // database.setCanCacheLiquibaseTableInfo(true); // expectLastCall(); // // expect(executor.queryForObject(isA(SelectFromDatabaseChangeLogLockStatement.class), eq(Boolean.class))).andReturn(false); // // executor.comment("Lock Database"); // expectLastCall(); // // expect(executor.update(isA(LockDatabaseChangeLogStatement.class))).andReturn(1); // // database.commit(); // expectLastCall(); // // replay(executor); // replay(database); // ExecutorService.getInstance().setExecutor(database, executor); // // LockServiceImpl service = new LockServiceImpl(); // service.setDatabase(database); // assertTrue(service.acquireLock()); // // verify(database); // verify(executor); // } // @Test // public void acquireLock_tableExistsIsLocked() throws Exception { // Database database = createMock(Database.class); // Executor executor = createMock(Executor.class); // //// database.checkDatabaseChangeLogLockTable(); //// expectLastCall(); // // database.rollback(); // expectLastCall().anyTimes(); // // expect(executor.queryForObject(isA(SelectFromDatabaseChangeLogLockStatement.class), eq(Boolean.class))).andReturn(true); // // replay(database); // replay(executor); // ExecutorService.getInstance().setExecutor(database, executor); // // LockServiceImpl service = new LockServiceImpl(); // service.setDatabase(database); // assertFalse(service.acquireLock()); // // verify(database); // } // @Test // public void waitForLock_notLocked() throws Exception { // Database database = createMock(Database.class); // Executor executor = createMock(Executor.class); // // //// database.checkDatabaseChangeLogLockTable(); //// expectLastCall(); // // database.setCanCacheLiquibaseTableInfo(true); // expectLastCall(); // // database.rollback(); // expectLastCall().anyTimes(); // // expect(executor.queryForObject(isA(SelectFromDatabaseChangeLogLockStatement.class), eq(Boolean.class))).andReturn(false); // // expect(database.getDatabaseChangeLogLockTableName()).andReturn("DATABASECHANGELOGLOCK"); // expect(database.getLiquibaseCatalogName()).andReturn("LQCAT"); // expect(database.getLiquibaseSchemaName()).andReturn("LQSCHM"); // database.setCanCacheLiquibaseTableInfo(true); // expectLastCall(); // // executor.comment("Lock Database"); // expectLastCall(); // // expect(executor.update(isA(LockDatabaseChangeLogStatement.class))).andReturn(1); // // database.commit(); // expectLastCall(); // // replay(database); // replay(executor); // ExecutorService.getInstance().setExecutor(database, executor); // // LockServiceImpl service = new LockServiceImpl(); // service.setDatabase(database); // service.waitForLock(); // // verify(database); // verify(executor); // } // @Test // public void waitForLock_lockedThenReleased() throws Exception { // Database database = createMock(Database.class); // Executor executor = createMock(Executor.class); // //// database.checkDatabaseChangeLogLockTable(); //// expectLastCall().anyTimes(); // // database.setCanCacheLiquibaseTableInfo(true); // expectLastCall(); // // expect(executor.queryForObject(isA(SelectFromDatabaseChangeLogLockStatement.class), eq(Boolean.class))).andReturn(true); // expect(executor.queryForObject(isA(SelectFromDatabaseChangeLogLockStatement.class), eq(Boolean.class))).andReturn(true); // expect(executor.queryForObject(isA(SelectFromDatabaseChangeLogLockStatement.class), eq(Boolean.class))).andReturn(true); // expect(executor.queryForObject(isA(SelectFromDatabaseChangeLogLockStatement.class), eq(Boolean.class))).andReturn(false); // // executor.comment("Lock Database"); // expectLastCall(); // // database.rollback(); // expectLastCall().anyTimes(); // // expect(executor.update(isA(LockDatabaseChangeLogStatement.class))).andReturn(1); // // database.commit(); // expectLastCall(); // // replay(database); // replay(executor); // ExecutorService.getInstance().setExecutor(database, executor); // // LockServiceImpl service = new LockServiceImpl(); // service.setDatabase(database); // service.setChangeLogLockRecheckTime(1); // service.waitForLock(); // // verify(database); // verify(executor); // } // @Test // public void waitForLock_lockedThenTimeout() throws Exception { // Database database = createMock(Database.class); // Executor executor = createMock(Executor.class); // //// database.checkDatabaseChangeLogLockTable(); //// expectLastCall().anyTimes(); // //// expect(executor.queryForObject(isA(SelectFromDatabaseChangeLogLockStatement.class), eq(Boolean.class))).andReturn(true).anyTimes(); //// expect(database.hasDatabaseChangeLogLockTable()).andReturn(true); // // List<Map<String, ?>> resultList = new ArrayList<Map<String, ?>>(); // Map<String, Object> result = new HashMap<String, Object>(); // result.put("ID", 1); // result.put("LOCKED", true); // Date lockDate = new Date(); // result.put("LOCKGRANTED", lockDate); // result.put("LOCKEDBY", "Locker"); // resultList.add(result); // // expect(executor.queryForList(isA(SelectFromDatabaseChangeLogLockStatement.class))).andReturn(resultList); // // database.rollback(); // expectLastCall().anyTimes(); // // replay(database); // replay(executor); // ExecutorService.getInstance().setExecutor(database, executor); // // LockServiceImpl service = new LockServiceImpl(); // service.setDatabase(database); // service.setChangeLogLockWaitTime(10); // service.setChangeLogLockRecheckTime(5); // // try { // service.waitForLock(); // fail("Should have thrown exception"); // } catch (LockException e) { // assertEquals("Could not acquire change log lock. Currently locked by Locker since " + DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(lockDate), e.getMessage()); // } // // verify(database); // } // @Test // public void releaseLock_tableExistsAndLocked() throws Exception { // Database database = createMock(Database.class); // Executor executor = createMock(Executor.class); // // expect(executor.update(isA(UnlockDatabaseChangeLogStatement.class))).andReturn(1); //// expect(database.hasDatabaseChangeLogLockTable()).andReturn(true); // database.commit(); // expectLastCall().atLeastOnce(); // // database.setCanCacheLiquibaseTableInfo(false); // expectLastCall(); // // executor.comment("Release Database Lock"); // expectLastCall().anyTimes(); // // database.rollback(); // expectLastCall().anyTimes(); // // replay(database); // replay(executor); // ExecutorService.getInstance().setExecutor(database, executor); // // LockServiceImpl service = new LockServiceImpl(); // service.setDatabase(database); // service.releaseLock(); // // verify(database); // } // @Test // public void listLocks_hasLocks() throws Exception { // Database database = createMock(Database.class); // Executor executor = createMock(Executor.class); // //// database.checkDatabaseChangeLogLockTable(); //// expectLastCall().anyTimes(); // //// expect(executor.queryForObject(isA(SelectFromDatabaseChangeLogLockStatement.class), eq(Boolean.class))).andReturn(true).anyTimes(); //// expect(database.hasDatabaseChangeLogLockTable()).andReturn(true); // // List<Map<String, ?>> resultList = new ArrayList<Map<String, ?>>(); // Map<String, Object> result = new HashMap<String, Object>(); // result.put("ID", 1); // result.put("LOCKED", true); // Date lockDate = new Date(); // result.put("LOCKGRANTED", lockDate); // result.put("LOCKEDBY", "Locker"); // resultList.add(result); // // expect(executor.queryForList(isA(SelectFromDatabaseChangeLogLockStatement.class))).andReturn(resultList); // // replay(database); // replay(executor); // ExecutorService.getInstance().setExecutor(database, executor); // // LockServiceImpl service = new LockServiceImpl(); // service.setDatabase(database); // DatabaseChangeLogLock[] locks = service.listLocks(); // assertEquals(1, locks.length); // assertEquals(1, locks[0].getId()); // assertEquals("Locker", locks[0].getLockedBy()); // assertEquals(lockDate, locks[0].getLockGranted()); // // verify(database); // } // @Test // public void listLocks_tableExistsUnlocked() throws Exception { // Database database = createMock(Database.class); // Executor executor = createMock(Executor.class); // //// database.checkDatabaseChangeLogLockTable(); //// expectLastCall().anyTimes(); // //// expect(executor.queryForObject(isA(SelectFromDatabaseChangeLogLockStatement.class), eq(Boolean.class))).andReturn(true).anyTimes(); //// expect(database.hasDatabaseChangeLogLockTable()).andReturn(true); // // List<Map<String, ?>> resultList = new ArrayList<Map<String, ?>>(); // // expect(executor.queryForList(isA(SelectFromDatabaseChangeLogLockStatement.class))).andReturn(resultList); // // replay(database); // replay(executor); // ExecutorService.getInstance().setExecutor(database, executor); // // LockServiceImpl service = new LockServiceImpl(); // service.setDatabase(database); // DatabaseChangeLogLock[] locks = service.listLocks(); // assertEquals(0, locks.length); // // verify(database); // } // @Test // public void listLocks_tableDoesNotExists() throws Exception { // Database database = createMock(Database.class); // //// expect(database.hasDatabaseChangeLogLockTable()).andReturn(false); // // replay(database); // // LockServiceImpl service = new LockServiceImpl(); // service.setDatabase(database); // DatabaseChangeLogLock[] locks = service.listLocks(); // assertEquals(0, locks.length); // // verify(database); // } public void testNothing() { } }