]> Sergey Matveev's repositories - public-inbox.git/blobdiff - t/qspawn.t
v2writable: move git->cleanup to the correct place
[public-inbox.git] / t / qspawn.t
index 170e4d7f4e8d4e66276846d1720402df1c562a3b..58c6febb544738e1b99465e8ba74037a812f0681 100644 (file)
@@ -1,8 +1,22 @@
-# Copyright (C) 2016-2018 all contributors <meta@public-inbox.org>
+# Copyright (C) 2016-2019 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 use Test::More;
 use_ok 'PublicInbox::Qspawn';
 
+{
+       my $cmd = [qw(sh -c), 'echo >&2 err; echo out'];
+       my $qsp = PublicInbox::Qspawn->new($cmd, {}, { 2 => 1 });
+       my $res;
+       $qsp->psgi_qx({}, undef, sub { $res = ${$_[0]} });
+       is($res, "err\nout\n", 'captured stderr and stdout');
+}
+
+sub finish_err ($) {
+       my ($qsp) = @_;
+       $qsp->finish;
+       $qsp->{err};
+}
+
 my $limiter = PublicInbox::Qspawn::Limiter->new(1);
 {
        my $x = PublicInbox::Qspawn->new([qw(true)]);
@@ -10,7 +24,7 @@ my $limiter = PublicInbox::Qspawn::Limiter->new(1);
        $x->start($limiter, sub {
                my ($rpipe) = @_;
                is(0, sysread($rpipe, my $buf, 1), 'read zero bytes');
-               ok(!$x->finish, 'no error on finish');
+               ok(!finish_err($x), 'no error on finish');
                $run = 1;
        });
        is($run, 1, 'callback ran alright');
@@ -22,8 +36,7 @@ my $limiter = PublicInbox::Qspawn::Limiter->new(1);
        $x->start($limiter, sub {
                my ($rpipe) = @_;
                is(0, sysread($rpipe, my $buf, 1), 'read zero bytes from false');
-               my $err = $x->finish;
-               is($err, 256, 'error on finish');
+               ok(finish_err($x), 'error on finish');
                $run = 1;
        });
        is($run, 1, 'callback ran alright');
@@ -49,11 +62,11 @@ foreach my $cmd ([qw(sleep 1)], [qw(sh -c), 'sleep 1; false']) {
        } (0..2);
 
        if ($cmd->[-1] =~ /false\z/) {
-               ok($s->finish, 'got error on false after sleep');
+               ok(finish_err($s), 'got error on false after sleep');
        } else {
-               ok(!$s->finish, 'no error on sleep');
+               ok(!finish_err($s), 'no error on sleep');
        }
-       ok(!$_->[0]->finish, "true $_->[1] succeeded") foreach @t;
+       ok(!finish_err($_->[0]), "true $_->[1] succeeded") foreach @t;
        is_deeply([qw(sleep 0 1 2)], \@run, 'ran in order');
 }