blob: 9e74a6b11d5fb08d0c873b43949d584706c9c469 [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");
CJCombrinkdfeab8d2026-03-06 07:03:56 +010028import { v4 as uuid } from "uuid";
29type uuid = string;
wilfrem2c69b5a2015-04-20 19:24:50 +090030
wilfrem2c69b5a2015-04-20 19:24:50 +090031export class SyncThriftTestHandler {
32 testVoid(): Q.IPromise<void> {
33 //console.log('testVoid()');
34 return Q.resolve<void>(undefined);
35 }
36 testMapMap(hello: number) {
37 //console.log('testMapMap(' + hello + ')');
38
Cameron Martincaef0ed2025-01-15 11:58:39 +010039 var mapmap: { [key: number]: { [key: number]: number } } = [];
40 var pos: { [key: number]: number } = [];
41 var neg: { [key: number]: number } = [];
wilfrem2c69b5a2015-04-20 19:24:50 +090042 for (var i = 1; i < 5; i++) {
43 pos[i] = i;
44 neg[-i] = -i;
45 }
46 mapmap[4] = pos;
47 mapmap[-4] = neg;
48
49 return Q.resolve(mapmap);
50 }
Cameron Martincaef0ed2025-01-15 11:58:39 +010051 testInsanity(argument: ttypes.Insanity): Q.IPromise<{ [k: number]: any }> {
52 const first_map: { [k: number]: any } = [];
53 const second_map: { [k: number]: any } = [];
54
wilfrem2c69b5a2015-04-20 19:24:50 +090055 first_map[ttypes.Numberz.TWO] = argument;
56 first_map[ttypes.Numberz.THREE] = argument;
Cameron Martincaef0ed2025-01-15 11:58:39 +010057
wilfrem2c69b5a2015-04-20 19:24:50 +090058 const looney = new ttypes.Insanity();
59 second_map[ttypes.Numberz.SIX] = looney;
Cameron Martincaef0ed2025-01-15 11:58:39 +010060
61 const insane: { [k: number]: any } = [];
wilfrem2c69b5a2015-04-20 19:24:50 +090062 insane[1] = first_map;
63 insane[2] = second_map;
64
65 return Q.resolve(insane);
66 }
Cameron Martincaef0ed2025-01-15 11:58:39 +010067 testMulti(
68 arg0: any,
69 arg1: number,
70 arg2: Int64,
71 arg3: { [k: number]: string },
72 arg4: ttypes.Numberz,
73 arg5: number,
74 ) {
wilfrem2c69b5a2015-04-20 19:24:50 +090075 var hello = new ttypes.Xtruct();
Cameron Martincaef0ed2025-01-15 11:58:39 +010076 hello.string_thing = "Hello2";
wilfrem2c69b5a2015-04-20 19:24:50 +090077 hello.byte_thing = arg0;
78 hello.i32_thing = arg1;
79 hello.i64_thing = arg2;
80 return Q.resolve(hello);
81 }
82 testException(arg: string): Q.IPromise<void> {
Cameron Martincaef0ed2025-01-15 11:58:39 +010083 if (arg === "Xception") {
wilfrem2c69b5a2015-04-20 19:24:50 +090084 var x = new ttypes.Xception();
85 x.errorCode = 1001;
86 x.message = arg;
87 throw x;
Cameron Martincaef0ed2025-01-15 11:58:39 +010088 } else if (arg === "TException") {
wilfrem2c69b5a2015-04-20 19:24:50 +090089 throw new Thrift.TException(arg);
90 } else {
91 return Q.resolve();
92 }
93 }
94 testMultiException(arg0: string, arg1: string) {
Cameron Martincaef0ed2025-01-15 11:58:39 +010095 if (arg0 === "Xception") {
wilfrem2c69b5a2015-04-20 19:24:50 +090096 var x = new ttypes.Xception();
97 x.errorCode = 1001;
Cameron Martincaef0ed2025-01-15 11:58:39 +010098 x.message = "This is an Xception";
wilfrem2c69b5a2015-04-20 19:24:50 +090099 throw x;
Cameron Martincaef0ed2025-01-15 11:58:39 +0100100 } else if (arg0 === "Xception2") {
wilfrem2c69b5a2015-04-20 19:24:50 +0900101 var x2 = new ttypes.Xception2();
102 x2.errorCode = 2002;
103 x2.struct_thing = new ttypes.Xtruct();
Cameron Martincaef0ed2025-01-15 11:58:39 +0100104 x2.struct_thing.string_thing = "This is an Xception2";
wilfrem2c69b5a2015-04-20 19:24:50 +0900105 throw x2;
106 }
107
108 var res = new ttypes.Xtruct();
109 res.string_thing = arg1;
110 return Q.resolve(res);
111 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100112 testOneway(sleepFor: number) {}
wilfrem2c69b5a2015-04-20 19:24:50 +0900113
114 testString(thing: string) {
115 return Q.resolve(thing);
116 }
117 testBool(thing: boolean) {
118 return Q.resolve(thing);
119 }
120 testByte(thing: number) {
121 return Q.resolve(thing);
122 }
123 testI32(thing: number) {
124 return Q.resolve(thing);
125 }
126 testI64(thing: number) {
127 return Q.resolve(thing);
128 }
129 testDouble(thing: number) {
130 return Q.resolve(thing);
131 }
132 testBinary(thing: Buffer) {
133 return Q.resolve(thing);
134 }
CJCombrinkdfeab8d2026-03-06 07:03:56 +0100135 testUuid(thing: uuid) {
136 return Q.resolve(thing);
137 }
wilfrem2c69b5a2015-04-20 19:24:50 +0900138 testStruct(thing: ttypes.Xtruct) {
139 return Q.resolve(thing);
140 }
141 testNest(thing: ttypes.Xtruct2) {
142 return Q.resolve(thing);
143 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100144 testMap(thing: { [k: number]: number }) {
wilfrem2c69b5a2015-04-20 19:24:50 +0900145 return Q.resolve(thing);
146 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100147 testStringMap(thing: { [k: string]: string }) {
wilfrem2c69b5a2015-04-20 19:24:50 +0900148 return Q.resolve(thing);
149 }
150 testSet(thing: number[]) {
151 return Q.resolve(thing);
152 }
153 testList(thing: number[]) {
154 return Q.resolve(thing);
155 }
156 testEnum(thing: ttypes.Numberz) {
157 return Q.resolve(thing);
158 }
159 testTypedef(thing: number) {
160 return Q.resolve(thing);
161 }
162}
163
164export class AsyncThriftTestHandler {
165 private syncHandler: SyncThriftTestHandler;
166 constructor() {
167 this.syncHandler = new SyncThriftTestHandler();
168 }
169
170 testVoid(callback: (result: void) => void): Q.IPromise<void> {
171 callback(undefined);
172 return Q.resolve();
173 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100174 testMapMap(
175 hello: number,
176 callback: (
177 err: any,
178 result: { [k: number]: { [k: number]: number } },
179 ) => void,
180 ): Q.IPromise<{ [k: number]: { [k: number]: number } }> {
181 var mapmap: { [key: number]: { [key: number]: number } } = [];
182 var pos: { [key: number]: number } = [];
183 var neg: { [key: number]: number } = [];
wilfrem2c69b5a2015-04-20 19:24:50 +0900184 for (var i = 1; i < 5; i++) {
185 pos[i] = i;
186 neg[-i] = -i;
187 }
188 mapmap[4] = pos;
189 mapmap[-4] = neg;
190
191 callback(null, mapmap);
192 return Q.resolve();
193 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100194 testInsanity(
195 argument: ttypes.Insanity,
196 callback?: (err: any, result: { [k: number]: any }) => void,
197 ): Q.IPromise<{ [k: number]: any }> {
198 const first_map: { [k: number]: any } = [];
199 const second_map: { [k: number]: any } = [];
200
wilfrem2c69b5a2015-04-20 19:24:50 +0900201 first_map[ttypes.Numberz.TWO] = argument;
202 first_map[ttypes.Numberz.THREE] = argument;
Cameron Martincaef0ed2025-01-15 11:58:39 +0100203
wilfrem2c69b5a2015-04-20 19:24:50 +0900204 const looney = new ttypes.Insanity();
205 second_map[ttypes.Numberz.SIX] = looney;
Cameron Martincaef0ed2025-01-15 11:58:39 +0100206
207 const insane: { [k: number]: any } = [];
wilfrem2c69b5a2015-04-20 19:24:50 +0900208 insane[1] = first_map;
209 insane[2] = second_map;
210
Cameron Martincaef0ed2025-01-15 11:58:39 +0100211 if (callback !== undefined) {
wilfrem2c69b5a2015-04-20 19:24:50 +0900212 callback(null, insane);
213 }
214 return Q.resolve();
215 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100216 testMulti(
217 arg0: any,
218 arg1: number,
219 arg2: Int64,
220 arg3: { [k: number]: string },
221 arg4: ttypes.Numberz,
222 arg5: number,
223 result: Function,
224 ): Q.IPromise<ttypes.Xtruct> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900225 var hello = this.syncHandler.testMulti(arg0, arg1, arg2, arg3, arg4, arg5);
Cameron Martincaef0ed2025-01-15 11:58:39 +0100226 hello.then((hello) => result(null, hello));
wilfrem2c69b5a2015-04-20 19:24:50 +0900227 return Q.resolve();
228 }
229 testException(arg: string, result: (err: any) => void): Q.IPromise<void> {
Cameron Martincaef0ed2025-01-15 11:58:39 +0100230 if (arg === "Xception") {
wilfrem2c69b5a2015-04-20 19:24:50 +0900231 var x = new ttypes.Xception();
232 x.errorCode = 1001;
233 x.message = arg;
234 result(x);
Cameron Martincaef0ed2025-01-15 11:58:39 +0100235 } else if (arg === "TException") {
wilfrem2c69b5a2015-04-20 19:24:50 +0900236 result(new Thrift.TException(arg));
237 } else {
238 result(null);
239 }
240 return Q.resolve();
241 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100242 testMultiException(
243 arg0: string,
244 arg1: string,
245 result: (err: any, res?: ttypes.Xtruct) => void,
246 ): Q.IPromise<ttypes.Xtruct> {
247 if (arg0 === "Xception") {
wilfrem2c69b5a2015-04-20 19:24:50 +0900248 var x = new ttypes.Xception();
249 x.errorCode = 1001;
Cameron Martincaef0ed2025-01-15 11:58:39 +0100250 x.message = "This is an Xception";
wilfrem2c69b5a2015-04-20 19:24:50 +0900251 result(x);
Cameron Martincaef0ed2025-01-15 11:58:39 +0100252 } else if (arg0 === "Xception2") {
wilfrem2c69b5a2015-04-20 19:24:50 +0900253 var x2 = new ttypes.Xception2();
254 x2.errorCode = 2002;
255 x2.struct_thing = new ttypes.Xtruct();
Cameron Martincaef0ed2025-01-15 11:58:39 +0100256 x2.struct_thing.string_thing = "This is an Xception2";
wilfrem2c69b5a2015-04-20 19:24:50 +0900257 result(x2);
258 } else {
259 var res = new ttypes.Xtruct();
260 res.string_thing = arg1;
261 result(null, res);
262 }
263 return Q.resolve();
264 }
265 testOneway(sleepFor: number, result: Function) {
266 this.syncHandler.testOneway(sleepFor);
267 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100268 testString(
269 thing: string,
270 callback: (err: any, result: string) => void,
271 ): Q.IPromise<string> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900272 callback(null, thing);
273 return Q.resolve();
274 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100275 testByte(
276 thing: number,
277 callback: (err: any, result: number) => void,
278 ): Q.IPromise<number> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900279 callback(null, thing);
280 return Q.resolve();
281 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100282 testBool(
283 thing: boolean,
284 callback: (err: any, result: boolean) => void,
285 ): Q.IPromise<boolean> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900286 callback(null, thing);
287 return Q.resolve();
288 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100289 testI32(
290 thing: number,
291 callback: (err: any, result: number) => void,
292 ): Q.IPromise<number> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900293 callback(null, thing);
294 return Q.resolve();
295 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100296 testI64(
297 thing: number,
298 callback: (err: any, result: number) => void,
299 ): Q.IPromise<number> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900300 callback(null, thing);
301 return Q.resolve();
302 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100303 testDouble(
304 thing: number,
305 callback: (err: any, result: number) => void,
306 ): Q.IPromise<number> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900307 callback(null, thing);
308 return Q.resolve();
309 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100310 testBinary(
311 thing: Buffer,
312 callback: (err: any, result: Buffer) => void,
313 ): Q.IPromise<Buffer> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900314 callback(null, thing);
315 return Q.resolve();
316 }
CJCombrinkdfeab8d2026-03-06 07:03:56 +0100317 testUuid(
318 thing: uuid,
319 callback: (err: any, result: uuid) => void,
320 ): Q.IPromise<uuid> {
321 callback(null, thing);
322 return Q.resolve();
323 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100324 testStruct(
325 thing: ttypes.Xtruct,
326 callback: (err: any, result: ttypes.Xtruct) => void,
327 ): Q.IPromise<ttypes.Xtruct> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900328 callback(null, thing);
329 return Q.resolve();
330 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100331 testNest(
332 thing: ttypes.Xtruct2,
333 callback: (err: any, result: ttypes.Xtruct2) => void,
334 ): Q.IPromise<ttypes.Xtruct2> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900335 callback(null, thing);
336 return Q.resolve();
337 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100338 testMap(
339 thing: { [k: number]: number },
340 callback: (err: any, result: { [k: number]: number }) => void,
341 ): Q.IPromise<{ [k: number]: number }> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900342 callback(null, thing);
343 return Q.resolve();
344 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100345 testStringMap(
346 thing: { [k: string]: string },
347 callback: (err: any, result: { [k: string]: string }) => void,
348 ): Q.IPromise<{ [k: string]: string }> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900349 callback(null, thing);
350 return Q.resolve();
351 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100352 testSet(
353 thing: number[],
354 callback: (err: any, result: number[]) => void,
355 ): Q.IPromise<number[]> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900356 callback(null, thing);
357 return Q.resolve();
358 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100359 testList(
360 thing: number[],
361 callback: (err: any, result: number[]) => void,
362 ): Q.IPromise<number[]> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900363 callback(null, thing);
364 return Q.resolve();
365 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100366 testEnum(
367 thing: ttypes.Numberz,
368 callback: (err: any, result: ttypes.Numberz) => void,
369 ): Q.IPromise<ttypes.Numberz> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900370 callback(null, thing);
371 return Q.resolve();
372 }
Cameron Martincaef0ed2025-01-15 11:58:39 +0100373 testTypedef(
374 thing: number,
375 callback: (err: any, result: number) => void,
376 ): Q.IPromise<number> {
wilfrem2c69b5a2015-04-20 19:24:50 +0900377 callback(null, thing);
378 return Q.resolve();
379 }
380}