X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F01.filecreate.t;h=127c0e830a1382688a37ded84ce8e32c9c19d6c0;hb=f3372ec96b39b4940acc393785b63df2ac229b96;hp=e6a161b1c1777ed11814aac3e511da880e6b2763;hpb=7d7115e52be1d2728ff32b540ad4077f2223d515;p=gitmo%2FMooseX-Daemonize.git diff --git a/t/01.filecreate.t b/t/01.filecreate.t index e6a161b..127c0e8 100644 --- a/t/01.filecreate.t +++ b/t/01.filecreate.t @@ -1,9 +1,23 @@ -use Test::More tests => 2; -use Test::MooseX::Daemonize; +use strict; +use warnings; +use File::Spec::Functions; -## Since a daemon will not be able to print terminal output, we -## have a test daemon create a file, and another process test for -## its existence. +use Test::More tests => 29; +use Test::Moose; + +use File::Temp qw(tempdir); + +my $dir = tempdir( CLEANUP => 1 ); + +BEGIN { + use_ok('MooseX::Daemonize'); +} + +use constant DEBUG => 0; + +my $FILENAME = catfile($dir, "im_alive"); +$ENV{MX_DAEMON_STDOUT} = catfile($dir, 'Out.txt'); +$ENV{MX_DAEMON_STDERR} = catfile($dir, 'Err.txt'); { @@ -13,29 +27,86 @@ use Test::MooseX::Daemonize; has filename => ( isa => 'Str', is => 'ro' ); - after start => sub { $_[0]->create_file( $_[0]->filename ) }; + after start => sub { + my $self = shift; + if ($self->is_daemon) { + $self->create_file( $self->filename ); + } + }; sub create_file { my ( $self, $file ) = @_; - open( FILE, ">$file" ) || die $!; - close(FILE); + open( my $FILE, ">$file" ) || die $!; + close($FILE); + sleep 1 while 1; } +} + +my $app = FileMaker->new( + pidbase => "$dir/subdir", + filename => $FILENAME, +); +isa_ok($app, 'FileMaker'); +does_ok($app, 'MooseX::Daemonize'); +does_ok($app, 'MooseX::Daemonize::WithPidFile'); +does_ok($app, 'MooseX::Daemonize::Core'); + +isa_ok($app->pidfile, 'MooseX::Daemonize::Pid::File'); + +is($app->pidfile->file, catfile("$dir/subdir", "filemaker.pid"), '... got the right PID file path'); +ok(not(-e $app->pidfile->file), '... our pidfile does not exist'); + +ok(!$app->status, '... the daemon is running'); +is($app->exit_code, MooseX::Daemonize->ERROR, '... got the right error code'); - no Moose; +ok($app->stop, '... the app will stop cause its not running'); +is($app->status_message, "Not running", '... got the correct status message'); +is($app->exit_code, MooseX::Daemonize->OK, '... got the right error code'); + +diag $$ if DEBUG; + +ok($app->start, '... daemon started'); +is($app->status_message, "Start succeeded", '... got the correct status message'); +is($app->exit_code, MooseX::Daemonize->OK, '... got the right error code'); + +sleep(1); # give it a second ... + +ok(-e $app->pidfile->file, '... our pidfile exists' ); + +my $pid = $app->pidfile->pid; +isnt($pid, $$, '... the pid in our pidfile is correct (and not us)'); + +ok($app->status, '... the daemon is running'); +is($app->status_message, "Daemon is running with pid ($pid)", '... got the correct status message'); +is($app->exit_code, MooseX::Daemonize->OK, '... got the right error code'); + +if (DEBUG) { + diag `ps $pid`; + diag "Status is: " . $app->status_message; } +ok( -e $app->filename, "file exists" ); -package main; -use Cwd; +if (DEBUG) { + diag `ps $pid`; + diag "Status is: " . $app->status_message; +} -## Try to make sure we are in the test directory -chdir 't' if ( Cwd::cwd() !~ m|/t$| ); -my $cwd = Cwd::cwd(); +ok( $app->stop, '... app stopped' ); +is($app->status_message, "Stop succeeded", '... got the correct status message'); +is($app->exit_code, MooseX::Daemonize->OK, '... got the right error code'); -my $file = join( '/', $cwd, 'im_alive' ); -my $daemon = FileMaker->new( pidbase => '.', filename => $file ); +ok(!$app->status, '... the daemon is no longer running'); +is($app->status_message, "Daemon is not running with pid ($pid)", '... got the correct status message'); +is($app->exit_code, MooseX::Daemonize->ERROR, '... got the right error code'); + +if (DEBUG) { + diag `ps $pid`; + diag "Status is: " . $app->status_message; +} -daemonize_ok( $daemon, 'child forked okay' ); -ok( -e $file, "$file exists" ); -unlink($file); +ok( not(-e $app->pidfile->file) , '... pidfile gone' ); +unlink $FILENAME; +unlink $ENV{MX_DAEMON_STDOUT}; +unlink $ENV{MX_DAEMON_STDERR};