#!/usr/bin/perl -T
use
SATest; sa_t_init(
"spamd_protocol_10"
);
plan
skip_all
=>
"Spamd tests disabled"
if
$SKIP_SPAMD_TESTS
;
plan
tests
=> 10;
%patterns
= (
qr/^SPAMD\/
1.1 0 EX_OK/m,
'response-11'
,
'Spam: True ;'
,
'spamheader'
,
'GTUBE'
,
'gtube'
,
);
start_spamd(
"-L"
);
my
$data
=
""
;
open
(GTUBE,
"data/spam/gtube.eml"
) ||
die
$!;
foreach
(<GTUBE>) {
s/\r?\n?$/\n/;
print
"GTUBE: $_"
;
$data
.=
$_
;
}
close
(GTUBE);
my
$out
;
for
(
$p
= 0;
$p
<= 1;
$p
++) {
$out
= run_symbols (
$data
,
$p
);
ok (
defined
(
$out
));
if
(
$out
=~ /Spam: True \; ([\d\.]+) \/ 5\.0/) {
ok ($1 >= 980 && $1 < 1020);
}
patterns_run_cb (
$out
);
ok_all_patterns();
clear_pattern_counters();
}
stop_spamd();
exit
;
sub
run_symbols {
my
(
$data
,
$proto10
) =
@_
;
my
$use_inet4
=
!
$have_inet6
||
(
$have_inet4
&&
$spamdhost
=~ /^\d+\.\d+\.\d+\.\d+\z/);
my
%args
= (
PeerAddr
=>
$spamdhost
,
PeerPort
=>
$spamdport
,
Proto
=>
"tcp"
,
Type
=> SOCK_STREAM
);
$socket
=
$use_inet4
? IO::Socket::INET->new(
%args
)
: IO::Socket::INET6->new(
%args
);
unless
(
$socket
) {
warn
(
"FAILED - Couldn't Connect to SpamCheck Host\n"
);
return
undef
;
}
if
(
$proto10
) {
sockwrite (
"SYMBOLS SPAMC/1.0\r\n"
);
}
else
{
sockwrite (
"SYMBOLS SPAMC/1.2\r\n"
);
sockwrite (
"Content-Length: "
.
length
(
$data
) .
"\r\n"
);
sockwrite (
"\r\n"
);
}
sockwrite (
$data
);
shutdown
(
$socket
, 1);
$data
=
""
;
while
(<
$socket
>) {
s/\r?\n?$/\n/;
print
"READ: $_"
;
$data
.=
$_
;
}
$socket
=
undef
;
return
$data
;
}
sub
sockwrite {
my
$data
=
shift
;
print
$socket
$data
;
$data
=~ s/^/WRITE: /mg;
print
$data
;
}