# HG changeset patch # User Maxim Dounin # Date 1227105063 -10800 # Node ID b494fe5b12d11ed9ddc0d61888c89b915c193e60 # Parent b01ae969181bf221f7f7717491be52e2f14b0962 Tests: add waitforfile() and waitforsocket() functions. This functions add ability to wait for external daemons to start before running tests. diff --git a/lib/Test/Nginx.pm b/lib/Test/Nginx.pm --- a/lib/Test/Nginx.pm +++ b/lib/Test/Nginx.pm @@ -98,17 +98,45 @@ sub run(;$) { # wait for nginx to start - for (1 .. 30) { - select undef, undef, undef, 0.05; - last if -e "$self->{_testdir}/nginx.pid"; - } - - die "Can't start nginx" unless -e "$self->{_testdir}/nginx.pid"; + $self->waitforfile("$testdir/nginx.pid") + or die "Can't start nginx"; $self->{_started} = 1; return $self; } +sub waitforfile($) { + my ($self, $file) = @_; + + # wait for file to appear + + for (1 .. 30) { + return 1 if -e $file; + select undef, undef, undef, 0.1; + } + + return undef; +} + +sub waitforsocket($) { + my ($self, $peer) = @_; + + # wait for socket to accept connections + + for (1 .. 30) { + my $s = IO::Socket::INET->new( + Proto => 'tcp', + PeerAddr => $peer + ); + + return 1 if defined $s; + + select undef, undef, undef, 0.1; + } + + return undef; +} + sub stop() { my ($self) = @_; diff --git a/memcached.t b/memcached.t --- a/memcached.t +++ b/memcached.t @@ -63,6 +63,9 @@ EOF $t->run_daemon('memcached', '-l', '127.0.0.1', '-p', '8081'); $t->run(); +$t->waitforsocket('127.0.0.1:8081') + or die "Can't start memcached"; + ############################################################################### my $memd = Cache::Memcached->new(servers => [ '127.0.0.1:8081' ]);