summaryrefslogtreecommitdiff
path: root/dist/IO
diff options
context:
space:
mode:
authorTony Cook <tony@develop-help.com>2012-05-09 19:04:28 +0100
committerRicardo Signes <rjbs@cpan.org>2012-05-10 09:53:14 -0400
commitb6903614db213f07401367249dc84c896eb099b7 (patch)
treeb59532762d31f036beb78f1f09d56708c7f34bd8 /dist/IO
parent271d04eee1933df0971f54f7bf9a5ca3575e7e6a (diff)
downloadperl-b6903614db213f07401367249dc84c896eb099b7.tar.gz
sometimes fork() isn't available
This was amended from the original Tony prepared in a parallel branch
Diffstat (limited to 'dist/IO')
-rw-r--r--dist/IO/t/cachepropagate-tcp.t51
-rw-r--r--dist/IO/t/cachepropagate-unix.t73
2 files changed, 67 insertions, 57 deletions
diff --git a/dist/IO/t/cachepropagate-tcp.t b/dist/IO/t/cachepropagate-tcp.t
index 9c26b4502c..cec9a7ba8f 100644
--- a/dist/IO/t/cachepropagate-tcp.t
+++ b/dist/IO/t/cachepropagate-tcp.t
@@ -6,6 +6,7 @@ use strict;
use IO::Socket;
use IO::Socket::INET;
use Socket;
+use Config;
use Test::More;
plan tests => 8;
@@ -24,28 +25,32 @@ ok(defined($d), 'domain defined');
my $s = $listener->socktype();
ok(defined($s), 'type defined');
-my $cpid = fork();
-if (0 == $cpid) {
- # the child:
- sleep(1);
- my $connector = IO::Socket::INET->new(PeerAddr => '127.0.0.1',
- PeerPort => $port,
- Proto => 'tcp');
- exit(0);
-} else {;
- ok(defined($cpid), 'spawned a child');
-}
-
-my $new = $listener->accept();
-
-is($new->sockdomain(), $d, 'domain match');
SKIP: {
- skip "no Socket::SO_PROTOCOL", 1 if !defined(eval { Socket::SO_PROTOCOL });
- is($new->protocol(), $p, 'protocol match');
+ $Config{d_pseudofork} || $Config{d_fork}
+ or skip("no fork", 4);
+ my $cpid = fork();
+ if (0 == $cpid) {
+ # the child:
+ sleep(1);
+ my $connector = IO::Socket::INET->new(PeerAddr => '127.0.0.1',
+ PeerPort => $port,
+ Proto => 'tcp');
+ exit(0);
+ } else {;
+ ok(defined($cpid), 'spawned a child');
+ }
+
+ my $new = $listener->accept();
+
+ is($new->sockdomain(), $d, 'domain match');
+ SKIP: {
+ skip "no Socket::SO_PROTOCOL", 1 if !defined(eval { Socket::SO_PROTOCOL });
+ is($new->protocol(), $p, 'protocol match');
+ }
+ SKIP: {
+ skip "no Socket::SO_TYPE", 1 if !defined(eval { Socket::SO_TYPE });
+ is($new->socktype(), $s, 'type match');
+ }
+
+ wait();
}
-SKIP: {
- skip "no Socket::SO_TYPE", 1 if !defined(eval { Socket::SO_TYPE });
- is($new->socktype(), $s, 'type match');
-}
-
-wait();
diff --git a/dist/IO/t/cachepropagate-unix.t b/dist/IO/t/cachepropagate-unix.t
index 375f28a574..1b0ace7a29 100644
--- a/dist/IO/t/cachepropagate-unix.t
+++ b/dist/IO/t/cachepropagate-unix.t
@@ -8,29 +8,33 @@ use File::Spec::Functions;
use IO::Socket;
use IO::Socket::UNIX;
use Socket;
+use Config;
use Test::More;
plan tests => 15;
SKIP: {
- skip "UNIX domain sockets not implemented on $^O", 15 if ($^O =~ m/^(?:qnx|nto|vos|MSWin32)$/);
+ skip "UNIX domain sockets not implemented on $^O", 15 if ($^O =~ m/^(?:qnx|nto|vos|MSWin32)$/);
- my $socketpath = catfile(tempdir( CLEANUP => 1 ), 'testsock');
+ my $socketpath = catfile(tempdir( CLEANUP => 1 ), 'testsock');
- # start testing stream sockets:
+ # start testing stream sockets:
- my $listener = IO::Socket::UNIX->new(Type => SOCK_STREAM,
- Listen => 1,
- Local => $socketpath);
- ok(defined($listener), 'stream socket created');
+ my $listener = IO::Socket::UNIX->new(Type => SOCK_STREAM,
+ Listen => 1,
+ Local => $socketpath);
+ ok(defined($listener), 'stream socket created');
- my $p = $listener->protocol();
- ok(defined($p), 'protocol defined');
- my $d = $listener->sockdomain();
- ok(defined($d), 'domain defined');
- my $s = $listener->socktype();
- ok(defined($s), 'type defined');
+ my $p = $listener->protocol();
+ ok(defined($p), 'protocol defined');
+ my $d = $listener->sockdomain();
+ ok(defined($d), 'domain defined');
+ my $s = $listener->socktype();
+ ok(defined($s), 'type defined');
+ SKIP: {
+ $Config{d_pseudofork} || $Config{d_fork}
+ or skip("no fork", 4);
my $cpid = fork();
if (0 == $cpid) {
# the child:
@@ -44,40 +48,41 @@ SKIP: {
my $new = $listener->accept();
is($new->sockdomain(), $d, 'domain match');
- SKIP: {
+ SKIP: {
skip "no Socket::SO_PROTOCOL", 1 if !defined(eval { Socket::SO_PROTOCOL });
is($new->protocol(), $p, 'protocol match');
}
- SKIP: {
+ SKIP: {
skip "no Socket::SO_TYPE", 1 if !defined(eval { Socket::SO_TYPE });
is($new->socktype(), $s, 'type match');
}
unlink($socketpath);
wait();
+ }
- # now test datagram sockets:
- $listener = IO::Socket::UNIX->new(Type => SOCK_DGRAM,
- Local => $socketpath);
- ok(defined($listener), 'datagram socket created');
+ # now test datagram sockets:
+ $listener = IO::Socket::UNIX->new(Type => SOCK_DGRAM,
+ Local => $socketpath);
+ ok(defined($listener), 'datagram socket created');
- $p = $listener->protocol();
- ok(defined($p), 'protocol defined');
- $d = $listener->sockdomain();
- ok(defined($d), 'domain defined');
- $s = $listener->socktype();
- ok(defined($s), 'type defined');
+ $p = $listener->protocol();
+ ok(defined($p), 'protocol defined');
+ $d = $listener->sockdomain();
+ ok(defined($d), 'domain defined');
+ $s = $listener->socktype();
+ ok(defined($s), 'type defined');
- $new = IO::Socket::UNIX->new_from_fd($listener->fileno(), 'r+');
+ my $new = IO::Socket::UNIX->new_from_fd($listener->fileno(), 'r+');
- is($new->sockdomain(), $d, 'domain match');
+ is($new->sockdomain(), $d, 'domain match');
SKIP: {
- skip "no Socket::SO_PROTOCOL", 1 if !defined(eval { Socket::SO_PROTOCOL });
- is($new->protocol(), $p, 'protocol match');
- }
+ skip "no Socket::SO_PROTOCOL", 1 if !defined(eval { Socket::SO_PROTOCOL });
+ is($new->protocol(), $p, 'protocol match');
+ }
SKIP: {
- skip "no Socket::SO_TYPE", 1 if !defined(eval { Socket::SO_TYPE });
- is($new->socktype(), $s, 'type match');
- }
- unlink($socketpath);
+ skip "no Socket::SO_TYPE", 1 if !defined(eval { Socket::SO_TYPE });
+ is($new->socktype(), $s, 'type match');
}
+ unlink($socketpath);
+}