annotate http_resolver.t @ 540:481d705b8610

Tests: SSL support in mail backends. Socket is now embedded into every mail module. Socket methods are wrapped where appropriate. The new "SSL" extra flag specifies to accept connection over SSL.
author Sergey Kandaurov <pluknet@nginx.com>
date Fri, 03 Apr 2015 00:11:38 +0300
parents 5ec2caad00e8
children e82bbe71f50c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for http resolver.
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
438
60888e2c3f5a Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 436
diff changeset
18 use Test::Nginx qw/ :DEFAULT http_end /;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22 select STDERR; $| = 1;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http proxy rewrite/);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27 $t->write_file_expand('nginx.conf', <<'EOF');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 %%TEST_GLOBALS%%
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 daemon off;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 events {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 http {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 server {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40 listen 127.0.0.1:8080;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 server_name localhost;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 location / {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44 resolver 127.0.0.1:8081;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 resolver_timeout 1s;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46 proxy_pass http://$host:8080/backend;
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
47
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
48 proxy_next_upstream http_504 timeout error;
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
49 proxy_intercept_errors on;
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
50 proxy_connect_timeout 1s;
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
51 error_page 504 502 /50x;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 }
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
53 location /two {
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 resolver 127.0.0.1:8081 127.0.0.1:8082;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 proxy_pass http://$host:8080/backend;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 location /valid {
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
58 resolver 127.0.0.1:8081 valid=3s;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 proxy_pass http://$host:8080/backend;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 }
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
61 location /case {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
62 resolver 127.0.0.1:8081;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
63 proxy_pass http://$http_x_name:8080/backend;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
64 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 location /invalid {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66 proxy_pass http://$host:8080/backend;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 }
436
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
68 location /resend {
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
69 resolver 127.0.0.1:8081;
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
70 resolver_timeout 6s;
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
71 proxy_pass http://$host:8080/backend;
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
72 }
449
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
73 location /bad {
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
74 resolver 127.0.0.1:8089;
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
75 resolver_timeout 1s;
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
76 proxy_pass http://$host:8080/backend;
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
77 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 location /backend {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 return 200;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 location /50x {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 return 200 $upstream_addr;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 EOF
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
90 $t->run_daemon(\&dns_daemon, 8081, $t);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
91 $t->run_daemon(\&dns_daemon, 8082, $t);
464
5ec2caad00e8 Tests: fixed resolver timeout test.
Sergey Kandaurov <pluknet@nginx.com>
parents: 455
diff changeset
92 $t->run_daemon(\&dns_daemon, 8089, $t);
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
93
449
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
94 $t->run()->plan(32);
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
95
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
96 $t->waitforfile($t->testdir . '/8081');
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
97 $t->waitforfile($t->testdir . '/8082');
464
5ec2caad00e8 Tests: fixed resolver timeout test.
Sergey Kandaurov <pluknet@nginx.com>
parents: 455
diff changeset
98 $t->waitforfile($t->testdir . '/8089');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101
450
9e26d5b10fb3 Tests: fixed typo.
Sergey Kandaurov <pluknet@nginx.com>
parents: 449
diff changeset
102 # schedule resend test, which takes about 5 seconds to complete
436
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
103
438
60888e2c3f5a Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 436
diff changeset
104 my $s = http_host_header('id.example.net', '/resend', start => 1);
436
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
105
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106 like(http_host_header('a.example.net', '/'), qr/200 OK/, 'A');
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
107
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
108 # ensure that resolver serves queries from cache in a case-insensitive manner
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
109 # we check this by marking 2nd and subsequent queries on backend with SERVFAIL
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
110
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
111 http_x_name_header('case.example.net', '/case');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
112 like(http_x_name_header('CASE.example.net', '/case'), qr/200 OK/,
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
113 'A case-insensitive');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
114
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
115 like(http_host_header('awide.example.net', '/'), qr/200 OK/, 'A uncompressed');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116 like(http_host_header('short.example.net', '/'), qr/502 Bad/,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
117 'A short dns response');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
118
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
119 like(http_host_header('nx.example.net', '/'), qr/502 Bad/, 'NXDOMAIN');
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
120 like(http_host_header('cname.example.net', '/'), qr/200 OK/, 'CNAME');
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
121 like(http_host_header('cname.example.net', '/'), qr/200 OK/,
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122 'CNAME cached');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123
356
7a472e46772c Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
124 # CNAME + A combined answer
7a472e46772c Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
125 # demonstrates the name in answer section different from what is asked
7a472e46772c Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
126
7a472e46772c Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
127 like(http_host_header('cname_a.example.net', '/'), qr/200 OK/, 'CNAME + A');
7a472e46772c Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
128
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
129 # CNAME refers to non-existing A
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
130
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
131 like(http_host_header('cname2.example.net', '/'), qr/502 Bad/, 'CNAME bad');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
132 like(http_host_header('long.example.net', '/'), qr/200 OK/, 'long label');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
133 like(http_host_header('long2.example.net', '/'), qr/200 OK/, 'long name');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
134
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
135 # take into account DNAME
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
136
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
137 like(http_host_header('alias.example.com', '/'), qr/200 OK/, 'DNAME');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
138
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
139 # many A records in round robin
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
140 # nonexisting IPs enumerated with proxy_next_upstream
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
141
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
142 like(http_host_header('many.example.net', '/'),
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
143 qr/^127.0.0.20(1:8080, 127.0.0.202:8080|2:8080, 127.0.0.201:8080)$/m,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
144 'A many');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
145
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
146 like(http_host_header('many.example.net', '/'),
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
147 qr/^127.0.0.20(1:8080, 127.0.0.202:8080|2:8080, 127.0.0.201:8080)$/m,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
148 'A many cached');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
149
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
150 # tests for several resolvers specified in directive
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
151 # query bad ns, make sure that error responses are not cached
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
152
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
153 like(http_host_header('2.example.net', '/two'), qr/502 Bad/, 'two ns bad');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
154
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
155 # now get correct response
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
156
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
157 like(http_host_header('2.example.net', '/two'), qr/200 OK/, 'two ns good');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
158
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
159 # response is cached, actual request would get error
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
160
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
161 like(http_host_header('2.example.net', '/two'), qr/200 OK/, 'two ns cached');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
162
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
163 # ttl tested with 1st req good and 2nd req bad
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
164 # send 1st request and cache its good response
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
165
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
166 like(http_host_header('ttl.example.net', '/'), qr/200 OK/, 'ttl');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
167
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
168 # response is cached, actual request would get error
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
169
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
170 like(http_host_header('ttl.example.net', '/'), qr/200 OK/, 'ttl cached 1');
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
171 like(http_host_header('ttl.example.net', '/'), qr/200 OK/, 'ttl cached 2');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
172
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
173 sleep 2;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
174
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
175 # expired ttl causes nginx to make actual query
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
177 like(http_host_header('ttl.example.net', '/'), qr/502 Bad/, 'ttl expired');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
178
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
179 # zero ttl prohibits response caching
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
180
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
181 like(http_host_header('ttl0.example.net', '/'), qr/200 OK/, 'zero ttl');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
182
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
183 TODO: {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
184 local $TODO = 'support for zero ttl';
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
185
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
186 like(http_host_header('ttl0.example.net', '/'), qr/502 Bad/,
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
187 'zero ttl not cached');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
188
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
189 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
190
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
191 # "valid" parameter tested with 1st req good and 2nd req bad
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
192 # send 1st request and cache its good response
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
193
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
194 like(http_host_header('ttl.example.net', '/valid'), qr/200 OK/, 'valid');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
195
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
196 # response is cached, actual request would get error
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
197
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
198 like(http_host_header('ttl.example.net', '/valid'), qr/200 OK/,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
199 'valid cached 1');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
200 like(http_host_header('ttl.example.net', '/valid'), qr/200 OK/,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
201 'valid cached 2');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
202
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
203 sleep 2;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
204
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
205 # expired ttl is overridden with "valid" parameter
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
206 # response is taken from cache
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
207
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
208 like(http_host_header('ttl.example.net', '/valid'), qr/200 OK/,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
209 'valid overrides ttl');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
210
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
211 sleep 2;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
212
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
213 # expired "valid" value causes nginx to make actual query
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
214
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
215 like(http_host_header('ttl.example.net', '/valid'), qr/502 Bad/,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
216 'valid expired');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
217
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
218 # Ensure that resolver respects expired CNAME in CNAME + A combined response.
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
219 # When ttl in CNAME is expired, the answer should not be served from cache.
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
220 # Catch this by returning SERVFAIL on the 2nd and subsequent queries.
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
221
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
222 http_host_header('cname_a_ttl2.example.net', '/');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
223
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
224 sleep 2;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
225
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
226 like(http_host_header('cname_a_ttl2.example.net', '/'), qr/502 Bad/,
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
227 'CNAME + A with expired CNAME ttl');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
228
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
229 like(http_host_header('example.net', '/invalid'), qr/502 Bad/, 'no resolver');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
230
436
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
231 TODO: {
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
232 local $TODO = 'not yet' unless $t->has_version('1.7.4');
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
233
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
234 like(http_end($s), qr/200 OK/, 'resend after malformed response');
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
235
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
236 }
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
237
449
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
238 $s = http_get('/bad', start => 1);
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
239 my $s2 = http_get('/bad', start => 1);
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
240
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
241 TODO: {
455
a65cb9330c91 Tests: adjusted resolver and rewrite TODOs.
Sergey Kandaurov <pluknet@nginx.com>
parents: 450
diff changeset
242 local $TODO = 'hangs' unless $t->has_version('1.7.5');
449
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
243
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
244 http_end($s);
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
245 ok(http_end($s2), 'timeout handler on 2nd request');
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
246
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
247 }
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
248
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
249 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
250
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
251 sub http_host_header {
438
60888e2c3f5a Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 436
diff changeset
252 my ($host, $uri, %extra) = @_;
60888e2c3f5a Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 436
diff changeset
253 return http(<<EOF, %extra);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
254 GET $uri HTTP/1.0
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
255 Host: $host
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
256
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
257 EOF
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
258 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
259
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
260 sub http_x_name_header {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
261 my ($host, $uri) = @_;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
262 return http(<<EOF);
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
263 GET $uri HTTP/1.0
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
264 X-Name: $host
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
265
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
266 EOF
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
267 }
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
268
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
269 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
270
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
271 sub reply_handler {
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
272 my ($recv_data, $port, $state) = @_;
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
273
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
274 my (@name, @rdata);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
275
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
276 use constant NOERROR => 0;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
277 use constant SERVFAIL => 2;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
278 use constant NXDOMAIN => 3;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
279
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
280 use constant A => 1;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
281 use constant CNAME => 5;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
282 use constant DNAME => 39;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
283
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
284 use constant IN => 1;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
285
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
286 # default values
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
287
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
288 my ($hdr, $rcode, $ttl) = (0x8180, NOERROR, 3600);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
289
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
290 # decode name
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
291
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
292 my ($len, $offset) = (undef, 12);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
293 while (1) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
294 $len = unpack("\@$offset C", $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
295 last if $len == 0;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
296 $offset++;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
297 push @name, unpack("\@$offset A$len", $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
298 $offset += $len;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
299 }
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
300
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
301 $offset -= 1;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
302 my ($id, $type, $class) = unpack("n x$offset n2", $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
303
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
304 my $name = join('.', @name);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
305 if (($name eq 'a.example.net') || ($name eq 'alias.example.net')) {
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
306 if ($type == A || $type == CNAME) {
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
307 push @rdata, rd_addr($ttl, '127.0.0.1');
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
308 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
309
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
310 } elsif ($name eq 'case.example.net' && $type == A) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
311 if (++$state->{casecnt} > 1) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
312 $rcode = SERVFAIL;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
313 }
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
314
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
315 push @rdata, rd_addr($ttl, '127.0.0.1');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
316
436
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
317 } elsif ($name eq 'id.example.net' && $type == A) {
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
318 if (++$state->{idcnt} == 1) {
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
319 $id++;
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
320 }
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
321
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
322 push @rdata, rd_addr($ttl, '127.0.0.1');
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
323
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
324 } elsif ($name eq 'awide.example.net' && $type == A) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
325 push @rdata, pack '(w/a*)3x n2N nC4',
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
326 ('awide', 'example', 'net'), A, IN, $ttl,
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
327 4, (127, 0, 0, 1);
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
328
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
329 } elsif (($name eq 'many.example.net') && $type == A) {
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
330 $state->{manycnt}++;
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
331 if ($state->{manycnt} > 1) {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
332 $rcode = SERVFAIL;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
333 }
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
334
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
335 push @rdata, rd_addr($ttl, '127.0.0.201');
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
336 push @rdata, rd_addr($ttl, '127.0.0.202');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
337
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
338
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
339 } elsif (($name eq 'short.example.net')) {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
340 # zero length RDATA in DNS response
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
341
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
342 if ($type == A) {
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
343 push @rdata, rd_addr($ttl, '');
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
344 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
345
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
346 } elsif (($name eq 'alias.example.com')) {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
347 # example.com. 3600 IN DNAME example.net.
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
348
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
349 my @dname = ('example', 'net');
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
350 my $rdlen = length(join '', @dname) + @dname + 1;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
351 push @rdata, pack("n3N n(w/a*)* x", 0xc012, DNAME, IN, $ttl,
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
352 $rdlen, @dname);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
353
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
354 # alias.example.com. 3600 IN CNAME alias.example.net.
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
355
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
356 push @rdata, pack("n3N nCa5n", 0xc00c, CNAME, IN, $ttl,
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
357 8, 5, 'alias', 0xc02f);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
358
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
359 } elsif ($name eq 'cname.example.net') {
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
360 $state->{cnamecnt}++;
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
361 if ($state->{cnamecnt} > 2) {
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
362 $rcode = SERVFAIL;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
363 }
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
364 push @rdata, pack("n3N nCa5n", 0xc00c, CNAME, IN, $ttl,
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
365 8, 5, 'alias', 0xc012);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
366
356
7a472e46772c Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
367 } elsif ($name eq 'cname_a.example.net') {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
368 push @rdata, pack("n3N nCa5n", 0xc00c, CNAME, IN, $ttl,
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
369 8, 5, 'alias', 0xc014);
356
7a472e46772c Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
370
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
371 # points to "alias" set in previous rdata
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
372
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
373 if ($type == A) {
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
374 push @rdata, pack('n3N nC4', 0xc031, A, IN, $ttl,
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
375 4, split(/\./, '127.0.0.1'));
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
376 }
356
7a472e46772c Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
377
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
378 } elsif ($name eq 'cname_a_ttl2.example.net' && $type == A) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
379 push @rdata, pack("n3N nCa18n", 0xc00c, CNAME, IN, 1,
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
380 21, 18, 'cname_a_ttl2_alias', 0xc019);
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
381 if (++$state->{cttl2cnt} >= 2) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
382 $rcode = SERVFAIL;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
383 }
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
384 push @rdata, pack('n3N nC4', 0xc036, A, IN, $ttl,
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
385 4, split(/\./, '127.0.0.1'));
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
386
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
387 } elsif ($name eq 'cname_a_ttl_alias.example.net' && $type == A) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
388 push @rdata, rd_addr($ttl, '127.0.0.1');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
389
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
390 } elsif ($name eq 'cname2.example.net') {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
391 # points to non-existing A
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
392
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
393 push @rdata, pack("n3N nCa2n", 0xc00c, CNAME, IN, $ttl,
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
394 5, 2, 'nx', 0xc02f);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
395
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
396 } elsif ($name eq 'long.example.net') {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
397 push @rdata, pack("n3N nCA63x", 0xc00c, CNAME, IN, $ttl,
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
398 65, 63, 'a' x 63);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
399
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
400 } elsif (($name eq 'a' x 63) && $type == A) {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
401 push @rdata, rd_addr($ttl, '127.0.0.1');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
402
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
403 } elsif ($name eq 'long2.example.net') {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
404 push @rdata, pack("n3N n(CA63)4x", 0xc00c, CNAME, IN, $ttl, 257,
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
405 63, 'a' x 63, 63, 'a' x 63, 63, 'a' x 63, 63, 'a' x 63);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
406
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
407 } elsif (($name eq 'a' x 63 . '.' . 'a' x 63 . '.' . 'a' x 63 . '.'
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
408 . 'a' x 63) && $type == A)
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
409 {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
410 push @rdata, rd_addr($ttl, '127.0.0.1');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
411
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
412 } elsif ($name eq 'ttl.example.net' && $type == A) {
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
413 $state->{ttlcnt}++;
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
414 if ($state->{ttlcnt} == 2 || $state->{ttlcnt} == 4) {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
415 $rcode = SERVFAIL;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
416 }
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
417
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
418 push @rdata, rd_addr(1, '127.0.0.1');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
419
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
420 } elsif ($name eq 'ttl0.example.net' && $type == A) {
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
421 $state->{ttl0cnt}++;
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
422 if ($state->{ttl0cnt} == 2) {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
423 $rcode = SERVFAIL;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
424 }
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
425
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
426 push @rdata, rd_addr(0, '127.0.0.1');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
427
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
428 } elsif ($name eq '2.example.net') {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
429 if ($port == 8081) {
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
430 $state->{twocnt}++;
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
431 }
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
432 if ($state->{twocnt} & 1) {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
433 $rcode = SERVFAIL;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
434 }
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
435
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
436 if ($type == A) {
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
437 push @rdata, rd_addr($ttl, '127.0.0.1');
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
438 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
439 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
440
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
441 $len = @name;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
442 pack("n6 (w/a*)$len x n2", $id, $hdr | $rcode, 1, scalar @rdata,
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
443 0, 0, @name, $type, $class) . join('', @rdata);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
444 }
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
445
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
446 sub rd_addr {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
447 my ($ttl, $addr) = @_;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
448
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
449 my $code = 'split(/\./, $addr)';
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
450
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
451 return pack 'n3N', 0xc00c, A, IN, $ttl if $addr eq '';
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
452
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
453 pack 'n3N nC4', 0xc00c, A, IN, $ttl, eval "scalar $code", eval($code);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
454 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
455
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
456 sub dns_daemon {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
457 my ($port, $t) = @_;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
458
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
459 my ($data, $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
460 my $socket = IO::Socket::INET->new(
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
461 LocalAddr => '127.0.0.1',
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
462 LocalPort => $port,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
463 Proto => 'udp',
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
464 )
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
465 or die "Can't create listening socket: $!\n";
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
466
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
467 # track number of relevant queries
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
468
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
469 my %state = (
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
470 cnamecnt => 0,
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
471 twocnt => 0,
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
472 ttlcnt => 0,
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
473 ttl0cnt => 0,
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
474 cttlcnt => 0,
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
475 cttl2cnt => 0,
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
476 manycnt => 0,
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
477 casecnt => 0,
436
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
478 idcnt => 0,
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
479 );
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
480
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
481 # signal we are ready
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
482
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
483 open my $fh, '>', $t->testdir() . '/' . $port;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
484 close $fh;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
485
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
486 while (1) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
487 $socket->recv($recv_data, 65536);
464
5ec2caad00e8 Tests: fixed resolver timeout test.
Sergey Kandaurov <pluknet@nginx.com>
parents: 455
diff changeset
488 next if $port == 8089;
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
489 $data = reply_handler($recv_data, $port, \%state);
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
490 $socket->send($data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
491 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
492 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
493
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
494 ###############################################################################