From dff6f52618ccab80325c53a718cd8005325bb1a5 Mon Sep 17 00:00:00 2001 From: Andrew Lewis Date: Tue, 30 Jan 2018 17:06:35 +0200 Subject: [PATCH] [Test] Beginning of tests for milter --- .luacheckrc | 1 + circle.yml | 2 +- test/functional/cases/180_milter.robot | 23 ++++++++++ test/functional/configs/milter.conf | 58 +++++++++++++++++++++++++ test/functional/lua/miltertest/mt1.lua | 59 ++++++++++++++++++++++++++ 5 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 test/functional/cases/180_milter.robot create mode 100644 test/functional/configs/milter.conf create mode 100644 test/functional/lua/miltertest/mt1.lua diff --git a/.luacheckrc b/.luacheckrc index 07bbcea4d..124f4e19f 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) -- 2.39.5