/** * */ package io.nettythrift; import java.util.Random; import java.util.concurrent.CountDownLatch; import org.apache.thrift.async.AsyncMethodCallback; import org.apache.thrift.async.TAsyncClientManager; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TCompactProtocol; import org.apache.thrift.protocol.TJSONProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.protocol.TProtocolFactory; import org.apache.thrift.transport.TNonblockingSocket; import org.apache.thrift.transport.TNonblockingTransport; import org.apache.thrift.transport.TSocket; import org.junit.Test; import io.nettythrift.protocol.TSimpleJSONProtocol; import junit.framework.Assert; /** * @author HouKx * */ public class DemoClientTraditionalTEST { private static final String HOST = "localhost"; private static final int PORT = 8083; @Test public void test_TCompactProtocol() throws Exception { test(new TCompactProtocol.Factory()); } @Test public void test_TBinaryProtocol() throws Exception { test(new TBinaryProtocol.Factory()); } @Test public void test_TJSONProtocol() throws Exception { test(new TJSONProtocol.Factory()); } @Test public void test_TSimpleJSONProtocol() throws Exception { test(new TSimpleJSONProtocol.Factory(TCalculator.Iface.class, false)); } @Test public void test_AsyncClient() throws Throwable { Random rnd = new Random(System.nanoTime()); TProtocolFactory[] protfacs = new TProtocolFactory[] { new TCompactProtocol.Factory(), new TBinaryProtocol.Factory(), new TJSONProtocol.Factory(), new TSimpleJSONProtocol.Factory(TCalculator.Iface.class, false) }; TProtocolFactory protocolFactory = protfacs[rnd.nextInt(protfacs.length)]; System.out.println("protocolFactory: " + protocolFactory); TAsyncClientManager clientManager = new TAsyncClientManager(); TNonblockingTransport transport = new TNonblockingSocket(HOST, PORT); TCalculator.AsyncClient client = new TCalculator.AsyncClient(protocolFactory, clientManager, transport); final int num1 = rnd.nextInt(Integer.MAX_VALUE / 2 - 1); final int num2 = rnd.nextInt(Integer.MAX_VALUE / 2 - 1); final CountDownLatch latch = new CountDownLatch(1); final Throwable[] exceptions = new Throwable[1]; AsyncMethodCallback<TCalculator.AsyncClient.add_call> resultHandler = new AsyncMethodCallback<TCalculator.AsyncClient.add_call>() { @Override public void onComplete(TCalculator.AsyncClient.add_call response) { System.out.println("onComplete!"); try { int result = response.getResult(); Assert.assertEquals(num1 + num2, result); } catch (Throwable e) { exceptions[0] = e; } finally { latch.countDown(); } } @Override public void onError(Exception exception) { System.err.println("onError!"); exception.printStackTrace(); latch.countDown(); } }; client.add(num1, num2, resultHandler); latch.await(); transport.close(); if (exceptions[0] != null) { throw exceptions[0]; } } void test(TProtocolFactory fac) throws Exception { TProtocol prot = fac.getProtocol(socket()); TCalculator.Client client = null; try { client = new TCalculator.Client(prot); org.junit.Assert.assertEquals(2, client.add(1, 1)); } finally { if (client != null) { client.getInputProtocol().getTransport().close(); client.getOutputProtocol().getTransport().close(); } } } TSocket socket() throws Exception { TSocket sc = new TSocket(HOST, PORT); sc.open(); return sc; } }