view src/test/java/net/borgac/clusterrpc/JeroMQExploratoryTest.java @ 3:c81cdb1b037d

More exploration tests
author Lewin Bormann <lbo@spheniscida.de>
date Fri, 23 Sep 2016 19:19:18 +0200
parents src/test/java/net/borgac/clusterrpc/JeroMQGeneral.java@9a19a94a5e74
children
line wrap: on
line source

package net.borgac.clusterrpc;

import java.util.LinkedList;
import java.util.List;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.zeromq.ZMQ;

/**
 * A unit test to explore how JeroMQ works.
 *
 * @author lbo
 */
public class JeroMQExploratoryTest {

    private static final String address = "inproc://jero-exploration";
    private static final String routerAddress = "inproc://jero-exploration-router";
    private final ZMQ.Context context;
    private ZMQ.Socket server, client;
    private ZMQ.Socket router, routerClient;

    public JeroMQExploratoryTest() {
        this.context = ZMQ.context(1);
    }

    @BeforeClass
    public static void setUpClass() {
    }

    @AfterClass
    public static void tearDownClass() {
    }

    @Before
    public void setUp() {
        server = context.socket(ZMQ.REP);
        server.bind(address);
        client = context.socket(ZMQ.REQ);
        client.connect(address);

        router = context.socket(ZMQ.ROUTER);
        router.bind(routerAddress);
        routerClient = context.socket(ZMQ.REQ);
        routerClient.connect(routerAddress);
    }

    @After
    public void tearDown() {
        server.close();
        client.close();

        router.close();
        routerClient.close();
    }

    @Test
    public void testReqRep() {

        client.send("Hello World");
        String msg = server.recvStr();

        Assert.assertEquals("Hello World", msg);
    }

    @Test
    public void testConcurrentReqRep() throws InterruptedException {
        Runnable serverThreadCode = () -> {
            String fromClient = server.recvStr();
            Assert.assertEquals("from client", fromClient);

            server.send("from server");
        };

        Thread serverThread = new Thread(serverThreadCode);
        serverThread.start();

        Thread.sleep(500);

        client.send("from client");
        String fromServer = client.recvStr();

        Assert.assertEquals("from server", fromServer);

        serverThread.join();
    }

    @Test
    public void testRouter() throws InterruptedException {
        routerClient.disconnect(routerAddress);
        routerClient.setIdentity("id1".getBytes());
        routerClient.connect(routerAddress);

        routerClient.send("Hello");

        String id = new String(router.recv());
        List<String> parts = new LinkedList<>();

        while (router.hasReceiveMore()) {
            parts.add(router.recvStr());
        }

        Assert.assertEquals(2, parts.size());
        Assert.assertEquals("id1", id);
        Assert.assertEquals("", parts.get(0));
        Assert.assertEquals("Hello", parts.get(1));

        router.sendMore("id1");
        router.sendMore("");
        router.send("Hello back");

        String reply = routerClient.recvStr();

        Assert.assertEquals("Hello back", reply);
    }

    @Test
    public void testEncryption() {
        // No encryption D:
    }
}