221 lines
5.3 KiB
JavaScript
221 lines
5.3 KiB
JavaScript
/*
|
|
* 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.
|
|
*/
|
|
|
|
//This is the server side Node test handler for the standard
|
|
// Apache Thrift test service.
|
|
const helpers = require("./helpers");
|
|
const ttypes = require(`./${helpers.genPath}/ThriftTest_types`);
|
|
const TException = require("thrift").Thrift.TException;
|
|
|
|
function makeSyncHandler() {
|
|
return function(thing) {
|
|
return thing;
|
|
};
|
|
}
|
|
|
|
const syncHandlers = {
|
|
testVoid: testVoid,
|
|
testMapMap: testMapMap,
|
|
testInsanity: testInsanity,
|
|
testMulti: testMulti,
|
|
testException: testException,
|
|
testMultiException: testMultiException,
|
|
testOneway: testOneway
|
|
};
|
|
|
|
function makeAsyncHandler(label) {
|
|
return function(thing, result) {
|
|
thing = syncHandlers[label](thing);
|
|
result(null, thing);
|
|
};
|
|
}
|
|
|
|
const asyncHandlers = {
|
|
testVoid: testVoidAsync,
|
|
testMulti: testMultiAsync,
|
|
testException: testExceptionAsync,
|
|
testMultiException: testMultiExceptionAsync,
|
|
testOneway: testOnewayAsync
|
|
};
|
|
|
|
const identityHandlers = [
|
|
"testString",
|
|
"testBool",
|
|
"testByte",
|
|
"testI32",
|
|
"testI64",
|
|
"testDouble",
|
|
"testBinary",
|
|
"testStruct",
|
|
"testNest",
|
|
"testMap",
|
|
"testStringMap",
|
|
"testSet",
|
|
"testList",
|
|
"testEnum",
|
|
"testTypedef"
|
|
];
|
|
|
|
function testVoid() {
|
|
//console.log('testVoid()');
|
|
}
|
|
|
|
function testVoidAsync(result) {
|
|
result(testVoid());
|
|
}
|
|
|
|
function testMapMap() {
|
|
const mapmap = [];
|
|
const pos = [];
|
|
const neg = [];
|
|
for (let i = 1; i < 5; i++) {
|
|
pos[i] = i;
|
|
neg[-i] = -i;
|
|
}
|
|
mapmap[4] = pos;
|
|
mapmap[-4] = neg;
|
|
|
|
return mapmap;
|
|
}
|
|
|
|
function testInsanity(argument) {
|
|
//console.log('testInsanity(');
|
|
//console.log(argument);
|
|
//console.log(')');
|
|
|
|
const first_map = [];
|
|
const second_map = [];
|
|
|
|
first_map[ttypes.Numberz.TWO] = argument;
|
|
first_map[ttypes.Numberz.THREE] = argument;
|
|
|
|
const looney = new ttypes.Insanity();
|
|
second_map[ttypes.Numberz.SIX] = looney;
|
|
|
|
const insane = [];
|
|
insane[1] = first_map;
|
|
insane[2] = second_map;
|
|
|
|
//console.log('insane result:');
|
|
//console.log(insane);
|
|
return insane;
|
|
}
|
|
|
|
function testMulti(arg0, arg1, arg2) {
|
|
//console.log('testMulti()');
|
|
|
|
const hello = new ttypes.Xtruct();
|
|
hello.string_thing = "Hello2";
|
|
hello.byte_thing = arg0;
|
|
hello.i32_thing = arg1;
|
|
hello.i64_thing = arg2;
|
|
return hello;
|
|
}
|
|
|
|
function testMultiAsync(arg0, arg1, arg2, arg3, arg4, arg5, result) {
|
|
const hello = testMulti(arg0, arg1, arg2, arg3, arg4, arg5);
|
|
result(null, hello);
|
|
}
|
|
|
|
function testException(arg) {
|
|
//console.log('testException('+arg+')');
|
|
if (arg === "Xception") {
|
|
const x = new ttypes.Xception();
|
|
x.errorCode = 1001;
|
|
x.message = arg;
|
|
throw x;
|
|
} else if (arg === "TException") {
|
|
throw new TException(arg);
|
|
} else {
|
|
return;
|
|
}
|
|
}
|
|
|
|
function testExceptionAsync(arg, result) {
|
|
//console.log('testException('+arg+')');
|
|
if (arg === "Xception") {
|
|
const x = new ttypes.Xception();
|
|
x.errorCode = 1001;
|
|
x.message = arg;
|
|
result(x);
|
|
} else if (arg === "TException") {
|
|
result(new TException(arg));
|
|
} else {
|
|
result(null);
|
|
}
|
|
}
|
|
|
|
function testMultiException(arg0, arg1) {
|
|
//console.log('testMultiException(' + arg0 + ', ' + arg1 + ')');
|
|
if (arg0 === "Xception") {
|
|
const x = new ttypes.Xception();
|
|
x.errorCode = 1001;
|
|
x.message = "This is an Xception";
|
|
throw x;
|
|
} else if (arg0 === "Xception2") {
|
|
const x2 = new ttypes.Xception2();
|
|
x2.errorCode = 2002;
|
|
x2.struct_thing = new ttypes.Xtruct();
|
|
x2.struct_thing.string_thing = "This is an Xception2";
|
|
throw x2;
|
|
}
|
|
|
|
const res = new ttypes.Xtruct();
|
|
res.string_thing = arg1;
|
|
return res;
|
|
}
|
|
|
|
function testMultiExceptionAsync(arg0, arg1, result) {
|
|
//console.log('testMultiException(' + arg0 + ', ' + arg1 + ')');
|
|
if (arg0 === "Xception") {
|
|
const x = new ttypes.Xception();
|
|
x.errorCode = 1001;
|
|
x.message = "This is an Xception";
|
|
result(x);
|
|
} else if (arg0 === "Xception2") {
|
|
const x2 = new ttypes.Xception2();
|
|
x2.errorCode = 2002;
|
|
x2.struct_thing = new ttypes.Xtruct();
|
|
x2.struct_thing.string_thing = "This is an Xception2";
|
|
result(x2);
|
|
} else {
|
|
const res = new ttypes.Xtruct();
|
|
res.string_thing = arg1;
|
|
result(null, res);
|
|
}
|
|
}
|
|
|
|
//console.log('testOneway(' + sleepFor + ') => JavaScript (like Rust) never sleeps!');
|
|
function testOneway() {}
|
|
|
|
function testOnewayAsync(sleepFor) {
|
|
testOneway(sleepFor);
|
|
}
|
|
|
|
identityHandlers.forEach(function(label) {
|
|
syncHandlers[label] = makeSyncHandler(label);
|
|
asyncHandlers[label] = makeAsyncHandler(label);
|
|
});
|
|
|
|
["testMapMap", "testInsanity"].forEach(function(label) {
|
|
asyncHandlers[label] = makeAsyncHandler(label);
|
|
});
|
|
|
|
exports.ThriftTestHandler = asyncHandlers;
|