Required OS/2-related patches
[p5sagit/p5-mst-13.2.git] / t / lib / io_unix.t
1 #!./perl
2
3 BEGIN {
4     unless(grep /blib/, @INC) {
5         chdir 't' if -d 't';
6         unshift @INC, '../lib' if -d '../lib';
7     }
8 }
9
10 use Config;
11
12 BEGIN {
13     if(-d "lib" && -f "TEST") {
14         my $reason;
15         if (! $Config{'d_fork'}) {
16             $reason = 'no fork';
17         }
18         elsif ($Config{'extensions'} !~ /\bSocket\b/) {
19             $reason = 'Socket extension unavailable';
20         }
21         elsif ($Config{'extensions'} !~ /\bIO\b/) {
22             $reason = 'IO extension unavailable';
23         }
24         elsif ($^O eq 'os2') {
25             use IO::Socket;
26
27             eval {IO::Socket::pack_sockaddr_un('/tmp/foo') || 1}
28               or $@ !~ /not implemented/ or
29                 $reason = 'compiled without TCP/IP stack v4';
30         }
31         undef $reason if $^O eq 'VMS' and $Config{d_socket};
32         if ($reason) {
33             print "1..0 # Skip: $reason\n";
34             exit 0;
35         }
36     }
37 }
38
39 $PATH = "/tmp/sock-$$";
40
41 # Test if we can create the file within the tmp directory
42 if (-e $PATH or not open(TEST, ">$PATH")) {
43     print "1..0\n";
44     exit 0;
45 }
46 close(TEST);
47 unlink($PATH) or die "Can't unlink $PATH: $!";
48
49 # Start testing
50 $| = 1;
51 print "1..5\n";
52
53 use IO::Socket;
54
55 $listen = IO::Socket::UNIX->new(Local=>$PATH, Listen=>0) || die "$!";
56 print "ok 1\n";
57
58 if($pid = fork()) {
59
60     $sock = $listen->accept();
61     print "ok 2\n";
62
63     print $sock->getline();
64
65     print $sock "ok 4\n";
66
67     $sock->close;
68
69     waitpid($pid,0);
70     unlink($PATH) || warn "Can't unlink $PATH: $!";
71
72     print "ok 5\n";
73
74 } elsif(defined $pid) {
75
76     $sock = IO::Socket::UNIX->new(Peer => $PATH) or die "$!";
77
78     print $sock "ok 3\n";
79
80     print $sock->getline();
81
82     $sock->close;
83
84     exit;
85 } else {
86  die;
87 }