use Socket qw(IPPROTO_TCP TCP_NODELAY);
use Net::NNTP;
use Sys::Hostname;
+use POSIX qw(_exit);
+use Digest::SHA;
# FIXME: make easier to test both versions
my $version = $ENV{PI_TEST_VERSION} || 1;
# pipelined requests:
{
my $nreq = 90;
+ my $nart = 2;
syswrite($s, "GROUP $group\r\n");
my $res = <$s>;
my $rdr = fork;
if ($rdr == 0) {
- use POSIX qw(_exit);
for (1..$nreq) {
<$s> =~ /\A224 / or _exit(1);
<$s> =~ /\A1/ or _exit(2);
<$s> eq ".\r\n" or _exit(3);
}
+ my %sums;
+ for (1..$nart) {
+ <$s> =~ /\A220 / or _exit(4);
+ my $dig = Digest::SHA->new(1);
+ while (my $l = <$s>) {
+ last if $l eq ".\r\n";
+ $dig->add($l);
+ }
+ $dig = $dig->hexdigest;
+ $sums{$dig}++;
+ }
+ if ($nart) {
+ scalar(keys(%sums)) == 1 or _exit(5);
+ (values(%sums))[0] == $nart or _exit(6);
+ }
_exit(0);
}
for (1..$nreq) {
syswrite($s, "XOVER 1\r\n");
}
+ syswrite($s, "ARTICLE 1\r\n" x $nart);
is($rdr, waitpid($rdr, 0), 'reader done');
is($? >> 8, 0, 'no errors');
}
my @xap = grep m!Search/Xapian!, @of;
is_deeply(\@xap, [], 'Xapian not loaded in nntpd');
}
- {
- setsockopt($s, IPPROTO_TCP, TCP_NODELAY, 1);
- syswrite($s, 'HDR List-id 1-');
- select(undef, undef, undef, 0.15);
- ok($td->kill, 'killed nntpd');
- select(undef, undef, undef, 0.15);
- syswrite($s, "\r\n");
- $buf = '';
- do {
- sysread($s, $buf, 4096, length($buf));
- } until ($buf =~ /\r\n\z/);
- my @r = split("\r\n", $buf);
- like($r[0], qr/^5\d\d /,
- 'got 5xx response for unoptimized HDR');
- is(scalar @r, 1, 'only one response line');
- }
-
# -compact requires Xapian
SKIP: {
require_mods('Search::Xapian', 2);
my @of = xqx([$lsof, '-p', $td->{pid}], undef, $noerr);
is(scalar(grep(/\(deleted\)/, @of)), 0, 'no deleted files');
};
-
+ {
+ setsockopt($s, IPPROTO_TCP, TCP_NODELAY, 1);
+ syswrite($s, 'HDR List-id 1-');
+ select(undef, undef, undef, 0.15);
+ ok($td->kill, 'killed nntpd');
+ select(undef, undef, undef, 0.15);
+ syswrite($s, "\r\n");
+ $buf = '';
+ do {
+ sysread($s, $buf, 4096, length($buf));
+ } until ($buf =~ /\r\n\z/);
+ my @r = split("\r\n", $buf);
+ like($r[0], qr/^5\d\d /,
+ 'got 5xx response for unoptimized HDR');
+ is(scalar @r, 1, 'only one response line');
+ }
$n = $s = undef;
$td->join;
is($?, 0, 'no error in exited process');