Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
/** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreements. See the NOTICE file* distributed with this work for additional information* regarding copyright ownership. The ASF licenses this file* to you under the Apache License, Version 2.0 (the* "License"); you may not use this file except in compliance* with the License. You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing,* software distributed under the License is distributed on an* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY* KIND, either express or implied. See the License for the* specific language governing permissions and limitations* under the License.*/package org.apache.thrift.test;// Generated codeimport thrift.test.*;import org.apache.thrift.TApplicationException;import org.apache.thrift.TSerializer;import org.apache.thrift.transport.TTransport;import org.apache.thrift.transport.TSocket;import org.apache.thrift.transport.THttpClient;import org.apache.thrift.transport.TFramedTransport;import org.apache.thrift.transport.TTransportException;import org.apache.thrift.protocol.TBinaryProtocol;import org.apache.thrift.protocol.TSimpleJSONProtocol;import java.util.Map;import java.util.HashMap;import java.util.Set;import java.util.HashSet;import java.util.List;import java.util.ArrayList;/*** Test Java client for thrift. Essentially just a copy of the C++ version,* this makes a variety of requests to enable testing for both performance and* correctness of the output.**/public class TestClient {public static void main(String [] args) {try {String host = "localhost";int port = 9090;String url = null;int numTests = 1;boolean framed = false;int socketTimeout = 1000;try {for (int i = 0; i < args.length; ++i) {if (args[i].equals("-h")) {String[] hostport = (args[++i]).split(":");host = hostport[0];port = Integer.valueOf(hostport[1]);} else if (args[i].equals("-f") || args[i].equals("-framed")) {framed = true;} else if (args[i].equals("-u")) {url = args[++i];} else if (args[i].equals("-n")) {numTests = Integer.valueOf(args[++i]);} else if (args[i].equals("-timeout")) {socketTimeout = Integer.valueOf(args[++i]);}}} catch (Exception x) {x.printStackTrace();}TTransport transport;if (url != null) {transport = new THttpClient(url);} else {TSocket socket = new TSocket(host, port);socket.setTimeout(socketTimeout);transport = socket;if (framed) {transport = new TFramedTransport(transport);}}TBinaryProtocol binaryProtocol =new TBinaryProtocol(transport);ThriftTest.Client testClient =new ThriftTest.Client(binaryProtocol);Insanity insane = new Insanity();long timeMin = 0;long timeMax = 0;long timeTot = 0;for (int test = 0; test < numTests; ++test) {/*** CONNECT TEST*/System.out.println("Test #" + (test+1) + ", " + "connect " + host + ":" + port);try {transport.open();} catch (TTransportException ttx) {System.out.println("Connect failed: " + ttx.getMessage());continue;}long start = System.nanoTime();/*** VOID TEST*/try {System.out.print("testVoid()");testClient.testVoid();System.out.print(" = void\n");} catch (TApplicationException tax) {tax.printStackTrace();}/*** STRING TEST*/System.out.print("testString(\"Test\")");String s = testClient.testString("Test");System.out.print(" = \"" + s + "\"\n");/*** BYTE TEST*/System.out.print("testByte(1)");byte i8 = testClient.testByte((byte)1);System.out.print(" = " + i8 + "\n");/*** I32 TEST*/System.out.print("testI32(-1)");int i32 = testClient.testI32(-1);System.out.print(" = " + i32 + "\n");/*** I64 TEST*/System.out.print("testI64(-34359738368)");long i64 = testClient.testI64(-34359738368L);System.out.print(" = " + i64 + "\n");/*** DOUBLE TEST*/System.out.print("testDouble(5.325098235)");double dub = testClient.testDouble(5.325098235);System.out.print(" = " + dub + "\n");/*** STRUCT TEST*/System.out.print("testStruct({\"Zero\", 1, -3, -5})");Xtruct out = new Xtruct();out.string_thing = "Zero";out.byte_thing = (byte) 1;out.i32_thing = -3;out.i64_thing = -5;Xtruct in = testClient.testStruct(out);System.out.print(" = {" + "\"" + in.string_thing + "\", " + in.byte_thing + ", " + in.i32_thing + ", " + in.i64_thing + "}\n");/*** NESTED STRUCT TEST*/System.out.print("testNest({1, {\"Zero\", 1, -3, -5}), 5}");Xtruct2 out2 = new Xtruct2();out2.byte_thing = (short)1;out2.struct_thing = out;out2.i32_thing = 5;Xtruct2 in2 = testClient.testNest(out2);in = in2.struct_thing;System.out.print(" = {" + in2.byte_thing + ", {" + "\"" + in.string_thing + "\", " + in.byte_thing + ", " + in.i32_thing + ", " + in.i64_thing + "}, " + in2.i32_thing + "}\n");/*** MAP TEST*/Map<Integer,Integer> mapout = new HashMap<Integer,Integer>();for (int i = 0; i < 5; ++i) {mapout.put(i, i-10);}System.out.print("testMap({");boolean first = true;for (int key : mapout.keySet()) {if (first) {first = false;} else {System.out.print(", ");}System.out.print(key + " => " + mapout.get(key));}System.out.print("})");Map<Integer,Integer> mapin = testClient.testMap(mapout);System.out.print(" = {");first = true;for (int key : mapin.keySet()) {if (first) {first = false;} else {System.out.print(", ");}System.out.print(key + " => " + mapout.get(key));}System.out.print("}\n");/*** SET TEST*/Set<Integer> setout = new HashSet<Integer>();for (int i = -2; i < 3; ++i) {setout.add(i);}System.out.print("testSet({");first = true;for (int elem : setout) {if (first) {first = false;} else {System.out.print(", ");}System.out.print(elem);}System.out.print("})");Set<Integer> setin = testClient.testSet(setout);System.out.print(" = {");first = true;for (int elem : setin) {if (first) {first = false;} else {System.out.print(", ");}System.out.print(elem);}System.out.print("}\n");/*** LIST TEST*/List<Integer> listout = new ArrayList<Integer>();for (int i = -2; i < 3; ++i) {listout.add(i);}System.out.print("testList({");first = true;for (int elem : listout) {if (first) {first = false;} else {System.out.print(", ");}System.out.print(elem);}System.out.print("})");List<Integer> listin = testClient.testList(listout);System.out.print(" = {");first = true;for (int elem : listin) {if (first) {first = false;} else {System.out.print(", ");}System.out.print(elem);}System.out.print("}\n");/*** ENUM TEST*/System.out.print("testEnum(ONE)");Numberz ret = testClient.testEnum(Numberz.ONE);System.out.print(" = " + ret + "\n");System.out.print("testEnum(TWO)");ret = testClient.testEnum(Numberz.TWO);System.out.print(" = " + ret + "\n");System.out.print("testEnum(THREE)");ret = testClient.testEnum(Numberz.THREE);System.out.print(" = " + ret + "\n");System.out.print("testEnum(FIVE)");ret = testClient.testEnum(Numberz.FIVE);System.out.print(" = " + ret + "\n");System.out.print("testEnum(EIGHT)");ret = testClient.testEnum(Numberz.EIGHT);System.out.print(" = " + ret + "\n");/*** TYPEDEF TEST*/System.out.print("testTypedef(309858235082523)");long uid = testClient.testTypedef(309858235082523L);System.out.print(" = " + uid + "\n");/*** NESTED MAP TEST*/System.out.print("testMapMap(1)");Map<Integer,Map<Integer,Integer>> mm =testClient.testMapMap(1);System.out.print(" = {");for (int key : mm.keySet()) {System.out.print(key + " => {");Map<Integer,Integer> m2 = mm.get(key);for (int k2 : m2.keySet()) {System.out.print(k2 + " => " + m2.get(k2) + ", ");}System.out.print("}, ");}System.out.print("}\n");/*** INSANITY TEST*/insane = new Insanity();insane.userMap = new HashMap<Numberz, Long>();insane.userMap.put(Numberz.FIVE, (long)5000);Xtruct truck = new Xtruct();truck.string_thing = "Truck";truck.byte_thing = (byte)8;truck.i32_thing = 8;truck.i64_thing = 8;insane.xtructs = new ArrayList<Xtruct>();insane.xtructs.add(truck);System.out.print("testInsanity()");Map<Long,Map<Numberz,Insanity>> whoa =testClient.testInsanity(insane);System.out.print(" = {");for (long key : whoa.keySet()) {Map<Numberz,Insanity> val = whoa.get(key);System.out.print(key + " => {");for (Numberz k2 : val.keySet()) {Insanity v2 = val.get(k2);System.out.print(k2 + " => {");Map<Numberz, Long> userMap = v2.userMap;System.out.print("{");if (userMap != null) {for (Numberz k3 : userMap.keySet()) {System.out.print(k3 + " => " + userMap.get(k3) + ", ");}}System.out.print("}, ");List<Xtruct> xtructs = v2.xtructs;System.out.print("{");if (xtructs != null) {for (Xtruct x : xtructs) {System.out.print("{" + "\"" + x.string_thing + "\", " + x.byte_thing + ", " + x.i32_thing + ", "+ x.i64_thing + "}, ");}}System.out.print("}");System.out.print("}, ");}System.out.print("}, ");}System.out.print("}\n");// Test onewaySystem.out.print("testOneway(3)...");long startOneway = System.nanoTime();testClient.testOneway(3);long onewayElapsedMillis = (System.nanoTime() - startOneway) / 1000000;if (onewayElapsedMillis > 200) {throw new Exception("Oneway test failed: took " +Long.toString(onewayElapsedMillis) +"ms");} else {System.out.println("Success - took " +Long.toString(onewayElapsedMillis) +"ms");}long stop = System.nanoTime();long tot = stop-start;System.out.println("Total time: " + tot/1000 + "us");if (timeMin == 0 || tot < timeMin) {timeMin = tot;}if (tot > timeMax) {timeMax = tot;}timeTot += tot;transport.close();}long timeAvg = timeTot / numTests;System.out.println("Min time: " + timeMin/1000 + "us");System.out.println("Max time: " + timeMax/1000 + "us");System.out.println("Avg time: " + timeAvg/1000 + "us");String json = (new TSerializer(new TSimpleJSONProtocol.Factory())).toString(insane);System.out.println("\nFor good meausre here is some JSON:\n" + json);} catch (Exception x) {x.printStackTrace();}}}