properly skip tests on MSWin32
Karen Etheridge [Sat, 31 Jul 2021 03:22:47 +0000 (20:22 -0700)]
e.g. see http://www.cpantesters.org/cpan/report/6b28a72a-6da7-1014-8f35-b33976a13fd6

perl/t/02-unix_domain_socket.t

index 07f64e4..69d093b 100644 (file)
@@ -1,5 +1,3 @@
-#!/usr/bin/env perl
-
 use strict;
 use warnings;
 
@@ -8,44 +6,36 @@ use FCGI;
 use FCGI::Client;
 use File::Temp qw(tempfile);
 use IO::Socket;
-use Test::More 'tests' => 4;
-
-BEGIN {
-    my $reason;
-    my $can_fork = $Config{d_fork}
-        || (
-            ($^O eq 'MSWin32' || $^O eq 'NetWare')
-            and $Config{useithreads}
-            and $Config{ccflags} =~ /-DPERL_IMPLICIT_SYS/
-        );
-    if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bSocket\b/) {
-        $reason = 'Socket extension unavailable';
-    } elsif ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bIO\b/) {
-        $reason = 'IO extension unavailable';
-    } elsif ($^O eq 'os2') {
-        eval { IO::Socket::pack_sockaddr_un('/foo/bar') || 1 };
-        if ($@ !~ /not implemented/) {
-            $reason = 'compiled without TCP/IP stack v4';
-        }
-    } elsif ($^O =~ m/^(?:qnx|nto|vos)$/ ) {
-        $reason = "UNIX domain sockets not implemented on $^O";
-    } elsif (! $can_fork) {
-        $reason = 'no fork';
-    } elsif ($^O eq 'MSWin32') {
-        if ($ENV{CONTINUOUS_INTEGRATION}) {
-            # https://github.com/Perl/perl5/issues/17429
-            $reason = 'Skipping on Windows CI';
-        } else {
-            # https://github.com/Perl/perl5/issues/17575
-            if (! eval { socket(my $sock, PF_UNIX, SOCK_STREAM, 0) }) {
-                $reason = "AF_UNIX unavailable or disabled on this platform"
-            }
-        }
+use Test::More 0.88;
+
+my $can_fork = $Config{d_fork}
+    || (
+        ($^O eq 'MSWin32' || $^O eq 'NetWare')
+        and $Config{useithreads}
+        and $Config{ccflags} =~ /-DPERL_IMPLICIT_SYS/
+    );
+if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bSocket\b/) {
+    plan skip_all => 'Socket extension unavailable';
+} elsif ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bIO\b/) {
+    plan skip_all => 'IO extension unavailable';
+} elsif ($^O eq 'os2') {
+    eval { IO::Socket::pack_sockaddr_un('/foo/bar') || 1 };
+    if ($@ !~ /not implemented/) {
+        plan skip_all => 'compiled without TCP/IP stack v4';
     }
-
-    if ($reason) {
-        print "1..0 # Skip: $reason\n";
-        exit 0;
+} elsif ($^O =~ m/^(?:qnx|nto|vos)$/ ) {
+    plan skip_all => "UNIX domain sockets not implemented on $^O";
+} elsif (! $can_fork) {
+    plan skip_all => 'no fork';
+} elsif ($^O eq 'MSWin32') {
+    if ($ENV{CONTINUOUS_INTEGRATION}) {
+        # https://github.com/Perl/perl5/issues/17429
+        plan skip_all => 'Skipping on Windows CI';
+    } else {
+        # https://github.com/Perl/perl5/issues/17575
+        if (! eval { socket(my $sock, PF_UNIX, SOCK_STREAM, 0) }) {
+            plan skip_all => "AF_UNIX unavailable or disabled on this platform"
+        }
     }
 }
 
@@ -87,16 +77,18 @@ END
 FCGI::CloseSocket($fcgi_socket);
 unlink $unix_socket_file;
 
+done_testing;
+
 sub client_request {
-       my $unix_socket_file = shift;
+    my $unix_socket_file = shift;
 
-       my $sock = IO::Socket::UNIX->new(
-               Peer => $unix_socket_file,
-       ) or die $!;
-       my $client = FCGI::Client::Connection->new(sock => $sock);
-       my ($stdout, $stderr) = $client->request({
-               REQUEST_METHOD => 'GET',
-       }, '');
+    my $sock = IO::Socket::UNIX->new(
+        Peer => $unix_socket_file,
+    ) or die $!;
+    my $client = FCGI::Client::Connection->new(sock => $sock);
+    my ($stdout, $stderr) = $client->request({
+        REQUEST_METHOD => 'GET',
+    }, '');
 
-       return ($stdout, $stderr);
+    return ($stdout, $stderr);
 }