2012-05-11 07:50:04 +02:00
|
|
|
#!perl -w
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
|
|
|
|
use Qpsmtpd::Constants;
|
2007-03-15 07:55:24 +01:00
|
|
|
|
|
|
|
sub register_tests {
|
|
|
|
my $self = shift;
|
2012-05-11 07:50:04 +02:00
|
|
|
|
|
|
|
$self->register_test('test_get_rcpt_host', 7);
|
|
|
|
$self->register_test('test_is_in_rcpthosts', 3);
|
|
|
|
$self->register_test('test_is_in_morercpthosts', 2);
|
|
|
|
$self->register_test('test_hook_rcpt', 3);
|
2007-03-15 07:55:24 +01:00
|
|
|
}
|
|
|
|
|
2012-05-11 07:50:04 +02:00
|
|
|
|
|
|
|
sub test_hook_rcpt {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
my $transaction = $self->qp->transaction;
|
|
|
|
|
|
|
|
my $address = Qpsmtpd::Address->parse('<user@localhost>');
|
|
|
|
my ($r, $mess) = $self->hook_rcpt( $transaction, $address );
|
|
|
|
cmp_ok( $r, '==', OK, "hook_rcpt, localhost");
|
|
|
|
|
|
|
|
$address = Qpsmtpd::Address->parse('<user@example.com>');
|
|
|
|
($r, $mess) = $self->hook_rcpt( $transaction, $address );
|
|
|
|
cmp_ok( $r, '==', DENY, "hook_rcpt, example.com");
|
|
|
|
|
|
|
|
$self->qp->connection->relay_client(1);
|
|
|
|
($r, $mess) = $self->hook_rcpt( $transaction, $address );
|
|
|
|
cmp_ok( $r, '==', OK, "hook_rcpt, example.com");
|
|
|
|
$self->qp->connection->relay_client(0);
|
|
|
|
};
|
|
|
|
|
|
|
|
sub test_is_in_rcpthosts {
|
2007-03-15 07:55:24 +01:00
|
|
|
my $self = shift;
|
2012-05-11 07:50:04 +02:00
|
|
|
|
|
|
|
my @hosts = $self->qp->config('rcpthosts');
|
|
|
|
my $host = $hosts[0];
|
|
|
|
|
|
|
|
if ( $host ) {
|
|
|
|
ok( $self->is_in_rcpthosts( $host ), "is_in_rcpthosts, $host");
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
ok(1, "is_in_rcpthosts (skip, no entries)" );
|
|
|
|
};
|
|
|
|
|
|
|
|
ok( $self->is_in_rcpthosts( 'localhost' ), "is_in_rcpthosts +");
|
|
|
|
ok( ! $self->is_in_rcpthosts( 'example.com' ), "is_in_rcpthosts -");
|
|
|
|
};
|
|
|
|
|
|
|
|
sub test_is_in_morercpthosts {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
my $ref = $self->qp->config('morercpthosts', 'map');
|
|
|
|
my ($domain) = keys %$ref;
|
|
|
|
if ( $domain ) {
|
|
|
|
ok( $self->is_in_morercpthosts( $domain ), "is_in_morercpthosts, $domain");
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
ok(1, "is_in_morercpthosts (skip, no entries)" );
|
|
|
|
};
|
|
|
|
|
|
|
|
ok( ! $self->is_in_morercpthosts( 'example.com' ), "is_in_morercpthosts -");
|
|
|
|
};
|
|
|
|
|
|
|
|
sub test_get_rcpt_host {
|
|
|
|
my $self = shift;
|
|
|
|
|
2007-03-15 07:55:24 +01:00
|
|
|
my $address = Qpsmtpd::Address->parse('<me@example.com>');
|
2012-05-11 07:50:04 +02:00
|
|
|
cmp_ok( $self->get_rcpt_host( $address ), 'eq', 'example.com',
|
|
|
|
"get_rcpt_host, +" );
|
|
|
|
|
|
|
|
$address = Qpsmtpd::Address->parse('<me@exaMple.com>');
|
|
|
|
cmp_ok( $self->get_rcpt_host( $address ), 'eq', 'example.com',
|
|
|
|
"get_rcpt_host, +" );
|
|
|
|
|
|
|
|
$address = Qpsmtpd::Address->parse('<root@example.com>');
|
|
|
|
cmp_ok( $self->get_rcpt_host( $address ), 'eq', 'example.com',
|
|
|
|
"get_rcpt_host, +" );
|
|
|
|
|
|
|
|
$address = Qpsmtpd::Address->parse('<postmaster>');
|
|
|
|
cmp_ok( $self->get_rcpt_host( $address ), 'eq', 'some.host.example.org',
|
|
|
|
"get_rcpt_host, special postmaster +" );
|
|
|
|
|
|
|
|
# I think this is a bug. Qpsmtpd::Address fails to parse <abuse>
|
|
|
|
$address = Qpsmtpd::Address->parse('<abuse>');
|
|
|
|
ok( ! $self->get_rcpt_host( $address ), "get_rcpt_host, missing host" );
|
|
|
|
|
|
|
|
$address = Qpsmtpd::Address->parse('<>');
|
|
|
|
ok( ! $self->get_rcpt_host( $address ), "get_rcpt_host, null recipient" );
|
|
|
|
|
|
|
|
$address = Qpsmtpd::Address->parse('<@example.com>');
|
|
|
|
ok( ! $self->get_rcpt_host( $address ), "get_rcpt_host, missing user" );
|
|
|
|
};
|
2007-03-15 07:55:24 +01:00
|
|
|
|