#!/usr/bin/perl -T use lib '.'; use lib 't'; use SATest; sa_t_init("spamd_sql_prefs"); use constant HAS_DBI => eval { require DBI; }; use constant HAS_DBD_SQLITE => eval { require DBD::SQLite; }; use Test::More; plan skip_all => "Spamd tests disabled" if $SKIP_SPAMD_TESTS; plan skip_all => "SQL Pref tests disabled" unless conf_bool('run_sql_pref_tests'); plan skip_all => "DBI is unavailble" unless HAS_DBI; plan skip_all => "SQLite is unavailble" unless HAS_DBD_SQLITE; plan tests => 32; # --------------------------------------------------------------------------- my $userprefdb = mk_safe_tmpdir()."/userpref.db"; my $dbh = DBI->connect("dbi:SQLite:dbname=$userprefdb","",""); ok($dbh); $dbh->{AutoCommit} = 1; ok($dbh->do("CREATE TABLE userpref (username, preference, value)")); ok($dbh->do("INSERT INTO userpref VALUES('\@GLOBAL', 'add_header', 'all tTEST1 FOO1')")); ok($dbh->do("INSERT INTO userpref VALUES('testuser', 'score', 'GTUBE 0')")); ok($dbh->do("INSERT INTO userpref VALUES('testuser', 'score', 'MSGID_RANDY 0')")); ok($dbh->do("INSERT INTO userpref VALUES('testuser', 'score', 'DATE_IN_PAST_03_06 0')")); ok($dbh->do("INSERT INTO userpref VALUES('testuser', 'add_header', 'all tTEST2 FOO2')")); tstlocalrules (" user_scores_dsn dbi:SQLite:dbname=$userprefdb "); ok(start_spamd("-L --sql-config -u $spamd_run_as_user")); %patterns = ( q{ X-Spam-tTEST1: FOO1 }, 'Added Header tTEST1', q{ X-Spam-Flag: YES}, 'Spam Flag', q{ BODY: Generic Test for Unsolicited Bulk Email }, 'GTUBE Test', q{ XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X }, 'GTUBE String', ); %anti_patterns = ( q{ X-Spam-tTEST2: FOO2 }, 'Added Header', ); ok (spamcrun("-u nobody < data/spam/018", \&patterns_run_cb)); ok_all_patterns(); clear_pattern_counters(); %patterns = ( q{ X-Spam-tTEST1: FOO1 }, 'Added Header tTEST1', q{ X-Spam-tTEST2: FOO2 }, 'Added Header tTEST2', q{ XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X }, 'GTUBE String', ); %anti_patterns = ( q{ BODY: Generic Test for Unsolicited Bulk Email }, 'GTUBE Test', q{ X-Spam-Flag: YES}, 'Spam Flag', ); ok (spamcrun("-u testuser < data/spam/018", \&patterns_run_cb)); ok_all_patterns(); clear_pattern_counters(); ok($dbh->do("INSERT INTO userpref VALUES('testuser', 'required_score', '1000')")); %patterns = ( q{ X-Spam-tTEST1: FOO1 }, 'Added Header tTEST1', q{ X-Spam-tTEST2: FOO2 }, 'Added Header tTEST2', q{ X-Spam-Status: No }, 'Spam Status No', q{ XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X }, 'GTUBE String', ); %anti_patterns = ( q{ X-Spam-Flag: YES}, 'Spam Flag YES', q{ BODY: Generic Test for Unsolicited Bulk Email }, 'GTUBE Test', ); ok (spamcrun("-u testuser < data/spam/018", \&patterns_run_cb)); ok_all_patterns(); clear_pattern_counters(); %patterns = ( q{ dbg: config: retrieving prefs for }, 'Retrieving Prefs', ); %anti_patterns = ( q{ warn: closing dbh with active statement handles }, 'Closing Active Handles', ); checkfile ($spamd_stderr, \&patterns_run_cb); ok_all_patterns(); ok(stop_spamd()); cleanup_safe_tmpdir(); ok($dbh->disconnect());