package rescuecore2.connection;
import static org.junit.Assert.fail;
import static org.junit.Assert.assertEquals;
import java.net.Socket;
import java.net.ServerSocket;
import java.io.IOException;
import org.junit.Test;
import org.junit.Before;
import org.junit.After;
import rescuecore2.messages.Message;
import rescuecore2.misc.Pair;
public class TCPConnectionTest extends ConnectionTestCommon {
private static final int SERVER_PORT = 19243;
private ServerSocket server;
@Before
@Override
public void setup() throws IOException {
server = new ServerSocket(SERVER_PORT);
server.setSoTimeout(10000);
super.setup();
}
@After
public void shutdown() throws IOException {
server.close();
}
@Override
protected Pair<Connection, Connection> makeConnectionPair() throws IOException {
Connection client = new TCPConnection("localhost", SERVER_PORT);
Connection server = new TCPConnection(assertIncomingConnection());
return new Pair<Connection, Connection>(client, server);
}
@Test
public void testConnectToPort() throws IOException {
TCPConnection c = new TCPConnection(SERVER_PORT);
assertIncomingConnection();
}
@Test
public void testConnectToHostAndPort() throws IOException {
TCPConnection c = new TCPConnection("localhost", SERVER_PORT);
assertIncomingConnection();
}
@Test
public void testName() throws IOException {
Socket socket = new Socket("localhost", SERVER_PORT);
TCPConnection c = new TCPConnection(socket);
assertIncomingConnection();
assertEquals("TCPConnection: local port " + socket.getLocalPort() + ", endpoint = " + socket.getInetAddress() + ":" + socket.getPort(), c.toString());
}
@Test
public void testShutdownIOException() throws IOException {
Socket socket = new Socket("localhost", SERVER_PORT) {
public void close() throws IOException {
throw new IOException("Socket close failed");
}
};
TCPConnection c = new TCPConnection(socket);
assertIncomingConnection();
c.startup();
c.shutdown();
}
private Socket assertIncomingConnection() throws IOException {
Socket serverSocket = server.accept();
if (serverSocket == null) {
fail("No connection made");
}
return serverSocket;
}
}