package net.jxta.impl.endpoint.netty;
import static org.junit.Assert.*;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.Executors;
import net.jxta.endpoint.EndpointAddress;
import net.jxta.exception.PeerGroupException;
import net.jxta.peergroup.PeerGroupID;
import org.jboss.netty.channel.ServerChannelFactory;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JMock;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(JMock.class)
public class NettyTransportServerTest {
protected static final PeerGroupID PEER_GROUP_ID = PeerGroupID.defaultNetPeerGroupID;
Mockery mockContext = new JUnit4Mockery();
private NettyTransportServer server;
private FakeEndpointService endpointService;
private ServerChannelFactory factory;
private FakePeerGroup group;
private List<InetSocketAddress> bindpoints;
@Before
public void setUp() throws UnknownHostException {
factory = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool());
group = new FakePeerGroup();
endpointService = group.endpointService;
bindpoints = new LinkedList<InetSocketAddress>();
bindpoints.add(new InetSocketAddress(InetAddress.getLocalHost(), 12345));
List<EndpointAddress> publicAddresses = new ArrayList<EndpointAddress>();
publicAddresses.add(new EndpointAddress("test", "[::1]:12345", null, null));
server = new NettyTransportServer(factory, new InetSocketAddressTranslator("tcp2"), group);
}
@After
public void tearDown() {
if(server.isStarted()) {
server.beginStop();
server.stop();
}
}
@Test
public void testCannotStartTwice() throws UnknownHostException, PeerGroupException {
server.init(bindpoints, null, false);
server.start(group.getEndpointService());
try {
server.start(group.getEndpointService());
fail("Expected IllegalStateException");
} catch(IllegalStateException e) {
assertEquals("already started", e.getMessage());
}
}
@Test
public void testStart_returnsFalseIfEndpointServiceRefusesRegistration() throws PeerGroupException {
server.init(bindpoints, null, false);
endpointService.refuseRegistration();
assertFalse(server.start(endpointService));
}
}