103 lines
2.7 KiB
Lua
103 lines
2.7 KiB
Lua
local helpers = require "spec.helpers"
|
|
local cjson = require "cjson"
|
|
local random_string = require("kong.tools.rand").random_string
|
|
|
|
|
|
local fmt = string.format
|
|
|
|
local function wait_for_spans(zipkin_client, expected_spans, service_name)
|
|
helpers.wait_until(function()
|
|
local received_spans = 0
|
|
local res = zipkin_client:get("/api/v2/traces", {
|
|
query = {
|
|
limit = 1000,
|
|
remoteServiceName = service_name,
|
|
}
|
|
})
|
|
local data = assert.response(res).has.status(200)
|
|
local all_spans = cjson.decode(data)
|
|
for i = 1, #all_spans do
|
|
received_spans = received_spans + #all_spans[i]
|
|
end
|
|
return received_spans == expected_spans
|
|
end)
|
|
end
|
|
|
|
|
|
describe("queueing behavior", function()
|
|
local max_batch_size = 10
|
|
local service
|
|
local zipkin_client
|
|
local proxy_client
|
|
|
|
lazy_setup(function()
|
|
local bp = helpers.get_db_utils(nil, { "services", "routes", "plugins" })
|
|
|
|
-- enable zipkin plugin globally pointing to mock server
|
|
bp.plugins:insert({
|
|
name = "zipkin",
|
|
protocols = { "http" },
|
|
config = {
|
|
sample_ratio = 1,
|
|
http_endpoint = fmt("http://%s:%d/api/v2/spans", helpers.zipkin_host, helpers.zipkin_port),
|
|
static_tags = {
|
|
{ name = "static", value = "ok" },
|
|
},
|
|
default_header_type = "b3-single",
|
|
phase_duration_flavor = "tags",
|
|
queue = {
|
|
max_batch_size = max_batch_size,
|
|
max_coalescing_delay = 10,
|
|
}
|
|
}
|
|
})
|
|
|
|
service = bp.services:insert {
|
|
name = string.lower("http-" .. random_string()),
|
|
}
|
|
|
|
-- kong (http) mock upstream
|
|
bp.routes:insert({
|
|
name = string.lower("route-" .. random_string()),
|
|
service = service,
|
|
hosts = { "http-route" },
|
|
preserve_host = true,
|
|
paths = { "/" },
|
|
})
|
|
|
|
helpers.start_kong({
|
|
nginx_conf = "spec/fixtures/custom_nginx.template",
|
|
stream_listen = helpers.get_proxy_ip(false) .. ":19000",
|
|
})
|
|
|
|
proxy_client = helpers.proxy_client()
|
|
zipkin_client = helpers.http_client(helpers.zipkin_host, helpers.zipkin_port)
|
|
end)
|
|
|
|
|
|
teardown(function()
|
|
helpers.stop_kong()
|
|
end)
|
|
|
|
before_each(function()
|
|
helpers.clean_logfile() -- prevent log assertions from poisoning each other.
|
|
end)
|
|
|
|
it("batches spans from multiple requests", function()
|
|
local count = 10
|
|
|
|
for _ = 1, count do
|
|
local r = proxy_client:get("/", {
|
|
headers = {
|
|
["x-b3-sampled"] = "1",
|
|
host = "http-route",
|
|
["zipkin-tags"] = "foo=bar; baz=qux"
|
|
},
|
|
})
|
|
assert.response(r).has.status(200)
|
|
end
|
|
wait_for_spans(zipkin_client, 3 * count, service.name)
|
|
assert.logfile().has.line("zipkin batch size: " .. tostring(max_batch_size), true)
|
|
end)
|
|
end)
|