package de.uni_goettingen.sub.commons.ocr.abbyy.server.multiuser; import static org.mockito.Mockito.*; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.URI; import java.util.ConcurrentModificationException; import org.junit.Before; import org.junit.Test; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.ISet; import de.uni_goettingen.sub.commons.ocr.abbyy.server.hotfolder.Hotfolder; import de.uni_goettingen.sub.commons.ocr.abbyy.server.hotfolder.HotfolderProvider; public class HazelcastLockFileHandlerTest { private HazelcastLockFileHandler lockHandlerSut; private HazelcastInstance hazelMock = mock(HazelcastInstance.class, RETURNS_DEEP_STUBS); @SuppressWarnings("unchecked") private ISet<Object> registeringSetMock = mock(ISet.class); private HotfolderProvider providerMock = mock(HotfolderProvider.class); private Hotfolder hotfolderMock = mock(Hotfolder.class); private URI lockUri; @Before public void beforeEachTest() throws Exception { when(hazelMock.getSet(anyString())).thenReturn(registeringSetMock); lockHandlerSut = new HazelcastLockFileHandler(hazelMock); when(providerMock.createHotfolder(anyString(), anyString(), anyString())).thenReturn(hotfolderMock); lockHandlerSut.setProvider(providerMock); lockUri = new URI("http://test/server.lock"); lockHandlerSut.initConnection("http://test/", "user", "password"); } @Test public void shouldCreateNewLock() throws IOException { when(hotfolderMock.exists(lockUri)).thenReturn(false); when(hotfolderMock.createTmpFile(anyString())).thenReturn(new ByteArrayOutputStream()); lockHandlerSut.createOrOverwriteLock(false); verify(hotfolderMock, never()).deleteIfExists(lockUri); verify(hotfolderMock).copyTmpFile("lock", lockUri); } @Test(expected=ConcurrentModificationException.class) public void shouldCancelWhenLockIsPresentButNotRegistered() throws IOException { when(hotfolderMock.exists(lockUri)).thenReturn(true); when(registeringSetMock.contains(anyObject())).thenReturn(false); lockHandlerSut.createOrOverwriteLock(false); // not overwrite } @Test public void shouldIgnoreLockIfPresentAndRegistered() throws IOException { when(hotfolderMock.exists(lockUri)).thenReturn(true); when(registeringSetMock.contains(anyObject())).thenReturn(true); lockHandlerSut.createOrOverwriteLock(false); // not overwrite verify(hotfolderMock, never()).deleteIfExists(lockUri); verify(hotfolderMock, never()).copyTmpFile("lock", lockUri); } @Test public void shouldOverwriteLock() throws IOException { when(hotfolderMock.exists(lockUri)).thenReturn(false); when(hotfolderMock.createTmpFile(anyString())).thenReturn(new ByteArrayOutputStream()); lockHandlerSut.createOrOverwriteLock(true); // overwrite verify(hotfolderMock).deleteIfExists(lockUri); verify(hotfolderMock).copyTmpFile("lock", lockUri); } @Test public void shouldDeleteLock() throws IOException { when(hazelMock.getCluster().getMembers().size()).thenReturn(1); lockHandlerSut.deleteLockAndCleanUp(); verify(hotfolderMock).delete(lockUri); } @Test public void shouldNotDeleteLock() throws IOException { when(hazelMock.getCluster().getMembers().size()).thenReturn(2); lockHandlerSut.deleteLockAndCleanUp(); verify(hotfolderMock, never()).delete(lockUri); } }