Commit | Line | Data |
dd4e6fd2 |
1 | #!perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use FindBin; |
a2e038a1 |
7 | use lib "$FindBin::Bin/lib"; |
dd4e6fd2 |
8 | |
fdb3773e |
9 | use Test::More tests => 59; |
dd4e6fd2 |
10 | use Catalyst::Test 'TestApp'; |
11 | |
12 | use Catalyst::Request; |
5c0ff128 |
13 | use Catalyst::Request::Upload; |
dd4e6fd2 |
14 | use HTTP::Headers; |
15 | use HTTP::Headers::Util 'split_header_words'; |
16 | use HTTP::Request::Common; |
17 | |
18 | { |
19 | my $creq; |
20 | |
fbcc39ad |
21 | my $request = POST( |
22 | 'http://localhost/dump/request/', |
23 | 'Content-Type' => 'form-data', |
dd4e6fd2 |
24 | 'Content' => [ |
a2e038a1 |
25 | 'live_engine_request_cookies.t' => |
26 | ["$FindBin::Bin/live_engine_request_cookies.t"], |
27 | 'live_engine_request_headers.t' => |
28 | ["$FindBin::Bin/live_engine_request_headers.t"], |
29 | 'live_engine_request_uploads.t' => |
30 | ["$FindBin::Bin/live_engine_request_uploads.t"], |
fbcc39ad |
31 | ] |
dd4e6fd2 |
32 | ); |
33 | |
34 | ok( my $response = request($request), 'Request' ); |
35 | ok( $response->is_success, 'Response Successful 2xx' ); |
fbcc39ad |
36 | is( $response->content_type, 'text/plain', 'Response Content-Type' ); |
37 | like( |
38 | $response->content, |
39 | qr/^bless\( .* 'Catalyst::Request' \)$/s, |
40 | 'Content is a serialized Catalyst::Request' |
41 | ); |
42 | |
dd4e6fd2 |
43 | { |
44 | no strict 'refs'; |
fbcc39ad |
45 | ok( |
46 | eval '$creq = ' . $response->content, |
47 | 'Unserialize Catalyst::Request' |
48 | ); |
dd4e6fd2 |
49 | } |
50 | |
51 | isa_ok( $creq, 'Catalyst::Request' ); |
52 | is( $creq->method, 'POST', 'Catalyst::Request method' ); |
fbcc39ad |
53 | is( $creq->content_type, 'multipart/form-data', |
54 | 'Catalyst::Request Content-Type' ); |
55 | is( $creq->content_length, $request->content_length, |
56 | 'Catalyst::Request Content-Length' ); |
dd4e6fd2 |
57 | |
58 | for my $part ( $request->parts ) { |
59 | |
60 | my $disposition = $part->header('Content-Disposition'); |
61 | my %parameters = @{ ( split_header_words($disposition) )[0] }; |
62 | |
fbcc39ad |
63 | my $upload = $creq->{uploads}->{ $parameters{filename} }; |
64 | |
5c0ff128 |
65 | isa_ok( $upload, 'Catalyst::Request::Upload' ); |
dd4e6fd2 |
66 | |
d3fced79 |
67 | is( $upload->type, $part->content_type, 'Upload Content-Type' ); |
68 | is( $upload->size, length( $part->content ), 'Upload Content-Length' ); |
a2e038a1 |
69 | |
c4bed79a |
70 | # make sure upload is accessible via legacy params->{$file} |
a2e038a1 |
71 | is( $creq->{parameters}->{ $upload->filename }, |
72 | $upload->filename, 'legacy param method ok' ); |
73 | |
74 | ok( !-e $upload->tempname, 'Upload temp file was deleted' ); |
dd4e6fd2 |
75 | } |
dd4e6fd2 |
76 | } |
1408d0a4 |
77 | |
78 | { |
79 | my $creq; |
80 | |
fbcc39ad |
81 | my $request = POST( |
82 | 'http://localhost/dump/request/', |
1408d0a4 |
83 | 'Content-Type' => 'multipart/form-data', |
84 | 'Content' => [ |
a2e038a1 |
85 | 'testfile' => ["$FindBin::Bin/live_engine_request_cookies.t"], |
86 | 'testfile' => ["$FindBin::Bin/live_engine_request_headers.t"], |
87 | 'testfile' => ["$FindBin::Bin/live_engine_request_uploads.t"], |
fbcc39ad |
88 | ] |
1408d0a4 |
89 | ); |
90 | |
91 | ok( my $response = request($request), 'Request' ); |
92 | ok( $response->is_success, 'Response Successful 2xx' ); |
fbcc39ad |
93 | is( $response->content_type, 'text/plain', 'Response Content-Type' ); |
94 | like( |
95 | $response->content, |
96 | qr/^bless\( .* 'Catalyst::Request' \)$/s, |
97 | 'Content is a serialized Catalyst::Request' |
98 | ); |
99 | |
1408d0a4 |
100 | { |
101 | no strict 'refs'; |
fbcc39ad |
102 | ok( |
103 | eval '$creq = ' . $response->content, |
104 | 'Unserialize Catalyst::Request' |
105 | ); |
1408d0a4 |
106 | } |
107 | |
108 | isa_ok( $creq, 'Catalyst::Request' ); |
109 | is( $creq->method, 'POST', 'Catalyst::Request method' ); |
fbcc39ad |
110 | is( $creq->content_type, 'multipart/form-data', |
111 | 'Catalyst::Request Content-Type' ); |
112 | is( $creq->content_length, $request->content_length, |
113 | 'Catalyst::Request Content-Length' ); |
114 | |
1408d0a4 |
115 | my @parts = $request->parts; |
116 | |
fbcc39ad |
117 | for ( my $i = 0 ; $i < @parts ; $i++ ) { |
118 | |
1408d0a4 |
119 | my $part = $parts[$i]; |
120 | my $disposition = $part->header('Content-Disposition'); |
121 | my %parameters = @{ ( split_header_words($disposition) )[0] }; |
fbcc39ad |
122 | |
123 | my $upload = $creq->{uploads}->{ $parameters{name} }->[$i]; |
124 | |
1408d0a4 |
125 | isa_ok( $upload, 'Catalyst::Request::Upload' ); |
126 | is( $upload->type, $part->content_type, 'Upload Content-Type' ); |
127 | is( $upload->filename, $parameters{filename}, 'Upload filename' ); |
128 | is( $upload->size, length( $part->content ), 'Upload Content-Length' ); |
a2e038a1 |
129 | |
130 | ok( !-e $upload->tempname, 'Upload temp file was deleted' ); |
1408d0a4 |
131 | } |
132 | } |
32d4bba8 |
133 | |
134 | { |
135 | my $creq; |
136 | |
fbcc39ad |
137 | my $request = POST( |
138 | 'http://localhost/engine/request/uploads/slurp', |
32d4bba8 |
139 | 'Content-Type' => 'multipart/form-data', |
a2e038a1 |
140 | 'Content' => |
141 | [ 'slurp' => ["$FindBin::Bin/live_engine_request_uploads.t"], ] |
32d4bba8 |
142 | ); |
143 | |
144 | ok( my $response = request($request), 'Request' ); |
145 | ok( $response->is_success, 'Response Successful 2xx' ); |
146 | is( $response->content_type, 'text/plain', 'Response Content-Type' ); |
fbcc39ad |
147 | is( $response->content, ( $request->parts )[0]->content, 'Content' ); |
32d4bba8 |
148 | } |
fdb3773e |
149 | |
150 | { |
151 | my $request = POST( |
152 | 'http://localhost/dump/request', |
153 | 'Content-Type' => 'multipart/form-data', |
154 | 'Content' => |
155 | [ 'file' => ["$FindBin::Bin/catalyst_130pix.gif"], ] |
156 | ); |
157 | |
c4c4dd19 |
158 | # LWP will auto-correct Content-Length when using a remote server |
159 | SKIP: |
160 | { |
161 | if ( $ENV{CATALYST_SERVER} ) { |
162 | skip 'Using remote server', 2; |
163 | } |
fdb3773e |
164 | |
c4c4dd19 |
165 | # Sending wrong Content-Length here and see if subequent requests fail |
166 | $request->header('Content-Length' => $request->header('Content-Length') + 1); |
167 | |
168 | ok( my $response = request($request), 'Request' ); |
169 | ok( !$response->is_success, 'Response Error' ); |
170 | } |
fdb3773e |
171 | |
172 | $request = POST( |
173 | 'http://localhost/dump/request', |
174 | 'Content-Type' => 'multipart/form-data', |
175 | 'Content' => |
176 | [ 'file1' => ["$FindBin::Bin/catalyst_130pix.gif"], |
177 | 'file2' => ["$FindBin::Bin/catalyst_130pix.gif"], ] |
178 | ); |
179 | |
c4c4dd19 |
180 | ok( my $response = request($request), 'Request' ); |
fdb3773e |
181 | ok( $response->is_success, 'Response Successful 2xx' ); |
182 | is( $response->content_type, 'text/plain', 'Response Content-Type' ); |
183 | like( $response->content, qr/file1 => bless/, 'Upload with name file1'); |
184 | like( $response->content, qr/file2 => bless/, 'Upload with name file2'); |
185 | } |