Mercurial > hg > nginx-tests
annotate http_resolver_ipv4.t @ 1806:564f74bf6e4d
Tests: added stream fetch tests for js_access directive.
author | Dmitry Volyntsev <xeioex@nginx.com> |
---|---|
date | Mon, 14 Nov 2022 17:52:23 -0800 |
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 ############################################################################### |