about summary refs log tree commit homepage
path: root/xt
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-01-13 19:06:15 -1200
committerEric Wong <e@80x24.org>2021-01-14 23:14:08 +0000
commit39d44555e3f04c97e98c7f5d3538bbba6a19656b (patch)
tree034da2d3634118b076b95e126f73f875795ddb3a /xt
parent7dd5b28cb9bdcfa262ddad47d7f033f600675dc3 (diff)
downloadpublic-inbox-39d44555e3f04c97e98c7f5d3538bbba6a19656b.tar.gz
The new test ensures consistency between oneshot and
client/daemon users.  Cancelling an in-progress result now also
stops xsearch workers to avoid wasted CPU and I/O.

Note the lei->atfork_child_wq usage changes, it is to workaround
a bug in Perl 5: http://nntp.perl.org/group/perl.perl5.porters/258784
<CAHhgV8hPbcmkzWizp6Vijw921M5BOXixj4+zTh3nRS9vRBYk8w@mail.gmail.com>

This switches the internal protocol to use SOCK_SEQPACKET
AF_UNIX sockets to prevent merging messages from the daemon to
client to run pager and kill/exit the client script.
Diffstat (limited to 'xt')
-rw-r--r--xt/lei-sigpipe.t32
1 files changed, 32 insertions, 0 deletions
diff --git a/xt/lei-sigpipe.t b/xt/lei-sigpipe.t
new file mode 100644
index 00000000..4d35bbb3
--- /dev/null
+++ b/xt/lei-sigpipe.t
@@ -0,0 +1,32 @@
+#!perl -w
+# Copyright (C) 2021 all contributors <meta@public-inbox.org>
+# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+use strict;
+use v5.10.1;
+use Test::More;
+use PublicInbox::TestCommon;
+use POSIX qw(WTERMSIG WIFSIGNALED SIGPIPE);
+require_mods(qw(json DBD::SQLite Search::Xapian));
+# XXX this needs an already configured lei instance with many messages
+
+my $do_test = sub {
+        my $env = shift // {};
+        pipe(my ($r, $w)) or BAIL_OUT $!;
+        open my $err, '+>', undef or BAIL_OUT $!;
+        my $opt = { run_mode => 0, 1 => $w, 2 => $err };
+        my $tp = start_script([qw(lei q -t), 'bytes:1..'], $env, $opt);
+        close $w;
+        sysread($r, my $buf, 1);
+        close $r; # trigger SIGPIPE
+        $tp->join;
+        ok(WIFSIGNALED($?), 'signaled');
+        is(WTERMSIG($?), SIGPIPE, 'got SIGPIPE');
+        seek($err, 0, 0);
+        my @err = grep(!m{mkdir /dev/null\b}, <$err>);
+        is_deeply(\@err, [], 'no errors');
+};
+
+$do_test->();
+$do_test->({XDG_RUNTIME_DIR => '/dev/null'});
+
+done_testing;