com.github.neoio.net.reactor.tcp.TestTCPIOReactor.java Source code

Java tutorial

Introduction

Here is the source code for com.github.neoio.net.reactor.tcp.TestTCPIOReactor.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.neoio.net.reactor.tcp;

import java.io.File;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.SystemUtils;
import org.apache.log4j.BasicConfigurator;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

import com.github.neoio.net.message.staging.file.FileMessageStagingFactory;

public class TestTCPIOReactor {
    private static final String smallMessage = "Hello World";
    private static final String largeMessage = "Donec leo libero, convallis ac pellentesque faucibus, adipiscing at urna. Ut quis nibh lacus, sed aliquet tellus. "
            + "Maecenas dictum neque in libero ultricies lacinia. Praesent vitae est mollis risus porta vestibulum non et lorem. "
            + "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent malesuada tempus "
            + "odio quis consequat. Sed interdum mollis condimentum. Fusce tortor neque, condimentum in accumsan vel, feugiat nec"
            + " erat. Curabitur lacus sapien, placerat sit amet volutpat sed, pulvinar placerat mi. Nunc in erat libero. Maecenas"
            + " at nunc non nisl feugiat feugiat. Vivamus sit amet augue vitae purus mattis tempor. Cum sociis natoque penatibus "
            + "et magnis dis parturient montes, nascetur ridiculus mus. Curabitur blandit lacus eget orci tempor molestie. Vestib"
            + "ulum dolor justo, fringilla eu ullamcorper eu, ultricies ut mi. Quisque bibendum diam nec justo accumsan eget iacu"
            + "lis lacus venenatis.some extra stuffPellentesque sollicitudin adipiscing lectus ac eleifend. Ut sagittis lacus id "
            + "ipsum dignissim eleifend. Praesent enim dui, tempus nec interdum ac, porta quis diam. Nullam erat eros, fermentum "
            + "a rhoncus non, egestas eu massa. Morbi lectus turpis, aliquet eget pellentesque in, pellentesque ac quam. Aliquam "
            + "aliquet vehicula mattis. Sed quis sagittis diam. Donec a rhoncus libero. Curabitur neque eros, interdum vitae sagi"
            + "ttis id, consequat vitae odio. Ut vitae volutpat erat. Phasellus non hendrerit mauris.that goes hereDonec dictum i"
            + "psum et risus mattis gravida. Nullam mauris libero, dictum at fringilla in, hendrerit eleifend massa. In quis odio"
            + " nec nisi ullamcorper porttitor. Sed sed diam arcu. Mauris sollicitudin vestibulum tempor. Quisque tincidunt egest"
            + "as magna nec dapibus. Suspendisse potenti. Donec at leo sed libero egestas ullamcorper a quis ante. Mauris ut ipsu"
            + "m tellus, eu interdum nisl. In venenatis velit at turpis aliquet luctus. Etiam pellentesque felis a ligula cursus "
            + "a vestibulum quam pellentesque. Maecenas condimentum tincidunt volutpat. Sed quis hendrerit leo. Etiam venenatis j"
            + "usto sit amet arcu tincidunt pellentesque. Ut ornare mi at tortor hendrerit condimentum. Morbi nulla ligula, inter"
            + "dum eu iaculis eget, eleifend eu diam. Suspendisse potenti.how funCurabitur laoreet risus at ipsum congue in biben"
            + "dum mauris pulvinar. In volutpat ultricies eros eget suscipit. Curabitur hendrerit iaculis mauris. Duis non diam e"
            + "get turpis posuere ultricies. Aliquam dignissim, quam scelerisque facilisis hendrerit, risus libero varius metus, "
            + "a feugiat lectus augue faucibus tellus. Sed vitae odio tortor, ullamcorper elementum dui. Suspendisse potenti. Dui"
            + "s ullamcorper velit sed dui pellentesque lacinia. Nunc eleifend, nulla nec vehicula rutrum, mi orci ullamcorper qu"
            + "am, fringilla venenatis massa augue non felis. Integer ac massa et metus malesuada molestie vitae id velit. Aliqua"
            + "m erat volutpat. Pellentesque in mattis arcu. Fusce felis risus, pulvinar non commodo non, convallis vitae nulla. "
            + "Vestibulum ut est eget velit mattis tristique at eu felis. In ipsum elit, fermentum nec eleifend sed, rutrum a qua"
            + "m. Sed semper fringilla nunc, nec luctus urna ultrices eget. Donec ac justo ut dolor egestas iaculis. Suspendisse "
            + "nisi mauris, tempus ut dictum a, aliquam nec justo.Cool stuffCurabitur risus justo, dignissim vel porta a, ultrice"
            + "s nec nunc. Duis bibendum, elit sed egestas elementum, dolor dolor rhoncus urna, ut mollis nisl magna luctus nulla"
            + ". Sed aliquam nisl sed ante volutpat pellentesque. Donec et ipsum nisi. Duis fringilla sodales est at vehicula. Ve"
            + "stibulum eleifend magna in dui congue blandit. Pellentesque at purus at augue mattis semper ut sit amet magna. Qui"
            + "sque urna dui, elementum quis convallis nec, consectetur nec eros. Aliquam odio neque, suscipit fringilla lobortis"
            + " eu, bibendum vitae libero. Vestibulum lacus enim, pellentesque ut tempor ac, dictum id neque. Aliquam venenatis e"
            + "uismod nulla, ac faucibus leo consequat vitae. Cum sociis natoque penatibus et magnis dis parturient montes, nasce"
            + "tur ridiculus mus. Sed quis ante sed nulla tincidunt cursus. Morbi non erat ac nulla tempor iaculis sed in risus. "
            + "Fusce auctor, quam in fermentum turother cool stuff";
    public static String charsetName = "UTF-16";
    public static Charset charset = Charset.forName(charsetName);

