annotate h2_trailers.t @ 1728:6d5ecf445e57

Tests: added HTTP/2 test with big request body. Notably, it is useful with body buffering in filters, in which case the stream window is flow controlled based on the preread buffer.
author Sergey Kandaurov <pluknet@nginx.com>
date Sat, 04 Sep 2021 14:50:02 +0300
parents 5b1fa6e32549
children 236d038dc04a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1193
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for HTTP/2 trailers.
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19 use Test::Nginx::HTTP2;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21 ###############################################################################
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDERR; $| = 1;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24 select STDOUT; $| = 1;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25
1381
97c8280de681 Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1194
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http http_v2/)->plan(22)
1193
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27 ->write_file_expand('nginx.conf', <<'EOF');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 %%TEST_GLOBALS%%
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 daemon off;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 events {
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34 }
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 http {
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 server {
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40 listen 127.0.0.1:8080 http2;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 server_name localhost;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 location / {
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44 add_trailer X-Var $host;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 }
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 location /continuation {
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 # many trailers to send in parts
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 add_trailer X-LongHeader $arg_h;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 add_trailer X-LongHeader $arg_h;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 add_trailer X-LongHeader $arg_h;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 add_trailer X-LongHeader $arg_h;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 add_trailer X-LongHeader $arg_h;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 }
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 }
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 }
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 EOF
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 $t->write_file('index.html', 'SEE-THIS');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61 $t->write_file('empty', '');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 $t->write_file('continuation', 'SEE-THIS');
1381
97c8280de681 Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1194
diff changeset
63 $t->run();
1193
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 ###############################################################################
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 my ($s, $sid, $frames, $frame);
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 $s = Test::Nginx::HTTP2->new();
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70 $sid = $s->new_stream({ path => '/' });
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 @$frames = grep { $_->{type} =~ "HEADERS|DATA" } @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 is(@$frames, 3, 'frames');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77 is($frame->{headers}->{':status'}, 200, 'header');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 is($frame->{headers}->{'x-var'}, undef, 'header not trailer');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 is($frame->{flags}, 4, 'header flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 is($frame->{data}, 'SEE-THIS', 'data');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 is($frame->{flags}, 0, 'data flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 is($frame->{headers}->{'x-var'}, 'localhost', 'trailer');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 is($frame->{flags}, 5, 'trailer flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 # with zero content-length
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 $s = Test::Nginx::HTTP2->new();
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92 $sid = $s->new_stream({ path => '/empty' });
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94 @$frames = grep { $_->{type} =~ "HEADERS|DATA" } @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96 is(@$frames, 2, 'no data - frames');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99 is($frame->{headers}->{':status'}, 200, 'no data - header');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 is($frame->{flags}, 4, 'no data - header flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103 is($frame->{headers}->{'x-var'}, 'localhost', 'no data - trailer');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 is($frame->{flags}, 5, 'no data - trailer flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
105
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106 # CONTINUATION in response trailers
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
108 $s = Test::Nginx::HTTP2->new();
1646
5b1fa6e32549 Tests: avoid http2_max_field_size in h2_trailers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1381
diff changeset
109 $sid = $s->new_stream({ path => '/continuation?h=' . 'x' x 4000 });
1194
39cfdf581253 Tests: fixed CONTINUATION test in h2_trailers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1193
diff changeset
110 $frames = $s->read(all => [{ sid => $sid, type => 'CONTINUATION' }]);
1193
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
111 @$frames = grep { $_->{type} =~ "HEADERS|CONTINUATION|DATA" } @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
112
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113 is(@$frames, 4, 'continuation - frames');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
114
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
115 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116 is($frame->{headers}->{':status'}, 200, 'continuation - header');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
117 is($frame->{flags}, 4, 'continuation - header flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
118
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
119 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
120 is($frame->{data}, 'SEE-THIS', 'continuation - data');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121 is($frame->{flags}, 0, 'continuation - data flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
124 is($frame->{type}, 'HEADERS', 'continuation - trailer');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
125 is($frame->{flags}, 1, 'continuation - trailer flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
127 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
128 is($frame->{type}, 'CONTINUATION', 'continuation - trailer continuation');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
129 is($frame->{flags}, 4, 'continuation - trailer continuation flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
130
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
131 ###############################################################################