kong/spec/03-plugins/05-syslog/01-log_spec.lua (204 lines of code) (raw):
local helpers = require "spec.helpers"
local utils = require "kong.tools.utils"
local cjson = require "cjson"
local pl_stringx = require "pl.stringx"
for _, strategy in helpers.each_strategy() do
describe("#flaky Plugin: syslog (log) [#" .. strategy .. "]", function()
local proxy_client
local proxy_client_grpc
local platform
lazy_setup(function()
local bp = helpers.get_db_utils(strategy, {
"routes",
"services",
"plugins",
})
local route1 = bp.routes:insert {
hosts = { "logging.com" },
}
local route2 = bp.routes:insert {
hosts = { "logging2.com" },
}
local route3 = bp.routes:insert {
hosts = { "logging3.com" },
}
local route4 = bp.routes:insert {
hosts = { "logging4.com" },
}
bp.plugins:insert {
route = { id = route1.id },
name = "syslog",
config = {
log_level = "info",
successful_severity = "warning",
client_errors_severity = "warning",
server_errors_severity = "warning",
},
}
bp.plugins:insert {
route = { id = route2.id },
name = "syslog",
config = {
log_level = "err",
successful_severity = "warning",
client_errors_severity = "warning",
server_errors_severity = "warning",
},
}
bp.plugins:insert {
route = { id = route3.id },
name = "syslog",
config = {
log_level = "warning",
successful_severity = "warning",
client_errors_severity = "warning",
server_errors_severity = "warning",
},
}
bp.plugins:insert {
route = { id = route4.id },
name = "syslog",
config = {
log_level = "warning",
successful_severity = "warning",
client_errors_severity = "warning",
server_errors_severity = "warning",
custom_fields_by_lua = {
new_field = "return 123",
route = "return nil", -- unset route field
},
},
}
-- grpc [[
local grpc_service = bp.services:insert {
name = "grpc-service",
url = helpers.grpcbin_url,
}
local grpc_route1 = bp.routes:insert {
service = grpc_service,
hosts = { "grpc_logging.com" },
}
local grpc_route2 = bp.routes:insert {
service = grpc_service,
hosts = { "grpc_logging2.com" },
}
local grpc_route3 = bp.routes:insert {
service = grpc_service,
hosts = { "grpc_logging3.com" },
}
bp.plugins:insert {
route = { id = grpc_route1.id },
name = "syslog",
config = {
log_level = "info",
successful_severity = "warning",
client_errors_severity = "warning",
server_errors_severity = "warning",
},
}
bp.plugins:insert {
route = { id = grpc_route2.id },
name = "syslog",
config = {
log_level = "err",
successful_severity = "warning",
client_errors_severity = "warning",
server_errors_severity = "warning",
},
}
bp.plugins:insert {
route = { id = grpc_route3.id },
name = "syslog",
config = {
log_level = "warning",
successful_severity = "warning",
client_errors_severity = "warning",
server_errors_severity = "warning",
},
}
-- grpc ]]
local ok, _, stdout = helpers.execute("uname")
assert(ok, "failed to retrieve platform name")
platform = pl_stringx.strip(stdout)
assert(helpers.start_kong({
database = strategy,
nginx_conf = "spec/fixtures/custom_nginx.template",
}))
proxy_client_grpc = helpers.proxy_client_grpc()
end)
lazy_teardown(function()
helpers.stop_kong()
end)
before_each(function()
proxy_client = assert(helpers.proxy_client())
end)
after_each(function()
if proxy_client then proxy_client:close() end
end)
local function do_test(host, expecting_same, grpc)
local uuid = utils.uuid()
local resp
if not grpc then
local response = assert(proxy_client:send {
method = "GET",
path = "/request",
headers = {
host = host,
sys_log_uuid = uuid,
}
})
assert.res_status(200, response)
else
local ok, resp = proxy_client_grpc({
service = "hello.HelloService.SayHello",
body = {
greeting = "world!"
},
opts = {
["-H"] = "'sys-log-uuid: " .. uuid .. "'",
["-authority"] = ("%s"):format(host),
}
})
assert.truthy(ok)
assert.truthy(resp)
end
if platform == "Darwin" then
local _, _, stdout = assert(helpers.execute("syslog -k Sender kong | tail -1"))
local msg = string.match(stdout, "{.*}")
local json = cjson.decode(msg)
if expecting_same then
assert.equal(uuid, json.request.headers["sys-log-uuid"])
else
assert.not_equal(uuid, json.request.headers["sys-log-uuid"])
end
resp = stdout
elseif expecting_same then
local _, _, stdout = assert(helpers.execute("find /var/log -type f -mmin -5 2>/dev/null | xargs grep -l " .. uuid))
assert.True(#stdout > 0)
resp = stdout
end
return resp
end
it("logs to syslog if log_level is lower", function()
do_test("logging.com", true)
end)
it("does not log to syslog if log_level is higher", function()
do_test("logging2.com", false)
end)
it("logs to syslog if log_level is the same", function()
do_test("logging3.com", true)
end)
it("logs custom values", function()
local resp = do_test("logging4.com", false)
assert.matches("\"new_field\".*123", resp)
assert.not_matches("\"route\"", resp)
end)
it("logs to syslog if log_level is lower #grpc", function()
do_test("grpc_logging.com", true, true)
end)
it("does not log to syslog if log_level is higher #grpc", function()
do_test("grpc_logging2.com", false, true)
end)
it("logs to syslog if log_level is the same #grpc", function()
do_test("grpc_logging3.com", true, true)
end)
end)
end