Mercurial > hg > nginx-tests
changeset 1348:8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 14 Jun 2018 14:01:50 +0300 |
parents | 106d9f806288 |
children | 99a83f7e7755 |
files | h2_server_push.t |
diffstat | 1 files changed, 28 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/h2_server_push.t Thu Jun 14 10:51:05 2018 +0300 +++ b/h2_server_push.t Thu Jun 14 14:01:50 2018 +0300 @@ -138,6 +138,10 @@ ############################################################################### +# 6.6. PUSH_PROMISE +# PUSH_PROMISE frames MUST only be sent on a peer-initiated stream that +# is in either the "open" or "half-closed (remote)" state. + # preload & format my $s = Test::Nginx::HTTP2->new(); @@ -161,33 +165,33 @@ $s = Test::Nginx::HTTP2->new(); $sid = $s->new_stream({ path => '/preload2' }); -$frames = $s->read(all => [{ sid => 8, fin => 1 }], wait => 0.5); +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 4, 'preload 2'); $s = Test::Nginx::HTTP2->new(); $sid = $s->new_stream({ path => '/preload/many' }); -$frames = $s->read(all => [{ sid => 8, fin => 1 }], wait => 0.5); +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 3, 'preload many'); # preload proxy $s = Test::Nginx::HTTP2->new(); $sid = $s->new_stream({ path => '/preload/proxy' }); -$frames = $s->read(all => [{ sid => 8, fin => 1 }], wait => 0.5); +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 2, 'preload proxy'); # both h2_push & preload $s = Test::Nginx::HTTP2->new(); $sid = $s->new_stream({ path => '/both' }); -$frames = $s->read(all => [{ sid => 8, fin => 1 }], wait => 0.5); +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 2, 'h2_push and preload'); # h2_push $s = Test::Nginx::HTTP2->new(); $sid = $s->new_stream({ path => '/expl' }); -$frames = $s->read(all => [{ sid => 1, fin => 1 }, { sid => 2, fin => 1 }]); +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; ok($frame, 'h2_push only'); @@ -196,7 +200,7 @@ $s = Test::Nginx::HTTP2->new(); $sid = $s->new_stream({ path => '/expl/off' }); -$frames = $s->read(all => [{ type => 'PUSH_PROMISE' }], wait => 0.2); +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; ok(!$frame, 'h2_push off'); @@ -205,22 +209,22 @@ $s = Test::Nginx::HTTP2->new(); $sid = $s->new_stream({ path => '/arg?push=/push' }); -$frames = $s->read(all => [{ type => 'PUSH_PROMISE' }], wait => 0.2); +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; ok($frame, 'h2_push variable'); $sid = $s->new_stream({ path => '/arg?push=' }); -$frames = $s->read(all => [{ type => 'PUSH_PROMISE' }], wait => 0.2); +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; ok(!$frame, 'h2_push variable empty'); $sid = $s->new_stream({ path => '/arg?push=off' }); -$frames = $s->read(all => [{ type => 'PUSH_PROMISE' }], wait => 0.2); +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; ok(!$frame, 'h2_push variable off'); $sid = $s->new_stream({ path => '/arg?push=foo' }); -$frames = $s->read(all => [{ type => 'PUSH_PROMISE' }], wait => 0.2); +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; ok(!$frame, 'h2_push variable relative path'); @@ -229,14 +233,14 @@ $s = Test::Nginx::HTTP2->new(); $s->h2_settings(0, 0x2 => 0); $sid = $s->new_stream({ path => '/expl' }); -$frames = $s->read(all => [{ type => 'PUSH_PROMISE' }], wait => 0.2); +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; ok(!$frame, 'push setting disabled'); $s->h2_settings(0, 0x2 => 1); $sid = $s->new_stream({ path => '/expl' }); -$frames = $s->read(all => [{ sid => $sid, fin => 1 }, { sid => 2, fin => 1 }]); +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; ok($frame, 'push setting enabled'); @@ -252,27 +256,25 @@ $s = Test::Nginx::HTTP2->new(); $sid = $s->new_stream({ path => '/expl' }); -$frames = $s->read(all => [ - { sid => 1, fin => 1 }, - { sid => 2, fin => 1 }, - { sid => 4, fin => 1 }]); +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 2, 'max pushes default'); $s = Test::Nginx::HTTP2->new(); $s->h2_settings(0, 0x3 => 1); $sid = $s->new_stream({ path => '/expl' }); -$frames = $s->read(all => [{ sid => 1, fin => 1 }, { sid => 2, fin => 1 }]); +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 1, 'max pushes limited'); $s = Test::Nginx::HTTP2->new(); $s->h2_settings(0, 0x3 => 0); $sid = $s->new_stream({ path => '/expl' }); -$frames = $s->read(all => [{ type => 'PUSH_PROMISE' }], wait => 0.2); +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 0, 'max pushes disabled'); TODO: { -local $TODO = 'not yet' if $t->read_file('nginx.conf') =~ /aio on/ - or $t->read_file('nginx.conf') =~ /aio threads/; +todo_skip 'long tests with aio', 6 unless $ENV{TEST_NGINX_UNSAFE} + or $t->read_file('nginx.conf') !~ /aio (on|threads)/; +local $TODO = 'not yet' if $t->read_file('nginx.conf') =~ /aio (on|threads)/; # server push flow control & rst @@ -304,7 +306,7 @@ $s->h2_window(2**16); $frames = $s->read(all => [{ sid => 2, length => 1 }]); -push @$frames, @{ $s->read(all => [{ sid => 4, fin => 1 }], wait => 0.5) }; +push @$frames, @{ $s->read(all => [{ sid => 4, fin => 1 }], wait => 0.2) }; ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 2 } @$frames; is($frame->{length}, 1, 'pushed response flow control'); @@ -316,8 +318,9 @@ ok(!$frame, 'rst pushed stream'); TODO: { -local $TODO = 'not yet' if $t->read_file('nginx.conf') =~ /aio on/ - or $t->read_file('nginx.conf') =~ /aio threads/; +todo_skip 'long tests with aio', 2 unless $ENV{TEST_NGINX_UNSAFE} + or $t->read_file('nginx.conf') !~ /aio (on|threads)/; +local $TODO = 'not yet' if $t->read_file('nginx.conf') =~ /aio (on|threads)/; # priority @@ -359,9 +362,7 @@ { name => ':scheme', value => 'http', mode => 0 }, { name => ':path', value => '/', mode => 0 }, { name => ':authority', value => 'max_pushes', mode => 1 }]}); -$frames = $s->read(all => [{ sid => $sid, fin => 1 }, - { sid => 2, fin => 1 }, { sid => 4, fin => 1 }]); -push @$frames, @{ $s->read(all => [{ sid => 6, fin => 1 }], wait => 0.2) }; +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 2, 'http2 max pushes lim'); $s = Test::Nginx::HTTP2->new(port(8082)); @@ -371,8 +372,7 @@ { name => ':scheme', value => 'http', mode => 0 }, { name => ':path', value => '/', mode => 0 }, { name => ':authority', value => 'max_pushes', mode => 1 }]}); -$frames = $s->read(all => [{ sid => $sid, fin => 1 }, { sid => 2, fin => 1 }]); -push @$frames, @{ $s->read(all => [{ sid => 4, fin => 1 }], wait => 0.2) }; +$frames = $s->read(all => [{ sid => $sid, fin => 1 }]); is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 1, 'http2 max pushes 2'); # missing request header ':authority'