X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F30.with_pid_file.t;h=deb09172e36144d8704353654e1470fb3f8371de;hb=f3372ec96b39b4940acc393785b63df2ac229b96;hp=135673b240dd2985959ea57b55a5c060ae873e7b;hpb=92cf56b7c3fd91568e4b964319a7862fc4f1d651;p=gitmo%2FMooseX-Daemonize.git diff --git a/t/30.with_pid_file.t b/t/30.with_pid_file.t index 135673b..deb0917 100644 --- a/t/30.with_pid_file.t +++ b/t/30.with_pid_file.t @@ -1,56 +1,56 @@ -#!/usr/bin/perl - use strict; use warnings; -use Cwd; use File::Spec::Functions; -use Test::More no_plan => 1; -use Test::Exception; +use Test::More; +use Test::Fatal; use Test::Moose; +use File::Temp qw(tempdir); + +my $dir = tempdir( CLEANUP => 1 ); + BEGIN { - use_ok('MooseX::Daemonize::Core'); + use_ok('MooseX::Daemonize::Core'); } use constant DEBUG => 0; -my $CWD = Cwd::cwd; -my $PIDFILE = catfile($CWD, 'test-app.pid'); -$ENV{MX_DAEMON_STDOUT} = catfile($CWD, 'Out.txt'); -$ENV{MX_DAEMON_STDERR} = catfile($CWD, 'Err.txt'); +my $PIDFILE = catfile($dir, 'test-app.pid'); +$ENV{MX_DAEMON_STDOUT} = catfile($dir, 'Out.txt'); +$ENV{MX_DAEMON_STDERR} = catfile($dir, 'Err.txt'); { package MyFooDaemon; use Moose; - + with 'MooseX::Daemonize::WithPidFile'; - + sub init_pidfile { MooseX::Daemonize::Pid::File->new( file => $PIDFILE ) } - + sub start { my $self = shift; - - # this tests our bad PID + + # this tests our bad PID # cleanup functionality. print "Our parent PID is " . $self->pidfile->pid . "\n" if ::DEBUG; - + $self->daemonize; return unless $self->is_daemon; - + # make it easy to find with ps $0 = 'test-app-2'; - $SIG{INT} = sub { - print "Got INT! Oh Noes!"; + $SIG{INT} = sub { + print "Got INT! Oh Noes!"; $self->pidfile->remove; exit; - }; + }; while (1) { - print "Hello from $$\n"; - sleep(10); + print "Hello from $$\n"; + sleep(10); } exit; } @@ -71,9 +71,11 @@ ok($d->has_pidfile, '... we have a pidfile value'); ok(!(-e $PIDFILE), '... the PID file does not exist yet'); -lives_ok { - $d->start; -} '... successfully daemonized from (' . $$ . ')'; +is( + exception { $d->start }, + undef, + '... successfully daemonized from (' . $$ . ')', +); my $p = $d->pidfile; isa_ok($p, 'MooseX::Daemonize::Pid::File'); @@ -94,7 +96,15 @@ if (DEBUG) { } kill INT => $p->pid; diag "killed $pid" if DEBUG; -sleep(2); + +# give the process time to be killed on slow/loaded systems +for (1..10) { + last unless kill 0 => $pid; + # sleep a little before retrying + sleep(2); +} + + if (DEBUG) { diag `ps $pid`; diag "-------"; @@ -106,3 +116,6 @@ ok(!(-e $PIDFILE), '... the PID file has been removed'); unlink $ENV{MX_DAEMON_STDOUT}; unlink $ENV{MX_DAEMON_STDERR}; + +done_testing; +