#!/usr/bin/perl -T
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl Mail-ClamAV.t'
#########################
use Test::More tests => 10;
use strict;
BEGIN { use_ok('Mail::ClamAV') };
import Mail::ClamAV qw/:all/;
my $fail = 0;
foreach my $constname (qw(
CL_CLEAN
CL_VIRUS
CL_BREAK
CL_EMAXREC
CL_EMAXSIZE
CL_EMAXFILES
CL_ERAR
CL_EZIP
CL_EGZIP
CL_EBZIP
CL_EOLE2
CL_EMSCOMP
CL_EMSCAB
CL_EACCES
CL_ENULLARG
CL_ETMPFILE
CL_EFSYNC
CL_EMEM
CL_EOPEN
CL_EMALFDB
CL_EPATSHORT
CL_ETMPDIR
CL_ECVD
CL_ECVDEXTR
CL_EMD5
CL_EDSIG
CL_EIO
CL_EFORMAT
CL_ESUPPORT
CL_ELOCKDB
CL_ENCINIT
CL_ENCLOAD
CL_ENCIO
CL_SCAN_RAW
CL_SCAN_ARCHIVE
CL_SCAN_MAIL
CL_SCAN_OLE2
CL_SCAN_BLOCKENCRYPTED
CL_SCAN_HTML
CL_SCAN_PE
CL_SCAN_BLOCKBROKEN
CL_SCAN_MAILURL
CL_SCAN_BLOCKMAX
CL_SCAN_ALGORITHMIC
CL_SCAN_PHISHING_DOMAINLIST
CL_SCAN_PHISHING_BLOCKSSL
CL_SCAN_PHISHING_BLOCKCLOAK
CL_SCAN_ELF
CL_SCAN_STDOPT
CL_RAW
CL_ARCHIVE
CL_MAIL
CL_OLE2
CL_BLOCKENCRYPTED
CL_HTML
CL_PE
CL_BLOCKBROKEN
CL_MAILURL
CL_BLOCKMAX)) {
next if (eval "my \$a = $constname; 1");
if ($@ =~ /^Your vendor has not defined Mail::ClamAV macro $constname/) {
print "# pass: $@";
} else {
print "# fail: $@";
$fail = 1;
}
}
ok($fail == 0, 'Constants');
my $c = new Mail::ClamAV(retdbdir());
$|=1;
$c->buildtrie;
$c->maxreclevel(6);
ok($c->maxreclevel == 6, 'Set/Get maxreclevel');
$c->maxfiles(1001);
ok($c->maxfiles == 1001, 'Set/Get maxfiles');
$c->maxfilesize(1024 * 1028 * 20);
ok(($c->maxfilesize == (1024 * 1028 * 20)), 'Set/Get maxfilesize');
my $f = "t/virus.eml";
my $status = $c->scan($f, CL_SCAN_STDOPT());
ok("$status" eq "Eicar-Test-Signature", 'Scan File');
open my $fh, "<", $f;
ok($c->scan($fh, CL_SCAN_STDOPT())->virus, 'Scan FileHandle');
$status = $c->scan($f, CL_SCAN_STDOPT());
ok("$status" eq "Eicar-Test-Signature", 'Scan File overload');
seek $fh, 0, 0;
$status = $c->scan($fh, CL_SCAN_STDOPT());
ok("$status" eq "Eicar-Test-Signature", 'Scan FileHandle overload');
eval { $status = $c->scan($f.substr($0, 0, 0), CL_SCAN_STDOPT()) };
ok(($@ and $@ =~ /tainted/), 'Scan tainted croaks');
syntax highlighted by Code2HTML, v. 0.9.1