#!/usr/bin/perl -T
use
SATest; sa_t_init(
"dmarc"
);
use
vars
qw(%patterns %anti_patterns)
;
use
constant
HAS_DKIM_VERIFIER
=>
eval
{
version->parse(Mail::DKIM::Verifier->VERSION) >= version->parse(0.31);
};
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
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
");
%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();
%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();
%patterns
= (
q{ DMARC_QUAR }
=>
''
,
);
%anti_patterns
= (
qr/DMARC_(?!QUAR)/
=>
''
,
);
sarun (
"-t < data/spam/dmarc/quarko.eml"
, \
&patterns_run_cb
);
ok_all_patterns();
%patterns
= (
q{ DMARC_NONE }
=>
''
,
);
%anti_patterns
= (
qr/DMARC_(?!NONE)/
=>
''
,
);
sarun (
"-t < data/spam/dmarc/noneko.eml"
, \
&patterns_run_cb
);
ok_all_patterns();
%patterns
= (
q{ DMARC_MISSING }
=>
''
,
);
%anti_patterns
= (
qr/DMARC_(?!MISSING)/
=>
''
,
);
sarun (
"-t < data/spam/dmarc/nodmarc.eml"
, \
&patterns_run_cb
);
ok_all_patterns();