Mercurial > hg > nginx-tests
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 ############################################################################### |