package org.apache.haox.event.network; import junit.framework.Assert; import org.apache.haox.event.EventHandler; import org.apache.haox.event.EventHub; import org.apache.haox.transport.MessageHandler; import org.apache.haox.transport.Network; import org.apache.haox.transport.event.MessageEvent; import org.apache.haox.transport.event.TransportEventType; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.nio.channels.DatagramChannel; import java.nio.channels.SocketChannel; public class TestNetworkServer extends TestNetworkBase { private EventHub eventHub; @Before public void setUp() throws IOException { setUpServer(); } private void setUpServer() throws IOException { eventHub = new EventHub(); EventHandler messageHandler = new MessageHandler() { @Override protected void handleMessage(MessageEvent msgEvent) { if (msgEvent.getEventType() == TransportEventType.INBOUND_MESSAGE) { msgEvent.getTransport().sendMessage(msgEvent.getMessage()); } } }; eventHub.register(messageHandler); Network network = new Network(); network.setStreamingDecoder(createStreamingDecoder()); eventHub.register(network); eventHub.start(); network.tcpListen(serverHost, tcpPort); network.udpListen(serverHost, udpPort); } @Test public void testNetworkServer() throws IOException, InterruptedException { testTcpTransport(); testUdpTransport(); } private void testTcpTransport() throws IOException, InterruptedException { Thread.sleep(10); SocketChannel socketChannel = SocketChannel.open(); socketChannel.configureBlocking(true); SocketAddress sa = new InetSocketAddress(serverHost, tcpPort); socketChannel.connect(sa); socketChannel.write(ByteBuffer.wrap(TEST_MESSAGE.getBytes())); ByteBuffer byteBuffer = ByteBuffer.allocate(65536); socketChannel.read(byteBuffer); byteBuffer.flip(); clientRecvedMessage = recvBuffer2String(byteBuffer); Assert.assertEquals(TEST_MESSAGE, clientRecvedMessage); } private void testUdpTransport() throws IOException, InterruptedException { Thread.sleep(10); DatagramChannel socketChannel = DatagramChannel.open(); socketChannel.configureBlocking(true); SocketAddress sa = new InetSocketAddress(serverHost, udpPort); socketChannel.send(ByteBuffer.wrap(TEST_MESSAGE.getBytes()), sa); ByteBuffer byteBuffer = ByteBuffer.allocate(65536); socketChannel.receive(byteBuffer); byteBuffer.flip(); clientRecvedMessage = recvBuffer2String(byteBuffer); Assert.assertEquals(TEST_MESSAGE, clientRecvedMessage); } @After public void cleanup() { eventHub.stop(); } }