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 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
#!/usr/bin/perl -T
use lib '.'; use lib 't';
use SATest; sa_t_init("header");
use Test::More tests => 38;
# ---------------------------------------------------------------------------
tstprefs('
# exists
header TEST_EXISTS1 exists:To
header TEST_EXISTS2 exists:Not-Exist
# if-unset
header TEST_UNSET1 Not-Exist =~ /./
header TEST_UNSET2 Not-Exist =~ /^UNSET$/ [if-unset: UNSET]
header TEST_UNSET3 Not-Exist =~ /^NOT$/ [if-unset: UNSET]
# exists should not leak to a redefined test
header TEST_LEAK1 exists:Not-Exist
header TEST_LEAK1 To =~ /notexist/
# if-unset should not leak to a redefined test
header TEST_LEAK2 Not-Exist =~ /^UNSET$/ [if-unset: UNSET]
header TEST_LEAK2 Not-Exist =~ /^UNSET$/
# op should not leak to a redefined test
header TEST_LEAK3 To !~ /./
header TEST_LEAK3 To =~ /notfound/
# Test 4.0 :first :last parser
header HEADER_FIRST1 X-Hashcash:first =~ /^0:040315:test@example.com:69781c87bae95c03$/
header HEADER_LAST1 X-Hashcash:last =~ /^1:20:040806:test1@example.com:test=foo:482b788d12eb9b56:2a3349$/
header HEADER_ALL1 X-Hashcash =~ /^0:040315:.*1:20:040806:/s
# Meta should evaluate all
meta TEST_META (TEST_EXISTS1 && TEST_UNSET2 && HEADER_FIRST1 && HEADER_LAST1 && HEADER_ALL1)
# ALL newlines (Bug 8121)
header TEST_ALL1 ALL =~ /\nTo: announce@ximian\.com\nContent-Type:/
# ALL selector
header TEST_ALL2 ALL-TRUSTED =~ /\nDelivered-To: jm@netnoteinc.com\nReceived:/
header TEST_ALL3 ALL-UNTRUSTED =~ /\nDelivered-To:/
');
%patterns = (
q{ 1.0 TEST_EXISTS1 }, '',
q{ 1.0 TEST_UNSET2 }, '',
q{ 1.0 HEADER_FIRST1 }, '',
q{ 1.0 HEADER_LAST1 }, '',
q{ 1.0 HEADER_ALL1 }, '',
q{ 1.0 TEST_META }, '',
q{ 1.0 TEST_ALL1 }, '',
q{ 1.0 TEST_ALL2 }, '',
);
%anti_patterns = (
q{ TEST_EXISTS2 }, '',
q{ TEST_UNSET1 }, '',
q{ TEST_UNSET3 }, '',
q{ TEST_LEAK1 }, '',
q{ TEST_LEAK2 }, '',
q{ TEST_LEAK3 }, '',
q{ TEST_ALL3 }, '',
);
ok (sarun ("-L -t < data/nice/001", \&patterns_run_cb));
ok_all_patterns();
##########################################
tstprefs('
# Check for invalid header parsing (Bug 8342)
header INVALID_FROM eval:check_invalid_from()
score INVALID_FROM 2.0
header INVALID_SENDER eval:check_invalid_sender()
score INVALID_SENDER 2.0
header INVALID_REPLY eval:check_invalid_replyto()
score INVALID_REPLY 2.0
');
%patterns = (
q{ 2.0 INVALID_FROM }, 'INVALID_FROM',
);
%anti_patterns = (
q{ 2.0 INVALID_REPLY }, 'INVALID_REPLY',
q{ 2.0 INVALID_SENDER }, 'INVALID_SENDER',
);
ok (sarun ("-L -t < data/spam/invalid_from", \&patterns_run_cb));
ok_all_patterns();
%patterns = (
q{ 2.0 INVALID_SENDER }, 'INVALID_SENDER',
);
%anti_patterns = (
q{ 2.0 INVALID_FROM }, 'INVALID_FROM',
q{ 2.0 INVALID_REPLY }, 'INVALID_REPLY',
);
ok (sarun ("-L -t < data/spam/invalid_sender", \&patterns_run_cb));
ok_all_patterns();
%patterns = (
q{ 2.0 INVALID_REPLY }, 'INVALID_REPLY',
);
%anti_patterns = (
q{ 2.0 INVALID_FROM }, 'INVALID_FROM',
q{ 2.0 INVALID_SENDER }, 'INVALID_SENDER',
);
ok (sarun ("-L -t < data/spam/invalid_replyto", \&patterns_run_cb));
ok_all_patterns();
##########################################
tstprefs('
# Test 4.0 multiple :addr parser
header TO1 To:addr =~ /(?:@.*?){1}/s
header TONEG1 To:addr =~ /(?:@.*?){2}/s
header CC1 Cc:addr =~ /(?:@.*?){5}/s
header CCNEG1 Cc:addr =~ /(?:@.*?){6}/s
header TOCC1 ToCc:addr =~ /(?:@.*?){6}/s
header TOCCNEG1 ToCc:addr =~ /(?:@.*?){7}/s
header __TO_COUNT To:addr =~ /^.+$/m
tflags __TO_COUNT multiple
meta TO2 __TO_COUNT == 1
header __CC_COUNT Cc:addr =~ /^.+$/m
tflags __CC_COUNT multiple
meta CC2 __CC_COUNT == 5
header __TOCC_COUNT ToCc:addr =~ /^.+$/m
tflags __TOCC_COUNT multiple
meta TOCC2 __TOCC_COUNT == 6
');
%patterns = (
q{ 1.0 TO1 }, '',
q{ 1.0 CC1 }, '',
q{ 1.0 TOCC1 }, '',
q{ 1.0 TO2 }, '',
q{ 1.0 CC2 }, '',
q{ 1.0 TOCC2 }, '',
);
%anti_patterns = (
q{ TONEG }, '',
q{ CCNEG }, '',
q{ TOCCNEG }, '',
);
ok (sarun ("-L -t < data/nice/006", \&patterns_run_cb));
ok_all_patterns();
|