Mercurial > hg > nginx-tests
diff 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 |
line wrap: on
line diff
--- a/mail_resolver.t +++ b/mail_resolver.t @@ -42,6 +42,9 @@ mail { smtp_auth none; server_name locahost; + # prevent useless resend + resolver_timeout 1s; + server { listen 127.0.0.1:8025; protocol smtp; @@ -59,8 +62,6 @@ mail { protocol smtp; resolver 127.0.0.1:8083; - # prevent useless resend - resolver_timeout 1s; } server { @@ -68,6 +69,18 @@ mail { protocol smtp; resolver 127.0.0.1:8084; } + + server { + listen 127.0.0.1:8030; + protocol smtp; + resolver 127.0.0.1:8085; + } + + server { + listen 127.0.0.1:8031; + protocol smtp; + resolver 127.0.0.1:8086; + } } http { @@ -94,18 +107,16 @@ http { EOF -$t->run_daemon(\&dns_daemon, 8081, $t); -$t->run_daemon(\&dns_daemon, 8082, $t); -$t->run_daemon(\&dns_daemon, 8083, $t); -$t->run_daemon(\&dns_daemon, 8084, $t); +for (8081 .. 8086) { + $t->run_daemon(\&dns_daemon, $_, $t); +} $t->run(); -$t->waitforfile($t->testdir . '/8081'); -$t->waitforfile($t->testdir . '/8082'); -$t->waitforfile($t->testdir . '/8083'); -$t->waitforfile($t->testdir . '/8084'); +for (8081 .. 8086) { + $t->waitforfile($t->testdir . "/$_"); +} -$t->plan(5); +$t->plan(7); ############################################################################### @@ -199,6 +210,46 @@ close $s; } +# uncompressed answer + +TODO: { +local $TODO = 'support for uncompressed name in PTR'; + +$s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8030"); +$s->read(); +$s->send('EHLO example.com'); +$s->read(); +$s->send('MAIL FROM:<test@example.com> SIZE=100'); +$s->read(); + +$s->send('RCPT TO:<test@example.com>'); +$s->ok('uncompressed PTR'); + +$s->send('QUIT'); +$s->read(); +close $s; + +} + +TODO: { +local $TODO = 'PTR type checking'; + +$s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8031"); +$s->read(); +$s->send('EHLO example.com'); +$s->read(); +$s->send('MAIL FROM:<test@example.com> SIZE=100'); +$s->read(); + +$s->send('RCPT TO:<test@example.com>'); +$s->check(qr/TEMPUNAVAIL/, 'PTR type'); + +$s->send('QUIT'); +$s->read(); +close $s; + +} + ############################################################################### sub reply_handler { @@ -255,6 +306,16 @@ sub reply_handler { push @rdata, rd_name(CNAME, $ttl, '1.1.0.0.127.in-addr.arpa'); + + } elsif ($port == 8085) { + # uncompressed answer + + push @rdata, pack("(w/a*)6x n2N n(w/a*)3x", + ('1', '0', '0', '127', 'in-addr', 'arpa'), + PTR, IN, $ttl, 15, ('a', 'example', 'net')); + + } elsif ($port == 8086) { + push @rdata, rd_name(CNAME, $ttl, 'a.example.net'); } } elsif ($name eq '1.1.0.0.127.in-addr.arpa' && $type == PTR) { @@ -272,7 +333,7 @@ sub rd_name { @rdname = split /\./, $name; $rdlen = length(join '', @rdname) + @rdname + 1; - pack("n3N n(w/a*)* x", 0xc00c, PTR, IN, $ttl, $rdlen, @rdname); + pack("n3N n(w/a*)* x", 0xc00c, $type, IN, $ttl, $rdlen, @rdname); } sub rd_addr {