[Test] Added test for DNS apitags/1.8.0
@@ -0,0 +1,36 @@ | |||
*** Settings *** | |||
Test Setup Http Setup | |||
Test Teardown Http Teardown | |||
Library Process | |||
Library ${TESTDIR}/lib/rspamd.py | |||
Resource ${TESTDIR}/lib/rspamd.robot | |||
Variables ${TESTDIR}/lib/vars.py | |||
*** Variables *** | |||
${URL_TLD} ${TESTDIR}/../lua/unit/test_tld.dat | |||
${CONFIG} ${TESTDIR}/configs/lua_test.conf | |||
${MESSAGE} ${TESTDIR}/messages/spam_message.eml | |||
${RSPAMD_SCOPE} Test | |||
*** Test Cases *** | |||
Simple DNS request | |||
${result} = Scan Message With Rspamc --header=to-resolve:example.com ${MESSAGE} | |||
Check Rspamc ${result} DNS_SYNC (0.00)[93.184.216.34] | |||
Check Rspamc ${result} DNS (0.00)[93.184.216.34] | |||
Faulty DNS request | |||
${result} = Scan Message With Rspamc --header=to-resolve:not-resolvable.com ${MESSAGE} | |||
Check Rspamc ${result} DNS_SYNC_ERROR (0.00)[requested record is not found] | |||
Check Rspamc ${result} DNS_ERROR (0.00)[requested record is not found] | |||
*** Keywords *** | |||
Lua Setup | |||
[Arguments] ${LUA_SCRIPT} | |||
Set Global Variable ${LUA_SCRIPT} | |||
Generic Setup | |||
Http Setup | |||
Lua Setup ${TESTDIR}/lua/dns.lua | |||
Http Teardown | |||
Normal Teardown |
@@ -14,6 +14,10 @@ options = { | |||
name = "site.resolveme", | |||
type = "a"; | |||
replies = ["127.0.0.1"]; | |||
}, { | |||
name = "not-resolvable.com", | |||
type = "a"; | |||
rcode = 'norec'; | |||
}] | |||
} | |||
} |
@@ -0,0 +1,52 @@ | |||
local rspamd_dns = require "rspamd_dns" | |||
local logger = require "rspamd_logger" | |||
local function dns_sync_symbol(task) | |||
local to_resolve = tostring(task:get_request_header('to-resolve')) | |||
local is_ok, results = rspamd_dns.request({ | |||
task = task, | |||
type = 'a', | |||
name = to_resolve , | |||
}) | |||
logger.errx(task, "is_ok=%1, results=%2, results[1]=%3", is_ok, results, results[1]) | |||
if not is_ok then | |||
task:insert_result('DNS_SYNC_ERROR', 1.0, results) | |||
else | |||
task:insert_result('DNS_SYNC', 1.0, tostring(results[1])) | |||
end | |||
end | |||
rspamd_config:register_symbol({ | |||
name = 'SIMPLE_DNS_SYNC', | |||
score = 1.0, | |||
callback = dns_sync_symbol, | |||
no_squeeze = true | |||
}) | |||
-- Async request | |||
local function dns_symbol(task) | |||
local function dns_cb(_, to_resolve, results, err) | |||
logger.errx(task, "_=%1, to_resolve=%2, results=%3, err%4", _, to_resolve, results, err) | |||
if err then | |||
task:insert_result('DNS_ERROR', 1.0, err) | |||
else | |||
task:insert_result('DNS', 1.0, tostring(results[1])) | |||
end | |||
end | |||
local to_resolve = tostring(task:get_request_header('to-resolve')) | |||
task:get_resolver():resolve_a({ | |||
task = task, | |||
name = to_resolve, | |||
callback = dns_cb | |||
}) | |||
end | |||
rspamd_config:register_symbol({ | |||
name = 'SIMPLE_DNS', | |||
score = 1.0, | |||
callback = dns_symbol, | |||
}) |