kong/spec/04-perf/01-rps/03-plugin_iterator_spec.lua (112 lines of code) (raw):

local perf = require("spec.helpers.perf") local split = require("pl.stringx").split local utils = require("spec.helpers.perf.utils") 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 = os.getenv("PERF_TEST_LOAD_DURATION") or 30 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.setup_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() utils.print_and_save("### Test Suite: " .. utils.get_test_descriptor()) local results = {} for i=1,3 do perf.start_load({ path = "/test", connections = 100, threads = 5, duration = LOAD_DURATION, }) local result = assert(perf.wait_result()) utils.print_and_save(("### Result for Kong %s (run %d):\n%s"):format(version, i, result)) results[i] = result end utils.print_and_save(("### Combined result for Kong %s:\n%s"):format(version, assert(perf.combine_results(results)))) perf.save_error_log("output/" .. utils.get_test_output_filename() .. ".log") end) it("#global_and_irrelevant", function() utils.print_and_save("### Test Suite: " .. utils.get_test_descriptor()) -- 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, } } local results = {} for i=1,3 do perf.start_load({ path = "/test", connections = 100, threads = 5, duration = LOAD_DURATION, }) local result = assert(perf.wait_result()) utils.print_and_save(("### Result for Kong %s (run %d):\n%s"):format(version, i, result)) results[i] = result end utils.print_and_save(("### Combined result for Kong %s:\n%s"):format(version, assert(perf.combine_results(results)))) perf.save_error_log("output/" .. utils.get_test_output_filename() .. ".log") end) end) end