Mercurial > hg > nginx-tests
comparison h2.t @ 655:75ecd26b8831
Tests: HTTP/2 tests cleanup.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 20 Aug 2015 19:22:13 +0300 |
parents | a64fe1054fb4 |
children | b0342dbd9390 |
comparison
equal
deleted
inserted
replaced
654:a64fe1054fb4 | 655:75ecd26b8831 |
---|---|
30 eval { IO::Socket::SSL::SSL_VERIFY_NONE(); }; | 30 eval { IO::Socket::SSL::SSL_VERIFY_NONE(); }; |
31 plan(skip_all => 'IO::Socket::SSL too old') if $@; | 31 plan(skip_all => 'IO::Socket::SSL too old') if $@; |
32 | 32 |
33 my $t = Test::Nginx->new()->has(qw/http http_ssl http_v2 proxy cache/) | 33 my $t = Test::Nginx->new()->has(qw/http http_ssl http_v2 proxy cache/) |
34 ->has(qw/limit_conn rewrite realip shmem/) | 34 ->has(qw/limit_conn rewrite realip shmem/) |
35 ->has_daemon('openssl')->plan(150); | 35 ->has_daemon('openssl')->plan(152); |
36 | 36 |
37 $t->write_file_expand('nginx.conf', <<'EOF'); | 37 $t->write_file_expand('nginx.conf', <<'EOF'); |
38 | 38 |
39 %%TEST_GLOBALS%% | 39 %%TEST_GLOBALS%% |
40 | 40 |
219 is($frame->{length}, 4, 'WINDOW_UPDATE fixed length'); | 219 is($frame->{length}, 4, 'WINDOW_UPDATE fixed length'); |
220 | 220 |
221 ($frame) = grep { $_->{type} eq 'SETTINGS' } @$frames; | 221 ($frame) = grep { $_->{type} eq 'SETTINGS' } @$frames; |
222 ok($frame, 'SETTINGS frame'); | 222 ok($frame, 'SETTINGS frame'); |
223 is($frame->{flags}, 0, 'SETTINGS flags'); | 223 is($frame->{flags}, 0, 'SETTINGS flags'); |
224 is($frame->{sid}, 0, 'SETTINGS stream'); | |
224 | 225 |
225 h2_settings($sess, 1); | 226 h2_settings($sess, 1); |
226 h2_settings($sess, 0); | 227 h2_settings($sess, 0); |
227 | 228 |
228 $frames = h2_read($sess, all => [{ type => 'SETTINGS' }]); | 229 $frames = h2_read($sess, all => [{ type => 'SETTINGS' }]); |
238 | 239 |
239 ($frame) = grep { $_->{type} eq "PING" } @$frames; | 240 ($frame) = grep { $_->{type} eq "PING" } @$frames; |
240 ok($frame, 'PING frame'); | 241 ok($frame, 'PING frame'); |
241 is($frame->{value}, 'SEE-THIS', 'PING payload'); | 242 is($frame->{value}, 'SEE-THIS', 'PING payload'); |
242 is($frame->{flags}, 1, 'PING flags ack'); | 243 is($frame->{flags}, 1, 'PING flags ack'); |
244 is($frame->{sid}, 0, 'PING stream'); | |
243 | 245 |
244 # GET | 246 # GET |
245 | 247 |
246 my $sid = new_stream($sess); | 248 my $sid = new_stream($sess); |
247 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 249 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
1581 | 1583 |
1582 my $length = unpack_length($buf); | 1584 my $length = unpack_length($buf); |
1583 my $type = unpack('x3C', $buf); | 1585 my $type = unpack('x3C', $buf); |
1584 my $flags = unpack('x4C', $buf); | 1586 my $flags = unpack('x4C', $buf); |
1585 | 1587 |
1586 $buf = raw_read($s, $buf, $length + 9); | 1588 my $stream = unpack "x5 B32", $buf; |
1589 substr($stream, 0, 1) = 0; | |
1590 $stream = unpack("N", pack("B32", $stream)); | |
1591 | |
1592 $buf = raw_read($s, $buf, $length); | |
1587 last unless length $buf; | 1593 last unless length $buf; |
1594 | |
1595 $buf = substr($buf, 9); | |
1588 | 1596 |
1589 my $frame = $cframe{$type}{value}($sess, $buf, $length); | 1597 my $frame = $cframe{$type}{value}($sess, $buf, $length); |
1590 $frame->{length} = $length; | 1598 $frame->{length} = $length; |
1591 $frame->{type} = $cframe{$type}{name}; | 1599 $frame->{type} = $cframe{$type}{name}; |
1592 $frame->{flags} = $flags; | 1600 $frame->{flags} = $flags; |
1601 $frame->{sid} = $stream; | |
1593 push @got, $frame; | 1602 push @got, $frame; |
1594 | 1603 |
1595 $buf = substr($buf, $length + 9); | 1604 $buf = substr($buf, $length); |
1596 | 1605 |
1597 last unless test_fin($got[-1], $extra{all}); | 1606 last unless test_fin($got[-1], $extra{all}); |
1598 }; | 1607 }; |
1599 return \@got; | 1608 return \@got; |
1600 } | 1609 } |
1629 @{$all} = @test; | 1638 @{$all} = @test; |
1630 } | 1639 } |
1631 | 1640 |
1632 sub headers { | 1641 sub headers { |
1633 my ($ctx, $buf, $len) = @_; | 1642 my ($ctx, $buf, $len) = @_; |
1634 my %payload; | 1643 return { headers => hunpack($ctx, $buf, $len) }; |
1635 my $skip = 9; | |
1636 | |
1637 my $stream = unpack "x5 B32", $buf; | |
1638 substr($stream, 0, 1) = 0; | |
1639 $stream = unpack("N", pack("B32", $stream)); | |
1640 $payload{sid} = $stream; | |
1641 | |
1642 my $headers = substr($buf, $skip); | |
1643 $payload{headers} = hunpack($ctx, $headers, $len); | |
1644 | |
1645 | |
1646 return \%payload; | |
1647 } | 1644 } |
1648 | 1645 |
1649 sub data { | 1646 sub data { |
1650 my ($ctx, $buf, $len) = @_; | 1647 my ($ctx, $buf, $len) = @_; |
1651 my %frame; | 1648 return { data => substr($buf, 0, $len) }; |
1652 | |
1653 my $stream = unpack "x5 B32", $buf; | |
1654 substr($stream, 0, 1) = 0; | |
1655 $stream = unpack("N", pack("B32", $stream)); | |
1656 $frame{sid} = $stream; | |
1657 | |
1658 $frame{data} = substr($buf, 9, $len); | |
1659 return \%frame; | |
1660 } | 1649 } |
1661 | 1650 |
1662 sub settings { | 1651 sub settings { |
1663 my ($ctx, $buf, $len) = @_; | 1652 my ($ctx, $buf, $len) = @_; |
1664 my %payload; | 1653 my %payload; |
1665 my $skip = 9; | 1654 my $skip = 0; |
1666 | |
1667 my $stream = unpack "x5 B32", $buf; | |
1668 substr($stream, 0, 1) = 0; | |
1669 $stream = unpack("N", pack("B32", $stream)); | |
1670 $payload{sid} = $stream; | |
1671 | |
1672 fail("stream identifier field is anything other than 0x0") | |
1673 if $stream; | |
1674 | 1655 |
1675 for (1 .. $len / 6) { | 1656 for (1 .. $len / 6) { |
1676 my $id = hex unpack "\@$skip n", $buf; $skip += 2; | 1657 my $id = hex unpack "\@$skip n", $buf; $skip += 2; |
1677 $payload{$id} = unpack "\@$skip N", $buf; $skip += 4; | 1658 $payload{$id} = unpack "\@$skip N", $buf; $skip += 4; |
1678 } | 1659 } |
1679 return \%payload; | 1660 return \%payload; |
1680 } | 1661 } |
1681 | 1662 |
1682 sub ping { | 1663 sub ping { |
1683 my ($ctx, $buf, $len) = @_; | 1664 my ($ctx, $buf, $len) = @_; |
1684 my %payload; | 1665 return { value => unpack "a8", $buf }; |
1685 my $skip = 9; | |
1686 | |
1687 $payload{value} = unpack "\@$skip a8", $buf; | |
1688 return \%payload; | |
1689 } | 1666 } |
1690 | 1667 |
1691 sub rst_stream { | 1668 sub rst_stream { |
1692 my ($ctx, $buf, $len) = @_; | 1669 my ($ctx, $buf, $len) = @_; |
1693 my %payload; | 1670 return { code => unpack "N", $buf }; |
1694 my $skip = 9; | |
1695 | |
1696 my $stream = unpack "x5 B32", $buf; | |
1697 substr($stream, 0, 1) = 0; | |
1698 $stream = unpack("N", pack("B32", $stream)); | |
1699 $payload{sid} = $stream; | |
1700 | |
1701 $payload{code} = unpack "\@$skip N", $buf; | |
1702 return \%payload; | |
1703 } | 1671 } |
1704 | 1672 |
1705 sub goaway { | 1673 sub goaway { |
1706 my ($ctx, $buf, $len) = @_; | 1674 my ($ctx, $buf, $len) = @_; |
1707 my %payload; | 1675 my %payload; |
1708 my $skip = 9; | 1676 |
1709 | 1677 my $stream = unpack "B32", $buf; |
1710 my $stream = unpack "x5 B32", $buf; | |
1711 substr($stream, 0, 1) = 0; | |
1712 $stream = unpack("N", pack("B32", $stream)); | |
1713 $payload{sid} = $stream; | |
1714 | |
1715 fail("stream identifier field is anything other than 0x0") | |
1716 if $stream; | |
1717 | |
1718 $stream = unpack "\@$skip B32", $buf; | |
1719 substr($stream, 0, 1) = 0; | 1678 substr($stream, 0, 1) = 0; |
1720 $stream = unpack("N", pack("B32", $stream)); | 1679 $stream = unpack("N", pack("B32", $stream)); |
1721 $payload{last_sid} = $stream; | 1680 $payload{last_sid} = $stream; |
1722 $skip += 4; | 1681 |
1723 | 1682 $len -= 4; |
1724 $len = $len - $skip; | 1683 $payload{debug} = unpack "x4 H$len", $buf; |
1725 $payload{debug} = unpack "\@$skip H$len", $buf; | |
1726 return \%payload; | 1684 return \%payload; |
1727 } | 1685 } |
1728 | 1686 |
1729 sub window_update { | 1687 sub window_update { |
1730 my ($ctx, $buf, $len) = @_; | 1688 my ($ctx, $buf, $len) = @_; |
1731 my %payload; | 1689 my $value = unpack "B32", $buf; |
1732 my $skip = 5; | |
1733 | |
1734 my $stream = unpack "\@$skip B32", $buf; $skip += 4; | |
1735 substr($stream, 0, 1) = 0; | |
1736 $stream = unpack("N", pack("B32", $stream)); | |
1737 $payload{sid} = $stream; | |
1738 | |
1739 my $value = unpack "\@$skip B32", $buf; | |
1740 substr($value, 0, 1) = 0; | 1690 substr($value, 0, 1) = 0; |
1741 $payload{wdelta} = unpack("N", pack("B32", $value)); | 1691 return { wdelta => unpack("N", pack("B32", $value)) }; |
1742 return \%payload; | |
1743 } | 1692 } |
1744 | 1693 |
1745 sub pack_length { | 1694 sub pack_length { |
1746 pack 'c3', unpack 'xc3', pack 'N', $_[0]; | 1695 pack 'c3', unpack 'xc3', pack 'N', $_[0]; |
1747 } | 1696 } |