X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Frun.perl;h=cf80a8a17ecedc54304d5280744e5b5d857e4209;hb=4eee5af6011cc8cdefb66c9729952c7eff5c0b0b;hp=f6eb0ad31410a905f90dafd70dc2e33ec5544298;hpb=943be29048b2aa652b53929243bdda3d5464f980;p=public-inbox.git diff --git a/t/run.perl b/t/run.perl index f6eb0ad3..cf80a8a1 100755 --- a/t/run.perl +++ b/t/run.perl @@ -18,7 +18,7 @@ use PublicInbox::Spawn; use Getopt::Long qw(:config gnu_getopt no_ignore_case auto_abbrev); use Errno qw(EINTR); use Fcntl qw(:seek); -use POSIX qw(_POSIX_PIPE_BUF WNOHANG); +use POSIX qw(WNOHANG); use File::Temp (); my $jobs = 1; my $repeat = 1; @@ -53,10 +53,11 @@ key2sub($_) for @tests; # precache my ($for_destroy, $lei_env, $lei_daemon_pid, $owner_pid); -# I get ECONNRESET from lei on FreeBSD 11.3 even with -# kern.ipc.soacceptqueue=1073741823, so persistent lei-daemon in tests -# is Linux-only for now: -if ($^O eq 'linux' && !$ENV{TEST_LEI_DAEMON_PERSIST_DIR} && +# TEST_LEI_DAEMON_PERSIST is currently broken. I get ECONNRESET from +# lei even with high kern.ipc.soacceptqueue=1073741823 or SOMAXCONN, not +# sure why. Also, testing our internal inotify usage is unreliable +# because lei-daemon uses a single inotify FD for all clients. +if ($ENV{TEST_LEI_DAEMON_PERSIST} && !$ENV{TEST_LEI_DAEMON_PERSIST_DIR} && (PublicInbox::Spawn->can('recv_cmd4') || eval { require Socket::MsgHdr })) { $lei_env = {}; @@ -167,6 +168,7 @@ my $start_worker = sub { my $pid = fork // DIE "fork: $!"; if ($pid == 0) { close $wr if $wr; + $SIG{USR1} = undef; # undo parent $SIG{USR1} $worker = $$; while (1) { my $r = sysread($rd, my $buf, UINT_SIZE); @@ -181,7 +183,10 @@ my $start_worker = sub { $tb->reset; } kill 'USR1', $producer if !$eof; # sets $eof in $producer - DIE join('', map { "E: $_\n" } @err) if @err; + if (@err) { # write to run_log for $sigchld handler + syswrite($run_log, "$$ @err\n"); + DIE join('', map { "E: $_\n" } @err); + } exit(0); } else { $pids{$pid} = $j; @@ -198,7 +203,7 @@ for (my $i = $repeat; $i != 0; $i--) { pipe(my ($rd, $wr)) or DIE "pipe: $!"; # fill the queue before forking so children can start earlier - my $n = (_POSIX_PIPE_BUF / UINT_SIZE); + my $n = (POSIX::PIPE_BUF / UINT_SIZE); if ($n >= $#todo) { print $wr join('', map { pack('I', $_) } (0..$#todo)) or DIE; undef $wr; @@ -253,5 +258,8 @@ for (my $i = $repeat; $i != 0; $i--) { print $OLDOUT "1..".($repeat * scalar(@tests))."\n" if $repeat >= 0; if ($lei_env && $$ == $owner_pid) { my $opt = { 1 => $OLDOUT, 2 => $OLDERR }; + my $cur_daemon_pid; + run_script([qw(lei daemon-pid)], $lei_env, { 1 => \$cur_daemon_pid }); run_script([qw(lei daemon-kill)], $lei_env, $opt); + DIE "lei daemon restarted\n" if $cur_daemon_pid != $lei_daemon_pid; }