t/00.Dmarc.t ................................. ok 1 - use Mail::DMARC; ok 2 - An object of class 'Mail::DMARC' isa 'Mail::DMARC' ok 3 - An object of class 'Mail::DMARC' isa 'Mail::DMARC' ok 4 - new, empty ok 5 - An object of class 'Mail::DMARC' isa 'Mail::DMARC' ok 6 - new, one shot ok 7 - new, individual accessors ok 8 - config file is initialized before assert_ok ok 9 - header_from, spam-example.com ok 10 - header_from, bar.com ok 11 - header_from, a.b, invalid header_from at t/00.Dmarc.t line 235. ok 12 - header_from, a@b.c, invalid header_from at t/00.Dmarc.t line 235. ok 13 - header_from, f*ct.org, invalid header_from at t/00.Dmarc.t line 235. ok 14 - envelope_from, example.com ok 15 - header_from, spam-example.com ok 16 - spf, ARRAY(0x55f6d929d9d8) ok 17 - dkim, ARRAY(0x55f6d929d4c8) ok 18 - envelope_to, example.com ok 19 - source_ip, 0.0.0.0 ok 20 - source_ip, 1.1.1.1 ok 21 - source_ip, 255.255.255.255 ok 22 - neg, envelope_to, 3.a ok 23 - neg, source_ip, 0.257.0.25 ok 24 - neg, source_ip, 255.255.255.256 ok 25 - spf, hash set ok 26 - spf, hash set result ok 27 - spf, hashref set ok 28 - spf, hashref set, result ok 29 - spf, arrayref set ok 30 - spf, arrayref set result ok 31 - spf, arrayref set ok 32 - spf, arrayref set result ok 33 - spf, callback set ok 34 - callback not yet called ok 35 - spf, callback-derived result ok 36 - spf, callback-cached result ok 37 - callback exactly once ok 38 - spf, neg, Can't locate object method "dom" via package "Mail::DMARC::Report::Aggregate::Record::Auth_Results::SPF" at lib/Mail/DMARC/Report/Aggregate/Record/Auth_Results/SPF.pm line 51. ok 39 - dkim, hash set ok 40 - dkim, hash set result ok 41 - dkim, hashref set ok 42 - dkim, hashref set, result ok 43 - dkim, arrayref set ok 44 - dkim, arrayref set result ok 45 - dkim, arrayref set ok 46 - dkim, arrayref set result ok 47 - dkim, hash set 1 ok 48 - dkim, hash set 2 ok 49 - dkim, iterative hashes ok 50 - dkim, as Mail::DKIM::Verifier ok 51 - dkim, arrayref set ok 52 - callback not yet called ok 53 - dkim, callback-derived result ok 54 - dkim, callback-cached result ok 55 - callback exactly once ok 56 - dkim, neg, Can't locate object method "blah" via package "Mail::DMARC::Report::Aggregate::Record::Auth_Results::DKIM" at lib/Mail/DMARC/Report/Aggregate/Record/Auth_Results/DKIM.pm line 53. ok 57 - dkim, neg, invalid DKIM result at lib/Mail/DMARC.pm line 107. ok 58 - Zulu Day: Day Start ok 59 - Zulu Day: Day Middle ok 60 - Zulu Day: Day End ok 61 - Zulu Day: Day Next ok 62 - Report Window: Daily Start ok 63 - Report Window: Daily Middle ok 64 - Report Window: Daily End ok 65 - Report Window: Hourly First Start ok 66 - Report Window: Hourly First Middle ok 67 - Report Window: Hourly First End ok 68 - Report Window: Hourly Second Start ok 69 - Report Window: Hourly Second Middle ok 70 - Report Window: Hourly Second End ok 71 - Report Window: Irregular Interval ok 72 - Interval Limit: Below Limit ok 73 - Interval Limit: Lower Limit ok 74 - Interval Limit: Between Limits ok 75 - Interval Limit: Upper Limit ok 76 - Interval Limit: Above Limit ok 77 - Public Suffix: xn--55qx5d.cn ok 78 - Public Suffix: xn--zfr164b ok 79 - Public Suffix: examplebogusdomainname ok 80 - Public Suffix: com 1..80 ok t/01.Policy.t ................................ ok 1 - use Mail::DMARC::Policy; ok 2 - An object of class 'Mail::DMARC::Policy' isa 'Mail::DMARC::Policy' ok 3 - policy, version, neg ok 4 - policy, set ok 5 - policy, version, pos ok 6 - An object of class 'Mail::DMARC::Policy' isa 'Mail::DMARC::Policy' ok 7 - new, empty policy ok 8 - An object of class 'Mail::DMARC::Policy' isa 'Mail::DMARC::Policy' ok 9 - new, with args ok 10 - An object of class 'Mail::DMARC::Policy' isa 'Mail::DMARC::Policy' ok 11 - new, with args ok 12 - policy->is_valid_p, pos, none ok 13 - policy->is_valid_p, pos, reject ok 14 - policy->is_valid_p, pos, quarantine ok 15 - policy->is_valid_p, neg, other ok 16 - policy->is_valid_p, neg, gibberish ok 17 - policy->is_valid_p, neg, non-policy ok 18 - policy->is_valid_p, neg, words ok 19 - policy->is_valid_rf, pos, afrf ok 20 - policy->is_valid_rf, pos, iodef ok 21 - policy->is_valid_rf, neg, ffrf ok 22 - policy->is_valid_rf, neg, i0def ok 23 - policy->is_valid_rf, neg, report ok 24 - An object of class 'Mail::DMARC::Policy' isa 'Mail::DMARC::Policy' ok 25 - parse ok 26 - parse, warns of invalid DMARC record format ok 27 - parse, warns of invalid DMARC record format, with location ok 28 - An object of class 'Mail::DMARC::Policy' isa 'Mail::DMARC::Policy' ok 29 - parse ok 30 - STDERR yields parse warnings ok 31 - pct, 0 ok 32 - pct, 10 ok 33 - pct, 50 ok 34 - pct, 99 ok 35 - pct, 100 ok 36 - ri, 0 ok 37 - ri, 1 ok 38 - ri, 1000 ok 39 - ri, 4294967295 ok 40 - adkim, r ok 41 - adkim, s ok 42 - adkim, R ok 43 - adkim, S ok 44 - rua, http://example.com/pub/dmarc!30m ok 45 - rua, mailto:dmarc-feed@example.com!10m ok 46 - fo, 0 ok 47 - fo, 1 ok 48 - fo, d ok 49 - fo, s ok 50 - fo, D ok 51 - fo, S ok 52 - fo, 0:d ok 53 - fo, 0:1:d:s ok 54 - ruf, https://example.com/dmarc?report!1m ok 55 - sp, none ok 56 - sp, reject ok 57 - sp, quarantine ok 58 - sp, NoNe ok 59 - sp, REjEcT ok 60 - sp, QuarAntine ok 61 - rf, iodef ok 62 - rf, afrf ok 63 - rf, IODEF ok 64 - rf, AFRF ok 65 - aspf, r ok 66 - aspf, s ok 67 - aspf, R ok 68 - aspf, S ok 69 - v, DMARC1 ok 70 - v, dmarc1 ok 71 - p, none ok 72 - p, reject ok 73 - p, quarantine ok 74 - p, NONE ok 75 - p, REJEcT ok 76 - p, Quarantine ok 77 - neg, p, nonense ok 78 - neg, p, silly ok 79 - neg, p, example ok 80 - neg, aspf, relaxed ok 81 - neg, aspf, strict ok 82 - neg, v, DMARC2 ok 83 - neg, rf, iodef2 ok 84 - neg, rf, rfrf2 ok 85 - neg, rf, rfrf ok 86 - neg, sp, nones ok 87 - neg, sp, rejection ok 88 - neg, sp, quarrantine ok 89 - neg, ruf, mail:msimerson@cnap.org ok 90 - neg, fo, 00 ok 91 - neg, fo, 11 ok 92 - neg, fo, dd ok 93 - neg, fo, ss ok 94 - neg, rua, ftp://example.com/pub ok 95 - neg, rua, torrent://piratebay.net/dmarc ok 96 - neg, adkim, relaxed ok 97 - neg, adkim, strict ok 98 - neg, ri, -1 ok 99 - neg, ri, a ok 100 - neg, ri, 4294967296 ok 101 - neg, pct, -1 ok 102 - neg, pct, f ok 103 - neg, pct, 101 ok 104 - neg, pct, 1.1 ok 105 - neg, pct, 1.0 ok 106 - neg, pct, 5.f1 ok 107 - An object of class 'Mail::DMARC::Policy' isa 'Mail::DMARC::Policy' ok 108 - new, empty policy ok 109 - apply_defaults ok 110 - new, with defaults ok 111 - is_valid, missing version specifier at t/01.Policy.t line 213. ok 112 - is_valid, 1.4.1 meaningless, missing policy action (p=) at t/01.Policy.t line 217. ok 113 - is_valid, 1.4.3 extra backslashes ok 114 - is_valid, 1.4.4 unknown tag ok 115 - is_valid, 1.4.5 bogus p value, invalid policy action at t/01.Policy.t line 227. ok 116 - is_valid, 1.4.2 smallest record ok 117 - is_valid, pos, w/defaults ok 118 - is_valid, neg, missing p, no rua ok 119 - is_valid, neg, missing p, invalid rua ok 120 - is_valid, pos, implicit p=none w/rua ok 121 - policy is valid: domain=accuquote.com;v=DMARC1;p=none;fo:0;adkim=r;aspf=r;sp=none;rua=mailto:accu_postmaster@accuquote.com ok 122 - policy is valid: domain=targetselect.net;v=DMARC1;p=none;rua=mailto:postmaster@targetselect.net;ruf=mailto:postmaster@targetselect.net;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 123 - policy is valid: domain=1105insight.com;v=DMARC1;p=none;rua=mailto:postmaster@1105insight.com;ruf=mailto:postmaster@1105insight.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 124 - policy is valid: domain=borsheims.net;v=DMARC1;p=none;rua=mailto:postmaster@borsheims.net;ruf=mailto:postmaster@borsheims.net;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 125 - policy is valid: domain=consumersilver.com;v=DMARC1;p=none;rua=mailto:postmaster@consumersilver.com;ruf=mailto:postmaster@consumersilver.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 126 - policy is valid: domain=coppermail-usa.com;v=DMARC1;p=none;rua=mailto:postmaster@coppermail-usa.com;ruf=mailto:postmaster@coppermail-usa.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 127 - policy is valid: domain=eglancesender.com;v=DMARC1;p=none;rua=mailto:postmaster@eglancesender.com;ruf=mailto:postmaster@eglancesender.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 128 - policy is valid: domain=egroupconsumer.com;v=DMARC1;p=none;rua=mailto:postmaster@egroupconsumer.com;ruf=mailto:postmaster@egroupconsumer.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 129 - policy is valid: domain=eselectsender.com;v=DMARC1;p=none;rua=mailto:postmaster@eselectsender.com;ruf=mailto:postmaster@eselectsender.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 130 - policy is valid: domain=filemail.com;v=DMARC1;p=none;rua=mailto:admin@filemail.com;ruf=mailto:admin@filemail.com;fo:0;adkim=r;aspf=r ok 131 - policy is valid: domain=fisherprograms.com;v=DMARC1;p=none;rua=mailto:postmaster@fisherprograms.com;ruf=mailto:postmaster@fisherprograms.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 132 - policy is valid: domain=mail-peninsula.com;v=DMARC1;p=none;rua=mailto:umesh@force24.co.uk;ruf=mailto:umesh@force24.co.uk;fo:0;adkim=r;aspf=r;pct=100;rf=afrf;ri=86000;sp=none ok 133 - policy is valid: domain=sendergroup.com;v=DMARC1;p=none;rua=mailto:postmaster@sendergroup.com;ruf=mailto:postmaster@sendergroup.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 134 - policy is valid: domain=targetselection.com;v=DMARC1;p=none;rua=mailto:postmaster@targetselection.com;ruf=mailto:postmaster@targetselection.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 135 - policy is valid: domain=trondheim-redcross.no;v=DMARC1;p=none;rua=mailto:postmaster@trondheim-redcross.no;ruf=mailto:johess@trondheim-redcross.no;fo:0;adkim=r;aspf=r;pct=100;rf=afrf;ri=86400;sp=none ok 136 - policy is valid: domain=vsender-2.com;v=DMARC1;p=none;rua=mailto:postmaster@vsender-2.com;ruf=mailto:postmaster@vsender-2.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 137 - policy is valid: domain=vsender-3.com;v=DMARC1;p=none;rua=mailto:postmaster@vsender-3.com;ruf=mailto:postmaster@vsender-3.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 138 - policy is valid: domain=wfyi.org;v=DMARC1;p=none;rua=mailto:dmarc1630@wfyi.org;ruf=mailto:dmarc1630@wfyi.org;fo:0;adkim=r;aspf=r;pct=100;rf=afrf;ri=86400;sp=none ok 139 - policy is valid: domain=wk1business.com;v=DMARC1;p=none;rua=mailto:postmaster@wk1business.com;ruf=mailto:postmaster@wk1business.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 140 - policy is valid: domain=teogenes.com.br;v=DMARC1;p=quarantine;rua=mailto:retorno@teogenes.com.br;fo:1:d;adkim=r;aspf=r;rf=afrf;sp=quarantine ok 141 - policy is valid: domain=wkcplatnium.com;v=DMARC1;p=none;rua=mailto:postmaster@wkcplatnium.com;ruf=mailto:postmaster@wkcplatnium.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 142 - policy is valid: domain=brightworksgroup.net;v=DMARC1;p=none;0;adkim=r;aspf=r ok 143 - policy is valid: domain=bronzemail-usa.com;v=DMARC1;p=none;rua=mailto:postmaster@bronzemail-usa.com;ruf=mailto:postmaster@bronzemail-usa.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 144 - policy is valid: domain=driveconsumer.com;v=DMARC1;p=none;rua=mailto:postmaster@driveconsumer.com;ruf=mailto:postmaster@driveconsumer.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 145 - policy is valid: domain=econnect1.com;v=DMARC1;p=none;rua=mailto:postmaster@econnect1.com;ruf=mailto:postmaster@econnect1.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 146 - policy is valid: domain=esender1.com;v=DMARC1;p=none;rua=mailto:postmaster@esender1.com;ruf=mailto:postmaster@esender1.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 147 - policy is valid: domain=esender3.com;v=DMARC1;p=none;rua=mailto:postmaster@esender3.com;ruf=mailto:postmaster@esender3.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 148 - policy is valid: domain=lns.com;v=DMARC1;p=none;rua=mailto:dmarc@lns.com;ruf=mailto:dmarc@lns.com;0;adkim=r;aspf=r;pct=100;rf=afrf;ri=86400;sp=none ok 149 - policy is valid: domain=my-dear-lady.com;v=DMARC1;p=none;rua=mailto:postmaster@my-dear-lady.com;ruf=mailto:postmaster@my-dear-lady.com;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 150 - policy is valid: domain=theluxurycloset.info;v=DMARC1;p=reject;adkim=s;aspf=r;rf=afrf;;pct=100 ok 151 - policy is valid: domain=newsletter.ironpony.net;v=DMARC1;p=none;rua=mailto:postmaster@newsletter.ironpony.net;ruf=mailto:postmaster@newsletter.ironpony.net;adkim=r;aspf=r;pct=100;rf:afrf;ri=86400;sp=none ok 152 - policy is valid: domain=cmnet.org;v=DMARC1;p=none;sp=none;rua=mailto:postmaster@cmnet.org!10m;;pct=100;ri=86400 ok 153 - policy is valid: domain=coachingcompass.com;v=DMARC1;p=quarantine;rua=mailto:dan@darau.com;ruf=mailto:dan@darau.com;1:d:s;adkim=r;aspf=r;rf=afrf;sp=quarantine ok 154 - policy is valid: domain=genetex.com;v=DMARC1;p=none;sp-none;rua=mailto:postmaster@genetex.com!1m;ruf=mailto:postmaster@genetex.com!1m;rf=afrf;pct=100;ri=86400 1..154 ok t/03.Base.t .................................. ok 1 - use Mail::DMARC::Base; ok 2 - An object of class 'Mail::DMARC::Base' isa 'Mail::DMARC::Base' ok 3 - An object of class 'Config::Tiny' isa 'Config::Tiny' ok 4 - An object of class 'Net::DNS::Resolver' isa 'Net::DNS::Resolver' ok 5 - invalid config file ok 6 - alternate config file ok 7 - any_inet_pton, 1.1.1.1 ok 8 - any_inet_ntop, 1.1.1.1 ok 9 - any_inet_ntop, 1.1.1.1 ok 10 - any_inet_pton, 10.0.1.1 ok 11 - any_inet_ntop, 10.0.1.1 ok 12 - any_inet_ntop, 10.0.1.1 ok 13 - any_inet_pton, 2002:4c79:6240::1610:9fff:fee5:fb5 ok 14 - any_inet_ntop, 2002:4c79:6240::1610:9fff:fee5:fb5 ok 15 - any_inet_ntop, 2002:4c79:6240::1610:9fff:fee5:fb5 ok 16 - any_inet_pton, 2607:f060:b008:feed::6 ok 17 - any_inet_ntop, 2607:f060:b008:feed::6 ok 18 - any_inet_ntop, 2607:f060:b008:feed::6 ok 19 - is_public_suffix, neg, sch.uk ok 20 - is_public_suffix, neg, google.com ok 21 - is_public_suffix, neg, www.tnpi.net ok 22 - is_public_suffix, neg, tnpi.net ok 23 - is_public_suffix, pos, net ok 24 - is_public_suffix, pos, test.sch.uk ok 25 - is_public_suffix, pos, co.uk ok 26 - is_public_suffix, neg, z ok 27 - is_public_suffix, neg, *.uk ok 28 - is_public_suffix, pos, com ok 29 - is_public_suffix, neg, a ok 30 - has_dns_rr, NS:fake.mail-dmarc.tnpi.net ok 31 - is_valid_ip, 0.0.0.0 ok 32 - is_valid_ip, 1.1.1.1 ok 33 - is_valid_ip, 255.255.255.255 ok 34 - is_valid_ip, 2607:f060:b008:feed::2 ok 35 - is_valid_ip, neg, 256.1.1.1 ok 36 - is_valid_ip, neg, a ok 37 - is_valid_ip, neg, 1.1.1.256 ok 38 - is_valid_domain, test.sch.uk ok 39 - is_valid_domain, example.com ok 40 - is_valid_domain, bbc.co.uk ok 41 - is_valid_domain, 3.am ok 42 - is_valid_domain, example.m ok 43 - is_valid_domain, bbc.co.k ok 44 - is_valid_domain, 3.a ok 45 - epoch_to_iso, 2024-09-18T14:19:17 ok 46 - get_prefix: /usr/local/, /opt/local/, /, ./ ok 47 - get_prefix(etc): /usr/local/etc, /opt/local/etc, /etc, ./etc ok 48 - get_prefix(share): /usr/local/share, /opt/local/share, /share, ./share ok 49 - get_sharefile: /tmp/I8W5CadIoe/auto/share/dist/Mail-DMARC/mail-dmarc.ini ok 50 - Public Suffix List cached ok 51 - Public Suffix List loaded ok 52 - Public Suffix List reloaded ok 53 - Public Suffix List reloaded true return ok 54 - Public Suffix List reloaded false return 1..54 ok t/04.PurePerl.t .............................. ok 1 - use Mail::DMARC::PurePerl; ok 2 - An object of class 'Mail::DMARC::PurePerl' isa 'Mail::DMARC::PurePerl' ok 3 - get_from_dom, example.com eq example.com ok 4 - get_from_dom, example.com eq example.com ok 5 - get_from_dom, example2.com eq example2.com ok 6 - get_from_dom, example.com eq example.com ok 7 - get_from_dom, example.com eq example.com ok 8 - get_from_dom, From: "Test 1.1.5", invalid header_from at t/04.PurePerl.t line 450. ok 9 - get_from_dom, example.com eq example.com ok 10 - get_from_dom, example.com eq example.com ok 11 - get_from_dom, example.com eq example.com ok 12 - get_from_dom, example.com eq example.com ok 13 - fetch_dmarc_record, non-exist ok 14 - fetch_dmarc_record ok 15 - fetch_dmarc_record, 1.2.4 TLD lookup not allowed ok 16 - get_organizational_domain, plus.google.com ok 17 - get_organizational_domain, tnpi.net ok 18 - get_organizational_domain, www.tnpi.net ok 19 - get_organizational_domain, bbc.co.uk ok 20 - get_organizational_domain, www.bbc.co.uk ok 21 - exists_in_dns, no-such-made-up-name-should-exist.com.uk.nonsense, 0 ok 22 - exists_in_dns, fake.mail-dmarc.tnpi.net, 1 ok 23 - exists_in_dns, tnpi.net, 1 ok 24 - spf, set header_from ok 25 - spf, set spf ok 26 - is_spf_aligned ok 27 - is_spf_aligned, strict ok 28 - spf, set spf ok 29 - spf alignment->r ok 30 - is_spf_aligned, relaxed ok 31 - is_spf_aligned, relaxed ok 32 - spf, set spf ok 33 - is_spf_aligned, neg ok 34 - dkim, set header_from ok 35 - dkim, setup ok 36 - is_dkim_aligned, strict ok 37 - dkim, set header_from ok 38 - is_dkim_aligned, relaxed ok 39 - dkim, set header_from ok 40 - is_dkim_aligned, miss ok 41 - dkim, no signatures ok 42 - is_dkim_aligned, empty ok 43 - dkim, setup ok 44 - dkim, set header_from ok 45 - is_dkim_aligned, relaxed ok 46 - dkim, set header_from ok 47 - is_dkim_aligned, miss ok 48 - is_aligned, both ok 49 - is_aligned, spf ok 50 - is_aligned, dkim ok 51 - is_aligned, none ok 52 - is_whitelisted, 127.0.0.3, trusted_forwarder ok 53 - is_whitelisted, 127.0.0.1, local_policy ok 54 - is_whitelisted, neg, 127.0.0.2 ok 55 - is_whitelisted, neg, 10.0.0.0 ok 56 - discover_policy ok 57 - discover_policy, deeply ok 58 - validate, one-shot, is_spf_aligned, yes ok 59 - validate, one-shot, is_dkim_aligned, no ok 60 - has_valid_reporting_uri, mailto:dmarc@example.com ok 61 - has_valid_reporting_uri, mailto:dmarc@example.com,http://example.com/dmarc ok 62 - has_valid_reporting_uri, ftp://dmarc.example.com,http://example.com/dmarc ok 63 - has_valid_reporting_uri, single filtered ok 64 - has_valid_reporting_uri, neg, ftp://ftp.example.com ok 65 - has_valid_reporting_uri, neg, gopher://www.example.com/dmarc ok 66 - has_valid_reporting_uri, neg, scp://secure.example.com ok 67 - has_valid_reporting_uri, neg, http://www.example.com/dmarc ok 68 - new policy ok 69 - new URI ok 70 - external_report, mailto:test@example.com for example.com ok 71 - new policy ok 72 - new URI ok 73 - external_report, mailto:test@silly.com for silly.com ok 74 - new policy ok 75 - new URI ok 76 - external_report, mailto:test@example.com for example.com.com ok 77 - new policy ok 78 - new URI ok 79 - external_report, mailto:test@silly.com for silly.com.com ok 80 - new policy ok 81 - verify_external_reporting, tnpi.net, theartfarm.com ok 82 - new policy ok 83 - verify_external_reporting, cadillac.net, theartfarm.com ok 84 - new policy ok 85 - verify_external_reporting, mail-dmarc.tnpi.net, theartfarm.com ok 86 - verify_external_reporting, override rua ok 87 - discover_policy ok 88 - result is a ref ok 89 - result=pass ok 90 - spf=pass ok 91 - disposition=none ok 92 - disposition changed to reject ok 93 - added reason ok 94 - added reason 2 ok 95 - save aggregate 1..95 ok t/06.Result.t ................................ ok 1 - use Mail::DMARC::PurePerl; ok 2 - use Mail::DMARC::Result; ok 3 - An object of class 'Mail::DMARC::Result' isa 'Mail::DMARC::Result' ok 4 - result, pass, strict, tnpi.net ok 5 - pass, relaxed, tnpi.net ok 6 - is_dkim_aligned, neg ok 7 - is_spf_aligned, neg ok 8 - is_aligned, neg ok 9 - result, fail, strict, tnpi.net ok 10 - is_dkim_aligned, neg ok 11 - is_spf_aligned, neg ok 12 - is_aligned, neg ok 13 - result, fail, strict, tnpi.net ok 14 - is_dkim_aligned, neg ok 15 - is_spf_aligned, neg ok 16 - is_aligned, neg ok 17 - result, fail, strict, tnpi.net ok 18 - is_dkim_aligned, neg ok 19 - is_spf_aligned, neg ok 20 - is_aligned, neg ok 21 - result, fail, strict, sampled out, tnpi.net ok 22 - result, none, nonexist ok 23 - result, fail, nonexist ok 24 - disposition, none ok 25 - disposition, reject ok 26 - disposition, quarantine ok 27 - disposition, NONE ok 28 - disposition, REJECT ok 29 - disposition, QUARANTINE ok 30 - disposition, neg, non, invalid disposition (non at t/06.Result.t line 247. ok 31 - disposition, neg, rejec, invalid disposition (rejec at t/06.Result.t line 247. ok 32 - disposition, neg, quarantin, invalid disposition (quarantin at t/06.Result.t line 247. ok 33 - disposition, neg, NON, invalid disposition (NON at t/06.Result.t line 247. ok 34 - disposition, neg, REJEC, invalid disposition (REJEC at t/06.Result.t line 247. ok 35 - disposition, neg, QUARANTIN, invalid disposition (QUARANTIN at t/06.Result.t line 247. ok 36 - dkim, pass ok 37 - dkim, fail ok 38 - dkim, PASS ok 39 - dkim, FAIL ok 40 - dkim, neg, pas, invalid dkim at t/06.Result.t line 305. ok 41 - dkim, neg, fai, invalid dkim at t/06.Result.t line 305. ok 42 - dkim, neg, PAS, invalid dkim at t/06.Result.t line 305. ok 43 - dkim, neg, FAI, invalid dkim at t/06.Result.t line 305. ok 44 - dkim_align, strict ok 45 - dkim_align, relaxed ok 46 - dkim_align, STRICT ok 47 - dkim_align, RELAXED ok 48 - dkim_align, neg, stric, invalid dkim_align at t/06.Result.t line 321. ok 49 - dkim_align, neg, relaxe, invalid dkim_align at t/06.Result.t line 321. ok 50 - dkim_align, neg, STRIC, invalid dkim_align at t/06.Result.t line 321. ok 51 - dkim_align, neg, RELAXE, invalid dkim_align at t/06.Result.t line 321. ok 52 - spf, pass ok 53 - spf, fail ok 54 - spf, PASS ok 55 - spf, FAIL ok 56 - spf, neg, pas, invalid spf at t/06.Result.t line 305. ok 57 - spf, neg, fai, invalid spf at t/06.Result.t line 305. ok 58 - spf, neg, PAS, invalid spf at t/06.Result.t line 305. ok 59 - spf, neg, FAI, invalid spf at t/06.Result.t line 305. ok 60 - result, pass ok 61 - result, fail ok 62 - result, PASS ok 63 - result, FAIL ok 64 - result, neg, pas, invalid result at t/06.Result.t line 305. ok 65 - result, neg, fai, invalid result at t/06.Result.t line 305. ok 66 - result, neg, PAS, invalid result at t/06.Result.t line 305. ok 67 - result, neg, FAI, invalid result at t/06.Result.t line 305. ok 68 - reason type: forwarded ok 69 - reason type: sampled_out ok 70 - reason type: trusted_forwarder ok 71 - reason type: mailing_list ok 72 - reason type: local_policy ok 73 - reason type: other ok 74 - reason, any, invalid type at lib/Mail/DMARC/Result.pm line 82. ok 75 - reason, reason, invalid type at lib/Mail/DMARC/Result.pm line 82. ok 76 - reason, not, invalid type at lib/Mail/DMARC/Result.pm line 82. ok 77 - reason, in, invalid type at lib/Mail/DMARC/Result.pm line 82. ok 78 - reason, above, invalid type at lib/Mail/DMARC/Result.pm line 82. ok 79 - reason, list, invalid type at lib/Mail/DMARC/Result.pm line 82. ok 80 - dkim_meta 1..80 ok t/09.HTTP.t .................................. ok 1 - use Mail::DMARC::HTTP; ok 2 - An object of class 'Mail::DMARC::HTTP' isa 'Mail::DMARC::HTTP' Content-Type: application/json; charset=ISO-8859-1 {"err":"missing POST data"} ok 3 - serve_validator, missing POST data Content-Type: application/json; charset=ISO-8859-1 {"err":"'false' expected, at character offset 0 (before \"foo\") at lib/Mail/DMARC/HTTP.pm line 99.\n"} ok 4 - serve_validator, invalid JSON Content-Type: application/json; charset=ISO-8859-1 {"spf":"","result":"fail","disposition":"none","dkim":"","reason":[{"comment":"no header_from","type":"other"}]} ok 5 - serve_validator, missing header_from Content-Type: application/json; charset=ISO-8859-1 {"spf":"","result":"fail","published":{"p":"reject","pct":"100","rua":"mailto:dmarc-feedback@theartfarm.com","domain":"tnpi.net","ruf":"mailto:dmarc-feedback@theartfarm.com","v":"DMARC1"},"dkim":"fail","disposition":"reject","reason":[]} ok 6 - serve_validator, missing SPF ok 7 - serve_validator, missing DKIM Content-Type: application/json; charset=ISO-8859-1 {"reason":[],"dkim":"fail","disposition":"none","spf_align":"strict","result":"pass","published":{"rua":"mailto:dmarc-feedback@theartfarm.com","pct":"100","p":"reject","domain":"tnpi.net","v":"DMARC1","ruf":"mailto:dmarc-feedback@theartfarm.com"},"spf":"pass"} ok 8 - serve_validator, pass SPF ok 9 - serve_validator, missing DKIM Content-Type: application/json; charset=ISO-8859-1 {"dkim_meta":{"selector":"mar2013","identity":"","domain":"tnpi.net"},"published":{"p":"reject","ruf":"mailto:dmarc-feedback@theartfarm.com","pct":"100","rua":"mailto:dmarc-feedback@theartfarm.com","v":"DMARC1","domain":"tnpi.net"},"result":"pass","spf":"","dkim_align":"strict","reason":[],"disposition":"none","dkim":"pass"} ok 10 - serve_validator, missing SPF ok 11 - serve_validator, pass DKIM 1..11 ok t/10.Report.t ................................ ok 1 - use Mail::DMARC::PurePerl; ok 2 - An object of class 'Mail::DMARC::PurePerl' isa 'Mail::DMARC::PurePerl' ok 3 - An object of class 'Mail::DMARC::Report' isa 'Mail::DMARC::Report' ok 4 - An object of class 'Mail::DMARC::Report::Send' isa 'Mail::DMARC::Report::Send' ok 5 - An object of class 'Mail::DMARC::Report::Store' isa 'Mail::DMARC::Report::Store' ok 6 - An object of class 'Mail::DMARC::Report::Receive' isa 'Mail::DMARC::Report::Receive' ok 7 - compress_report ok 8 - compress_report, extracts 1..8 ok t/11.Report.Store.t .......................... ok 1 - use Mail::DMARC::PurePerl; ok 2 - An object of class 'Mail::DMARC::PurePerl' isa 'Mail::DMARC::PurePerl' ok 3 - An object of class 'Mail::DMARC::Report' isa 'Mail::DMARC::Report' ok 4 - An object of class 'Mail::DMARC::Report::Store' isa 'Mail::DMARC::Report::Store' ok 5 - selected backend loaded ok 6 - header_from ok 7 - envelope_to ok 8 - source_ip ok 9 - pub ok 10 - result, pass, strict, tnpi.net ok 11 - reason 1..11 ok t/12.Report.Store.SQL.t ...................... ok 1 - use Mail::DMARC::Report::Store::SQL; ok 2 - An object of class 'Mail::DMARC::Report::Store::SQL' isa 'Mail::DMARC::Report::Store::SQL' ok 3 - db_connect: SQLite ok 4 - An object of class 'DBIx::Simple' isa 'DBIx::Simple' ok 5 - An object of class 'Mail::DMARC::Report::Store::SQL::Grammars::SQLite' isa 'Mail::DMARC::Report::Store::SQL::Grammars::SQLite' ok 6 - query_insert, report, 1 ok 7 - delete_report, report, 1 ok 8 - query_insert, report, neg: query called by main, 484 # INSERT INTO reporting (domain, begin, end) VALUES (??) # example.com, 1726659158, 1726755558 at t/12.Report.Store.SQL.t line 484. ok 9 - query_insert, report, neg: query called by main, 492 # INSERT INTO report (domin, begin, end) VALUES (??) # aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, yellow, 1726755558 at t/12.Report.Store.SQL.t line 492. ok 10 - STDERR has expected warning (SQLite) ok 11 - replace, negative, DBD::SQLite::db prepare failed: no such table: rep0rt at lib/Mail/DMARC/Report/Store/SQL.pm line 640. ok 12 - delete, negative, DBD::SQLite::db prepare failed: no such table: repor at lib/Mail/DMARC/Report/Store/SQL.pm line 647. ok 13 - query ok 14 - query, select, report ok 15 - query, select, author ok 16 - query, select, domain ok 17 - query, select, report_record ok 18 - query, select, negative, query called by main, 575 # SELECT id FROM rep0rt LIMIT 1 # no such table: rep0rt at t/12.Report.Store.SQL.t line 575. ok 19 - meta, email, set ok 20 - meta, org_name, set ok 21 - meta, begin, set ok 22 - meta, end, set ok 23 - policy, rua, set ok 24 - policy, domain, set ok 25 - policy published, set ok 26 - get_report_id, 2 ok 27 - any_inet_pton, 1.1.1.1 ok 28 - any_inet_ntop, 1.1.1.1 ok 29 - any_inet_ntop, round_trip, 1.1.1.1 ok 30 - records_retrieved ok 31 - any_inet_ntop, round_trip, 1.1.1.1 ok 32 - any_inet_pton, 10.0.1.1 ok 33 - any_inet_ntop, 10.0.1.1 ok 34 - any_inet_ntop, round_trip, 10.0.1.1 ok 35 - records_retrieved ok 36 - any_inet_ntop, round_trip, 10.0.1.1 ok 37 - any_inet_pton, 2002:4c79:6240::1610:9fff:fee5:fb5 ok 38 - any_inet_ntop, 2002:4c79:6240::1610:9fff:fee5:fb5 ok 39 - any_inet_ntop, round_trip, zero-pad, 2002:4c79:6240::1610:9fff:fee5:fb5 ok 40 - records_retrieved ok 41 - any_inet_ntop, round_trip, zero-pad, 2002:4c79:6240::1610:9fff:fee5:fb5 ok 42 - any_inet_pton, 2607:f060:b008:feed::6 ok 43 - any_inet_ntop, 2607:f060:b008:feed::6 ok 44 - any_inet_ntop, round_trip, 2607:f060:b008:feed::6 ok 45 - records_retrieved ok 46 - any_inet_ntop, round_trip, 2607:f060:b008:feed::6 ok 47 - insert_policy_published ok 48 - get_report_policy_published ok 49 - get_report_policy_published, deeply ok 50 - insert_rr, 5 ok 51 - at_test_insert_rr_spf with 5 ok 52 - insert_rr_spf ok 53 - insert_rr_spf ok 54 - insert_rr_spf ok 55 - at_test_insert_rr_dkim with 5 ok 56 - insert_rr_dkim ok 57 - insert_rr_dkim ok 58 - insert_rr_dkim ok 59 - at_test_insert_rr_reason with 5 ok 60 - insert_rr_reason, forwarded ok 61 - insert_rr_reason, local_policy ok 62 - insert_rr_reason, mailing_list ok 63 - insert_rr_reason, other ok 64 - insert_rr_reason, sampled_out ok 65 - insert_rr_reason, trusted_forwarder ok 66 - retrieve, 1 ok 67 - retrieve, begin, 1 ok 68 - retrieve, author, 1 ok 69 - retrieve, from_domain, 1 ok 70 - retrieve, rid, 1 ok 71 - retrieve, end, 1 ok 72 - retrieve_todo ok 73 - meta, email, set ok 74 - meta, begin, set ok 75 - meta, org_name, set ok 76 - meta, end, set ok 77 - policy, rua, set ok 78 - policy, domain, set ok 79 - policy published, set ok 80 - get_report_id, 3 ok 81 - meta, end, set ok 82 - meta, org_name, set ok 83 - meta, begin, set ok 84 - meta, email, set ok 85 - policy, rua, set ok 86 - policy, domain, set ok 87 - policy published, set ok 88 - get_report_id, 4 ok 89 - meta, email, set ok 90 - meta, begin, set ok 91 - meta, org_name, set ok 92 - meta, end, set ok 93 - policy, rua, set ok 94 - policy, domain, set ok 95 - policy published, set ok 96 - get_report_id, 5 ok 97 - get_report, no limits, 4 ok 98 - skipping author tests ok 99 - get_row_reason ok 100 - get_row_spf ok 101 - get_row_dkim ok 102 - populate_agg_metadata ok 103 - populate_agg_metadata, deeply ok 104 - populate_agg_records ok 105 - populate_agg_records, deeply ok 106 - Skipping mysql, DBD::mysql not available ok 107 - Skipping Pg, DBD::Pg not available 1..107 ok t/13.Report.Aggregate.t ...................... ok 1 - use Mail::DMARC::Report::Aggregate; ok 2 - An object of class 'Mail::DMARC::Report::Aggregate' isa 'Mail::DMARC::Report::Aggregate' ok 3 - An object of class 'Mail::DMARC::Report::Aggregate::Metadata' isa 'Mail::DMARC::Report::Aggregate::Metadata' ok 4 - Mail::DMARC::Report::Aggregate::Record, empty ok 5 - record, test ok 6 - record, deeply ok 7 - record, empty, again ok 8 - record, deeply, multiple ok 9 - policy_published, empty ok 10 - policy_published, default ok 11 - metadata, as_xml ok 12 - policy_published, as_xml ok 13 - record, as_xml ok 14 - as_xml 1..14 ok t/14.Report.Aggregate.Metadata.t ............. ok 1 - use Mail::DMARC::Report::Aggregate; ok 2 - An object of class 'Mail::DMARC::Report::Aggregate' isa 'Mail::DMARC::Report::Aggregate' ok 3 - An object of class 'Mail::DMARC::Report::Aggregate::Metadata' isa 'Mail::DMARC::Report::Aggregate::Metadata' ok 4 - org_name, set ok 5 - org_name, get ok 6 - test_email, set ok 7 - test_email, get ok 8 - extra_contact_info, set ok 9 - extra_contact_info, get ok 10 - report_id, set ok 11 - report_id, get ok 12 - date_range, set ok 13 - date_range, get ok 14 - date_range, get start ok 15 - date_range, get end ok 16 - begin, set ok 17 - date_range, get start ok 18 - end, set ok 19 - date_range, get end ok 20 - error, error \#1 for test ok 21 - error, error \#2 for testing ok 22 - error, deeply ok 23 - uuid, set ok 24 - uuid, get ok 25 - as_xml 1..25 ok t/15.Report.Aggregate.Record.t ............... ok 1 - use Mail::DMARC::Report::Aggregate::Record; ok 2 - An object of class 'Mail::DMARC::Report::Aggregate::Record' isa 'Mail::DMARC::Report::Aggregate::Record' ok 3 - envelope_to, set ok 4 - envelope_to, get ok 5 - header_from, set ok 6 - header_from, get ok 7 - envelope_from, set ok 8 - envelope_from, get ok 9 - envelope_to, get ok 10 - header_from, get ok 11 - envelope_from, get ok 12 - auth_results, empty ok 13 - auth_results, one SPF ok 14 - auth_results, two SPF ok 15 - auth_results, two SPF, one DKIM ok 16 - auth_results, two SPF, two DKIM ok 17 - row, empty ok 18 - row, source_ip ok 19 - row, count ok 20 - row, policy_evaluated 1..20 ok t/16.Report.Aggregate.Record.Auth_Results.t .. ok 1 - use Mail::DMARC::Report::Aggregate::Record::Auth_Results; ok 2 - An object of class 'Mail::DMARC::Report::Aggregate::Record::Auth_Results' isa 'Mail::DMARC::Report::Aggregate::Record::Auth_Results' ok 3 - spf, empty ok 4 - spf, hash ok 5 - spf, hashref ok 6 - spf, arrayref of hashref ok 7 - dkim ok 8 - dkim, as hash ok 9 - dkim, as hashref ok 10 - dkim, as hashref again ok 11 - dkim, as arrayref of hashrefs 1..11 ok t/17.Report.Aggregate.Schema.t ............... skipped: XML::Validator::Schema not available t/20.Report.URI.t ............................ ok 1 - use Mail::DMARC::Report::URI; ok 2 - An object of class 'Mail::DMARC::Report::URI' isa 'Mail::DMARC::Report::URI' ok 3 - get_size_limit, 500 ok 4 - get_size_limit, 20480 ok 5 - get_size_limit, 1073741824 ok 6 - get_size_limit, 5242880 ok 7 - get_size_limit, 53477376 ok 8 - get_size_limit, 10485760 ok 9 - parse, http://www.example.com/dmarc-feedback ok 10 - parse, count 1 ok 11 - parse, https://www.example.com/dmarc-feedback ok 12 - parse, count 1 ok 13 - parse, mailto:dmarc@example.com ok 14 - parse, count 1 ok 15 - parse, mailto:dmarc-feedback@example.com,mailto:tld-test@thirdparty.example.net!10m ok 16 - parse, count 2 1..16 ok t/21.Report.Send.t ........................... ok 1 - use Mail::DMARC::Report::Send; ok 2 - An object of class 'Mail::DMARC::Report::Send' isa 'Mail::DMARC::Report::Send' ok 3 - An object of class 'Mail::DMARC::Report::Send::SMTP' isa 'Mail::DMARC::Report::Send::SMTP' ok 4 - An object of class 'Mail::DMARC::Report::Send::HTTP' isa 'Mail::DMARC::Report::Send::HTTP' ok 5 - too_big_report 1..5 ok t/22.Report.Send.SMTP.t ...................... ok 1 - use Mail::DMARC::Report::Send::SMTP; ok 2 - An object of class 'Mail::DMARC::Report::Send::SMTP' isa 'Mail::DMARC::Report::Send::SMTP' ok 3 - get_subject, Report Domain: they.com Submitter: example-test.com Report-ID:2024.09.18.2013.06.01.6789 getting MX for tnpi.net ok 4 - get_domain_mx, tnpi.net ok 5 - get_domain_mx, tnpi.net, deeply getting MX for tnpi.net ok 6 - get_smtp_hosts, tnpi.net ok 7 - human_summary ok 8 - get_filename, example-test.com!they.com!1726659160!1726669060!2013.06.01.6789.xml ok 9 - get_timestamp_rfc2822, Wed, 18 Sep 2024 14:19:20 +0000 ok 10 - get_helo_hostname, netdns ok 11 - assemble_message_object 1..11 ok t/23.Report.Send.HTTP.t ...................... ok 1 - use Mail::DMARC::Report::Send::HTTP; ok 2 - An object of class 'Mail::DMARC::Report::Send::HTTP' isa 'Mail::DMARC::Report::Send::HTTP' 1..2 ok t/25.Report.Receive.t ........................ ok 1 - use Mail::DMARC::Report::Receive; ok 2 - An object of class 'Mail::DMARC::Report::Receive' isa 'Mail::DMARC::Report::Receive' subject: report domain: timbersmart.com submitter: google.com report-id: 6022178961730607282 ok 3 - get_submitter_from_subject, google.com subject: report domain: timbersmart.com submitter: yahoo.com report-id: <1368868092.438744> ok 4 - get_submitter_from_subject, yahoo.com subject: report domain: lynboyer.com submitter: hotmail.com report-id: <02c539af4f164aeda7dd1e7aaba9751b@hotmail.com> ok 5 - get_submitter_from_subject, hotmail.com subject: report domain: tnpi.net submitter: ivenue.com report-id: tnpi.net-1366977854@ivenue.com ok 6 - get_submitter_from_subject, ivenue.com subject: report domain:theartfarm.com submitter:aol.com report-id:theartfarm.com_1366084800 ok 7 - get_submitter_from_subject, aol.com ok 8 # skip Net::IMAP::Simple not installed and # imap not configured in mail-dmarc.ini 1..8 ok t/26.Report.Sender.t ......................... # Subtest: method ok 1 - 1 Email sent ok 2 - Sent to correct address ok 3 - Human readable description ok 4 - Human readable summary ok 5 - Gzip attachment 1..5 ok 1 - method # Subtest: object ok 1 - 1 Email sent ok 2 - Sent to correct address ok 3 - Human readable description ok 4 - Human readable summary ok 5 - Gzip attachment 1..5 ok 2 - object # Subtest: fail ok 1 - Email send fails 1..1 ok 3 - fail # Subtest: fallback ok 1 - 1 Email sent ok 2 - Sent to correct address ok 3 - Human readable description ok 4 - Human readable summary ok 5 - Gzip attachment 1..5 ok 4 - fallback 1..4 ok All tests successful. Files=20, Tests=716, 5 wallclock secs ( 0.07 usr 0.04 sys + 3.33 cusr 1.35 csys = 4.79 CPU) Result: PASS