Mercurial > hg > nginx-tests
annotate http_resolver_ipv4.t @ 1836:74cffa9d4c43
Tests: enabled session reuse via TLS session tickets.
This fixes tests with TLSv1.3 enabled when using BoringSSL, since
for TLSv1.3 it only supports session reuse via TLS session tickets,
and not server-side session cache.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 23 Mar 2023 19:50:02 +0300 |
parents | 0b06942f0b8b |
children | 1786f49cca17 |
rev | line source |
---|---|
1797
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
2 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
3 # (C) Sergey Kandaurov |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
4 # (C) Eugene Grebenschikov |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
5 # (C) Nginx, Inc. |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
6 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
7 # Tests for http resolver with ipv4/ipv6 parameters. |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
8 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
9 ############################################################################### |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
10 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
11 use warnings; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
12 use strict; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
13 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
14 use Test::More; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
15 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
16 BEGIN { use FindBin; chdir($FindBin::Bin); } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
17 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
18 use lib 'lib'; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
19 use Test::Nginx; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
20 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
21 ############################################################################### |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
22 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
23 select STDERR; $| = 1; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
24 select STDOUT; $| = 1; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
25 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
26 my $t = Test::Nginx->new()->has(qw/http proxy rewrite/); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
27 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
28 $t->write_file_expand('nginx.conf', <<'EOF'); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
29 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
30 %%TEST_GLOBALS%% |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
31 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
32 daemon off; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
33 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
34 events { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
35 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
36 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
37 http { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
38 %%TEST_GLOBALS_HTTP%% |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
39 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
40 server { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
41 listen 127.0.0.1:8080; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
42 server_name localhost; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
43 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
44 location / { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
45 proxy_pass http://$arg_h:%%PORT_8081%%/; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
46 resolver 127.0.0.1:%%PORT_8980_UDP%% ipv4=on ipv6=on; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
47 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
48 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
49 location /ipv4 { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
50 proxy_pass http://$arg_h:%%PORT_8081%%/; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
51 resolver 127.0.0.1:%%PORT_8980_UDP%% ipv4=on ipv6=off; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
52 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
53 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
54 location /ipv6 { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
55 proxy_pass http://$arg_h:%%PORT_8081%%/; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
56 resolver 127.0.0.1:%%PORT_8980_UDP%% ipv4=off ipv6=on; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
57 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
58 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
59 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
60 server { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
61 listen 127.0.0.1:8081; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
62 server_name localhost; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
63 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
64 location / { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
65 return 200 "ipv4"; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
66 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
67 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
68 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
69 server { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
70 listen [::1]:%%PORT_8081%%; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
71 server_name localhost; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
72 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
73 location / { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
74 return 200 "ipv6"; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
75 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
76 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
77 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
78 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
79 EOF |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
80 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
81 $t->try_run('no resolver ipv4')->plan(3); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
82 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
83 $t->run_daemon(\&dns_daemon, port(8980), $t); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
84 $t->waitforfile($t->testdir . '/' . port(8980)); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
85 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
86 ############################################################################### |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
87 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
88 like(many('/', 10), qr/ipv4: \d+, ipv6: \d+/, 'ipv4 ipv6'); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
89 is(many('/ipv4', 10), 'ipv4: 10', 'ipv4 only'); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
90 is(many('/ipv6', 10), 'ipv6: 10', 'ipv6 only'); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
91 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
92 ############################################################################### |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
93 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
94 sub many { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
95 my ($uri, $count) = @_; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
96 my %hits; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
97 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
98 for (1 .. $count) { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
99 if (http_get("$uri?h=example.com") =~ /(ipv(4|6))/) {; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
100 $hits{$1} = 0 unless defined $hits{$1}; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
101 $hits{$1}++; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
102 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
103 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
104 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
105 return join ', ', map { $_ . ": " . $hits{$_} } sort keys %hits; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
106 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
107 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
108 ############################################################################### |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
109 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
110 sub reply_handler { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
111 my ($recv_data, $port) = @_; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
112 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
113 my (@name, @rdata); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
114 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
115 use constant NOERROR => 0; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
116 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
117 use constant A => 1; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
118 use constant AAAA => 28; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
119 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
120 use constant IN => 1; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
121 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
122 # default values |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
123 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
124 my ($hdr, $rcode, $ttl) = (0x8180, NOERROR, 3600); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
125 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
126 # decode name |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
127 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
128 my ($len, $offset) = (undef, 12); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
129 while (1) { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
130 $len = unpack("\@$offset C", $recv_data); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
131 last if $len == 0; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
132 $offset++; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
133 push @name, unpack("\@$offset A$len", $recv_data); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
134 $offset += $len; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
135 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
136 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
137 $offset -= 1; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
138 my ($id, $type, $class) = unpack("n x$offset n2", $recv_data); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
139 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
140 my $name = join('.', @name); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
141 if ($name eq 'example.com') { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
142 if ($type == A) { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
143 push @rdata, rd_addr($ttl, '127.0.0.1'); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
144 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
145 if ($type == AAAA) { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
146 push @rdata, rd_addr6($ttl, "::1"); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
147 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
148 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
149 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
150 $len = @name; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
151 pack("n6 (C/a*)$len x n2", $id, $hdr | $rcode, 1, scalar @rdata, |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
152 0, 0, @name, $type, $class) . join('', @rdata); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
153 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
154 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
155 sub rd_addr { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
156 my ($ttl, $addr) = @_; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
157 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
158 my $code = 'split(/\./, $addr)'; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
159 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
160 pack 'n3N nC4', 0xc00c, A, IN, $ttl, eval "scalar $code", eval($code); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
161 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
162 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
163 sub expand_ip6 { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
164 my ($addr) = @_; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
165 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
166 substr ($addr, index($addr, "::"), 2) = |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
167 join "0", map { ":" } (0 .. 8 - (split /:/, $addr) + 1); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
168 map { hex "0" x (4 - length $_) . "$_" } split /:/, $addr; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
169 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
170 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
171 sub rd_addr6 { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
172 my ($ttl, $addr) = @_; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
173 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
174 pack 'n3N nn8', 0xc00c, AAAA, IN, $ttl, 16, expand_ip6($addr); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
175 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
176 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
177 sub dns_daemon { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
178 my ($port, $t) = @_; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
179 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
180 my ($data, $recv_data); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
181 my $socket = IO::Socket::INET->new( |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
182 LocalAddr => '127.0.0.1', |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
183 LocalPort => $port, |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
184 Proto => 'udp', |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
185 ) |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
186 or die "Can't create listening socket: $!\n"; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
187 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
188 # signal we are ready |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
189 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
190 open my $fh, '>', $t->testdir() . '/' . $port; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
191 close $fh; |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
192 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
193 while (1) { |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
194 $socket->recv($recv_data, 65536); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
195 $data = reply_handler($recv_data, $port); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
196 $socket->send($data); |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
197 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
198 } |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
199 |
0b06942f0b8b
Tests: http resolver with ipv4/ipv6 parameters.
Eugene Grebenschikov <e.grebenshchikov@f5.com>
parents:
diff
changeset
|
200 ############################################################################### |