100 lines
2.9 KiB
Lua
100 lines
2.9 KiB
Lua
local pl_utils = require "pl.utils"
|
|
local pl_path = require "pl.path"
|
|
local pl_dir = require "pl.dir"
|
|
local meta = require "kong.meta"
|
|
|
|
describe("rockspec/meta", function()
|
|
local rock, lua_srcs = {}
|
|
local rock_filename
|
|
|
|
lazy_setup(function()
|
|
lua_srcs = pl_dir.getallfiles("./kong", "*.lua")
|
|
assert.True(#lua_srcs > 0)
|
|
|
|
local res = pl_dir.getfiles(".", "*.rockspec")
|
|
assert(#res == 1, "more than 1 rockspec file")
|
|
|
|
rock_filename = res[1]
|
|
|
|
local f = assert(loadfile(res[1]))
|
|
setfenv(f, rock)
|
|
|
|
f()
|
|
end)
|
|
|
|
describe("meta", function()
|
|
it("has a _NAME field", function()
|
|
assert.is_string(meta._NAME)
|
|
end)
|
|
|
|
it("has a _VERSION field", function()
|
|
assert.is_string(meta._VERSION)
|
|
assert.matches("%d+%.%d+%.%d+", meta._VERSION)
|
|
end)
|
|
|
|
it("has a _VERSION_TABLE field", function()
|
|
assert.is_table(meta._VERSION_TABLE)
|
|
assert.is_number(meta._VERSION_TABLE.major)
|
|
assert.is_number(meta._VERSION_TABLE.minor)
|
|
assert.is_number(meta._VERSION_TABLE.patch)
|
|
-- suffix optional
|
|
end)
|
|
|
|
it("has a _SERVER_TOKENS field", function()
|
|
assert.is_string(meta._SERVER_TOKENS)
|
|
end)
|
|
|
|
it("has a _SERVER_TOKENS field that equals to _NAME/_VERSION", function()
|
|
assert.equal(meta._NAME .. "/" .. meta._VERSION, meta._SERVER_TOKENS)
|
|
end)
|
|
|
|
it("has a _DEPENDENCIES field", function()
|
|
assert.is_table(meta._DEPENDENCIES)
|
|
assert.is_table(meta._DEPENDENCIES.nginx)
|
|
end)
|
|
end)
|
|
|
|
it("has same name as meta", function()
|
|
assert.equal(meta._NAME, rock.package)
|
|
end)
|
|
|
|
describe("modules", function()
|
|
|
|
it("all modules named as their path", function()
|
|
for mod_name, mod_path in pairs(rock.build.modules) do
|
|
if mod_name ~= "kong" then
|
|
mod_path = mod_path:gsub("%.lua", ""):gsub("/", '.'):gsub("%.init", "")
|
|
assert(mod_name == mod_path,
|
|
mod_path .. " has different name (" .. mod_name .. ")")
|
|
end
|
|
end
|
|
end)
|
|
|
|
it("all rockspec files do exist", function()
|
|
for mod_name, mod_path in pairs(rock.build.modules) do
|
|
assert(pl_path.exists(mod_path),
|
|
mod_path .. " does not exist (" .. mod_name .. ")")
|
|
end
|
|
end)
|
|
end)
|
|
|
|
describe("requires", function()
|
|
it("requires in the codebase are defined modules in the rockspec", function()
|
|
for _, src in ipairs(lua_srcs) do
|
|
local str = pl_utils.readfile(src)
|
|
|
|
-- PCRE: require\s*\(?\s*(["''])(kong\.[\w_.-]+[\w_.-])(["''])
|
|
for _, mod in string.gmatch(str, "require%s*%(?%s*([\"'])(kong%.[%w_.-]+[%w_-])%1") do
|
|
if not rock.build.modules[mod] then
|
|
assert(rock.build.modules[mod] ~= nil,
|
|
"Invalid module require: \n" ..
|
|
"requiring module '" .. mod .. "' in Lua source " ..
|
|
"'" .. src .. "' that is not declared in " ..
|
|
rock_filename)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
end)
|
|
end)
|