aboutsummaryrefslogtreecommitdiff
path: root/t/tests
diff options
context:
space:
mode:
Diffstat (limited to 't/tests')
-rw-r--r--t/tests/sietima/role/nospoof.t41
-rw-r--r--t/tests/sietima/role/nospoof/dmarc.t69
2 files changed, 110 insertions, 0 deletions
diff --git a/t/tests/sietima/role/nospoof.t b/t/tests/sietima/role/nospoof.t
new file mode 100644
index 0000000..b0ec622
--- /dev/null
+++ b/t/tests/sietima/role/nospoof.t
@@ -0,0 +1,41 @@
+#!perl
+use lib 't/lib';
+use Test::Sietima;
+
+my $s = make_sietima(
+ with_traits => ['NoSpoof'],
+ subscribers => [
+ 'one@users.example.com',
+ 'two@users.example.com',
+ ],
+);
+
+my $return_path = $s->return_path;
+my $return_path_address = $return_path->address;
+my $return_path_host = $return_path->host;
+
+test_sending(
+ sietima => $s,
+ mail => {
+ from => 'a user <one@users.example.com>',
+ },
+ mails => [
+ object {
+ call [ header_str => 'from' ] => qq{"a user" <$return_path_address>};
+ },
+ ],
+);
+
+test_sending(
+ sietima => $s,
+ mail => {
+ from => qq{a user <one\@$return_path_host>},
+ },
+ mails => [
+ object {
+ call [ header_str => 'from' ] => qq{"a user" <one\@$return_path_host>};
+ },
+ ],
+);
+
+done_testing;
diff --git a/t/tests/sietima/role/nospoof/dmarc.t b/t/tests/sietima/role/nospoof/dmarc.t
new file mode 100644
index 0000000..620268b
--- /dev/null
+++ b/t/tests/sietima/role/nospoof/dmarc.t
@@ -0,0 +1,69 @@
+#!perl
+use lib 't/lib';
+use Test::Sietima;
+use Net::DNS::Resolver::Mock;
+
+my $resolver = Net::DNS::Resolver::Mock->new();
+
+my $s = make_sietima(
+ with_traits => ['NoSpoof::DMARC'],
+ subscribers => [
+ 'one@users.example.com',
+ ],
+ dmarc_resolver => $resolver,
+);
+
+sub test_rewriting($from) {
+ subtest "$from should rewrite" => sub {
+ test_sending(
+ sietima => $s,
+ mail => {
+ from => "a user <$from>",
+ },
+ mails => [
+ object {
+ call [ header_str => 'from' ] => '"a user" <'.$s->return_path->address.'>';
+ call [ header_str => 'original-from' ] => qq{"a user" <$from>};
+ },
+ ],
+ );
+ }
+}
+
+sub test_no_rewriting($from) {
+ subtest "$from should not rewrite" => sub {
+ test_sending(
+ sietima => $s,
+ mail => {
+ from => "a user <$from>",
+ },
+ mails => [
+ object {
+ call [ header_str => 'sender' ] => $s->return_path->address;
+ call [ header_str => 'from' ] => qq{"a user" <$from>};
+ },
+ ],
+ );
+ }
+}
+
+$resolver->zonefile_parse(<<'EOZ');
+_dmarc.none-none-pol.com 3600 TXT "v=DMARC1; p=none; sp=none; rua=mailto:foo@example.com"
+_dmarc.none-q-pol.com 3600 TXT "v=DMARC1; p=none; sp=quarantine; rua=mailto:foo@example.com"
+_dmarc.q-q-pol.com 3600 TXT "v=DMARC1; p=quarantine; sp=quarantine; rua=mailto:foo@example.com"
+EOZ
+
+test_no_rewriting 'foo@none-none-pol.com';
+test_no_rewriting 'foo@sub.none-none-pol.com';
+
+test_no_rewriting 'foo@none-q-pol.com';
+test_rewriting 'foo@sub.none-q-pol.com';
+
+test_rewriting 'foo@q-q-pol.com';
+test_rewriting 'foo@sub.q-q-pol.com';
+
+test_no_rewriting 'foo@example.com';
+
+test_no_rewriting 'foo@' . $s->post_address->host;
+
+done_testing;