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