diff options
author | Eric Wong <e@80x24.org> | 2021-01-03 09:48:42 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-01-03 18:24:02 +0000 |
commit | 0939882b8a883e3f034bd059cdec4984d36f4ac7 (patch) | |
tree | 30eca9c9e77272bc255a0eafccacdf74e03104c2 /t/spawn.t | |
parent | 45f8f0fefb56723efe1b8ab0a1c041f5196e7a20 (diff) | |
download | public-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/spawn.t')
-rw-r--r-- | t/spawn.t | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -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'); |