X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=xt%2Flei-sigpipe.t;h=44020badd4e4b7e94b64e002a4955ab1971c8ed1;hb=48a3de066689174f65d5e12ebaff8f03f97942fb;hp=4d35bbb37e9381560d991eadd3fff548e4a91e80;hpb=39d44555e3f04c97e98c7f5d3538bbba6a19656b;p=public-inbox.git diff --git a/xt/lei-sigpipe.t b/xt/lei-sigpipe.t index 4d35bbb3..44020bad 100644 --- a/xt/lei-sigpipe.t +++ b/xt/lei-sigpipe.t @@ -11,22 +11,48 @@ require_mods(qw(json DBD::SQLite Search::Xapian)); my $do_test = sub { my $env = shift // {}; - pipe(my ($r, $w)) or BAIL_OUT $!; - open my $err, '+>', undef or BAIL_OUT $!; - my $opt = { run_mode => 0, 1 => $w, 2 => $err }; - my $tp = start_script([qw(lei q -t), 'bytes:1..'], $env, $opt); - close $w; - sysread($r, my $buf, 1); - close $r; # trigger SIGPIPE - $tp->join; - ok(WIFSIGNALED($?), 'signaled'); - is(WTERMSIG($?), SIGPIPE, 'got SIGPIPE'); - seek($err, 0, 0); - my @err = grep(!m{mkdir /dev/null\b}, <$err>); - is_deeply(\@err, [], 'no errors'); + for my $out ([], [qw(-f mboxcl2)]) { + pipe(my ($r, $w)) or BAIL_OUT $!; + open my $err, '+>', undef or BAIL_OUT $!; + my $opt = { run_mode => 0, 1 => $w, 2 => $err }; + my $cmd = [qw(lei q -q -t), @$out, 'z:1..']; + my $tp = start_script($cmd, $env, $opt); + close $w; + sysread($r, my $buf, 1); + close $r; # trigger SIGPIPE + $tp->join; + ok(WIFSIGNALED($?), "signaled @$out"); + is(WTERMSIG($?), SIGPIPE, "got SIGPIPE @$out"); + seek($err, 0, 0); + my @err = grep(!m{mkdir /dev/null\b}, <$err>); + is_deeply(\@err, [], "no errors @$out"); + } }; -$do_test->(); -$do_test->({XDG_RUNTIME_DIR => '/dev/null'}); +my ($tmp, $for_destroy) = tmpdir(); +my $pid; +my $opt = { run_mode => 0, 1 => \(my $out = '') }; +if (run_script([qw(lei daemon-pid)], undef, $opt)) { + chomp($pid = $out); + mkdir "$tmp/d" or BAIL_OUT $!; + local $ENV{TMPDIR} = "$tmp/d"; + $do_test->(); + $out = ''; + ok(run_script([qw(lei daemon-pid)], undef, $opt), 'daemon-pid again'); + chomp($out); + is($out, $pid, 'daemon-pid unchanged'); + ok(kill(0, $pid), 'daemon still running'); + $out = ''; +} +{ + mkdir "$tmp/1" or BAIL_OUT $!; + local $ENV{TMPDIR} = "$tmp/1"; + $do_test->({XDG_RUNTIME_DIR => '/dev/null'}); + is(unlink(glob("$tmp/1/*")), 0, 'nothing left over w/ oneshot'); +} + +# the one-shot test should be slow enough that the daemon has cleaned +# up in the background: +is_deeply([glob("$tmp/d/*")], [], 'nothing left over with daemon'); done_testing;