From: Eric Wong Date: Tue, 9 Feb 2021 08:09:37 +0000 (-0100) Subject: tests|lei: fixes for TEST_RUN_MODE=0 and lei oneshot X-Git-Tag: v1.7.0~1141 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=04b73104416e4734b3a01e47525119cac867065a;p=public-inbox.git tests|lei: fixes for TEST_RUN_MODE=0 and lei oneshot DESTROY callbacks can clobber $?, so we must take care to preserve it when exiting. We'll also try to make an effort to ensure better DESTROY ordering and delete as much as possible before x_it finishes. We also need to load PublicInbox::Config when setting up public inboxes. --- diff --git a/lib/PublicInbox/IPC.pm b/lib/PublicInbox/IPC.pm index 9331233a..efac4c4d 100644 --- a/lib/PublicInbox/IPC.pm +++ b/lib/PublicInbox/IPC.pm @@ -412,9 +412,11 @@ sub DESTROY { my ($self) = @_; my $ppid = $self->{-wq_ppid}; wq_kill($self) if $ppid && $ppid == $$; + my $err = $?; wq_close($self); wq_wait_old($self); ipc_worker_stop($self); + $? = $err if $err; } sub detect_nproc () { diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm index 5f265087..dd831c54 100644 --- a/lib/PublicInbox/LEI.pm +++ b/lib/PublicInbox/LEI.pm @@ -336,8 +336,9 @@ sub x_it ($$) { my $wq = delete $self->{$f} or next; $wq->DESTROY; } - # cleanup anything that has tempfiles - delete @$self{qw(ovv dedupe)}; + # cleanup anything that has tempfiles or open file handles + %PATH2CFG = (); + delete @$self{qw(ovv dedupe sto cfg)}; if (my $signum = ($code & 127)) { # usually SIGPIPE (13) $SIG{PIPE} = 'DEFAULT'; # $SIG{$signum} doesn't work kill $signum, $$; @@ -1072,8 +1073,10 @@ sub DESTROY { my ($self) = @_; $self->{1}->autoflush(1) if $self->{1}; stop_pager($self); + my $err = $?; my $oneshot_pids = delete $self->{"pid.$self.$$"} or return; waitpid($_, 0) for keys %$oneshot_pids; + $? = $err if $err; # preserve ->fail or ->x_it code } 1; diff --git a/lib/PublicInbox/TestCommon.pm b/lib/PublicInbox/TestCommon.pm index 53f13437..63d45ac3 100644 --- a/lib/PublicInbox/TestCommon.pm +++ b/lib/PublicInbox/TestCommon.pm @@ -541,7 +541,6 @@ sub setup_public_inboxes () { my $end = $lk->lock_for_scope; return @ret if -f $stamp; - require PublicInbox::InboxWritable; local $ENV{PI_CONFIG} = $pi_config; for my $V (1, 2) { run_script([qw(-init), "-V$V", "t$V", @@ -549,6 +548,8 @@ sub setup_public_inboxes () { "$test_home/t$V", "http://example.com/t$V", "t$V\@example.com" ]) or BAIL_OUT "init v$V"; } + require PublicInbox::Config; + require PublicInbox::InboxWritable; my $cfg = PublicInbox::Config->new; my $seen = 0; $cfg->each_inbox(sub { diff --git a/t/lei-mirror.t b/t/lei-mirror.t index e3707979..cbe300da 100644 --- a/t/lei-mirror.t +++ b/t/lei-mirror.t @@ -27,7 +27,7 @@ test_lei({ tmpdir => $tmpdir }, sub { like($lei_out, qr!\Q$t2\E!, 't2 added to ls-externals'); ok(!$lei->('add-external', $t2, '--mirror', "$http/t2/"), - '--mirror fails if reused'); + '--mirror fails if reused') or diag "$lei_err.$lei_out = $?"; ok($lei->('ls-external'), 'ls-external'); like($lei_out, qr!\Q$t2\E!, 'still in ls-externals');