diff options
author | Tony Cook <tony@develop-help.com> | 2012-05-09 19:04:28 +0100 |
---|---|---|
committer | Ricardo Signes <rjbs@cpan.org> | 2012-05-10 09:53:14 -0400 |
commit | b6903614db213f07401367249dc84c896eb099b7 (patch) | |
tree | b59532762d31f036beb78f1f09d56708c7f34bd8 /dist/IO | |
parent | 271d04eee1933df0971f54f7bf9a5ca3575e7e6a (diff) | |
download | perl-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.t | 51 | ||||
-rw-r--r-- | dist/IO/t/cachepropagate-unix.t | 73 |
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); +} |