diff options
author | Eric Wong <e@80x24.org> | 2020-12-31 13:51:30 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-01-01 05:00:39 +0000 |
commit | 0c15c16c0e1b0c3724c46137f83e1962fad261f6 (patch) | |
tree | 7386afa7b98e5bb831f828e912c7bb6fe05ee3df /t | |
parent | a9622fb96df7d255d9ec11ca2bc676aaa98861cc (diff) | |
download | public-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.t | 29 |
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; |