about summary refs log tree commit homepage
path: root/t
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2020-12-31 13:51:30 +0000
committerEric Wong <e@80x24.org>2021-01-01 05:00:39 +0000
commit0c15c16c0e1b0c3724c46137f83e1962fad261f6 (patch)
tree7386afa7b98e5bb831f828e912c7bb6fe05ee3df /t
parenta9622fb96df7d255d9ec11ca2bc676aaa98861cc (diff)
downloadpublic-inbox-0c15c16c0e1b0c3724c46137f83e1962fad261f6.tar.gz
Users may wish to pipe output to "git am", "spamc",
or similar, so we need to support those cases and
not bail out on lseek(2) or ftruncate(2) failures.
Diffstat (limited to 't')
-rw-r--r--t/lei_to_mail.t29
1 files changed, 28 insertions, 1 deletions
diff --git a/t/lei_to_mail.t b/t/lei_to_mail.t
index 5be4e285..f3cc71ad 100644
--- a/t/lei_to_mail.t
+++ b/t/lei_to_mail.t
@@ -6,6 +6,7 @@ use v5.10.1;
 use Test::More;
 use PublicInbox::TestCommon;
 use PublicInbox::Eml;
+use Fcntl qw(SEEK_SET);
 require_mods(qw(DBD::SQLite));
 use_ok 'PublicInbox::LeiToMail';
 my $from = "Content-Length: 10\nSubject: x\n\nFrom hell\n";
@@ -120,15 +121,41 @@ for my $zsfx (qw(gz bz2 xz)) { # XXX should we support zst, zz, lzo, lzma?
 }
 
 unlink $fn or BAIL_OUT $!;
+require PublicInbox::MboxReader;
 if ('default deduplication uses content_hash') {
         my $wcb = PublicInbox::LeiToMail->write_cb("mboxo:$fn", $lei);
         $wcb->(\(my $x = $buf), 'deadbeef', []) for (1..2);
         undef $wcb; # undef to commit changes
         my $cmp = '';
         open my $fh, '<', $fn or BAIL_OUT $!;
-        require PublicInbox::MboxReader;
         PublicInbox::MboxReader->mboxo($fh, sub { $cmp .= shift->as_string });
         is($cmp, $buf, 'only one message written');
 }
 
+{ # stdout support
+        open my $tmp, '+>', undef or BAIL_OUT $!;
+        local $lei->{1} = $tmp;
+        my $wcb = PublicInbox::LeiToMail->write_cb("mboxrd:/dev/stdout", $lei);
+        $wcb->(\(my $x = $buf), 'deadbeef', []);
+        undef $wcb; # commit
+        seek($tmp, 0, SEEK_SET) or BAIL_OUT $!;
+        my $cmp = '';
+        PublicInbox::MboxReader->mboxrd($tmp, sub { $cmp .= shift->as_string });
+        is($cmp, $buf, 'message written to stdout');
+}
+
+SKIP: { # FIFO support
+        use PublicInbox::Spawn qw(popen_rd which);
+        use POSIX qw(mkfifo);
+        my $fn = "$tmpdir/fifo";
+        mkfifo($fn, 0600) or skip("mkfifo not supported: $!", 1);
+        my $cat = popen_rd([which('cat'), $fn]);
+        my $wcb = PublicInbox::LeiToMail->write_cb("mboxo:$fn", $lei);
+        $wcb->(\(my $x = $buf), 'deadbeef', []);
+        undef $wcb; # commit
+        my $cmp = '';
+        PublicInbox::MboxReader->mboxo($cat, sub { $cmp .= shift->as_string });
+        is($cmp, $buf, 'message written to FIFO');
+}
+
 done_testing;