From: Vsevolod Stakhov Date: Fri, 10 Jul 2026 13:16:22 +0000 (+0100) Subject: [Test] selectors: cases for partially-parsed selectors X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=86ff7bb595c8cf07f2506dc77a63f7efa41eb1eb;p=thirdparty%2Frspamd.git [Test] selectors: cases for partially-parsed selectors Negative cases: a second ':' method, a stray closing paren and junk after a ';' list element must be rejected. Control cases: valid method/transform chains, selector lists and trailing whitespace must keep parsing. --- diff --git a/test/lua/unit/selectors.negative.lua b/test/lua/unit/selectors.negative.lua index 84f95c0c4f..fa927d6737 100644 --- a/test/lua/unit/selectors.negative.lua +++ b/test/lua/unit/selectors.negative.lua @@ -53,6 +53,18 @@ context("Selectors test", function() ["unknown transformation"] = { selector = "urls.somethingnew"}, + + ["second method"] = { + selector = "from('smtp'):domain:lower"}, + + ["second method after transform-less method"] = { + selector = "urls:get_host:lower"}, + + ["stray paren"] = { + selector = "header('Subject').lower)"}, + + ["junk after list element"] = { + selector = "ip;from:addr garbage"}, } for case_name, case in pairs(cases) do @@ -62,6 +74,34 @@ context("Selectors test", function() assert_nil(sels) end) end + + -- Selectors which must be parsed in whole + local valid_cases = { + ["method then transform"] = { + selector = "from('smtp'):domain.lower"}, + + ["method then transform chain"] = { + selector = "urls:get_host.lower.uniq"}, + + ["transform with arguments"] = { + selector = "header('Subject').lower.digest('hex')"}, + + ["list of selectors"] = { + selector = "from:addr;ip"}, + + ["method then transform with tld"] = { + selector = "from('smtp'):domain.get_tld"}, + + ["trailing whitespace"] = { + selector = "from('smtp'):domain.lower "}, + } + + for case_name, case in pairs(valid_cases) do + test("valid case " .. case_name, function() + local sels = lua_selectors.parse_selector(cfg, case.selector) + assert_not_nil(sels) + end) + end end)