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.Srdi.SrdiInterface; import org.jmock.Expectations; import org.jmock.integration.junit3.MockObjectTestCase; public class SrdiPeriodicPushTaskTest extends MockObjectTestCase { private static final long PUSH_INTERVAL = 10000L; private SrdiInterface srdiInterfaceMock; private ScheduledExecutorService executorServiceMock; private ScheduledFuture<?> runHandleMock; private SrdiPeriodicPushTask pushTask; @Override protected void setUp() throws Exception { srdiInterfaceMock = mock(SrdiInterface.class); executorServiceMock = mock(ScheduledExecutorService.class); runHandleMock = mock(ScheduledFuture.class); pushTask = new SrdiPeriodicPushTask("testHandler", srdiInterfaceMock, executorServiceMock, PUSH_INTERVAL); } @Override protected void tearDown() throws Exception { } public void testExecutesSelfOnStart() { checkStartPushTask(); } private void checkStartPushTask() { checking(new Expectations() {{ one(executorServiceMock).scheduleWithFixedDelay(pushTask, 0L, PUSH_INTERVAL, TimeUnit.MILLISECONDS); will(returnValue(runHandleMock)); }}); pushTask.start(); } public void testPushesAllEntriesOnFirstRun() { checkStartPushTask(); checking(new Expectations() {{ one(srdiInterfaceMock).pushEntries(true); }}); pushTask.run(); } public void testPushesDeltasAfterPushingAllEntries() { checkStartPushTask(); checking(new Expectations() {{ one(srdiInterfaceMock).pushEntries(true); }}); pushTask.run(); checking(new Expectations() {{ one(srdiInterfaceMock).pushEntries(false); }}); pushTask.run(); } public void testCancelsSelfOnStop() { checkStartPushTask(); checkSelfCancelsOnStop(); } private void checkSelfCancelsOnStop() { checking(new Expectations() {{ one(runHandleMock).cancel(false); }}); pushTask.stop(); } public void testPushesAllEntriesAfterRestart() { checkStartPushTask(); checkSelfCancelsOnStop(); checkStartPushTask(); checking(new Expectations() {{ one(srdiInterfaceMock).pushEntries(true); }}); pushTask.run(); } public void testMultipleStartCallsIgnored() { checkStartPushTask(); checking(new Expectations() {{ never(executorServiceMock); }}); pushTask.start(); } }