annotate h2_server_push.t @ 1847:a9704b9ed7a2

Tests: removed multiple server certificates from ssl_ocsp.t. Multiple server certificates are not needed to test OCSP verification of client certificates (in contrast to OCSP stapling, where server certificates are verified, and different staples should be correctly returned with different server certificates). And using multiple server certificates causes issues when testing with LibreSSL due to broken sigalgs-based server certificate selection in LibreSSL with TLSv1.3. Accordingly, the test is simplified to do not use multiple server certificates.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 23 Mar 2023 19:50:26 +0300
parents f7170c7acf3a
children 236d038dc04a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for HTTP/2 server push.
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19 use Test::Nginx::HTTP2;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21 ###############################################################################
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDERR; $| = 1;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24 select STDOUT; $| = 1;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25
1734
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http http_v2 proxy rewrite gzip/)->plan(54)
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27 ->write_file_expand('nginx.conf', <<'EOF');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 %%TEST_GLOBALS%%
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 daemon off;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 events {
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34 }
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 http {
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 server {
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40 listen 127.0.0.1:8080 http2;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 listen 127.0.0.1:8081;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 server_name localhost;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44 location /prio {
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 http2_push /t1;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46 http2_push /t2;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 return 204;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 }
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 location /expl {
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 http2_push /push;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 http2_push /push2;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 location /expl/off {
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 http2_push off;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 }
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 }
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 location /preload {
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 http2_push_preload on;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61 add_header Link "</push>; rel=preload";
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 add_header X-Link $sent_http_link;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63 return 200 SEE-THIS;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64 }
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66 location /preload2 {
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 http2_push_preload on;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68 add_header Link "</push>; rel=preload"; # valid
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 add_header Link "</push2 >; rel=preload"; # valid
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70 add_header Link "</push3>; rel=preloadX"; # not
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71 add_header Link '</push4>; rel="preload"'; # valid
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 add_header Link '</push5>; rel="preloadX"'; # not
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73 add_header Link "</push6>; rel=preload; nopush"; # not
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 add_header Link '</push7>; rel="foo"'; # not
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75 add_header Link '</push7>; rel="foo preload"'; # valid
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 return 200 SEE-THIS;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77 }
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 location /preload/many {
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 http2_push_preload on;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81 add_header Link "</push>; rel=preload, </push2>; rel=preload";
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 add_header Link "</push3>, </push4>; rel=preload";
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 return 200 SEE-THIS;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 }
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 location /preload/proxy {
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 http2_push_preload on;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 proxy_pass http://127.0.0.1:8081/proxied;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 }
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 location /proxied {
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92 add_header Link "</push>; rel=preload";
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93 add_header Link "</push2>; rel=preload";
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94 return 200 SEE-THIS;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95 }
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97 location /both {
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98 http2_push /push;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99 http2_push_preload on;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 add_header Link "</push>; rel=preload";
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 return 200 SEE-THIS;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102 }
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 location /arg {
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
105 http2_push $arg_push;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106 return 204;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107 }
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
108
1734
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
109 location /continuation {
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
110 http2_push /push?arg="$args$args$args$args";
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
111 return 204;
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
112 }
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
113
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
114 location /push {
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
115 return 200 PROMISED;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116 }
1284
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
117
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
118 location /gzip.html {
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
119 gzip on;
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
120 gzip_min_length 0;
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
121 return 200 PROMISED;
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
122 }
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123 }
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
124
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
125 server {
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126 listen 127.0.0.1:8082 http2;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
127 server_name max_pushes;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
128
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
129 http2_max_concurrent_pushes 2;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
130 http2_push /push;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
131 http2_push /push;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
132 http2_push /push;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
133 }
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
134 }
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
135
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
136 EOF
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
137
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
138 $t->write_file('t1', join('', map { sprintf "X%04dXXX", $_ } (1 .. 8202)));
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
139 $t->write_file('t2', 'SEE-THIS');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
140 $t->write_file('explf', join('', map { sprintf "X%06dXXX", $_ } (1 .. 6553)));
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
141
1381
97c8280de681 Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1348
diff changeset
142 $t->run();
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
143
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
144 ###############################################################################
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
145
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
146 # 6.6. PUSH_PROMISE
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
147 # PUSH_PROMISE frames MUST only be sent on a peer-initiated stream that
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
148 # is in either the "open" or "half-closed (remote)" state.
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
149
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
150 # preload & format
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
151
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
152 my $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
153 my $sid = $s->new_stream({ path => '/preload' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
154 my $frames = $s->read(all => [{ sid => 1, fin => 1 }, { sid => 2, fin => 1 }]);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
155
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
156 my ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
157 ok($frame, 'push promise');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
158 is($frame->{headers}->{':authority'}, 'localhost', 'authority');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
159 is($frame->{headers}->{':scheme'}, 'http', 'scheme');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
160 is($frame->{headers}->{':method'}, 'GET', 'method');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
161 is($frame->{headers}->{':path'}, '/push', 'path');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
162 is($frame->{flags}, 4, 'flags');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
163 is($frame->{promised}, 2, 'promised stream');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
164
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
165 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} eq 2 } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
166 is($frame->{data}, 'PROMISED', 'promised stream payload');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
167
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
168 ($frame) = grep { $_->{type} eq "HEADERS" && $_->{sid} eq $sid } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
169 is($frame->{headers}->{'x-link'}, '</push>; rel=preload', 'sent_http_link');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
170
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
171 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
172 $sid = $s->new_stream({ path => '/preload2' });
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
173 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
174 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 4, 'preload 2');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
175
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
177 $sid = $s->new_stream({ path => '/preload/many' });
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
178 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
179 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 3, 'preload many');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
180
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
181 # preload proxy
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
182
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
183 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
184 $sid = $s->new_stream({ path => '/preload/proxy' });
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
185 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
186 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 2, 'preload proxy');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
187
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
188 # both h2_push & preload
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
189
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
190 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
191 $sid = $s->new_stream({ path => '/both' });
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
192 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1282
fd281e3a3df5 Tests: better test names in h2_server_push.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1281
diff changeset
193 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 2, 'h2_push and preload');
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
194
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
195 # h2_push
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
196
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
197 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
198 $sid = $s->new_stream({ path => '/expl' });
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
199 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
200
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
201 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
1282
fd281e3a3df5 Tests: better test names in h2_server_push.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1281
diff changeset
202 ok($frame, 'h2_push only');
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
203
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
204 # h2_push off
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
205
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
206 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
207 $sid = $s->new_stream({ path => '/expl/off' });
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
208 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
209
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
210 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
211 ok(!$frame, 'h2_push off');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
212
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
213 # h2_push $var
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
214
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
215 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
216 $sid = $s->new_stream({ path => '/arg?push=/push' });
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
217 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
218 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
219 ok($frame, 'h2_push variable');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
220
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
221 $sid = $s->new_stream({ path => '/arg?push=' });
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
222 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
223 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
224 ok(!$frame, 'h2_push variable empty');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
225
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
226 $sid = $s->new_stream({ path => '/arg?push=off' });
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
227 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
228 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
229 ok(!$frame, 'h2_push variable off');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
230
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
231 $sid = $s->new_stream({ path => '/arg?push=foo' });
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
232 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
233 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
234 ok(!$frame, 'h2_push variable relative path');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
235
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
236 # SETTINGS_ENABLE_PUSH
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
237
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
238 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
239 $s->h2_settings(0, 0x2 => 0);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
240 $sid = $s->new_stream({ path => '/expl' });
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
241 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
242
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
243 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
244 ok(!$frame, 'push setting disabled');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
245
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
246 $s->h2_settings(0, 0x2 => 1);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
247 $sid = $s->new_stream({ path => '/expl' });
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
248 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
249
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
250 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
251 ok($frame, 'push setting enabled');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
252
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
253 $s->h2_settings(0, 0x2 => 42);
1281
5bbade306a0d Tests: unbreak h2_server_push.t on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1280
diff changeset
254 $frames = $s->read(all => [{ type => 'GOAWAY' }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
255
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
256 ($frame) = grep { $_->{type} =~ "GOAWAY" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
257 is($frame->{'code'}, 1, 'push setting invalid - GOAWAY protocol error');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
258 cmp_ok($frame->{'last_sid'}, '<', 5, 'push setting invalid - last sid');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
259
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
260 # SETTINGS_MAX_CONCURRENT_STREAMS
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
261
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
262 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
263 $sid = $s->new_stream({ path => '/expl' });
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
264 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
265 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 2, 'max pushes default');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
266
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
267 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
268 $s->h2_settings(0, 0x3 => 1);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
269 $sid = $s->new_stream({ path => '/expl' });
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
270 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
271 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 1, 'max pushes limited');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
272
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
273 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
274 $s->h2_settings(0, 0x3 => 0);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
275 $sid = $s->new_stream({ path => '/expl' });
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
276 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
277 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 0, 'max pushes disabled');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
278
1280
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
279 TODO: {
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
280 todo_skip 'long tests with aio', 6 unless $ENV{TEST_NGINX_UNSAFE}
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
281 or $t->read_file('nginx.conf') !~ /aio (on|threads)/;
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
282 local $TODO = 'not yet' if $t->read_file('nginx.conf') =~ /aio (on|threads)/;
1280
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
283
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
284 # server push flow control & rst
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
285
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
286 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
287 $sid = $s->new_stream({ path => '/explf' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
288 $frames = $s->read(all => [
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
289 { sid => 1, fin => 1 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
290 { sid => 2, length => 5 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
291 { sid => 4, fin => 4 }]);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
292
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
293 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 2 } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
294 is($frame->{length}, 5, 'flow control - pushed stream limited');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
295 is($frame->{flags}, 0, 'flow control - pushed stream flags');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
296
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
297 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 4 } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
298 ok(!$frame, 'flow control - no window for next stream');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
299
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
300 # window update
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
301
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
302 $s->h2_window(2);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
303
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
304 $frames = $s->read(all => [{ length => 2 }]);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
305 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 2 } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
306 is($frame->{length}, 2, 'window update');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
307
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
308 # client refused stream
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
309
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
310 $s->h2_rst(4, 7);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
311 $s->h2_window(2**16);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
312
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
313 $frames = $s->read(all => [{ sid => 2, length => 1 }]);
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
314 push @$frames, @{ $s->read(all => [{ sid => 4, fin => 1 }], wait => 0.2) };
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
315
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
316 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 2 } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
317 is($frame->{length}, 1, 'pushed response flow control');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
318 is($frame->{flags}, 1, 'pushed response END_STREAM');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
319
1280
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
320 }
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
321
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
322 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 4 } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
323 ok(!$frame, 'rst pushed stream');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
324
1280
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
325 TODO: {
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
326 todo_skip 'long tests with aio', 2 unless $ENV{TEST_NGINX_UNSAFE}
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
327 or $t->read_file('nginx.conf') !~ /aio (on|threads)/;
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
328 local $TODO = 'not yet' if $t->read_file('nginx.conf') =~ /aio (on|threads)/;
1280
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
329
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
330 # priority
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
331
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
332 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
333 $sid = $s->new_stream({ path => '/prio' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
334 $frames = $s->read(all => [{ length => 2**16 - 1 }, { sid => 4, fin => 4 }]);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
335
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
336 $s->h2_priority(16, 2, 4);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
337
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
338 $s->h2_window(2**17, 2);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
339 $s->h2_window(2**17, 4);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
340 $s->h2_window(2**17);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
341
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
342 $frames = $s->read(all => [{ sid => 2, fin => 1 }, { sid => 4, fin => 1 }]);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
343 my @data = grep { $_->{type} eq "DATA" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
344 is(join(' ', map { $_->{sid} } @data), "4 2", 'priority 1');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
345
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
346 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
347 $sid = $s->new_stream({ path => '/prio' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
348 $frames = $s->read(all => [{ length => 2**16 - 1 }, { sid => 4, fin => 4 }]);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
349
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
350 $s->h2_priority(16, 4, 2);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
351
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
352 $s->h2_window(2**17, 2);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
353 $s->h2_window(2**17, 4);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
354 $s->h2_window(2**17);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
355
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
356 $frames = $s->read(all => [{ sid => 2, fin => 1 }, { sid => 4, fin => 1 }]);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
357 @data = grep { $_->{type} eq "DATA" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
358 is(join(' ', map { $_->{sid} } @data), "2 4", 'priority 2');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
359
1280
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
360 }
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
361
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
362 # http2_max_concurrent_pushes
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
363
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
364 $s = Test::Nginx::HTTP2->new(port(8082));
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
365 $sid = $s->new_stream({ headers => [
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
366 { name => ':method', value => 'GET', mode => 0 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
367 { name => ':scheme', value => 'http', mode => 0 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
368 { name => ':path', value => '/', mode => 0 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
369 { name => ':authority', value => 'max_pushes', mode => 1 }]});
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
370 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
371 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 2, 'http2 max pushes lim');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
372
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
373 $s = Test::Nginx::HTTP2->new(port(8082));
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
374 $s->h2_settings(0, 0x3 => 1);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
375 $sid = $s->new_stream({ headers => [
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
376 { name => ':method', value => 'GET', mode => 0 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
377 { name => ':scheme', value => 'http', mode => 0 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
378 { name => ':path', value => '/', mode => 0 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
379 { name => ':authority', value => 'max_pushes', mode => 1 }]});
1348
8cb66a4d3ca2 Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1340
diff changeset
380 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
381 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 1, 'http2 max pushes 2');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
382
1283
16f091962811 Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1282
diff changeset
383 # missing request header ':authority'
16f091962811 Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1282
diff changeset
384
16f091962811 Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1282
diff changeset
385 $s = Test::Nginx::HTTP2->new(port(8082));
16f091962811 Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1282
diff changeset
386 $sid = $s->new_stream({ headers => [
16f091962811 Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1282
diff changeset
387 { name => ':method', value => 'GET', mode => 0 },
16f091962811 Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1282
diff changeset
388 { name => ':scheme', value => 'http', mode => 0 },
16f091962811 Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1282
diff changeset
389 { name => ':path', value => '/', mode => 0 }]});
16f091962811 Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1282
diff changeset
390 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
16f091962811 Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1282
diff changeset
391
16f091962811 Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1282
diff changeset
392 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
16f091962811 Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1282
diff changeset
393 is($frame->{headers}->{':status'}, 400, 'incomplete headers');
16f091962811 Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1282
diff changeset
394
1284
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
395 # gzip tests
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
396
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
397 $s = Test::Nginx::HTTP2->new();
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
398 $sid = $s->new_stream({ headers => [
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
399 { name => ':method', value => 'GET', mode => 0 },
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
400 { name => ':scheme', value => 'http', mode => 0 },
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
401 { name => ':path', value => '/arg?push=/gzip.html' },
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
402 { name => ':authority', value => 'localhost', mode => 1 },
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
403 { name => 'accept-encoding', value => 'gzip' }]});
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
404 $frames = $s->read(all => [{ sid => 2, fin => 1 }]);
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
405
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
406 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" && $_->{sid} == $sid } @$frames;
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
407 is($frame->{headers}->{'accept-encoding'}, 'gzip', 'gzip - push promise');
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
408
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
409 ($frame) = grep { $_->{type} eq "HEADERS" && $_->{sid} == 2 } @$frames;
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
410 is($frame->{headers}->{'content-encoding'}, 'gzip', 'gzip - headers');
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
411
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
412 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 2 } @$frames;
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
413 gunzip_like($frame->{data}, qr/^PROMISED\Z/, 'gzip - response');
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
414
1327
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
415 # scheme https
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
416
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
417 $s = Test::Nginx::HTTP2->new();
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
418 $sid = $s->new_stream({ headers => [
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
419 { name => ':method', value => 'GET', mode => 0 },
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
420 { name => ':scheme', value => 'https', mode => 0 },
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
421 { name => ':path', value => '/preload' },
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
422 { name => ':authority', value => 'localhost', mode => 1 }]});
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
423 $frames = $s->read(all => [{ sid => 2, fin => 1 }]);
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
424
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
425 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" && $_->{sid} == $sid } @$frames;
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
426 is($frame->{headers}->{':scheme'}, 'https', 'scheme https');
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
427
1734
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
428 # CONTINUATION
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
429
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
430 $s = Test::Nginx::HTTP2->new();
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
431 $sid = $s->new_stream({ path => '/continuation?x=' . ('X' x 4096) });
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
432 $frames = $s->read(all => [{ sid => 1, fin => 1 }, { sid => 2, fin => 1 }]);
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
433
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
434 @$frames = grep { $_->{promised} } @$frames;
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
435 is(@$frames, 2, 'continuation - frames');
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
436
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
437 $frame = shift @$frames;
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
438 is($frame->{type}, 'PUSH_PROMISE', 'continuation - PUSH_PROMISE');
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
439 is($frame->{length}, 16384, 'continuation - PUSH_PROMISE length');
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
440 is($frame->{flags}, 0, 'continuation - PUSH_PROMISE flags');
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
441 is($frame->{sid}, $sid, 'continuation - PUSH_PROMISE sid');
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
442 is($frame->{promised}, 2, 'continuation - promised stream');
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
443
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
444 $frame = shift @$frames;
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
445 is($frame->{type}, 'CONTINUATION', 'continuation - CONTINUATION');
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
446 is($frame->{flags}, 4, 'continuation - CONTINUATION flags');
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
447 is($frame->{headers}->{':authority'}, 'localhost', 'continuation - authority');
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
448 is($frame->{headers}->{':scheme'}, 'http', 'continuation - scheme');
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
449 is($frame->{headers}->{':method'}, 'GET', 'continuation - method');
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
450 like($frame->{headers}->{':path'}, qr!^/push!, 'continuation - path');
f7170c7acf3a Tests: added HTTP/2 tests for PUSH_PROMISE with CONTINUATION.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1535
diff changeset
451
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
452 ###############################################################################
1284
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
453
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
454 sub gunzip_like {
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
455 my ($in, $re, $name) = @_;
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
456
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
457 SKIP: {
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
458 eval { require IO::Uncompress::Gunzip; };
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
459 Test::More::skip(
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
460 "IO::Uncompress::Gunzip not installed", 1) if $@;
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
461
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
462 my $out;
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
463
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
464 IO::Uncompress::Gunzip::gunzip(\$in => \$out);
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
465
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
466 if ($in =~ $re) {
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
467 fail($name);
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
468 return;
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
469 }
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
470
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
471 like($out, $re, $name);
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
472 }
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
473 }
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
474
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
475 ###############################################################################