xref: /openbsd-src/gnu/usr.bin/perl/cpan/libnet/t/nntp_ipv6.t (revision eac174f2741a08d8deb8aae59a7f778ef9b5d770)
1b8851fccSafresh1#!perl
2b8851fccSafresh1
3b8851fccSafresh1use 5.008001;
4b8851fccSafresh1
5b8851fccSafresh1use strict;
6b8851fccSafresh1use warnings;
7b8851fccSafresh1
8*eac174f2Safresh1use Test::More;
9*eac174f2Safresh1
10*eac174f2Safresh1BEGIN {
11*eac174f2Safresh1    if (!eval { require Socket }) {
12*eac174f2Safresh1        plan skip_all => "no Socket";
13*eac174f2Safresh1    }
14*eac174f2Safresh1    elsif (ord('A') == 193 && !eval { require Convert::EBCDIC }) {
15*eac174f2Safresh1        plan skip_all => "EBCDIC but no Convert::EBCDIC";
16*eac174f2Safresh1    }
17*eac174f2Safresh1}
18*eac174f2Safresh1
19b8851fccSafresh1use Config;
20b8851fccSafresh1use File::Temp 'tempfile';
21b8851fccSafresh1use Net::NNTP;
22b8851fccSafresh1
23b8851fccSafresh1my $debug = 0; # Net::NNTP->new( Debug => .. )
24b8851fccSafresh1
25b8851fccSafresh1my $inet6class = Net::NNTP->can_inet6;
26b8851fccSafresh1plan skip_all => "no IPv6 support found in Net::NNTP" if ! $inet6class;
27b8851fccSafresh1
28b8851fccSafresh1plan skip_all => "fork not supported on this platform"
29b8851fccSafresh1  unless $Config::Config{d_fork} || $Config::Config{d_pseudofork} ||
30b8851fccSafresh1    (($^O eq 'MSWin32' || $^O eq 'NetWare') and
31b8851fccSafresh1     $Config::Config{useithreads} and
32b8851fccSafresh1     $Config::Config{ccflags} =~ /-DPERL_IMPLICIT_SYS/);
33b8851fccSafresh1
34b8851fccSafresh1my $srv = $inet6class->new(
35b8851fccSafresh1  LocalAddr => '::1',
36b8851fccSafresh1  Listen => 10
37b8851fccSafresh1);
38b8851fccSafresh1plan skip_all => "cannot create listener on ::1: $!" if ! $srv;
39b8851fccSafresh1my $host = $srv->sockhost;
40b8851fccSafresh1my $port = $srv->sockport;
41b8851fccSafresh1note("server on $host port $port");
42b8851fccSafresh1
43b8851fccSafresh1plan tests => 1;
44b8851fccSafresh1
45b8851fccSafresh1defined( my $pid = fork()) or die "fork failed: $!";
46b8851fccSafresh1exit(nntp_server()) if ! $pid;
47b8851fccSafresh1
48b8851fccSafresh1my $cl = Net::NNTP->new(Host => $host, Port => $port,, Debug => $debug);
49b8851fccSafresh1note("created Net::NNTP object");
50b8851fccSafresh1if (!$cl) {
51b8851fccSafresh1  fail("IPv6 NNTP connect failed");
52b8851fccSafresh1} else {
53b8851fccSafresh1  $cl->quit;
54b8851fccSafresh1  pass("IPv6 success");
55b8851fccSafresh1}
56b8851fccSafresh1wait;
57b8851fccSafresh1
58b8851fccSafresh1sub nntp_server {
59b8851fccSafresh1  my $ssl = shift;
60b8851fccSafresh1  my $cl = $srv->accept or die "accept failed: $!";
61b8851fccSafresh1  print $cl "200 nntp.example.com\r\n";
62b8851fccSafresh1  while (<$cl>) {
63b8851fccSafresh1    my ($cmd,$arg) = m{^(\S+)(?: +(.*))?\r\n} or die $_;
64b8851fccSafresh1    $cmd = uc($cmd);
65b8851fccSafresh1    if ($cmd eq 'QUIT' ) {
66b8851fccSafresh1      print $cl "205 bye\r\n";
67b8851fccSafresh1      last;
68b8851fccSafresh1    } elsif ( $cmd eq 'MODE' ) {
69b8851fccSafresh1      print $cl "201 Posting denied\r\n";
70b8851fccSafresh1    } else {
71b8851fccSafresh1      diag("received unknown command: $cmd");
72b8851fccSafresh1      print "500 unknown cmd\r\n";
73b8851fccSafresh1    }
74b8851fccSafresh1  }
75b8851fccSafresh1  note("NNTP dialog done");
765759b3d2Safresh1  return 0;
77b8851fccSafresh1}
78