X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fqspawn.t;h=4b9dc8a535debf7a10b4a8f79b95f4e20313c871;hb=4eee5af6011cc8cdefb66c9729952c7eff5c0b0b;hp=ab6e37586fb14bc6ed57bc19da3f2c0474f9564c;hpb=cf439203c31836e4c48f632f902aa58db6924972;p=public-inbox.git diff --git a/t/qspawn.t b/t/qspawn.t index ab6e3758..4b9dc8a5 100644 --- a/t/qspawn.t +++ b/t/qspawn.t @@ -1,5 +1,6 @@ -# Copyright (C) 2016-2019 all contributors +# Copyright (C) 2016-2021 all contributors # License: AGPL-3.0+ +use strict; use Test::More; use_ok 'PublicInbox::Qspawn'; @@ -9,6 +10,17 @@ use_ok 'PublicInbox::Qspawn'; my $res; $qsp->psgi_qx({}, undef, sub { $res = ${$_[0]} }); is($res, "err\nout\n", 'captured stderr and stdout'); + + $res = undef; + $qsp = PublicInbox::Qspawn->new($cmd, {}, { 2 => \*STDOUT }); + $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); @@ -16,9 +28,9 @@ my $limiter = PublicInbox::Qspawn::Limiter->new(1); my $x = PublicInbox::Qspawn->new([qw(true)]); my $run = 0; $x->start($limiter, sub { - my ($rpipe) = @_; - is(0, sysread($rpipe, my $buf, 1), 'read zero bytes'); - ok(!$x->finish, 'no error on finish'); + my ($self) = @_; + is(0, sysread($self->{rpipe}, my $buf, 1), 'read zero bytes'); + ok(!finish_err($self), 'no error on finish'); $run = 1; }); is($run, 1, 'callback ran alright'); @@ -28,10 +40,10 @@ my $limiter = PublicInbox::Qspawn::Limiter->new(1); my $x = PublicInbox::Qspawn->new([qw(false)]); my $run = 0; $x->start($limiter, sub { - my ($rpipe) = @_; - is(0, sysread($rpipe, my $buf, 1), 'read zero bytes from false'); - my $err = $x->finish; - ok($err, 'error on finish'); + my ($self) = @_; + is(0, sysread($self->{rpipe}, my $buf, 1), + 'read zero bytes from false'); + ok(finish_err($self), 'error on finish'); $run = 1; }); is($run, 1, 'callback ran alright'); @@ -41,27 +53,27 @@ foreach my $cmd ([qw(sleep 1)], [qw(sh -c), 'sleep 1; false']) { my $s = PublicInbox::Qspawn->new($cmd); my @run; $s->start($limiter, sub { - my ($rpipe) = @_; + my ($self) = @_; push @run, 'sleep'; - is(0, sysread($rpipe, my $buf, 1), 'read zero bytes'); + is(0, sysread($self->{rpipe}, my $buf, 1), 'read zero bytes'); }); my $n = 0; my @t = map { my $i = $n++; my $x = PublicInbox::Qspawn->new([qw(true)]); $x->start($limiter, sub { - my ($rpipe) = @_; + my ($self) = @_; push @run, $i; }); [$x, $i] } (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'); }