From d901e7842e13ff5dbf316eb79961732b607ebb1c Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 23 Sep 2015 02:21:24 +0000 Subject: nntp: support HDR command from RFC 3977 This is similar to XHDR, but differs in how it handles Message-ID lookups. --- t/nntpd.t | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 't') diff --git a/t/nntpd.t b/t/nntpd.t index 28d84910..04444e48 100644 --- a/t/nntpd.t +++ b/t/nntpd.t @@ -59,7 +59,7 @@ To: You Cc: $addr Message-Id: Subject: hihi -Date: Thu, 01 Jan 1970 00:00:00 +0000 +Date: Thu, 01 Jan 1970 06:06:06 +0000 nntp EOF @@ -96,21 +96,44 @@ EOF is_deeply($list, { $group => [ qw(1 1 n) ] }, 'LIST works'); is_deeply([$n->group($group)], [ qw(0 1 1), $group ], 'GROUP works'); + %opts = ( + PeerAddr => $host_port, + Proto => 'tcp', + Type => SOCK_STREAM, + Timeout => 1, + ); my $mid = ''; my %xhdr = ( 'message-id' => $mid, 'subject' => 'hihi', - 'date' => 'Thu, 01 Jan 1970 00:00:00 +0000', + 'date' => 'Thu, 01 Jan 1970 06:06:06 +0000', 'from' => 'Me ', 'to' => 'You ', 'cc' => $addr, 'xref' => "example.com $group:1" ); + + my $s = IO::Socket::INET->new(%opts); + sysread($s, my $buf, 4096); + is($buf, "201 server ready - post via email\r\n", 'got greeting'); + $s->autoflush(1); + while (my ($k, $v) = each %xhdr) { is_deeply($n->xhdr("$k $mid"), { $mid => $v }, - "$k by message-id works"); + "XHDR $k by message-id works"); is_deeply($n->xhdr("$k 1"), { 1 => $v }, "$k by article number works"); + is_deeply($n->xhdr("$k 1-"), { 1 => $v }, + "$k by article range works"); + next; + $buf = ''; + syswrite($s, "HDR $k $mid\r\n"); + do { + sysread($s, $buf, 4096, length($buf)); + } until ($buf =~ /^[^2]../ || $buf =~ /\r\n\.\r\n\z/); + my @r = split("\r\n", $buf); + like($r[0], qr/\A224 /, '224 response for HDR'); + is($r[1], "0 $v", 'got expected response for HDR'); } { -- cgit v1.2.3-24-ge0c7