mirror of
https://git.proxmox.com/git/proxmox-spamassassin
synced 2025-08-13 04:57:17 +00:00
132 lines
3.6 KiB
Raku
Executable File
132 lines
3.6 KiB
Raku
Executable File
#!/usr/bin/perl -T
|
|
|
|
use lib '.';
|
|
use lib 't';
|
|
use SATest; sa_t_init("basic_meta2");
|
|
|
|
use Test::More;
|
|
|
|
# run many times to catch some random natured failures
|
|
my $iterations = 5;
|
|
plan tests => 24 * $iterations;
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
%patterns = (
|
|
q{ 1.0 TEST_FOO_1 } => '',
|
|
q{ 1.0 TEST_FOO_2 } => '',
|
|
q{ 1.0 TEST_FOO_3 } => '',
|
|
q{ 1.0 TEST_META_1 } => '',
|
|
q{ 1.0 TEST_META_2 } => '',
|
|
q{ 1.0 TEST_META_3 } => '',
|
|
q{ 1.0 TEST_META_4 } => '',
|
|
q{ 1.0 TEST_META_5 } => '',
|
|
q{ 1.0 TEST_META_6 } => '',
|
|
q{ 1.0 TEST_META_7 } => '',
|
|
q{ 1.0 TEST_META_9 } => '',
|
|
q{ 1.0 TEST_META_A } => '',
|
|
q{ 1.0 TEST_META_B } => '',
|
|
q{ 1.0 TEST_META_C } => '',
|
|
q{ 1.0 TEST_META_D } => '',
|
|
q{ 1.0 TEST_META_E } => '',
|
|
q{ 1.0 TEST_META_F } => '',
|
|
q{ 1.0 TEST_META_G } => '',
|
|
q{ 1.0 TEST_META_H } => '',
|
|
q{ 1.0 TEST_META_I } => '',
|
|
q{ 1.0 TEST_META_J } => '',
|
|
q{ 1.0 TEST_META_K } => '',
|
|
);
|
|
|
|
%anti_patterns = (
|
|
q{ TEST_NEG_1 } => '',
|
|
q{ TEST_META_8 } => '',
|
|
);
|
|
|
|
tstlocalrules (qq{
|
|
|
|
body __FOO_1 /a/
|
|
body __FOO_2 /b/
|
|
body __FOO_33 /c/
|
|
body __FOO_4 /xyzzynotfound/
|
|
|
|
meta TEST_FOO_1 __FOO_1 + __FOO_2 + __FOO_33 + __FOO_4 == 3
|
|
meta TEST_FOO_2 rules_matching(__FOO_*) == 3
|
|
meta TEST_FOO_3 __FOO_4 + rules_matching(__FOO_?) == 2
|
|
|
|
meta TEST_NEG_1 __FOO_1 + __FOO_2 == 1
|
|
|
|
meta TEST_META_1 (TEST_FOO_1 + TEST_FOO_2 + TEST_NEG_1) == 2
|
|
|
|
##
|
|
## Unrun rule dependencies (Bug 7735)
|
|
##
|
|
|
|
# Non-existing rule, should hit as !0
|
|
meta TEST_META_2 !NONEXISTINGRULE
|
|
# Should hit as !0 || 0
|
|
meta TEST_META_3 !NONEXISTINGRULE || NONEXISTINGRULE
|
|
|
|
# Disabled rule, same as above
|
|
body TEST_DISABLED /a/
|
|
score TEST_DISABLED 0
|
|
# Should hit as !0
|
|
meta TEST_META_4 !TEST_DISABLED
|
|
# Should hit as !0 || 0
|
|
meta TEST_META_5 !TEST_DISABLED || TEST_DISABLED
|
|
|
|
# Unrun rule (due to local tests only), same as above
|
|
askdns TEST_DISABLED2 spamassassin.org TXT /./
|
|
# Should hit as !0
|
|
meta TEST_META_6 !TEST_DISABLED2
|
|
# Should hit as !0 || 0
|
|
meta TEST_META_7 !TEST_DISABLED2 || TEST_DISABLED2
|
|
|
|
# Other way of "disabling" a rule, with meta 0.
|
|
meta TEST_DISABLED3 0
|
|
# Should hit
|
|
meta TEST_META_I !TEST_DISABLED3
|
|
# Should hit
|
|
meta TEST_META_J !TEST_DISABLED3 && __FOO_1
|
|
|
|
# Should not hit
|
|
meta TEST_META_8 __FOO_1 + NONEXISTINGRULE == 2
|
|
# Should hit as 1 + 0 + 1 == 2
|
|
meta TEST_META_9 __FOO_1 + NONEXISTINGRULE + __FOO_2 == 2
|
|
# Should hit as above
|
|
meta TEST_META_A __FOO_1 + NONEXISTINGRULE + __FOO_2 > 1
|
|
|
|
# local_tests_only
|
|
meta TEST_META_B NONEXISTINGRULE || local_tests_only
|
|
|
|
# complex metas with different priorities
|
|
body __BAR_5 /a/
|
|
priority __BAR_5 -1000
|
|
body __BAR_6 /b/
|
|
priority __BAR_6 0
|
|
body __BAR_7 /c/
|
|
priority __BAR_7 1000
|
|
meta TEST_META_C __BAR_5 && __BAR_6 && __BAR_7
|
|
meta TEST_META_D __BAR_5 && __BAR_6 && TEST_META_C
|
|
priority TEST_META_D -2000
|
|
meta TEST_META_E __BAR_6 && __BAR_7 && TEST_META_D
|
|
meta TEST_META_F __BAR_5 && __BAR_7 && TEST_META_E
|
|
priority TEST_META_F 2000
|
|
meta TEST_META_G TEST_META_C && TEST_META_D && TEST_META_E && TEST_META_F
|
|
|
|
# metas without dependencies
|
|
meta __TEST_META_H1 6
|
|
meta __TEST_META_H2 2
|
|
meta __TEST_META_H3 1
|
|
meta TEST_META_H (__TEST_META_H1 > 2) && (__TEST_META_H2 > 1) && __TEST_META_H3
|
|
|
|
# bug 7735, comment 87
|
|
meta __TEST_META_K (1 || TEST_DISABLED || TEST_DISABLED2 || TEST_DISABLED3)
|
|
meta TEST_META_K __TEST_META_K
|
|
});
|
|
|
|
for (1 .. $iterations) {
|
|
sarun ("-L -t < data/nice/001 2>&1", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
}
|
|
|