    @BeforeClass
    public static void beforeClass() {
        BasicConfigurator.configure();
    }

    @Test
    public void testSmallMessage() throws Exception {
        TCPServer server = new TCPServer(10001, 1);
        TCPClient client = new TCPClient(new InetSocketAddress("localhost", 10001), 0);
        server.start();
        client.start();

        try {
            client.sendMessage(smallMessage);
            server.awaitMessages();
            Assert.assertEquals(smallMessage, server.getMessages().get(0));
        } finally {
            client.stop();
            server.stop();
        }
    }

    @Test
    public void testLargeMessage() throws Exception {
        TCPServer server = new TCPServer(10001, 1);
        TCPClient client = new TCPClient(new InetSocketAddress("localhost", 10001), 0);
        server.start();
        client.start();

        try {
            client.sendMessage(largeMessage);
            server.awaitMessages();
            Assert.assertEquals(largeMessage, server.getMessages().get(0));
        } finally {
            client.stop();
            server.stop();
        }
    }

    @Test
    public void testTenSmallMessages() throws Exception {
        TCPServer server = new TCPServer(10001, 10);
        TCPClient client = new TCPClient(new InetSocketAddress("localhost", 10001), 0);
        server.start();
        client.start();

        try {
            client.sendMessage(smallMessage + "1");
            client.sendMessage(smallMessage + "2");
            client.sendMessage(smallMessage + "3");
            client.sendMessage(smallMessage + "4");
            client.sendMessage(smallMessage + "5");
            client.sendMessage(smallMessage + "6");
            client.sendMessage(smallMessage + "7");
            client.sendMessage(smallMessage + "8");
            client.sendMessage(smallMessage + "9");
            client.sendMessage(smallMessage + "10");
            server.awaitMessages();
            Assert.assertEquals(10, server.getMessages().size());
            Assert.assertEquals(smallMessage + "1", server.getMessages().get(0));
            Assert.assertEquals(smallMessage + "2", server.getMessages().get(1));
            Assert.assertEquals(smallMessage + "3", server.getMessages().get(2));
            Assert.assertEquals(smallMessage + "4", server.getMessages().get(3));
            Assert.assertEquals(smallMessage + "5", server.getMessages().get(4));
            Assert.assertEquals(smallMessage + "6", server.getMessages().get(5));
            Assert.assertEquals(smallMessage + "7", server.getMessages().get(6));
            Assert.assertEquals(smallMessage + "8", server.getMessages().get(7));
            Assert.assertEquals(smallMessage + "9", server.getMessages().get(8));
            Assert.assertEquals(smallMessage + "10", server.getMessages().get(9));
        } finally {
            client.stop();
            server.stop();
        }
    }

