comparison proxy_protocol2_tlv.t @ 1800:074974eb9182

Tests: variables for proxy protocol v2 TLVs
author Eugene Grebenschikov <e.grebenshchikov@f5.com>
date Mon, 24 Oct 2022 09:59:19 -0700
parents
children f129b693d83e
comparison
equal deleted inserted replaced
1799:29f4d48b5b31 1800:074974eb9182
1 #!/usr/bin/perl
2
3 # (C) Roman Arutyunyan
4 # (C) Eugene Grebenschikov
5 # (C) Nginx, Inc.
6
7 # Tests for variables for proxy protocol v2 TLVs.
8
9 ###############################################################################
10
11 use warnings;
12 use strict;
13
14 use Test::More;
15
16 BEGIN { use FindBin; chdir($FindBin::Bin); }
17
18 use lib 'lib';
19 use Test::Nginx;
20
21 ###############################################################################
22
23 select STDERR; $| = 1;
24 select STDOUT; $| = 1;
25
26 my $t = Test::Nginx->new()->has(qw/http access rewrite/)->plan(15)
27 ->write_file_expand('nginx.conf', <<'EOF');
28
29 %%TEST_GLOBALS%%
30
31 daemon off;
32
33 events {
34 }
35
36 http {
37 %%TEST_GLOBALS_HTTP%%
38
39 map $proxy_protocol_tlv_ssl $binary_present {
40 "~\\x00" "true";
41 }
42
43 add_header X-ALPN
44 $proxy_protocol_tlv_alpn-$proxy_protocol_tlv_0x01;
45 add_header X-AUTHORITY
46 $proxy_protocol_tlv_authority-$proxy_protocol_tlv_0x02;
47 add_header X-UNIQUE-ID
48 $proxy_protocol_tlv_unique_id-$proxy_protocol_tlv_0x05;
49 add_header X-NETNS
50 $proxy_protocol_tlv_netns-$proxy_protocol_tlv_0x30;
51 add_header X-SSL-VERIFY
52 $proxy_protocol_tlv_ssl_verify;
53 add_header X-SSL-VERSION
54 $proxy_protocol_tlv_ssl_version-$proxy_protocol_tlv_ssl_0x21;
55 add_header X-SSL-CN
56 $proxy_protocol_tlv_ssl_cn-$proxy_protocol_tlv_ssl_0x22;
57 add_header X-SSL-CIPHER
58 $proxy_protocol_tlv_ssl_cipher-$proxy_protocol_tlv_ssl_0x23;
59 add_header X-SSL-SIG-ALG
60 $proxy_protocol_tlv_ssl_sig_alg-$proxy_protocol_tlv_ssl_0x24;
61 add_header X-SSL-KEY-ALG
62 $proxy_protocol_tlv_ssl_key_alg-$proxy_protocol_tlv_ssl_0x25;
63 add_header X-TLV-CRC32C
64 $proxy_protocol_tlv_0x3;
65 add_header X-TLV-CUSTOM
66 $proxy_protocol_tlv_0x000ae;
67 add_header X-TLV-X
68 $proxy_protocol_tlv_0x000e-$proxy_protocol_tlv_0x0f;
69 add_header X-SSL-BINARY
70 $binary_present;
71
72 server {
73 listen 127.0.0.1:8080 proxy_protocol;
74 server_name localhost;
75
76 location / { return 200; }
77 }
78 }
79
80 EOF
81
82 $t->run();
83
84 ###############################################################################
85
86 my $p = pack("N3C", 0x0D0A0D0A, 0x000D0A51, 0x5549540A, 0x21);
87 my $tlv = $p . pack("CnN2n2N21nN2nN2nN4", 0x11, 134, 0xc0000201, 0xc0000202,
88 123, 5678,
89 # 0x01 alpn
90 0x01000541, 0x4c504e31,
91 # 0x02 authority
92 0x0200096c, 0x6f63616c, 0x686f7374,
93 # 0x03 crc32
94 0x03000534, 0x33323130,
95 # 0x05 unique_id
96 0x05000555, 0x4e495151,
97 # 0x20 ssl
98 0x20004301, 0x000000ff,
99 # 0x21 ssl_version
100 0x21000132,
101 # 0x22 ssl_cn
102 0x22000541, 0x42433435,
103 # 0x23 ssl_cipher
104 0x23001b45, 0x43444845, 0x2d525341, 0x2d414553, 0x3132382d, 0x47434d2d,
105 0x53484132, 0x3536,
106 # 0x24 ssl_sig_alg
107 0x24000753, 0x48413130, 0x3234,
108 # 0x25 ssl_key_alg
109 0x25000752, 0x53413230, 0x3438,
110 # 0x30 netns
111 0x3000054e, 0x45544e53,
112 # 0xae custom
113 0xae000531, 0x32333435);
114 my $r;
115
116 TODO: {
117 local $TODO = 'not yet' unless $t->has_version('1.23.2');
118
119 $r = pp_get('/t1', $tlv);
120 like($r, qr/X-ALPN: ALPN1-ALPN1\x0d/, 'ALPN - tlv named variable');
121 like($r, qr/X-AUTHORITY: localhost-localhost\x0d/,
122 'AUTHORITY - tlv named variable');
123 like($r, qr/X-UNIQUE-ID: UNIQQ-UNIQQ\x0d/, 'UNIQUE_ID - tlv named variable');
124 like($r, qr/X-NETNS: NETNS-NETNS\x0d/, 'NETNS - tlv named variable');
125 like($r, qr/X-SSL-BINARY: true/, 'SSL_BINARY - tlv named variable');
126 like($r, qr/X-SSL-VERIFY: 255\x0d/, 'SSL_VERIFY - tlv named variable');
127 like($r, qr/X-SSL-VERSION: 2-2\x0d/, 'SSL_VERSION - tlv named variable');
128 like($r, qr/X-SSL-CN: ABC45-ABC45\x0d/, 'SSL_CN - tlv named variable');
129 like($r, qr/X-SSL-CIPHER: ECDHE-RSA-AES128-GCM-SHA256/,
130 'SSL_CIPHER - tlv named variable (part 1)');
131 like ($r, qr/-ECDHE-RSA-AES128-GCM-SHA256\x0d/,
132 'SSL_CIPHER - tlv named variable (part 2)');
133 like($r, qr/X-SSL-SIG-ALG: SHA1024-SHA1024\x0d/,
134 'SSL_SIG_ALG - tlv named variable');
135 like($r, qr/X-SSL-KEY-ALG: RSA2048-RSA2048\x0d/,
136 'SSL_KEY_ALG - tlv named variable');
137 like($r, qr/X-TLV-CRC32C: 43210\x0d/, 'CRC32C - tlv numeric variable');
138 like($r, qr/X-TLV-CUSTOM: 12345\x0d/,
139 'custom - tlv numeric variable');
140 like($r, qr/X-TLV-X: -\x0d/, 'non-existent - tlv numeric variable');
141
142 }
143
144 ###############################################################################
145
146 sub pp_get {
147 my ($url, $proxy) = @_;
148 return http($proxy . <<EOF);
149 GET $url HTTP/1.0
150 Host: localhost
151
152 EOF
153 }
154
155 ###############################################################################