X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FTestCommon.pm;h=e9efbac71264fe47b36f87c5bb9252c26c36aff1;hb=2e59372029f89ae0e9c68384d6bda0ad50704730;hp=d6d1e9394937c1ea652ccb06b52b41d82cc06470;hpb=033f628b52ebacf4a7bf8795084ba5ec498004bf;p=public-inbox.git
diff --git a/lib/PublicInbox/TestCommon.pm b/lib/PublicInbox/TestCommon.pm
index d6d1e939..e9efbac7 100644
--- a/lib/PublicInbox/TestCommon.pm
+++ b/lib/PublicInbox/TestCommon.pm
@@ -1,4 +1,4 @@
-# Copyright (C) 2015-2019 all contributors
+# Copyright (C) 2015-2020 all contributors
# License: AGPL-3.0+
# internal APIs used only for tests
@@ -119,11 +119,11 @@ sub _undo_redirects ($) {
}
}
-# $opt->{run_mode} (or $ENV{TEST_RUN_MODE}) allows chosing between
+# $opt->{run_mode} (or $ENV{TEST_RUN_MODE}) allows choosing between
# three ways to spawn our own short-lived Perl scripts for testing:
#
# 0 - (fork|vfork) + execve, the most realistic but slowest
-# 1 - preloading and running in a forked subprocess (fast)
+# 1 - (not currently implemented)
# 2 - preloading and running in current process (slightly faster than 1)
#
# 2 is not compatible with scripts which use "exit" (which we'll try to
@@ -215,7 +215,6 @@ sub run_script ($;$$) {
require PublicInbox::Spawn;
my $cmd = [ key2script($key), @argv ];
my $pid = PublicInbox::Spawn::spawn($cmd, $env, $spawn_opt);
- defined($pid) or die "spawn: $!";
if (defined $pid) {
my $r = waitpid($pid, 0);
defined($r) or die "waitpid: $!";
@@ -248,7 +247,7 @@ sub wait_for_tail () { sleep(2) }
sub start_script {
my ($cmd, $env, $opt) = @_;
my ($key, @argv) = @$cmd;
- my $run_mode = $ENV{TEST_RUN_MODE} // $opt->{run_mode} // 1;
+ my $run_mode = $ENV{TEST_RUN_MODE} // $opt->{run_mode} // 2;
my $sub = $run_mode == 0 ? undef : key2sub($key);
my $tail_pid;
if (my $tail_cmd = $ENV{TAIL}) {
@@ -320,8 +319,9 @@ sub kill {
}
sub join {
- my ($self) = @_;
+ my ($self, $sig) = @_;
my $pid = delete $self->{pid} or return;
+ CORE::kill($sig, $pid) if defined $sig;
my $ret = waitpid($pid, 0);
defined($ret) or die "waitpid($pid): $!";
$ret == $pid or die "waitpid($pid) != $ret";
@@ -334,8 +334,7 @@ sub DESTROY {
PublicInbox::TestCommon::wait_for_tail();
CORE::kill('TERM', $tail);
}
- my $pid = delete $self->{pid} or return;
- CORE::kill('TERM', $pid);
+ $self->join('TERM');
}
1;