convert test checking encoding set in config to checking encoding set by plugin
[catagits/Catalyst-Runtime.git] / t / live_fork.t
1 # live_fork.t
2 # Copyright (c) 2006 Jonathan Rockway <jrockway@cpan.org>
3
4 =head1 SYNOPSIS
5
6 Tests if Catalyst can fork/exec other processes successfully
7
8 =cut
9 use strict;
10 use warnings;
11 use Test::More;
12 use FindBin;
13 use lib "$FindBin::Bin/lib";
14 use Catalyst::Test qw(TestApp);
15 use JSON::MaybeXS qw(decode_json);
16
17 plan skip_all => 'Using remote server (and REMOTE_FORK not set)'
18     if $ENV{CATALYST_SERVER} && !$ENV{REMOTE_FORK};
19
20 plan skip_all => 'Skipping fork tests: no /bin/ls'
21     if !-e '/bin/ls'; # see if /bin/ls exists
22
23 {
24     ok(my $result = get('/fork/system/%2Fbin%2Fls'), 'system');
25
26     if (my $result_ref = result_ok($result)) {
27         ok($result_ref, 'is JSON');
28         is($result_ref->{result}, 0, 'exited OK');
29     }
30 }
31
32 {
33     ok(my $result = get('/fork/backticks/%2Fbin%2Fls'), '`backticks`');
34
35     if (my $result_ref = result_ok($result)) {
36         ok($result_ref, 'is JSON');
37         is($result_ref->{code}, 0, 'exited successfully');
38         like($result_ref->{result}, qr{^/bin/ls[^:]}, 'contains ^/bin/ls$');
39         like($result_ref->{result}, qr{\n.*\n}m, 'contains two newlines');
40     }
41 }
42
43 {
44     ok(my $result = get('/fork/fork'), 'fork');
45
46     if (my $result_ref = result_ok($result)) {
47         ok($result_ref, 'is JSON');
48         isnt($result_ref->{pid}, 0, q{fork's "pid" wasn't 0});
49         isnt($result_ref->{pid}, $$, 'fork got a new pid');
50         is($result_ref->{result}, 'ok', 'fork was effective');
51     }
52 }
53
54 sub result_ok {
55     my $result = shift;
56
57     unlike( $result, qr/FATAL/, 'result is not an error' )
58         or return;
59
60     $result =~ s/\r\n|\r/\n/g;
61
62     return eval { decode_json($result) };
63 }
64
65 done_testing;