You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by st...@apache.org on 2003/12/23 01:31:03 UTC
cvs commit: modperl-2.0/t/hooks/TestHooks startup.pm
stas 2003/12/22 16:31:03
Added: t/hooks startup.t
t/hooks/TestHooks startup.pm
Log:
not a day without a new test:
- test PerlPostConfigHandler and PerlOpenLogsHandler phases
- also test that we can run things on vhost entries from these phases
Revision Changes Path
1.1 modperl-2.0/t/hooks/startup.t
Index: startup.t
===================================================================
use strict;
use warnings FATAL => 'all';
use Apache::Test;
use Apache::TestUtil;
use Apache::TestRequest;
my $config = Apache::Test::config();
my $path = Apache::TestRequest::module2path('TestHooks::startup');
my @modules = qw(default TestHooks::startup);
plan tests => scalar @modules;
my $expected = join '', "open_logs ok\n", "post_config ok\n";
for my $module (sort @modules) {
Apache::TestRequest::module($module);
my $hostport = Apache::TestRequest::hostport($config);
t_debug("connecting to $hostport");
ok t_cmp($expected,
GET_BODY_ASSERT("http://$hostport/$path"),
"testing PostConfig");
}
1.1 modperl-2.0/t/hooks/TestHooks/startup.pm
Index: startup.pm
===================================================================
package TestHooks::startup;
# test PerlPostConfigHandler and PerlOpenLogsHandler phases
# also test that we can run things on vhost entries from these phases
use strict;
use warnings FATAL => 'all';
use Apache::TestUtil;
use Apache::Test;
use Apache::TestTrace;
use APR::Table;
use Apache::Server ();
use Apache::ServerUtil ();
use Apache::RequestRec ();
use Apache::RequestIO ();
use File::Spec::Functions qw(catfile catdir);
use File::Path qw(mkpath);
use Apache::Const -compile => 'OK';
my $dir = catdir Apache::Test::config()->{vars}->{documentroot}, 'hooks',
'startup';
sub open_logs {
my($conf_pool, $log_pool, $temp_pool, $s) = @_;
# main server
run("open_logs", $s);
for (my $vhost_s = $s->next; $vhost_s; $vhost_s = $vhost_s->next) {
my $port = $vhost_s->port;
my $val = $vhost_s->dir_config->{PostConfig};
# we have one vhost that we want to run open_logs for
next unless $val && $val eq 'VHost';
run("open_logs", $vhost_s);
}
Apache::OK;
}
sub post_config {
my($conf_pool, $log_pool, $temp_pool, $s) = @_;
# main server
run("post_config", $s);
for (my $vhost_s = $s->next; $vhost_s; $vhost_s = $vhost_s->next) {
my $port = $vhost_s->port;
my $val = $vhost_s->dir_config->{PostConfig};
# we have one vhost that we want to run post_config for
next unless $val && $val eq 'VHost';
run("post_config", $vhost_s);
}
Apache::OK;
}
sub run {
my($phase, $s) = @_;
my $val = $s->dir_config->{PostConfig} or die "Can't read PostConfig var";
my $port = $s->port;
my $file = catfile $dir, "$phase-$port";
mkpath $dir, 0, 0755;
open my $fh, ">$file" or die "can't open $file: $!";
print $fh $val;
close $fh;
debug "Phase $phase is completed for server at port $port";
}
sub handler {
my $r = shift;
$r->content_type('text/plain');
my $s = $r->server;
my $expected = $s->dir_config->{PostConfig}
or die "Can't read PostConfig var";
my $port = $s->port;
for my $phase (qw(open_logs post_config)) {
my $file = catfile $dir, "$phase-$port";
open my $fh, "$file" or die "can't open $file: $!";
my $received = <$fh> || '';
close $fh;
# cleanup
unlink $file;
if ($expected eq $received) {
$r->print("$phase ok\n");
} else {
warn "phase: $phase\n";
warn "port: $port\n";
warn "expected: $expected\n";
warn "received: $received\n";
}
}
Apache::OK;
}
1;
__DATA__
<NoAutoConfig>
<VirtualHost TestHooks::startup>
PerlSetVar PostConfig VHost
PerlModule TestHooks::startup
PerlPostConfigHandler TestHooks::startup::post_config
PerlOpenLogsHandler TestHooks::startup::open_logs
<Location /TestHooks__startup>
SetHandler modperl
PerlResponseHandler TestHooks::startup
</Location>
</VirtualHost>
PerlSetVar PostConfig Main
PerlModule TestHooks::startup
PerlPostConfigHandler TestHooks::startup::post_config
PerlOpenLogsHandler TestHooks::startup::open_logs
<Location /TestHooks__startup>
SetHandler modperl
PerlResponseHandler TestHooks::startup
</Location>
</NoAutoConfig>