annotate mail_resolver.t @ 431:05c46688b54b

Tests: ssl_password_file.t fixes. Make sure to always specify listen socket in all servers as the default vary (under root, nginx will try to listen on 80). Make sure to detect if an https request was processed by http.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 09 Jul 2014 05:19:51 +0400
parents 847ea345becb
children 481d705b8610
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 $s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8028");
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 $s->send('EHLO example.com');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
177 $s->send('MAIL FROM:<test@example.com> SIZE=100');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
178 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
179
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
180 $s->send('RCPT TO:<test@example.com>');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
181 $s->check(qr/TEMPUNAVAIL/, 'PTR empty');
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('QUIT');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
184 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
185 close $s;
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
186
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
187 # CNAME
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
188
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
189 TODO: {
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
190 local $TODO = 'support for CNAME RR';
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 $s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8029");
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
193 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
194 $s->send('EHLO example.com');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
195 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
196 $s->send('MAIL FROM:<test@example.com> SIZE=100');
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
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
199 $s->send('RCPT TO:<test@example.com>');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
200 $s->ok('PTR with CNAME');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
201
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
202 $s->send('QUIT');
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
203 $s->read();
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
204 close $s;
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 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
207
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
208 # uncompressed answer
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
209
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
210 TODO: {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
211 local $TODO = 'support for uncompressed name in PTR';
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 $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
214 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
215 $s->send('EHLO example.com');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
216 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
217 $s->send('MAIL FROM:<test@example.com> SIZE=100');
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
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
220 $s->send('RCPT TO:<test@example.com>');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
221 $s->ok('uncompressed PTR');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
222
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
223 $s->send('QUIT');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
224 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
225 close $s;
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 }
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
228
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
229 TODO: {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
230 local $TODO = 'PTR type checking';
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 $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
233 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
234 $s->send('EHLO example.com');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
235 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
236 $s->send('MAIL FROM:<test@example.com> SIZE=100');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
237 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
238
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
239 $s->send('RCPT TO:<test@example.com>');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
240 $s->check(qr/TEMPUNAVAIL/, 'PTR type');
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('QUIT');
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
243 $s->read();
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
244 close $s;
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
245
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
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
248 ###############################################################################
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
249
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
250 sub reply_handler {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
251 my ($recv_data, $port) = @_;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
252
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
253 my (@name, @rdata);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
254
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
255 use constant NOERROR => 0;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
256 use constant SERVFAIL => 2;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
257 use constant NXDOMAIN => 3;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
258
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
259 use constant A => 1;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
260 use constant CNAME => 5;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
261 use constant PTR => 12;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
262
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
263 use constant IN => 1;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
264
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
265 # default values
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
266
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
267 my ($hdr, $rcode, $ttl) = (0x8180, NOERROR, 3600);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
268
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
269 # decode name
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
270
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
271 my ($len, $offset) = (undef, 12);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
272 while (1) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
273 $len = unpack("\@$offset C", $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
274 last if $len == 0;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
275 $offset++;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
276 push @name, unpack("\@$offset A$len", $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
277 $offset += $len;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
278 }
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
279
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
280 $offset -= 1;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
281 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
282
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
283 my $name = join('.', @name);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
284 if ($name eq 'a.example.net' && $type == A) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
285 push @rdata, rd_addr($ttl, '127.0.0.1');
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
286
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
287 } 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
288 if ($port == 8081) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
289 push @rdata, rd_name(PTR, $ttl, 'a.example.net');
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
290
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
291 } elsif ($port == 8082) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
292 $rcode = SERVFAIL;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
293
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
294 } elsif ($port == 8083) {
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
295 # zero length RDATA
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
296
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
297 push @rdata, pack("n3N n", 0xc00c, PTR, IN, $ttl, 0);
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
298
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
299 } elsif ($port == 8084) {
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
300 # PTR answered with CNAME
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, rd_name(CNAME, $ttl,
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
303 '1.1.0.0.127.in-addr.arpa');
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
304
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
305 } elsif ($port == 8085) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
306 # uncompressed answer
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
307
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
308 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
309 ('1', '0', '0', '127', 'in-addr', 'arpa'),
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
310 PTR, IN, $ttl, 15, ('a', 'example', 'net'));
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
311
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
312 } elsif ($port == 8086) {
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
313 push @rdata, rd_name(CNAME, $ttl, 'a.example.net');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
314 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
315
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
316 } 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
317 push @rdata, rd_name(PTR, $ttl, 'a.example.net');
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
318 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
319
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
320 $len = @name;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
321 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
322 0, 0, @name, $type, $class) . join('', @rdata);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
323 }
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 sub rd_name {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
326 my ($type, $ttl, $name) = @_;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
327 my ($rdlen, @rdname);
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 @rdname = split /\./, $name;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
330 $rdlen = length(join '', @rdname) + @rdname + 1;
362
8ca9c75c97d2 Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 361
diff changeset
331 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
332 }
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 sub rd_addr {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
335 my ($ttl, $addr) = @_;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
336
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
337 my $code = 'split(/\./, $addr)';
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 # use a special pack string to not zero pad
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
340
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
341 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
342
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
343 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
344 }
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 sub dns_daemon {
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
347 my ($port, $t) = @_;
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
348
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
349 my ($data, $recv_data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
350 my $socket = IO::Socket::INET->new(
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
351 LocalAddr => '127.0.0.1',
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
352 LocalPort => $port,
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
353 Proto => 'udp',
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
354 )
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
355 or die "Can't create listening socket: $!\n";
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
356
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
357 # signal we are ready
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
358
357
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
359 open my $fh, '>', $t->testdir() . '/' . $port;
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
360 close $fh;
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 while (1) {
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
363 $socket->recv($recv_data, 65536);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
364 $data = reply_handler($recv_data, $port);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
365 $socket->send($data);
e0c00e695cb5 Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents: 355
diff changeset
366 }
352
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
367 }
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
368
145c37f27c5a Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
369 ###############################################################################