aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Lewis <nerf@judo.za.org>2018-01-30 17:06:35 +0200
committerAndrew Lewis <nerf@judo.za.org>2018-01-30 17:06:35 +0200
commit77e0862c9eb71bf1aa22892235d3aaad4431d236 (patch)
tree68ea9819396c19b394dfc71755a124df2b8cbdd3
parentb8137c5f9c9716e781d7cbae76911774603bdc09 (diff)
downloadrspamd-77e0862c9eb71bf1aa22892235d3aaad4431d236.tar.gz
rspamd-77e0862c9eb71bf1aa22892235d3aaad4431d236.zip
[Test] Beginning of tests for milter
-rw-r--r--.luacheckrc1
-rw-r--r--circle.yml2
-rw-r--r--test/functional/cases/180_milter.robot23
-rw-r--r--test/functional/configs/milter.conf58
-rw-r--r--test/functional/lua/miltertest/mt1.lua59
5 files changed, 142 insertions, 1 deletions
diff --git a/.luacheckrc b/.luacheckrc
index 57a9c5582..8a3240b12 100644
--- a/.luacheckrc
+++ b/.luacheckrc
@@ -4,6 +4,7 @@ std = 'min'
exclude_files = {
'/**/contrib/**',
'/**/test/lua/**',
+ '/**/test/functional/lua/miltertest/**',
}
globals = {
diff --git a/circle.yml b/circle.yml
index cc1d20479..0875e5c93 100644
--- a/circle.yml
+++ b/circle.yml
@@ -1,7 +1,7 @@
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/
diff --git a/test/functional/cases/180_milter.robot b/test/functional/cases/180_milter.robot
new file mode 100644
index 000000000..b597914ab
--- /dev/null
+++ b/test/functional/cases/180_milter.robot
@@ -0,0 +1,23 @@
+*** 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
diff --git a/test/functional/configs/milter.conf b/test/functional/configs/milter.conf
new file mode 100644
index 000000000..306ad511d
--- /dev/null
+++ b/test/functional/configs/milter.conf
@@ -0,0 +1,58 @@
+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;
+}
diff --git a/test/functional/lua/miltertest/mt1.lua b/test/functional/lua/miltertest/mt1.lua
new file mode 100644
index 000000000..a6f6722de
--- /dev/null
+++ b/test/functional/lua/miltertest/mt1.lua
@@ -0,0 +1,59 @@
+-- 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)