exclude_files = {
'/**/contrib/**',
'/**/test/lua/**',
+ '/**/test/functional/lua/miltertest/**',
}
globals = {
dependencies:
pre:
- sudo apt-get update -qq || true
- - sudo apt-get install -qq cmake gcc lcov libevent-dev libglib2.0-dev libgmime-2.6-dev libluajit-5.1-dev liblua5.1-0-dev libmagic-dev libpcre3-dev libsqlite3-dev libssl-dev luarocks make python-dev ragel redis-server libgd-dev libfann-dev
+ - sudo apt-get install -qq cmake gcc lcov libevent-dev libglib2.0-dev libgmime-2.6-dev libluajit-5.1-dev liblua5.1-0-dev libmagic-dev libpcre3-dev libsqlite3-dev libssl-dev luarocks make python-dev ragel redis-server libgd-dev libfann-dev opendkim-tools
- gem install coveralls-lcov
- sudo pip install demjson psutil robotframework
- cd .. && wget http://download.redis.io/redis-stable.tar.gz && tar xvzf redis-stable.tar.gz && cd redis-stable && make -j`nproc` && sudo cp src/redis-cli /usr/bin/
--- /dev/null
+*** Settings ***
+Suite Setup Milter Setup
+Suite Teardown Generic Teardown
+Library Process
+Library ${TESTDIR}/lib/rspamd.py
+Resource ${TESTDIR}/lib/rspamd.robot
+Variables ${TESTDIR}/lib/vars.py
+
+*** Variables ***
+${RSPAMD_SCOPE} Suite
+${URL_TLD} ${TESTDIR}/../lua/unit/test_tld.dat
+
+*** Test Cases ***
+SIMPLE MILTER TEST
+ ${result} = Run Process miltertest -Dport\=${PORT_PROXY} -Dhost\=${LOCAL_ADDR} -s ${TESTDIR}/lua/miltertest/mt1.lua
+ Follow Rspamd Log
+ Should Match Regexp ${result.stderr} ^$
+ Should Match Regexp ${result.stdout} ^$
+ Should Be Equal As Integers ${result.rc} 0 msg=${result.stdout} values=false
+
+*** Keywords ***
+Milter Setup
+ Generic Setup CONFIG=${TESTDIR}/configs/milter.conf
--- /dev/null
+options = {
+ filters = ["spf", "dkim", "regexp"]
+ url_tld = "${URL_TLD}"
+ pidfile = "${TMPDIR}/rspamd.pid"
+ lua_path = "${INSTALLROOT}/share/rspamd/lib/?.lua"
+ dns {
+ nameserver = ["8.8.8.8", "8.8.4.4"];
+ retransmits = 10;
+ timeout = 2s;
+ }
+}
+logging = {
+ type = "file",
+ level = "debug"
+ filename = "${TMPDIR}/rspamd.log"
+}
+metric = {
+ name = "default",
+ actions = {
+ reject = 100500,
+ }
+ unknown_weight = 1
+}
+worker {
+ type = normal
+ bind_socket = ${LOCAL_ADDR}:${PORT_NORMAL}
+ count = 1
+ task_timeout = 60s;
+}
+worker {
+ type = controller
+ bind_socket = ${LOCAL_ADDR}:${PORT_CONTROLLER}
+ count = 1
+ secure_ip = ["127.0.0.1", "::1"];
+ stats_path = "${TMPDIR}/stats.ucl"
+}
+worker {
+ type = "rspamd_proxy";
+ count = 1;
+ timeout = 120;
+ upstream {
+ local {
+ hosts = "${LOCAL_ADDR}:${PORT_NORMAL}";
+ default = true;
+ }
+ }
+ bind_socket = "${LOCAL_ADDR}:${PORT_PROXY}";
+ milter = true;
+}
+modules {
+ path = "${TESTDIR}/../../src/plugins/lua/"
+}
+lua = "${INSTALLROOT}/share/rspamd/rules/rspamd.lua"
+milter_headers {
+ extended_spam_headers = true;
+ skip_local = false;
+ skip_authenticated = false;
+}
--- /dev/null
+-- Test one simple interaction
+
+conn = mt.connect("inet:" .. port .. "@" .. host)
+if conn == nil then
+ error "mt.connect() failed"
+end
+if mt.conninfo(conn, "localhost", "127.0.0.1") then
+ error "mt.conninfo() failed"
+end
+if mt.getreply(conn) ~= SMFIR_CONTINUE then
+ error "mt.conninfo() unexpected reply"
+end
+
+if mt.helo(conn, "it.is.i") then
+ error "mt.helo() failed"
+end
+if mt.getreply(conn) ~= SMFIR_CONTINUE then
+ error "mt.helo() unexpected reply"
+end
+mt.macro(conn, SMFIC_MAIL, "i", "test-id")
+if mt.mailfrom(conn, "sender@example.com") then
+ error "mt.mailfrom() failed"
+end
+if mt.getreply(conn) ~= SMFIR_CONTINUE then
+ error "mt.mailfrom() unexpected reply"
+end
+mt.rcptto(conn, "rcpt@example.com")
+
+if mt.header(conn, "From", "honest@sender") then
+ error "mt.header(From) failed"
+end
+
+if mt.getreply(conn) ~= SMFIR_CONTINUE then
+ error "mt.header(From) unexpected reply"
+end
+
+if mt.eoh(conn) then
+ error "mt.eoh() failed"
+end
+
+if mt.getreply(conn) ~= SMFIR_CONTINUE then
+ error "mt.eoh() unexpected reply"
+end
+
+if mt.bodystring(conn, "This is a simple test!\r\n") then
+ error "mt.bodystring() failed"
+end
+if mt.getreply(conn) ~= SMFIR_CONTINUE then
+ error "mt.bodystring() unexpected reply"
+end
+
+if mt.eom(conn) then
+ error "mt.eom() failed"
+end
+if mt.getreply(conn) ~= SMFIR_ACCEPT then
+ error "mt.eom() unexpected reply"
+end
+
+mt.disconnect(conn)