    @Test
    public void testTenLargeMessages() throws Exception {
        TCPServer server = new TCPServer(10001, 10);
        TCPClient client = new TCPClient(new InetSocketAddress("localhost", 10001), 0);
        server.start();
        client.start();

        try {
            client.sendMessage(largeMessage + "1");
            client.sendMessage(largeMessage + "2");
            client.sendMessage(largeMessage + "3");
            client.sendMessage(largeMessage + "4");
            client.sendMessage(largeMessage + "5");
            client.sendMessage(largeMessage + "6");
            client.sendMessage(largeMessage + "7");
            client.sendMessage(largeMessage + "8");
            client.sendMessage(largeMessage + "9");
            client.sendMessage(largeMessage + "10");
            server.awaitMessages();
            Assert.assertEquals(10, server.getMessages().size());
            Assert.assertEquals(largeMessage + "1", server.getMessages().get(0));
            Assert.assertEquals(largeMessage + "2", server.getMessages().get(1));
            Assert.assertEquals(largeMessage + "3", server.getMessages().get(2));
            Assert.assertEquals(largeMessage + "4", server.getMessages().get(3));
            Assert.assertEquals(largeMessage + "5", server.getMessages().get(4));
            Assert.assertEquals(largeMessage + "6", server.getMessages().get(5));
            Assert.assertEquals(largeMessage + "7", server.getMessages().get(6));
            Assert.assertEquals(largeMessage + "8", server.getMessages().get(7));
            Assert.assertEquals(largeMessage + "9", server.getMessages().get(8));
            Assert.assertEquals(largeMessage + "10", server.getMessages().get(9));
        } finally {
            client.stop();
            server.stop();
        }
    }

    @Test
    public void testSmallBackAndForth() {
        TCPServer server = new TCPServer(10001, 1);
        TCPClient client = new TCPClient(new InetSocketAddress("localhost", 10001), 1);
        server.start();
        client.start();

        try {
            client.sendMessage(smallMessage);
            server.awaitMessages();

            Assert.assertEquals(1, server.getMessages().size());
            Assert.assertEquals(smallMessage, server.getMessages().get(0));

            server.sendMessage(smallMessage);
            client.awaitMessages();

            Assert.assertEquals(1, client.getMessages().size());
            Assert.assertEquals(smallMessage, client.getMessages().get(0));
        } finally {
            client.stop();
            server.stop();
        }
    }

    @Test
    public void testLargeBackAndForth() {
        TCPServer server = new TCPServer(10001, 1);
        TCPClient client = new TCPClient(new InetSocketAddress("localhost", 10001), 1);
        server.start();
        client.start();

        try {
            client.sendMessage(largeMessage);
            server.awaitMessages();

            Assert.assertEquals(1, server.getMessages().size());
            Assert.assertEquals(largeMessage, server.getMessages().get(0));

            server.sendMessage(largeMessage);
            client.awaitMessages();

            Assert.assertEquals(1, client.getMessages().size());
            Assert.assertEquals(largeMessage, client.getMessages().get(0));
        } finally {
            client.stop();
            server.stop();
        }
    }

