[Catalyst] Test server as a child process

Jon Schutz jon+catalyst at youramigo.com
Tue Jul 31 11:54:46 GMT 2007


On Tue, 2007-07-31 at 12:33 +0400, Ivan Fomichev wrote:
> Hello,
> 
> I intend to write a script, that would start the test server as a
> child process and then run tests. The thing I'm failing to do is to
> get output from the test server in order to determine, when the server
> has started.
> 
> The problem is that test server doesn't print its prompt ("You can
> connect to your server at http://localhost:3000") when run as a child
> process :-(
> 
> I dug Catalyst's sources, but didn't understood much. I put 'sleep' in
> parent process for now, but I don't like it. Could anyone suggest an
> adequate work-around? Thank you in advance.
> 
> 8<------------------------script/myapp_regtest.pl--------------------------
> #!/usr/bin/perl
> use strict;
> use warnings;
> 
> use Config::IniFiles;
> use File::Spec::Functions;
> use FindBin;
> use POSIX qw/ :signal_h /;
> 
> my $ini = Config::IniFiles->new( -file => catfile( $FindBin::Bin,
> updir, 'myapp_regtest.ini' ) );
> $ENV{MYAPP_DSN} = $ini->val( 'database', 'dsn' );
> 
> defined ( my $catalyst_pid = open(CHILD, '-|') )
>     or die "cannot fork: $!";
> 
> if ( !$catalyst_pid ) {
>     my $port = $ini->val( 'catalyst', 'port' );
>     exec( catfile( $FindBin::Bin, 'myapp_server.pl' ), '-p', $port );
> }
> 
> print scalar <CHILD>;
> 
> my $lib = catdir( $FindBin::Bin, updir, 'lib' );
> chdir catdir( $FindBin::Bin, updir );
> system( 'prove', '--lib', $lib, 't' );
> 
> kill SIGINT, $catalyst_pid;
> 8<----------------------------------END------------------------------------
> 
> Regards,
> Ivan
> 

I've approached this by doing a GET on http://localhost:3000 until it
succeeds or times out:

    my $ua = LWP::UserAgent->new();
    my $wait_secs = 30;
    for my $i (1 .. $wait_secs) {
	my $r = $ua->get("http://localhost:" . $self->{port});
	last if $r->is_success;
	die "Failed to start test server" if $i == $wait_secs;
	sleep(1);
    }

-- 

Jon




More information about the Catalyst mailing list