1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
context("Logger unit tests", function()
test("Logger functions", function()
local log = require "rspamd_logger"
local cases = {
{ 'string', 'string' },
{ '%1', 'string', 'string' },
{ '%1', '1.1', 1.1 },
{ '%1', '1', 1 },
{ '%1', 'true', true },
{ '%1', '{[1] = 1, [2] = test}', { 1, 'test' } },
{ '%1', '{[1] = 1, [2] = 2.1, [k2] = test}', { 1, 2.1, k2 = 'test' } },
{ '%s', 'true', true },
}
for _, c in ipairs(cases) do
local s
if c[3] then
s = log.slog(c[1], c[3])
else
s = log.slog(c[1])
end
assert_equal(s, c[2], string.format("'%s' doesn't match with '%s'",
c[2], s))
end
end)
test("Logger graceful error handling", function()
local log = require "rspamd_logger"
-- Test missing arguments
local missing_arg_cases = {
{ '%1', '<MISSING ARGUMENT>' },
{ '%0', '<MISSING ARGUMENT>' }, -- %0 is invalid since Lua args are 1-indexed
{ '%2', '<MISSING ARGUMENT>', 'arg1' },
{ '%1 %2', 'arg1 <MISSING ARGUMENT>', 'arg1' },
{ 'prefix %1 %3 suffix', 'prefix arg1 <MISSING ARGUMENT> suffix', 'arg1' },
}
for _, c in ipairs(missing_arg_cases) do
local s
if c[3] then
s = log.slog(c[1], c[3])
else
s = log.slog(c[1])
end
assert_equal(s, c[2], string.format("Missing arg test: '%s' doesn't match with '%s'",
c[2], s))
end
-- Test extra arguments
local extra_arg_cases = {
{ '%1', 'arg1 <EXTRA 1 ARGUMENTS>', 'arg1', 'extra1' },
{ '%1', 'arg1 <EXTRA 2 ARGUMENTS>', 'arg1', 'extra1', 'extra2' },
{ '%s', 'arg1 <EXTRA 1 ARGUMENTS>', 'arg1', 'extra1' },
{ 'prefix %1 suffix', 'prefix arg1 suffix <EXTRA 1 ARGUMENTS>', 'arg1', 'extra1' },
}
for _, c in ipairs(extra_arg_cases) do
local s
if c[4] and c[5] then
s = log.slog(c[1], c[3], c[4], c[5])
elseif c[4] then
s = log.slog(c[1], c[3], c[4])
else
s = log.slog(c[1], c[3])
end
assert_equal(s, c[2], string.format("Extra arg test: '%s' doesn't match with '%s'",
c[2], s))
end
-- Test literal percent sequences (should pass through as-is)
local literal_cases = {
{ '%-1', '%-1' },
{ '%abc', '%abc' }, -- Should pass through as literal since it's not a valid number
{ '%', '%' }, -- Single percent should pass through
}
for _, c in ipairs(literal_cases) do
local s = log.slog(c[1])
assert_equal(s, c[2], string.format("Literal test: '%s' doesn't match with '%s'",
c[2], s))
end
-- Test mixed scenarios
local mixed_cases = {
{ '%1 %3', 'arg1 <MISSING ARGUMENT> <EXTRA 1 ARGUMENTS>', 'arg1', 'extra1' },
{ '%2 %4', 'extra1 <MISSING ARGUMENT> <EXTRA 1 ARGUMENTS>', 'arg1', 'extra1' },
}
for _, c in ipairs(mixed_cases) do
local s
if c[4] then
s = log.slog(c[1], c[3], c[4])
else
s = log.slog(c[1], c[3])
end
assert_equal(s, c[2], string.format("Mixed test: '%s' doesn't match with '%s'",
c[2], s))
end
end)
end)
|