annotate h2_server_push.t @ 1427:eb1d883305ea

Tests: avoid edge cases in upstream random two test. Unavailable servers contribute to the number of attempts, if selected, before the balancer would fall back to the default round-robin method. This means that it's quite possible to get server with more connections. To facilitate with selecting two alive servers, down server was removed from the upstream configuration at the cost of slightly worse coverage.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 10 Jan 2019 17:42:34 +0300
parents 97c8280de681
children 144c6ce732e4
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
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 TODO: {
1340
da711694bbd7 Tests: h2_server_push.t TODO adjusted.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1327
diff changeset
413 local $TODO = 'not yet' unless $t->has_version('1.15.1');
1327
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
414
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
415 $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
416 $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
417 { 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
418 { 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
419 { 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
420 { 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
421 $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
422
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
423 ($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
424 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
425
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
426 }
ecbd984ffe04 Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1289
diff changeset
427
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
428 ###############################################################################
1284
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
429
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
430 sub gunzip_like {
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
431 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
432
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
433 SKIP: {
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
434 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
435 Test::More::skip(
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
436 "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
437
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
438 my $out;
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
439
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
440 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
441
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
442 if ($in =~ $re) {
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
443 fail($name);
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
444 return;
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
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
447 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
448 }
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
449 }
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
450
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
451 ###############################################################################