1 package Test::MooseX::Daemonize;
9 our $AUTHORITY = 'cpan:PERIGRIN';
17 Sub::Exporter::setup_exporter(
20 groups => { default => \@exports }
25 our $Test = Test::Builder->new;
28 my ( $daemon, $msg ) = @_;
29 unless ( my $pid = fork ) {
34 sleep(1); # Punt on sleep time, 1 seconds should be enough
35 $Test->ok( $daemon->pidfile->does_file_exist, $msg )
37 'Pidfile (' . $daemon->pidfile->file . ') not found.' );
41 sub check_test_output {
43 open( my $stdout_in, '<', $app->test_output )
44 or die "can't open test output: $!";
45 while ( my $line = <$stdout_in> ) {
48 if ( $line =~ /\A((not\s+)?ok)(?:\s+-)(?:\s+(.*))\z/ ) {
49 my ( $status, $not, $text ) = ( $1, $2, $3 );
52 # We don't just call ok(!$not), because that generates diagnostics of
53 # its own for failures. We only want the diagnostics from the child.
54 my $num = $Test->current_test;
55 $Test->current_test( ++$num );
56 $Test->_print("$status $num - $text\n");
58 elsif ( $line =~ s/\A#\s?// ) {
62 $Test->_print_diag("$label: $line (unrecognised)\n");
67 package Test::MooseX::Daemonize::Testable;
76 after daemonize => sub {
77 $Test->use_numbers(0);
79 open my $out, '>', $_[0]->test_output or die "Cannot open test output: $!";
80 my $fileno = fileno $out;
81 open STDERR, ">&=", $fileno
82 or die "Can't redirect STDERR";
84 open STDOUT, ">&=", $fileno
85 or die "Can't redirect STDOUT";
88 $Test->failure_output($out);
89 $Test->todo_output($out);
99 Test::MooseX::Daemonize - Tool to help test MooseX::Daemonize applications
103 This document describes MooseX::Daemonize version 0.0.1
107 use File::Spec::Functions;
108 use File::Temp qw(tempdir);
110 my $dir = tempdir( CLEANUP => 1 );
112 ## Try to make sure we are in the test directory
114 my $file = catfile( $dir, "im_alive" );
115 my $daemon = FileMaker->new( pidbase => $dir, filename => $file );
117 daemonize_ok( $daemon, 'child forked okay' );
118 ok( -e $file, "$file exists" );
122 This module provides some basic Test::Builder compatible test methods to
123 use when writing tests for you MooseX::Daemonize based modules.
125 =head1 EXPORTED FUNCTIONS
129 =item B<daemonize_ok ( $daemon, ?$msg )>
131 This will attempt to daemonize your C<$daemon> returning ok on
132 success and not ok on failure.
134 =item B<check_test_output ( $daemon )>
136 This is expected to be used with a C<$daemon> which does the
137 B<Test::MooseX::Daemonize::Testable> role (included in this package
138 see the source for more info). It will collect the test output
139 from your daemon and apply it in the parent process by mucking
140 around with L<Test::Builder> stuff, again, read the source for
141 more info. If we get time we will document this more thoroughly.
145 =head1 INCOMPATIBILITIES
149 =head1 BUGS AND LIMITATIONS
151 No bugs have been reported.
153 Please report any bugs or feature requests to
154 C<bug-acme-dahut-call@rt.cpan.org>, or through the web interface at
155 L<http://rt.cpan.org>.
163 Chris Prather C<< <perigrin@cpan.org> >>
165 =head1 LICENCE AND COPYRIGHT
167 Copyright (c) 2007-2008, Chris Prather C<< <perigrin@cpan.org> >>. All rights reserved.
169 This module is free software; you can redistribute it and/or
170 modify it under the same terms as Perl itself. See L<perlartistic>.
172 =head1 DISCLAIMER OF WARRANTY
174 BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
175 FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
176 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
177 PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
178 EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
179 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
180 ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
181 YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
182 NECESSARY SERVICING, REPAIR, OR CORRECTION.
184 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
185 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
186 REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE
187 LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
188 OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
189 THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
190 RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
191 FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
192 SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF