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