changeset 20:c57e8bd7bfc7

Tests: running simple daemons supplied as coderef. This will allow us to write and run fake backend servers as needed. Daemons are stopped by SIGTERM when test terminates.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 26 Sep 2008 18:24:28 +0400
parents b331c3113ebb
children a2144333aa8f
files lib/Test/Nginx.pm
diffstat 1 files changed, 29 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lib/Test/Nginx.pm
+++ b/lib/Test/Nginx.pm
@@ -64,16 +64,26 @@ sub run {
 
 	sleep 1;
 
+	$self->{_started} = 1;
 	return $self;
 }
 
 sub stop() {
 	my ($self) = @_;
 
-	# terminate nginx by SIGTERM
-	kill 15, `cat $self->{_testdir}/nginx.pid`;
+	while ($self->{_daemons} && scalar @{$self->{_daemons}}) {
+		my $p = shift @{$self->{_daemons}};
+		kill 'TERM', $p;
+		wait;
+	}
+
+	return $self unless $self->{_started};
+
+	kill 'TERM', `cat $self->{_testdir}/nginx.pid`;
 	wait;
 
+	$self->{_started} = 0;
+
 	return $self;
 }
 
@@ -96,6 +106,23 @@ sub write_file_expand($$) {
 	return $self->write_file($name, $content);
 }
 
+sub run_daemon($) {
+	my ($self, $code) = @_;
+
+	my $pid = fork();
+	die "Can't fork daemon: $!\n" unless defined $pid;
+
+	if ($pid == 0) {
+		$code->();
+		exit 0;
+	}
+
+	$self->{_daemons} = [] unless defined $self->{_daemons};
+	push @{$self->{_daemons}}, $pid;
+
+	return $self;
+}
+
 ###############################################################################
 
 sub log_out {