package net.jxta.impl.cm;
import java.io.IOException;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import net.jxta.id.IDFactory;
import net.jxta.impl.cm.SrdiManager.SrdiPushEntriesInterface;
import net.jxta.peer.PeerID;
import net.jxta.peergroup.PeerGroup;
import net.jxta.peergroup.PeerGroupID;
import net.jxta.rendezvous.RendezVousService;
import net.jxta.rendezvous.RendezVousStatus;
import net.jxta.rendezvous.RendezvousEvent;
import org.jmock.Expectations;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
@Ignore("Needs Updating to junit4 and tests revisited")
public class SrdiTest {
private PeerGroup groupMock;
private SrdiPushEntriesInterface srdiInterfaceMock;
private SrdiAPI srdiIndex;
private RendezVousService rendezvousServiceMock;
private ScheduledExecutorService executorServiceMock;
private ScheduledFuture<?> srdiPeriodicPushTaskHandle;
private static final long PUSH_INTERVAL = 10000L;
private SrdiManager srdiManager;
private JUnit4Mockery mockery;
@Before
protected void setUp() throws Exception {
mockery = new JUnit4Mockery();
groupMock = mockery.mock(PeerGroup.class);
srdiInterfaceMock = mockery.mock(SrdiPushEntriesInterface.class);
srdiIndex = mockery.mock(SrdiAPI.class);
rendezvousServiceMock = mockery.mock(RendezVousService.class);
executorServiceMock = mockery.mock(ScheduledExecutorService.class);
srdiPeriodicPushTaskHandle = mockery.mock(ScheduledFuture.class);
mockery.checking(new Expectations() {{
ignoring(groupMock).getResolverService();
atLeast(1).of(groupMock).getRendezVousService(); will(returnValue(rendezvousServiceMock));
one(rendezvousServiceMock).addListener(with(any(SrdiManager.class)));
}});
srdiManager = new SrdiManager(groupMock, "testHandler", srdiInterfaceMock, srdiIndex);
}
@Test
public void testStartPush() {
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(false));
one(rendezvousServiceMock).isConnectedToRendezVous(); will(returnValue(true));
one(rendezvousServiceMock).getRendezVousStatus(); will(returnValue(RendezVousStatus.EDGE));
one(executorServiceMock).scheduleWithFixedDelay(with(any(SrdiManagerPeriodicPushTask.class)), with(equal(0L)), with(equal(PUSH_INTERVAL)), with(equal(TimeUnit.MILLISECONDS)));
}});
srdiManager.startPush(executorServiceMock, PUSH_INTERVAL);
}
@Test
public void testStartPushIgnoredIfPeerIsRdvInGroup() {
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(true));
never(executorServiceMock);
}});
srdiManager.startPush(executorServiceMock, PUSH_INTERVAL);
}
@Test
public void testStartPushIgnoredIfRdvConnectionNotEstablished() {
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(false));
one(rendezvousServiceMock).isConnectedToRendezVous(); will(returnValue(false));
never(executorServiceMock);
}});
srdiManager.startPush(executorServiceMock, PUSH_INTERVAL);
}
public void testStartPushIgnoredIfRdvServiceIsInAdHocMode() {
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(false));
one(rendezvousServiceMock).isConnectedToRendezVous(); will(returnValue(true));
one(rendezvousServiceMock).getRendezVousStatus(); will(returnValue(RendezVousStatus.ADHOC));
never(executorServiceMock);
}});
srdiManager.startPush(executorServiceMock, PUSH_INTERVAL);
}
public void testStartPushSchedulesSrdiPeriodicPushTask() {
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(false));
one(rendezvousServiceMock).isConnectedToRendezVous(); will(returnValue(true));
one(rendezvousServiceMock).getRendezVousStatus(); will(returnValue(RendezVousStatus.EDGE));
one(executorServiceMock).scheduleWithFixedDelay(with(any(SrdiManagerPeriodicPushTask.class)), with(equal(0L)), with(equal(PUSH_INTERVAL)), with(equal(TimeUnit.MILLISECONDS)));
}});
srdiManager.startPush(executorServiceMock, PUSH_INTERVAL);
}
@Ignore("Needs updating")
public void testRendezvousConnectEventRestartsPush() {
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(false));
one(rendezvousServiceMock).isConnectedToRendezVous(); will(returnValue(false));
}});
srdiManager.startPush(executorServiceMock, PUSH_INTERVAL);
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(false));
one(rendezvousServiceMock).isConnectedToRendezVous(); will(returnValue(true));
one(rendezvousServiceMock).getRendezVousStatus(); will(returnValue(RendezVousStatus.EDGE));
one(executorServiceMock).scheduleWithFixedDelay(with(any(SrdiManagerPeriodicPushTask.class)), with(equal(0L)), with(equal(PUSH_INTERVAL)), with(equal(TimeUnit.MILLISECONDS)));
}});
srdiManager.rendezvousEvent(new RendezvousEvent(new Object(), RendezvousEvent.RDVCONNECT, null));
}
@Ignore("Needs updating")
public void testRendezvousConnectEventIgnoredIfModeIsAdHoc() {
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(false));
one(rendezvousServiceMock).isConnectedToRendezVous(); will(returnValue(false));
}});
srdiManager.startPush(executorServiceMock, PUSH_INTERVAL);
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(false));
one(rendezvousServiceMock).isConnectedToRendezVous(); will(returnValue(true));
one(rendezvousServiceMock).getRendezVousStatus(); will(returnValue(RendezVousStatus.ADHOC));
never(executorServiceMock);
}});
srdiManager.rendezvousEvent(new RendezvousEvent(new Object(), RendezvousEvent.RDVCONNECT, null));
}
@Ignore("Needs updating")
public void testRendezvousConnectIgnoredIfPushNotStarted() {
mockery.checking(new Expectations() {{
never(executorServiceMock);
}});
srdiManager.rendezvousEvent(new RendezvousEvent(new Object(), RendezvousEvent.RDVCONNECT, null));
}
@Ignore("Needs updating")
public void testRendezvousDisconnectEventStopsPush() {
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(false));
one(rendezvousServiceMock).isConnectedToRendezVous(); will(returnValue(true));
one(rendezvousServiceMock).getRendezVousStatus(); will(returnValue(RendezVousStatus.EDGE));
one(executorServiceMock).scheduleWithFixedDelay(with(any(SrdiManagerPeriodicPushTask.class)), with(equal(0L)), with(equal(PUSH_INTERVAL)), with(equal(TimeUnit.MILLISECONDS)));
will(returnValue(srdiPeriodicPushTaskHandle));
}});
srdiManager.startPush(executorServiceMock, PUSH_INTERVAL);
mockery.checking(new Expectations() {{
one(srdiPeriodicPushTaskHandle).cancel(false);
}});
srdiManager.rendezvousEvent(new RendezvousEvent(new Object(), RendezvousEvent.RDVDISCONNECT, null));
}
@Ignore("Needs updating")
public void testBecameRendezvousEventStopsPush() {
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(false));
one(rendezvousServiceMock).isConnectedToRendezVous(); will(returnValue(true));
one(rendezvousServiceMock).getRendezVousStatus(); will(returnValue(RendezVousStatus.EDGE));
one(executorServiceMock).scheduleWithFixedDelay(with(any(SrdiManagerPeriodicPushTask.class)), with(equal(0L)), with(equal(PUSH_INTERVAL)), with(equal(TimeUnit.MILLISECONDS)));
will(returnValue(srdiPeriodicPushTaskHandle));
}});
srdiManager.startPush(executorServiceMock, PUSH_INTERVAL);
mockery.checking(new Expectations() {{
one(srdiPeriodicPushTaskHandle).cancel(false);
}});
srdiManager.rendezvousEvent(new RendezvousEvent(new Object(), RendezvousEvent.BECAMERDV, null));
}
@Ignore("Needs updating")
public void testBecameRendezvousEventIgnoredIfNoPushNotStarted() {
mockery.checking(new Expectations() {{
never(executorServiceMock);
}});
srdiManager.rendezvousEvent(new RendezvousEvent(new Object(), RendezvousEvent.BECAMERDV, null));
}
@Ignore("Needs updating")
public void testBecameEdgeEventStartsPush() {
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(true));
}});
srdiManager.startPush(executorServiceMock, PUSH_INTERVAL);
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(false));
one(rendezvousServiceMock).isConnectedToRendezVous(); will(returnValue(true));
one(rendezvousServiceMock).getRendezVousStatus(); will(returnValue(RendezVousStatus.EDGE));
one(executorServiceMock).scheduleWithFixedDelay(with(any(SrdiManagerPeriodicPushTask.class)), with(equal(0L)), with(equal(PUSH_INTERVAL)), with(equal(TimeUnit.MILLISECONDS)));
}});
srdiManager.rendezvousEvent(new RendezvousEvent(new Object(), RendezvousEvent.BECAMEEDGE, null));
}
@Ignore("Needs updating")
public void testBecameEdgeEventIgnoredIfNotConnectedToRendezvous() {
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(true));
}});
srdiManager.startPush(executorServiceMock, PUSH_INTERVAL);
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(false));
one(rendezvousServiceMock).isConnectedToRendezVous(); will(returnValue(false));
never(executorServiceMock);
}});
srdiManager.rendezvousEvent(new RendezvousEvent(new Object(), RendezvousEvent.BECAMEEDGE, null));
}
@Ignore("Needs updating")
public void testBecameEdgeEventIgnoredIfRendezvousIsInAdHocMode() {
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(true));
}});
srdiManager.startPush(executorServiceMock, PUSH_INTERVAL);
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(false));
one(rendezvousServiceMock).isConnectedToRendezVous(); will(returnValue(true));
one(rendezvousServiceMock).getRendezVousStatus(); will(returnValue(RendezVousStatus.ADHOC));
never(executorServiceMock);
}});
srdiManager.rendezvousEvent(new RendezvousEvent(new Object(), RendezvousEvent.BECAMEEDGE, null));
}
@Ignore("Needs updating")
public void testBecameEdgeEventIgnoredIfPushNotStarted() {
mockery.checking(new Expectations() {{
never(executorServiceMock);
}});
srdiManager.rendezvousEvent(new RendezvousEvent(new Object(), RendezvousEvent.BECAMEEDGE, null));
}
@Ignore("Needs updating")
public void testRdvFailedEventStopsPush() {
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(false));
one(rendezvousServiceMock).isConnectedToRendezVous(); will(returnValue(true));
one(rendezvousServiceMock).getRendezVousStatus(); will(returnValue(RendezVousStatus.EDGE));
one(executorServiceMock).scheduleWithFixedDelay(with(any(SrdiManagerPeriodicPushTask.class)), with(equal(0L)), with(equal(PUSH_INTERVAL)), with(equal(TimeUnit.MILLISECONDS)));
will(returnValue(srdiPeriodicPushTaskHandle));
}});
srdiManager.startPush(executorServiceMock, PUSH_INTERVAL);
mockery.checking(new Expectations() {{
one(srdiPeriodicPushTaskHandle).cancel(false);
}});
srdiManager.rendezvousEvent(new RendezvousEvent(new Object(), RendezvousEvent.RDVFAILED, null));
}
@Ignore("Needs updating")
public void testClientFailedEventRemovesPeerFromSrdiIndexIfCurrentlyARendezvous() throws IOException {
final PeerID peerId = IDFactory.newPeerID(PeerGroupID.defaultNetPeerGroupID);
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(true));
one(srdiIndex).remove(peerId);
}});
srdiManager.rendezvousEvent(new RendezvousEvent(new Object(), RendezvousEvent.CLIENTFAILED, peerId));
}
@Ignore("Needs updating")
public void testClientFailedEventIgnoredIfNotARendezvous() throws IOException {
final PeerID peerId = IDFactory.newPeerID(PeerGroupID.defaultNetPeerGroupID);
mockery.checking(new Expectations() {{
one(groupMock).isRendezvous(); will(returnValue(false));
never(srdiIndex).remove(peerId);
}});
srdiManager.rendezvousEvent(new RendezvousEvent(new Object(), RendezvousEvent.CLIENTFAILED, peerId));
}
}