package de.uni_goettingen.sub.commons.ocr.abbyy.server;
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 de.uni_goettingen.sub.commons.ocr.abbyy.server.hotfolder.Hotfolder;
import de.uni_goettingen.sub.commons.ocr.abbyy.server.hotfolder.HotfolderProvider;
public class LockFileHandlerTest {
private LockFileHandler lockHandlerSut;
private HotfolderProvider providerMock = mock(HotfolderProvider.class);
private Hotfolder hotfolderMock = mock(Hotfolder.class);
private URI lockUri;
@Before
public void beforeEachTest() throws Exception {
lockHandlerSut = new LockFileHandler();
when(providerMock.createHotfolder(anyString(), anyString(), anyString())).thenReturn(hotfolderMock);
lockHandlerSut.setHotfolderProvider(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); // not overwrite
verify(hotfolderMock, never()).deleteIfExists(lockUri);
verify(hotfolderMock).copyTmpFile("lock", lockUri);
}
@Test(expected=ConcurrentModificationException.class)
public void shouldCancelWhenLockIsPresent() throws IOException {
when(hotfolderMock.exists(lockUri)).thenReturn(true);
lockHandlerSut.createOrOverwriteLock(false); // not overwrite
}
@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 {
lockHandlerSut.deleteLockAndCleanUp();
verify(hotfolderMock).deleteIfExists(lockUri);
}
}