annotate h2_trailers.t @ 1248:70192b1baf01

Tests: added exception test to stream_js.t using 'require'. The stream js tests introduced in edf5a3c9e36a fail on njs 0.1.14. It doesn't currently provide an easy way to check its version, whilst we are obligated to gracefully handle such cases somehow. With such an addition of 'require', now the tests are skipped instead on the previous versions.
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 21 Nov 2017 13:16:39 +0300
parents 39cfdf581253
children 97c8280de681
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
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http http_v2/)
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 http2_max_field_size 256k;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 location /continuation {
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 # many trailers to send in parts
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 add_trailer X-LongHeader $arg_h;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 add_trailer X-LongHeader $arg_h;
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 }
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 EOF
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 $t->write_file('index.html', 'SEE-THIS');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63 $t->write_file('empty', '');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64 $t->write_file('continuation', 'SEE-THIS');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 $t->try_run('no add_trailer')->plan(22);
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 ###############################################################################
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 my ($s, $sid, $frames, $frame);
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71 $s = Test::Nginx::HTTP2->new();
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 $sid = $s->new_stream({ path => '/' });
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 @$frames = grep { $_->{type} =~ "HEADERS|DATA" } @$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 is(@$frames, 3, 'frames');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 is($frame->{headers}->{':status'}, 200, 'header');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 is($frame->{headers}->{'x-var'}, undef, 'header not trailer');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81 is($frame->{flags}, 4, 'header flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 is($frame->{data}, 'SEE-THIS', 'data');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85 is($frame->{flags}, 0, 'data flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 is($frame->{headers}->{'x-var'}, 'localhost', 'trailer');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 is($frame->{flags}, 5, 'trailer flags');
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 # with zero content-length
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93 $s = Test::Nginx::HTTP2->new();
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94 $sid = $s->new_stream({ path => '/empty' });
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96 @$frames = grep { $_->{type} =~ "HEADERS|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 is(@$frames, 2, 'no data - frames');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 is($frame->{headers}->{':status'}, 200, 'no data - header');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102 is($frame->{flags}, 4, 'no data - header flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
105 is($frame->{headers}->{'x-var'}, 'localhost', 'no data - trailer');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106 is($frame->{flags}, 5, 'no data - trailer flags');
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 # CONTINUATION in response trailers
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
110 $s = Test::Nginx::HTTP2->new();
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
111 $sid = $s->new_stream({ path => '/continuation?h=' . 'x' x 2**12 });
1194
39cfdf581253 Tests: fixed CONTINUATION test in h2_trailers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1193
diff changeset
112 $frames = $s->read(all => [{ sid => $sid, type => 'CONTINUATION' }]);
1193
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113 @$frames = grep { $_->{type} =~ "HEADERS|CONTINUATION|DATA" } @$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 is(@$frames, 4, 'continuation - frames');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
117 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
118 is($frame->{headers}->{':status'}, 200, 'continuation - header');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
119 is($frame->{flags}, 4, 'continuation - header flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
120
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122 is($frame->{data}, 'SEE-THIS', 'continuation - data');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123 is($frame->{flags}, 0, 'continuation - data flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
124
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
125 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126 is($frame->{type}, 'HEADERS', 'continuation - trailer');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
127 is($frame->{flags}, 1, 'continuation - trailer flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
128
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
129 $frame = shift @$frames;
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
130 is($frame->{type}, 'CONTINUATION', 'continuation - trailer continuation');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
131 is($frame->{flags}, 4, 'continuation - trailer continuation flags');
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
132
ae3a46305e38 Tests: add_trailer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
133 ###############################################################################