123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- local msg
- context("Selectors test", function()
- local rspamd_task = require "rspamd_task"
- local logger = require "rspamd_logger"
- local lua_selectors = require "lua_selectors"
- local test_helper = require "rspamd_test_helper"
- local cfg = rspamd_config
- local task
-
- test_helper.init_url_parser()
-
- before(function()
- local res
- res,task = rspamd_task.load_from_string(msg, cfg)
- task:set_from_ip("198.172.22.91")
- task:set_user("cool user name")
- task:set_helo("hello mail")
- task:set_request_header("hdr1", "value1")
- task:process_message()
- task:get_mempool():set_variable("int_var", 1)
- task:get_mempool():set_variable("str_var", "str 1")
- if not res then
- assert_true(false, "failed to load message")
- end
- end)
-
- local function check_selector(selector_string)
- local sels = lua_selectors.parse_selector(cfg, selector_string)
- local elts = lua_selectors.process_selectors(task, sels)
- return elts
- end
-
- local cases = {
- ["ip"] = {
- selector = "ip",
- expect = {"198.172.22.91"}},
-
- ["header Subject"] = {
- selector = "header(Subject)",
- expect = {"Second, lower-cased header subject"}},
-
- ["header Subject lower"] = {
- selector = "header(Subject).lower",
- expect = {"second, lower-cased header subject"}},
-
- ["header full Subject lower"] = {
- selector = "header(Subject, 'full').lower",
- expect = {{"second, lower-cased header subject", "test subject"}}},
-
- ["header full strong Subject"] = {
- selector = "header(Subject, 'full,strong')",
- expect = {{"Test subject"}}},
-
- ["header full strong lower-cased Subject"] = {
- selector = "header(subject, 'full,strong')",
- expect = {{"Second, lower-cased header subject"}}},
-
- ["digest"] = {
- selector = "digest",
- expect = {"2216397bc061bb6968e1836f3680fed0"}},
-
- ["user"] = {
- selector = "user",
- expect = {"cool user name"}},
-
- ["from"] = {
- selector = "from",
- expect = {"whoknows@nowhere.com"}},
-
- ["rcpts"] = {
- selector = "rcpts",
- expect = {{"nobody@example.com", "no-one@example.com"}}},
-
- ["1st rcpts"] = {
- selector = "rcpts.nth(1)",
- expect = {"nobody@example.com"}},
-
- ["lower rcpts"] = {
- selector = "rcpts.lower.first",
- expect = {"nobody@example.com"}},
-
- ["first rcpts"] = {
- selector = "rcpts.first",
- expect = {"nobody@example.com"}},
-
- ["first addr rcpts"] = {
- selector = "rcpts:addr.first",
- expect = {"nobody@example.com"}},
-
- ["to"] = {
- selector = "to",
- expect = {"nobody@example.com"}},
-
- ["attachments"] = {
- selector = "attachments",
- expect = {{"ce112d07c52ae649f9646f3d0b5aaab5d4834836d771c032d1a75059d31fed84f38e00c0b205918f6d354934c2055d33d19d045f783a62561f467728ebcf0160",
- "ce112d07c52ae649f9646f3d0b5aaab5d4834836d771c032d1a75059d31fed84f38e00c0b205918f6d354934c2055d33d19d045f783a62561f467728ebcf0160"
- }}},
-
- ["attachments id"] = {
- selector = "attachments.id",
- expect = {""}},
-
- ["files"] = {
- selector = "files",
- expect = {{"f.zip", "f2.zip"}}},
-
- ["helo"] = {
- selector = "helo",
- expect = {"hello mail"}},
-
- ["received by hostname"] = {
- selector = "received:by_hostname",
- expect = {{"server.chat-met-vreemden.nl"}}},
-
- ["urls"] = {
- selector = "urls",
- expect = {{"http://example.net"}}},
-
- ["emails"] = {
- selector = "emails",
- expect = {{"mailto://test@example.net"}}},
-
- ["pool_var str, default type"] = {
- selector = [[pool_var("str_var")]],
- expect = {"str 1"}},
-
- ["pool_var str"] = {
- selector = [[pool_var("str_var", 'string')]],
- expect = {"str 1"}},
-
- ["pool_var double"] = {
- selector = [[pool_var("int_var", 'double')]],
- expect = {"1"}},
-
- ["time"] = {
- selector = "time",
- expect = {"1537364211"}},
-
- ["request_header"] = {
- selector = "request_header(hdr1)",
- expect = {"value1"}},
-
- ["get_host"] = {
- selector = "urls:get_host",
- expect = {{"example.net"}}},
-
- ["get_tld"] = {
- selector = "urls:get_tld",
- expect = {{"example.net"}}},
-
- ["transformation regexp"] = {
- selector = "urls:get_tld.regexp('\\.([\\w]+)$')",
- expect = {{{".net", "net"}}}},
-
- ["transformation id"] = {
- selector = "urls:get_tld.id",
- expect = {''}},
-
- ["transformation id arg"] = {
- selector = "urls:get_tld.id('1')",
- expect = {'1'}},
-
- ["transformation id args"] = {
- selector = "urls:get_tld.id('1', '2', '3')",
- expect = {{'1', '2', '3'}}},
-
- ["transformation in"] = {
- selector = "time(message, '!%w').in(2,3,4)",
- expect = {'3'}},
-
- ["transformation in id"] = {
- selector = "time(message, '!%w').in(2,3,4).id",
- expect = {''}},
-
- ["transformation not in"] = {
- selector = "time(message, '!%w').not_in(1,6,7)",
- expect = {'3'}},
-
- ["transformation in not id"] = {
- selector = "time(message, '!%w').not_in(1,6,7).id",
- expect = {''}},
-
- ["transformation in not id 1"] = {
- selector = "time(message, '!%w').not_in(1,6,7).id(1)",
- expect = {'1'}},
-
- ["transformation take"] = {
- selector = "rcpts.take_n(1).lower",
- expect = {{'nobody@example.com'}}},
-
- ["transformation take 2"] = {
- selector = "rcpts.take_n(2).lower",
- expect = {{'nobody@example.com', 'no-one@example.com'}}},
-
- ["transformation take 3"] = {
- selector = "rcpts.take_n(3).lower",
- expect = {{'nobody@example.com', 'no-one@example.com'}}},
-
- ["transformation nth"] = {
- selector = "rcpts.nth(1).lower",
- expect = {'nobody@example.com'}},
-
- ["transformation nth 2"] = {
- selector = "rcpts.nth(2).lower",
- expect = {'no-one@example.com'}},
-
- ["transformation substring"] = {
- selector = "header(Subject, strong).substring(6)",
- expect = {'subject'}},
-
- ["transformation substring 2"] = {
- selector = "header(Subject, strong).substring(6, 7)",
- expect = {'su'}},
-
- ["transformation substring -4"] = {
- selector = "header(Subject, strong).substring(-4)",
- expect = {'ject'}},
- }
-
- for case_name, case in pairs(cases) do
- test("case " .. case_name, function()
- local elts = check_selector(case.selector)
- assert_not_nil(elts)
- assert_rspamd_table_eq({actual = elts, expect = case.expect})
- end)
- end
- end)
-
-
- --[=========[ ******************* message ******************* ]=========]
- msg = [[
- Received: from ca-18-193-131.service.infuturo.it ([151.18.193.131] helo=User)
- by server.chat-met-vreemden.nl with esmtpa (Exim 4.76)
- (envelope-from <upwest201diana@outlook.com>)
- id 1ZC1sl-0006b4-TU; Mon, 06 Jul 2015 10:36:08 +0200
- From: <whoknows@nowhere.com>
- To: <nobody@example.com>, <no-one@example.com>
- Date: Wed, 19 Sep 2018 14:36:51 +0100 (BST)
- subject: Second, lower-cased header subject
- Subject: Test subject
- Content-Type: multipart/alternative;
- boundary="_000_6be055295eab48a5af7ad4022f33e2d0_"
-
- --_000_6be055295eab48a5af7ad4022f33e2d0_
- Content-Type: text/plain; charset="utf-8"
- Content-Transfer-Encoding: base64
-
- Hello world
-
-
- --_000_6be055295eab48a5af7ad4022f33e2d0_
- Content-Type: text/html; charset="utf-8"
-
- <html><body>
- <a href="http://example.net">http://example.net</a>
- <a href="mailto:test@example.net">mail me</a>
- </html>
-
-
- --_000_6be055295eab48a5af7ad4022f33e2d0_
- Content-Type: application/zip; name=f.zip
- Content-Disposition: attachment; size=166; filename=f.zip
- Content-Transfer-Encoding: base64
-
- UEsDBAoAAAAAAINe6kgAAAAAAAAAAAAAAAAIABwAZmFrZS5leGVVVAkAA8YaglfGGoJXdXgLAAEE
- 6AMAAAToAwAAUEsBAh4DCgAAAAAAg17qSAAAAAAAAAAAAAAAAAgAGAAAAAAAAAAAALSBAAAAAGZh
- a2UuZXhlVVQFAAPGGoJXdXgLAAEE6AMAAAToAwAAUEsFBgAAAAABAAEATgAAAEIAAAAAAA==
-
-
- --_000_6be055295eab48a5af7ad4022f33e2d0_
- Content-Type: application/zip; name=f.zip
- Content-Disposition: attachment; size=166; filename=f2.zip
- Content-Transfer-Encoding: base64
-
- UEsDBAoAAAAAAINe6kgAAAAAAAAAAAAAAAAIABwAZmFrZS5leGVVVAkAA8YaglfGGoJXdXgLAAEE
- 6AMAAAToAwAAUEsBAh4DCgAAAAAAg17qSAAAAAAAAAAAAAAAAAgAGAAAAAAAAAAAALSBAAAAAGZh
- a2UuZXhlVVQFAAPGGoJXdXgLAAEE6AMAAAToAwAAUEsFBgAAAAABAAEATgAAAEIAAAAAAA==
- ]]
|