mirror of https://github.com/rspamd/rspamd.git
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.
162 lines
4.0 KiB
162 lines
4.0 KiB
context("Task processing", function()
|
|
local fun = require("fun")
|
|
local rspamd_task = require("rspamd_task")
|
|
|
|
test("Process a simple task", function()
|
|
--local cfg = rspamd_util.config_from_ucl(config)
|
|
--assert_not_nil(cfg)
|
|
|
|
local msg = [[
|
|
From: <>
|
|
To: <nobody@example.com>
|
|
Subject: test
|
|
Content-Type: text/plain
|
|
|
|
Test.
|
|
]]
|
|
local res,task = rspamd_task.load_from_string(msg)
|
|
assert_true(res, "failed to load message")
|
|
task:process_message()
|
|
task:destroy()
|
|
end)
|
|
|
|
local hdrs = [[
|
|
From: <>
|
|
To: <nobody@example.com>
|
|
Subject: test
|
|
]]
|
|
local mpart = [[
|
|
Content-Type: multipart/mixed; boundary=XXX
|
|
]]
|
|
local body = [[
|
|
Content-Type: text/html
|
|
Content-Transfer-Encoding: quoted-printable
|
|
|
|
<html>
|
|
<body>
|
|
=0DAttached is your new documents.
|
|
<br>
|
|
<a href=3D"http://evil.com/Information/">http:=
|
|
//example.com/privacy/XXX/YYY_April_25_2019.doc</a>
|
|
<br>
|
|
<br>
|
|
<br>
|
|
Thank you,
|
|
<br>
|
|
<b>Haloclaims.co</b>
|
|
</body></html>
|
|
]]
|
|
test("Process mime nesting: simple", function()
|
|
local msg = hdrs .. body
|
|
local res,task = rspamd_task.load_from_string(msg)
|
|
assert_true(res, "failed to load message")
|
|
task:process_message()
|
|
assert_rspamd_table_eq_sorted({actual = fun.totable(fun.map(function(u)
|
|
return u:get_host()
|
|
end, task:get_urls())), expect = {
|
|
'evil.com', 'example.com'
|
|
}})
|
|
task:destroy()
|
|
end)
|
|
test("Process mime nesting: multipart", function()
|
|
local msg = table.concat{
|
|
hdrs, mpart, '\n', '--XXX\n', body, '\n--XXX--\n'
|
|
}
|
|
local res,task = rspamd_task.load_from_string(msg)
|
|
assert_true(res, "failed to load message")
|
|
task:process_message()
|
|
assert_rspamd_table_eq_sorted({
|
|
actual = fun.totable(fun.map(function(u)
|
|
return u:get_host()
|
|
end, task:get_urls())),
|
|
|
|
expect = {
|
|
'evil.com', 'example.com'
|
|
}})
|
|
task:destroy()
|
|
end)
|
|
test("Process mime nesting: multipart, broken", function()
|
|
local msg = table.concat{
|
|
hdrs, mpart, '\n', '--XXX\n', 'garbadge\n', '\n--XXX--\n', '--XXX\n', body
|
|
}
|
|
local res,task = rspamd_task.load_from_string(msg)
|
|
assert_true(res, "failed to load message")
|
|
task:process_message()
|
|
assert_rspamd_table_eq_sorted({
|
|
actual = fun.totable(fun.map(function(u)
|
|
return u:get_host()
|
|
end, task:get_urls())),
|
|
|
|
expect = {
|
|
'evil.com', 'example.com'
|
|
}})
|
|
|
|
task:destroy()
|
|
end)
|
|
test("Process mime nesting: message", function()
|
|
local msg = table.concat{
|
|
hdrs, 'Content-Type: message/rfc822\n', '\n', hdrs, body
|
|
}
|
|
local res,task = rspamd_task.load_from_string(msg)
|
|
assert_true(res, "failed to load message")
|
|
task:process_message()
|
|
assert_rspamd_table_eq_sorted({
|
|
actual = fun.totable(fun.map(function(u)
|
|
return u:get_host()
|
|
end, task:get_urls())),
|
|
|
|
expect = {
|
|
'evil.com', 'example.com'
|
|
}})
|
|
|
|
task:destroy()
|
|
end)
|
|
test("Process mime nesting: message in multipart", function()
|
|
local msg = table.concat{
|
|
hdrs, mpart, '\n',
|
|
'--XXX\n',
|
|
'Content-Type: message/rfc822\n', '\n', hdrs, body ,
|
|
'\n--XXX--\n',
|
|
}
|
|
|
|
local res,task = rspamd_task.load_from_string(msg)
|
|
assert_true(res, "failed to load message")
|
|
task:process_message()
|
|
assert_rspamd_table_eq_sorted({
|
|
actual = fun.totable(fun.map(function(u)
|
|
return u:get_host()
|
|
end, task:get_urls())),
|
|
|
|
expect = {
|
|
'evil.com', 'example.com'
|
|
}})
|
|
|
|
task:destroy()
|
|
end)
|
|
test("Process mime nesting: multipart message in multipart", function()
|
|
local msg = table.concat{
|
|
hdrs, mpart, '\n',
|
|
'--XXX\n',
|
|
'Content-Type: message/rfc822\n', '\n', hdrs, mpart, '\n',
|
|
|
|
'--XXX\n',
|
|
body ,
|
|
'\n--XXX--\n',
|
|
|
|
'\n--XXX--\n',
|
|
}
|
|
local res,task = rspamd_task.load_from_string(msg)
|
|
assert_true(res, "failed to load message")
|
|
task:process_message()
|
|
assert_rspamd_table_eq_sorted({
|
|
actual = fun.totable(fun.map(function(u)
|
|
return u:get_host()
|
|
end, task:get_urls())),
|
|
|
|
expect = {
|
|
'evil.com', 'example.com'
|
|
}})
|
|
|
|
task:destroy()
|
|
end)
|
|
end)
|