org.geb.core.ClientServerTest.java Source code

Java tutorial

Introduction

Here is the source code for org.geb.core.ClientServerTest.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.geb.core;

import java.util.Objects;
import java.util.logging.Logger;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
import org.geb.EndpointService;
import org.geb.Message;
import org.geb.WelcomeMessage;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;

/**
 *
 * @author irakli
 */
public class ClientServerTest {

    private static final Logger LOG = Logger.getLogger(ClientServerTest.class.getName());
    private static final int port = 10123;
    private static TServer server;
    private static TTransport transport;
    private static EndpointService.Client client;

    @BeforeClass
    public static void setUpClass() throws TTransportException {
        { // Server
            final EndpointService.Iface handler = new TestHandler();
            final EndpointService.Processor<EndpointService.Iface> processor = new EndpointService.Processor<>(
                    handler);
            final TServerTransport serverTransport = new TServerSocket(port);
            server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor));
            new Thread(new Runnable() {

                @Override
                public void run() {
                    LOG.info("Start server");
                    server.serve();
                    LOG.info("Server stopped");
                }
            }, "Server").start();
        }

        { // Client
            transport = new TSocket("localhost", port);
            LOG.info("Open client");
            transport.open();
            final TProtocol protocol = new TBinaryProtocol(transport);
            client = new EndpointService.Client(protocol);
        }
    }

    @AfterClass
    public static void tearDownClass() {
        if (transport != null) {
            LOG.info("Close client");
            transport.close();
        }

        if (server != null) {
            LOG.info("Stop server");
            server.stop();
        }
    }

    public ClientServerTest() {
    }

    @Before
    public void setUp() {
    }

    @After
    public void tearDown() {
    }

    @Test
    @Ignore
    public void testPing() throws TTransportException, TException {
        final WelcomeMessage clientWelcome = new WelcomeMessage();

        final WelcomeMessage serverWelcome = client.ping(clientWelcome);
        Assert.assertNotNull("No welcome message", serverWelcome);
    }

    @Test
    @Ignore
    public void testSend() throws TException {
        final Message clientMessage = new Message();

        final Message serverMessage = client.send(clientMessage);
        Assert.assertNotNull("No server message", serverMessage);
    }

    @Test
    @Ignore
    public void secondClient() throws TTransportException, TException {
        try (final TTransport transport2 = new TSocket("localhost", port);) {
            LOG.info("Open client 2");
            transport2.open();
            final TProtocol protocol = new TBinaryProtocol(transport2);
            final EndpointService.Client client2 = new EndpointService.Client(protocol);

            final WelcomeMessage serverWelcome = client2.ping(new WelcomeMessage());
            Assert.assertNotNull("No welcome message", serverWelcome);
        }
    }

    //    @Test
    //    public void testCommunication()
    //            throws Exception {
    //        final String serverPeerID = "urn:geb:uuid-" + UUID.randomUUID();
    //        final String clientPeerID = "urn:geb:uuid-" + UUID.randomUUID();
    //
    //        try (final GebServer server = new GebServer(port,
    //                                                    serverPeerID);) {
    //            LOG.info("Start server");
    //            server.start();
    //
    //            for (int j = 0; j < 10; j++) {
    //                Assert.assertTrue("" + j + ". Clients set not empty!",
    //                                  server.getKnownClients().isEmpty());
    //
    //                final Geb.WelcomeMessage clientWelcomeMessage = Geb.WelcomeMessage.newBuilder()
    //                        .setWelcomeaddr("tcp://123.123.123.123:" + j)
    //                        .setWelcomepeer(clientPeerID + "/" + j)
    //                        .build();
    //
    //                try (final GebClient client = new GebClient("localhost",
    //                                                            port,
    //                                                            clientWelcomeMessage);) {
    //                    Assert.assertFalse("Client already connected: " + clientPeerID,
    //                                       server.hasClient(clientPeerID));
    //
    //                    LOG.info("Start client");
    //                    client.connect();
    //
    //                    Assert.assertTrue("No such client: " + clientPeerID,
    //                                      server.hasClient(clientPeerID));
    //
    //                    for (int i = 0; i < 10; i++) {
    //                        final Geb.Message message = Geb.Message.newBuilder()
    //                                .addElement(Geb.Element.newBuilder()
    //                                        .setName("Test: " + i)
    //                                        .setContent(ByteString.copyFromUtf8("Nothing!" + i))
    //                                        .build())
    //                                .build();
    //
    //                        LOG.info("Write message");
    //                        client.write(message);
    //
    //                        Assert.assertTrue(server.hasClient(clientPeerID));
    //
    //                        LOG.info("Read message");
    //                        final Geb.Message otherMessage = server.read(clientPeerID);
    //
    //                        Assert.assertEquals(message,
    //                                            otherMessage);
    //                    }
    //
    //                    LOG.info("Client write complete");
    //
    //                    for (int i = 0; i < 10; i++) {
    //                        final Geb.Message message = Geb.Message.newBuilder()
    //                                .addElement(Geb.Element.newBuilder()
    //                                        .setName("Test: " + i)
    //                                        .setContent(ByteString.copyFromUtf8("Nothing! " + i))
    //                                        .build())
    //                                .build();
    //
    //                        Assert.assertTrue(server.hasClient(clientPeerID));
    //
    //                        LOG.info("Write message");
    //                        server.write(clientPeerID,
    //                                     message);
    //
    //                        LOG.info("Read message");
    //                        final Geb.Message otherMessage = client.read();
    //
    //                        Assert.assertEquals(message,
    //                                            otherMessage);
    //                    }
    //                }
    //            }
    //        }
    //    }
    private static class TestHandler implements EndpointService.Iface {

        @Override
        public WelcomeMessage ping(final WelcomeMessage welcome) throws TException {
            Objects.requireNonNull(welcome);

            return welcome;
        }

        @Override
        public Message send(final Message message) throws TException {
            Objects.requireNonNull(message);

            return message;
        }

    }
}