package com.github.drapostolos.rdp4j;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.Mockito;
import com.github.drapostolos.rdp4j.spi.PolledDirectory;
public class DirectoryPollerTest {
private DirectoryPoller dp;
private DirectoryPollerBuilder builder;
@Rule
public ExpectedException expectedEx = ExpectedException.none();
@Before
public void testFixture() throws Exception {
builder = DirectoryPoller.newBuilder();
}
@After
public void cleanup() throws Exception {
if (dp != null) {
dp.stop();
}
}
@Test
public void shouldThrowExceptionWhenNoPolledDirectorySetAtStart() {
expectedEx.expect(IllegalStateException.class);
expectedEx.expectMessage(String.format("Unable to start the '%s'", DirectoryPoller.class.getSimpleName()));
expectedEx.expectMessage(
String.format("%s.addPolledDirectory(PolledDirectory)", DirectoryPollerBuilder.class.getSimpleName()));
DirectoryPoller.newBuilder().start();
}
@Test
public void shouldHaveSameNumberOfActiveThreadsBeforeStartAndAfterStop() throws Exception {
// given
PolledDirectory directoryMock = Mockito.mock(PolledDirectory.class);
Set<Thread> threadsBefore = new HashSet<Thread>(Thread.getAllStackTraces().keySet());
// when
dp = builder
.addPolledDirectory(directoryMock)
.setPollingInterval(1, TimeUnit.MILLISECONDS)
.addListener(new PollCycleCounter().stopPollingAfterNumOfCycles(3))
.enableParallelPollingOfDirectories()
.start();
dp.awaitTermination();
// TimeUnit.MILLISECONDS.sleep(50);
// then
assertThat(Thread.getAllStackTraces().keySet()).containsAll(threadsBefore);
}
@Test(expected = NullPointerException.class)
public void shouldThrowExceptionWhenAddingDirectoryThatIsNull() {
// given
PolledDirectory directoryMock = Mockito.mock(PolledDirectory.class);
dp = builder
.addPolledDirectory(directoryMock)
.start();
// when
dp.addPolledDirectory(null);
}
@Test(expected = NullPointerException.class)
public void removeNullDirectory() {
// given
PolledDirectory directoryMock = Mockito.mock(PolledDirectory.class);
dp = builder
.addPolledDirectory(directoryMock)
.start();
// when
dp.removePolledDirectory(null);
}
@Test(expected = NullPointerException.class)
public void addNullListener() {
// given
PolledDirectory directoryMock = Mockito.mock(PolledDirectory.class);
dp = builder
.addPolledDirectory(directoryMock)
.start();
// when
dp.addListener(null);
}
@Test(expected = NullPointerException.class)
public void removeNullListener() {
// given
PolledDirectory directoryMock = Mockito.mock(PolledDirectory.class);
dp = builder
.addPolledDirectory(directoryMock)
.start();
// when
dp.removeListener(null);
}
}