update distar url
[catagits/Catalyst-Runtime.git] / t / optional_threads.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5 BEGIN {
6     plan skip_all => 'set TEST_THREADS to enable this test'
7         unless $ENV{TEST_THREADS};
8 }
9
10 use FindBin;
11 use lib "$FindBin::Bin/lib";
12 use Catalyst::Test 'TestApp';
13 use Catalyst::Request;
14 use Config;
15 use HTTP::Response;
16
17 if ( $Config{useithreads} && !$ENV{CATALYST_SERVER} ) {
18     require threads;
19     plan tests => 3;
20 }
21 else {
22     if ( $ENV{CATALYST_SERVER} ) {
23         plan skip_all => 'Using remote server';
24     }
25     else {
26         plan skip_all => 'Needs a Perl with ithreads enabled';
27     }
28 }
29
30 no warnings 'redefine';
31 my $request_code = \&request;
32 *request = sub {
33     my $thr = threads->new(
34         sub { $request_code->(@_) },
35         @_
36     );
37     $thr->join;
38 };
39
40 # test that running inside a thread works ok
41 {
42     my @expected = qw[
43         TestApp::Controller::Action::Default->begin
44         TestApp::Controller::Action::Default->default
45         TestApp::View::Dump::Request->process
46         TestApp::Controller::Root->end
47     ];
48
49     my $expected = join( ", ", @expected );
50
51     ok( my $response = request('http://localhost/action/default'), 'Request' );
52     ok( $response->is_success, 'Response Successful 2xx' );
53     is( $response->header('X-Catalyst-Executed'), $expected, 'Executed actions' );
54 }