]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei import: force store, improve test diagnostics
authorEric Wong <e@80x24.org>
Thu, 25 Mar 2021 04:20:24 +0000 (06:20 +0200)
committerEric Wong <e@80x24.org>
Thu, 25 Mar 2021 17:59:03 +0000 (17:59 +0000)
"lei import" should never be without a {sto}, and *_done should
not be called multiple times, so ensure we can fail if it's
missing.

Update some existing tests to complain loudly by introducing a
handy "xbail" function which wraps "explain" and BAIL_OUT.
BAIL_OUT was painful to type and concatenating the result of
"explain" doesn't work as I thought it would since "explain"
always returns an array, and BAIL_OUT only accepts a single
scalar arg (unlike "die").

lib/PublicInbox/LeiImport.pm
lib/PublicInbox/TestCommon.pm
t/lei-mark.t
t/lei-q-kw.t

index 9da6b7f939dd62b49830020878312958fc2f70ff..7c5b7d0905eebfbb3354101f5f262df422f1a039 100644 (file)
@@ -39,14 +39,14 @@ sub import_done_wait { # dwaitpid callback
        my ($arg, $pid) = @_;
        my ($imp, $lei) = @$arg;
        $lei->child_error($?, 'non-fatal errors during import') if $?;
-       my $sto = delete $lei->{sto};
-       my $wait = $sto->ipc_do('done') if $sto; # PublicInbox::LeiStore::done
+       my $sto = delete $lei->{sto} // return $lei->fail('BUG: {sto} gone');
+       my $wait = $sto->ipc_do('done'); # PublicInbox::LeiStore::done
        $lei->dclose;
 }
 
 sub import_done { # EOF callback for main daemon
        my ($lei) = @_;
-       my $imp = delete $lei->{imp} or return;
+       my $imp = delete $lei->{imp} // return $lei->fail('BUG: {imp} gone');
        $imp->wq_wait_old(\&import_done_wait, $lei);
 }
 
index ca165a045771b700ea55aef2572d6d500ed40943..72617a78efb3ae6c8e490b38e820da422e362e19 100644 (file)
@@ -17,7 +17,7 @@ BEGIN {
                run_script start_script key2sub xsys xsys_e xqx eml_load tick
                have_xapian_compact json_utf8 setup_public_inboxes create_inbox
                tcp_host_port test_lei lei lei_ok $lei_out $lei_err $lei_opt
-               test_httpd);
+               test_httpd xbail);
        require Test::More;
        my @methods = grep(!/\W/, @Test::More::EXPORT);
        eval(join('', map { "*$_=\\&Test::More::$_;" } @methods));
@@ -25,6 +25,8 @@ BEGIN {
        push @EXPORT, @methods;
 }
 
+sub xbail (@) { BAIL_OUT join(' ', map { ref ? (explain($_)) : ($_) } @_) }
+
 sub eml_load ($) {
        my ($path, $cb) = @_;
        open(my $fh, '<', $path) or die "open $path: $!";
index ddf5634cd79f788ca12b9e75b268b18280184ba1..7699558985df505fcaa931fe6e92a593272c402b 100644 (file)
@@ -30,7 +30,7 @@ test_lei(sub {
        ok(-s $mb, 'wrote mbox result');
        lei_ok(qw(q m:testmessage@example.com -o), $md);
        my @fn = glob("$md/cur/*");
-       scalar(@fn) == 1 or BAIL_OUT 'no mail '.explain(\@fn);
+       scalar(@fn) == 1 or xbail $lei_err, 'no mail', \@fn;
        rename($fn[0], "$fn[0]S") or BAIL_OUT "rename $!";
        $check_kw->(['flagged'], msg => 'after bad request');
        lei_ok(qw(mark -F eml t/utf8.eml -kw:flagged));
index 4db273636bd285be46681e955b17e015d905fb58..c17411fbe07ce19b7bcc72385547b1e70ad02990 100644 (file)
@@ -21,7 +21,7 @@ lei_ok(qw(import -F eml t/plack-qp.eml));
 my $o = "$ENV{HOME}/dst";
 lei_ok(qw(q -o), "maildir:$o", qw(m:qp@example.com));
 my @fn = glob("$o/cur/*:2,");
-scalar(@fn) == 1 or BAIL_OUT "wrote multiple or zero files: ".explain(\@fn);
+scalar(@fn) == 1 or xbail $lei_err, 'wrote multiple or zero files:', \@fn;
 rename($fn[0], "$fn[0]S") or BAIL_OUT "rename $!";
 
 lei_ok(qw(q -o), "maildir:$o", qw(m:bogus-noresults@example.com));
@@ -124,7 +124,7 @@ lei_ok(qw(q -o), $o, "m:$m", @inc);
 
 # emulate MUA marking a Maildir message as read:
 @fn = glob("$o/cur/*");
-scalar(@fn) == 1 or BAIL_OUT "wrote multiple or zero files: ".explain(\@fn);
+scalar(@fn) == 1 or xbail $lei_err, 'wrote multiple or zero files:', \@fn;
 rename($fn[0], "$fn[0]S") or BAIL_OUT "rename $!";
 
 lei_ok(qw(q -o), $o, 'bogus', \'clobber output dir to import keywords');
@@ -178,7 +178,7 @@ $m = 'multipart@example.com';
 $o = "$ENV{HOME}/fuzz";
 lei_ok('q', '-o', $o, "m:$m", @inc);
 @fn = glob("$o/cur/*");
-scalar(@fn) == 1 or BAIL_OUT "wrote multiple or zero files: ".explain(\@fn);
+scalar(@fn) == 1 or xbail $lei_err, "wrote multiple or zero files", \@fn;
 rename($fn[0], "$fn[0]S") or BAIL_OUT "rename $!";
 lei_ok('q', '-o', $o, "m:$m");
 is_deeply([glob("$o/cur/*")], [], 'clobbered output results');