hi all...
has anyone given any thought to adding an API whereby a test can issue a server restart? I'd like to be able to do this in order to test code that takes action when the server is restarted (clearing caches, updating Last-Modified, etc), but I'm sure there could be other uses if the API gets written in.
I whipped up something quick that sorta works on unix (2.0 seem to be ok on linux, but 1.3 has trouble when request.t immediately follows ping.t - maybe not checking something right), but if people think it's a good idea then this could serve as a starting point for something more portable (Win32, etc)...
--Geoff
Index: t/ping.t =================================================================== RCS file: /home/cvspublic/httpd-test/perl-framework/Apache-Test/t/ping.t,v retrieving revision 1.2 diff -u -r1.2 ping.t --- t/ping.t 10 Sep 2001 17:12:37 -0000 1.2 +++ t/ping.t 28 Oct 2002 20:25:17 -0000 @@ -3,7 +3,7 @@
use Apache::Test;
-plan tests => 3; +plan tests => 4;
my $config = Apache::Test::config();
@@ -14,4 +14,6 @@ ok $server;
ok $server->ping; + +ok $server->restart;
Index: lib/Apache/TestServer.pm =================================================================== RCS file: /home/cvspublic/httpd-test/perl-framework/Apache-Test/lib/Apache/TestServer.pm,v retrieving revision 1.60 diff -u -r1.60 TestServer.pm --- lib/Apache/TestServer.pm 1 Jul 2002 08:11:50 -0000 1.60 +++ lib/Apache/TestServer.pm 28 Oct 2002 20:25:17 -0000 @@ -511,6 +511,32 @@ return 0; }
+sub restart { + my $self = shift; + my $pid = $self->pid; + + if (Apache::TestConfig::WIN32) { + # do something Win32 specific here + } + else { + # unix variant + if (kill HUP => $pid) { + warning "server $self->{name} restarted"; + } + else { + error "kill -HUP $pid failed: $!"; + $self->failed_msg("failed to restart server!"); + return 0; + } + } + + my $timeout = 60; # secs XXX: make a constant? + + return 1 if $self->wait_till_is_up($timeout); + + $self->failed_msg("failed to restart server!"); + return 0; +}
# wait till the server is up and return 1 # if the waiting times out returns 0