Commit | Line | Data |
600ade88 |
1 | use strict; |
2 | use warnings; |
3 | |
4853fb50 |
4 | use Test::More; |
5 | BEGIN { |
6 | plan skip_all => 'set TEST_LIGHTTPD to enable this test' |
7 | unless $ENV{TEST_LIGHTTPD}; |
8 | } |
9 | |
600ade88 |
10 | use File::Path; |
600ade88 |
11 | use FindBin; |
12 | use IO::Socket; |
f3d2ec61 |
13 | use Config (); |
600ade88 |
14 | |
8ae46e98 |
15 | BEGIN { |
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 |
26 | use lib 't/lib'; |
27 | use MakeTestApp; |
357cc417 |
28 | |
b71fcc0f |
29 | my $lighttpd_bin = $ENV{LIGHTTPD_BIN} || `which lighttpd`; |
30 | chomp $lighttpd_bin; |
31 | |
ec904766 |
32 | plan skip_all => 'Please set LIGHTTPD_BIN to the path to lighttpd' |
381e2cab |
33 | unless $lighttpd_bin && -x $lighttpd_bin; |
600ade88 |
34 | |
e9146255 |
35 | my $fix_scriptname = ''; |
36 | if (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 |
42 | plan tests => 1; |
43 | |
8ae46e98 |
44 | # this creates t/tmp/TestApp |
45 | make_test_app; |
600ade88 |
46 | |
47 | # Create a temporary lighttpd config |
48 | my $docroot = "$FindBin::Bin/../t/tmp"; |
49 | my $port = 8529; |
50 | |
51 | # Clean up docroot path |
f3d2ec61 |
52 | $docroot =~ s{/t/\.\.}{}; |
53 | |
54 | my $perl5lib = join($Config::Config{path_sep}, "$docroot/../../lib", $ENV{PERL5LIB} || ()); |
600ade88 |
55 | |
3f5f2699 |
56 | my $conf = <<"END"; |
600ade88 |
57 | # basic lighttpd config file for testing fcgi+catalyst |
58 | server.modules = ( |
59 | "mod_access", |
60 | "mod_fastcgi", |
61 | "mod_accesslog" |
62 | ) |
63 | |
64 | server.document-root = "$docroot" |
65 | |
66 | server.errorlog = "$docroot/error.log" |
67 | accesslog.filename = "$docroot/access.log" |
68 | |
3fe34996 |
69 | server.bind = "127.0.0.1" |
600ade88 |
70 | server.port = $port |
71 | |
72 | # catalyst app specific fcgi setup |
73 | fastcgi.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 |
89 | END |
600ade88 |
90 | |
88e5a8b0 |
91 | open(my $lightconf, '>', "$docroot/lighttpd.conf") |
357cc417 |
92 | or die "Can't open $docroot/lighttpd.conf: $!"; |
3f5f2699 |
93 | print {$lightconf} $conf or die "Write error: $!"; |
94 | close $lightconf; |
600ade88 |
95 | |
88e5a8b0 |
96 | my $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 |
100 | while ( 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 |
108 | my @tests = (shift) || glob('t/aggregate/live_*'); |
357cc417 |
109 | eval { |
110 | runtests(@tests); |
111 | }; |
112 | ok(!$@, 'lighttpd tests ran OK'); |
600ade88 |
113 | |
114 | # shut it down |
115 | kill 'INT', $pid; |
116 | close $lighttpd; |
117 | |
118 | # clean up |
119 | rmtree "$FindBin::Bin/../t/tmp" if -d "$FindBin::Bin/../t/tmp"; |
120 | |
600ade88 |
121 | sub 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 | } |