You are viewing a plain text version of this content. The canonical link for it is here.
Posted to test-dev@httpd.apache.org by Geoffrey Young <ge...@modperlcookbook.org> on 2002/10/28 21:25:58 UTC

testing server restarts?

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