1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
#!/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();
}
|