Package org.jtestserver.tests

Source Code of org.jtestserver.tests.TestProtocol$TestThread

/*
JTestServer is a client/server framework for testing any JVM implementation.
Copyright (C) 2008  Fabien DUMINY (fduminy@jnode.org)

JTestServer is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

JTestServer is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/
package org.jtestserver.tests;

import static org.jtestserver.tests.TestUtils.IP;
import static org.jtestserver.tests.TestUtils.PORT;

import java.util.Arrays;
import java.util.List;

import junit.framework.Assert;

import org.jtestserver.common.protocol.Client;
import org.jtestserver.common.protocol.Protocol;
import org.jtestserver.common.protocol.ProtocolException;
import org.jtestserver.common.protocol.Server;
import org.jtestserver.common.protocol.TimeoutException;
import org.jtestserver.common.protocol.udp.UDPProtocol;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)
public class TestProtocol {
    @Parameters
    public static List<Object[]> getProtocols() throws ProtocolException {
        return Arrays.asList(new Object[][] {{new UDPProtocol()}});
    }
   
    private final Protocol<?> protocol;
    private Server<?, ?> server;
    private Client<?, ?> client;
   
    public TestProtocol(Protocol<?> protocol) throws ProtocolException {
        this.protocol = protocol;
    }

    @Before
    public void setupDown() throws ProtocolException {
        client = protocol.createClient(IP, PORT);
        server = protocol.createServer(PORT);
       
        client.setTimeout(1000);
        server.setTimeout(1000);
    }
   
    @After
    public void tearDown() {
        client.close();
        server.close();
    }
   
    @Test
    public void testSendReceive() throws Throwable {
        sendReceive("A Message", "A response");
    }
   
    @Test
    public void testSendReceiveBlank() throws Throwable {
        sendReceive("  ", " ");
    }
   
    @Test
    public void testSendReceiveEmpty() throws Throwable {
        sendReceive("", "");
    }
   
    @Test(expected = NullPointerException.class)
    public void testSendNull() throws Throwable {
        client.send(null, false);       
    }

   
    @Test
    public void testSendLongMessage() throws Throwable {
        StringBuilder longMessage = new StringBuilder();
        for (int i = 0; i < 65000; i++) {
            longMessage.append(' ');
        }
        sendReceive(longMessage.toString(), longMessage.toString());
    }
   
    @Test
    public void testMultiThreadedAccess() {
        final int nbThreads = 10;
        final int nbLoops = 10;
        TestThread[] threads = new TestThread[nbThreads];
        for (int i = 0; i < threads.length; i++) {
            final int baseValue = (i + 1) * 1000000;
            threads[i] = new TestThread(baseValue, nbLoops);
        }
       
        for (TestThread t : threads) {
            t.start();
        }
       
        boolean running = true;
        while (running) {
            running = false;
            for (TestThread t : threads) {
                if (t.isAlive()) {
                    running = true;
                    break;
                }
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // ignore
            }
        }
       
        int errors = 0;
        for (TestThread t : threads) {
            if (t.getError()) {
                errors++;
            }
        }
        if (errors > 0) {
            Assert.fail("" + errors + " errors");
        }
    }
   
    private class TestThread extends Thread {
        private final int baseValue;
        private final int nbLoops;
       
        private boolean error = false;
       
        public TestThread(int baseValue, int nbLoops) {
            super("Thread-" + baseValue);
            this.baseValue = baseValue;
            this.nbLoops = nbLoops;
        }
       
        public void run() {
            for (int loop = 0; loop < nbLoops; loop++) {
                try {
                    int value = baseValue + loop;
                    sendReceive("" + value, "response" + value);
                } catch (ProtocolException e) {
                    error = true;
                    throw new RuntimeException(e);
                } catch (TimeoutException e) {
                    error = true;
                    throw new RuntimeException(e);
                } catch (Throwable t) {
                    error = true;
                    throw new RuntimeException(t);
                }
            }
        }
       
        public boolean getError() {
            return error;
        }
    }

    private void sendReceive(String message, String response) throws Throwable {
        TestUtils.sendReceive(client, message, server, response);
    }
   
    @Override
    public String toString() {
        return getClass().getSimpleName();
    }
}
TOP

Related Classes of org.jtestserver.tests.TestProtocol$TestThread

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.