File: basic_meta2.t

package info (click to toggle)
spamassassin 4.0.2-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 25,724 kB
  • sloc: perl: 89,143; ansic: 5,193; sh: 3,737; javascript: 339; sql: 295; makefile: 209; python: 49
file content (131 lines) | stat: -rwxr-xr-x 3,692 bytes parent folder | download | duplicates (4)
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();
}