use base 'Catalyst::Controller';
use YAML;
-sub fork : Local {
+sub system : Local {
my ($self, $c, $ls) = @_;
my ($result, $code) = (undef, 1);
$c->response->body(Dump({result => $result, code => $code}));
}
-
+
+sub fork : Local {
+ my ($self, $c) = @_;
+ my $pid;
+ my $x = 0;
+
+ if($pid = fork()){
+ $x = "ok";
+ }
+ else {
+ exit(0);
+ }
+
+ waitpid $pid,0 or die;
+
+ $c->response->body(Dump({pid => $pid, result => $x}));
+}
+
1;
use Catalyst::Test qw(TestApp);
plan 'skip_all' if !-e '/bin/ls'; # see if /bin/ls exists
-plan tests => 8; # otherwise
+plan tests => 13; # otherwise
{
- fork:
- ok(my $result = get('/fork/fork/%2Fbin%2Fls'), 'get /fork//bin/ls');
+ system:
+ ok(my $result = get('/fork/system/%2Fbin%2Fls'), 'system');
my @result = split /$/m, $result;
$result = join q{}, @result[-4..-1];
{
backticks:
- ok(my $result = get('/fork/backticks/%2Fbin%2Fls'), 'get /fork//bin/ls');
+ ok(my $result = get('/fork/backticks/%2Fbin%2Fls'), '`backticks`');
my @result = split /$/m, $result;
$result = join q{}, @result[-4..-1];
is($result_ref->{code}, 0, 'exited successfully');
like($result_ref->{result}, qr{^/bin/ls[^:]}, 'contains ^/bin/ls$');
}
+{
+ fork:
+ ok(my $result = get('/fork/fork'), 'fork');
+ my @result = split /$/m, $result;
+ $result = join q{}, @result[-4..-1];
+
+ my $result_ref = eval { Load($result) };
+ ok($result_ref, 'is YAML');
+ isnt($result_ref->{pid}, 0, q{fork's "pid" wasn't 0});
+ isnt($result_ref->{pid}, $$, 'fork got a new pid');
+ is($result_ref->{result}, 'ok', 'fork was effective');
+}