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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 ###############################################################################