t/whitelist_addrs.t (174 lines of code) (raw):

#!/usr/bin/perl -T use lib '.'; use lib 't'; use SATest; sa_t_init("whitelist_addrs"); use IO::File; use constant HAS_DB_FILE => eval { require DB_File }; use Test::More; plan skip_all => 'Long running tests disabled' unless conf_bool('run_long_tests'); plan skip_all => 'Need DB_File for this test' unless HAS_DB_FILE; plan tests => 35; # --------------------------------------------------------------------------- tstpre (" loadplugin Mail::SpamAssassin::Plugin::AWL "); tstprefs (" header AWL eval:check_from_in_auto_welcomelist() tflags AWL userconf noautolearn priority AWL 1000 "); %added_address_whitelist_patterns = ( q{SpamAssassin auto-welcomelist: adding address to welcomelist:}, 'added address to welcomelist', ); %added_address_blacklist_patterns = ( q{SpamAssassin auto-welcomelist: adding address to blocklist:}, 'added address to blocklist', ); %removed_address_patterns = ( q{SpamAssassin auto-welcomelist: removing address:}, 'removed address', ); %is_nonspam_patterns = ( q{X-Spam-Status: No}, 'spamno', ); %is_spam_patterns = ( q{X-Spam-Status: Yes}, 'spamyes', ); %patterns = %added_address_whitelist_patterns; ok(sarun ("--add-addr-to-whitelist whitelist_test\@whitelist.spamassassin.taint.org", \&patterns_run_cb)); ok_all_patterns(); %patterns = %is_nonspam_patterns; ok (sarun ("-L < data/nice/002", \&patterns_run_cb)); ok_all_patterns(); %patterns = %is_nonspam_patterns; sarun ("-L < data/spam/004", \&patterns_run_cb); ok_all_patterns(); %patterns = %removed_address_patterns; ok(sarun ("--remove-addr-from-whitelist whitelist_test\@whitelist.spamassassin.taint.org", \&patterns_run_cb)); ok_all_patterns(); %patterns = %is_spam_patterns; sarun ("-L < data/spam/004", \&patterns_run_cb); ok_all_patterns(); %patterns = %added_address_blacklist_patterns; ok(sarun ("--add-addr-to-blacklist whitelist_test\@whitelist.spamassassin.taint.org", \&patterns_run_cb)); ok_all_patterns(); %patterns = %is_spam_patterns; sarun ("-L < data/nice/002", \&patterns_run_cb); ok_all_patterns(); ok(sarun ("--remove-addr-from-whitelist whitelist_test\@whitelist.spamassassin.taint.org", \&patterns_run_cb)); # The following section tests the object oriented interface to adding/removing whitelist # and blacklist entries. Primarily this is testing basic functionality and that the # "print" commands that are present in the command line interface are not being printed # when you call the methods directly. This is why we are manipulating STDOUT. open my $oldout, ">&STDOUT" || die "Cannot dup STDOUT"; my $fh = IO::File->new_tmpfile(); ok($fh); open(STDOUT, ">&=".fileno($fh)) || die "Cannot reopen STDOUT"; select STDOUT; $| = 1; my $sa = create_saobj(); $sa->init(); $sa->add_address_to_whitelist("whitelist_test\@whitelist.spamassassin.taint.org"); seek($fh, 0, 0); my $error = do { local $/; <$fh>; }; $fh->close(); open STDOUT, ">&".fileno($oldout) || die "Cannot dupe \$oldout: $!"; select STDOUT; $| = 1; #warn "# $error\n"; ok($error !~ /SpamAssassin auto-welcomelist: /); %patterns = %is_nonspam_patterns; ok (sarun ("-L < data/nice/002", \&patterns_run_cb)); ok_all_patterns(); %patterns = %is_nonspam_patterns; sarun ("-L < data/spam/004", \&patterns_run_cb); ok_all_patterns(); $fh = IO::File->new_tmpfile(); ok($fh); open(STDOUT, ">&=".fileno($fh)) || die "Cannot reopen STDOUT"; select STDOUT; $| = 1; $sa->remove_address_from_whitelist("whitelist_test\@whitelist.spamassassin.taint.org"); seek($fh, 0, 0); $error = do { local $/; <$fh>; }; $fh->close(); open STDOUT, ">&".fileno($oldout) || die "Cannot dupe \$oldout: $!"; select STDOUT; $| = 1; #warn "# $error\n"; ok($error !~ /SpamAssassin auto-welcomelist: /); %patterns = %is_spam_patterns; sarun ("-L < data/spam/004", \&patterns_run_cb); ok_all_patterns(); $fh = IO::File->new_tmpfile(); ok($fh); open(STDOUT, ">&=".fileno($fh)) || die "Cannot reopen STDOUT"; select STDOUT; $| = 1; $sa->add_address_to_blacklist("whitelist_test\@whitelist.spamassassin.taint.org"); seek($fh, 0, 0); $error = do { local $/; <$fh>; }; $fh->close(); open STDOUT, ">&".fileno($oldout) || die "Cannot dupe \$oldout: $!"; select STDOUT; $| = 1; #warn "# $error\n"; ok($error !~ /SpamAssassin auto-welcomelist: /); %patterns = %is_spam_patterns; sarun ("-L < data/nice/002", \&patterns_run_cb); ok_all_patterns(); $sa->remove_address_from_whitelist("whitelist_test\@whitelist.spamassassin.taint.org"); # Now we can test the "all" methods open(MAIL,"< data/nice/002"); my $raw_message = do { local $/; <MAIL>; }; close(MAIL); ok($raw_message); my $mail = $sa->parse( $raw_message ); $fh = IO::File->new_tmpfile(); ok($fh); open(STDOUT, ">&=".fileno($fh)) || die "Cannot reopen STDOUT"; select STDOUT; $| = 1; $sa->add_all_addresses_to_whitelist($mail); seek($fh, 0, 0); $error = do { local $/; <$fh>; }; $fh->close(); open STDOUT, ">&".fileno($oldout) || die "Cannot dupe \$oldout: $!"; select STDOUT; $| = 1; #warn "# $error\n"; ok($error !~ /SpamAssassin auto-welcomelist: /); %patterns = %is_nonspam_patterns; ok (sarun ("-L < data/nice/002", \&patterns_run_cb)); ok_all_patterns(); %patterns = %is_nonspam_patterns; sarun ("-L < data/spam/004", \&patterns_run_cb); ok_all_patterns(); $fh = IO::File->new_tmpfile(); ok($fh); open(STDOUT, ">&=".fileno($fh)) || die "Cannot reopen STDOUT"; select STDOUT; $| = 1; $sa->remove_all_addresses_from_whitelist($mail); seek($fh, 0, 0); $error = do { local $/; <$fh>; }; $fh->close(); open STDOUT, ">&".fileno($oldout) || die "Cannot dupe \$oldout: $!"; select STDOUT; $| = 1; #warn "# $error\n"; ok($error !~ /SpamAssassin auto-welcomelist: /); %patterns = %is_spam_patterns; sarun ("-L < data/spam/004", \&patterns_run_cb); ok_all_patterns(); $fh = IO::File->new_tmpfile(); ok($fh); open(STDOUT, ">&=".fileno($fh)) || die "Cannot reopen STDOUT"; select STDOUT; $| = 1; $sa->add_all_addresses_to_blacklist($mail); seek($fh, 0, 0); $error = do { local $/; <$fh>; }; $fh->close(); open STDOUT, ">&".fileno($oldout) || die "Cannot dupe \$oldout: $!"; select STDOUT; $| = 1; #warn "# $error\n"; ok($error !~ /SpamAssassin auto-welcomelist: /); %patterns = %is_spam_patterns; sarun ("-L < data/nice/002", \&patterns_run_cb); ok_all_patterns(); $sa->remove_all_addresses_from_whitelist($mail);