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

164 lines
5.5 KiB
Lua

local cjson = require "cjson"
local lfs = require "lfs"
local pl_path = require "pl.path"
local shell = require "resty.shell"
local helpers = require "spec.helpers"
local constants = require "kong.constants"
describe("anonymous reports for kong manager", function ()
local reports_send_ping = function()
ngx.sleep(0.2) -- hand over the CPU so other threads can do work (processing the sent data)
local admin_client = helpers.admin_client()
local res = admin_client:post("/reports/send-ping?port=" .. constants.REPORTS.STATS_TLS_PORT)
assert.response(res).has_status(200)
admin_client:close()
end
local assert_report = function (value)
local reports_server = helpers.tcp_server(constants.REPORTS.STATS_TLS_PORT, {tls=true})
reports_send_ping()
local _, reports_data = assert(reports_server:join())
reports_data = cjson.encode(reports_data)
assert.match(value, reports_data)
end
local prepare_gui_dir = function ()
local err, gui_dir_path
gui_dir_path = pl_path.join(helpers.test_conf.prefix, "gui")
shell.run("rm -rf " .. gui_dir_path, nil, 0)
err = select(2, lfs.mkdir(gui_dir_path))
assert.is_nil(err)
return gui_dir_path
end
local create_gui_file = function (path)
local fd = assert(io.open(path, "w"))
assert.is_not_nil(fd)
assert(fd:write("TEST"))
assert(fd:close())
end
local dns_hostsfile
local bp, db
lazy_setup(function ()
dns_hostsfile = assert(os.tmpname() .. ".hosts")
local fd = assert(io.open(dns_hostsfile, "w"))
assert(fd:write("127.0.0.1 " .. constants.REPORTS.ADDRESS))
assert(fd:close())
bp, db = assert(helpers.get_db_utils(nil, {}, { "reports-api" }))
bp.plugins:insert({
name = "reports-api",
config = {}
})
end)
lazy_teardown(function ()
os.remove(dns_hostsfile)
db:truncate("plugins")
end)
describe("availability status", function ()
it("should be correct when admin_gui_listen is set", function ()
assert(helpers.start_kong({
admin_gui_listen = "127.0.0.1:9012",
anonymous_reports = true,
plugins = "bundled,reports-api",
dns_hostsfile = dns_hostsfile,
resolver_hosts_file = dns_hostsfile,
}))
finally(function()
helpers.stop_kong()
end)
assert_report("_admin_gui=1")
end)
it("should be correct when admin_gui_listen is off", function ()
assert(helpers.start_kong({
admin_gui_listen = "off",
anonymous_reports = true,
plugins = "bundled,reports-api",
dns_hostsfile = dns_hostsfile,
resolver_hosts_file = dns_hostsfile,
}))
finally(function()
helpers.stop_kong()
end)
assert_report("_admin_gui=0")
end)
end)
describe("visit", function()
lazy_setup(function()
assert(helpers.start_kong({
admin_gui_listen = "127.0.0.1:9012",
anonymous_reports = true,
plugins = "bundled,reports-api",
dns_hostsfile = dns_hostsfile,
resolver_hosts_file = dns_hostsfile,
}))
local gui_dir_path = prepare_gui_dir()
create_gui_file(pl_path.join(gui_dir_path, "index.html"))
create_gui_file(pl_path.join(gui_dir_path, "robots.txt"))
create_gui_file(pl_path.join(gui_dir_path, "favicon.ico"))
create_gui_file(pl_path.join(gui_dir_path, "test.js"))
create_gui_file(pl_path.join(gui_dir_path, "test.css"))
create_gui_file(pl_path.join(gui_dir_path, "test.png"))
end)
lazy_teardown(function()
os.remove(dns_hostsfile)
helpers.stop_kong()
end)
it("should have value 0 when no kong mananger visit occurs", function ()
assert_report("km_visits=0")
end)
it("should increase counter by 1 for each kong mananger visit", function ()
local admin_gui_client = helpers.admin_gui_client(nil, 9012)
assert.res_status(200, admin_gui_client:send({ method = "GET", path = "/" }))
assert.res_status(200, admin_gui_client:send({ method = "GET", path = "/services" }))
admin_gui_client:close()
assert_report("km_visits=2")
end)
it("should reset the counter after report", function ()
local admin_gui_client = helpers.admin_gui_client(nil, 9012)
assert.res_status(200, admin_gui_client:send({ method = "GET", path = "/" }))
admin_gui_client:close()
assert_report("km_visits=1")
admin_gui_client = helpers.admin_gui_client(nil, 9012)
assert.res_status(200, admin_gui_client:send({ method = "GET", path = "/" }))
assert.res_status(200, admin_gui_client:send({ method = "GET", path = "/" }))
assert_report("km_visits=2")
admin_gui_client:close()
end)
it("should not increase the counter for GUI assets", function ()
local admin_gui_client = helpers.admin_gui_client(nil, 9012)
assert.res_status(200, admin_gui_client:send({ method = "GET", path = "/kconfig.js" }))
assert.res_status(200, admin_gui_client:send({ method = "GET", path = "/robots.txt" }))
assert.res_status(200, admin_gui_client:send({ method = "GET", path = "/favicon.ico" }))
assert.res_status(200, admin_gui_client:send({ method = "GET", path = "/test.js" }))
assert.res_status(200, admin_gui_client:send({ method = "GET", path = "/test.css" }))
assert.res_status(200, admin_gui_client:send({ method = "GET", path = "/test.png" }))
assert.res_status(404, admin_gui_client:send({ method = "GET", path = "/not-exist.png" }))
admin_gui_client:close()
assert_report("km_visits=0")
end)
end)
end)