blob: 823b4e7ee03c609c870376175e603b5a80afdfc1 [file] [log] [blame]
wilfrem2c69b5a2015-04-20 19:24:50 +09001/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * 'License'); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
20//This is the server side Node test handler for the standard
21// Apache Thrift test service.
22
23import ttypes = require("./gen-nodejs/ThriftTest_types");
24import thrift = require("thrift");
25import Thrift = thrift.Thrift;
26import Q = require("q");
Mustafa Senol Cosarf86845e2018-12-05 17:50:18 +030027import Int64 = require("node-int64");
wilfrem2c69b5a2015-04-20 19:24:50 +090028
wilfrem2c69b5a2015-04-20 19:24:50 +090029export class SyncThriftTestHandler {
30 testVoid(): Q.IPromise<void> {
31 //console.log('testVoid()');
32 return Q.resolve<void>(undefined);
33 }
34 testMapMap(hello: number) {
35 //console.log('testMapMap(' + hello + ')');
36
Cameron Martincaef0ed2025-01-15 11:58:39 +010037 var mapmap: { [key: number]: { [key: number]: number } } = [];
38 var pos: { [key: number]: number } = [];
39 var neg: { [key: number]: number } = [];
wilfrem2c69b5a2015-04-20 19:24:50 +090040 for (var i = 1; i < 5; i++) {
41 pos[i] = i;
42 neg[-i] = -i;
43 }
44 mapmap[4] = pos;
45 mapmap[-4] = neg;
46
47 return Q.resolve(mapmap);
48 }
Cameron Martincaef0ed2025-01-15 11:58:39 +010049 testInsanity(argument: ttypes.Insanity): Q.IPromise<{ [k: number]: any }> {
50 const first_map: { [k: number]: any } = [];
51 const second_map: { [k: number]: any } = [];
52
wilfrem2c69b5a2015-04-20 19:24:50 +090053 first_map[ttypes.Numberz.TWO] = argument;
54 first_map[ttypes.Numberz.THREE] = argument;
Cameron Martincaef0ed2025-01-15 11:58:39 +010055
wilfrem2c69b5a2015-04-20 19:24:50 +090056 const looney = new ttypes.Insanity();
57 second_map[ttypes.Numberz.SIX] = looney;
Cameron Martincaef0ed2025-01-15 11:58:39 +010058
59 const insane: { [k: number]: any } = [];
wilfrem2c69b5a2015-04-20 19:24:50 +090060 insane[1] = first_map;
61 insane[2] = second_map;
62
63 return Q.resolve(insane);
64 }
Cameron Martincaef0ed2025-01-15 11:58:39 +010065 testMulti(
66 arg0: any,
67 arg1: number,
68 arg2: Int64,
69 arg3: { [k: number]: string },
70 arg4: ttypes.Numberz,
71 arg5: number,
72 ) {
wilfrem2c69b5a2015-04-20 19:24:50 +090073 var hello = new ttypes.Xtruct();
Cameron Martincaef0ed2025-01-15 11:58:39 +010074 hello.string_thing = "Hello2";
wilfrem2c69b5a2015-04-20 19:24:50 +090075 hello.byte_thing = arg0;
76 hello.i32_thing = arg1;
77 hello.i64_thing = arg2;
78 return Q.resolve(hello);
79 }
80 testException(arg: string): Q.IPromise<void> {
Cameron Martincaef0ed2025-01-15 11:58:39 +010081 if (arg === "Xception") {
wilfrem2c69b5a2015-04-20 19:24:50 +090082 var x = new ttypes.Xception();
83 x.errorCode = 1001;
84 x.message = arg;
85 throw x;
Cameron Martincaef0ed2025-01-15 11:58:39 +010086 } else if (arg === "TException") {
wilfrem2c69b5a2015-04-20 19:24:50 +090087 throw new Thrift.TException(arg);
88 } else {
89 return Q.resolve();
90 }
91 }
92 testMultiException(arg0: string, arg1: string) {
Cameron Martincaef0ed2025-01-15 11:58:39 +010093 if (arg0 === "Xception") {
wilfrem2c69b5a2015-04-20 19:24:50 +090094 var x = new ttypes.Xception();
95 x.errorCode = 1001;
Cameron Martincaef0ed2025-01-15 11:58:39 +010096 x.message = "This is an Xception";
wilfrem2c69b5a2015-04-20 19:24:50 +090097 throw x;
Cameron Martincaef0ed2025-01-15 11:58:39 +010098 } else if (arg0 === "Xception2") {
wilfrem2c69b5a2015-04-20 19:24:50 +090099 var x2 = new ttypes.Xception2();
100 x2.errorCode = 2002;
101 x2.struct_thing = new ttypes.Xtruct();
Cameron Martincaef0ed2025-01-15 11:58:39 +0100102 x2.struct_thing.string_thing = "This is an Xception2";
wilfrem2c69b5a2015-04-20 19:24:50 +0900103 throw x2;
104 }
105
106 var res = new ttypes.Xtruct();
107 res.string_thing = arg1;
108 return Q.resolve(res);
109 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100110 testOneway(sleepFor: number) {}
wilfrem2c69b5a2015-04-20 19:24:50 +0900111
112 testString(thing: string) {
113 return Q.resolve(thing);
114 }
115 testBool(thing: boolean) {
116 return Q.resolve(thing);
117 }
118 testByte(thing: number) {
119 return Q.resolve(thing);
120 }
121 testI32(thing: number) {
122 return Q.resolve(thing);
123 }
124 testI64(thing: number) {
125 return Q.resolve(thing);
126 }
127 testDouble(thing: number) {
128 return Q.resolve(thing);
129 }
130 testBinary(thing: Buffer) {
131 return Q.resolve(thing);
132 }
133 testStruct(thing: ttypes.Xtruct) {
134 return Q.resolve(thing);
135 }
136 testNest(thing: ttypes.Xtruct2) {
137 return Q.resolve(thing);
138 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100139 testMap(thing: { [k: number]: number }) {
wilfrem2c69b5a2015-04-20 19:24:50 +0900140 return Q.resolve(thing);
141 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100142 testStringMap(thing: { [k: string]: string }) {
wilfrem2c69b5a2015-04-20 19:24:50 +0900143 return Q.resolve(thing);
144 }
145 testSet(thing: number[]) {
146 return Q.resolve(thing);
147 }
148 testList(thing: number[]) {
149 return Q.resolve(thing);
150 }
151 testEnum(thing: ttypes.Numberz) {
152 return Q.resolve(thing);
153 }
154 testTypedef(thing: number) {
155 return Q.resolve(thing);
156 }
157}
158
159export class AsyncThriftTestHandler {
160 private syncHandler: SyncThriftTestHandler;
161 constructor() {
162 this.syncHandler = new SyncThriftTestHandler();
163 }
164
165 testVoid(callback: (result: void) => void): Q.IPromise<void> {
166 callback(undefined);
167 return Q.resolve();
168 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100169 testMapMap(
170 hello: number,
171 callback: (
172 err: any,
173 result: { [k: number]: { [k: number]: number } },
174 ) => void,
175 ): Q.IPromise<{ [k: number]: { [k: number]: number } }> {
176 var mapmap: { [key: number]: { [key: number]: number } } = [];
177 var pos: { [key: number]: number } = [];
178 var neg: { [key: number]: number } = [];
wilfrem2c69b5a2015-04-20 19:24:50 +0900179 for (var i = 1; i < 5; i++) {
180 pos[i] = i;
181 neg[-i] = -i;
182 }
183 mapmap[4] = pos;
184 mapmap[-4] = neg;
185
186 callback(null, mapmap);
187 return Q.resolve();
188 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100189 testInsanity(
190 argument: ttypes.Insanity,
191 callback?: (err: any, result: { [k: number]: any }) => void,
192 ): Q.IPromise<{ [k: number]: any }> {
193 const first_map: { [k: number]: any } = [];
194 const second_map: { [k: number]: any } = [];
195
wilfrem2c69b5a2015-04-20 19:24:50 +0900196 first_map[ttypes.Numberz.TWO] = argument;
197 first_map[ttypes.Numberz.THREE] = argument;
Cameron Martincaef0ed2025-01-15 11:58:39 +0100198
wilfrem2c69b5a2015-04-20 19:24:50 +0900199 const looney = new ttypes.Insanity();
200 second_map[ttypes.Numberz.SIX] = looney;
Cameron Martincaef0ed2025-01-15 11:58:39 +0100201
202 const insane: { [k: number]: any } = [];
wilfrem2c69b5a2015-04-20 19:24:50 +0900203 insane[1] = first_map;
204 insane[2] = second_map;
205
Cameron Martincaef0ed2025-01-15 11:58:39 +0100206 if (callback !== undefined) {
wilfrem2c69b5a2015-04-20 19:24:50 +0900207 callback(null, insane);
208 }
209 return Q.resolve();
210 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100211 testMulti(
212 arg0: any,
213 arg1: number,
214 arg2: Int64,
215 arg3: { [k: number]: string },
216 arg4: ttypes.Numberz,
217 arg5: number,
218 result: Function,
219 ): Q.IPromise<ttypes.Xtruct> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900220 var hello = this.syncHandler.testMulti(arg0, arg1, arg2, arg3, arg4, arg5);
Cameron Martincaef0ed2025-01-15 11:58:39 +0100221 hello.then((hello) => result(null, hello));
wilfrem2c69b5a2015-04-20 19:24:50 +0900222 return Q.resolve();
223 }
224 testException(arg: string, result: (err: any) => void): Q.IPromise<void> {
Cameron Martincaef0ed2025-01-15 11:58:39 +0100225 if (arg === "Xception") {
wilfrem2c69b5a2015-04-20 19:24:50 +0900226 var x = new ttypes.Xception();
227 x.errorCode = 1001;
228 x.message = arg;
229 result(x);
Cameron Martincaef0ed2025-01-15 11:58:39 +0100230 } else if (arg === "TException") {
wilfrem2c69b5a2015-04-20 19:24:50 +0900231 result(new Thrift.TException(arg));
232 } else {
233 result(null);
234 }
235 return Q.resolve();
236 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100237 testMultiException(
238 arg0: string,
239 arg1: string,
240 result: (err: any, res?: ttypes.Xtruct) => void,
241 ): Q.IPromise<ttypes.Xtruct> {
242 if (arg0 === "Xception") {
wilfrem2c69b5a2015-04-20 19:24:50 +0900243 var x = new ttypes.Xception();
244 x.errorCode = 1001;
Cameron Martincaef0ed2025-01-15 11:58:39 +0100245 x.message = "This is an Xception";
wilfrem2c69b5a2015-04-20 19:24:50 +0900246 result(x);
Cameron Martincaef0ed2025-01-15 11:58:39 +0100247 } else if (arg0 === "Xception2") {
wilfrem2c69b5a2015-04-20 19:24:50 +0900248 var x2 = new ttypes.Xception2();
249 x2.errorCode = 2002;
250 x2.struct_thing = new ttypes.Xtruct();
Cameron Martincaef0ed2025-01-15 11:58:39 +0100251 x2.struct_thing.string_thing = "This is an Xception2";
wilfrem2c69b5a2015-04-20 19:24:50 +0900252 result(x2);
253 } else {
254 var res = new ttypes.Xtruct();
255 res.string_thing = arg1;
256 result(null, res);
257 }
258 return Q.resolve();
259 }
260 testOneway(sleepFor: number, result: Function) {
261 this.syncHandler.testOneway(sleepFor);
262 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100263 testString(
264 thing: string,
265 callback: (err: any, result: string) => void,
266 ): Q.IPromise<string> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900267 callback(null, thing);
268 return Q.resolve();
269 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100270 testByte(
271 thing: number,
272 callback: (err: any, result: number) => void,
273 ): Q.IPromise<number> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900274 callback(null, thing);
275 return Q.resolve();
276 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100277 testBool(
278 thing: boolean,
279 callback: (err: any, result: boolean) => void,
280 ): Q.IPromise<boolean> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900281 callback(null, thing);
282 return Q.resolve();
283 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100284 testI32(
285 thing: number,
286 callback: (err: any, result: number) => void,
287 ): Q.IPromise<number> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900288 callback(null, thing);
289 return Q.resolve();
290 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100291 testI64(
292 thing: number,
293 callback: (err: any, result: number) => void,
294 ): Q.IPromise<number> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900295 callback(null, thing);
296 return Q.resolve();
297 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100298 testDouble(
299 thing: number,
300 callback: (err: any, result: number) => void,
301 ): Q.IPromise<number> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900302 callback(null, thing);
303 return Q.resolve();
304 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100305 testBinary(
306 thing: Buffer,
307 callback: (err: any, result: Buffer) => void,
308 ): Q.IPromise<Buffer> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900309 callback(null, thing);
310 return Q.resolve();
311 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100312 testStruct(
313 thing: ttypes.Xtruct,
314 callback: (err: any, result: ttypes.Xtruct) => void,
315 ): Q.IPromise<ttypes.Xtruct> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900316 callback(null, thing);
317 return Q.resolve();
318 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100319 testNest(
320 thing: ttypes.Xtruct2,
321 callback: (err: any, result: ttypes.Xtruct2) => void,
322 ): Q.IPromise<ttypes.Xtruct2> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900323 callback(null, thing);
324 return Q.resolve();
325 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100326 testMap(
327 thing: { [k: number]: number },
328 callback: (err: any, result: { [k: number]: number }) => void,
329 ): Q.IPromise<{ [k: number]: number }> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900330 callback(null, thing);
331 return Q.resolve();
332 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100333 testStringMap(
334 thing: { [k: string]: string },
335 callback: (err: any, result: { [k: string]: string }) => void,
336 ): Q.IPromise<{ [k: string]: string }> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900337 callback(null, thing);
338 return Q.resolve();
339 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100340 testSet(
341 thing: number[],
342 callback: (err: any, result: number[]) => void,
343 ): Q.IPromise<number[]> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900344 callback(null, thing);
345 return Q.resolve();
346 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100347 testList(
348 thing: number[],
349 callback: (err: any, result: number[]) => void,
350 ): Q.IPromise<number[]> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900351 callback(null, thing);
352 return Q.resolve();
353 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100354 testEnum(
355 thing: ttypes.Numberz,
356 callback: (err: any, result: ttypes.Numberz) => void,
357 ): Q.IPromise<ttypes.Numberz> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900358 callback(null, thing);
359 return Q.resolve();
360 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100361 testTypedef(
362 thing: number,
363 callback: (err: any, result: number) => void,
364 ): Q.IPromise<number> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900365 callback(null, thing);
366 return Q.resolve();
367 }
368}