package com.jsonde.profiler;
import com.jsonde.api.Message;
import com.jsonde.api.MessageListener;
import com.jsonde.profiler.network.NetworkServer;
import com.jsonde.profiler.network.NetworkServerException;
import com.jsonde.profiler.network.NetworkServerImpl;
import junit.framework.TestCase;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.Socket;
public class ServerTest extends TestCase {
private static class TestMessage extends Message {
private int field;
private TestMessage(int field) {
this.field = field;
}
public int getField() {
return field;
}
public void setField(int field) {
this.field = field;
}
}
public void testServerStartStop() throws Exception {
final NetworkServer networkServer = new NetworkServerImpl(4444, new DaemonThreadFactory());
new Thread(new Runnable() {
public void run() {
try {
networkServer.start();
networkServer.sendMessage(new TestMessage(2));
networkServer.addMessageListener(new MessageListener() {
public void onMessage(Message message) {
assertEquals(TestMessage.class, message.getClass());
TestMessage tm = (TestMessage) message;
assertEquals(1, tm.getField());
}
});
} catch (NetworkServerException e) {
e.printStackTrace();
fail();
}
}
}).start();
Socket clientSocket = new Socket();
try {
Thread.sleep(100);
clientSocket.connect(new InetSocketAddress(4444));
} catch (IOException e) {
Thread.sleep(900);
clientSocket.connect(new InetSocketAddress(4444));
}
OutputStream os = clientSocket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(new TestMessage(1));
oos.flush();
InputStream is = clientSocket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
TestMessage tm = (TestMessage) ois.readObject();
assertEquals(2, tm.getField());
networkServer.stop();
}
}