#!/usr/bin/perl use strict; use warnings; use Test::More tests => 31; require "policyd.pl"; my $o = LematLimit->new( DB_DSN => 'DBI:mysql:policyd_test', DB_USER => 'policyd_test', DB_PASS => '', SYSLOG_IDENT => 'postfix/policyd-lemat2-testing', RECIPIENT_HOUR_LIMIT => 5, RECIPIENT_DAY_LIMIT => 10, IP_HOUR_LIMIT => 2, IP_DAY_LIMIT => 5, ); ok( defined $o ); ok( defined $o->create_tables() ); $o->{NOW} = "'2015-06-01 19:46:54'"; is( $o->do_query( { sasl_username => 'me@example.com', recipient => 'user1@example.com', client_address => '1.1.1.1' } ), 'DUNNO' ) for ( 1 .. 5 ); is( $o->do_query( { sasl_username => 'me@example.com', recipient => 'user' . $_ . '@example.com', client_address => '1.1.1.1' } ), 'DUNNO' ) for ( 2 .. 5 ); is( $o->do_query( { sasl_username => 'me@example.com', recipient => 'user6@example.com', client_address => '1.1.1.1' } ), '550 sendmail recipient limit (5) exceeded for me@example.com [1.1.1.1]' ); is( $o->do_query( { sasl_username => 'me2@example.com', recipient => 'user1@example.com', client_address => '1.1.1.' . $_ } ), 'DUNNO' ) for ( 1 .. 2 ); is( $o->do_query( { sasl_username => 'me2@example.com', recipient => 'user1@example.com', client_address => '1.1.1.3', client_name => 'me2' } ), '550 sendmail ip limit (2) exceeded for me2@example.com me2[1.1.1.3]' ); $o->{NOW} = "'2015-06-01 20:46:54'"; is( $o->do_query( { sasl_username => 'me@example.com', recipient => 'user' . $_ . '@example.com', client_address => '1.1.1.1' } ), 'DUNNO' ) for ( 6 .. 10 ); is( $o->do_query( { sasl_username => 'me@example.com', recipient => 'user11@example.com', client_address => '1.1.1.1' } ), '550 sendmail recipient limit (5) exceeded for me@example.com [1.1.1.1]' ); is( $o->do_query( { sasl_username => 'me2@example.com', recipient => 'user1@example.com', client_address => '1.1.1.' . $_ } ), 'DUNNO' ) for ( 4 .. 5 ); is( $o->do_query( { sasl_username => 'me2@example.com', recipient => 'user1@example.com', client_address => '1.1.1.6' } ), '550 sendmail ip limit (2) exceeded for me2@example.com [1.1.1.6]' ); $o->{NOW} = "'2015-06-01 21:46:54'"; is( $o->do_query( { sasl_username => 'me@example.com', recipient => 'user12@example.com', client_address => '1.1.1.1' } ), '550 sendmail recipient limit (10) exceeded for me@example.com [1.1.1.1]' ); is( $o->do_query( { sasl_username => 'me2@example.com', recipient => 'user1@example.com', client_address => '1.1.1.7' } ), '550 sendmail ip limit (5) exceeded for me2@example.com [1.1.1.7]' ); $o->{NOW} = "'2015-06-02 21:46:54'"; is( $o->do_query( { sasl_username => 'me@example.com', recipient => 'user' . $_ . '@example.com', client_address => '1.1.1.' . ( $_ % 2 ) } ), 'DUNNO' ) for ( 1 .. 5 );