Commit | Line | Data |
5dbf12d1 |
1 | use strict; |
2 | use warnings; |
3 | use Test::More; |
4 | use FindBin qw/$Bin/; |
5 | use lib "$Bin/../lib"; |
6 | use TestApp; |
7 | use Catalyst::Engine::CGI; |
8 | |
eb3abf96 |
9 | # mod_rewrite to app root for non / based app |
5dbf12d1 |
10 | { |
f238bbd9 |
11 | my $r = get_req (0, |
5dbf12d1 |
12 | REDIRECT_URL => '/comics/', |
5dbf12d1 |
13 | SCRIPT_NAME => '/comics/dispatch.cgi', |
14 | REQUEST_URI => '/comics/', |
15 | ); |
632e0eab |
16 | is ''.$r->uri, 'http://www.foo.com/comics/', 'uri is correct'; |
17 | is ''.$r->base, 'http://www.foo.com/comics/', 'base is correct'; |
eb3abf96 |
18 | } |
19 | |
20 | # mod_rewrite to sub path under app root for non / based app |
21 | { |
f238bbd9 |
22 | my $r = get_req (0, |
eb3abf96 |
23 | PATH_INFO => '/foo/bar.gif', |
24 | REDIRECT_URL => '/comics/foo/bar.gif', |
25 | SCRIPT_NAME => '/comics/dispatch.cgi', |
26 | REQUEST_URI => '/comics/foo/bar.gif', |
27 | ); |
28 | is ''.$r->uri, 'http://www.foo.com/comics/foo/bar.gif'; |
29 | is ''.$r->base, 'http://www.foo.com/comics/'; |
30 | } |
31 | |
32 | # Standard CGI hit for non / based app |
33 | { |
f238bbd9 |
34 | my $r = get_req (0, |
eb3abf96 |
35 | PATH_INFO => '/static/css/blueprint/screen.css', |
36 | SCRIPT_NAME => '/~bobtfish/Gitalist/script/gitalist.cgi', |
37 | REQUEST_URI => '/~bobtfish/Gitalist/script/gitalist.cgi/static/css/blueprint/screen.css', |
38 | ); |
39 | is ''.$r->uri, 'http://www.foo.com/~bobtfish/Gitalist/script/gitalist.cgi/static/css/blueprint/screen.css'; |
40 | is ''.$r->base, 'http://www.foo.com/~bobtfish/Gitalist/script/gitalist.cgi/'; |
41 | } |
53f4422a |
42 | # / %2F %252F escaping case. |
43 | { |
f238bbd9 |
44 | my $r = get_req (1, |
53f4422a |
45 | PATH_INFO => '/%2F/%2F', |
46 | SCRIPT_NAME => '/~bobtfish/Gitalist/script/gitalist.cgi', |
47 | REQUEST_URI => '/~bobtfish/Gitalist/script/gitalist.cgi/%252F/%252F', |
48 | ); |
632e0eab |
49 | is ''.$r->uri, 'http://www.foo.com/~bobtfish/Gitalist/script/gitalist.cgi/%252F/%252F', 'uri correct'; |
50 | is ''.$r->base, 'http://www.foo.com/~bobtfish/Gitalist/script/gitalist.cgi/', 'base correct'; |
53f4422a |
51 | } |
eb3abf96 |
52 | |
b760ac3d |
53 | # Using rewrite rules to ask for a sub-path in your app. |
54 | # E.g. RewriteRule ^(.*)$ /path/to/fastcgi/domainprofi.fcgi/iframeredirect$1 [L,NS] |
55 | { |
f238bbd9 |
56 | my $r = get_req (0, |
b760ac3d |
57 | PATH_INFO => '/iframeredirect/info', |
58 | SCRIPT_NAME => '', |
59 | REQUEST_URI => '/info', |
60 | ); |
61 | is ''.$r->uri, 'http://www.foo.com/iframeredirect/info'; |
62 | is ''.$r->base, 'http://www.foo.com/'; |
63 | } |
64 | |
f54950f5 |
65 | # nginx example from espent with path /"foo" |
66 | { |
f238bbd9 |
67 | my $r = get_req (0, |
f54950f5 |
68 | PATH_INFO => '"foo"', |
69 | SCRIPT_NAME => '/', |
70 | REQUEST_URI => '/%22foo%22', |
71 | ); |
72 | is ''.$r->path, '%22foo%22'; |
73 | is ''.$r->uri, 'http://www.foo.com/%22foo%22'; |
74 | is ''.$r->base, 'http://www.foo.com/'; |
75 | } |
b760ac3d |
76 | |
a9a405db |
77 | # nginx example from espent with path /"foo" and the app based at /oslobilder |
78 | { |
f238bbd9 |
79 | my $r = get_req (1, |
a9a405db |
80 | PATH_INFO => 'oslobilder/"foo"', |
81 | SCRIPT_NAME => '/oslobilder/', |
82 | REQUEST_URI => '/oslobilder/%22foo%22', |
83 | ); |
632e0eab |
84 | is ''.$r->path, '%22foo%22', 'path correct'; |
85 | is ''.$r->uri, 'http://www.foo.com/oslobilder/%22foo%22', 'uri correct'; |
86 | is ''.$r->base, 'http://www.foo.com/oslobilder/', 'base correct'; |
a9a405db |
87 | } |
88 | |
a4900102 |
89 | # CGI hit on IIS for non / based app |
90 | { |
fef8c827 |
91 | my $r = get_req(0, |
a4900102 |
92 | SERVER_SOFTWARE => 'Microsoft-IIS/6.0', |
93 | PATH_INFO => '/bobtfish/Gitalist/script/gitalist.cgi/static/css/blueprint/screen.css', |
94 | SCRIPT_NAME => '/bobtfish/Gitalist/script/gitalist.cgi', |
95 | PATH_TRANSLATED => |
96 | 'C:\\Inetpub\\vhosts\\foo.com\\httpdocs\\bobtfish\\Gitalist\\script\\gitalist.cgi\\static\\css\\blueprint\\screen.css', |
97 | ); |
98 | is ''.$r->uri, 'http://www.foo.com/bobtfish/Gitalist/script/gitalist.cgi/static/css/blueprint/screen.css'; |
99 | is ''.$r->base, 'http://www.foo.com/bobtfish/Gitalist/script/gitalist.cgi/'; |
100 | } |
a9a405db |
101 | |
46b58c90 |
102 | { |
f238bbd9 |
103 | my $r = get_req (0, |
46b58c90 |
104 | PATH_INFO => '/auth/login', |
105 | SCRIPT_NAME => '/tx', |
106 | REQUEST_URI => '/login', |
107 | ); |
632e0eab |
108 | is ''.$r->path, 'auth/login', 'path correct'; |
109 | is ''.$r->uri, 'http://www.foo.com/tx/auth/login', 'uri correct'; |
110 | is ''.$r->base, 'http://www.foo.com/tx/', 'base correct'; |
46b58c90 |
111 | } |
a9a405db |
112 | |
4dfe7bde |
113 | # test req->base and c->uri_for work correctly after an internally redirected request |
114 | # (i.e. REDIRECT_URL set) when the PATH_INFO contains a regex |
115 | { |
116 | my $path = '/engine/request/uri/Rx(here)'; |
f238bbd9 |
117 | my $r = get_req (0, |
4dfe7bde |
118 | SCRIPT_NAME => '/', |
119 | PATH_INFO => $path, |
120 | REQUEST_URI => $path, |
121 | REDIRECT_URL => $path, |
122 | ); |
123 | |
124 | is $r->path, 'engine/request/uri/Rx(here)', 'URI contains correct path'; |
125 | is $r->base, 'http://www.foo.com/', 'Base is correct'; |
126 | } |
a9a405db |
127 | |
eb3abf96 |
128 | # FIXME - Test proxy logic |
eb3abf96 |
129 | # - Test query string |
130 | # - Test non standard port numbers |
131 | # - Test // in PATH_INFO |
132 | # - Test scheme (secure request on port 80) |
133 | |
134 | sub get_req { |
f238bbd9 |
135 | my $use_request_uri_for_path = shift; |
136 | |
ee1ea13f |
137 | my %template = ( |
138 | HTTP_HOST => 'www.foo.com', |
139 | PATH_INFO => '/', |
140 | ); |
141 | |
eb3abf96 |
142 | local %ENV = (%template, @_); |
ee1ea13f |
143 | |
5dbf12d1 |
144 | my $i = TestApp->new; |
f238bbd9 |
145 | $i->setup_finished(0); |
146 | $i->config(use_request_uri_for_path => $use_request_uri_for_path); |
147 | $i->setup_finished(1); |
5dbf12d1 |
148 | $i->engine(Catalyst::Engine::CGI->new); |
149 | $i->engine->prepare_path($i); |
eb3abf96 |
150 | return $i->req; |
5dbf12d1 |
151 | } |
152 | |
153 | done_testing; |
154 | |