    @Test
    public void testSmallInterspercedWithLarge() {
        TCPServer server = new TCPServer(10001, 44);
        TCPClient client = new TCPClient(new InetSocketAddress("localhost", 10001), 44);
        server.start();
        client.start();

        try {
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(largeMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(largeMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(largeMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(largeMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);
            client.sendMessage(smallMessage);

            server.awaitMessages();
            Assert.assertEquals(44, server.getMessages().size());
            Assert.assertEquals(smallMessage, server.getMessages().get(0));
            Assert.assertEquals(smallMessage, server.getMessages().get(1));
            Assert.assertEquals(smallMessage, server.getMessages().get(2));
            Assert.assertEquals(smallMessage, server.getMessages().get(3));
            Assert.assertEquals(smallMessage, server.getMessages().get(4));
            Assert.assertEquals(smallMessage, server.getMessages().get(5));
            Assert.assertEquals(largeMessage, server.getMessages().get(6));
            Assert.assertEquals(smallMessage, server.getMessages().get(7));
            Assert.assertEquals(smallMessage, server.getMessages().get(8));
            Assert.assertEquals(smallMessage, server.getMessages().get(9));
            Assert.assertEquals(smallMessage, server.getMessages().get(10));
            Assert.assertEquals(smallMessage, server.getMessages().get(11));
            Assert.assertEquals(smallMessage, server.getMessages().get(12));
            Assert.assertEquals(smallMessage, server.getMessages().get(13));
            Assert.assertEquals(smallMessage, server.getMessages().get(14));
            Assert.assertEquals(smallMessage, server.getMessages().get(15));
            Assert.assertEquals(smallMessage, server.getMessages().get(16));
            Assert.assertEquals(largeMessage, server.getMessages().get(17));
            Assert.assertEquals(smallMessage, server.getMessages().get(18));
            Assert.assertEquals(smallMessage, server.getMessages().get(19));
            Assert.assertEquals(smallMessage, server.getMessages().get(20));
            Assert.assertEquals(smallMessage, server.getMessages().get(21));
            Assert.assertEquals(smallMessage, server.getMessages().get(22));
            Assert.assertEquals(smallMessage, server.getMessages().get(23));
            Assert.assertEquals(smallMessage, server.getMessages().get(24));
            Assert.assertEquals(smallMessage, server.getMessages().get(25));
            Assert.assertEquals(smallMessage, server.getMessages().get(26));
            Assert.assertEquals(smallMessage, server.getMessages().get(27));
            Assert.assertEquals(largeMessage, server.getMessages().get(28));
            Assert.assertEquals(smallMessage, server.getMessages().get(29));
            Assert.assertEquals(smallMessage, server.getMessages().get(30));
            Assert.assertEquals(smallMessage, server.getMessages().get(31));
            Assert.assertEquals(smallMessage, server.getMessages().get(32));
            Assert.assertEquals(smallMessage, server.getMessages().get(33));
            Assert.assertEquals(smallMessage, server.getMessages().get(34));
            Assert.assertEquals(smallMessage, server.getMessages().get(35));
            Assert.assertEquals(smallMessage, server.getMessages().get(36));
            Assert.assertEquals(smallMessage, server.getMessages().get(37));
            Assert.assertEquals(smallMessage, server.getMessages().get(38));
            Assert.assertEquals(largeMessage, server.getMessages().get(39));
            Assert.assertEquals(smallMessage, server.getMessages().get(40));
            Assert.assertEquals(smallMessage, server.getMessages().get(41));
            Assert.assertEquals(smallMessage, server.getMessages().get(42));
            Assert.assertEquals(smallMessage, server.getMessages().get(43));
        } finally {
            client.stop();
            server.stop();
        }
    }

    @Test
    public void testSmallInterspercedWithLargeWithFileStaging() throws IOException {
        File serverStaging = new File(SystemUtils.getJavaIoTmpDir(), "fileStagingTestServer");
        File clientStaging = new File(SystemUtils.getJavaIoTmpDir(), "fileStagingTestClient");

        try {
            TCPServer server = new TCPServer(10001, 44, new FileMessageStagingFactory(serverStaging));
            TCPClient client = new TCPClient(new InetSocketAddress("localhost", 10001), 44,
                    new FileMessageStagingFactory(clientStaging));
            server.start();
            client.start();

            try {
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(largeMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(largeMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(largeMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(largeMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);
                client.sendMessage(smallMessage);

                server.awaitMessages();
                Assert.assertEquals(44, server.getMessages().size());
                Assert.assertEquals(smallMessage, server.getMessages().get(0));
                Assert.assertEquals(smallMessage, server.getMessages().get(1));
                Assert.assertEquals(smallMessage, server.getMessages().get(2));
                Assert.assertEquals(smallMessage, server.getMessages().get(3));
                Assert.assertEquals(smallMessage, server.getMessages().get(4));
                Assert.assertEquals(smallMessage, server.getMessages().get(5));
                Assert.assertEquals(largeMessage, server.getMessages().get(6));
                Assert.assertEquals(smallMessage, server.getMessages().get(7));
                Assert.assertEquals(smallMessage, server.getMessages().get(8));
                Assert.assertEquals(smallMessage, server.getMessages().get(9));
                Assert.assertEquals(smallMessage, server.getMessages().get(10));
                Assert.assertEquals(smallMessage, server.getMessages().get(11));
                Assert.assertEquals(smallMessage, server.getMessages().get(12));
                Assert.assertEquals(smallMessage, server.getMessages().get(13));
                Assert.assertEquals(smallMessage, server.getMessages().get(14));
                Assert.assertEquals(smallMessage, server.getMessages().get(15));
                Assert.assertEquals(smallMessage, server.getMessages().get(16));
                Assert.assertEquals(largeMessage, server.getMessages().get(17));
                Assert.assertEquals(smallMessage, server.getMessages().get(18));
                Assert.assertEquals(smallMessage, server.getMessages().get(19));
                Assert.assertEquals(smallMessage, server.getMessages().get(20));
                Assert.assertEquals(smallMessage, server.getMessages().get(21));
                Assert.assertEquals(smallMessage, server.getMessages().get(22));
                Assert.assertEquals(smallMessage, server.getMessages().get(23));
                Assert.assertEquals(smallMessage, server.getMessages().get(24));
                Assert.assertEquals(smallMessage, server.getMessages().get(25));
                Assert.assertEquals(smallMessage, server.getMessages().get(26));
                Assert.assertEquals(smallMessage, server.getMessages().get(27));
                Assert.assertEquals(largeMessage, server.getMessages().get(28));
                Assert.assertEquals(smallMessage, server.getMessages().get(29));
                Assert.assertEquals(smallMessage, server.getMessages().get(30));
                Assert.assertEquals(smallMessage, server.getMessages().get(31));
                Assert.assertEquals(smallMessage, server.getMessages().get(32));
                Assert.assertEquals(smallMessage, server.getMessages().get(33));
                Assert.assertEquals(smallMessage, server.getMessages().get(34));
                Assert.assertEquals(smallMessage, server.getMessages().get(35));
                Assert.assertEquals(smallMessage, server.getMessages().get(36));
                Assert.assertEquals(smallMessage, server.getMessages().get(37));
                Assert.assertEquals(smallMessage, server.getMessages().get(38));
                Assert.assertEquals(largeMessage, server.getMessages().get(39));
                Assert.assertEquals(smallMessage, server.getMessages().get(40));
                Assert.assertEquals(smallMessage, server.getMessages().get(41));
                Assert.assertEquals(smallMessage, server.getMessages().get(42));
                Assert.assertEquals(smallMessage, server.getMessages().get(43));
            } finally {
                client.stop();
                server.stop();
            }
        } finally {
            FileUtils.deleteDirectory(serverStaging);
            FileUtils.deleteDirectory(clientStaging);
        }
    }
}