-# Copyright (C) 2015-2018 all contributors <meta@public-inbox.org>
+# Copyright (C) 2015-2019 all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
use Fcntl qw(FD_CLOEXEC F_SETFD F_GETFD);
use POSIX qw(dup2);
use strict;
use warnings;
+use IO::Socket::INET;
sub stream_to_string {
my ($res) = @_;
$s;
}
+sub tcp_connect {
+ my ($dest, %opt) = @_;
+ my $s = IO::Socket::INET->new(
+ Proto => 'tcp',
+ Type => Socket::SOCK_STREAM(),
+ PeerAddr => $dest->sockhost . ':' . $dest->sockport,
+ %opt,
+ );
+ $s->autoflush(1);
+ $s;
+}
+
sub spawn_listener {
my ($env, $cmd, $socks) = @_;
my $pid = fork;
use warnings;
use Test::More;
use File::Temp qw/tempdir/;
-use IO::Socket::INET;
use POSIX qw(setsid);
my $git_dir = $ENV{GIANT_GIT_DIR};
}
sub conn_for {
- my ($sock, $msg) = @_;
- my $conn = IO::Socket::INET->new(
- PeerAddr => $sock->sockhost,
- PeerPort => $sock->sockport,
- Proto => 'tcp',
- Type => SOCK_STREAM);
+ my ($dest, $msg) = @_;
+ my $conn = tcp_connect($dest);
ok($conn, "connected for $msg");
- $conn->autoflush(1);
setsockopt($conn, IPPROTO_TCP, TCP_NODELAY, 1);
return $conn;
}
}
};
my $https_addr = $https->sockhost . ':' . $https->sockport;
-my %opt = ( Proto => 'tcp', PeerAddr => $https_addr, Type => SOCK_STREAM );
for my $args (
[ "-lhttps://$https_addr/?key=$key,cert=$cert" ],
SSL_ca_file => 'certs/test-ca.pem',
);
# start negotiating a slow TLS connection
- my $slow = IO::Socket::INET->new(%opt, Blocking => 0);
+ my $slow = tcp_connect($https, Blocking => 0);
$slow = IO::Socket::SSL->start_SSL($slow, SSL_startHandshake => 0, %o);
my @poll = (fileno($slow));
my $slow_done = $slow->connect_SSL;
}
# normal HTTPS
- my $c = IO::Socket::INET->new(%opt);
+ my $c = tcp_connect($https);
IO::Socket::SSL->start_SSL($c, %o);
ok($c->print("GET /empty HTTP/1.1\r\n\r\nHost: example.com\r\n\r\n"),
'wrote HTTP request');
like($buf, qr!\AHTTP/1\.1 200!, 'read HTTP response');
# HTTPS with bad hostname
- $c = IO::Socket::INET->new(%opt);
+ $c = tcp_connect($https);
$o{SSL_hostname} = $o{SSL_verifycn_name} = 'server.fail';
$c = IO::Socket::SSL->start_SSL($c, %o);
is($c, undef, 'HTTPS fails with bad hostname');
$o{SSL_hostname} = $o{SSL_verifycn_name} = 'server.local';
- $c = IO::Socket::INET->new(%opt);
+ $c = tcp_connect($https);
IO::Socket::SSL->start_SSL($c, %o);
ok($c, 'HTTPS succeeds again with valid hostname');
plan skip_all => "$mod missing for httpd.t" if $@;
}
use File::Temp qw/tempdir/;
-use IO::Socket::INET;
-use Socket qw(IPPROTO_TCP);
+use Socket qw(IPPROTO_TCP SOL_SOCKET);
require './t/common.perl';
# FIXME: too much setup
$pid = spawn_listener(undef, $cmd, [$sock]);
my $host = $sock->sockhost;
my $port = $sock->sockport;
- my $conn = IO::Socket::INET->new(PeerAddr => $host,
- PeerPort => $port,
- Proto => 'tcp',
- Type => SOCK_STREAM);
+ my $conn = tcp_connect($sock);
ok($conn, 'connected');
ok($conn->write("GET / HTTP/1.0\r\n\r\n"), 'wrote data to socket');
{
my $expect = { $group => [qw(1 1 n)] };
# start negotiating a slow TLS connection
- my $slow = IO::Socket::INET->new(
- Proto => 'tcp',
- PeerAddr => $nntps_addr,
- Type => SOCK_STREAM,
- Blocking => 0,
- );
+ my $slow = tcp_connect($nntps, Blocking => 0);
$slow = IO::Socket::SSL->start_SSL($slow, SSL_startHandshake => 0, %o);
my $slow_done = $slow->connect_SSL;
diag('W: connect_SSL early OK, slow client test invalid') if $slow_done;
is($n->code, 580, 'got 580 code on server w/o TLS');
};
- %opts = (
- PeerAddr => $host_port,
- Proto => 'tcp',
- Type => SOCK_STREAM,
- Timeout => 1,
- );
my $mid = '<nntp@example.com>';
my %xhdr = (
'message-id' => $mid,
'references' => '<reftabsqueezed>',
);
- my $s = IO::Socket::INET->new(%opts);
+ my $s = tcp_connect($sock);
sysread($s, my $buf, 4096);
is($buf, "201 " . hostname . " ready - post via email\r\n",
'got greeting');
- $s->autoflush(1);
ok(syswrite($s, " \r\n"), 'wrote spaces');
ok(syswrite($s, "\r\n"), 'wrote nothing');
syswrite($s, "NEWGROUPS\t19990424 000000 \033GMT\007\r\n");
is(0, sysread($s, $buf, 4096), 'GOT EOF on cntrl');
- $s = IO::Socket::INET->new(%opts);
+ $s = tcp_connect($sock);
sysread($s, $buf, 4096);
is($buf, "201 " . hostname . " ready - post via email\r\n",
'got greeting');
- $s->autoflush(1);
syswrite($s, "CAPABILITIES\r\n");
$buf = read_til_dot($s);
{
use Net::NNTP;
- use IO::Socket::INET;
my $err = "$mainrepo/stderr.log";
my $out = "$mainrepo/stdout.log";
my $group = 'inbox.comp.test.v2writable';
my $cfgfile = "$tmpdir/config";
my $v2 = "$tmpdir/v2";
my $httpd = 'blib/script/public-inbox-httpd';
- use IO::Socket::INET;
my $sock = tcp_server();
ok($sock, 'sock created');
my ($host, $port) = ($sock->sockhost, $sock->sockport);