kong/spec/04-perf/02-flamegraph/03-plugin_iterator_spec.lua (114 lines of code) (raw):
local perf = require("spec.helpers.perf")
local split = require("pl.stringx").split
local utils = require("spec.helpers.perf.utils")
perf.enable_charts(false) -- don't generate charts, we need flamegraphs only
perf.use_defaults()
local versions = {}
local env_versions = os.getenv("PERF_TEST_VERSIONS")
if env_versions then
versions = split(env_versions, ",")
end
local LOAD_DURATION = 180
for _, version in ipairs(versions) do
local termination_message = "performancetestperformancetestperformancetestperformancetest"
describe("perf test for Kong " .. version .. " #plugin_iterator", function()
local bp, another_service, another_route
lazy_setup(function()
local helpers = perf.
zsetup_kong(version)
bp = helpers.get_db_utils("postgres", {
"routes",
"services",
"plugins",
}, nil, nil, true)
local upstream_uri = perf.start_worker([[
location = /test {
return 200;
}
]])
local service = bp.services:insert {
url = upstream_uri .. "/test",
}
bp.plugins:insert {
name = "request-termination",
config = {
status_code = 200,
message = termination_message,
}
}
bp.routes:insert {
paths = { "/test" },
service = service,
strip_path = true,
}
another_service = bp.services:insert {
url = upstream_uri .. "/another",
}
another_route = bp.routes:insert {
paths = { "/another" },
service = another_service,
strip_path = true,
}
end)
before_each(function()
perf.start_kong({
--kong configs
})
end)
after_each(function()
perf.stop_kong()
end)
lazy_teardown(function()
perf.teardown(os.getenv("PERF_TEST_TEARDOWN_ALL") or false)
end)
it("#global_only", function()
perf.start_stapxx("lj-lua-stacks.sxx", "-D MAXMAPENTRIES=1000000 --arg time=" .. LOAD_DURATION)
perf.start_load({
path = "/test",
connections = 100,
threads = 5,
duration = LOAD_DURATION,
})
ngx.sleep(LOAD_DURATION)
local result = assert(perf.wait_result())
print(("### Result for Kong %s:\n%s"):format(version, result))
perf.generate_flamegraph(
"output/" .. utils.get_test_output_filename() .. ".svg",
"Flame graph for Kong " .. utils.get_test_descriptor()
)
perf.save_error_log("output/" .. utils.get_test_output_filename() .. ".log")
end)
it("#global_and_irrelevant", function()
-- those plugins doesn't run on current path, but does they affect plugin iterrator?
bp.plugins:insert {
name = "request-termination",
service = another_service,
config = {
status_code = 200,
message = termination_message,
}
}
bp.plugins:insert {
name = "request-termination",
route = another_route,
config = {
status_code = 200,
message = termination_message,
}
}
perf.start_stapxx("lj-lua-stacks.sxx", "-D MAXMAPENTRIES=1000000 --arg time=" .. LOAD_DURATION)
perf.start_load({
path = "/test",
connections = 100,
threads = 5,
duration = LOAD_DURATION,
})
ngx.sleep(LOAD_DURATION)
local result = assert(perf.wait_result())
print(("### Result for Kong %s:\n%s"):format(version, result))
perf.generate_flamegraph(
"output/" .. utils.get_test_output_filename() .. ".svg",
"Flame graph for Kong " .. utils.get_test_descriptor()
)
perf.save_error_log("output/" .. utils.get_test_output_filename() .. ".log")
end)
end)
end