Mercurial > hg > nginx-tests
annotate http_resolver.t @ 1940:aec72dcee93b
Tests: unconditional QUIC datagram expansion with Initial packets.
Used to get rid of "quic UDP datagram is too small for initial packet" messages.
In future, we may need this to reconsider to allow mocking with custom padding,
but for now suppressing such messages is sufficiently good enough.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Mon, 11 Dec 2023 14:01:49 +0400 |
parents | e4974af3fb12 |
children |
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 { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
958
diff
changeset
|
42 listen 127.0.0.1:8080; |
352
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 / { |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
46 resolver 127.0.0.1:%%PORT_8981_UDP%%; |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
47 resolver_timeout 1s; |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
958
diff
changeset
|
48 proxy_pass http://$host:%%PORT_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 { |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
56 resolver 127.0.0.1:%%PORT_8981_UDP%% 127.0.0.1:%%PORT_8982_UDP%%; |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
958
diff
changeset
|
57 proxy_pass http://$host:%%PORT_8080%%/backend; |
352
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 { |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
60 resolver 127.0.0.1:%%PORT_8981_UDP%% valid=5s; |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
958
diff
changeset
|
61 proxy_pass http://$host:%%PORT_8080%%/backend; |
352
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 { |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
64 resolver 127.0.0.1:%%PORT_8981_UDP%%; |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
958
diff
changeset
|
65 proxy_pass http://$http_x_name:%%PORT_8080%%/backend; |
362
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 { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
958
diff
changeset
|
68 proxy_pass http://$host:%%PORT_8080%%/backend; |
352
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 { |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
71 resolver 127.0.0.1:%%PORT_8981_UDP%%; |
824
9caacdb56b53
Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents:
823
diff
changeset
|
72 resolver_timeout 4s; |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
958
diff
changeset
|
73 proxy_pass http://$host:%%PORT_8080%%/backend; |
824
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 { |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
76 resolver 127.0.0.1:%%PORT_8981_UDP%%; |
550
a04b8b9537cd
Tests: adjusted resolver test timeout.
Sergey Kandaurov <pluknet@nginx.com>
parents:
544
diff
changeset
|
77 resolver_timeout 8s; |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
958
diff
changeset
|
78 proxy_pass http://$host:%%PORT_8080%%/backend; |
436
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 { |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
81 resolver 127.0.0.1:%%PORT_8984_UDP%%; |
449
0bc79a098213
Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents:
438
diff
changeset
|
82 resolver_timeout 1s; |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
958
diff
changeset
|
83 proxy_pass http://$host:%%PORT_8080%%/backend; |
449
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 { |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
86 resolver 127.0.0.1:%%PORT_8983_UDP%% 127.0.0.1:%%PORT_8982_UDP%%; |
834
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
87 resolver_timeout 1s; |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
958
diff
changeset
|
88 proxy_pass http://$host:%%PORT_8080%%/backend; |
834
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; |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
958
diff
changeset
|
95 proxy_pass http://$host:%%PORT_8080%%/backend; |
834
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 |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
110 $t->run_daemon(\&dns_daemon, port(8981), $t); |
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
111 $t->run_daemon(\&dns_daemon, port(8982), $t); |
958
0a87d9bcfb26
Tests: fixed TCP resolver test hang on win32.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
956
diff
changeset
|
112 |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
113 $t->run_daemon(\&dns_daemon, port(8983), $t, tcp => 1); |
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
114 $t->waitforfile($t->testdir . '/' . port(8983)); |
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
115 port(8983, socket => 1)->close(); |
958
0a87d9bcfb26
Tests: fixed TCP resolver test hang on win32.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
956
diff
changeset
|
116 |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
117 $t->run_daemon(\&dns_daemon, port(8984), $t); |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
356
diff
changeset
|
118 |
834
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
119 $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
|
120 |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
121 $t->waitforfile($t->testdir . '/' . port(8981)); |
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
122 $t->waitforfile($t->testdir . '/' . port(8982)); |
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
123 $t->waitforfile($t->testdir . '/' . port(8984)); |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
124 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
125 ############################################################################### |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
126 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
958
diff
changeset
|
127 my $p0 = port(8080); |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
937
diff
changeset
|
128 |
450 | 129 # 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
|
130 |
438
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
436
diff
changeset
|
131 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
|
132 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
|
133 |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
134 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
|
135 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
359
diff
changeset
|
136 # 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
|
137 # 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
|
138 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
359
diff
changeset
|
139 http_x_name_header('case.example.net', '/case'); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
359
diff
changeset
|
140 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
|
141 'A case-insensitive'); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
359
diff
changeset
|
142 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
359
diff
changeset
|
143 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
|
144 like(http_host_header('short.example.net', '/'), qr/502 Bad/, |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
145 'A short dns response'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
146 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
147 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
|
148 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
|
149 like(http_host_header('cname.example.net', '/'), qr/200 OK/, |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
150 'CNAME cached'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
151 |
356
7a472e46772c
Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
352
diff
changeset
|
152 # CNAME + A combined answer |
7a472e46772c
Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
352
diff
changeset
|
153 # 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
|
154 |
7a472e46772c
Tests: added http resolver test for CNAME + A combined answer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
352
diff
changeset
|
155 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
|
156 |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
157 # CNAME refers to non-existing A |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
158 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
159 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
|
160 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
|
161 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
|
162 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
163 # take into account DNAME |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
164 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
165 like(http_host_header('alias.example.com', '/'), qr/200 OK/, 'DNAME'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
166 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
167 # many A records in round robin |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
168 # nonexisting IPs enumerated with proxy_next_upstream |
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('many.example.net', '/'), |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
937
diff
changeset
|
171 qr/^127.0.0.20(1:$p0, 127.0.0.202:$p0|2:$p0, 127.0.0.201:$p0)$/m, |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
172 'A many'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
173 |
359
cdab739eb6ea
Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
357
diff
changeset
|
174 like(http_host_header('many.example.net', '/'), |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
937
diff
changeset
|
175 qr/^127.0.0.20(1:$p0, 127.0.0.202:$p0|2:$p0, 127.0.0.201:$p0)$/m, |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
176 'A many cached'); |
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 # 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
|
179 # 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
|
180 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
181 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
|
182 |
359
cdab739eb6ea
Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
357
diff
changeset
|
183 # now get correct response |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
184 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
185 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
|
186 |
359
cdab739eb6ea
Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
357
diff
changeset
|
187 # response is cached, actual request would get error |
352
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 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
|
190 |
359
cdab739eb6ea
Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
357
diff
changeset
|
191 # 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
|
192 # send 1st request and cache its good response |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
193 |
359
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'); |
352
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 |
359
cdab739eb6ea
Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
357
diff
changeset
|
198 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
|
199 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
|
200 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
201 sleep 2; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
202 |
359
cdab739eb6ea
Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
357
diff
changeset
|
203 # expired ttl causes nginx to make actual query |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
204 |
359
cdab739eb6ea
Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
357
diff
changeset
|
205 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
|
206 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
207 # zero ttl prohibits response caching |
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/200 OK/, 'zero ttl'); |
352
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 TODO: { |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
212 local $TODO = 'support for zero ttl'; |
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 like(http_host_header('ttl0.example.net', '/'), qr/502 Bad/, |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
215 'zero ttl not cached'); |
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 } |
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 # "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
|
220 # send 1st request and cache its good response |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
221 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
222 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
|
223 |
359
cdab739eb6ea
Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
357
diff
changeset
|
224 # response is cached, actual request would get error |
352
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 like(http_host_header('ttl.example.net', '/valid'), qr/200 OK/, |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
227 'valid cached 1'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
228 like(http_host_header('ttl.example.net', '/valid'), qr/200 OK/, |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
229 'valid cached 2'); |
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 sleep 2; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
232 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
233 # expired ttl is overridden with "valid" parameter |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
234 # response is taken from cache |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
235 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
236 like(http_host_header('ttl.example.net', '/valid'), qr/200 OK/, |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
237 'valid overrides ttl'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
238 |
678
99233cfefbbe
Tests: adjusted test timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
550
diff
changeset
|
239 sleep 4; |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
240 |
359
cdab739eb6ea
Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
357
diff
changeset
|
241 # expired "valid" value causes nginx to make actual query |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
242 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
243 like(http_host_header('ttl.example.net', '/valid'), qr/502 Bad/, |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
244 'valid expired'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
245 |
362
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
359
diff
changeset
|
246 # 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
|
247 # 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
|
248 # 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
|
249 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
359
diff
changeset
|
250 http_host_header('cname_a_ttl2.example.net', '/'); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
359
diff
changeset
|
251 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
359
diff
changeset
|
252 sleep 2; |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
359
diff
changeset
|
253 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
359
diff
changeset
|
254 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
|
255 'CNAME + A with expired CNAME ttl'); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
359
diff
changeset
|
256 |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
257 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
|
258 |
436
4984dac109db
Tests: added test for resolver resend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
259 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
|
260 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
|
261 |
449
0bc79a098213
Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents:
438
diff
changeset
|
262 $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
|
263 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
|
264 |
0bc79a098213
Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents:
438
diff
changeset
|
265 http_end($s); |
0bc79a098213
Tests: added resolver timeout test with multiple requests sent.
Sergey Kandaurov <pluknet@nginx.com>
parents:
438
diff
changeset
|
266 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
|
267 |
823
9623d353f066
Tests: http resolver tests with format error response code.
Sergey Kandaurov <pluknet@nginx.com>
parents:
775
diff
changeset
|
268 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
|
269 |
824
9caacdb56b53
Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents:
823
diff
changeset
|
270 # 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
|
271 # 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
|
272 # 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
|
273 |
9caacdb56b53
Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents:
823
diff
changeset
|
274 $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
|
275 $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
|
276 |
9caacdb56b53
Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents:
823
diff
changeset
|
277 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
|
278 |
9caacdb56b53
Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents:
823
diff
changeset
|
279 close $s; |
9caacdb56b53
Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents:
823
diff
changeset
|
280 |
9caacdb56b53
Tests: added test for resolver timeout after aborted request.
Sergey Kandaurov <pluknet@nginx.com>
parents:
823
diff
changeset
|
281 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
|
282 |
834
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
283 # 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
|
284 |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
285 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
|
286 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
|
287 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
|
288 'tcp with resend'); |
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 |
937
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
diff
changeset
|
326 use constant IN => 1; |
357
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) { |
937
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
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) { |
937
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
diff
changeset
|
439 $rcode = SERVFAIL; |
362
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') { |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
486 if ($port == port(8981)) { |
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/) { |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
498 $rcode = FORMERR if $port == port(8982); |
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( |
937
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
diff
changeset
|
524 LocalAddr => '127.0.0.1', |
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
diff
changeset
|
525 LocalPort => $port, |
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
diff
changeset
|
526 Proto => 'udp', |
352
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}) { |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1020
diff
changeset
|
534 $tcp = port(8983, socket => 1); |
834
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
535 $sel->add($tcp); |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
536 } |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
537 |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
538 local $SIG{PIPE} = 'IGNORE'; |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
539 |
359
cdab739eb6ea
Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
357
diff
changeset
|
540 # 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
|
541 |
cdab739eb6ea
Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
357
diff
changeset
|
542 my %state = ( |
937
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
diff
changeset
|
543 cnamecnt => 0, |
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
diff
changeset
|
544 twocnt => 0, |
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
diff
changeset
|
545 ttlcnt => 0, |
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
diff
changeset
|
546 ttl0cnt => 0, |
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
diff
changeset
|
547 cttlcnt => 0, |
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
diff
changeset
|
548 cttl2cnt => 0, |
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
diff
changeset
|
549 manycnt => 0, |
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
diff
changeset
|
550 casecnt => 0, |
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
diff
changeset
|
551 idcnt => 0, |
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
836
diff
changeset
|
552 fecnt => 0, |
359
cdab739eb6ea
Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
357
diff
changeset
|
553 ); |
cdab739eb6ea
Tests: resolver tests enabled to work with AAAA capable resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
357
diff
changeset
|
554 |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
356
diff
changeset
|
555 # signal we are ready |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
556 |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
356
diff
changeset
|
557 open my $fh, '>', $t->testdir() . '/' . $port; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
356
diff
changeset
|
558 close $fh; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
356
diff
changeset
|
559 |
834
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
560 while (my @ready = $sel->can_read) { |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
561 foreach my $fh (@ready) { |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
562 if ($tcp == $fh) { |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
563 my $new = $fh->accept; |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
564 $new->autoflush(1); |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
565 $sel->add($new); |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
566 |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
567 } elsif ($socket == $fh) { |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
568 $fh->recv($recv_data, 65536); |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
569 $data = reply_handler($recv_data, $port, |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
570 \%state); |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
571 $fh->send($data); |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
572 |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
573 } else { |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
574 $fh->recv($recv_data, 65536); |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
575 unless (length $recv_data) { |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
576 $sel->remove($fh); |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
577 $fh->close; |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
578 next; |
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 |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
581 again: |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
582 my $len = unpack("n", $recv_data); |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
583 $data = substr $recv_data, 2, $len; |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
584 $data = reply_handler($data, $port, \%state, |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
585 tcp => 1); |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
586 $data = pack("n", length $data) . $data; |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
587 $fh->send($data); |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
588 $recv_data = substr $recv_data, 2 + $len; |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
589 goto again if length $recv_data; |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
590 } |
37747a4ff78e
Tests: simple http resolver tests over TCP.
Sergey Kandaurov <pluknet@nginx.com>
parents:
824
diff
changeset
|
591 } |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
356
diff
changeset
|
592 } |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
593 } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
594 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
595 ############################################################################### |