Mercurial > hg > nginx-tests
annotate h2_server_push.t @ 1542:451e787aad76
Tests: reworked libgd version detection.
The "libgd-config" binary is deprecated in recent versions and may not exist
or have unexpected output. More, it may not present within older versions,
as well, if installed separately, which previously broke test assumptions.
The fix is change the fallback to skip tests. In addition, recent Perl GD
module (2.57) started to export libgd version, which is now also consulted.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Mon, 13 Jan 2020 18:15:35 +0300 |
parents | 144c6ce732e4 |
children | f7170c7acf3a |
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 |
1381
97c8280de681
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1348
diff
changeset
|
26 my $t = Test::Nginx->new()->has(qw/http http_v2 proxy rewrite gzip/)->plan(42) |
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 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
109 location /push { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
110 return 200 PROMISED; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
111 } |
1284
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
112 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
113 location /gzip.html { |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
114 gzip on; |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
115 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
|
116 return 200 PROMISED; |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
117 } |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
118 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
119 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
120 server { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
121 listen 127.0.0.1:8082 http2; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
122 server_name max_pushes; |
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 http2_max_concurrent_pushes 2; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
125 http2_push /push; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
126 http2_push /push; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
127 http2_push /push; |
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 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
130 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
131 EOF |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
132 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
133 $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
|
134 $t->write_file('t2', 'SEE-THIS'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
135 $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
|
136 |
1381
97c8280de681
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1348
diff
changeset
|
137 $t->run(); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
138 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
139 ############################################################################### |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
140 |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
141 # 6.6. PUSH_PROMISE |
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
142 # 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
|
143 # 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
|
144 |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
145 # preload & format |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
146 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
147 my $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
148 my $sid = $s->new_stream({ path => '/preload' }); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
149 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
|
150 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
151 my ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
152 ok($frame, 'push promise'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
153 is($frame->{headers}->{':authority'}, 'localhost', 'authority'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
154 is($frame->{headers}->{':scheme'}, 'http', 'scheme'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
155 is($frame->{headers}->{':method'}, 'GET', 'method'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
156 is($frame->{headers}->{':path'}, '/push', 'path'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
157 is($frame->{flags}, 4, 'flags'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
158 is($frame->{promised}, 2, 'promised stream'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
159 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
160 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} eq 2 } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
161 is($frame->{data}, 'PROMISED', 'promised stream payload'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
162 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
163 ($frame) = grep { $_->{type} eq "HEADERS" && $_->{sid} eq $sid } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
164 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
|
165 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
166 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
167 $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
|
168 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
169 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 4, 'preload 2'); |
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 => '/preload/many' }); |
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), 3, 'preload many'); |
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 # preload proxy |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
177 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
178 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
179 $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
|
180 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
181 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 2, '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 # both h2_push & preload |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
184 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
185 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
186 $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
|
187 $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
|
188 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
|
189 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
190 # h2_push |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
191 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
192 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
193 $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
|
194 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
195 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
196 ($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
|
197 ok($frame, 'h2_push only'); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
198 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
199 # h2_push off |
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 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
202 $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
|
203 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
204 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
205 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
206 ok(!$frame, 'h2_push off'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
207 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
208 # h2_push $var |
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 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
211 $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
|
212 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
213 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
214 ok($frame, 'h2_push variable'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
215 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
216 $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
|
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 empty'); |
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=off' }); |
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 off'); |
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=foo' }); |
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 relative path'); |
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 # SETTINGS_ENABLE_PUSH |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
232 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
233 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
234 $s->h2_settings(0, 0x2 => 0); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
235 $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
|
236 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
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 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
239 ok(!$frame, 'push setting disabled'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
240 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
241 $s->h2_settings(0, 0x2 => 1); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
242 $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
|
243 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
244 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
245 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
246 ok($frame, 'push setting enabled'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
247 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
248 $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
|
249 $frames = $s->read(all => [{ type => 'GOAWAY' }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
250 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
251 ($frame) = grep { $_->{type} =~ "GOAWAY" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
252 is($frame->{'code'}, 1, 'push setting invalid - GOAWAY protocol error'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
253 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
|
254 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
255 # SETTINGS_MAX_CONCURRENT_STREAMS |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
256 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
257 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
258 $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
|
259 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
260 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
|
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 $s->h2_settings(0, 0x3 => 1); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
264 $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
|
265 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
266 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
|
267 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
268 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
269 $s->h2_settings(0, 0x3 => 0); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
270 $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
|
271 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
272 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
|
273 |
1280
8a88c0d6f80a
Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents:
1279
diff
changeset
|
274 TODO: { |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
275 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
|
276 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
|
277 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
|
278 |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
279 # server push flow control & rst |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
280 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
281 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
282 $sid = $s->new_stream({ path => '/explf' }); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
283 $frames = $s->read(all => [ |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
284 { sid => 1, fin => 1 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
285 { sid => 2, length => 5 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
286 { sid => 4, fin => 4 }]); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
287 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
288 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 2 } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
289 is($frame->{length}, 5, 'flow control - pushed stream limited'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
290 is($frame->{flags}, 0, 'flow control - pushed stream flags'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
291 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
292 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 4 } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
293 ok(!$frame, 'flow control - no window for next stream'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
294 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
295 # window update |
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 $s->h2_window(2); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
298 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
299 $frames = $s->read(all => [{ length => 2 }]); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
300 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 2 } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
301 is($frame->{length}, 2, 'window update'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
302 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
303 # client refused stream |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
304 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
305 $s->h2_rst(4, 7); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
306 $s->h2_window(2**16); |
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 $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
|
309 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
|
310 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
311 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 2 } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
312 is($frame->{length}, 1, 'pushed response flow control'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
313 is($frame->{flags}, 1, 'pushed response END_STREAM'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
314 |
1280
8a88c0d6f80a
Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents:
1279
diff
changeset
|
315 } |
8a88c0d6f80a
Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents:
1279
diff
changeset
|
316 |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
317 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 4 } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
318 ok(!$frame, 'rst pushed 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 TODO: { |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
321 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
|
322 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
|
323 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
|
324 |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
325 # priority |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
326 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
327 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
328 $sid = $s->new_stream({ path => '/prio' }); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
329 $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
|
330 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
331 $s->h2_priority(16, 2, 4); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
332 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
333 $s->h2_window(2**17, 2); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
334 $s->h2_window(2**17, 4); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
335 $s->h2_window(2**17); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
336 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
337 $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
|
338 my @data = grep { $_->{type} eq "DATA" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
339 is(join(' ', map { $_->{sid} } @data), "4 2", 'priority 1'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
340 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
341 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
342 $sid = $s->new_stream({ path => '/prio' }); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
343 $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
|
344 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
345 $s->h2_priority(16, 4, 2); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
346 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
347 $s->h2_window(2**17, 2); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
348 $s->h2_window(2**17, 4); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
349 $s->h2_window(2**17); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
350 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
351 $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
|
352 @data = grep { $_->{type} eq "DATA" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
353 is(join(' ', map { $_->{sid} } @data), "2 4", 'priority 2'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
354 |
1280
8a88c0d6f80a
Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents:
1279
diff
changeset
|
355 } |
8a88c0d6f80a
Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents:
1279
diff
changeset
|
356 |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
357 # http2_max_concurrent_pushes |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
358 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
359 $s = Test::Nginx::HTTP2->new(port(8082)); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
360 $sid = $s->new_stream({ headers => [ |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
361 { name => ':method', value => 'GET', mode => 0 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
362 { name => ':scheme', value => 'http', mode => 0 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
363 { name => ':path', value => '/', mode => 0 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
364 { 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
|
365 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
366 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
|
367 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
368 $s = Test::Nginx::HTTP2->new(port(8082)); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
369 $s->h2_settings(0, 0x3 => 1); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
370 $sid = $s->new_stream({ headers => [ |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
371 { name => ':method', value => 'GET', mode => 0 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
372 { name => ':scheme', value => 'http', mode => 0 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
373 { name => ':path', value => '/', mode => 0 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
374 { 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
|
375 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
376 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
|
377 |
1283
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
378 # missing request header ':authority' |
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
379 |
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
380 $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
|
381 $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
|
382 { 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
|
383 { 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
|
384 { 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
|
385 $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
|
386 |
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
387 ($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
|
388 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
|
389 |
1284
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
390 # gzip tests |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
391 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
392 $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
|
393 $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
|
394 { 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
|
395 { 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
|
396 { 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
|
397 { 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
|
398 { 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
|
399 $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
|
400 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
401 ($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
|
402 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
|
403 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
404 ($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
|
405 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
|
406 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
407 ($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
|
408 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
|
409 |
1327
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
410 # scheme https |
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
411 |
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
412 $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
|
413 $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
|
414 { 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
|
415 { 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
|
416 { 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
|
417 { 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
|
418 $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
|
419 |
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
420 ($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
|
421 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
|
422 |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
423 ############################################################################### |
1284
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
424 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
425 sub gunzip_like { |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
426 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
|
427 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
428 SKIP: { |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
429 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
|
430 Test::More::skip( |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
431 "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
|
432 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
433 my $out; |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
434 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
435 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
|
436 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
437 if ($in =~ $re) { |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
438 fail($name); |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
439 return; |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
440 } |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
441 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
442 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
|
443 } |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
444 } |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
445 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
446 ############################################################################### |