package org.ovirt.engine.core.utils.lock; import static org.junit.Assert.*; import java.util.HashMap; import java.util.Map; import org.junit.Before; import org.junit.Test; import org.ovirt.engine.core.compat.Guid; public class InMemoryLockManagerTest { private EngineLock updateLock1; private EngineLock updateLock2; private EngineLock lockLock1; private EngineLock lockLock2; private EngineLock updateAndLockLock; private Guid updateGuid; private Guid lockGuid; @Before public void setup() { updateGuid = Guid.NewGuid(); lockGuid = Guid.NewGuid(); Map<String, Guid> updateRegionsMap = new HashMap<String, Guid>(); updateRegionsMap.put("1", updateGuid); updateLock1 = new EngineLock(); updateLock1.setSharedLocks(updateRegionsMap); lockLock1 = new EngineLock(); lockLock1.setExclusiveLocks(updateRegionsMap); Map<String, Guid> lockedRegionsMap = new HashMap<String, Guid>(); lockedRegionsMap.put("2", lockGuid); lockLock2 = new EngineLock(); lockLock2.setExclusiveLocks(lockedRegionsMap); updateLock2 = new EngineLock(); updateLock2.setSharedLocks(lockedRegionsMap); updateAndLockLock = new EngineLock(); updateAndLockLock.setSharedLocks(updateRegionsMap); updateAndLockLock.setExclusiveLocks(lockedRegionsMap); } @Test public void checkAcquireLockSuccess() { assertTrue(LockManagerFactory.getLockManager().acquireLock(updateLock1)); assertTrue(LockManagerFactory.getLockManager().acquireLock(lockLock2)); LockManagerFactory.getLockManager().releaseLock(lockLock2); assertTrue(LockManagerFactory.getLockManager().acquireLock(updateLock2)); LockManagerFactory.getLockManager().releaseLock(updateLock1); LockManagerFactory.getLockManager().releaseLock(updateLock2); assertTrue(LockManagerFactory.getLockManager().acquireLock(updateAndLockLock)); LockManagerFactory.getLockManager().releaseLock(updateAndLockLock); } @Test public void checkAcquireLockFailure() { assertTrue(LockManagerFactory.getLockManager().acquireLock(updateLock1)); assertFalse(LockManagerFactory.getLockManager().acquireLock(lockLock1)); LockManagerFactory.getLockManager().releaseLock(updateLock1); assertTrue(LockManagerFactory.getLockManager().acquireLock(lockLock1)); LockManagerFactory.getLockManager().releaseLock(lockLock1); assertTrue(LockManagerFactory.getLockManager().acquireLock(updateAndLockLock)); assertFalse(LockManagerFactory.getLockManager().acquireLock(lockLock1)); assertFalse(LockManagerFactory.getLockManager().acquireLock(updateLock2)); LockManagerFactory.getLockManager().releaseLock(updateAndLockLock); assertTrue(LockManagerFactory.getLockManager().acquireLock(lockLock1)); assertTrue(LockManagerFactory.getLockManager().acquireLock(updateLock2)); LockManagerFactory.getLockManager().releaseLock(lockLock1); LockManagerFactory.getLockManager().releaseLock(updateLock2); } @Test public void checkClear() { assertTrue(LockManagerFactory.getLockManager().acquireLock(lockLock1)); assertTrue(LockManagerFactory.getLockManager().acquireLock(lockLock2)); LockManagerFactory.getLockManager().clear(); assertTrue(LockManagerFactory.getLockManager().acquireLock(lockLock1)); assertTrue(LockManagerFactory.getLockManager().acquireLock(lockLock2)); LockManagerFactory.getLockManager().clear(); } }