Files
2026-07-13 12:32:21 +08:00

161 lines
7.5 KiB
Lua

local helpers = require "spec.helpers"
for _, strategy in helpers.each_strategy() do
describe("manages a pluginserver #" .. strategy, function()
lazy_setup(function()
assert(helpers.get_db_utils(strategy, {
"services",
"routes",
"plugins",
}))
end)
describe("process management", function()
it("starts/stops an external plugin server [golang]", function()
local kong_prefix = helpers.test_conf.prefix
assert(helpers.start_kong({
nginx_conf = "spec/fixtures/custom_nginx.template",
log_level = "notice",
database = strategy,
plugins = "bundled,go-hello",
pluginserver_names = "test",
pluginserver_test_socket = kong_prefix .. "/go-hello.socket",
pluginserver_test_query_cmd = helpers.external_plugins_path .. "/go/go-hello -dump",
pluginserver_test_start_cmd = helpers.external_plugins_path .. "/go/go-hello -kong-prefix " .. kong_prefix,
}))
assert.logfile().has.line([[started, pid [0-9]+]])
assert(helpers.stop_kong(nil, true))
assert.logfile().has.line([[successfully stopped pluginserver 'test', pid [0-9]+]])
end)
it("starts/stops an external plugin server [python]", function()
local kong_prefix = helpers.test_conf.prefix
assert(helpers.start_kong({
nginx_conf = "spec/fixtures/custom_nginx.template",
log_level = "notice",
database = strategy,
plugins = "bundled,py-hello",
pluginserver_names = "test",
pluginserver_test_socket = kong_prefix .. "/py-hello.socket",
pluginserver_test_query_cmd = helpers.external_plugins_path .. "/py/py-hello.py --dump",
pluginserver_test_start_cmd = helpers.external_plugins_path .. "/py/py-hello.py --socket-name py-hello.socket --kong-prefix " .. kong_prefix,
}))
assert.logfile().has.line([[started, pid [0-9]+]])
assert(helpers.stop_kong(nil, true))
assert.logfile().has.line([[successfully stopped pluginserver 'test', pid [0-9]+]])
end)
it("starts/stops an external plugin server [golang, python]", function()
local kong_prefix = helpers.test_conf.prefix
assert(helpers.start_kong({
nginx_conf = "spec/fixtures/custom_nginx.template",
log_level = "notice",
database = strategy,
plugins = "bundled,go-hello,py-hello",
pluginserver_names = "test-go,test-py",
pluginserver_test_go_socket = kong_prefix .. "/go-hello.socket",
pluginserver_test_go_query_cmd = helpers.external_plugins_path .. "/go/go-hello -dump",
pluginserver_test_go_start_cmd = helpers.external_plugins_path .. "/go/go-hello -kong-prefix " .. kong_prefix,
pluginserver_test_py_socket = kong_prefix .. "/py-hello.socket",
pluginserver_test_py_query_cmd = helpers.external_plugins_path .. "/py/py-hello.py --dump",
pluginserver_test_py_start_cmd = helpers.external_plugins_path .. "/py/py-hello.py --socket-name py-hello.socket --kong-prefix " .. kong_prefix,
}))
assert.logfile().has.line([[started, pid [0-9]+]])
assert(helpers.stop_kong(nil, true))
assert.logfile().has.line([[successfully stopped pluginserver 'test-go', pid [0-9]+]])
assert.logfile().has.line([[successfully stopped pluginserver 'test-py', pid [0-9]+]])
end)
end)
it("queries plugin info [golang]", function()
local proc_management = require "kong.runloop.plugin_servers.process"
local kong_prefix = helpers.test_conf.prefix
local conf_loader = require "kong.conf_loader"
local conf, err = conf_loader(nil, {
plugins = "bundled,go-hello",
pluginserver_names = "test",
pluginserver_test_socket = kong_prefix .. "/go-hello.socket",
pluginserver_test_query_cmd = helpers.external_plugins_path .. "/go/go-hello -dump",
pluginserver_test_start_cmd = helpers.external_plugins_path .. "/go/go-hello -kong-prefix " .. kong_prefix,
})
assert.is_nil(err)
helpers.build_go_plugins(helpers.external_plugins_path .. "/go")
local plugin_infos = proc_management.load_external_plugins_info(conf)
assert.not_nil(plugin_infos["go-hello"])
local info = plugin_infos["go-hello"]
assert.equal(1, info.PRIORITY)
assert.equal("0.1", info.VERSION)
assert.equal("go-hello", info.name)
assert.same({ "access", "response", "log" }, info.phases)
assert.same("ProtoBuf:1", info.server_def.protocol)
end)
it("queries plugin info [python]", function()
local proc_management = require "kong.runloop.plugin_servers.process"
local kong_prefix = helpers.test_conf.prefix
local conf_loader = require "kong.conf_loader"
local conf, err = conf_loader(nil, {
plugins = "bundled,py-hello",
pluginserver_names = "test",
pluginserver_test_socket = kong_prefix .. "/py-hello.socket",
pluginserver_test_query_cmd = helpers.external_plugins_path .. "/py/py-hello.py --dump",
pluginserver_test_start_cmd = helpers.external_plugins_path .. "/py/py-hello.py --socket-name py-hello.socket --kong-prefix " .. kong_prefix,
})
assert.is_nil(err)
local plugin_infos = proc_management.load_external_plugins_info(conf)
assert.not_nil(plugin_infos["py-hello"])
local info = plugin_infos["py-hello"]
assert.equal(100, info.PRIORITY)
assert.equal("0.1.0", info.VERSION)
assert.equal("py-hello", info.name)
assert.same({ "access" }, info.phases)
assert.same("MsgPack:1", info.server_def.protocol)
end)
it("queries plugin info [golang, python]", function()
local proc_management = require "kong.runloop.plugin_servers.process"
local kong_prefix = helpers.test_conf.prefix
local conf_loader = require "kong.conf_loader"
local conf, err = conf_loader(nil, {
plugins = "bundled,py-hello",
pluginserver_names = "test-go,test-py",
pluginserver_test_go_socket = kong_prefix .. "/go-hello.socket",
pluginserver_test_go_query_cmd = helpers.external_plugins_path .. "/go/go-hello -dump",
pluginserver_test_go_start_cmd = helpers.external_plugins_path .. "/go/go-hello -kong-prefix " .. kong_prefix,
pluginserver_test_py_socket = kong_prefix .. "/py-hello.socket",
pluginserver_test_py_query_cmd = helpers.external_plugins_path .. "/py/py-hello.py --dump",
pluginserver_test_py_start_cmd = helpers.external_plugins_path .. "/py/py-hello.py --socket-name py-hello.socket --kong-prefix " .. kong_prefix,
})
assert.is_nil(err)
local plugin_infos = proc_management.load_external_plugins_info(conf)
assert.not_nil(plugin_infos["go-hello"])
assert.not_nil(plugin_infos["py-hello"])
local go_info = plugin_infos["go-hello"]
assert.equal(1, go_info.PRIORITY)
assert.equal("0.1", go_info.VERSION)
assert.equal("go-hello", go_info.name)
assert.same({ "access", "response", "log" }, go_info.phases)
assert.same("ProtoBuf:1", go_info.server_def.protocol)
local py_info = plugin_infos["py-hello"]
assert.equal(100, py_info.PRIORITY)
assert.equal("0.1.0", py_info.VERSION)
assert.equal("py-hello", py_info.name)
assert.same({ "access" }, py_info.phases)
assert.same("MsgPack:1", py_info.server_def.protocol)
end)
end)
end