a6cf88127f2015a72201d91bc931c33957fed22a
[catagits/Catalyst-Runtime.git] / t / optional / apache-cgi.pl
1 #!perl
2
3 # Run all tests against CGI mode under Apache
4 #
5 # Note, to get this to run properly, you may need to give it the path to your
6 # httpd.conf:
7
8 # perl t/optional/apache-cgi.pl -httpd_conf /etc/apache/httpd.conf
9
10 use strict;
11 use warnings;
12
13 use Apache::Test;
14 use Apache::TestRun ();
15
16 use File::Path;
17 use File::Copy::Recursive;
18 use FindBin;
19 use IO::Socket;
20
21 # clean up
22 rmtree "$FindBin::Bin/../../t/tmp" if -d "$FindBin::Bin/../../t/tmp";
23
24 # create a TestApp and copy the test libs into it
25 mkdir "$FindBin::Bin/../../t/tmp";
26 chdir "$FindBin::Bin/../../t/tmp";
27 system "$FindBin::Bin/../../script/catalyst.pl TestApp";
28 chdir "$FindBin::Bin/../..";
29 File::Copy::Recursive::dircopy( 't/live/lib', 't/tmp/TestApp/lib' );
30
31 # remove TestApp's tests so Apache::Test doesn't try to run them
32 rmtree 't/tmp/TestApp/t';
33
34 $ENV{CATALYST_SERVER} = 'http://localhost:8529/cgi';
35
36 Apache::TestRun->new->run(@ARGV);
37
38 # clean up if the server has shut down
39 # this allows the test files to stay around if the user ran -start-httpd
40 if ( ! check_port( 'localhost', 8529 ) ) {
41     rmtree "$FindBin::Bin/../../t/tmp" if -d "$FindBin::Bin/../../t/tmp";
42 }
43
44 sub check_port {
45     my ( $host, $port ) = @_;
46
47     my $remote = IO::Socket::INET->new(
48         Proto    => "tcp",
49         PeerAddr => $host,
50         PeerPort => $port
51     );
52     if ($remote) {
53         close $remote;
54         return 1;
55     }
56     else {
57         return 0;
58     }
59 }