Java tutorial
/* * 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; } } }