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 | |
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')
-rw-r--r-- | t/lei.t | 6 | ||||
-rw-r--r-- | t/spawn.t | 18 |
2 files changed, 23 insertions, 1 deletions
@@ -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"; @@ -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'); |