diff options
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'); |