blob: 0b421d1ed91baa58d6e5c6c4685cdd798de2c661 [file] [log] [blame]
-- 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.
require('ThriftTest_ThriftTest')
require('TSocket')
require('TBufferedTransport')
require('TFramedTransport')
require('THttpTransport')
require('TCompactProtocol')
require('TJsonProtocol')
require('TBinaryProtocol')
require('TServer')
local liblualongnumber = require('liblualongnumber')
--------------------------------------------------------------------------------
-- Handler
TestHandler = ThriftTestIface:new{}
-- Stops the server
function TestHandler:testVoid()
end
function TestHandler:testString(str)
return str
end
function TestHandler:testBool(bool)
return bool
end
function TestHandler:testByte(byte)
return byte
end
function TestHandler:testI32(i32)
return i32
end
function TestHandler:testI64(i64)
return i64
end
function TestHandler:testDouble(d)
return d
end
function TestHandler:testBinary(by)
return by
end
function TestHandler:testUuid(uuid)
return uuid
end
function TestHandler:testNest(thing)
return thing
end
function TestHandler:testStruct(thing)
return thing
end
function TestHandler:testMap(thing)
return thing
end
function TestHandler:testStringMap(thing)
return thing
end
function TestHandler:testSet(thing)
return thing
end
function TestHandler:testList(thing)
return thing
end
function TestHandler:testEnum(thing)
return thing
end
function TestHandler:testTypedef(thing)
return thing
end
function TestHandler:testMapMap(hello)
return {
["-4"] = {
["-4"] = -4,
["-3"] = -3,
["-2"] = -2,
["-1"] = -1
},
["4"] = {
["1"] = 1,
["2"] = 2,
["3"] = 3,
["4"] = 4
}
}
end
function TestHandler:testInsanity(argument)
local first_map = {
[Numberz.TWO] = argument,
[Numberz.THREE] = argument
};
local second_map = {
[Numberz.SIX] = Insanity:new {
userMap = {},
xtructs = {}
}
}
return {
["1"] = first_map,
["2"] = second_map
};
end
function TestHandler:testMulti(arg0, arg1, arg2, arg3, arg4, arg5)
return Xtruct:new {}
end
function TestHandler:testException(arg)
if arg == "Xception" then
return Xception:new {
errorCode = 1001,
message = arg
}
elseif arg == "TException" then
error("")
end
end
function TestHandler:testMultiException(arg0, arg1)
if arg0 == "Xception" then
return Xception:new {
errorCode = 1001,
message = "This is an Xception"
}
elseif arg0 == "Xception2" then
return Xception2:new {
errorCode = 2002,
struct_thing = Xtruct:new {
string_thing = "This is an Xception2"
}
}
elseif arg0 == "TException" then
error("")
end
return Xtruct:new {
string_thing = arg1
}
end
function TestHandler:testOneway(secondsToSleep)
print("testOneway secondsToSleep:", secondsToSleep)
end
--------------------------------------------------------------------------------
-- Test
local server
function teardown()
if server then
server:close()
end
end
function parseArgs(rawArgs)
local opt = {
protocol='binary',
transport='buffered',
port='9090',
}
for i, str in pairs(rawArgs) do
if i > 0 then
k, v = string.match(str, '--(%w+)=(%w+)')
assert(opt[k] ~= nil, 'Unknown argument')
opt[k] = v
end
end
return opt
end
function testBasicServer(rawArgs)
local opt = parseArgs(rawArgs)
-- Handler & Processor
local handler = TestHandler:new{}
assert(handler, 'Failed to create handler')
local processor = ThriftTestProcessor:new{
handler = handler
}
assert(processor, 'Failed to create processor')
-- Server Socket
local socket = TServerSocket:new{
port = opt.port
}
assert(socket, 'Failed to create server socket')
-- Transport & Factory
local transports = {
buffered = TBufferedTransportFactory,
framed = TFramedTransportFactory,
http = THttpTransportFactory,
}
assert(transports[opt.transport], 'Failed to create framed transport factory')
local trans_factory = transports[opt.transport]:new{}
local protocols = {
binary = TBinaryProtocolFactory,
compact = TCompactProtocolFactory,
json = TJSONProtocolFactory,
}
local prot_factory = protocols[opt.protocol]:new{}
assert(prot_factory, 'Failed to create binary protocol factory')
-- Simple Server
server = TSimpleServer:new{
processor = processor,
serverTransport = socket,
transportFactory = trans_factory,
protocolFactory = prot_factory
}
assert(server, 'Failed to create server')
server:setExceptionHandler(function (err) error(err) end)
-- Serve
server:serve()
server = nil
end
testBasicServer(arg)
teardown()