X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=t%2Foptional_http-server-restart.t;h=39f475a51ded6d125cf4d2cb5ca5d1ac6d77c317;hp=10e8a6027b4c39d2d912b5b3c53c40972a5ef8ad;hb=4ac0b9cb8e9043db8a95f44af685c782bf9426e7;hpb=9c71d51daf53bfd6f77d7e252b594392bd4be3de diff --git a/t/optional_http-server-restart.t b/t/optional_http-server-restart.t index 10e8a60..39f475a 100644 --- a/t/optional_http-server-restart.t +++ b/t/optional_http-server-restart.t @@ -1,19 +1,22 @@ -#!perl - # This test tests the standalone server's auto-restart feature. use strict; use warnings; +use Test::More; +BEGIN { + plan skip_all => 'set TEST_HTTP to enable this test' unless $ENV{TEST_HTTP}; +} + use File::Path; use FindBin; use LWP::Simple; use IO::Socket; -use Test::More; +use IPC::Open3; +use Catalyst::Engine::HTTP::Restarter::Watcher; use Time::HiRes qw/sleep/; eval "use Catalyst::Devel 1.0;"; -plan skip_all => 'set TEST_HTTP to enable this test' unless $ENV{TEST_HTTP}; plan skip_all => 'Catalyst::Devel required' if $@; plan skip_all => 'Catalyst::Devel >= 1.04 required' if $Catalyst::Devel::VERSION <= 1.03; eval "use File::Copy::Recursive"; @@ -21,14 +24,17 @@ plan skip_all => 'File::Copy::Recursive required' if $@; plan tests => 120; +my $tmpdir = "$FindBin::Bin/../t/tmp"; + # clean up -rmtree "$FindBin::Bin/../t/tmp" if -d "$FindBin::Bin/../t/tmp"; +rmtree $tmpdir if -d $tmpdir; # create a TestApp and copy the test libs into it -mkdir "$FindBin::Bin/../t/tmp"; -chdir "$FindBin::Bin/../t/tmp"; -system - "perl -I$FindBin::Bin/../lib $FindBin::Bin/../script/catalyst.pl TestApp"; +mkdir $tmpdir; +chdir $tmpdir; + +system( $^X, "-I$FindBin::Bin/../lib", "$FindBin::Bin/../script/catalyst.pl", 'TestApp' ); + chdir "$FindBin::Bin/.."; File::Copy::Recursive::dircopy( 't/lib', 't/tmp/TestApp/lib' ); @@ -38,9 +44,12 @@ rmtree 't/tmp/TestApp/t'; # spawn the standalone HTTP server my $port = 30000 + int rand( 1 + 10000 ); -my $pid = open my $server, -"perl -I$FindBin::Bin/../lib $FindBin::Bin/../t/tmp/TestApp/script/testapp_server.pl -port $port -restart 2>&1 |" - or die "Unable to spawn standalone HTTP server: $!"; +my( $server, $pid ); +$pid = open3( undef, $server, undef, + $^X, "-I$FindBin::Bin/../lib", + "$FindBin::Bin/../t/tmp/TestApp/script/testapp_server.pl", '-port', + $port, '-restart' ) + or die "Unable to spawn standalone HTTP server: $!"; # switch to non-blocking reads so we can fail # gracefully instead of just hanging forever @@ -57,9 +66,12 @@ while ( check_port( 'localhost', $port ) != 1 ) { my @files = ( "$FindBin::Bin/../t/tmp/TestApp/lib/TestApp.pm", "$FindBin::Bin/../t/tmp/TestApp/lib/TestApp/Controller/Action/Begin.pm", -"$FindBin::Bin/../t/tmp/TestApp/lib/TestApp/Controller/Engine/Request/URI.pm", + "$FindBin::Bin/../t/tmp/TestApp/lib/TestApp/Controller/Immutable.pm", ); +push(@files, "$FindBin::Bin/../t/tmp/TestApp/lib/TestApp/Controller/Immutable/HardToReload.pm") + if Catalyst::Engine::HTTP::Restarter::Watcher::DETECT_PACKAGE_COMPILATION(); + # change some files and make sure the server restarts itself NON_ERROR_RESTART: for ( 1 .. 20 ) { @@ -167,9 +179,11 @@ my $restartdirs = join ' ', map{ "-restartdirectory $app_root/lib/TestApp/Controller/$_" } qw/Action Engine/; -$pid = open $server, -"perl -I$FindBin::Bin/../lib $FindBin::Bin/../t/tmp/TestApp/script/testapp_server.pl -port $port -restart $restartdirs 2>&1 |" - or die "Unable to spawn standalone HTTP server: $!"; +$pid = open3( undef, $server, undef, + $^X, "-I$FindBin::Bin/../lib", + "$FindBin::Bin/../t/tmp/TestApp/script/testapp_server.pl", '-port', + $port, '-restart', $restartdirs ) + or die "Unable to spawn standalone HTTP server: $!"; $server->blocking( 0 ); @@ -197,7 +211,7 @@ for ( 1 .. 20 ) { sleep 0.1; if ( $count++ > 100 ) { fail "Server restarted"; - SKIP_NO_RESTART_2: { + SKIP: { skip "Server didn't restart, no sense in checking response", 1; } next MULTI_DIR_RESTART;