Mercurial > hg > nginx-tests
comparison grpc.t @ 1676:816d6ceefe50
Tests: added grpc tests with malformed headers.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Tue, 18 May 2021 13:34:53 +0300 |
parents | 0fae67763be5 |
children | 5ac6efbe5552 |
comparison
equal
deleted
inserted
replaced
1675:0d1cec688111 | 1676:816d6ceefe50 |
---|---|
22 | 22 |
23 select STDERR; $| = 1; | 23 select STDERR; $| = 1; |
24 select STDOUT; $| = 1; | 24 select STDOUT; $| = 1; |
25 | 25 |
26 my $t = Test::Nginx->new()->has(qw/http rewrite http_v2 grpc/) | 26 my $t = Test::Nginx->new()->has(qw/http rewrite http_v2 grpc/) |
27 ->has(qw/upstream_keepalive/)->plan(116); | 27 ->has(qw/upstream_keepalive/)->plan(123); |
28 | 28 |
29 $t->write_file_expand('nginx.conf', <<'EOF'); | 29 $t->write_file_expand('nginx.conf', <<'EOF'); |
30 | 30 |
31 %%TEST_GLOBALS%% | 31 %%TEST_GLOBALS%% |
32 | 32 |
380 $f->{http_start}('/LongField'); | 380 $f->{http_start}('/LongField'); |
381 $f->{data}('Hello'); | 381 $f->{data}('Hello'); |
382 $frames = $f->{field_len}(2**15); | 382 $frames = $f->{field_len}(2**15); |
383 ($frame) = grep { $_->{flags} & 0x4 } @$frames; | 383 ($frame) = grep { $_->{flags} & 0x4 } @$frames; |
384 is($frame->{headers}{'x' x 2**15}, 'y' x 2**15, 'long header field 3'); | 384 is($frame->{headers}{'x' x 2**15}, 'y' x 2**15, 'long header field 3'); |
385 | |
386 # Intermediary Encapsulation Attacks, malformed header fields | |
387 | |
388 $f->{http_start}('/'); | |
389 $f->{data}('Hello'); | |
390 $frames = $f->{field_bad}(n => 'n:n'); | |
391 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
392 is($frame->{headers}{':status'}, 502, 'invalid header name colon'); | |
393 | |
394 $f->{http_start}('/'); | |
395 $f->{data}('Hello'); | |
396 $frames = $f->{field_bad}(n => 'NN'); | |
397 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
398 is($frame->{headers}{':status'}, 502, 'invalid header name uppercase'); | |
399 | |
400 $f->{http_start}('/'); | |
401 $f->{data}('Hello'); | |
402 $frames = $f->{field_bad}(n => "n\nn"); | |
403 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
404 is($frame->{headers}{':status'}, 502, 'invalid header name ctl'); | |
405 | |
406 $f->{http_start}('/'); | |
407 $f->{data}('Hello'); | |
408 $frames = $f->{field_bad}(v => "v\nv"); | |
409 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
410 is($frame->{headers}{':status'}, 502, 'invalid header value ctl'); | |
411 | |
412 # invalid HPACK index | |
413 | |
414 $f->{http_start}('/'); | |
415 $f->{data}('Hello'); | |
416 $frames = $f->{field_bad}('m' => 0); | |
417 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
418 is($frame->{headers}{':status'}, 502, 'invalid index - indexed header'); | |
419 | |
420 $f->{http_start}('/'); | |
421 $f->{data}('Hello'); | |
422 $frames = $f->{field_bad}('m' => 1); | |
423 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
424 is($frame->{headers}{':status'}, 502, 'invalid index - with indexing'); | |
425 | |
426 $f->{http_start}('/'); | |
427 $f->{data}('Hello'); | |
428 $frames = $f->{field_bad}('m' => 3); | |
429 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
430 is($frame->{headers}{':status'}, 502, 'invalid index - without indexing'); | |
385 | 431 |
386 # flow control | 432 # flow control |
387 | 433 |
388 $f->{http_start}('/FlowControl'); | 434 $f->{http_start}('/FlowControl'); |
389 $frames = $f->{data_len}(('Hello' x 13000) . ('x' x 550), 65535); | 435 $frames = $f->{data_len}(('Hello' x 13000) . ('x' x 550), 65535); |
782 mode => 2, huff => 1 }, | 828 mode => 2, huff => 1 }, |
783 ]}, $sid); | 829 ]}, $sid); |
784 | 830 |
785 return $s->read(all => [{ fin => 1 }]); | 831 return $s->read(all => [{ fin => 1 }]); |
786 }; | 832 }; |
833 $f->{field_bad} = sub { | |
834 my (%extra) = @_; | |
835 my $n = defined $extra{'n'} ? $extra{'n'} : 'n'; | |
836 my $v = defined $extra{'v'} ? $extra{'v'} : 'v'; | |
837 my $m = defined $extra{'m'} ? $extra{'m'} : 2; | |
838 $c->new_stream({ headers => [ | |
839 { name => ':status', value => '200' }, | |
840 { name => $n, value => $v, mode => $m }, | |
841 ]}, $sid); | |
842 | |
843 return $s->read(all => [{ fin => 1 }]); | |
844 }; | |
787 $f->{discard} = sub { | 845 $f->{discard} = sub { |
788 my (%extra) = @_; | 846 my (%extra) = @_; |
789 $c->new_stream({ body_more => 1, %extra, headers => [ | 847 $c->new_stream({ body_more => 1, %extra, headers => [ |
790 { name => ':status', value => '200', | 848 { name => ':status', value => '200', |
791 mode => $extra{mode} || 0 }, | 849 mode => $extra{mode} || 0 }, |