bug correction on the method xmlrpc.srvMethods
tests/test.lua renamed to apitest.lua adding tests/httptest.lua - automatic tests over http new server side (server.lua)master
parent
e01209c34b
commit
6402524efd
|
@ -1,4 +1,13 @@
|
|||
---------------------------------------------------------------------
|
||||
-- XML-RPC server
|
||||
-- See Copyright Notice in license.html
|
||||
-- $Id$
|
||||
---------------------------------------------------------------------
|
||||
|
||||
require"xmlrpc"
|
||||
require"cgilua"
|
||||
|
||||
module("xmlrpc.server")
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function respond (resp)
|
||||
|
@ -11,17 +20,16 @@ local function respond (resp)
|
|||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
--[[
|
||||
function assert (cond, msg)
|
||||
if not cond then
|
||||
respond (xmlrpc.srvEncode (
|
||||
{ code = 2, message = msg, },
|
||||
true
|
||||
))
|
||||
os.exit() -- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
--os.exit() -- !!!!!!!!!!!
|
||||
end
|
||||
end
|
||||
--]]
|
||||
|
||||
cgilua.seterroroutput (function (msg)
|
||||
respond (xmlrpc.srvEncode ({ code = 2, message = msg, }, true))
|
||||
end)
|
||||
|
@ -55,40 +63,24 @@ local function callfunc (func, arg_table)
|
|||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local kepler_home = "http://www.keplerproject.org"
|
||||
local kepler_products = { "luasql", "lualdap", "luaexpat", "luaxmlrpc", }
|
||||
local kepler_sites = {
|
||||
luasql = kepler_home.."/luasql",
|
||||
lualdap = kepler_home.."/lualdap",
|
||||
luaexpat = kepler_home.."/luaexpat",
|
||||
luaxmlrpc = kepler_home.."/luaxmlrpc",
|
||||
}
|
||||
|
||||
local __methods
|
||||
__methods = {
|
||||
system = {
|
||||
listMethods = function (self)
|
||||
local l = {}
|
||||
for name, obj in pairs (__methods) do
|
||||
for method in pairs (obj) do
|
||||
table.insert (l, name.."."..method)
|
||||
end
|
||||
end
|
||||
return l
|
||||
end,
|
||||
},
|
||||
kepler = {
|
||||
products = function (self) return kepler_products end,
|
||||
site = function (self, prod) return kepler_sites[prod] end,
|
||||
},
|
||||
}
|
||||
function xmlrpc.server:new()
|
||||
local o = { methods = { } }
|
||||
setmetatable (o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Main
|
||||
---------------------------------------------------------------------
|
||||
function xmlrpc.server:register(name, service)
|
||||
assert (type(name) == "string", "Invalid `name': string expected")
|
||||
self.methods[name] = service
|
||||
end
|
||||
|
||||
xmlrpc.srvMethods (__methods)
|
||||
local func, arg_table = decodedata (cgi[1])
|
||||
local ok, result = callfunc (func, arg_table)
|
||||
local r = xmlrpc.srvEncode (result, not ok)
|
||||
respond (r)
|
||||
---------------------------------------------------------------------
|
||||
function xmlrpc.server:handle()
|
||||
xmlrpc.srvMethods (self.methods)
|
||||
local func, arg_table = decodedata (cgi[1])
|
||||
local ok, result = callfunc (func, arg_table)
|
||||
local r = xmlrpc.srvEncode (result, not ok)
|
||||
respond (r)
|
||||
end
|
||||
|
|
|
@ -577,8 +577,12 @@ function srvMethods (tab_or_func)
|
|||
if not ok then
|
||||
return tab_or_func[name]
|
||||
else
|
||||
return function (...)
|
||||
return tab_or_func[obj][method] (obj, unpack (arg))
|
||||
if tab_or_func[obj] and tab_or_func[obj][method] then
|
||||
return function (...)
|
||||
return tab_or_func[obj][method] (obj, unpack (arg))
|
||||
end
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
#!/usr/local/bin/lua50
|
||||
---------------------------------------------------------------------
|
||||
-- XML-RPC Overall API test script
|
||||
-- See Copyright Notice in license.html
|
||||
-- $Id$
|
||||
---------------------------------------------------------------------
|
||||
|
||||
|
||||
require "xmlrpc"
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
---------------------------------------------------------------------
|
||||
-- XML-RPC Automatic Tests
|
||||
-- See Copyright Notice in license.html
|
||||
-- $Id$
|
||||
-----------------------------------------------------------------------
|
||||
|
||||
require"xmlrpc.http"
|
||||
|
||||
local function init_launcher(launcher)
|
||||
if launcher == 'cgilua' then
|
||||
require"cgilua"
|
||||
cgilua.htmlheader()
|
||||
io.write = function(str)
|
||||
cgilua.put(string.gsub(str, '\n','<br>'))
|
||||
end --io.write
|
||||
end --if
|
||||
end
|
||||
|
||||
local function dumpt(t)
|
||||
for k,v in pairs(t) do
|
||||
io.write('\nk='..tostring(k)..'\tv='..tostring(v))
|
||||
if type(v) == 'table' then dumpt(v) end
|
||||
end --for
|
||||
end
|
||||
|
||||
local function test(url, rtype, rvalue, method, args)
|
||||
local status, res
|
||||
io.write('\nURL='..url..'\nMETHOD='..method..'\nPARAMETERS=')
|
||||
io.write(unpack(args or {'void'}))
|
||||
if args then
|
||||
status, xmlstatus, res = pcall( xmlrpc.http.call,url, method, unpack(args))
|
||||
else
|
||||
status, xmlstatus, res = pcall( xmlrpc.http.call,url, method)
|
||||
end --if
|
||||
if not status then
|
||||
io.write('\nFAILURE! '..xmlstatus)
|
||||
else
|
||||
if not xmlstatus and rtype ~= 'failure' then
|
||||
io.write('\nFAILURE! '..res)
|
||||
else
|
||||
io.write('\nreturn type expected= '..rtype)
|
||||
if type(res) == rtype or (not xmlstatus and rtype == 'failure') then
|
||||
io.write(' (OK)')
|
||||
else
|
||||
io.write(' (FAILURE) returning a '..type(res))
|
||||
end --if
|
||||
if rvalue then
|
||||
io.write('\nvalue expected='..tostring(rvalue))
|
||||
if type(res) == 'table' then
|
||||
dumpt(res)
|
||||
elseif tostring(rvalue) == tostring(res) then
|
||||
io.write(' (OK)')
|
||||
else
|
||||
io.write(' (FAILURE) value returned='..tostring(res))
|
||||
end --if
|
||||
end --if
|
||||
end --if
|
||||
end --if
|
||||
io.write('\n')
|
||||
end
|
||||
|
||||
function syndic8()
|
||||
test( "http://www.syndic8.com/xmlrpc.php", "string", nil, "syndic8.GetFeedCount" )
|
||||
end
|
||||
|
||||
local server = 'http://localhost:80/server.lua'
|
||||
|
||||
function calc()
|
||||
test( server, 'number', '25', 'calc.add', {10,15} )
|
||||
test( server, 'string', '0.1v', 'calc.getVersion' )
|
||||
test( server, 'boolean', 'true', 'calc.isprime', {7} )
|
||||
test( server, 'boolean', 'false', 'calc.isprime', {80} )
|
||||
test( server, 'table', {{1,0},{0,1}}, 'calc.MID' )
|
||||
test( server, 'failure', 'Unavailable method', 'calc' )
|
||||
test( server, 'failure', 'Unavailable method', 'calc.MID2' )
|
||||
test( server, 'failure', 'Unavailable method', 'foo', {2} )
|
||||
test( server, 'failure', 'Unavailable method', 'foo.foo2.foo3', {3,4,5} )
|
||||
-- test( 'http://localhost:82/calc.xmlrpc', 'number', '25', 'calc.add', {10,15} )
|
||||
end
|
||||
|
||||
local launcher = {
|
||||
'lua',
|
||||
'cgilua',
|
||||
}
|
||||
|
||||
local tests = {
|
||||
[1] = { name='SYNDIC8', func=syndic8 },
|
||||
[2] = { name='CALCULATOR', func=calc },
|
||||
}
|
||||
|
||||
init_launcher(launcher[1])
|
||||
|
||||
io.write(
|
||||
[[
|
||||
LuaXMLRPC - Automatic Tests
|
||||
0.1v
|
||||
]]
|
||||
)
|
||||
|
||||
for k,v in pairs( tests ) do
|
||||
io.write( "\n\nT"..k.." - "..v.name.."\n" )
|
||||
v.func()
|
||||
end --for
|
Loading…
Reference in New Issue