171 lines
4.7 KiB
Lua
171 lines
4.7 KiB
Lua
local helpers = require "spec.helpers"
|
|
local cjson = require "cjson"
|
|
local meta = require "kong.meta"
|
|
|
|
|
|
local exists = helpers.path.exists
|
|
local join = helpers.path.join
|
|
|
|
|
|
local function get_kong_workers()
|
|
local workers
|
|
helpers.wait_until(function()
|
|
local pok, admin_client = pcall(helpers.admin_client)
|
|
if not pok then
|
|
return false
|
|
end
|
|
local res = admin_client:send {
|
|
method = "GET",
|
|
path = "/",
|
|
}
|
|
if not res or res.status ~= 200 then
|
|
return false
|
|
end
|
|
local body = assert.res_status(200, res)
|
|
local json = cjson.decode(body)
|
|
|
|
admin_client:close()
|
|
workers = json.pids.workers
|
|
return true
|
|
end, 10)
|
|
return workers
|
|
end
|
|
|
|
|
|
local function wait_until_no_common_workers(workers, expected_total, strategy)
|
|
helpers.wait_until(function()
|
|
local pok, admin_client = pcall(helpers.admin_client)
|
|
if not pok then
|
|
return false
|
|
end
|
|
local res = assert(admin_client:send {
|
|
method = "GET",
|
|
path = "/",
|
|
})
|
|
assert.res_status(200, res)
|
|
local json = cjson.decode(assert.res_status(200, res))
|
|
admin_client:close()
|
|
|
|
local new_workers = json.pids.workers
|
|
local total = 0
|
|
local common = 0
|
|
if new_workers then
|
|
for _, v in ipairs(new_workers) do
|
|
total = total + 1
|
|
for _, v_old in ipairs(workers) do
|
|
if v == v_old then
|
|
common = common + 1
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return common == 0 and total == (expected_total or total)
|
|
end)
|
|
end
|
|
|
|
|
|
for _, strategy in helpers.each_strategy() do
|
|
describe("Mock Vault #" .. strategy, function()
|
|
local client
|
|
lazy_setup(function()
|
|
helpers.setenv("ADMIN_LISTEN", "127.0.0.1:9001")
|
|
helpers.setenv("KONG_LUA_PATH_OVERRIDE", "./spec/fixtures/custom_vaults/?.lua;./spec/fixtures/custom_vaults/?/init.lua;;")
|
|
helpers.get_db_utils(strategy, {
|
|
"vaults",
|
|
},
|
|
nil, {
|
|
"env",
|
|
"mock"
|
|
})
|
|
|
|
assert(helpers.start_kong {
|
|
database = strategy,
|
|
prefix = helpers.test_conf.prefix,
|
|
nginx_conf = "spec/fixtures/custom_nginx.template",
|
|
admin_listen = "{vault://mock/admin-listen}",
|
|
vaults = "env, mock",
|
|
})
|
|
end)
|
|
|
|
lazy_teardown(function()
|
|
helpers.stop_kong()
|
|
helpers.unsetenv("KONG_LUA_PATH_OVERRIDE")
|
|
helpers.unsetenv("ADMIN_LISTEN")
|
|
end)
|
|
|
|
after_each(function()
|
|
if client then
|
|
client:close()
|
|
end
|
|
end)
|
|
|
|
describe("Kong Start", function()
|
|
before_each(function()
|
|
client = assert(helpers.admin_client(10000))
|
|
end)
|
|
|
|
it("can use co-sockets and resolved referenced are passed to Kong server", function()
|
|
local res = client:get("/")
|
|
local body = assert.res_status(200, res)
|
|
local json = cjson.decode(body)
|
|
assert.equal(meta._VERSION, json.version)
|
|
assert.same({ "{vault://mock/admin-listen}" }, json.configuration.admin_listen)
|
|
assert.falsy(exists(join(helpers.test_conf.prefix, ".kong_process_secrets")))
|
|
end)
|
|
end)
|
|
|
|
describe("Kong Reload", function()
|
|
it("can use co-sockets and resolved referenced are passed to Kong server", function()
|
|
finally(function()
|
|
helpers.unsetenv("KONG_ADMIN_LISTEN")
|
|
end)
|
|
|
|
helpers.setenv("KONG_ADMIN_LISTEN", "{vault://mock/listen?prefix=admin_}")
|
|
|
|
local workers = get_kong_workers()
|
|
|
|
assert(helpers.kong_exec("reload --conf " .. helpers.test_conf_path ..
|
|
" --nginx-conf spec/fixtures/custom_nginx.template", {
|
|
vaults = "env,mock"
|
|
}))
|
|
|
|
wait_until_no_common_workers(workers, 1)
|
|
|
|
assert.falsy(exists(join(helpers.test_conf.prefix, ".kong_process_secrets")))
|
|
|
|
ngx.sleep(0.1)
|
|
|
|
local http = assert(helpers.admin_client(10000))
|
|
local res = http:get("/")
|
|
local body = assert.res_status(200, res)
|
|
local json = cjson.decode(body)
|
|
assert.equal(meta._VERSION, json.version)
|
|
assert.same({ "{vault://mock/listen?prefix=admin_}" }, json.configuration.admin_listen)
|
|
end)
|
|
end)
|
|
end)
|
|
|
|
if strategy == "postgres" then
|
|
describe("ENV Vault #" .. strategy, function ()
|
|
describe("Kong Start", function ()
|
|
it("can resolve reference in init_phase", function ()
|
|
helpers.setenv("TEST_ENV_VAULT_LOGLEVEL", "debug")
|
|
|
|
assert(helpers.start_kong {
|
|
database = strategy,
|
|
prefix = helpers.test_conf.prefix,
|
|
nginx_conf = "spec/fixtures/custom_nginx.template",
|
|
vaults = "env",
|
|
log_level = "{vault://env/TEST_ENV_VAULT_LOGLEVEL}"
|
|
})
|
|
|
|
finally(function ()
|
|
assert(helpers.stop_kong())
|
|
end)
|
|
end)
|
|
end)
|
|
end)
|
|
end
|
|
end
|