blob: f6dfaa65d0e59baba843668b7a3daf86265da715 [file] [log] [blame]
#!/usr/bin/perl -T
use lib '.'; use lib 't';
use SATest; sa_t_init("sa_txrep");
use Test::More;
my @dbmods = grep eval "require $_", ('DB_File', 'GDBM_File', 'SDBM_File');
plan skip_all => "No db module is available" unless @dbmods;
plan tests => 8 * @dbmods;
# ---------------------------------------------------------------------------
my $rules = q(
add_header all Status "_YESNO_, score=_SCORE_ required=_REQD_ tests=_TESTS_ autolearn=_AUTOLEARN_ version=_VERSION_"
# Needed for TXREP to run
header TXREP eval:check_senders_reputation()
priority TXREP 1000
# Fixed message scores to keep track of correct scoring
header FORGED_GMAIL_RCVD eval:check_for_forged_gmail_received_headers()
header TEST_NOREALNAME From =~ /^["\s]*\<?\S+\@\S+\>?\s*$/
score TEST_NOREALNAME 5
header FROM_2_EMAILS From =~ /(?:^|<|"| )([\w+.-]+\@[\w.-]+\.\w\w++)(?:[^\n\w<]{0,80})?<(?!\1)[^\n\s]*\@/i
);
%txrep_pattern0 = (
q{ 0.0 TXREP } => 'Score normalizing',
);
%txrep_pattern1 = (
q{ 1.2 TXREP } => 'Score normalizing',
);
%txrep_pattern2 = (
q{ -25 TXREP } => 'Score normalizing',
);
%txrep_pattern3 = (
q{ -90 TXREP } => 'Score normalizing',
);
%txrep_pattern0a = (
q{ 0.0 TXREP } => 'Score normalizing',
);
%txrep_pattern1a = (
q{ 1.1 TXREP } => 'Score normalizing',
);
%txrep_pattern2a = (
q{ -25 TXREP } => 'Score normalizing',
);
%txrep_pattern3a = (
q{ -36 TXREP } => 'Score normalizing',
);
tstpre ("
loadplugin Mail::SpamAssassin::Plugin::TxRep
");
# only use rules defined here in tstprefs()
clear_localrules();
# Run entire set of tests with each available xxx_File module
foreach my $dbmodule (@dbmods) {
diag "Testing with $dbmodule";
tstprefs ("
use_txrep 1
auto_welcomelist_path ./$userstate/txreptest
auto_welcomelist_file_mode 0755
auto_welcomelist_db_modules $dbmodule
$rules
");
unlink("./$userstate/txreptest", "./$userstate/txreptest.pag", "./$userstate/txreptest.dir", "./$userstate/txreptest.mutex");
%patterns = ();
%anti_patterns = %txrep_pattern0;
sarun ("-L -t < data/txrep/0", \&patterns_run_cb);
ok_all_patterns();
clear_pattern_counters();
# feed TxRep
sarun ("-L -t < data/txrep/1", \&patterns_run_cb);
sarun ("-L -t < data/txrep/2", \&patterns_run_cb);
%patterns = %txrep_pattern1;
%anti_patterns = ();
sarun ("-L -t < data/txrep/3", \&patterns_run_cb);
ok_all_patterns();
clear_pattern_counters();
%patterns = %txrep_pattern2;
%anti_patterns = ();
sarun ("--add-addr-to-welcomelist=test1\@gmail.com");
sarun ("-L -t < data/txrep/4", \&patterns_run_cb);
ok_all_patterns();
clear_pattern_counters();
%patterns = %txrep_pattern3;
%anti_patterns = ();
sarun ("-L -t < data/txrep/5", \&patterns_run_cb);
ok_all_patterns();
clear_pattern_counters();
tstprefs("
use_txrep 1
auto_welcomelist_path ./$userstate/txreptest
auto_welcomelist_file_mode 0755
auto_welcomelist_db_modules $dbmodule
txrep_weight_email 10
$rules
");
unlink("./$userstate/txreptest", "./$userstate/txreptest.pag", "./$userstate/txreptest.dir", "./$userstate/txreptest.mutex");
%patterns = ();
%anti_patterns = %txrep_pattern0a;
sarun ("-L -t < data/txrep/0", \&patterns_run_cb);
ok_all_patterns();
clear_pattern_counters();
# feed TxRep
sarun ("-L -t < data/txrep/1", \&patterns_run_cb);
sarun ("-L -t < data/txrep/2", \&patterns_run_cb);
%patterns = %txrep_pattern1a;
%anti_patterns = ();
sarun ("-L -t < data/txrep/3", \&patterns_run_cb);
ok_all_patterns();
clear_pattern_counters();
%patterns = %txrep_pattern2a;
%anti_patterns = ();
sarun ("--add-addr-to-welcomelist=test1\@gmail.com");
sarun ("-L -t < data/txrep/4", \&patterns_run_cb);
ok_all_patterns();
clear_pattern_counters();
%patterns = %txrep_pattern3a;
%anti_patterns = ();
sarun ("-L -t < data/txrep/5", \&patterns_run_cb);
ok_all_patterns();
}