Files
kong--kong/spec/01-unit/29-admin_gui/02-admin_gui_template_spec.lua
2026-07-13 12:32:21 +08:00

225 lines
6.7 KiB
Lua

local match = require "luassert.match"
local pl_path = require "pl.path"
local admin_gui = require "kong.admin_gui"
local conf_loader = require "kong.conf_loader"
local log = require "kong.cmd.utils.log"
local prefix_handler = require "kong.cmd.utils.prefix_handler"
local helpers = require "spec.helpers"
describe("admin_gui template", function()
describe("admin_gui.generate_kconfig() - proxied", function()
local mock_prefix = "servroot"
local conf = {
prefix = mock_prefix,
admin_gui_url = "http://0.0.0.0:8002",
admin_gui_api_url = "https://admin-reference.kong-cloud.test",
admin_gui_path = '/manager',
admin_gui_listeners = {
{
ip = "0.0.0.0",
port = 8002,
ssl = false,
},
{
ip = "0.0.0.0",
port = 8445,
ssl = true,
},
},
admin_listeners = {
{
ip = "0.0.0.0",
port = 8001,
ssl = false,
},
{
ip = "0.0.0.0",
port = 8444,
ssl = true,
}
},
proxy_listeners = {
{
ip = "0.0.0.0",
port = 8000,
ssl = false,
},
{
ip = "0.0.0.0",
port = 8443,
ssl = true,
}
},
}
setup(function()
prefix_handler.prepare_prefixed_interface_dir("/usr/local/kong", "gui", conf)
os.execute("mkdir -p " .. mock_prefix)
assert(pl_path.isdir(mock_prefix))
end)
it("should generates the appropriate kconfig", function()
local kconfig_content = admin_gui.generate_kconfig(conf)
assert.matches("'ADMIN_GUI_PATH': '/manager'", kconfig_content, nil, true)
assert.matches("'ADMIN_API_URL': 'https://admin-reference.kong-cloud.test'", kconfig_content, nil, true)
assert.matches("'ADMIN_API_PORT': '8001'", kconfig_content, nil, true)
assert.matches("'ADMIN_API_SSL_PORT': '8444'", kconfig_content, nil, true)
end)
it("should regenerates the appropriate kconfig from another call", function()
local new_conf = conf
-- change configuration values
new_conf.admin_gui_url = 'http://admin-test.example.com'
new_conf.admin_gui_path = '/manager'
new_conf.admin_gui_api_url = 'http://localhost:8001'
-- regenerate kconfig
local new_content = admin_gui.generate_kconfig(new_conf)
-- test configuration values against template
assert.matches("'ADMIN_GUI_PATH': '/manager'", new_content, nil, true)
assert.matches("'ADMIN_API_URL': 'http://localhost:8001'", new_content, nil, true)
assert.matches("'ADMIN_API_PORT': '8001'", new_content, nil, true)
assert.matches("'ADMIN_API_SSL_PORT': '8444'", new_content, nil, true)
end)
end)
describe("admin_gui.generate_kconfig() - not proxied", function()
local mock_prefix = "servroot"
local conf = {
prefix = mock_prefix,
admin_gui_url = "http://0.0.0.0:8002",
admin_gui_api_url = "0.0.0.0:8001",
anonymous_reports = false,
admin_gui_listeners = {
{
ip = "0.0.0.0",
port = 8002,
ssl = false,
},
{
ip = "0.0.0.0",
port = 8445,
ssl = true,
},
},
admin_listeners = {
{
ip = "0.0.0.0",
port = 8001,
ssl = false,
},
{
ip = "0.0.0.0",
port = 8444,
ssl = true,
}
},
proxy_listeners = {
{
ip = "0.0.0.0",
port = 8000,
ssl = false,
},
{
ip = "0.0.0.0",
port = 8443,
ssl = true,
}
},
}
setup(function()
prefix_handler.prepare_prefixed_interface_dir("/usr/local/kong", "gui", conf)
os.execute("mkdir -p " .. mock_prefix)
assert(pl_path.isdir(mock_prefix))
end)
it("should generates the appropriate kconfig", function()
local kconfig_content = admin_gui.generate_kconfig(conf)
assert.matches("'ADMIN_API_URL': '0.0.0.0:8001'", kconfig_content, nil, true)
assert.matches("'ADMIN_API_PORT': '8001'", kconfig_content, nil, true)
assert.matches("'ADMIN_API_SSL_PORT': '8444'", kconfig_content, nil, true)
assert.matches("'ANONYMOUS_REPORTS': 'false'", kconfig_content, nil, true)
end)
it("should regenerates the appropriate kconfig from another call", function()
local new_conf = conf
-- change configuration values
new_conf.admin_gui_url = 'http://admin-test.example.com'
new_conf.anonymous_reports = true
-- regenerate kconfig
local new_content = admin_gui.generate_kconfig(new_conf)
-- test configuration values against template
assert.matches("'ADMIN_API_URL': '0.0.0.0:8001'", new_content, nil, true)
assert.matches("'ADMIN_API_PORT': '8001'", new_content, nil, true)
assert.matches("'ADMIN_API_SSL_PORT': '8444'", new_content, nil, true)
assert.matches("'ANONYMOUS_REPORTS': 'true'", new_content, nil, true)
end)
end)
describe("prepare_admin() - message logs", function()
local conf = assert(conf_loader(helpers.test_conf_path))
local default_prefix = conf.prefix
local mock_prefix = "servroot_2"
local usr_path = "servroot"
local usr_interface_dir = "gui2"
local usr_interface_path = usr_path .. "/" .. usr_interface_dir
setup(function()
conf.prefix = mock_prefix
if not pl_path.exists(usr_interface_path) then
os.execute("mkdir -p " .. usr_interface_path)
end
end)
teardown(function()
if pl_path.exists(usr_interface_path) then
assert(pl_path.rmdir(usr_interface_path))
end
-- reset prefix
conf.prefix = default_prefix
end)
it("symlink creation should log out error", function()
local spy_log = spy.on(log, "warn")
finally(function()
log.warn:revert()
assert:unregister("matcher", "str_match")
end)
assert:register("matcher", "str_match", function (_state, arguments)
local expected = arguments[1]
return function(value)
return string.match(value, expected) ~= nil
end
end)
local coreutils_err_msg = "ln: failed to create symbolic link 'servroot_2/gui2': "
.. "No such file or directory\n"
local bsd_err_msg = "ln: servroot_2/gui2: No such file or directory\n"
prefix_handler.prepare_prefixed_interface_dir(usr_path, usr_interface_dir, conf)
assert.spy(spy_log).was_called(1)
assert.spy(spy_log).was_called_with(
match.is_any_of(match.str_match(coreutils_err_msg), match.str_match(bsd_err_msg))
)
end)
end)
end)