annotate t/catch_body.t @ 4:01a36878bf36

Tests now use try_run().
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 09 Feb 2015 19:57:51 +0300
parents 04788ce8dae7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
1
17c333645ebb Fixed copy leftover.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
5 # Tests for catch body filter module.
0
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13 use Test::Nginx;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15 use Socket qw/ CRLF /;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 ###############################################################################
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 select STDERR; $| = 1;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 select STDOUT; $| = 1;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21
4
01a36878bf36 Tests now use try_run().
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
22 my $t = Test::Nginx->new()->has(qw/http proxy rewrite/)
0
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 ->write_file_expand('nginx.conf', <<'EOF');
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 %%TEST_GLOBALS%%
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 daemon off;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 events {
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 }
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 http {
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 %%TEST_GLOBALS_HTTP%%
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 server {
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 listen 127.0.0.1:8080;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 server_name localhost;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 location / {
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 catch_body on;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 proxy_pass http://127.0.0.1:8080/empty;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 }
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 location /empty {
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 return 200 "test response body\n";
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 }
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 }
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 }
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 EOF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 $t->write_file('index.html', 'SEE-THIS');
4
01a36878bf36 Tests now use try_run().
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
51 $t->try_run('no catch_body')->plan(6);
0
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 ###############################################################################
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 like(get_body('/', '123456'), qr/200 OK/, 'normal');
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 like(get_body('/', '12345X'), qr/403 Forbidden/, 'rejected');
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 # pipelining
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 like(get_body('/', '123456', '12345X'),
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 qr/200 OK.*403 Forbidden/ms,
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 'second rejected');
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 like(get_body('/', '123456' x 1024, '12345X6789' x 1024, '123456' x 1024),
2
04788ce8dae7 Close connection on errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
65 qr/200 OK.*403 Forbidden(?!.*400 Bad)/ms,
04788ce8dae7 Close connection on errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
66 'accepted rejected ignored');
0
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 # pipelining with chunked
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 like(get_chunked('/', '123456', '12345X'),
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 qr/200 OK.*403 Forbidden/ms,
2
04788ce8dae7 Close connection on errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
72 'chunked second rejected');
0
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 like(get_chunked('/', '123456', '12345X6789', '123456'),
2
04788ce8dae7 Close connection on errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
75 qr/200 OK.*403 Forbidden(?!.*400 Bad)/ms,
04788ce8dae7 Close connection on errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
76 'chunked accepted rejected ignored');
0
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 ###############################################################################
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 sub get_body {
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 my $uri = shift;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 my $last = pop;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 return http( join '', (map {
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 my $body = $_;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 "GET $uri HTTP/1.1" . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 . "Host: localhost" . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 . "Content-Length: " . (length $body) . CRLF . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 . $body
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 } @_),
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 "GET $uri HTTP/1.1" . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 . "Host: localhost" . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 . "Connection: close" . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 . "Content-Length: " . (length $last) . CRLF . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 . $last
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 );
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 }
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 sub get_chunked {
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 my $uri = shift;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 my $last = pop;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 return http( join '', (map {
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 my $body = $_;
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 "GET $uri HTTP/1.1" . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 . "Host: localhost" . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 . "Transfer-Encoding: chunked" . CRLF . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 . sprintf("%x", length $body) . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 . $body . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 . "0" . CRLF . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 } @_),
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 "GET $uri HTTP/1.1" . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 . "Host: localhost" . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 . "Connection: close" . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 . "Transfer-Encoding: chunked" . CRLF . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 . sprintf("%x", length $last) . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 . $last . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 . "0" . CRLF . CRLF
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 );
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 }
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119
5dcad7ad8eda Initial import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 ###############################################################################