# HG changeset patch # User Sergey Kandaurov # Date 1668085723 -14400 # Node ID 76fdf5ede7c0e4fb02d40c78315415a2e217d038 # Parent 35e88bf538c1ab34ed16c051392f82d78ccdcbf6 Tests: improved readability in PROXY protocol v2 TLV tests. diff --git a/proxy_protocol2_tlv.t b/proxy_protocol2_tlv.t --- a/proxy_protocol2_tlv.t +++ b/proxy_protocol2_tlv.t @@ -80,62 +80,42 @@ http { EOF $t->write_file('t1', 'SEE-THIS'); -$t->try_run('no proxy_protocol tlv')->plan(15); +$t->try_run('no proxy_protocol tlv')->plan(14); ############################################################################### -my $p = pack("N3C", 0x0D0A0D0A, 0x000D0A51, 0x5549540A, 0x21); -my $tlv = $p . pack("CnN2n2N21nN2nN2nN4", 0x11, 134, 0xc0000201, 0xc0000202, - 123, 5678, - # 0x01 alpn - 0x01000541, 0x4c504e31, - # 0x02 authority - 0x0200096c, 0x6f63616c, 0x686f7374, - # 0x03 crc32 - 0x03000534, 0x33323130, - # 0x05 unique_id - 0x05000555, 0x4e495151, - # 0x20 ssl - 0x20004301, 0x000000ff, - # 0x21 ssl_version - 0x21000132, - # 0x22 ssl_cn - 0x22000541, 0x42433435, - # 0x23 ssl_cipher - 0x23001b45, 0x43444845, 0x2d525341, 0x2d414553, 0x3132382d, 0x47434d2d, - 0x53484132, 0x3536, - # 0x24 ssl_sig_alg - 0x24000753, 0x48413130, 0x3234, - # 0x25 ssl_key_alg - 0x25000752, 0x53413230, 0x3438, - # 0x30 netns - 0x3000054e, 0x45544e53, - # 0xae custom - 0xae000531, 0x32333435); -my $r; +my $tlv = pp2_create_tlv(0x1, "ALPN1"); +$tlv .= pp2_create_tlv(0x2, "localhost"); +$tlv .= pp2_create_tlv(0x3, "4321"); +$tlv .= pp2_create_tlv(0x5, "UNIQQ"); + +my $sub = pp2_create_tlv(0x21, "TLSv1.2"); +$sub .= pp2_create_tlv(0x22, "example.com"); +$sub .= pp2_create_tlv(0x23, "AES256-SHA"); +$sub .= pp2_create_tlv(0x24, "SHA1"); +$sub .= pp2_create_tlv(0x25, "RSA512"); +my $ssl = pp2_create_ssl(0x01, 255, $sub); +$tlv .= pp2_create_tlv(0x20, $ssl); -$r = pp_get('/t1', $tlv); -like($r, qr/X-ALPN: ALPN1-ALPN1\x0d/, 'ALPN - tlv named variable'); -like($r, qr/X-AUTHORITY: localhost-localhost\x0d/, - 'AUTHORITY - tlv named variable'); -like($r, qr/X-UNIQUE-ID: UNIQQ-UNIQQ\x0d/, 'UNIQUE_ID - tlv named variable'); -like($r, qr/X-NETNS: NETNS-NETNS\x0d/, 'NETNS - tlv named variable'); -like($r, qr/X-SSL-BINARY: true/, 'SSL_BINARY - tlv named variable'); -like($r, qr/X-SSL-VERIFY: 255\x0d/, 'SSL_VERIFY - tlv named variable'); -like($r, qr/X-SSL-VERSION: 2-2\x0d/, 'SSL_VERSION - tlv named variable'); -like($r, qr/X-SSL-CN: ABC45-ABC45\x0d/, 'SSL_CN - tlv named variable'); -like($r, qr/X-SSL-CIPHER: ECDHE-RSA-AES128-GCM-SHA256/, - 'SSL_CIPHER - tlv named variable (part 1)'); -like ($r, qr/-ECDHE-RSA-AES128-GCM-SHA256\x0d/, - 'SSL_CIPHER - tlv named variable (part 2)'); -like($r, qr/X-SSL-SIG-ALG: SHA1024-SHA1024\x0d/, - 'SSL_SIG_ALG - tlv named variable'); -like($r, qr/X-SSL-KEY-ALG: RSA2048-RSA2048\x0d/, - 'SSL_KEY_ALG - tlv named variable'); -like($r, qr/X-TLV-CRC32C: 43210\x0d/, 'CRC32C - tlv numeric variable'); -like($r, qr/X-TLV-CUSTOM: 12345\x0d/, - 'custom - tlv numeric variable'); -like($r, qr/X-TLV-X: -\x0d/, 'non-existent - tlv numeric variable'); +$tlv .= pp2_create_tlv(0x30, "NETNS"); +$tlv .= pp2_create_tlv(0xae, "12345"); +my $p = pp2_create($tlv); + +my $r = pp_get('/t1', $p); +like($r, qr/X-ALPN: ALPN1-ALPN1\x0d?$/m, 'ALPN'); +like($r, qr/X-AUTHORITY: localhost-localhost\x0d?$/m, 'AUTHORITY'); +like($r, qr/X-TLV-CRC32C: 4321\x0d?$/m, 'CRC32C'); +like($r, qr/X-UNIQUE-ID: UNIQQ-UNIQQ\x0d?$/m, 'UNIQUE_ID'); +like($r, qr/X-SSL-BINARY: true/, 'SSL_BINARY'); +like($r, qr/X-SSL-VERIFY: 255\x0d?$/m, 'SSL_VERIFY'); +like($r, qr/X-SSL-VERSION: TLSv1.2-TLSv1.2\x0d?$/m, 'SSL_VERSION'); +like($r, qr/X-SSL-CN: example.com-example.com\x0d?$/m, 'SSL_CN'); +like($r, qr/X-SSL-CIPHER: AES256-SHA-AES256-SHA\x0d?$/m, 'SSL_CIPHER'); +like($r, qr/X-SSL-SIG-ALG: SHA1-SHA1\x0d?$/m, 'SSL_SIG_ALG'); +like($r, qr/X-SSL-KEY-ALG: RSA512-RSA512\x0d?$/m, 'SSL_KEY_ALG'); +like($r, qr/X-NETNS: NETNS-NETNS\x0d?$/m, 'NETNS'); +like($r, qr/X-TLV-CUSTOM: 12345\x0d?$/m, 'custom'); +like($r, qr/X-TLV-X: -\x0d?$/m, 'non-existent'); ############################################################################### @@ -148,4 +128,39 @@ Host: localhost EOF } +sub pp2_create { + my ($tlv) = @_; + + my $pp2_sig = pack("N3", 0x0D0A0D0A, 0x000D0A51, 0x5549540A); + my $ver_cmd = pack('C', 0x21); + my $family = pack('C', 0x11); + my $packet = $pp2_sig . $ver_cmd . $family; + + my $ip1 = pack('N', 0xc0000201); # 192.0.2.1 + my $ip2 = pack('N', 0xc0000202); # 192.0.2.2 + my $port1 = pack('n', 123); + my $port2 = pack('n', 5678); + my $addrs = $ip1 . $ip2 . $port1 . $port2; + + my $len = length($addrs) + length($tlv); + + $packet .= pack('n', $len) . $addrs . $tlv; + + return $packet; +} + +sub pp2_create_tlv { + my ($type, $content) = @_; + + my $len = length($content); + + return pack("CnA*", $type, $len, $content); +} + +sub pp2_create_ssl { + my ($client, $verify, $content) = @_; + + return pack("CNA*", $client, $verify, $content); +} + ###############################################################################