File: optional_lighttpd-fastcgi-non-root.t

package info (click to toggle)
libcatalyst-perl 5.90128-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 2,988 kB
  • sloc: perl: 10,908; makefile: 7
file content (132 lines) | stat: -rw-r--r-- 3,010 bytes parent folder | download | duplicates (3)
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;
    }
}