diff options
author | Eric Wong <e@80x24.org> | 2018-12-26 09:07:49 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2018-12-29 03:45:37 +0000 |
commit | 59c946a014f34cd90621b1fb3b30af99ba80bf61 (patch) | |
tree | 194643ecd5d2388dbfd62a4503842f03c414be13 /t/v2writable.t | |
parent | 2b5da4383d9c6defd2d473bf02eb8920bd589890 (diff) | |
download | public-inbox-59c946a014f34cd90621b1fb3b30af99ba80bf61.tar.gz |
IPC::Run provides a nice simplification in several places; and we already use it (optionally) on a lot of tests. For the non-test code, we still rely on our vfork-capable Inline::C stuff since real-world server processes can get large enough to where vfork is an advantage. Maybe Perl5 can use CLONE_VFORK somehow, one day: https://rt.perl.org/Ticket/Display.html?id=128227 Ohg V'q engure cbeg choyvp-vaobk gb Ehol :C
Diffstat (limited to 't/v2writable.t')
-rw-r--r-- | t/v2writable.t | 26 |
1 files changed, 4 insertions, 22 deletions
diff --git a/t/v2writable.t b/t/v2writable.t index b3cdbd3e..c7eeee99 100644 --- a/t/v2writable.t +++ b/t/v2writable.t @@ -6,6 +6,7 @@ use Test::More; use PublicInbox::MIME; use PublicInbox::ContentId qw(content_digest); use File::Temp qw/tempdir/; +require './t/common.perl'; foreach my $mod (qw(DBD::SQLite Search::Xapian)) { eval "require $mod"; plan skip_all => "$mod missing for nntpd.t" if $@; @@ -129,7 +130,6 @@ if ('ensure git configs are correct') { } SKIP: { - use Fcntl qw(FD_CLOEXEC F_SETFD F_GETFD); use Net::NNTP; use IO::Socket; use Socket qw(SO_KEEPALIVE IPPROTO_TCP TCP_NODELAY); @@ -161,27 +161,9 @@ EOF my $pid; my $len; END { kill 'TERM', $pid if defined $pid }; - $! = 0; - my $fl = fcntl($sock, F_GETFD, 0); - ok(! $!, 'no error from fcntl(F_GETFD)'); - is($fl, FD_CLOEXEC, 'cloexec set by default (Perl behavior)'); - $pid = fork; - if ($pid == 0) { - use POSIX qw(dup2); - $ENV{PI_CONFIG} = $pi_config; - # pretend to be systemd - fcntl($sock, F_SETFD, $fl &= ~FD_CLOEXEC); - dup2(fileno($sock), 3) or die "dup2 failed: $!\n"; - $ENV{LISTEN_PID} = $$; - $ENV{LISTEN_FDS} = 1; - my $nntpd = 'blib/script/public-inbox-nntpd'; - exec $nntpd, "--stdout=$out", "--stderr=$err"; - die "FAIL: $!\n"; - } - ok(defined $pid, 'forked nntpd process successfully'); - $! = 0; - fcntl($sock, F_SETFD, $fl |= FD_CLOEXEC); - ok(! $!, 'no error from fcntl(F_SETFD)'); + my $nntpd = 'blib/script/public-inbox-nntpd'; + my $cmd = [ $nntpd, "--stdout=$out", "--stderr=$err" ]; + $pid = spawn_listener({ PI_CONFIG => $pi_config }, $cmd, [ $sock ]); my $host_port = $sock->sockhost . ':' . $sock->sockport; my $n = Net::NNTP->new($host_port); $n->group($group); |