package net.jxta.impl.cm;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import net.jxta.impl.cm.SrdiManager.SrdiPushEntriesInterface;
import org.jmock.Expectations;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class SrdiManagerPeriodicPushTaskTest {
private static final long PUSH_INTERVAL = 10000L;
private SrdiPushEntriesInterface srdiInterfaceMock;
private ScheduledExecutorService executorServiceMock;
private ScheduledFuture<?> runHandleMock;
private SrdiManagerPeriodicPushTask pushTask;
private JUnit4Mockery mockery;
@Before
public void setUp() throws Exception {
mockery = new JUnit4Mockery();
srdiInterfaceMock = mockery.mock(SrdiPushEntriesInterface.class);
executorServiceMock = mockery.mock(ScheduledExecutorService.class);
runHandleMock = mockery.mock(ScheduledFuture.class);
pushTask = new SrdiManagerPeriodicPushTask("testHandler", srdiInterfaceMock, executorServiceMock, PUSH_INTERVAL);
}
@After
public void tearDown() throws Exception {
}
@Test
public void testExecutesSelfOnStart() {
checkStartPushTask();
}
private void checkStartPushTask() {
mockery.checking(new Expectations() {{
one(executorServiceMock).scheduleWithFixedDelay(pushTask, 0L, PUSH_INTERVAL, TimeUnit.MILLISECONDS); will(returnValue(runHandleMock));
}});
pushTask.start();
}
@Test
public void testPushesAllEntriesOnFirstRun() {
checkStartPushTask();
mockery.checking(new Expectations() {{
one(srdiInterfaceMock).pushEntries(true);
}});
pushTask.run();
}
@Test
public void testPushesDeltasAfterPushingAllEntries() {
checkStartPushTask();
mockery.checking(new Expectations() {{
one(srdiInterfaceMock).pushEntries(true);
}});
pushTask.run();
mockery.checking(new Expectations() {{
one(srdiInterfaceMock).pushEntries(false);
}});
pushTask.run();
}
@Test
public void testCancelsSelfOnStop() {
checkStartPushTask();
checkSelfCancelsOnStop();
}
private void checkSelfCancelsOnStop() {
mockery.checking(new Expectations() {{
one(runHandleMock).cancel(false);
}});
pushTask.stop();
}
@Test
public void testPushesAllEntriesAfterRestart() {
checkStartPushTask();
checkSelfCancelsOnStop();
checkStartPushTask();
mockery.checking(new Expectations() {{
one(srdiInterfaceMock).pushEntries(true);
}});
pushTask.run();
}
@Test
public void testMultipleStartCallsIgnored() {
checkStartPushTask();
mockery.checking(new Expectations() {{
never(executorServiceMock);
}});
pushTask.start();
}
}