Rapid spam filtering system https://rspamd.com/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

136 lines
3.8 KiB

context("Rspamd util for lua - check generic functions", function()
local util = require 'rspamd_util'
local cases = {
{
input = "test1",
result = false,
mixed_script = false,
range_start = 0x0000,
range_end = 0x017f
},
{
input = "test test xxx",
result = false,
mixed_script = false,
range_start = 0x0000,
range_end = 0x017f
},
{
input = "АбЫрвАлг",
result = true,
mixed_script = false,
range_start = 0x0000,
range_end = 0x017f
},
{
input = "АбЫрвАлг example",
result = true,
mixed_script = true,
range_start = 0x0000,
range_end = 0x017f
},
{
input = "example ąłśćżłóę",
result = false,
mixed_script = false,
range_start = 0x0000,
range_end = 0x017f
},
{
input = "ąłśćżłóę АбЫрвАлг",
result = true,
mixed_script = true,
range_start = 0x0000,
range_end = 0x017f
},
}
for i,c in ipairs(cases) do
test("is_utf_outside_range, test case #" .. i, function()
local actual = util.is_utf_outside_range(c.input, c.range_start, c.range_end)
assert_equal(c.result, actual)
end)
end
test("is_utf_outside_range, check cache", function ()
cache_size = 20
for i = 1,cache_size do
local res = util.is_utf_outside_range("a", 0x0000, 0x0000+i)
end
end)
test("is_utf_outside_range, check empty string", function ()
assert_error(util.is_utf_outside_range)
end)
test("get_string_stats, test case", function()
local res = util.get_string_stats("this is test 99")
assert_equal(res["letters"], 10)
assert_equal(res["digits"], 2)
end)
for i,c in ipairs(cases) do
test("is_utf_mixed_script, test case #" .. i, function()
local actual = util.is_utf_mixed_script(c.input)
assert_equal(c.mixed_script, actual)
end)
end
test("is_utf_mixed_script, invalid utf str should return errror", function()
assert_error(util.is_utf_mixed_script,'\200\213\202')
end)
test("is_utf_mixed_script, empty str should return errror", function()
assert_error(util.is_utf_mixed_script,'\200\213\202')
end)
end)
context("Rspamd string utility", function()
local ffi = require 'ffi'
ffi.cdef[[
char ** rspamd_string_len_split (const char *in, size_t len,
const char *spill, int max_elts, void *pool);
void g_strfreev (char **str_array);
]]
local NULL = ffi.new 'void*'
local cases = {
{'', ';,', {}},
{'', '', {}},
{'a', ';,', {'a'}},
{'a', '', {'a'}},
{'a;b', ';', {'a', 'b'}},
{'a;;b', ';', {'a', 'b'}},
{';a;;b;', ';', {'a', 'b'}},
{'ab', ';', {'ab'}},
{'a,;b', ',', {'a', ';b'}},
{'a,;b', ';,', {'a', 'b'}},
{',a,;b', ';,', {'a', 'b'}},
{',,;', ';,', {}},
{',,;a', ';,', {'a'}},
{'a,,;', ';,', {'a'}},
}
for i,case in ipairs(cases) do
test("rspamd_string_len_split: case " .. tostring(i), function()
local ret = ffi.C.rspamd_string_len_split(case[1], #case[1],
case[2], -1, NULL)
local actual = {}
while ret[#actual] ~= NULL do
actual[#actual + 1] = ffi.string(ret[#actual])
end
assert_rspamd_table_eq({
expect = case[3],
actual = actual
})
ffi.C.g_strfreev(ret)
end)
end
end)