[Catalyst] IO::Pipe and the Catalyst Server

Bill Moseley moseley at hank.org
Thu Feb 26 20:02:13 GMT 2009


Hi Florian,

You asked for a test. Did this get applied?


On Thu, Feb 05, 2009 at 09:25:34AM -0800, Bill Moseley wrote:
> On Thu, Feb 05, 2009 at 04:28:57PM +0100, Florian Ragwitz wrote:
> > On Thu, Feb 05, 2009 at 07:10:07AM -0800, Bill Moseley wrote:
> > > Same problem.
> > 
> > Would you mind preparing a testcase for this?
> 
> I can try.  See attached diff against svn 9215.
> 
> $ prove -vl t/live_fork.t 
> t/live_fork....
> 1..15
> TestApp is trying to use NEXT, which is deprecated. Please see the Class::C3::Adopt::NEXT documentation for details at /home/moseley/cat_5.8/t/lib/Catalyst/Plugin/Test/Plugin.pm line 23
> ok 1 - system
> ok 2 - is YAML
> ok 3 - exited OK
> ok 4 - `backticks`
> ok 5 - is YAML
> ok 6 - exited successfully
> ok 7 - contains ^/bin/ls$
> ok 8 - contains two newlines
> ok 9 - fork
> ok 10 - is YAML
> ok 11 - fork's "pid" wasn't 0
> ok 12 - fork got a new pid
> ok 13 - fork was effective
> ok 14 - io_pipe
> ok 15 - io_pipe returned data from handle
> ok
> All tests successful.
> Files=1, Tests=15,  1 wallclock secs ( 0.02 usr  0.01 sys +  0.98 cusr  0.06 csys =  1.07 CPU)
> Result: PASS
> 
> 
> 
> > 
> > TestApp::Controller::Fork / t/live_fork.t already has similar tests. You
> > can run them against the dev server using t/optional_http-server.t.
> 
> Should App::Prove be listed as a dependency in test_requires?
> (although test_requires doesn't seem to work like I think it should.  ;)
> 
> 
> Not 100% clear on how to run it but here's my attempt:
> (trimmed a bit):
> 
> $ TEST_HTTP=1 REMOTE_FORK=1 perl -Ilib t/optional_http-server.t t/live_fork.t 
> 1..1
> created "TestApp"
> created "TestApp/script"
> [...]
> Waiting for server to start...
> 1..15
> ok 1 - system
> Use of uninitialized value in join or string at t/live_fork.t line 32.
> ok 2 - is YAML
> ok 3 - exited OK
> ok 4 - `backticks`
> ok 5 - is YAML
> ok 6 - exited successfully
> ok 7 - contains ^/bin/ls$
> ok 8 - contains two newlines
> ok 9 - fork
> ok 10 - is YAML
> ok 11 - fork's "pid" wasn't 0
> ok 12 - fork got a new pid
> ok 13 - fork was effective
> ok 14 - io_pipe
> not ok 15 - io_pipe returned data from handle
> #   Failed test 'io_pipe returned data from handle'
> #   at t/live_fork.t line 70.
> #          got: 'FATAL ERROR: Caught exception in TestApp::Controller::Fork->io_pipe "Failed read from IO::Pipe handle at /home/moseley/cat_5.8/t/tmp/TestApp/script/../lib/TestApp/Controller/Fork.pm line 72."'
> #     expected: 'ok'
> # Looks like you failed 1 test of 15.
> not ok 1 - live tests
> #   Failed test 'live tests'
> #   at t/optional_http-server.t line 69.
> #          got: '256'
> #     expected: '0'
> # Looks like you failed 1 test of 1.
> 
> 
> -- 
> Bill Moseley
> moseley at hank.org
> Sent from my iMutt
> 

> Index: t/lib/TestApp/Controller/Fork.pm
> ===================================================================
> --- t/lib/TestApp/Controller/Fork.pm	(revision 9215)
> +++ t/lib/TestApp/Controller/Fork.pm	(working copy)
> @@ -58,4 +58,21 @@
>      $c->response->body(Dump({pid => $pid, result => $x}));
>  }
>  
> +
> +# Test should only call if it knows IO::Pipe exist and
> +# /bin/ls is available
> +
> +sub io_pipe : Local {
> +    my ($self, $c) = @_;
> +
> +    eval 'require IO::Pipe' || die 'IO::Pipe failed require: ' . $@;
> +
> +    my $pipe = IO::Pipe->new;
> +    $pipe->reader( '/bin/ls' );
> +    my $line = <$pipe> || die 'Failed read from IO::Pipe handle';
> +    $c->response->body( 'ok' );
> +}
> +
> +
> +
>  1;
> Index: t/live_fork.t
> ===================================================================
> --- t/live_fork.t	(revision 9215)
> +++ t/live_fork.t	(working copy)
> @@ -23,7 +23,7 @@
>  plan skip_all => 'Skipping fork tests: no /bin/ls'
>      if !-e '/bin/ls'; # see if /bin/ls exists
>  
> -plan tests => 13; # otherwise
> +plan tests => 15; # otherwise
>  
>  {
>    system:
> @@ -60,3 +60,12 @@
>      isnt($result_ref->{pid}, $$, 'fork got a new pid');
>      is($result_ref->{result}, 'ok', 'fork was effective');
>  }
> +
> +SKIP: {
> +  io_pipe:
> +    eval 'require IO::Pipe'
> +        || skip "IO::Pipe not installed", 2;
> +
> +    ok(my $result = get( '/fork/io_pipe'), 'io_pipe' );
> +    is( $result, 'ok', 'io_pipe returned data from handle' );
> +}

> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/


-- 
Bill Moseley
moseley at hank.org
Sent from my iMutt




More information about the Catalyst mailing list