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.
diff --git a/lib/Test/Nginx.pm b/lib/Test/Nginx.pm
index 1aeae8f..1f9e300 100644
--- a/lib/Test/Nginx.pm
+++ b/lib/Test/Nginx.pm
@@ -64,16 +64,26 @@
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 @@
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 {