# HG changeset patch # User Maxim Dounin # Date 1222439068 -14400 # Node ID c57e8bd7bfc705e93906dd93c005ff2ef6f66881 # Parent b331c3113ebbd1baf11d64ea010c98158a23f087 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 --- 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 {