blob: 87f3971ebee60a7c0eed8ce4dc01aad55a83b07e [file] [log] [blame]
Mark Slee95771002006-06-07 06:53:25 +00001package com.facebook.thrift.test;
2
Mark Slee78f58e22006-09-02 04:17:07 +00003// Generated code
4import thrift.test.*;
5
Mark Sleee129a2d2007-02-21 05:17:48 +00006import com.facebook.thrift.TApplicationException;
Mark Slee844ac122007-11-27 08:38:52 +00007import com.facebook.thrift.TSerializer;
Mark Sleeb9acf982006-10-10 01:57:32 +00008import com.facebook.thrift.transport.TTransport;
Mark Slee95771002006-06-07 06:53:25 +00009import com.facebook.thrift.transport.TSocket;
Mark Sleeb9acf982006-10-10 01:57:32 +000010import com.facebook.thrift.transport.THttpClient;
Mark Sleea3302652006-10-25 19:03:32 +000011import com.facebook.thrift.transport.TFramedTransport;
Mark Slee95771002006-06-07 06:53:25 +000012import com.facebook.thrift.transport.TTransportException;
13import com.facebook.thrift.protocol.TBinaryProtocol;
Mark Slee844ac122007-11-27 08:38:52 +000014import com.facebook.thrift.protocol.TJSONProtocol;
Mark Slee95771002006-06-07 06:53:25 +000015
Mark Sleea7747c22007-01-29 17:35:54 +000016import java.util.AbstractMap;
Mark Slee95771002006-06-07 06:53:25 +000017import java.util.HashMap;
18import java.util.HashSet;
19import java.util.ArrayList;
20
21/**
22 * Test Java client for thrift. Essentially just a copy of the C++ version,
23 * this makes a variety of requests to enable testing for both performance and
24 * correctness of the output.
25 *
26 * @author Mark Slee <mcslee@facebook.com>
27 */
28public class TestClient {
29 public static void main(String [] args) {
30 try {
31 String host = "localhost";
32 int port = 9090;
Mark Sleeb9acf982006-10-10 01:57:32 +000033 String url = null;
Mark Slee95771002006-06-07 06:53:25 +000034 int numTests = 1;
Mark Sleea3302652006-10-25 19:03:32 +000035 boolean framed = false;
36 boolean framedInput = true;
37 boolean framedOutput = true;
Mark Sleeb9acf982006-10-10 01:57:32 +000038
39 try {
40 for (int i = 0; i < args.length; ++i) {
41 if (args[i].equals("-h")) {
Mark Sleea3302652006-10-25 19:03:32 +000042 String[] hostport = (args[++i]).split(":");
Mark Sleeb9acf982006-10-10 01:57:32 +000043 host = hostport[0];
Mark Slee844ac122007-11-27 08:38:52 +000044 port = Integer.valueOf(hostport[1]);
Mark Sleea3302652006-10-25 19:03:32 +000045 } else if (args[i].equals("-f") || args[i].equals("-framed")) {
46 framed = true;
47 } else if (args[i].equals("-fo")) {
48 framed = true;
49 framedInput = false;
50 } else if (args[i].equals("-u")) {
Mark Sleeb9acf982006-10-10 01:57:32 +000051 url = args[++i];
Mark Sleea3302652006-10-25 19:03:32 +000052 } else if (args[i].equals("-n")) {
Mark Sleeb9acf982006-10-10 01:57:32 +000053 numTests = Integer.valueOf(args[++i]);
54 }
55 }
56 } catch (Exception x) {
57 x.printStackTrace();
Mark Slee95771002006-06-07 06:53:25 +000058 }
Mark Slee844ac122007-11-27 08:38:52 +000059
Mark Sleeb9acf982006-10-10 01:57:32 +000060 TTransport transport;
Mark Slee844ac122007-11-27 08:38:52 +000061
Mark Sleeb9acf982006-10-10 01:57:32 +000062 if (url != null) {
63 transport = new THttpClient(url);
64 } else {
Mark Sleea3302652006-10-25 19:03:32 +000065 TSocket socket = new TSocket(host, port);
66 socket.setTimeout(1000);
67 transport = socket;
68 if (framed) {
69 transport = new TFramedTransport(transport,
70 framedInput,
71 framedOutput);
72 }
Mark Sleeb9acf982006-10-10 01:57:32 +000073 }
74
Mark Slee95771002006-06-07 06:53:25 +000075 TBinaryProtocol binaryProtocol =
Mark Slee7dafc942007-08-09 03:40:15 +000076 new TBinaryProtocol(transport);
Mark Slee78f58e22006-09-02 04:17:07 +000077 ThriftTest.Client testClient =
Mark Slee1dd819c2006-10-26 04:56:18 +000078 new ThriftTest.Client(binaryProtocol);
Mark Slee844ac122007-11-27 08:38:52 +000079 Insanity insane = new Insanity();
Mark Slee95771002006-06-07 06:53:25 +000080
Mark Sleed788b2e2006-09-07 01:26:35 +000081 long timeMin = 0;
82 long timeMax = 0;
83 long timeTot = 0;
84
Mark Slee95771002006-06-07 06:53:25 +000085 for (int test = 0; test < numTests; ++test) {
86
87 /**
88 * CONNECT TEST
89 */
Mark Sleed788b2e2006-09-07 01:26:35 +000090 System.out.println("Test #" + (test+1) + ", " + "connect " + host + ":" + port);
Mark Slee95771002006-06-07 06:53:25 +000091 try {
Mark Sleeb9acf982006-10-10 01:57:32 +000092 transport.open();
Mark Slee95771002006-06-07 06:53:25 +000093 } catch (TTransportException ttx) {
94 System.out.println("Connect failed: " + ttx.getMessage());
95 continue;
96 }
97
Mark Sleed788b2e2006-09-07 01:26:35 +000098 long start = System.nanoTime();
Mark Slee844ac122007-11-27 08:38:52 +000099
Mark Slee95771002006-06-07 06:53:25 +0000100 /**
101 * VOID TEST
102 */
Mark Sleee129a2d2007-02-21 05:17:48 +0000103 try {
104 System.out.print("testVoid()");
105 testClient.testVoid();
106 System.out.print(" = void\n");
107 } catch (TApplicationException tax) {
108 tax.printStackTrace();
109 }
Mark Slee95771002006-06-07 06:53:25 +0000110
111 /**
112 * STRING TEST
113 */
114 System.out.print("testString(\"Test\")");
Mark Slee78f58e22006-09-02 04:17:07 +0000115 String s = testClient.testString("Test");
116 System.out.print(" = \"" + s + "\"\n");
117
Mark Slee95771002006-06-07 06:53:25 +0000118 /**
119 * BYTE TEST
120 */
121 System.out.print("testByte(1)");
Mark Slee78f58e22006-09-02 04:17:07 +0000122 byte i8 = testClient.testByte((byte)1);
123 System.out.print(" = " + i8 + "\n");
Mark Slee844ac122007-11-27 08:38:52 +0000124
Mark Slee95771002006-06-07 06:53:25 +0000125 /**
126 * I32 TEST
127 */
128 System.out.print("testI32(-1)");
Mark Slee78f58e22006-09-02 04:17:07 +0000129 int i32 = testClient.testI32(-1);
130 System.out.print(" = " + i32 + "\n");
Mark Slee95771002006-06-07 06:53:25 +0000131
132 /**
Mark Slee95771002006-06-07 06:53:25 +0000133 * I64 TEST
134 */
135 System.out.print("testI64(-34359738368)");
Mark Slee78f58e22006-09-02 04:17:07 +0000136 long i64 = testClient.testI64(-34359738368L);
137 System.out.print(" = " + i64 + "\n");
Mark Slee95771002006-06-07 06:53:25 +0000138
139 /**
Mark Sleec98d0502006-09-06 02:42:25 +0000140 * DOUBLE TEST
141 */
142 System.out.print("testDouble(5.325098235)");
143 double dub = testClient.testDouble(5.325098235);
144 System.out.print(" = " + dub + "\n");
145
146 /**
Mark Slee95771002006-06-07 06:53:25 +0000147 * STRUCT TEST
148 */
Mark Slee6e536442006-06-30 18:28:50 +0000149 System.out.print("testStruct({\"Zero\", 1, -3, -5})");
Mark Slee95771002006-06-07 06:53:25 +0000150 Xtruct out = new Xtruct();
Mark Slee78f58e22006-09-02 04:17:07 +0000151 out.string_thing = "Zero";
152 out.byte_thing = (byte) 1;
153 out.i32_thing = -3;
154 out.i64_thing = -5;
Mark Slee95771002006-06-07 06:53:25 +0000155 Xtruct in = testClient.testStruct(out);
Mark Sleed788b2e2006-09-07 01:26:35 +0000156 System.out.print(" = {" + "\"" + in.string_thing + "\", " + in.byte_thing + ", " + in.i32_thing + ", " + in.i64_thing + "}\n");
Mark Slee95771002006-06-07 06:53:25 +0000157
158 /**
159 * NESTED STRUCT TEST
160 */
Mark Slee6e536442006-06-30 18:28:50 +0000161 System.out.print("testNest({1, {\"Zero\", 1, -3, -5}), 5}");
Mark Slee95771002006-06-07 06:53:25 +0000162 Xtruct2 out2 = new Xtruct2();
Mark Slee78f58e22006-09-02 04:17:07 +0000163 out2.byte_thing = (short)1;
Mark Slee95771002006-06-07 06:53:25 +0000164 out2.struct_thing = out;
Mark Slee78f58e22006-09-02 04:17:07 +0000165 out2.i32_thing = 5;
Mark Slee95771002006-06-07 06:53:25 +0000166 Xtruct2 in2 = testClient.testNest(out2);
167 in = in2.struct_thing;
Mark Sleed788b2e2006-09-07 01:26:35 +0000168 System.out.print(" = {" + in2.byte_thing + ", {" + "\"" + in.string_thing + "\", " + in.byte_thing + ", " + in.i32_thing + ", " + in.i64_thing + "}, " + in2.i32_thing + "}\n");
Mark Slee95771002006-06-07 06:53:25 +0000169
170 /**
171 * MAP TEST
172 */
Mark Slee78f58e22006-09-02 04:17:07 +0000173 HashMap<Integer,Integer> mapout = new HashMap<Integer,Integer>();
Mark Slee95771002006-06-07 06:53:25 +0000174 for (int i = 0; i < 5; ++i) {
Mark Slee78f58e22006-09-02 04:17:07 +0000175 mapout.put(i, i-10);
Mark Slee95771002006-06-07 06:53:25 +0000176 }
177 System.out.print("testMap({");
178 boolean first = true;
Mark Slee78f58e22006-09-02 04:17:07 +0000179 for (int key : mapout.keySet()) {
Mark Slee95771002006-06-07 06:53:25 +0000180 if (first) {
181 first = false;
182 } else {
183 System.out.print(", ");
184 }
Mark Slee78f58e22006-09-02 04:17:07 +0000185 System.out.print(key + " => " + mapout.get(key));
Mark Slee95771002006-06-07 06:53:25 +0000186 }
187 System.out.print("})");
Mark Sleea7747c22007-01-29 17:35:54 +0000188 AbstractMap<Integer,Integer> mapin = testClient.testMap(mapout);
Mark Slee95771002006-06-07 06:53:25 +0000189 System.out.print(" = {");
190 first = true;
Mark Slee78f58e22006-09-02 04:17:07 +0000191 for (int key : mapin.keySet()) {
Mark Slee95771002006-06-07 06:53:25 +0000192 if (first) {
193 first = false;
194 } else {
195 System.out.print(", ");
196 }
Mark Slee78f58e22006-09-02 04:17:07 +0000197 System.out.print(key + " => " + mapout.get(key));
Mark Slee95771002006-06-07 06:53:25 +0000198 }
199 System.out.print("}\n");
200
201 /**
202 * SET TEST
203 */
Mark Slee78f58e22006-09-02 04:17:07 +0000204 HashSet<Integer> setout = new HashSet<Integer>();
Mark Slee95771002006-06-07 06:53:25 +0000205 for (int i = -2; i < 3; ++i) {
Mark Slee78f58e22006-09-02 04:17:07 +0000206 setout.add(i);
Mark Slee95771002006-06-07 06:53:25 +0000207 }
208 System.out.print("testSet({");
209 first = true;
Mark Slee78f58e22006-09-02 04:17:07 +0000210 for (int elem : setout) {
Mark Slee95771002006-06-07 06:53:25 +0000211 if (first) {
212 first = false;
213 } else {
214 System.out.print(", ");
215 }
Mark Slee78f58e22006-09-02 04:17:07 +0000216 System.out.print(elem);
Mark Slee95771002006-06-07 06:53:25 +0000217 }
218 System.out.print("})");
Mark Slee78f58e22006-09-02 04:17:07 +0000219 HashSet<Integer> setin = testClient.testSet(setout);
Mark Slee95771002006-06-07 06:53:25 +0000220 System.out.print(" = {");
221 first = true;
Mark Slee78f58e22006-09-02 04:17:07 +0000222 for (int elem : setin) {
Mark Slee95771002006-06-07 06:53:25 +0000223 if (first) {
224 first = false;
225 } else {
226 System.out.print(", ");
227 }
Mark Slee78f58e22006-09-02 04:17:07 +0000228 System.out.print(elem);
Mark Slee95771002006-06-07 06:53:25 +0000229 }
230 System.out.print("}\n");
231
232 /**
233 * LIST TEST
234 */
Mark Slee78f58e22006-09-02 04:17:07 +0000235 ArrayList<Integer> listout = new ArrayList<Integer>();
Mark Slee95771002006-06-07 06:53:25 +0000236 for (int i = -2; i < 3; ++i) {
Mark Slee78f58e22006-09-02 04:17:07 +0000237 listout.add(i);
Mark Slee95771002006-06-07 06:53:25 +0000238 }
239 System.out.print("testList({");
240 first = true;
Mark Slee78f58e22006-09-02 04:17:07 +0000241 for (int elem : listout) {
Mark Slee95771002006-06-07 06:53:25 +0000242 if (first) {
243 first = false;
244 } else {
245 System.out.print(", ");
246 }
Mark Slee78f58e22006-09-02 04:17:07 +0000247 System.out.print(elem);
Mark Slee95771002006-06-07 06:53:25 +0000248 }
249 System.out.print("})");
Mark Slee78f58e22006-09-02 04:17:07 +0000250 ArrayList<Integer> listin = testClient.testList(listout);
Mark Slee95771002006-06-07 06:53:25 +0000251 System.out.print(" = {");
252 first = true;
Mark Slee78f58e22006-09-02 04:17:07 +0000253 for (int elem : listin) {
Mark Slee95771002006-06-07 06:53:25 +0000254 if (first) {
255 first = false;
256 } else {
257 System.out.print(", ");
258 }
Mark Slee78f58e22006-09-02 04:17:07 +0000259 System.out.print(elem);
Mark Slee95771002006-06-07 06:53:25 +0000260 }
261 System.out.print("}\n");
262
263 /**
264 * ENUM TEST
265 */
266 System.out.print("testEnum(ONE)");
Mark Slee78f58e22006-09-02 04:17:07 +0000267 int ret = testClient.testEnum(Numberz.ONE);
268 System.out.print(" = " + ret + "\n");
Mark Slee95771002006-06-07 06:53:25 +0000269
270 System.out.print("testEnum(TWO)");
271 ret = testClient.testEnum(Numberz.TWO);
Mark Slee78f58e22006-09-02 04:17:07 +0000272 System.out.print(" = " + ret + "\n");
Mark Slee95771002006-06-07 06:53:25 +0000273
274 System.out.print("testEnum(THREE)");
275 ret = testClient.testEnum(Numberz.THREE);
Mark Slee78f58e22006-09-02 04:17:07 +0000276 System.out.print(" = " + ret + "\n");
Mark Slee95771002006-06-07 06:53:25 +0000277
278 System.out.print("testEnum(FIVE)");
279 ret = testClient.testEnum(Numberz.FIVE);
Mark Slee78f58e22006-09-02 04:17:07 +0000280 System.out.print(" = " + ret + "\n");
Mark Slee95771002006-06-07 06:53:25 +0000281
282 System.out.print("testEnum(EIGHT)");
283 ret = testClient.testEnum(Numberz.EIGHT);
Mark Slee78f58e22006-09-02 04:17:07 +0000284 System.out.print(" = " + ret + "\n");
Mark Slee95771002006-06-07 06:53:25 +0000285
286 /**
287 * TYPEDEF TEST
288 */
289 System.out.print("testTypedef(309858235082523)");
Mark Slee78f58e22006-09-02 04:17:07 +0000290 long uid = testClient.testTypedef(309858235082523L);
291 System.out.print(" = " + uid + "\n");
Mark Slee95771002006-06-07 06:53:25 +0000292
293 /**
294 * NESTED MAP TEST
295 */
296 System.out.print("testMapMap(1)");
Mark Sleea7747c22007-01-29 17:35:54 +0000297 AbstractMap<Integer,AbstractMap<Integer,Integer>> mm =
Mark Slee78f58e22006-09-02 04:17:07 +0000298 testClient.testMapMap(1);
Mark Slee95771002006-06-07 06:53:25 +0000299 System.out.print(" = {");
Mark Slee78f58e22006-09-02 04:17:07 +0000300 for (int key : mm.keySet()) {
301 System.out.print(key + " => {");
Mark Sleea7747c22007-01-29 17:35:54 +0000302 AbstractMap<Integer,Integer> m2 = mm.get(key);
Mark Slee78f58e22006-09-02 04:17:07 +0000303 for (int k2 : m2.keySet()) {
304 System.out.print(k2 + " => " + m2.get(k2) + ", ");
Mark Slee95771002006-06-07 06:53:25 +0000305 }
306 System.out.print("}, ");
307 }
308 System.out.print("}\n");
309
310 /**
311 * INSANITY TEST
312 */
Mark Slee844ac122007-11-27 08:38:52 +0000313 insane = new Insanity();
Mark Sleee129a2d2007-02-21 05:17:48 +0000314 insane.userMap = new HashMap<Integer, Long>();
Mark Slee78f58e22006-09-02 04:17:07 +0000315 insane.userMap.put(Numberz.FIVE, (long)5000);
Mark Slee95771002006-06-07 06:53:25 +0000316 Xtruct truck = new Xtruct();
Mark Slee78f58e22006-09-02 04:17:07 +0000317 truck.string_thing = "Truck";
318 truck.byte_thing = (byte)8;
319 truck.i32_thing = 8;
320 truck.i64_thing = 8;
Mark Sleee129a2d2007-02-21 05:17:48 +0000321 insane.xtructs = new ArrayList<Xtruct>();
Mark Slee95771002006-06-07 06:53:25 +0000322 insane.xtructs.add(truck);
323 System.out.print("testInsanity()");
Mark Sleea7747c22007-01-29 17:35:54 +0000324 AbstractMap<Long,AbstractMap<Integer,Insanity>> whoa =
Mark Slee95771002006-06-07 06:53:25 +0000325 testClient.testInsanity(insane);
326 System.out.print(" = {");
Mark Slee78f58e22006-09-02 04:17:07 +0000327 for (long key : whoa.keySet()) {
Mark Sleea7747c22007-01-29 17:35:54 +0000328 AbstractMap<Integer,Insanity> val = whoa.get(key);
Mark Slee78f58e22006-09-02 04:17:07 +0000329 System.out.print(key + " => {");
Mark Slee95771002006-06-07 06:53:25 +0000330
Mark Slee78f58e22006-09-02 04:17:07 +0000331 for (int k2 : val.keySet()) {
Mark Slee95771002006-06-07 06:53:25 +0000332 Insanity v2 = val.get(k2);
Mark Slee78f58e22006-09-02 04:17:07 +0000333 System.out.print(k2 + " => {");
Mark Sleea7747c22007-01-29 17:35:54 +0000334 AbstractMap<Integer, Long> userMap = v2.userMap;
Mark Slee95771002006-06-07 06:53:25 +0000335 System.out.print("{");
Mark Sleefa6ac9f2007-05-04 18:49:56 +0000336 if (userMap != null) {
337 for (int k3 : userMap.keySet()) {
338 System.out.print(k3 + " => " + userMap.get(k3) + ", ");
339 }
Mark Slee95771002006-06-07 06:53:25 +0000340 }
341 System.out.print("}, ");
342
343 ArrayList<Xtruct> xtructs = v2.xtructs;
344 System.out.print("{");
Mark Sleefa6ac9f2007-05-04 18:49:56 +0000345 if (xtructs != null) {
346 for (Xtruct x : xtructs) {
347 System.out.print("{" + "\"" + x.string_thing + "\", " + x.byte_thing + ", " + x.i32_thing + ", "+ x.i64_thing + "}, ");
348 }
Mark Slee95771002006-06-07 06:53:25 +0000349 }
350 System.out.print("}");
351
352 System.out.print("}, ");
353 }
354 System.out.print("}, ");
355 }
356 System.out.print("}\n");
357
Mark Sleed788b2e2006-09-07 01:26:35 +0000358 long stop = System.nanoTime();
359 long tot = stop-start;
360
361 System.out.println("Total time: " + tot/1000 + "us");
362
363 if (timeMin == 0 || tot < timeMin) {
364 timeMin = tot;
365 }
366 if (tot > timeMax) {
367 timeMax = tot;
368 }
369 timeTot += tot;
Mark Slee95771002006-06-07 06:53:25 +0000370
Mark Sleeb9acf982006-10-10 01:57:32 +0000371 transport.close();
Mark Slee95771002006-06-07 06:53:25 +0000372 }
Mark Sleed788b2e2006-09-07 01:26:35 +0000373
374 long timeAvg = timeTot / numTests;
Mark Slee844ac122007-11-27 08:38:52 +0000375
Mark Sleed788b2e2006-09-07 01:26:35 +0000376 System.out.println("Min time: " + timeMin/1000 + "us");
377 System.out.println("Max time: " + timeMax/1000 + "us");
378 System.out.println("Avg time: " + timeAvg/1000 + "us");
Mark Slee844ac122007-11-27 08:38:52 +0000379
380 String json = (new TSerializer(new TJSONProtocol.Factory())).toString(insane);
381
382 System.out.println("\nFor good meausre here is some JSON:\n" + json);
383
Mark Slee95771002006-06-07 06:53:25 +0000384 } catch (Exception x) {
385 x.printStackTrace();
Mark Slee844ac122007-11-27 08:38:52 +0000386 }
Mark Sleed788b2e2006-09-07 01:26:35 +0000387
Mark Slee95771002006-06-07 06:53:25 +0000388 }
Mark Sleed788b2e2006-09-07 01:26:35 +0000389
Mark Slee95771002006-06-07 06:53:25 +0000390}