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