Added a forking test
Christian Hansen [Sat, 29 Oct 2005 16:08:31 +0000 (16:08 +0000)]
lib/HTTP/Request/AsCGI.pm
t/05env.t
t/07forking.t [new file with mode: 0644]

index 226420c..cd7394f 100644 (file)
@@ -140,9 +140,7 @@ sub setup {
 sub response {
     my ( $self, $callback ) = @_;
 
-    return undef unless $self->{setuped};
-    return undef unless $self->{restored};
-    return undef unless $self->{restore}->{stdout};
+    return undef unless $self->stdout;
 
     require HTTP::Response;
 
@@ -344,6 +342,18 @@ handle with an file descriptor.
 
 =back
 
+=head1 SEE ALSO
+
+=over 4
+
+=item examples directory in this distribution.
+
+=item L<WWW::Mechanize::CGI>
+
+=item L<Test::WWW::Mechanize::CGI>
+
+=back
+
 =head1 THANKS TO
 
 Thomas L. Shinnick for his valuable win32 testing.
index e77ed92..209d61e 100644 (file)
--- a/t/05env.t
+++ b/t/05env.t
@@ -5,7 +5,6 @@ use Test::More tests => 10;
 use strict;
 use warnings;
 
-use IO::File;
 use HTTP::Request;
 use HTTP::Request::AsCGI;
 
diff --git a/t/07forking.t b/t/07forking.t
new file mode 100644 (file)
index 0000000..c4f0463
--- /dev/null
@@ -0,0 +1,59 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Config;
+use IO::File;
+use HTTP::Request;
+use HTTP::Request::AsCGI;
+use Test::More;
+
+unless ( $Config{d_fork} ) {
+    plan skip_all => 'This test requires a plattform that supports fork()';
+}
+
+plan tests => 8;
+
+my $response;
+
+{
+    my $r = HTTP::Request->new( GET => 'http://www.host.com/' );
+    my $c = HTTP::Request::AsCGI->new($r);
+
+    my $kid = fork();
+
+    unless ( defined $kid ) {
+        die("Can't fork() kid: $!");
+    }
+
+    unless ( $kid ) {
+
+        $c->setup;
+
+        print "HTTP/1.0 200 OK\n";
+        print "Content-Type: text/plain\n";
+        print "Status: 200\n";
+        print "X-Field: 1\n";
+        print "X-Field: 2\n";
+        print "\n";
+        print "Hello!";
+
+        $c->restore;
+
+        exit(0);
+    }
+
+    waitpid( $kid, 0 );
+
+    $response = $c->response;
+}
+
+isa_ok( $response, 'HTTP::Response' );
+is( $response->code, 200, 'Response Code' );
+is( $response->message, 'OK', 'Response Message' );
+is( $response->protocol, 'HTTP/1.0', 'Response Protocol' );
+is( $response->content, 'Hello!', 'Response Content' );
+is( $response->content_length, 6, 'Response Content-Length' );
+is( $response->content_type, 'text/plain', 'Response Content-Type' );
+is_deeply( [ $response->header('X-Field') ], [ 1, 2 ], 'Response Header X-Field' );