]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
add tests for dkim signatures with milter 2739/head
authorJohn McKay <adenosine3p@gmail.com>
Sat, 2 Feb 2019 11:26:14 +0000 (11:26 +0000)
committerJohn McKay <adenosine3p@gmail.com>
Sat, 2 Feb 2019 11:26:14 +0000 (11:26 +0000)
test/functional/cases/131_dkim_signing/006_milter.robot [new file with mode: 0644]
test/functional/configs/dkim_signing/milter.conf [new file with mode: 0644]
test/functional/lua/miltertest/data_dkim.lua [new file with mode: 0644]
test/functional/lua/miltertest/dkim_many.lua [new file with mode: 0644]
test/functional/lua/miltertest/dkim_one.lua [new file with mode: 0644]
test/functional/lua/miltertest/lib.lua

diff --git a/test/functional/cases/131_dkim_signing/006_milter.robot b/test/functional/cases/131_dkim_signing/006_milter.robot
new file mode 100644 (file)
index 0000000..fa6f532
--- /dev/null
@@ -0,0 +1,32 @@
+*** Settings ***
+Suite Setup     DKIM 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 ***
+SINGLE SIGNATURE
+  Milter Test  dkim_one.lua
+
+MULTIPLE SIGNATURES
+  Milter Test  dkim_many.lua
+
+*** Keywords ***
+DKIM Milter Setup
+  Generic Setup  CONFIG=${TESTDIR}/configs/dkim_signing/milter.conf
+
+Milter Test
+  [Arguments]  ${mtlua}
+  ${result} =  Run Process  miltertest  -Dport\=${PORT_PROXY}  -Dhost\=${LOCAL_ADDR}  -s  ${TESTDIR}/lua/miltertest/${mtlua}
+  ...  cwd=${TESTDIR}/lua/miltertest
+  Follow Rspamd Log
+  Should Match Regexp  ${result.stderr}  ^$
+  Log  ${result.rc}
+  Log  ${result.stdout}
+  Should Be Equal As Integers  ${result.rc}  0  msg=${result.stdout}  values=false
diff --git a/test/functional/configs/dkim_signing/milter.conf b/test/functional/configs/dkim_signing/milter.conf
new file mode 100644 (file)
index 0000000..263ed0b
--- /dev/null
@@ -0,0 +1,76 @@
+options = {
+       filters = ["dkim"]
+       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;
+}
+dkim_signing {
+  domain {
+    cacophony.za.org {
+      selectors = {
+        path: "${TESTDIR}/configs/dkim.key";
+        selector: "dkim";
+      }
+      selectors = {
+        path: "${TESTDIR}/configs/dkim-eddsa.key";
+        selector: "eddsa";
+     }
+   }
+    invalid.za.org {
+      selectors = [ 
+        { path: "${TESTDIR}/configs/dkim-eddsa.key";
+          selector: "eddsa"; }
+      ]
+   }
+  }
+  allow_pubkey_mismatch: true;
+}
+modules {
+    path = "${TESTDIR}/../../src/plugins/lua/dkim_signing.lua"
+}
+lua = "${TESTDIR}/lua/test_coverage.lua";
+lua = "${INSTALLROOT}/share/rspamd/rules/rspamd.lua"
+lua = "${TESTDIR}/lua/params.lua"
diff --git a/test/functional/lua/miltertest/data_dkim.lua b/test/functional/lua/miltertest/data_dkim.lua
new file mode 100644 (file)
index 0000000..15adf15
--- /dev/null
@@ -0,0 +1,23 @@
+multi_hdrs = {
+  ['Message-ID'] = '<a44q4StVFY04V4_4gOMYXjTgMDvmlSFzZxnoyJPHFwM@cacophony.za.org>',
+  ['From'] = 'Rspamd <foo@cacophony.za.org>',
+  ['To'] = 'nerf@example.org',
+  ['Subject'] = 'dkim test message',
+  ['User-Agent'] = 'Vi IMproved 8.1',
+  ['Content-Type'] = 'text/plain; charset=utf-8;',
+  ['MIME-Version'] = '1.0',
+  ['Date'] = 'Sat, 02 Feb 2019 10:34:54 +0000',
+}
+
+single_hdr = {
+  ['Message-ID'] = '<a44q4StVFY04V4_4gOMYXjTgMDvmlSFzZxnoyJPHFwM@cacophony.za.org>',
+  ['From'] = 'Rspamd <foo@invalid.za.org>',
+  ['To'] = 'nerf@example.org',
+  ['Subject'] = 'dkim test message',
+  ['User-Agent'] = 'Vi IMproved 8.1',
+  ['Content-Type'] = 'text/plain; charset=utf-8;',
+  ['MIME-Version'] = '1.0',
+  ['Date'] = 'Sat, 02 Feb 2019 10:34:54 +0000',
+}
+
+innocuous_msg = 'hello'
diff --git a/test/functional/lua/miltertest/dkim_many.lua b/test/functional/lua/miltertest/dkim_many.lua
new file mode 100644 (file)
index 0000000..70a3a1b
--- /dev/null
@@ -0,0 +1,11 @@
+print('Check we get multiple dkim signatures')
+
+dofile './lib.lua'
+dofile './data_dkim.lua'
+
+setup()
+
+send_message(innocuous_msg, multi_hdrs, 'test-id', 'foo@cacophony.za.org', {'nerf@example.org'})
+check_headers(2)
+
+teardown()
diff --git a/test/functional/lua/miltertest/dkim_one.lua b/test/functional/lua/miltertest/dkim_one.lua
new file mode 100644 (file)
index 0000000..0c7def8
--- /dev/null
@@ -0,0 +1,11 @@
+print('Check we get single dkim signature')
+
+dofile './lib.lua'
+dofile './data_dkim.lua'
+
+setup()
+
+send_message(innocuous_msg, single_hdr, 'test-id', 'foo@invalid.za.org', {'nerf@example.org'})
+check_headers(1)
+
+teardown()
index e94efd559dd814b67ed610d3b6ae3495c99d063f..44dc76ea50c6cf339fdad0ff708d49dcb0bbf095 100644 (file)
@@ -108,3 +108,12 @@ function check_subject_rw(subj, tmpl)
     error "subject not rewritten"
   end
 end
+
+function check_headers(count)
+  for i=0, count-1 do
+    local hdr = mt.getheader(conn, "DKIM-Signature", i)
+    if not hdr then
+      error (string.format("Signature %s not added", i))
+    end
+  end
+end