From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 291091FC11 for ; Tue, 9 Feb 2021 08:09:39 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 11/11] tests|lei: fixes for TEST_RUN_MODE=0 and lei oneshot Date: Tue, 9 Feb 2021 07:09:37 -0100 Message-Id: <20210209080937.4678-12-e@80x24.org> In-Reply-To: <20210209080937.4678-1-e@80x24.org> References: <20210209080937.4678-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: 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. --- lib/PublicInbox/IPC.pm | 2 ++ lib/PublicInbox/LEI.pm | 7 +++++-- lib/PublicInbox/TestCommon.pm | 3 ++- t/lei-mirror.t | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) 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');