--- trunk/lib/Frey/Test.pm 2008/07/11 23:08:25 103 +++ trunk/lib/Frey/Test.pm 2008/10/31 22:39:48 216 @@ -1,20 +1,38 @@ package Frey::Test; +=head1 NAME + +Frey::Test - start and stop server child + +=head1 SYNPOSYS + + my $url = Frey::Test->start_server; + + Frey::Test->stop_server; + +=cut + +use warnings; +use strict; + use IO::Handle; +use IO::Socket::INET; our $kid_pid; +our $kid_out; -sub start_server { +sub _fork { my ($self,$filename) = @_; + $ENV{FREY_PORT} = int( 16000 + rand(1000) ); $filename ||= './bin/server.pl'; - $kid_pid = open(my $kid_out, '-|'); + $kid_pid = open($kid_out, '-|'); die "Unable to fork!" unless defined($kid_pid); if($kid_pid) { $kid_out->autoflush; - return $kid_out; + warn "## child pid $kid_pid\n"; + return $kid_pid; } else { if(-e $filename) { - $ENV{FREY_PORT} = int( 16000 + rand(1000) ); do $filename or die "Unable to eval $filename! $@"; } else { die "I can't find '$filename'!"; @@ -23,17 +41,16 @@ } } -sub get_server { - my ( $self, $kid_out ) = @_; - my $server = <$kid_out>; - chomp $server; - if($server =~ /http:\/\/[^:]+:(\d+)/) { - $server = "http://localhost:$1/"; - warn "## server $server"; - } else { - die "can't start server"; +sub start_server { + my ( $self ) = @_; + $self->_fork unless $kid_out; + my $host = '127.0.0.1:' . $ENV{FREY_PORT}; + warn "## waiting for $host to start"; + while ( ! IO::Socket::INET->new( $host ) ) { + warn "."; + sleep 1; } - return $server; + return "http://$host"; } sub stop_server {