Mercurial > hg > nginx-tests
annotate grpc.t @ 1971:ab45ee8011df
Tests: guarded session ticket tests for old OpenSSL versions.
Much like SNI support, TLS session tickets are available starting with
OpenSSL 0.9.8f if TLS extensions support is explicitly configured, and
enabled by default since 0.9.8j. As such, SNI availability is checked
to ensure TLS extensions support is compiled in.
Additionally, the ssl_session_ticket_key.t tests for automatic ticket key
rotation, which uses session ticket key callback, as introduced in
OpenSSL 0.9.8h.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 06 May 2024 00:03:16 +0300 |
parents | 2a0a6035a1af |
children | 11463d379570 |
rev | line source |
---|---|
1303 | 1 #!/usr/bin/perl |
2 | |
3 # (C) Sergey Kandaurov | |
4 # (C) Nginx, Inc. | |
5 | |
6 # Tests for grpc backend. | |
7 | |
8 ############################################################################### | |
9 | |
10 use warnings; | |
11 use strict; | |
12 | |
13 use Test::More; | |
14 | |
15 BEGIN { use FindBin; chdir($FindBin::Bin); } | |
16 | |
17 use lib 'lib'; | |
18 use Test::Nginx; | |
19 use Test::Nginx::HTTP2; | |
20 | |
21 ############################################################################### | |
22 | |
23 select STDERR; $| = 1; | |
24 select STDOUT; $| = 1; | |
25 | |
1312
6f95c0ed2335
Tests: removed proxy prerequisite from grpc tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1303
diff
changeset
|
26 my $t = Test::Nginx->new()->has(qw/http rewrite http_v2 grpc/) |
1715
3604ef83c1aa
Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1707
diff
changeset
|
27 ->has(qw/upstream_keepalive/)->plan(146); |
1303 | 28 |
29 $t->write_file_expand('nginx.conf', <<'EOF'); | |
30 | |
31 %%TEST_GLOBALS%% | |
32 | |
33 daemon off; | |
34 | |
35 events { | |
36 } | |
37 | |
38 http { | |
39 %%TEST_GLOBALS_HTTP%% | |
40 | |
41 upstream u { | |
42 server 127.0.0.1:8081; | |
43 keepalive 1; | |
44 } | |
45 | |
46 server { | |
47 listen 127.0.0.1:8080 http2; | |
48 server_name localhost; | |
49 | |
50 http2_body_preread_size 128k; | |
1653
259dfb223f9a
Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1631
diff
changeset
|
51 large_client_header_buffers 4 32k; |
1303 | 52 |
53 location / { | |
54 grpc_pass grpc://127.0.0.1:8081; | |
55 | |
56 if ($arg_if) { | |
57 # nothing | |
58 } | |
59 | |
60 limit_except GET { | |
61 # nothing | |
62 } | |
63 } | |
64 | |
65 location /KeepAlive { | |
66 grpc_pass u; | |
67 } | |
68 | |
69 location /LongHeader { | |
70 grpc_pass 127.0.0.1:8081; | |
71 grpc_set_header X-LongHeader $arg_h; | |
72 } | |
73 | |
74 location /LongField { | |
75 grpc_pass 127.0.0.1:8081; | |
76 grpc_buffer_size 65k; | |
77 } | |
78 | |
79 location /SetHost { | |
80 grpc_pass 127.0.0.1:8081; | |
81 grpc_set_header Host custom; | |
82 } | |
83 | |
84 location /SetArgs { | |
85 grpc_pass 127.0.0.1:8081; | |
86 set $args $arg_c; | |
87 } | |
88 } | |
89 } | |
90 | |
91 EOF | |
92 | |
1900
236d038dc04a
Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1748
diff
changeset
|
93 # suppress deprecation warning |
236d038dc04a
Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1748
diff
changeset
|
94 |
236d038dc04a
Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1748
diff
changeset
|
95 open OLDERR, ">&", \*STDERR; close STDERR; |
1381
97c8280de681
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1370
diff
changeset
|
96 $t->run(); |
1900
236d038dc04a
Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1748
diff
changeset
|
97 open STDERR, ">&", \*OLDERR; |
1303 | 98 |
99 ############################################################################### | |
100 | |
101 my $p = port(8081); | |
102 my $f = grpc(); | |
103 | |
104 my $frames = $f->{http_start}('/SayHello'); | |
105 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
106 is($frame->{flags}, 4, 'request - HEADERS flags'); | |
107 ok((my $sid = $frame->{sid}) % 2, 'request - HEADERS sid odd'); | |
108 is($frame->{headers}{':method'}, 'POST', 'request - method'); | |
109 is($frame->{headers}{':scheme'}, 'http', 'request - scheme'); | |
110 is($frame->{headers}{':path'}, '/SayHello', 'request - path'); | |
111 is($frame->{headers}{':authority'}, "127.0.0.1:$p", 'request - authority'); | |
112 is($frame->{headers}{'content-type'}, 'application/grpc', | |
113 'request - content type'); | |
114 is($frame->{headers}{te}, 'trailers', 'request - te'); | |
115 | |
116 $frames = $f->{data}('Hello'); | |
117 ($frame) = grep { $_->{type} eq "SETTINGS" } @$frames; | |
118 is($frame->{flags}, 1, 'request - SETTINGS ack'); | |
119 is($frame->{sid}, 0, 'request - SETTINGS sid'); | |
120 is($frame->{length}, 0, 'request - SETTINGS length'); | |
121 | |
122 ($frame) = grep { $_->{type} eq "DATA" } @$frames; | |
123 is($frame->{data}, 'Hello', 'request - DATA'); | |
124 is($frame->{length}, 5, 'request - DATA length'); | |
125 is($frame->{flags}, 1, 'request - DATA flags'); | |
126 is($frame->{sid}, $sid, 'request - DATA sid match'); | |
127 | |
128 $frames = $f->{http_end}(); | |
129 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
130 is($frame->{flags}, 4, 'response - HEADERS flags'); | |
131 is($frame->{sid}, 1, 'response - HEADERS sid'); | |
132 is($frame->{headers}{':status'}, '200', 'response - status'); | |
133 is($frame->{headers}{'content-type'}, 'application/grpc', | |
134 'response - content type'); | |
135 ok($frame->{headers}{server}, 'response - server'); | |
136 ok($frame->{headers}{date}, 'response - date'); | |
137 ok(my $c = $frame->{headers}{'x-connection'}, 'response - connection'); | |
138 | |
139 ($frame) = grep { $_->{type} eq "DATA" } @$frames; | |
140 is($frame->{data}, 'Hello world', 'response - DATA'); | |
141 is($frame->{length}, 11, 'response - DATA length'); | |
142 is($frame->{flags}, 0, 'response - DATA flags'); | |
143 is($frame->{sid}, 1, 'response - DATA sid'); | |
144 | |
145 (undef, $frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
146 is($frame->{flags}, 5, 'response - trailers flags'); | |
147 is($frame->{sid}, 1, 'response - trailers sid'); | |
148 is($frame->{headers}{'grpc-message'}, '', 'response - trailers message'); | |
149 is($frame->{headers}{'grpc-status'}, '0', 'response - trailers status'); | |
150 | |
151 # next request is on a new backend connection, no sid incremented | |
152 | |
153 $frames = $f->{http_start}('/SayHello'); | |
154 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
155 is($frame->{sid}, $sid, 'request 2 - HEADERS sid again'); | |
156 $f->{data}('Hello'); | |
157 $frames = $f->{http_end}(); | |
158 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
159 cmp_ok($frame->{headers}{'x-connection'}, '>', $c, 'response 2 - connection'); | |
160 | |
1698
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
161 # request body - special last buffer |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
162 |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
163 $f->{http_start}('/SayHello'); |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
164 $frames = $f->{data}('Hello', body_more => 1); |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
165 ($frame) = grep { $_->{type} eq "DATA" } @$frames; |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
166 is($frame->{data}, 'Hello', 'request body first - DATA'); |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
167 is($frame->{length}, 5, 'request body first - DATA length'); |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
168 is($frame->{flags}, 0, 'request body first - DATA flags'); |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
169 $frames = $f->{data}(''); |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
170 ($frame) = grep { $_->{type} eq "DATA" } @$frames; |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
171 is($frame->{data}, '', 'special buffer last - DATA'); |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
172 is($frame->{length}, 0, 'special buffer last - DATA length'); |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
173 is($frame->{flags}, 1, 'special buffer last - DATA flags'); |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
174 $frames = $f->{http_end}(); |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
175 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
176 is($frame->{headers}{':status'}, '200', 'special buffer last - response'); |
90201294e1b6
Tests: added grpc request body test with a special last buffer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1693
diff
changeset
|
177 |
1303 | 178 # upstream keepalive |
179 | |
180 $frames = $f->{http_start}('/KeepAlive'); | |
181 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
182 is($frame->{sid}, $sid, 'keepalive - HEADERS sid'); | |
183 $f->{data}('Hello'); | |
184 $frames = $f->{http_end}(); | |
185 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
186 ok($c = $frame->{headers}{'x-connection'}, 'keepalive - connection'); | |
187 | |
188 $frames = $f->{http_start}('/KeepAlive', reuse => 1); | |
189 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
190 cmp_ok($frame->{sid}, '>', $sid, 'keepalive - HEADERS sid next'); | |
191 $f->{data}('Hello'); | |
192 $frames = $f->{http_end}(); | |
193 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
194 is($frame->{headers}{'x-connection'}, $c, 'keepalive - connection reuse'); | |
195 | |
1370
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
196 # upstream keepalive |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
197 # pending control frame ack after the response |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
198 |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
199 undef $f; |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
200 $f = grpc(); |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
201 |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
202 $frames = $f->{http_start}('/KeepAlive'); |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
203 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
204 is($frame->{sid}, $sid, 'keepalive 2 - HEADERS sid'); |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
205 $f->{data}('Hello'); |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
206 $f->{settings}(0, 1 => 4096); |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
207 $frames = $f->{http_end}(); |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
208 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
209 ok($c = $frame->{headers}{'x-connection'}, 'keepalive 2 - connection'); |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
210 |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
211 $frames = $f->{http_start}('/KeepAlive', reuse => 1); |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
212 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
213 ok($frame, 'upstream keepalive reused'); |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
214 |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
215 cmp_ok($frame->{sid}, '>', $sid, 'keepalive 2 - HEADERS sid next'); |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
216 $f->{data}('Hello'); |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
217 $frames = $f->{http_end}(); |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
218 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
219 is($frame->{headers}{'x-connection'}, $c, 'keepalive 2 - connection reuse'); |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
220 |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
221 undef $f; |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
222 $f = grpc(); |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
223 |
1699
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
224 # upstream keepalive |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
225 # grpc filter setting INITIAL_WINDOW_SIZE is inherited in the next stream |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
226 |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
227 $f->{http_start}('/KeepAlive'); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
228 $f->{data}('Hello'); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
229 $f->{settings}(0, 1 => 4096); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
230 $frames = $f->{http_end}(grpc_filter_settings => { 0x4 => 2 }); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
231 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
232 ok($c = $frame->{headers}{'x-connection'}, 'keepalive 3 - connection'); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
233 |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
234 $f->{http_start}('/KeepAlive', reuse => 1); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
235 $frames = $f->{data_len}('Hello', 2); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
236 ($frame) = grep { $_->{type} eq "DATA" } @$frames; |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
237 is($frame->{data}, 'He', 'grpc filter setting - DATA'); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
238 is($frame->{length}, 2, 'grpc filter setting - DATA length'); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
239 is($frame->{flags}, 0, 'grpc filter setting - DATA flags'); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
240 $f->{settings}(0, 0x4 => 5); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
241 $frames = $f->{data_len}(undef, 3); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
242 ($frame) = grep { $_->{type} eq "DATA" } @$frames; |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
243 is($frame->{data}, 'llo', 'setting updated - DATA'); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
244 is($frame->{length}, 3, 'setting updated - DATA length'); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
245 is($frame->{flags}, 1, 'setting updated - DATA flags'); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
246 $frames = $f->{http_end}(); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
247 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
248 is($frame->{headers}{'x-connection'}, $c, 'keepalive 3 - connection reuse'); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
249 |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
250 undef $f; |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
251 $f = grpc(); |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
252 |
1700
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
253 # upstream keepalive - GOAWAY, current request aborted |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
254 |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
255 $f->{http_start}('/KeepAlive'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
256 $f->{data}('Hello'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
257 $frames = $f->{http_end}(); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
258 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
259 ok($c = $frame->{headers}{'x-connection'}, 'keepalive 4 - connection'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
260 |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
261 $f->{http_start}('/KeepAlive', reuse => 1); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
262 $f->{goaway}(0, 0, 5); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
263 $f->{data}('Hello'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
264 $frames = $f->{http_end}(); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
265 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
266 is($frame->{headers}{':status'}, 502, 'keepalive 4 - GOAWAY aborted request'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
267 |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
268 $f->{http_start}('/KeepAlive'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
269 $f->{data}('Hello'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
270 $frames = $f->{http_end}(); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
271 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
272 cmp_ok($frame->{headers}{'x-connection'}, '>', $c, 'keepalive 4 - closed'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
273 |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
274 undef $f; |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
275 $f = grpc(); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
276 |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
277 # upstream keepalive - disabled with a higher GOAWAY Last-Stream-ID |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
278 |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
279 $f->{http_start}('/KeepAlive'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
280 $f->{goaway}(0, 3, 5); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
281 $f->{data}('Hello'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
282 $frames = $f->{http_end}(); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
283 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
284 ok($c = $frame->{headers}{'x-connection'}, 'keepalive 5 - GOAWAY next stream'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
285 |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
286 $f->{http_start}('/KeepAlive'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
287 $f->{data}('Hello'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
288 $frames = $f->{http_end}(); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
289 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
290 cmp_ok($frame->{headers}{'x-connection'}, '>', $c, 'keepalive 5 - closed'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
291 |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
292 undef $f; |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
293 $f = grpc(); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
294 |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
295 # upstream keepalive - GOAWAY in grpc filter, current stream aborted |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
296 |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
297 $f->{http_start}('/KeepAlive'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
298 $f->{data}('Hello'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
299 $frames = $f->{http_end}(grpc_filter_goaway => [0, 0, 5]); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
300 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
301 ok($c = $frame->{headers}{'x-connection'}, 'keepalive 6 - connection'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
302 ($frame) = grep { $_->{type} eq "RST_STREAM" } @$frames; |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
303 ok($frame, 'keepalive 6 - grpc filter GOAWAY aborted stream'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
304 |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
305 $f->{http_start}('/KeepAlive'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
306 $f->{data}('Hello'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
307 $frames = $f->{http_end}(); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
308 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
309 cmp_ok($frame->{headers}{'x-connection'}, '>', $c, 'keepalive 6 - closed'); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
310 |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
311 undef $f; |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
312 $f = grpc(); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
313 |
1303 | 314 # various header compression formats |
315 | |
316 $f->{http_start}('/SayHello'); | |
317 $f->{data}('Hello'); | |
318 $frames = $f->{http_end}(mode => 3); | |
319 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
320 is($frame->{headers}{':status'}, '200', 'without indexing'); | |
321 is($frame->{headers}{'content-type'}, 'application/grpc', | |
322 'without indexing 2'); | |
323 | |
324 $f->{http_start}('/SayHello'); | |
325 $f->{data}('Hello'); | |
326 $frames = $f->{http_end}(mode => 4); | |
327 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
328 is($frame->{headers}{':status'}, '200', 'without indexing new'); | |
329 is($frame->{headers}{'content-type'}, 'application/grpc', | |
330 'without indexing new 2'); | |
331 | |
332 $f->{http_start}('/SayHello'); | |
333 $f->{data}('Hello'); | |
334 $frames = $f->{http_end}(mode => 5); | |
335 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
336 is($frame->{headers}{':status'}, '200', 'never indexed'); | |
337 is($frame->{headers}{'content-type'}, 'application/grpc', | |
338 'never indexed 2'); | |
339 | |
340 $f->{http_start}('/SayHello'); | |
341 $f->{data}('Hello'); | |
342 $frames = $f->{http_end}(mode => 6); | |
343 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
344 is($frame->{headers}{':status'}, '200', 'never indexed new'); | |
345 is($frame->{headers}{'content-type'}, 'application/grpc', | |
346 'never indexed new 2'); | |
347 | |
348 # padding & priority | |
349 | |
350 $f->{http_start}('/SayHello'); | |
351 $f->{data}('Hello'); | |
352 $frames = $f->{http_end}(padding => 7); | |
353 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
354 is($frame->{headers}{':status'}, '200', 'padding'); | |
355 | |
356 $f->{http_start}('/SayHello'); | |
357 $f->{data}('Hello'); | |
358 $frames = $f->{http_end}(prio => 137, dep => 0x01020304); | |
359 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
360 is($frame->{headers}{':status'}, '200', 'priority'); | |
361 | |
362 $f->{http_start}('/SayHello'); | |
363 $f->{data}('Hello'); | |
364 $frames = $f->{http_end}(padding => 7, prio => 137, dep => 0x01020304); | |
365 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
366 is($frame->{headers}{':status'}, '200', 'padding priority'); | |
367 | |
368 SKIP: { | |
369 skip 'long test', 1 unless $ENV{TEST_NGINX_UNSAFE}; | |
370 | |
371 $f->{http_start}('/SaySplit'); | |
372 $f->{data}('Hello'); | |
373 $frames = $f->{http_end}(padding => 7, prio => 137, dep => 0x01020304, | |
374 split => [(map{1}(1..20)), 30], split_delay => 0.1); | |
375 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
376 is($frame->{headers}{':status'}, '200', 'padding priority split'); | |
377 | |
378 } | |
379 | |
380 # grpc error, no empty data frame expected | |
381 | |
382 $f->{http_start}('/SayHello'); | |
383 $f->{data}('Hello'); | |
384 $frames = $f->{http_err}(); | |
385 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
386 is($frame->{flags}, 5, 'grpc error - HEADERS flags'); | |
387 ($frame) = grep { $_->{type} eq "DATA" } @$frames; | |
388 ok(!$frame, 'grpc error - no DATA frame'); | |
389 | |
1583
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
390 # malformed response body length not equal to content-length |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
391 |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
392 $f->{http_start}('/SayHello'); |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
393 $f->{data}('Hello'); |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
394 $frames = $f->{http_err2}(cl => 42); |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
395 ($frame) = grep { $_->{type} eq "RST_STREAM" } @$frames; |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
396 ok($frame, 'response body less than content-length'); |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
397 |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
398 $f->{http_start}('/SayHello'); |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
399 $f->{data}('Hello'); |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
400 $frames = $f->{http_err2}(cl => 8); |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
401 ($frame) = grep { $_->{type} eq "RST_STREAM" } @$frames; |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
402 ok($frame, 'response body more than content-length'); |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
403 |
1303 | 404 # continuation from backend, expect parts assembled |
405 | |
406 $f->{http_start}('/SayHello'); | |
407 $f->{data}('Hello'); | |
408 $frames = $f->{continuation}(); | |
409 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
410 is($frame->{flags}, 4, 'continuation - HEADERS flags'); | |
411 is($frame->{headers}{':status'}, '200', 'continuation - status'); | |
412 is($frame->{headers}{'content-type'}, 'application/grpc', | |
413 'continuation - content type'); | |
414 | |
415 ($frame) = grep { $_->{type} eq "DATA" } @$frames; | |
416 is($frame->{data}, 'Hello world', 'continuation - DATA'); | |
417 is($frame->{length}, 11, 'continuation - DATA length'); | |
418 is($frame->{flags}, 0, 'continuation - DATA flags'); | |
419 | |
420 (undef, $frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
421 is($frame->{flags}, 5, 'continuation - trailers flags'); | |
422 is($frame->{headers}{'grpc-message'}, '', 'continuation - trailers message'); | |
423 is($frame->{headers}{'grpc-status'}, '0', 'continuation - trailers status'); | |
424 | |
425 # continuation from backend, header split | |
426 | |
427 $f->{http_start}('/SayHello'); | |
428 $f->{data}('Hello'); | |
429 $frames = $f->{http_end}(mode => 6, continuation => [map { 1 } (1 .. 42)]); | |
430 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
431 is($frame->{headers}{':status'}, '200', 'continuation - header split'); | |
432 | |
433 # continuation to backend | |
434 | |
435 $frames = $f->{http_start}('/LongHeader?h=' . ('Z' x 31337)); | |
436 @$frames = grep { $_->{type} =~ "HEADERS|CONTINUATION" } @$frames; | |
437 is(@$frames, 4, 'continuation - frames'); | |
438 | |
439 $frame = shift @$frames; | |
440 is($frame->{type}, 'HEADERS', 'continuation - HEADERS'); | |
441 is($frame->{length}, 16384, 'continuation - HEADERS length'); | |
442 is($frame->{flags}, 1, 'continuation - HEADERS flags'); | |
443 ok($frame->{sid}, 'continuation - HEADERS sid'); | |
444 | |
445 $frame = shift @$frames; | |
446 is($frame->{type}, 'CONTINUATION', 'continuation - CONTINUATION'); | |
447 is($frame->{length}, 16384, 'continuation - CONTINUATION length'); | |
448 is($frame->{flags}, 0, 'continuation - CONTINUATION flags'); | |
449 ok($frame->{sid}, 'continuation - CONTINUATION sid'); | |
450 | |
451 $frame = shift @$frames; | |
452 is($frame->{type}, 'CONTINUATION', 'continuation - CONTINUATION 2'); | |
453 is($frame->{length}, 16384, 'continuation - CONTINUATION 2 length'); | |
454 is($frame->{flags}, 0, 'continuation - CONTINUATION 2 flags'); | |
455 | |
456 $frame = shift @$frames; | |
457 is($frame->{type}, 'CONTINUATION', 'continuation - CONTINUATION n'); | |
458 cmp_ok($frame->{length}, '<', 16384, 'continuation - CONTINUATION n length'); | |
459 is($frame->{flags}, 4, 'continuation - CONTINUATION n flags'); | |
460 is($frame->{headers}{':path'}, '/LongHeader?h=' . 'Z' x 31337, | |
461 'continuation - path'); | |
462 is($frame->{headers}{'x-longheader'}, 'Z' x 31337, 'continuation - header'); | |
463 | |
464 $f->{http_end}(); | |
465 | |
466 # long header field | |
467 | |
468 $f->{http_start}('/LongField'); | |
469 $f->{data}('Hello'); | |
470 $frames = $f->{field_len}(2**7); | |
471 ($frame) = grep { $_->{flags} & 0x4 } @$frames; | |
472 is($frame->{headers}{'x' x 2**7}, 'y' x 2**7, 'long header field 1'); | |
473 | |
474 $f->{http_start}('/LongField'); | |
475 $f->{data}('Hello'); | |
476 $frames = $f->{field_len}(2**8); | |
477 ($frame) = grep { $_->{flags} & 0x4 } @$frames; | |
478 is($frame->{headers}{'x' x 2**8}, 'y' x 2**8, 'long header field 2'); | |
479 | |
480 $f->{http_start}('/LongField'); | |
481 $f->{data}('Hello'); | |
482 $frames = $f->{field_len}(2**15); | |
483 ($frame) = grep { $_->{flags} & 0x4 } @$frames; | |
484 is($frame->{headers}{'x' x 2**15}, 'y' x 2**15, 'long header field 3'); | |
485 | |
1676
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
486 # Intermediary Encapsulation Attacks, malformed header fields |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
487 |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
488 $f->{http_start}('/'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
489 $f->{data}('Hello'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
490 $frames = $f->{field_bad}(n => 'n:n'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
491 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
492 is($frame->{headers}{':status'}, 502, 'invalid header name colon'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
493 |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
494 $f->{http_start}('/'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
495 $f->{data}('Hello'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
496 $frames = $f->{field_bad}(n => 'NN'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
497 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
498 is($frame->{headers}{':status'}, 502, 'invalid header name uppercase'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
499 |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
500 $f->{http_start}('/'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
501 $f->{data}('Hello'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
502 $frames = $f->{field_bad}(n => "n\nn"); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
503 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
504 is($frame->{headers}{':status'}, 502, 'invalid header name ctl'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
505 |
1715
3604ef83c1aa
Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1707
diff
changeset
|
506 $f->{http_start}('/'); |
3604ef83c1aa
Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1707
diff
changeset
|
507 $f->{data}('Hello'); |
3604ef83c1aa
Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1707
diff
changeset
|
508 $frames = $f->{field_bad}(n => "n n"); |
3604ef83c1aa
Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1707
diff
changeset
|
509 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
3604ef83c1aa
Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1707
diff
changeset
|
510 is($frame->{headers}{':status'}, 502, 'invalid header name space'); |
3604ef83c1aa
Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1707
diff
changeset
|
511 |
1676
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
512 $f->{http_start}('/'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
513 $f->{data}('Hello'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
514 $frames = $f->{field_bad}(v => "v\nv"); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
515 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
516 is($frame->{headers}{':status'}, 502, 'invalid header value ctl'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
517 |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
518 # invalid HPACK index |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
519 |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
520 $f->{http_start}('/'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
521 $f->{data}('Hello'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
522 $frames = $f->{field_bad}('m' => 0); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
523 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
524 is($frame->{headers}{':status'}, 502, 'invalid index - indexed header'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
525 |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
526 $f->{http_start}('/'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
527 $f->{data}('Hello'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
528 $frames = $f->{field_bad}('m' => 1); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
529 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
530 is($frame->{headers}{':status'}, 502, 'invalid index - with indexing'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
531 |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
532 $f->{http_start}('/'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
533 $f->{data}('Hello'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
534 $frames = $f->{field_bad}('m' => 3); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
535 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
536 is($frame->{headers}{':status'}, 502, 'invalid index - without indexing'); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
537 |
1303 | 538 # flow control |
539 | |
540 $f->{http_start}('/FlowControl'); | |
541 $frames = $f->{data_len}(('Hello' x 13000) . ('x' x 550), 65535); | |
542 my $sum = eval join '+', map { $_->{type} eq "DATA" && $_->{length} } @$frames; | |
543 is($sum, 65535, 'flow control - iws length'); | |
544 | |
545 $f->{update}(10); | |
546 $f->{update_sid}(10); | |
547 | |
548 $frames = $f->{data_len}(undef, 10); | |
549 ($frame) = grep { $_->{type} eq "DATA" } @$frames; | |
550 is($frame->{length}, 10, 'flow control - update length'); | |
551 is($frame->{flags}, 0, 'flow control - update flags'); | |
552 | |
553 $f->{update_sid}(10); | |
554 $f->{update}(10); | |
555 | |
556 $frames = $f->{data_len}(undef, 5); | |
557 ($frame) = grep { $_->{type} eq "DATA" } @$frames; | |
558 is($frame->{length}, 5, 'flow control - rest length'); | |
559 is($frame->{flags}, 1, 'flow control - rest flags'); | |
560 | |
561 $f->{http_end}(); | |
562 | |
1318
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
563 # preserve output |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
564 |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
565 $f->{http_start}('/Preserve'); |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
566 $f->{data}('Hello'); |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
567 $frames = $f->{http_pres}(); |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
568 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
569 is($frame->{flags}, 4, 'preserve - HEADERS'); |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
570 |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
571 my @data = grep { $_->{type} eq "DATA" } @$frames; |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
572 $sum = eval join '+', map { $_->{length} } @data; |
1319
3b30e97acdcb
Tests: made grpc preserve output test pass on win32 and Solaris.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1318
diff
changeset
|
573 is($sum, 20480, 'preserve - DATA'); |
1318
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
574 |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
575 (undef, $frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
576 is($frame->{flags}, 5, 'preserve - trailers'); |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
577 |
1303 | 578 # DATA padding |
579 | |
580 $f->{http_start}('/SayPadding'); | |
581 $f->{data}('Hello'); | |
582 $frames = $f->{http_end}(body_padding => 42); | |
583 ($frame) = grep { $_->{type} eq "DATA" } @$frames; | |
1362
6874b32dc3d2
Tests: renamed some grpc.t tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1321
diff
changeset
|
584 is($frame->{data}, 'Hello world', 'DATA padding'); |
6874b32dc3d2
Tests: renamed some grpc.t tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1321
diff
changeset
|
585 is($frame->{length}, 11, 'DATA padding - length'); |
6874b32dc3d2
Tests: renamed some grpc.t tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1321
diff
changeset
|
586 is($frame->{flags}, 0, 'DATA padding - flags'); |
1303 | 587 |
1664
0fae67763be5
Tests: added grpc tests with DATA padding and Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1653
diff
changeset
|
588 # DATA padding with Content-Length |
0fae67763be5
Tests: added grpc tests with DATA padding and Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1653
diff
changeset
|
589 |
0fae67763be5
Tests: added grpc tests with DATA padding and Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1653
diff
changeset
|
590 $f->{http_start}('/SayPadding'); |
0fae67763be5
Tests: added grpc tests with DATA padding and Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1653
diff
changeset
|
591 $f->{data}('Hello'); |
0fae67763be5
Tests: added grpc tests with DATA padding and Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1653
diff
changeset
|
592 $frames = $f->{http_end}(body_padding => 42, cl => length('Hello world')); |
0fae67763be5
Tests: added grpc tests with DATA padding and Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1653
diff
changeset
|
593 ($frame) = grep { $_->{type} eq "DATA" } @$frames; |
0fae67763be5
Tests: added grpc tests with DATA padding and Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1653
diff
changeset
|
594 is($frame->{data}, 'Hello world', 'DATA padding cl'); |
0fae67763be5
Tests: added grpc tests with DATA padding and Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1653
diff
changeset
|
595 is($frame->{length}, 11, 'DATA padding cl - length'); |
0fae67763be5
Tests: added grpc tests with DATA padding and Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1653
diff
changeset
|
596 is($frame->{flags}, 0, 'DATA padding cl - flags'); |
0fae67763be5
Tests: added grpc tests with DATA padding and Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1653
diff
changeset
|
597 |
1303 | 598 # :authority inheritance |
599 | |
600 $frames = $f->{http_start}('/SayHello?if=1'); | |
601 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
602 is($frame->{headers}{':authority'}, "127.0.0.1:$p", 'authority in if'); | |
603 $f->{data}('Hello'); | |
604 $f->{http_end}(); | |
605 | |
606 # misc tests | |
607 | |
608 $frames = $f->{http_start}('/SetHost'); | |
609 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
610 ok(!$frame->{headers}{':authority'}, 'set host - authority'); | |
611 is($frame->{headers}{'host'}, 'custom', 'set host - host'); | |
612 $f->{data}('Hello'); | |
613 $f->{http_end}(); | |
614 | |
615 $frames = $f->{http_start}('/SetArgs?f'); | |
616 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
617 is($frame->{headers}{':path'}, '/SetArgs', 'set args'); | |
618 $f->{data}('Hello'); | |
619 $f->{http_end}(); | |
620 | |
621 $frames = $f->{http_start}('/SetArgs?c=1'); | |
622 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
623 is($frame->{headers}{':path'}, '/SetArgs?1', 'set args len'); | |
624 $f->{data}('Hello'); | |
625 $f->{http_end}(); | |
626 | |
627 $frames = $f->{http_start}('/'); | |
628 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
629 is($frame->{headers}{':path'}, '/', 'root index'); | |
630 $f->{data}('Hello'); | |
631 $f->{http_end}(); | |
632 | |
633 $frames = $f->{http_start}('/', method => 'GET'); | |
634 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
635 is($frame->{headers}{':method'}, 'GET', 'method get'); | |
636 $f->{data}('Hello'); | |
637 $f->{http_end}(); | |
638 | |
639 $frames = $f->{http_start}('/', method => 'HEAD'); | |
640 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
641 is($frame->{headers}{':method'}, 'HEAD', 'method head'); | |
642 $f->{data}('Hello'); | |
643 $f->{http_end}(); | |
644 | |
1564
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
645 # receiving END_STREAM followed by WINDOW_UPDATE on incomplete request body |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
646 |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
647 $f->{http_start}('/Discard_WU'); |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
648 $frames = $f->{discard}(); |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
649 (undef, $frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
650 is($frame->{flags}, 5, 'discard WINDOW_UPDATE - trailers'); |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
651 |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
652 # receiving END_STREAM followed by RST_STREAM NO_ERROR |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
653 |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
654 $f->{http_start}('/Discard_NE'); |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
655 $frames = $f->{discard}(); |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
656 (undef, $frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
657 is($frame->{flags}, 5, 'discard NO_ERROR - trailers'); |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
658 |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
659 # receiving END_STREAM followed by several RST_STREAM NO_ERROR |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
660 |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
661 $f->{http_start}('/Discard_NE3'); |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
662 $frames = $f->{discard}(); |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
663 (undef, $frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
664 is($frame->{flags}, undef, 'discard NO_ERROR many - no trailers'); |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
665 |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
666 # receiving END_STREAM followed by RST_STREAM CANCEL |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
667 |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
668 $f->{http_start}('/Discard_CNL'); |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
669 $frames = $f->{discard}(); |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
670 (undef, $frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
671 is($frame->{flags}, undef, 'discard CANCEL - no trailers'); |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
672 |
1631
62a1667f60f8
Tests: fixed grpc.t after previous change.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1624
diff
changeset
|
673 undef $f; |
62a1667f60f8
Tests: fixed grpc.t after previous change.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1624
diff
changeset
|
674 $f = grpc(); |
62a1667f60f8
Tests: fixed grpc.t after previous change.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1624
diff
changeset
|
675 |
1624
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
676 # upstream keepalive, grpc error |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
677 # receiving END_STREAM followed by RST_STREAM NO_ERROR |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
678 |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
679 $f->{http_start}('/KeepAlive'); |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
680 $f->{data}('Hello'); |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
681 $frames = $f->{http_err_rst}(); |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
682 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
683 ok($frame->{headers}{'grpc-status'}, 'keepalive 3 - grpc error, rst'); |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
684 |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
685 $frames = $f->{http_start}('/KeepAlive', reuse => 1); |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
686 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
687 ok($frame, 'keepalive 3 - connection reused'); |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
688 |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
689 undef $f; |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
690 $f = grpc(); |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
691 |
1303 | 692 ############################################################################### |
693 | |
694 sub grpc { | |
1318
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
695 my ($server, $client, $f, $s, $c, $sid, $csid, $uri); |
1303 | 696 my $n = 0; |
697 | |
698 $server = IO::Socket::INET->new( | |
699 Proto => 'tcp', | |
700 LocalHost => '127.0.0.1', | |
701 LocalPort => $p, | |
702 Listen => 5, | |
703 Reuse => 1 | |
704 ) | |
705 or die "Can't create listening socket: $!\n"; | |
706 | |
707 $f->{http_start} = sub { | |
708 ($uri, my %extra) = @_; | |
709 my $body_more = 1 if $uri !~ /LongHeader/; | |
710 my $meth = $extra{method} || 'POST'; | |
711 $s = Test::Nginx::HTTP2->new() if !defined $s; | |
1318
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
712 $csid = $s->new_stream({ body_more => $body_more, headers => [ |
1303 | 713 { name => ':method', value => $meth, mode => !!$meth }, |
714 { name => ':scheme', value => 'http', mode => 0 }, | |
715 { name => ':path', value => $uri, }, | |
716 { name => ':authority', value => 'localhost' }, | |
717 { name => 'content-type', value => 'application/grpc' }, | |
718 { name => 'te', value => 'trailers', mode => 2 }]}); | |
719 | |
720 if (!$extra{reuse}) { | |
1705
99a9b8b50f21
Tests: fixed grpc.t TODO hang on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1700
diff
changeset
|
721 if (IO::Select->new($server)->can_read(5)) { |
99a9b8b50f21
Tests: fixed grpc.t TODO hang on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1700
diff
changeset
|
722 $client = $server->accept(); |
1321
351b95be742b
Tests: fixed grpc tests hang in accept() on internal nginx error.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1319
diff
changeset
|
723 |
1705
99a9b8b50f21
Tests: fixed grpc.t TODO hang on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1700
diff
changeset
|
724 } else { |
99a9b8b50f21
Tests: fixed grpc.t TODO hang on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1700
diff
changeset
|
725 log_in("timeout"); |
1700
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
726 # connection could be unexpectedly reused |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
727 goto reused if $client; |
1321
351b95be742b
Tests: fixed grpc tests hang in accept() on internal nginx error.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1319
diff
changeset
|
728 return undef; |
351b95be742b
Tests: fixed grpc tests hang in accept() on internal nginx error.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1319
diff
changeset
|
729 } |
351b95be742b
Tests: fixed grpc tests hang in accept() on internal nginx error.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1319
diff
changeset
|
730 |
1303 | 731 log2c("(new connection $client)"); |
732 $n++; | |
733 | |
734 $client->sysread(my $buf, 24) == 24 or return; # preface | |
735 | |
736 $c = Test::Nginx::HTTP2->new(1, socket => $client, | |
737 pure => 1, preface => "") or return; | |
738 } | |
739 | |
1700
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
740 reused: |
1303 | 741 my $frames = $c->read(all => [{ fin => 4 }]); |
742 | |
743 if (!$extra{reuse}) { | |
744 $c->h2_settings(0); | |
745 $c->h2_settings(1); | |
746 } | |
747 | |
748 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
749 $sid = $frame->{sid}; | |
750 return $frames; | |
751 }; | |
752 $f->{data} = sub { | |
753 my ($body, %extra) = @_; | |
754 $s->h2_body($body, { %extra }); | |
755 return $c->read(all => [{ sid => $sid, | |
756 length => length($body) }]); | |
757 }; | |
758 $f->{data_len} = sub { | |
759 my ($body, $len) = @_; | |
760 $s->h2_body($body) if defined $body; | |
761 return $c->read(all => [{ sid => $sid, length => $len }]); | |
762 }; | |
763 $f->{update} = sub { | |
764 $c->h2_window(shift); | |
765 }; | |
766 $f->{update_sid} = sub { | |
767 $c->h2_window(shift, $sid); | |
768 }; | |
1370
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
769 $f->{settings} = sub { |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
770 $c->h2_settings(@_); |
23e407a72fe9
Tests: upstream keepalive with grpc pending frames.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1362
diff
changeset
|
771 }; |
1700
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
772 $f->{goaway} = sub { |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
773 $c->h2_goaway(@_); |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
774 }; |
1303 | 775 $f->{http_end} = sub { |
776 my (%extra) = @_; | |
1664
0fae67763be5
Tests: added grpc tests with DATA padding and Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1653
diff
changeset
|
777 my $h = [ |
1303 | 778 { name => ':status', value => '200', |
779 mode => $extra{mode} || 0 }, | |
780 { name => 'content-type', value => 'application/grpc', | |
781 mode => $extra{mode} || 1, huff => 1 }, | |
782 { name => 'x-connection', value => $n, | |
1664
0fae67763be5
Tests: added grpc tests with DATA padding and Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1653
diff
changeset
|
783 mode => 2, huff => 1 }]; |
0fae67763be5
Tests: added grpc tests with DATA padding and Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1653
diff
changeset
|
784 push @$h, { name => 'content-length', value => $extra{cl} } |
0fae67763be5
Tests: added grpc tests with DATA padding and Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1653
diff
changeset
|
785 if $extra{cl}; |
0fae67763be5
Tests: added grpc tests with DATA padding and Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1653
diff
changeset
|
786 $c->new_stream({ body_more => 1, headers => $h, %extra }, $sid); |
1303 | 787 $c->h2_body('Hello world', { body_more => 1, |
788 body_padding => $extra{body_padding} }); | |
1699
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
789 $c->h2_settings(0, %{$extra{grpc_filter_settings}}) |
202d8feedad1
Tests: added grpc test for receiving SETTINGS in grpc filter.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1698
diff
changeset
|
790 if $extra{grpc_filter_settings}; |
1700
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
791 $c->h2_goaway(@{$extra{grpc_filter_goaway}}) |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
792 if $extra{grpc_filter_goaway}; |
1303 | 793 $c->new_stream({ headers => [ |
794 { name => 'grpc-status', value => '0', | |
795 mode => 2, huff => 1 }, | |
796 { name => 'grpc-message', value => '', | |
797 mode => 2, huff => 1 }, | |
798 ]}, $sid); | |
799 | |
1700
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
800 return $s->read(all => [{ type => 'RST_STREAM' }]) |
c903c0a3f302
Tests: added grpc GOAWAY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1699
diff
changeset
|
801 if $extra{grpc_filter_goaway}; |
1303 | 802 return $s->read(all => [{ fin => 1 }]); |
803 }; | |
1318
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
804 $f->{http_pres} = sub { |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
805 my (%extra) = @_; |
1319
3b30e97acdcb
Tests: made grpc preserve output test pass on win32 and Solaris.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1318
diff
changeset
|
806 $s->h2_settings(0, 0x4 => 8192); |
1318
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
807 $c->new_stream({ body_more => 1, %extra, headers => [ |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
808 { name => ':status', value => '200', |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
809 mode => $extra{mode} || 0 }, |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
810 { name => 'content-type', value => 'application/grpc', |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
811 mode => $extra{mode} || 1, huff => 1 }, |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
812 { name => 'x-connection', value => $n, |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
813 mode => 2, huff => 1 }, |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
814 ]}, $sid); |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
815 for (1 .. 20) { |
1319
3b30e97acdcb
Tests: made grpc preserve output test pass on win32 and Solaris.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1318
diff
changeset
|
816 $c->h2_body(sprintf('Hello %02d', $_) x 128, { |
1318
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
817 body_more => 1, |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
818 body_padding => $extra{body_padding} }); |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
819 $c->h2_ping("PING"); |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
820 } |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
821 # reopen window |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
822 $s->h2_window(2**24); |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
823 $s->h2_window(2**24, $csid); |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
824 $c->new_stream({ headers => [ |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
825 { name => 'grpc-status', value => '0', |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
826 mode => 2, huff => 1 }, |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
827 { name => 'grpc-message', value => '', |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
828 mode => 2, huff => 1 }, |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
829 ]}, $sid); |
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
830 |
1319
3b30e97acdcb
Tests: made grpc preserve output test pass on win32 and Solaris.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1318
diff
changeset
|
831 return $s->read(all => [{ sid => $csid, fin => 1 }]); |
1318
6de2a27af2d3
Tests: grpc preserve output tests added (ticket #1519).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1312
diff
changeset
|
832 }; |
1303 | 833 $f->{http_err} = sub { |
834 $c->new_stream({ headers => [ | |
835 { name => ':status', value => '200', mode => 0 }, | |
836 { name => 'content-type', value => 'application/grpc', | |
837 mode => 1, huff => 1 }, | |
838 { name => 'grpc-status', value => '12', | |
839 mode => 2, huff => 1 }, | |
840 { name => 'grpc-message', value => 'unknown service', | |
841 mode => 2, huff => 1 }, | |
842 ]}, $sid); | |
843 | |
844 return $s->read(all => [{ fin => 1 }]); | |
845 }; | |
1624
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
846 $f->{http_err_rst} = sub { |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
847 $c->start_chain(); |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
848 $c->new_stream({ headers => [ |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
849 { name => ':status', value => '200', mode => 0 }, |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
850 { name => 'content-type', value => 'application/grpc' }, |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
851 { name => 'grpc-status', value => '12', mode => 2 }, |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
852 { name => 'grpc-message', value => 'unknown service', |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
853 mode => 2 }, |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
854 ]}, $sid); |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
855 $c->h2_rst($sid, 0); |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
856 $c->send_chain(); |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
857 |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
858 return $s->read(all => [{ fin => 1 }]); |
81fd6615358e
Tests: added test for "grpc error" followed by RST_STREAM NO_ERROR.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1623
diff
changeset
|
859 }; |
1583
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
860 $f->{http_err2} = sub { |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
861 my %extra = @_; |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
862 $c->new_stream({ body_more => 1, headers => [ |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
863 { name => ':status', value => '200', mode => 0 }, |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
864 { name => 'content-type', value => 'application/grpc', |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
865 mode => 1, huff => 1 }, |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
866 { name => 'content-length', value => $extra{cl}, |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
867 mode => 1, huff => 1 }, |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
868 ]}, $sid); |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
869 $c->h2_body('Hello world', |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
870 { body_more => 1, body_split => [5] }); |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
871 $c->new_stream({ headers => [ |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
872 { name => 'grpc-status', value => '0', |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
873 mode => 2, huff => 1 }, |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
874 { name => 'grpc-message', value => '', |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
875 mode => 2, huff => 1 }, |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
876 ]}, $sid); |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
877 |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
878 return $s->read(all => [{ type => 'RST_STREAM' }]); |
8aede7babd9a
Tests: added grpc tests with wrong response size.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1564
diff
changeset
|
879 }; |
1303 | 880 $f->{continuation} = sub { |
881 $c->new_stream({ continuation => 1, body_more => 1, headers => [ | |
882 { name => ':status', value => '200', mode => 0 }, | |
883 ]}, $sid); | |
884 $c->h2_continue($sid, { continuation => 1, headers => [ | |
885 { name => 'content-type', value => 'application/grpc', | |
886 mode => 1, huff => 1 }, | |
887 ]}); | |
888 $c->h2_continue($sid, { headers => [ | |
889 # an empty CONTINUATION frame is legitimate | |
890 ]}); | |
891 $c->h2_body('Hello world', { body_more => 1 }); | |
892 $c->new_stream({ continuation => 1, headers => [ | |
893 { name => 'grpc-status', value => '0', | |
894 mode => 2, huff => 1 }, | |
895 ]}, $sid); | |
896 $c->h2_continue($sid, { headers => [ | |
897 { name => 'grpc-message', value => '', | |
898 mode => 2, huff => 1 }, | |
899 ]}); | |
900 | |
901 return $s->read(all => [{ fin => 1 }]); | |
902 }; | |
903 $f->{field_len} = sub { | |
904 my ($len) = @_; | |
905 $c->new_stream({ continuation => [map {2**14} (0..$len/2**13)], | |
906 body_more => 1, headers => [ | |
907 { name => ':status', value => '200', mode => 0 }, | |
908 { name => 'content-type', value => 'application/grpc', | |
909 mode => 1, huff => 1 }, | |
910 { name => 'x' x $len, value => 'y' x $len, mode => 6 }, | |
911 ]}, $sid); | |
912 $c->h2_body('Hello world', { body_more => 1 }); | |
913 $c->new_stream({ headers => [ | |
914 { name => 'grpc-status', value => '0', | |
915 mode => 2, huff => 1 }, | |
916 { name => 'grpc-message', value => '', | |
917 mode => 2, huff => 1 }, | |
918 ]}, $sid); | |
919 | |
920 return $s->read(all => [{ fin => 1 }]); | |
921 }; | |
1676
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
922 $f->{field_bad} = sub { |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
923 my (%extra) = @_; |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
924 my $n = defined $extra{'n'} ? $extra{'n'} : 'n'; |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
925 my $v = defined $extra{'v'} ? $extra{'v'} : 'v'; |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
926 my $m = defined $extra{'m'} ? $extra{'m'} : 2; |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
927 $c->new_stream({ headers => [ |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
928 { name => ':status', value => '200' }, |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
929 { name => $n, value => $v, mode => $m }, |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
930 ]}, $sid); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
931 |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
932 return $s->read(all => [{ fin => 1 }]); |
816d6ceefe50
Tests: added grpc tests with malformed headers.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1664
diff
changeset
|
933 }; |
1564
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
934 $f->{discard} = sub { |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
935 my (%extra) = @_; |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
936 $c->new_stream({ body_more => 1, %extra, headers => [ |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
937 { name => ':status', value => '200', |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
938 mode => $extra{mode} || 0 }, |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
939 { name => 'content-type', value => 'application/grpc', |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
940 mode => $extra{mode} || 1, huff => 1 }, |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
941 { name => 'x-connection', value => $n, |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
942 mode => 2, huff => 1 }, |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
943 ]}, $sid); |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
944 $c->h2_body('Hello world', { body_more => 1, |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
945 body_padding => $extra{body_padding} }); |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
946 |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
947 # stick trailers and subsequent frames for reproducibility |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
948 |
1623
3fe652bc9dae
Tests: introduced HTTP/2 frames buffering option in HTTP2 package.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1622
diff
changeset
|
949 $c->start_chain(); |
3fe652bc9dae
Tests: introduced HTTP/2 frames buffering option in HTTP2 package.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1622
diff
changeset
|
950 $c->new_stream({ headers => [ |
3fe652bc9dae
Tests: introduced HTTP/2 frames buffering option in HTTP2 package.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1622
diff
changeset
|
951 { name => 'grpc-status', value => '0', mode => 2 } |
3fe652bc9dae
Tests: introduced HTTP/2 frames buffering option in HTTP2 package.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1622
diff
changeset
|
952 ]}, $sid); |
3fe652bc9dae
Tests: introduced HTTP/2 frames buffering option in HTTP2 package.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1622
diff
changeset
|
953 $c->h2_window(42, $sid) if $uri eq '/Discard_WU'; |
3fe652bc9dae
Tests: introduced HTTP/2 frames buffering option in HTTP2 package.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1622
diff
changeset
|
954 $c->h2_rst($sid, 0) if $uri eq '/Discard_NE'; |
3fe652bc9dae
Tests: introduced HTTP/2 frames buffering option in HTTP2 package.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1622
diff
changeset
|
955 $c->h2_rst($sid, 0), $c->h2_rst($sid, 0), $c->h2_rst($sid, 0) |
3fe652bc9dae
Tests: introduced HTTP/2 frames buffering option in HTTP2 package.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1622
diff
changeset
|
956 if $uri eq '/Discard_NE3'; |
3fe652bc9dae
Tests: introduced HTTP/2 frames buffering option in HTTP2 package.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1622
diff
changeset
|
957 $c->h2_rst($sid, 8) if $uri eq '/Discard_CNL'; |
3fe652bc9dae
Tests: introduced HTTP/2 frames buffering option in HTTP2 package.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1622
diff
changeset
|
958 $c->send_chain(); |
1564
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
959 |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
960 return $s->read(all => [{ fin => 1 }], wait => 2) |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
961 if $uri eq '/Discard_WU' || $uri eq '/Discard_NE'; |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
962 return $s->read(all => [{ type => 'RST_STREAM' }]); |
fe938b5daf80
Tests: more grpc tests with discarded request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1535
diff
changeset
|
963 }; |
1303 | 964 return $f; |
965 } | |
966 | |
967 sub log2i { Test::Nginx::log_core('|| <<', @_); } | |
968 sub log2o { Test::Nginx::log_core('|| >>', @_); } | |
969 sub log2c { Test::Nginx::log_core('||', @_); } | |
970 | |
971 ############################################################################### |