Mercurial > hg > nginx-tests
comparison mail_resolver.t @ 362:8ca9c75c97d2
Tests: more resolver tests.
- Uncompressed answer section.
- TTL handling in CNAME + A combined answer.
- Case-insensitive lookups.
- PTR type checking in RR for address to name resolving.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Mon, 16 Dec 2013 18:59:16 +0400 |
parents | aac06d3bdc05 |
children | 847ea345becb |
comparison
equal
deleted
inserted
replaced
361:aac06d3bdc05 | 362:8ca9c75c97d2 |
---|---|
40 mail { | 40 mail { |
41 auth_http http://127.0.0.1:8080/mail/auth; | 41 auth_http http://127.0.0.1:8080/mail/auth; |
42 smtp_auth none; | 42 smtp_auth none; |
43 server_name locahost; | 43 server_name locahost; |
44 | 44 |
45 # prevent useless resend | |
46 resolver_timeout 1s; | |
47 | |
45 server { | 48 server { |
46 listen 127.0.0.1:8025; | 49 listen 127.0.0.1:8025; |
47 protocol smtp; | 50 protocol smtp; |
48 resolver 127.0.0.1:8081 127.0.0.1:8082 127.0.0.1:8083; | 51 resolver 127.0.0.1:8081 127.0.0.1:8082 127.0.0.1:8083; |
49 } | 52 } |
57 server { | 60 server { |
58 listen 127.0.0.1:8028; | 61 listen 127.0.0.1:8028; |
59 protocol smtp; | 62 protocol smtp; |
60 resolver 127.0.0.1:8083; | 63 resolver 127.0.0.1:8083; |
61 | 64 |
62 # prevent useless resend | |
63 resolver_timeout 1s; | |
64 } | 65 } |
65 | 66 |
66 server { | 67 server { |
67 listen 127.0.0.1:8029; | 68 listen 127.0.0.1:8029; |
68 protocol smtp; | 69 protocol smtp; |
69 resolver 127.0.0.1:8084; | 70 resolver 127.0.0.1:8084; |
71 } | |
72 | |
73 server { | |
74 listen 127.0.0.1:8030; | |
75 protocol smtp; | |
76 resolver 127.0.0.1:8085; | |
77 } | |
78 | |
79 server { | |
80 listen 127.0.0.1:8031; | |
81 protocol smtp; | |
82 resolver 127.0.0.1:8086; | |
70 } | 83 } |
71 } | 84 } |
72 | 85 |
73 http { | 86 http { |
74 %%TEST_GLOBALS_HTTP%% | 87 %%TEST_GLOBALS_HTTP%% |
92 } | 105 } |
93 } | 106 } |
94 | 107 |
95 EOF | 108 EOF |
96 | 109 |
97 $t->run_daemon(\&dns_daemon, 8081, $t); | 110 for (8081 .. 8086) { |
98 $t->run_daemon(\&dns_daemon, 8082, $t); | 111 $t->run_daemon(\&dns_daemon, $_, $t); |
99 $t->run_daemon(\&dns_daemon, 8083, $t); | 112 } |
100 $t->run_daemon(\&dns_daemon, 8084, $t); | |
101 $t->run(); | 113 $t->run(); |
102 | 114 |
103 $t->waitforfile($t->testdir . '/8081'); | 115 for (8081 .. 8086) { |
104 $t->waitforfile($t->testdir . '/8082'); | 116 $t->waitforfile($t->testdir . "/$_"); |
105 $t->waitforfile($t->testdir . '/8083'); | 117 } |
106 $t->waitforfile($t->testdir . '/8084'); | 118 |
107 | 119 $t->plan(7); |
108 $t->plan(5); | |
109 | 120 |
110 ############################################################################### | 121 ############################################################################### |
111 | 122 |
112 # PTR | 123 # PTR |
113 | 124 |
190 $s->send('MAIL FROM:<test@example.com> SIZE=100'); | 201 $s->send('MAIL FROM:<test@example.com> SIZE=100'); |
191 $s->read(); | 202 $s->read(); |
192 | 203 |
193 $s->send('RCPT TO:<test@example.com>'); | 204 $s->send('RCPT TO:<test@example.com>'); |
194 $s->ok('PTR with CNAME'); | 205 $s->ok('PTR with CNAME'); |
206 | |
207 $s->send('QUIT'); | |
208 $s->read(); | |
209 close $s; | |
210 | |
211 } | |
212 | |
213 # uncompressed answer | |
214 | |
215 TODO: { | |
216 local $TODO = 'support for uncompressed name in PTR'; | |
217 | |
218 $s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8030"); | |
219 $s->read(); | |
220 $s->send('EHLO example.com'); | |
221 $s->read(); | |
222 $s->send('MAIL FROM:<test@example.com> SIZE=100'); | |
223 $s->read(); | |
224 | |
225 $s->send('RCPT TO:<test@example.com>'); | |
226 $s->ok('uncompressed PTR'); | |
227 | |
228 $s->send('QUIT'); | |
229 $s->read(); | |
230 close $s; | |
231 | |
232 } | |
233 | |
234 TODO: { | |
235 local $TODO = 'PTR type checking'; | |
236 | |
237 $s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8031"); | |
238 $s->read(); | |
239 $s->send('EHLO example.com'); | |
240 $s->read(); | |
241 $s->send('MAIL FROM:<test@example.com> SIZE=100'); | |
242 $s->read(); | |
243 | |
244 $s->send('RCPT TO:<test@example.com>'); | |
245 $s->check(qr/TEMPUNAVAIL/, 'PTR type'); | |
195 | 246 |
196 $s->send('QUIT'); | 247 $s->send('QUIT'); |
197 $s->read(); | 248 $s->read(); |
198 close $s; | 249 close $s; |
199 | 250 |
253 } elsif ($port == 8084) { | 304 } elsif ($port == 8084) { |
254 # PTR answered with CNAME | 305 # PTR answered with CNAME |
255 | 306 |
256 push @rdata, rd_name(CNAME, $ttl, | 307 push @rdata, rd_name(CNAME, $ttl, |
257 '1.1.0.0.127.in-addr.arpa'); | 308 '1.1.0.0.127.in-addr.arpa'); |
309 | |
310 } elsif ($port == 8085) { | |
311 # uncompressed answer | |
312 | |
313 push @rdata, pack("(w/a*)6x n2N n(w/a*)3x", | |
314 ('1', '0', '0', '127', 'in-addr', 'arpa'), | |
315 PTR, IN, $ttl, 15, ('a', 'example', 'net')); | |
316 | |
317 } elsif ($port == 8086) { | |
318 push @rdata, rd_name(CNAME, $ttl, 'a.example.net'); | |
258 } | 319 } |
259 | 320 |
260 } elsif ($name eq '1.1.0.0.127.in-addr.arpa' && $type == PTR) { | 321 } elsif ($name eq '1.1.0.0.127.in-addr.arpa' && $type == PTR) { |
261 push @rdata, rd_name(PTR, $ttl, 'a.example.net'); | 322 push @rdata, rd_name(PTR, $ttl, 'a.example.net'); |
262 } | 323 } |
270 my ($type, $ttl, $name) = @_; | 331 my ($type, $ttl, $name) = @_; |
271 my ($rdlen, @rdname); | 332 my ($rdlen, @rdname); |
272 | 333 |
273 @rdname = split /\./, $name; | 334 @rdname = split /\./, $name; |
274 $rdlen = length(join '', @rdname) + @rdname + 1; | 335 $rdlen = length(join '', @rdname) + @rdname + 1; |
275 pack("n3N n(w/a*)* x", 0xc00c, PTR, IN, $ttl, $rdlen, @rdname); | 336 pack("n3N n(w/a*)* x", 0xc00c, $type, IN, $ttl, $rdlen, @rdname); |
276 } | 337 } |
277 | 338 |
278 sub rd_addr { | 339 sub rd_addr { |
279 my ($ttl, $addr) = @_; | 340 my ($ttl, $addr) = @_; |
280 | 341 |