about summary refs log tree commit homepage
path: root/t/ipc.t
diff options
context:
space:
mode:
Diffstat (limited to 't/ipc.t')
-rw-r--r--t/ipc.t33
1 files changed, 18 insertions, 15 deletions
diff --git a/t/ipc.t b/t/ipc.t
index ce89f94b..23ae2e7b 100644
--- a/t/ipc.t
+++ b/t/ipc.t
@@ -1,19 +1,17 @@
 #!perl -w
-# Copyright (C) 2020-2021 all contributors <meta@public-inbox.org>
+# Copyright (C) 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 v5.12;
 use PublicInbox::TestCommon;
 use Fcntl qw(SEEK_SET);
-use Digest::SHA qw(sha1_hex);
+use PublicInbox::SHA qw(sha1_hex);
 require_mods(qw(Storable||Sereal));
 require_ok 'PublicInbox::IPC';
 my ($tmpdir, $for_destroy) = tmpdir();
 state $once = eval <<'';
 package PublicInbox::IPC;
 use strict;
-use Digest::SHA qw(sha1_hex);
+use PublicInbox::SHA qw(sha1_hex);
 sub test_array { qw(test array) }
 sub test_scalar { 'scalar' }
 sub test_scalarref { \'scalarref' }
@@ -90,7 +88,6 @@ $test->('local');
         defined($pid) or BAIL_OUT 'no spawn, no test';
         is($ipc->ipc_do('test_pid'), $pid, 'worker pid returned');
         $test->('worker');
-        $ipc->ipc_lock_init("$tmpdir/lock");
         is($ipc->ipc_do('test_pid'), $pid, 'worker pid returned');
         $ipc->ipc_worker_stop;
         ok(!kill(0, $pid) && $!{ESRCH}, 'worker stopped');
@@ -109,7 +106,9 @@ open my $agpl, '<', 'COPYING' or BAIL_OUT "AGPL-3 missing: $!";
 my $big = do { local $/; <$agpl> } // BAIL_OUT "read: $!";
 close $agpl or BAIL_OUT "close: $!";
 
-for my $t ('local', 'worker', 'worker again') {
+for my $t ('worker', 'worker again') {
+        my $ppid = $ipc->wq_workers_start('wq', 1);
+        push(@ppids, $ppid);
         $ipc->wq_io_do('test_write_each_fd', [ $wa, $wb, $wc ], 'hello world');
         my $i = 0;
         for my $fh ($ra, $rb, $rc) {
@@ -133,14 +132,19 @@ for my $t ('local', 'worker', 'worker again') {
                 $exp = sha1_hex($bigger)."\n";
                 is(readline($rb), $exp, "SHA WQWorker limit ($t)");
         }
-        my $ppid = $ipc->wq_workers_start('wq', 1);
-        push(@ppids, $ppid);
+        SKIP: {
+                $ENV{TEST_EXPENSIVE} or skip 'TEST_EXPENSIVE not set', 1;
+                my $bigger = $big x 75000; # over 2G to trigger partial sendmsg
+                $ipc->wq_io_do('test_sha', [ $wa, $wb ], $bigger);
+                my $exp = sha1_hex($bigger)."\n";
+                is(readline($rb), $exp, "SHA WQWorker sendmsg limit ($t)");
+        }
 }
 
 # wq_io_do works across fork (siblings can feed)
 SKIP: {
         skip 'Socket::MsgHdr or Inline::C missing', 3 if !$ppids[0];
-        is_deeply(\@ppids, [$$, undef, undef],
+        is_xdeeply(\@ppids, [$$, undef],
                 'parent pid returned in wq_workers_start');
         my $pid = fork // BAIL_OUT $!;
         if ($pid == 0) {
@@ -174,10 +178,9 @@ SKIP: {
         skip 'Socket::MsgHdr or Inline::C missing', 11 if !$ppids[0];
         seek($warn, 0, SEEK_SET) or BAIL_OUT;
         my @warn = <$warn>;
-        is(scalar(@warn), 3, 'warned 3 times');
-        like($warn[0], qr/ wq_io_do: /, '1st warned from wq_do');
-        like($warn[1], qr/ wq_worker: /, '2nd warned from wq_worker');
-        is($warn[2], $warn[1], 'worker did not die');
+        is(scalar(@warn), 2, 'warned 3 times');
+        like($warn[0], qr/ wq_worker: /, '2nd warned from wq_worker');
+        is($warn[0], $warn[1], 'worker did not die');
 
         $SIG{__WARN__} = 'DEFAULT';
         is($ipc->wq_workers_start('wq', 2), $$, 'workers started again');