X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fhttpd-corner.t;h=cb813897c025d6eca82d2da81ede68fc8ce64903;hb=0acad050fe38033baedfed83f5976aeabebf3287;hp=551af2b21526c822e7f479186d668d4ed380be85;hpb=ad6f26f3b9f0e428020d05667987556f8fcbec2f;p=public-inbox.git diff --git a/t/httpd-corner.t b/t/httpd-corner.t index 551af2b2..cb813897 100644 --- a/t/httpd-corner.t +++ b/t/httpd-corner.t @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2019 all contributors +# Copyright (C) 2016-2020 all contributors # License: AGPL-3.0+ # note: our HTTP server should be standalone and capable of running # generic PSGI/Plack apps. @@ -7,19 +7,14 @@ use warnings; use Test::More; use Time::HiRes qw(gettimeofday tv_interval); use PublicInbox::Spawn qw(which spawn); - -foreach my $mod (qw(Plack::Util Plack::Builder HTTP::Date HTTP::Status)) { - eval "require $mod"; - plan skip_all => "$mod missing for httpd-corner.t" if $@; -} - +use PublicInbox::TestCommon; +require_mods(qw(Plack::Util Plack::Builder HTTP::Date HTTP::Status)); use Digest::SHA qw(sha1_hex); use IO::Socket; use IO::Socket::UNIX; use Fcntl qw(:seek); use Socket qw(IPPROTO_TCP TCP_NODELAY SOL_SOCKET); use POSIX qw(mkfifo); -require './t/common.perl'; my ($tmpdir, $for_destroy) = tmpdir(); my $fifo = "$tmpdir/fifo"; ok(defined mkfifo($fifo, 0777), 'created FIFO'); @@ -33,10 +28,11 @@ open(STDIN, '<', '/dev/null') or die 'no /dev/null: $!'; # Make sure we don't clobber socket options set by systemd or similar # using socket activation: -my ($defer_accept_val, $accf_arg); +my ($defer_accept_val, $accf_arg, $TCP_DEFER_ACCEPT); if ($^O eq 'linux') { - setsockopt($sock, IPPROTO_TCP, Socket::TCP_DEFER_ACCEPT(), 5) or die; - my $x = getsockopt($sock, IPPROTO_TCP, Socket::TCP_DEFER_ACCEPT()); + $TCP_DEFER_ACCEPT = eval { Socket::TCP_DEFER_ACCEPT() } // 9; + setsockopt($sock, IPPROTO_TCP, $TCP_DEFER_ACCEPT, 5) or die; + my $x = getsockopt($sock, IPPROTO_TCP, $TCP_DEFER_ACCEPT); defined $x or die "getsockopt: $!"; $defer_accept_val = unpack('i', $x); if ($defer_accept_val <= 0) { @@ -271,7 +267,7 @@ SKIP: { my $cmd = [qw(curl --tcp-nodelay --no-buffer -T- -HExpect: -sS), $url]; open my $cout, '+>', undef or die; open my $cerr, '>', undef or die; - my $rdr = { 0 => fileno($r), 1 => fileno($cout), 2 => fileno($cerr) }; + my $rdr = { 0 => $r, 1 => $cout, 2 => $cerr }; my $pid = spawn($cmd, undef, $rdr); close $r or die "close read pipe: $!"; foreach my $c ('a'..'z') { @@ -282,7 +278,7 @@ SKIP: { waitpid($pid, 0); is($?, 0, 'curl exited successfully'); is(-s $cerr, 0, 'no errors from curl'); - $cout->seek(0, SEEK_SET); + seek($cout, 0, SEEK_SET); is(<$cout>, sha1_hex($str), 'read expected body'); open my $fh, '-|', qw(curl -sS), "$base/async-big" or die $!; @@ -531,7 +527,7 @@ SKIP: { SKIP: { skip 'TCP_DEFER_ACCEPT is Linux-only', 1 if $^O ne 'linux'; - my $var = Socket::TCP_DEFER_ACCEPT(); + my $var = $TCP_DEFER_ACCEPT; defined(my $x = getsockopt($sock, IPPROTO_TCP, $var)) or die; is(unpack('i', $x), $defer_accept_val, 'TCP_DEFER_ACCEPT unchanged if previously set'); @@ -553,16 +549,16 @@ SKIP: { # filter out pipes inherited from the parent my @this = `lsof -p $$`; my $bad; - sub extract_inodes { + my $extract_inodes = sub { map {; my @f = split(' ', $_); my $inode = $f[-2]; $bad = $_ if $inode !~ /\A[0-9]+\z/; $inode => 1; } grep (/\bpipe\b/, @_); - } - my %child = extract_inodes(@lsof); - my %parent = extract_inodes(@this); + }; + my %child = $extract_inodes->(@lsof); + my %parent = $extract_inodes->(@this); skip("inode not in expected format: $bad", 1) if defined($bad); delete @child{(keys %parent)}; is_deeply([], [keys %child], 'no extra pipes with -W0');