apisix/t/lib/test_admin.lua
YuanSheng Wang 011e0eff5d
test: use a simple way to write test case. (#323)
* test: avoid duplicate code and make test cases clearer.
2019-07-28 11:10:30 +08:00

73 lines
1.5 KiB
Lua

local json = require("cjson.safe")
local dir_names = {}
local _M = {}
local function com_tab(pattern, data, deep)
deep = deep or 1
for k, v in pairs(pattern) do
dir_names[deep] = k
if type(v) == "table" then
local ok, err = com_tab(v, data[k], deep + 1)
if not ok then
return false, err
end
elseif v ~= data[k] then
return false, "path: " .. table.concat(dir_names, "->", 1, deep)
.. " expect: " .. tostring(v) .. " got: "
.. tostring(data[k])
end
end
return true
end
function _M.test(uri, method, body, pattern)
if type(body) == "table" then
body = json.encode(body)
end
if type(pattern) == "table" then
pattern = json.encode(pattern)
end
local res = ngx.location.capture(uri,{method = method,body = body})
if res.status >= 300 then
return res.status, res.body
end
if pattern == nil then
return res.status, "passed", res.body
end
local res_data = json.decode(res.body)
if type(pattern) == "string" then
pattern = json.decode(pattern)
end
local ok, err = com_tab(pattern, res_data)
if not ok then
return 500, "failed, " .. err, res_data
end
return 200, "passed", res_data
end
function _M.read_file(path)
local f = assert(io.open(path, "rb"))
local cert = f:read("*all")
f:close()
return cert
end
return _M