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=30bf17667ed5174a1368dc2f06164709a9c6c9c9;hpb=8ac4733fe6918fb1449262f56b5c371315c6cfb8;p=gitmo%2FMooseX-Daemonize.git diff --git a/t/30.with_pid_file.t b/t/30.with_pid_file.t index 30bf176..deb0917 100644 --- a/t/30.with_pid_file.t +++ b/t/30.with_pid_file.t @@ -1,53 +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'); } -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'); +use constant DEBUG => 0; + +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::Core', - 'MooseX::Daemonize::WithPidFile'; - + + with 'MooseX::Daemonize::WithPidFile'; + sub init_pidfile { MooseX::Daemonize::Pid::File->new( file => $PIDFILE ) } - + sub start { my $self = shift; - + + # 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; - - $self->pidfile->write; - + # make it easy to find with ps - $0 = 'test-app'; - $SIG{INT} = sub { - print "Got INT! Oh Noes!"; + $0 = 'test-app-2'; + $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; } @@ -68,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'); @@ -82,18 +87,35 @@ ok($p->does_file_exist, '... the PID file exists'); ok($p->is_running, '... the daemon process is running (' . $p->pid . ')'); my $pid = $p->pid; -diag `ps $pid`; -diag "-------"; -diag `ps -x | grep test-app`; -diag "-------"; -diag "killing $pid"; +if (DEBUG) { + diag `ps $pid`; + diag "-------"; + diag `ps -x | grep test-app`; + diag "-------"; + diag "killing $pid"; +} kill INT => $p->pid; -diag "killed $pid"; -sleep(2); -diag `ps $pid`; -diag "-------"; -diag `ps -x | grep test-app`; +diag "killed $pid" if DEBUG; + +# 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 "-------"; + diag `ps -x | grep test-app`; +} ok(!$p->is_running, '... the daemon process is no longer running (' . $p->pid . ')'); ok(!(-e $PIDFILE), '... the PID file has been removed'); +unlink $ENV{MX_DAEMON_STDOUT}; +unlink $ENV{MX_DAEMON_STDERR}; + +done_testing; +