qpsmtpd/t/plugin_tests/virus/clamdscan
Jonathan Hall 44cafde7d4 More complete clamdcscan tests
* construct our own Qpsmtpd::Transaction object for testing, so we're sure
   to have a pristine state
 * Move some logic into a should_scan() sub, to help separate scan_all from
   is_not_multipart (since the multipart state of a message has nothing to
   do with any configuration parameters)
2014-09-16 13:48:19 -05:00

107 lines
3.0 KiB
Perl

#!perl -w
use strict;
use warnings;
use Qpsmtpd::Constants;
use Qpsmtpd::Transaction;
use Mail::Header;
sub register_tests {
my $self = shift;
SKIP: {
eval 'use ClamAV::Client'; ## no critic (Stringy)
skip "Could not load ClamAV::Client", 4
if $@;
$self->register_test('test_register', 3);
$self->register_test('test_get_clamd', 1);
}
$self->register_test('test_err_and_return', 2);
$self->register_test('test_get_filename', 1);
$self->register_test('test_set_permission', 1);
$self->register_test('test_is_too_big', 2);
$self->register_test('test_is_not_multipart', 2);
$self->register_test('test_should_scan',4);
}
sub test_register {
my $self = shift;
ok( $self->{_args}{deny_viruses} eq 'yes', "deny_viruses");
ok( $self->{_args}{max_size} == 1024, "max_size");
ok( $self->{_args}{scan_all} == 1, "scan_all");
};
sub test_err_and_return {
my $self = shift;
$self->{_args}{defer_on_error} = 1;
my ($code, $mess) = $self->err_and_return( "test oops" );
cmp_ok( DENYSOFT, '==', $code, "oops ($mess)");
$self->{_args}{defer_on_error} = 0;
($code, $mess) = $self->err_and_return( "test oops" );
cmp_ok( DECLINED, '==', $code, "oops ($mess)");
}
sub test_get_filename {
my $self = shift;
my $tran = $self->qp->transaction();
$tran->{_body_array} = ['line','two'];
my $filename = $self->get_filename();
ok( $filename, "get_filename ($filename)" );
}
sub test_set_permission {
my $self = shift;
ok( $self->set_permission(), "set_permission" );
}
sub test_get_clamd {
my $self = shift;
my $clamd = $self->get_clamd();
ok( ref $clamd, "get_clamd: " . ref $clamd );
}
sub test_is_too_big {
my $self = shift;
my $tran = Qpsmtpd::Transaction->new();
$self->{_args}{max_size} = 8;
$tran->{_body_size} = 7 * 1024;
ok( ! $self->is_too_big( $tran ), "is_too_big 1");
$tran->{_body_size} = 9 * 1024;
ok( $self->is_too_big( $tran ), "is_too_big 2");
}
sub test_is_not_multipart {
my $self = shift;
my $tran = Qpsmtpd::Transaction->new();
ok( $self->is_not_multipart($tran), "not_multipart 1" );
$tran->header( Mail::Header->new( [
'Content-Type: multipart/alternative; boundary="Jx3Wbb8BMHsO=_?:"'
] ) );
ok( ! $self->is_not_multipart($tran), "not_multipart 2" );
}
sub test_should_scan {
my $self = shift;
my $trans = Qpsmtpd::Transaction->new();
$trans->{_body_size} = 1;
$self->{_args}{scan_all} = 1;
ok( $self->should_scan($trans), "Should scan small message, scan_all=1");
$self->{_args}{scan_all} = 0;
ok( ! $self->should_scan($trans), "Should not scan small message, scan_all=0");
$trans->{_body_size} = 99999999999;
ok( !$self->should_scan($trans), "Should not scan large message" );
$trans->{_body_size} = 1;
$trans->header( Mail::Header->new( [
'Content-Type: multipart/alternative; boundary="Jx3Wbb8BMHsO=_?:"'
] ) );
ok( $self->should_scan($trans), "Should not scan multi-part message" );
}