annotate http_resolver.t @ 836:a9c4cebcfe69

Tests: adjusted http resolver test with resend. Don't bother with socket error to force resolver resend. Nginx doesn't handle well ECONNREFUSED send() error, which results in "500 Internal Server Error". It may deserve a separate test, though.
author Sergey Kandaurov <pluknet@nginx.com>
date Fri, 29 Jan 2016 00:40:05 +0300
parents 37747a4ff78e
children b1fa8e0cc27b
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
834
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
15 use IO::Select;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
16
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 BEGIN { use FindBin; chdir($FindBin::Bin); }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19 use lib 'lib';
438
60888e2c3f5a Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 436
diff changeset
20 use Test::Nginx qw/ :DEFAULT http_end /;
352
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 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24 select STDERR; $| = 1;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25 select STDOUT; $| = 1;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
27 my $t = Test::Nginx->new()->has(qw/http proxy rewrite/);
352
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 $t->write_file_expand('nginx.conf', <<'EOF');
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 %%TEST_GLOBALS%%
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 daemon off;
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 events {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38 http {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 %%TEST_GLOBALS_HTTP%%
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 server {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 listen 127.0.0.1:8080;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 server_name localhost;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 location / {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46 resolver 127.0.0.1:8081;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 resolver_timeout 1s;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 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
49
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
50 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
51 proxy_intercept_errors on;
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
52 proxy_connect_timeout 1s;
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
53 error_page 504 502 /50x;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 }
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
55 location /two {
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 resolver 127.0.0.1:8081 127.0.0.1:8082;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 proxy_pass http://$host:8080/backend;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 location /valid {
678
99233cfefbbe Tests: adjusted test timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 550
diff changeset
60 resolver 127.0.0.1:8081 valid=5s;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61 proxy_pass http://$host:8080/backend;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 }
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
63 location /case {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
64 resolver 127.0.0.1:8081;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
65 proxy_pass http://$http_x_name:8080/backend;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
66 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 location /invalid {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68 proxy_pass http://$host:8080/backend;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 }
824
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
70 location /long {
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
71 resolver 127.0.0.1:8081;
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
72 resolver_timeout 4s;
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
73 proxy_pass http://$host:8080/backend;
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
74 }
436
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
75 location /resend {
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
76 resolver 127.0.0.1:8081;
550
a04b8b9537cd Tests: adjusted resolver test timeout.
Sergey Kandaurov <pluknet@nginx.com>
parents: 544
diff changeset
77 resolver_timeout 8s;
436
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
78 proxy_pass http://$host:8080/backend;
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
79 }
449
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
80 location /bad {
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
81 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
82 resolver_timeout 1s;
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
83 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
84 }
834
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
85 location /tcp {
836
a9c4cebcfe69 Tests: adjusted http resolver test with resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 834
diff changeset
86 resolver 127.0.0.1:8083 127.0.0.1:8082;
834
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
87 resolver_timeout 1s;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
88 proxy_pass http://$host:8080/backend;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
89 proxy_connect_timeout 1s;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
90 add_header X-IP $upstream_addr;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
91 error_page 504 502 /50x;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
92
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
93 location /tcp2 {
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
94 resolver_timeout 8s;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
95 proxy_pass http://$host:8080/backend;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
96 }
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
97 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99 location /backend {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 return 200;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102 location /50x {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103 return 200 $upstream_addr;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
105 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
108 EOF
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
110 $t->run_daemon(\&dns_daemon, 8081, $t);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
111 $t->run_daemon(\&dns_daemon, 8082, $t);
834
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
112 $t->run_daemon(\&dns_daemon, 8083, $t, tcp => 1);
464
5ec2caad00e8 Tests: fixed resolver timeout test.
Sergey Kandaurov <pluknet@nginx.com>
parents: 455
diff changeset
113 $t->run_daemon(\&dns_daemon, 8089, $t);
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
114
834
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
115 $t->run()->plan(38);
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
116
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
117 $t->waitforfile($t->testdir . '/8081');
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
118 $t->waitforfile($t->testdir . '/8082');
834
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
119 $t->waitforfile($t->testdir . '/8083');
464
5ec2caad00e8 Tests: fixed resolver timeout test.
Sergey Kandaurov <pluknet@nginx.com>
parents: 455
diff changeset
120 $t->waitforfile($t->testdir . '/8089');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123
450
9e26d5b10fb3 Tests: fixed typo.
Sergey Kandaurov <pluknet@nginx.com>
parents: 449
diff changeset
124 # 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
125
438
60888e2c3f5a Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 436
diff changeset
126 my $s = http_host_header('id.example.net', '/resend', start => 1);
823
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
127 my $fe = http_host_header('fe.example.net', '/resend', start => 1);
436
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
128
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
129 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
130
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
131 # 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
132 # 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
133
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
134 http_x_name_header('case.example.net', '/case');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
135 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
136 'A case-insensitive');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
137
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
138 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
139 like(http_host_header('short.example.net', '/'), qr/502 Bad/,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
140 'A short dns response');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
141
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
142 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
143 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
144 like(http_host_header('cname.example.net', '/'), qr/200 OK/,
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
145 'CNAME cached');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
146
356
7a472e46772c Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
147 # CNAME + A combined answer
7a472e46772c Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
148 # 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
149
7a472e46772c Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
150 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
151
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
152 # CNAME refers to non-existing A
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
153
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
154 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
155 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
156 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
157
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
158 # take into account DNAME
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
159
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
160 like(http_host_header('alias.example.com', '/'), qr/200 OK/, 'DNAME');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
161
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
162 # many A records in round robin
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
163 # nonexisting IPs enumerated with proxy_next_upstream
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
164
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
165 like(http_host_header('many.example.net', '/'),
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
166 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
167 'A many');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
168
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
169 like(http_host_header('many.example.net', '/'),
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
170 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
171 'A many cached');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
172
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
173 # 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
174 # 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
175
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176 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
177
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
178 # now get correct response
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
179
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
180 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
181
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
182 # response is cached, actual request would get error
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
183
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
184 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
185
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
186 # 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
187 # send 1st request and cache its good response
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
188
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
189 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
190
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
191 # response is cached, actual request would get error
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
192
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
193 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
194 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
195
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
196 sleep 2;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
197
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
198 # expired ttl causes nginx to make actual query
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
199
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
200 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
201
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
202 # zero ttl prohibits response caching
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
203
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
204 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
205
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
206 TODO: {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
207 local $TODO = 'support for zero ttl';
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
208
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
209 like(http_host_header('ttl0.example.net', '/'), qr/502 Bad/,
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
210 'zero ttl not cached');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
211
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
212 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
213
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
214 # "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
215 # send 1st request and cache its good response
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
216
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
217 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
218
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
219 # response is cached, actual request would get error
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
220
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
221 like(http_host_header('ttl.example.net', '/valid'), qr/200 OK/,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
222 'valid cached 1');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
223 like(http_host_header('ttl.example.net', '/valid'), qr/200 OK/,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
224 'valid cached 2');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
225
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
226 sleep 2;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
227
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
228 # expired ttl is overridden with "valid" parameter
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
229 # response is taken from cache
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
230
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
231 like(http_host_header('ttl.example.net', '/valid'), qr/200 OK/,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
232 'valid overrides ttl');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
233
678
99233cfefbbe Tests: adjusted test timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 550
diff changeset
234 sleep 4;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
235
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
236 # expired "valid" value causes nginx to make actual query
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
237
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
238 like(http_host_header('ttl.example.net', '/valid'), qr/502 Bad/,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
239 'valid expired');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
240
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
241 # 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
242 # 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
243 # 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
244
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
245 http_host_header('cname_a_ttl2.example.net', '/');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
246
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
247 sleep 2;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
248
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
249 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
250 'CNAME + A with expired CNAME ttl');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
251
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
252 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
253
436
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
254 like(http_end($s), qr/200 OK/, 'resend after malformed response');
823
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
255 like(http_end($fe), qr/200 OK/, 'resend after format error');
436
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
256
449
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
257 $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
258 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
259
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
260 http_end($s);
0bc79a098213 Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents: 438
diff changeset
261 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
262
823
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
263 like(http_host_header('fe_id.example.net', '/'), qr/502 Bad/, 'format error');
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
264
824
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
265 # several requests waiting on same name query
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
266 # 1st request aborts before name is resolved
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
267 # 2nd request completes on resolver timeout
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
268
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
269 $s = http_host_header('timeout.example.net', '/long', start => 1);
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
270 $s2 = http_host_header('timeout.example.net', '/long', start => 1);
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
271
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
272 select undef, undef, undef, 1.1;
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
273
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
274 close $s;
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
275
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
276 like(http_end($s2), qr/502 Bad/, 'timeout after aborted request');
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
277
834
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
278 # resend DNS query over TCP once UDP response came truncated
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
279
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
280 TODO: {
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
281 local $TODO = 'not yet' unless $t->has_version('1.9.11');
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
282
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
283 unlike(http_host_header('tcp.example.net', '/tcp'), qr/127.0.0.201/, 'tc');
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
284 like(http_host_header('tcp.example.net', '/tcp'), qr/X-IP: 127.0.0.1/, 'tcp');
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
285 like(http_host_header('tcp2.example.net', '/tcp2'), qr/X-IP: 127.0.0.1/,
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
286 'tcp with resend');
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
287
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
288 }
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
289
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
290 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
291
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
292 sub http_host_header {
438
60888e2c3f5a Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 436
diff changeset
293 my ($host, $uri, %extra) = @_;
60888e2c3f5a Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 436
diff changeset
294 return http(<<EOF, %extra);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
295 GET $uri HTTP/1.0
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
296 Host: $host
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
297
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
298 EOF
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
299 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
300
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
301 sub http_x_name_header {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
302 my ($host, $uri) = @_;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
303 return http(<<EOF);
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
304 GET $uri HTTP/1.0
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
305 X-Name: $host
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
306
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
307 EOF
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
308 }
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
309
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
310 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
311
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
312 sub reply_handler {
834
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
313 my ($recv_data, $port, $state, %extra) = @_;
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
314
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
315 my (@name, @rdata);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
316
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
317 use constant NOERROR => 0;
823
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
318 use constant FORMERR => 1;
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
319 use constant SERVFAIL => 2;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
320 use constant NXDOMAIN => 3;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
321
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
322 use constant A => 1;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
323 use constant CNAME => 5;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
324 use constant DNAME => 39;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
325
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
326 use constant IN => 1;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
327
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
328 # default values
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
329
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
330 my ($hdr, $rcode, $ttl) = (0x8180, NOERROR, 3600);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
331
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
332 # decode name
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 my ($len, $offset) = (undef, 12);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
335 while (1) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
336 $len = unpack("\@$offset C", $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
337 last if $len == 0;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
338 $offset++;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
339 push @name, unpack("\@$offset A$len", $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
340 $offset += $len;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
341 }
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
342
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
343 $offset -= 1;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
344 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
345
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
346 my $name = join('.', @name);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
347 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
348 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
349 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
350 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
351
823
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
352 } elsif ($name eq 'fe.example.net' && $type == A) {
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
353 if (++$state->{fecnt} > 1) {
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
354 $rcode = FORMERR;
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
355 }
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
356
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
357 push @rdata, rd_addr($ttl, '127.0.0.1');
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
358
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
359 } elsif ($name eq 'fe_id.example.net' && $type == A) {
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
360 $id = 42;
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
361 $rcode = FORMERR;
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
362
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
363 } elsif ($name eq 'case.example.net' && $type == A) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
364 if (++$state->{casecnt} > 1) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
365 $rcode = SERVFAIL;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
366 }
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
367
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
368 push @rdata, rd_addr($ttl, '127.0.0.1');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
369
436
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
370 } elsif ($name eq 'id.example.net' && $type == A) {
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
371 if (++$state->{idcnt} == 1) {
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
372 $id++;
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
373 }
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
374
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
375 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
376
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
377 } elsif ($name eq 'awide.example.net' && $type == A) {
775
a6764c2a9f12 Tests: fixed DNS label coding in resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 678
diff changeset
378 push @rdata, pack '(C/a*)3x n2N nC4',
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
379 ('awide', 'example', 'net'), A, IN, $ttl,
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
380 4, (127, 0, 0, 1);
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
381
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
382 } 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
383 $state->{manycnt}++;
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
384 if ($state->{manycnt} > 1) {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
385 $rcode = SERVFAIL;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
386 }
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
387
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
388 push @rdata, rd_addr($ttl, '127.0.0.201');
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
389 push @rdata, rd_addr($ttl, '127.0.0.202');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
390
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
391
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
392 } elsif (($name eq 'short.example.net')) {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
393 # zero length RDATA in DNS response
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
394
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
395 if ($type == A) {
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
396 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
397 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
398
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
399 } elsif (($name eq 'alias.example.com')) {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
400 # example.com. 3600 IN DNAME example.net.
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
401
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
402 my @dname = ('example', 'net');
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
403 my $rdlen = length(join '', @dname) + @dname + 1;
775
a6764c2a9f12 Tests: fixed DNS label coding in resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 678
diff changeset
404 push @rdata, pack("n3N n(C/a*)* x", 0xc012, DNAME, IN, $ttl,
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
405 $rdlen, @dname);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
406
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
407 # alias.example.com. 3600 IN CNAME alias.example.net.
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
408
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
409 push @rdata, pack("n3N nCa5n", 0xc00c, CNAME, IN, $ttl,
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
410 8, 5, 'alias', 0xc02f);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
411
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
412 } 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
413 $state->{cnamecnt}++;
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
414 if ($state->{cnamecnt} > 2) {
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
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 push @rdata, pack("n3N nCa5n", 0xc00c, CNAME, IN, $ttl,
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
418 8, 5, 'alias', 0xc012);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
419
824
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
420 } elsif ($name eq 'timeout.example.net') {
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
421 select undef, undef, undef, 2.1;
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
422 return;
9caacdb56b53 Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 823
diff changeset
423
356
7a472e46772c Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
424 } elsif ($name eq 'cname_a.example.net') {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
425 push @rdata, pack("n3N nCa5n", 0xc00c, CNAME, IN, $ttl,
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
426 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
427
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
428 # points to "alias" set in previous rdata
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
429
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
430 if ($type == A) {
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
431 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
432 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
433 }
356
7a472e46772c Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
434
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
435 } elsif ($name eq 'cname_a_ttl2.example.net' && $type == A) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
436 push @rdata, pack("n3N nCa18n", 0xc00c, CNAME, IN, 1,
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
437 21, 18, 'cname_a_ttl2_alias', 0xc019);
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
438 if (++$state->{cttl2cnt} >= 2) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
439 $rcode = SERVFAIL;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
440 }
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
441 push @rdata, pack('n3N nC4', 0xc036, A, IN, $ttl,
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
442 4, split(/\./, '127.0.0.1'));
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
443
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
444 } 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
445 push @rdata, rd_addr($ttl, '127.0.0.1');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
446
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
447 } elsif ($name eq 'cname2.example.net') {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
448 # points to non-existing A
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
449
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
450 push @rdata, pack("n3N nCa2n", 0xc00c, CNAME, IN, $ttl,
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
451 5, 2, 'nx', 0xc02f);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
452
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
453 } elsif ($name eq 'long.example.net') {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
454 push @rdata, pack("n3N nCA63x", 0xc00c, CNAME, IN, $ttl,
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
455 65, 63, 'a' x 63);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
456
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
457 } elsif (($name eq 'a' x 63) && $type == A) {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
458 push @rdata, rd_addr($ttl, '127.0.0.1');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
459
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
460 } elsif ($name eq 'long2.example.net') {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
461 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
462 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
463
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
464 } 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
465 . 'a' x 63) && $type == A)
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
466 {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
467 push @rdata, rd_addr($ttl, '127.0.0.1');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
468
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
469 } 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
470 $state->{ttlcnt}++;
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
471 if ($state->{ttlcnt} == 2 || $state->{ttlcnt} == 4) {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
472 $rcode = SERVFAIL;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
473 }
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
474
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
475 push @rdata, rd_addr(1, '127.0.0.1');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
476
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
477 } 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
478 $state->{ttl0cnt}++;
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
479 if ($state->{ttl0cnt} == 2) {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
480 $rcode = SERVFAIL;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
481 }
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
482
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
483 push @rdata, rd_addr(0, '127.0.0.1');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
484
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
485 } elsif ($name eq '2.example.net') {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
486 if ($port == 8081) {
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
487 $state->{twocnt}++;
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
488 }
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
489 if ($state->{twocnt} & 1) {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
490 $rcode = SERVFAIL;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
491 }
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
492
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
493 if ($type == A) {
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
494 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
495 }
834
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
496
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
497 } elsif ($name =~ /tcp2?.example.net/) {
836
a9c4cebcfe69 Tests: adjusted http resolver test with resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 834
diff changeset
498 $rcode = FORMERR if $port == 8082;
834
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
499 $hdr |= 0x0300 unless $extra{tcp};
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
500 push @rdata, rd_addr($ttl, $extra{tcp}
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
501 ? '127.0.0.1' : '127.0.0.201') if $type == A;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
502 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
503
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
504 $len = @name;
775
a6764c2a9f12 Tests: fixed DNS label coding in resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 678
diff changeset
505 pack("n6 (C/a*)$len x n2", $id, $hdr | $rcode, 1, scalar @rdata,
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
506 0, 0, @name, $type, $class) . join('', @rdata);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
507 }
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
508
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
509 sub rd_addr {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
510 my ($ttl, $addr) = @_;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
511
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
512 my $code = 'split(/\./, $addr)';
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
513
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
514 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
515
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
516 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
517 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
518
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
519 sub dns_daemon {
834
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
520 my ($port, $t, %extra) = @_;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
521
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
522 my ($data, $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
523 my $socket = IO::Socket::INET->new(
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
524 LocalAddr => '127.0.0.1',
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
525 LocalPort => $port,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
526 Proto => 'udp',
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
527 )
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
528 or die "Can't create listening socket: $!\n";
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
529
834
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
530 my $sel = IO::Select->new($socket);
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
531 my $tcp = 0;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
532
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
533 if ($extra{tcp}) {
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
534 $tcp = IO::Socket::INET->new(
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
535 Proto => 'tcp',
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
536 LocalHost => "127.0.0.1:$port",
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
537 Listen => 5,
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
538 Reuse => 1
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
539 )
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
540 or die "Can't create listening socket: $!\n";
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
541
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
542 $sel->add($tcp);
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
543 }
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
544
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
545 local $SIG{PIPE} = 'IGNORE';
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
546
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
547 # 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
548
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
549 my %state = (
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
550 cnamecnt => 0,
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
551 twocnt => 0,
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
552 ttlcnt => 0,
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
553 ttl0cnt => 0,
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
554 cttlcnt => 0,
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
555 cttl2cnt => 0,
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
556 manycnt => 0,
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
557 casecnt => 0,
436
4984dac109db Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents: 397
diff changeset
558 idcnt => 0,
823
9623d353f066 Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
559 fecnt => 0,
359
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
560 );
cdab739eb6ea Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents: 357
diff changeset
561
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
562 # signal we are ready
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
563
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
564 open my $fh, '>', $t->testdir() . '/' . $port;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
565 close $fh;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
566
834
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
567 while (my @ready = $sel->can_read) {
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
568 foreach my $fh (@ready) {
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
569 if ($tcp == $fh) {
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
570 my $new = $fh->accept;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
571 $new->autoflush(1);
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
572 $sel->add($new);
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
573
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
574 } elsif ($socket == $fh) {
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
575 $fh->recv($recv_data, 65536);
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
576 $data = reply_handler($recv_data, $port,
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
577 \%state);
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
578 $fh->send($data);
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
579
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
580 } else {
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
581 $fh->recv($recv_data, 65536);
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
582 unless (length $recv_data) {
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
583 $sel->remove($fh);
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
584 $fh->close;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
585 next;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
586 }
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
587
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
588 again:
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
589 my $len = unpack("n", $recv_data);
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
590 $data = substr $recv_data, 2, $len;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
591 $data = reply_handler($data, $port, \%state,
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
592 tcp => 1);
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
593 $data = pack("n", length $data) . $data;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
594 $fh->send($data);
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
595 $recv_data = substr $recv_data, 2 + $len;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
596 goto again if length $recv_data;
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
597 }
37747a4ff78e Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 824
diff changeset
598 }
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 356
diff changeset
599 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
600 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
601
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
602 ###############################################################################