annotate mail_resolver.t @ 952:e9064d691790

Tests: converted tests to run in parallel.
author Andrey Zelenkov <zelenkov@nginx.com>
date Tue, 21 Jun 2016 16:39:13 +0300
parents b1fa8e0cc27b
children c227348453db
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
355
14eba1ad0880 Tests: reduce race in mail resolver test.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
6 # Tests for mail resolver.
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19 use Test::Nginx::SMTP;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDERR; $| = 1;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24 select STDOUT; $| = 1;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26 local $SIG{PIPE} = 'IGNORE';
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27
355
14eba1ad0880 Tests: reduce race in mail resolver test.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
28 my $t = Test::Nginx->new()->has(qw/mail smtp http rewrite/)
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
29 ->run_daemon(\&Test::Nginx::SMTP::smtp_test_daemon, port(15));
352
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 $t->write_file_expand('nginx.conf', <<'EOF');
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 %%TEST_GLOBALS%%
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 daemon off;
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 events {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40 mail {
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
41 auth_http http://127.0.0.1:%%PORT_0%%/mail/auth;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 smtp_auth none;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 server_name locahost;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
45 # prevent useless resend
906
0654d7315b52 Tests: adjusted resolver timeout in mail resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 839
diff changeset
46 resolver_timeout 2s;
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
47
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 server {
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
49 listen 127.0.0.1:%%PORT_1%%;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 protocol smtp;
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
51 resolver 127.0.0.1:%%PORT_8_UDP%% 127.0.0.1:%%PORT_9_UDP%%
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
52 127.0.0.1:%%PORT_10_UDP%%;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 server {
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
56 listen 127.0.0.1:%%PORT_2%%;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 protocol smtp;
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
58 resolver 127.0.0.1:%%PORT_9_UDP%%;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61 server {
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
62 listen 127.0.0.1:%%PORT_3%%;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63 protocol smtp;
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
64 resolver 127.0.0.1:%%PORT_10_UDP%%;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68 server {
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
69 listen 127.0.0.1:%%PORT_4%%;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70 protocol smtp;
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
71 resolver 127.0.0.1:%%PORT_11_UDP%%;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 }
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
73
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
74 server {
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
75 listen 127.0.0.1:%%PORT_5%%;
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
76 protocol smtp;
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
77 resolver 127.0.0.1:%%PORT_12_UDP%%;
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
78 }
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
79
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
80 server {
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
81 listen 127.0.0.1:%%PORT_6%%;
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
82 protocol smtp;
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
83 resolver 127.0.0.1:%%PORT_13_UDP%%;
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
84 }
809
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
85
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
86 server {
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
87 listen 127.0.0.1:%%PORT_7%%;
809
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
88 protocol smtp;
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
89 resolver 127.0.0.1:%%PORT_14_UDP%%;
809
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
90 }
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
91
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94 http {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95 %%TEST_GLOBALS_HTTP%%
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97 server {
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
98 listen 127.0.0.1:%%PORT_0%%;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99 server_name localhost;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 location = /mail/auth {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102 set $reply $http_client_host;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 if ($http_client_host !~ UNAVAIL) {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
105 set $reply OK;
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 add_header Auth-Status $reply;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109 add_header Auth-Server 127.0.0.1;
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
110 add_header Auth-Port %%PORT_15%%;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
111 return 204;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
112 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
114 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
115
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116 EOF
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
117
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
118 for (8 .. 14) {
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
119 $t->run_daemon(\&dns_daemon, port($_), $t);
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
120 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121 $t->run();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
123 for (8 .. 14) {
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
124 $t->waitforfile($t->testdir . '/' . port($_));
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
125 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126
809
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
127 $t->plan(8);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
128
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
129 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
130
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
131 # PTR
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
132
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
133 my $s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
134 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
135 $s->send('EHLO example.com');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
136 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
137 $s->send('MAIL FROM:<test@example.com> SIZE=100');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
138 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
139
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
140 $s->send('RCPT TO:<test@example.com>');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
141 $s->ok('PTR');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
142
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
143 $s->send('QUIT');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
144 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
145
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
146 # Cached PTR prevents from querying bad ns on the first port
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
147
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
148 $s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
149 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
150 $s->send('EHLO example.com');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
151 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
152 $s->send('MAIL FROM:<test@example.com> SIZE=100');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
153 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
154
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
155 $s->send('RCPT TO:<test@example.com>');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
156 $s->ok('PTR cached');
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 $s->send('QUIT');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
159 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
160
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
161 # SERVFAIL
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
162
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
163 $s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(2));
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
164 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
165 $s->send('EHLO example.com');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
166 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
167 $s->send('MAIL FROM:<test@example.com> SIZE=100');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
168 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
169
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
170 $s->send('RCPT TO:<test@example.com>');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
171 $s->check(qr/TEMPUNAVAIL/, 'PTR SERVFAIL');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
172
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
173 $s->send('QUIT');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
174 $s->read();
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 # PTR with zero length RDATA
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
177
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
178 $s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(3));
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
179 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
180 $s->send('EHLO example.com');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
181 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
182 $s->send('MAIL FROM:<test@example.com> SIZE=100');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
183 $s->read();
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 $s->send('RCPT TO:<test@example.com>');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
186 $s->check(qr/TEMPUNAVAIL/, 'PTR empty');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
187
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
188 $s->send('QUIT');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
189 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
190
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
191 # CNAME
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
192
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
193 TODO: {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
194 local $TODO = 'support for CNAME RR';
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
195
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
196 $s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(4));
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
197 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
198 $s->send('EHLO example.com');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
199 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
200 $s->send('MAIL FROM:<test@example.com> SIZE=100');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
201 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
202
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
203 $s->send('RCPT TO:<test@example.com>');
809
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
204 $s->ok('CNAME');
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 $s->send('QUIT');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
207 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
208
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
209 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
210
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
211 # uncompressed answer
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
212
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
213 TODO: {
839
b87c6acf0e4b Tests: updated mail resolver TODOs, fixed in 33c4d319f08f (1.9.11).
Sergey Kandaurov <pluknet@nginx.com>
parents: 809
diff changeset
214 local $TODO = 'support for uncompressed name in PTR'
b87c6acf0e4b Tests: updated mail resolver TODOs, fixed in 33c4d319f08f (1.9.11).
Sergey Kandaurov <pluknet@nginx.com>
parents: 809
diff changeset
215 unless $t->has_version('1.9.11');
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
216
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
217 $s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(5));
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
218 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
219 $s->send('EHLO example.com');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
220 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
221 $s->send('MAIL FROM:<test@example.com> SIZE=100');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
222 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
223
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
224 $s->send('RCPT TO:<test@example.com>');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
225 $s->ok('uncompressed PTR');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
226
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
227 $s->send('QUIT');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
228 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
229
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
230 }
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
231
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
232 TODO: {
839
b87c6acf0e4b Tests: updated mail resolver TODOs, fixed in 33c4d319f08f (1.9.11).
Sergey Kandaurov <pluknet@nginx.com>
parents: 809
diff changeset
233 local $TODO = 'PTR type checking' unless $t->has_version('1.9.11');
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
234
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
235 $s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(6));
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
236 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
237 $s->send('EHLO example.com');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
238 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
239 $s->send('MAIL FROM:<test@example.com> SIZE=100');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
240 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
241
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
242 $s->send('RCPT TO:<test@example.com>');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
243 $s->check(qr/TEMPUNAVAIL/, 'PTR type');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
244
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
245 $s->send('QUIT');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
246 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
247
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
248 }
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
249
809
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
250 # CNAME and PTR in one answer section
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
251
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
252 TODO: {
839
b87c6acf0e4b Tests: updated mail resolver TODOs, fixed in 33c4d319f08f (1.9.11).
Sergey Kandaurov <pluknet@nginx.com>
parents: 809
diff changeset
253 local $TODO = 'not yet' unless $t->has_version('1.9.11');
809
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
254
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
255 $s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(7));
809
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
256 $s->read();
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
257 $s->send('EHLO example.com');
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
258 $s->read();
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
259 $s->send('MAIL FROM:<test@example.com> SIZE=100');
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
260 $s->read();
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
261
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
262 $s->send('RCPT TO:<test@example.com>');
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
263 $s->ok('CNAME with PTR');
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
264
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
265 $s->send('QUIT');
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
266 $s->read();
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
267
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
268 }
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
269
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
270 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
271
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
272 sub reply_handler {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
273 my ($recv_data, $port) = @_;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
274
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
275 my (@name, @rdata);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
276
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
277 use constant NOERROR => 0;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
278 use constant SERVFAIL => 2;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
279 use constant NXDOMAIN => 3;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
280
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
281 use constant A => 1;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
282 use constant CNAME => 5;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
283 use constant PTR => 12;
937
b1fa8e0cc27b Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 906
diff changeset
284 use constant DNAME => 39;
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
285
937
b1fa8e0cc27b Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 906
diff changeset
286 use constant IN => 1;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
287
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
288 # default values
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
289
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
290 my ($hdr, $rcode, $ttl) = (0x8180, NOERROR, 3600);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
291
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
292 # decode name
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
293
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
294 my ($len, $offset) = (undef, 12);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
295 while (1) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
296 $len = unpack("\@$offset C", $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
297 last if $len == 0;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
298 $offset++;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
299 push @name, unpack("\@$offset A$len", $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
300 $offset += $len;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
301 }
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
302
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
303 $offset -= 1;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
304 my ($id, $type, $class) = unpack("n x$offset n2", $recv_data);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
305
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
306 my $name = join('.', @name);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
307 if ($name eq 'a.example.net' && $type == A) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
308 push @rdata, rd_addr($ttl, '127.0.0.1');
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
309
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
310 } elsif ($name eq '1.0.0.127.in-addr.arpa' && $type == PTR) {
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
311 if ($port == port(8)) {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
312 push @rdata, rd_name(PTR, $ttl, 'a.example.net');
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
313
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
314 } elsif ($port == port(9)) {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
315 $rcode = SERVFAIL;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
316
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
317 } elsif ($port == port(10)) {
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
318 # zero length RDATA
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
319
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
320 push @rdata, pack("n3N n", 0xc00c, PTR, IN, $ttl, 0);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
321
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
322 } elsif ($port == port(11)) {
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
323 # PTR answered with CNAME
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
324
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
325 push @rdata, rd_name(CNAME, $ttl,
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
326 '1.1.0.0.127.in-addr.arpa');
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
327
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
328 } elsif ($port == port(12)) {
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
329 # uncompressed answer
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
330
775
a6764c2a9f12 Tests: fixed DNS label coding in resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 540
diff changeset
331 push @rdata, pack("(C/a*)6x n2N n(C/a*)3x",
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
332 ('1', '0', '0', '127', 'in-addr', 'arpa'),
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
333 PTR, IN, $ttl, 15, ('a', 'example', 'net'));
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
334
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
335 } elsif ($port == port(13)) {
806
ffdd33c64193 Tests: use DNAME type in PTR type checking test in mail_resolver.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
336 push @rdata, rd_name(DNAME, $ttl, 'a.example.net');
ffdd33c64193 Tests: use DNAME type in PTR type checking test in mail_resolver.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 775
diff changeset
337
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
338 } elsif ($port == port(14)) {
809
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
339 # PTR answered with CNAME+PTR
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
340
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
341 push @rdata, rd_name(CNAME, $ttl,
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
342 '1.1.0.0.127.in-addr.arpa');
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
343 push @rdata, pack("n3N n(C/a*)3 x", 0xc034,
ded6b7648d6e Tests: added mail resolver test for CNAME and PTR records combined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 806
diff changeset
344 PTR, IN, $ttl, 15, ('a', 'example', 'net'));
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
345 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
346
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
347 } elsif ($name eq '1.1.0.0.127.in-addr.arpa' && $type == PTR) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
348 push @rdata, rd_name(PTR, $ttl, 'a.example.net');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
349 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
350
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
351 $len = @name;
775
a6764c2a9f12 Tests: fixed DNS label coding in resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 540
diff changeset
352 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: 355
diff changeset
353 0, 0, @name, $type, $class) . join('', @rdata);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
354 }
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
355
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
356 sub rd_name {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
357 my ($type, $ttl, $name) = @_;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
358 my ($rdlen, @rdname);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
359
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
360 @rdname = split /\./, $name;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
361 $rdlen = length(join '', @rdname) + @rdname + 1;
775
a6764c2a9f12 Tests: fixed DNS label coding in resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 540
diff changeset
362 pack("n3N n(C/a*)* x", 0xc00c, $type, IN, $ttl, $rdlen, @rdname);
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
363 }
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
364
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
365 sub rd_addr {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
366 my ($ttl, $addr) = @_;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
367
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
368 my $code = 'split(/\./, $addr)';
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
369
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
370 # use a special pack string to not zero pad
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
371
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
372 return pack 'n3N', 0xc00c, A, IN, $ttl if $addr eq '';
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
373
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
374 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
375 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
376
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
377 sub dns_daemon {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
378 my ($port, $t) = @_;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
379
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
380 my ($data, $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
381 my $socket = IO::Socket::INET->new(
937
b1fa8e0cc27b Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 906
diff changeset
382 LocalAddr => '127.0.0.1',
b1fa8e0cc27b Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 906
diff changeset
383 LocalPort => $port,
b1fa8e0cc27b Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 906
diff changeset
384 Proto => 'udp',
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
385 )
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
386 or die "Can't create listening socket: $!\n";
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
387
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
388 # signal we are ready
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
389
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
390 open my $fh, '>', $t->testdir() . '/' . $port;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
391 close $fh;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
392
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
393 while (1) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
394 $socket->recv($recv_data, 65536);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
395 $data = reply_handler($recv_data, $port);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
396 $socket->send($data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
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
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
400 ###############################################################################