annotate mail_resolver.t @ 386:1b205a3332de

Tests: adjusted limit_req rate value. This shortens excessive test execution time due to unnecessarily delayed backend connection after client connection close, which is usually observed when the client connection is closed before the request is proxied to backend.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 26 Mar 2014 22:50:22 +0400
parents 8ca9c75c97d2
children 847ea345becb
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/)
14eba1ad0880 Tests: reduce race in mail resolver test.
Sergey Kandaurov <pluknet@nginx.com>
parents: 352
diff changeset
29 ->run_daemon(\&Test::Nginx::SMTP::smtp_test_daemon);
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 {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 auth_http http://127.0.0.1:8080/mail/auth;
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
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
46 resolver_timeout 1s;
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 {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 listen 127.0.0.1:8025;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 protocol smtp;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 resolver 127.0.0.1:8081 127.0.0.1:8082 127.0.0.1:8083;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 }
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 server {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 listen 127.0.0.1:8027;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 protocol smtp;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 resolver 127.0.0.1:8082;
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
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 server {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61 listen 127.0.0.1:8028;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 protocol smtp;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63 resolver 127.0.0.1:8083;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64
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 server {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68 listen 127.0.0.1:8029;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 protocol smtp;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70 resolver 127.0.0.1:8084;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71 }
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
72
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
73 server {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
74 listen 127.0.0.1:8030;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
75 protocol smtp;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
76 resolver 127.0.0.1:8085;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
77 }
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 server {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
80 listen 127.0.0.1:8031;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
81 protocol smtp;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
82 resolver 127.0.0.1:8086;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
83 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 http {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 %%TEST_GLOBALS_HTTP%%
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 server {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90 listen 127.0.0.1:8080;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 server_name localhost;
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 location = /mail/auth {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94 set $reply $http_client_host;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96 if ($http_client_host !~ UNAVAIL) {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97 set $reply OK;
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
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 add_header Auth-Status $reply;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 add_header Auth-Server 127.0.0.1;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102 add_header Auth-Port 8026;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103 return 204;
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
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
110 for (8081 .. 8086) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
111 $t->run_daemon(\&dns_daemon, $_, $t);
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
112 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113 $t->run();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
114
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
115 for (8081 .. 8086) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
116 $t->waitforfile($t->testdir . "/$_");
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
117 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
118
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
119 $t->plan(7);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
120
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123 # PTR
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 my $s = Test::Nginx::SMTP->new();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
127 $s->send('EHLO example.com');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
128 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
129 $s->send('MAIL FROM:<test@example.com> SIZE=100');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
130 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
131
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
132 $s->send('RCPT TO:<test@example.com>');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
133 $s->ok('PTR');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
134
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
135 $s->send('QUIT');
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 close $s;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
138
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
139 # Cached PTR prevents from querying bad ns on port 8083
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
140
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
141 $s = Test::Nginx::SMTP->new();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
142 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
143 $s->send('EHLO example.com');
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 $s->send('MAIL FROM:<test@example.com> SIZE=100');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
146 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
147
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
148 $s->send('RCPT TO:<test@example.com>');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
149 $s->ok('PTR cached');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
150
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
151 $s->send('QUIT');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
152 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
153 close $s;
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 # SERVFAIL
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
156
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
157 $s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8027");
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
158 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
159 $s->send('EHLO example.com');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
160 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
161 $s->send('MAIL FROM:<test@example.com> SIZE=100');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
162 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
163
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
164 $s->send('RCPT TO:<test@example.com>');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
165 $s->check(qr/TEMPUNAVAIL/, 'PTR SERVFAIL');
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 $s->send('QUIT');
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 close $s;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
170
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
171 # PTR with zero length RDATA
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 TODO: {
361
aac06d3bdc05 Tests: adjusted resolver TODO, fix committed.
Sergey Kandaurov <pluknet@nginx.com>
parents: 359
diff changeset
174 local $TODO = 'not yet' unless $t->has_version('1.5.8');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
175
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176 $s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8028");
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
177 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
178 $s->send('EHLO example.com');
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('MAIL FROM:<test@example.com> SIZE=100');
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
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
183 $s->send('RCPT TO:<test@example.com>');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
184 $s->check(qr/TEMPUNAVAIL/, 'PTR empty');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
185
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
186 $s->send('QUIT');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
187 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
188 close $s;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
189
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
190 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
191
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
192 # CNAME
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
193
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
194 TODO: {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
195 local $TODO = 'support for CNAME RR';
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
196
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
197 $s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8029");
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
198 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
199 $s->send('EHLO example.com');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
200 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
201 $s->send('MAIL FROM:<test@example.com> SIZE=100');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
202 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
203
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
204 $s->send('RCPT TO:<test@example.com>');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
205 $s->ok('PTR with CNAME');
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 $s->send('QUIT');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
208 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
209 close $s;
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 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
212
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
213 # uncompressed answer
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
214
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
215 TODO: {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
216 local $TODO = 'support for uncompressed name in PTR';
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
217
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
218 $s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8030");
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
219 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
220 $s->send('EHLO example.com');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
221 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
222 $s->send('MAIL FROM:<test@example.com> SIZE=100');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
223 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
224
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
225 $s->send('RCPT TO:<test@example.com>');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
226 $s->ok('uncompressed PTR');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
227
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
228 $s->send('QUIT');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
229 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
230 close $s;
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 }
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
233
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
234 TODO: {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
235 local $TODO = 'PTR type checking';
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
236
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
237 $s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8031");
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('EHLO example.com');
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 $s->send('MAIL FROM:<test@example.com> SIZE=100');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
242 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
243
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
244 $s->send('RCPT TO:<test@example.com>');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
245 $s->check(qr/TEMPUNAVAIL/, 'PTR type');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
246
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
247 $s->send('QUIT');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
248 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
249 close $s;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
250
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
251 }
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
252
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
253 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
254
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
255 sub reply_handler {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
256 my ($recv_data, $port) = @_;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
257
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
258 my (@name, @rdata);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
259
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
260 use constant NOERROR => 0;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
261 use constant SERVFAIL => 2;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
262 use constant NXDOMAIN => 3;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
263
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
264 use constant A => 1;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
265 use constant CNAME => 5;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
266 use constant PTR => 12;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
267
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
268 use constant IN => 1;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
269
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
270 # default values
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
271
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
272 my ($hdr, $rcode, $ttl) = (0x8180, NOERROR, 3600);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
273
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
274 # decode name
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
275
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
276 my ($len, $offset) = (undef, 12);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
277 while (1) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
278 $len = unpack("\@$offset C", $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
279 last if $len == 0;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
280 $offset++;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
281 push @name, unpack("\@$offset A$len", $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
282 $offset += $len;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
283 }
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
284
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
285 $offset -= 1;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
286 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
287
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
288 my $name = join('.', @name);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
289 if ($name eq 'a.example.net' && $type == A) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
290 push @rdata, rd_addr($ttl, '127.0.0.1');
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 } elsif ($name eq '1.0.0.127.in-addr.arpa' && $type == PTR) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
293 if ($port == 8081) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
294 push @rdata, rd_name(PTR, $ttl, 'a.example.net');
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
295
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
296 } elsif ($port == 8082) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
297 $rcode = SERVFAIL;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
298
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
299 } elsif ($port == 8083) {
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
300 # zero length RDATA
357
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 push @rdata, pack("n3N n", 0xc00c, PTR, IN, $ttl, 0);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
303
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
304 } elsif ($port == 8084) {
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
305 # PTR answered with CNAME
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
306
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
307 push @rdata, rd_name(CNAME, $ttl,
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
308 '1.1.0.0.127.in-addr.arpa');
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
309
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
310 } elsif ($port == 8085) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
311 # uncompressed answer
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
312
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
313 push @rdata, pack("(w/a*)6x n2N n(w/a*)3x",
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
314 ('1', '0', '0', '127', 'in-addr', 'arpa'),
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
315 PTR, IN, $ttl, 15, ('a', 'example', 'net'));
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
316
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
317 } elsif ($port == 8086) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
318 push @rdata, rd_name(CNAME, $ttl, 'a.example.net');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
319 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
320
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
321 } 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
322 push @rdata, rd_name(PTR, $ttl, 'a.example.net');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
323 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
324
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
325 $len = @name;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
326 pack("n6 (w/a*)$len x n2", $id, $hdr | $rcode, 1, scalar @rdata,
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
327 0, 0, @name, $type, $class) . join('', @rdata);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
328 }
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
329
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
330 sub rd_name {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
331 my ($type, $ttl, $name) = @_;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
332 my ($rdlen, @rdname);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
333
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
334 @rdname = split /\./, $name;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
335 $rdlen = length(join '', @rdname) + @rdname + 1;
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
336 pack("n3N n(w/a*)* x", 0xc00c, $type, IN, $ttl, $rdlen, @rdname);
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
337 }
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
338
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
339 sub rd_addr {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
340 my ($ttl, $addr) = @_;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
341
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
342 my $code = 'split(/\./, $addr)';
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
343
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
344 # use a special pack string to not zero pad
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
345
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
346 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
347
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
348 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
349 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
350
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
351 sub dns_daemon {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
352 my ($port, $t) = @_;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
353
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
354 my ($data, $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
355 my $socket = IO::Socket::INET->new(
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
356 LocalAddr => '127.0.0.1',
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
357 LocalPort => $port,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
358 Proto => 'udp',
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
359 )
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
360 or die "Can't create listening socket: $!\n";
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
361
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
362 # signal we are ready
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
363
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
364 open my $fh, '>', $t->testdir() . '/' . $port;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
365 close $fh;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
366
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
367 while (1) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
368 $socket->recv($recv_data, 65536);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
369 $data = reply_handler($recv_data, $port);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
370 $socket->send($data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
371 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
372 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
373
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
374 ###############################################################################