#!perl -w use strict; use warnings; use Qpsmtpd::Constants; sub register_tests { my $self = shift; $self->register_test('test_relay_only', 2); $self->register_test('test_is_octet_match', 3); $self->register_test('test_is_in_cidr_block', 4); $self->register_test('test_is_in_norelayclients', 5); } sub test_relay_only { my $self = shift; $self->qp->connection->relay_client(0); my $r = $self->relay_only(); cmp_ok( $r, '==', DENY, "relay_only -"); $self->qp->connection->relay_client(1); $r = $self->relay_only(); cmp_ok( $r, '==', OK, "relay_only +"); $self->qp->connection->relay_client(0); }; sub test_is_octet_match { my $self = shift; $self->populate_relayclients(); $self->qp->connection->remote_ip('192.168.1.1'); ok( $self->is_octet_match(), "match, +"); $self->qp->connection->remote_ip('192.169.1.1'); ok( ! $self->is_octet_match(), "nope, -"); $self->qp->connection->remote_ip('10.10.10.10'); ok( ! $self->is_octet_match(), "nope, -"); }; sub test_is_in_cidr_block { my $self = shift; $self->qp->connection->remote_ip('192.168.1.1'); $self->{_cidr_blocks} = [ '192.168.1.0/24' ]; ok( $self->is_in_cidr_block(), "match, +" ); $self->{_cidr_blocks} = [ '192.168.0.0/24' ]; ok( ! $self->is_in_cidr_block(), "nope, -" ); $self->qp->connection->remote_ip('fdda:b13d:e431:ae06:00a1::'); $self->{_cidr_blocks} = [ 'fdda:b13d:e431:ae06::/64' ]; ok( $self->is_in_cidr_block(), "match, +" ); $self->{_cidr_blocks} = [ 'fdda:b13d:e431:be17::' ]; ok( ! $self->is_in_cidr_block(), "nope, -" ); }; sub test_is_in_norelayclients { my $self = shift; my @matches = qw/ 192.168.99.5 192.168.98.1 192.168.98.255 /; my @false = qw/ 192.168.99.7 192.168.109.7 /; foreach ( @matches ) { $self->qp->connection->remote_ip($_); ok( $self->is_in_norelayclients(), "match, + ($_)"); }; foreach ( @false ) { $self->qp->connection->remote_ip($_); ok( ! $self->is_in_norelayclients(), "match, + ($_)"); }; };