about summary refs log tree commit homepage
path: root/t
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-01-03 09:48:42 +0000
committerEric Wong <e@80x24.org>2021-01-03 18:24:02 +0000
commit0939882b8a883e3f034bd059cdec4984d36f4ac7 (patch)
tree30eca9c9e77272bc255a0eafccacdf74e03104c2 /t
parent45f8f0fefb56723efe1b8ab0a1c041f5196e7a20 (diff)
downloadpublic-inbox-0939882b8a883e3f034bd059cdec4984d36f4ac7.tar.gz
IO::FDPass may be an extra installation burden I don't want to
impose on users.  We only support Linux and *BSDs, however.
Diffstat (limited to 't')
-rw-r--r--t/lei.t6
-rw-r--r--t/spawn.t18
2 files changed, 23 insertions, 1 deletions
diff --git a/t/lei.t b/t/lei.t
index 541d83ce..662fc545 100644
--- a/t/lei.t
+++ b/t/lei.t
@@ -192,7 +192,11 @@ if ($ENV{TEST_LEI_ONESHOT}) {
 }
 
 SKIP: { # real socket
-        require_mods(qw(IO::FDPass Cwd), 46);
+        require_mods(qw(Cwd), my $nr = 46);
+        require PublicInbox::Spawn;
+        skip "Inline::C not installed/configured or IO::FDPass missing", $nr
+                unless PublicInbox::Spawn->can('send_fd');
+
         local $ENV{XDG_RUNTIME_DIR} = "$home/xdg_run";
         my $sock = "$ENV{XDG_RUNTIME_DIR}/lei/sock";
 
diff --git a/t/spawn.t b/t/spawn.t
index d97e13a6..e5cb09d9 100644
--- a/t/spawn.t
+++ b/t/spawn.t
@@ -5,6 +5,24 @@ use warnings;
 use Test::More;
 use PublicInbox::Spawn qw(which spawn popen_rd);
 use PublicInbox::Sigfd;
+use Socket qw(AF_UNIX SOCK_STREAM);
+
+SKIP: {
+        my $recv_fd = PublicInbox::Spawn->can('recv_fd');
+        my $send_fd = PublicInbox::Spawn->can('send_fd');
+        skip 'Inline::C not enabled', 3 unless $send_fd && $recv_fd;
+        my ($s1, $s2);
+        socketpair($s1, $s2, AF_UNIX, SOCK_STREAM, 0) or BAIL_OUT $!;
+        pipe(my ($r, $w)) or BAIL_OUT $!;
+        ok($send_fd->(fileno($s1), fileno($r)), 'pipe sent');
+        my $rfd = $recv_fd->(fileno($s2));
+        like($rfd, qr/\A\d+\z/, 'got FD');
+        open(my $rfh, '<&=', $rfd) or BAIL_OUT $!;
+        my @old = stat($r);
+        my @new = stat($rfh);
+        is("$old[0]\0$old[1]", "$new[0]\0$new[1]",
+                'device/inode matches on received FD');
+}
 
 {
         my $true = which('true');