1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
use strict;
use warnings;
use Test::More;
BEGIN {
plan skip_all => 'set TEST_LIGHTTPD to enable this test'
unless $ENV{TEST_LIGHTTPD};
}
use File::Path;
use FindBin;
use IO::Socket;
use Config ();
BEGIN {
eval "use FCGI";
plan skip_all => 'FCGI required' if $@;
eval "use File::Copy::Recursive";
plan skip_all => 'File::Copy::Recursive required' if $@;
eval "use Test::Harness";
plan skip_all => 'Test::Harness required' if $@;
}
use lib 't/lib';
use MakeTestApp;
my $lighttpd_bin = $ENV{LIGHTTPD_BIN} || `which lighttpd`;
chomp $lighttpd_bin;
plan skip_all => 'Please set LIGHTTPD_BIN to the path to lighttpd'
unless $lighttpd_bin && -x $lighttpd_bin;
plan tests => 1;
make_test_app;
# Create a temporary lighttpd config
my $docroot = "$FindBin::Bin/../t/tmp";
my $port = 8529;
# Clean up docroot path
$docroot =~ s{/t/\.\.}{};
my $perl5lib = join($Config::Config{path_sep}, "$docroot/../../lib", $ENV{PERL5LIB} || ());
my $conf = <<"END";
# basic lighttpd config file for testing fcgi+catalyst
server.modules = (
"mod_access",
"mod_fastcgi",
"mod_rewrite",
"mod_accesslog"
)
server.document-root = "$docroot"
server.errorlog = "$docroot/error.log"
accesslog.filename = "$docroot/access.log"
server.bind = "127.0.0.1"
server.port = $port
# Work around inability to hit http://localhost/deep/path
# without a trailing slash
url.rewrite = ( "deep/path\$" => "deep/path/" )
# catalyst app specific fcgi setup
fastcgi.server = (
"/deep/path" => (
"FastCgiTest" => (
"socket" => "$docroot/test.socket",
"check-local" => "disable",
"bin-path" => "$docroot/TestApp/script/testapp_fastcgi.pl",
"min-procs" => 1,
"max-procs" => 1,
"idle-timeout" => 20,
"bin-environment" => (
"PERL5LIB" => "$perl5lib"
)
)
)
)
END
open(my $lightconf, '>', "$docroot/lighttpd.conf")
or die "Can't open $docroot/lighttpd.conf: $!";
print {$lightconf} $conf or die "Write error: $!";
close $lightconf;
my $pid = open my $lighttpd, "$lighttpd_bin -D -f $docroot/lighttpd.conf 2>&1 |"
or die "Unable to spawn lighttpd: $!";
# wait for it to start
while ( check_port( 'localhost', $port ) != 1 ) {
diag "Waiting for server to start...";
sleep 1;
}
# run the testsuite against the server
$ENV{CATALYST_SERVER} = "http://localhost:$port/deep/path";
my @tests = (shift) || glob('t/aggregate/live_*');
eval {
runtests(@tests);
};
ok(!$@, 'lighttpd tests ran OK');
# shut it down
kill 'INT', $pid;
close $lighttpd;
# clean up
rmtree "$FindBin::Bin/../t/tmp" if -d "$FindBin::Bin/../t/tmp";
sub check_port {
my ( $host, $port ) = @_;
my $remote = IO::Socket::INET->new(
Proto => "tcp",
PeerAddr => $host,
PeerPort => $port
);
if ($remote) {
close $remote;
return 1;
}
else {
return 0;
}
}
|