| #!/usr/bin/perl -T |
| |
| use lib '.'; use lib 't'; |
| use SATest; sa_t_init("dmarc"); |
| |
| use Test::More; |
| |
| use vars qw(%patterns %anti_patterns); |
| |
| use constant HAS_MAILSPF => eval { require Mail::SPF; }; |
| use constant HAS_DKIM_VERIFIER => eval { |
| require Mail::DKIM::Verifier; |
| version->parse(Mail::DKIM::Verifier->VERSION) >= version->parse(0.31); |
| }; |
| use constant HAS_MAILDMARC => eval { require Mail::DMARC::PurePerl; }; |
| |
| plan skip_all => "Net tests disabled" unless conf_bool('run_net_tests'); |
| plan skip_all => "Needs Mail::SPF" unless HAS_MAILSPF; |
| plan skip_all => "Needs Mail::DMARC::PurePerl" unless HAS_MAILDMARC; |
| plan skip_all => "Needs Mail::DKIM::Verifier >= 0.31" unless HAS_DKIM_VERIFIER ; |
| plan tests => 18; |
| |
| tstprefs(" |
| |
| header SPF_PASS eval:check_for_spf_pass() |
| tflags SPF_PASS nice userconf net |
| full DKIM_SIGNED eval:check_dkim_signed() |
| tflags DKIM_SIGNED net |
| |
| # Check that rename backwards compatibility works with if's |
| ifplugin Mail::SpamAssassin::Plugin::Dmarc |
| if plugin ( Mail::SpamAssassin::Plugin::Dmarc) |
| ifplugin Mail::SpamAssassin::Plugin::DMARC |
| |
| header DMARC_PASS eval:check_dmarc_pass() |
| tflags DMARC_PASS net |
| |
| header DMARC_NONE eval:check_dmarc_none() |
| tflags DMARC_NONE net |
| |
| header DMARC_QUAR eval:check_dmarc_quarantine() |
| tflags DMARC_QUAR net |
| |
| header DMARC_REJECT eval:check_dmarc_reject() |
| tflags DMARC_REJECT net |
| |
| header DMARC_MISSING eval:check_dmarc_missing() |
| tflags DMARC_MISSING net |
| |
| endif |
| endif |
| endif |
| "); |
| |
| ## |
| ## PASS |
| ## |
| |
| %patterns = ( |
| q{ DMARC_PASS } => '', |
| ); |
| %anti_patterns = ( |
| qr/DMARC_(?!PASS)/ => '', |
| ); |
| |
| sarun ("-t < data/nice/dmarc/noneok.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| |
| sarun ("-t < data/nice/dmarc/quarok.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| |
| sarun ("-t < data/nice/dmarc/rejectok.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| |
| sarun ("-t < data/nice/dmarc/strictrejectok.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| |
| ## |
| ## REJECT |
| ## |
| |
| %patterns = ( |
| q{ DMARC_REJECT } => '', |
| ); |
| %anti_patterns = ( |
| qr/DMARC_(?!REJECT)/ => '', |
| ); |
| |
| sarun ("-t < data/spam/dmarc/rejectko.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| |
| sarun ("-t < data/spam/dmarc/strictrejectko.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| |
| ## |
| ## QUAR |
| ## |
| |
| %patterns = ( |
| q{ DMARC_QUAR } => '', |
| ); |
| %anti_patterns = ( |
| qr/DMARC_(?!QUAR)/ => '', |
| ); |
| |
| sarun ("-t < data/spam/dmarc/quarko.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| |
| ## |
| ## NONE |
| ## |
| |
| %patterns = ( |
| q{ DMARC_NONE } => '', |
| ); |
| %anti_patterns = ( |
| qr/DMARC_(?!NONE)/ => '', |
| ); |
| |
| sarun ("-t < data/spam/dmarc/noneko.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| |
| ## |
| ## MISSING |
| ## |
| |
| %patterns = ( |
| q{ DMARC_MISSING } => '', |
| ); |
| %anti_patterns = ( |
| qr/DMARC_(?!MISSING)/ => '', |
| ); |
| |
| sarun ("-t < data/spam/dmarc/nodmarc.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| |