Skip to content
38 changes: 13 additions & 25 deletions t/alpn.t
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,17 @@ use warnings;
use Net::SSLeay;
use Socket;
use IO::Socket::SSL;

do './testlib.pl' || do './t/testlib.pl' || die "no testlib";

use Test::More;

# check if we have ALPN available
# if it is available
if ( ! IO::Socket::SSL->can_alpn ) {
print "1..0 # Skipped: ALPN not available in Net::SSLeay\n";
exit
plan skip_all => "1..0 # Skipped: ALPN not available in Net::SSLeay\n";
}

$|=1;
print "1..5\n";

# first create simple ssl-server
my $ID = 'server';
my $addr = '127.0.0.1';
Expand All @@ -29,10 +28,9 @@ my $server = IO::Socket::SSL->new(
SSL_key_file => 'certs/server-key.pem',
SSL_alpn_protocols => [qw(one two)],
) || do {
ok(0,$!);
exit
plan skip_all => "$!";
};
ok(1,"Server Initialization at $addr");
pass("Server Initialization at $addr");

# add server port to addr
$addr = "$addr:".$server->sockport;
Expand All @@ -51,28 +49,18 @@ if ( !defined $pid ) {
SSL_verify_mode => 0,
SSL_alpn_protocols => [qw(two three)],
) or do {
ok(0, "connect failed: ".IO::Socket::SSL->errstr() );
exit
plan skip_all => "connect failed: ".IO::Socket::SSL->errstr();
};
ok(1,"client connected" );
pass("client connected" );
my $proto = $to_server->alpn_selected;
ok($proto eq 'two',"negotiated $proto");


is($proto, "two","negotiated $proto");
} else { ###### Server

my $to_client = $server->accept or do {
ok(0,"accept failed: ".$server->errstr() );
kill(9,$pid);
exit;
kill(9,$pid);
exit;
};
ok(1,"Server accepted" );
pass("Server accepted" );
my $proto = $to_client->alpn_selected;
ok($proto eq 'two',"negotiated $proto");
is($proto, "two","negotiated $proto");
wait;
}

sub ok {
my $ok = shift;
print $ok ? '' : 'not ', "ok # [$ID] @_\n";
}
55 changes: 24 additions & 31 deletions t/auto_verify_hostname.t
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@ use warnings;
use Net::SSLeay;
use Socket;
use IO::Socket::SSL;
do './testlib.pl' || do './t/testlib.pl' || die "no testlib";
use Test::More;

$|=1;
print "1..30\n";
do './testlib.pl' || do './t/testlib.pl' || die "no testlib";

my $server = IO::Socket::SSL->new(
LocalAddr => '127.0.0.1',
Expand All @@ -20,15 +19,15 @@ my $server = IO::Socket::SSL->new(
SSL_key_file => "certs/server-wildcard.pem",
);
warn "\$!=$!, \$\@=$@, S\$SSL_ERROR=$SSL_ERROR" if ! $server;
print "not ok\n", exit if !$server;
ok("Server Initialization");
ok( $server, "Server Initialization");
exit if !$server;
my $saddr = $server->sockhost.':'.$server->sockport;

defined( my $pid = fork() ) || die $!;
if ( $pid == 0 ) {
while (1) {
my $csock = $server->accept || next;
print $csock "hallo\n";
my $csock = $server->accept || next;
print $csock "hallo\n";
}
}

Expand All @@ -47,47 +46,41 @@ IO::Socket::SSL::default_ca('certs/test-ca.pem');
for( my $i=0;$i<@tests;$i+=3 ) {
my ($name,$scheme,$result) = @tests[$i,$i+1,$i+2];
my $cl = IO::Socket::SSL->new(
PeerAddr => $saddr,
SSL_verify_mode => 1,
SSL_verifycn_scheme => $scheme,
SSL_verifycn_name => $name,
PeerAddr => $saddr,
SSL_verify_mode => 1,
SSL_verifycn_scheme => $scheme,
SSL_verifycn_name => $name,
);
if ( $result eq 'FAIL' ) {
print "not " if $cl;
ok( "connection to $name/$scheme failed" );
ok( !$cl, "connection to $name/$scheme failed" );
} else {
print "not " if !$cl;
ok( "connection to $name/$scheme succeeded" );
ok( $cl, "connection to $name/$scheme succeeded" );
}
$cl || next;
print "not " if <$cl> ne "hallo\n";
ok( "received hallo" );
is( <$cl>, "hallo\n", "received hallo" );
}

for( my $i=0;$i<@tests;$i+=3 ) {
my ($name,$scheme,$result) = @tests[$i,$i+1,$i+2];
my $cl = IO::Socket::INET->new(
PeerAddr => $saddr,
) || print "not ";
ok( "tcp connect" );
PeerAddr => $saddr,
);
ok( $cl, "tcp connect" );
$cl = IO::Socket::SSL->start_SSL( $cl,
SSL_verify_mode => 1,
SSL_verifycn_scheme => $scheme,
SSL_verifycn_name => $name,
);
SSL_verify_mode => 1,
SSL_verifycn_scheme => $scheme,
SSL_verifycn_name => $name,
);
if ( $result eq 'FAIL' ) {
print "not " if $cl;
ok( "ssl upgrade of connection to $name/$scheme failed" );
ok( !$cl, "ssl upgrade of connection to $name/$scheme failed" );
} else {
print "not " if !$cl;
ok( "ssl upgrade of connection to $name/$scheme succeeded" );
ok( $cl, "ssl upgrade of connection to $name/$scheme succeeded" );
}
$cl || next;
print "not " if <$cl> ne "hallo\n";
ok( "received hallo" );
is( <$cl>, "hallo\n", "received hallo" );
}

kill(9,$pid);
wait;

sub ok { print "ok #$_[0]\n"; }
done_testing();
42 changes: 21 additions & 21 deletions t/cert_formats.t
Original file line number Diff line number Diff line change
Expand Up @@ -23,27 +23,27 @@ close($fh);

my @tests = (
'PEM' => {
SSL_cert_file => 'certs/server-cert.pem',
SSL_key_file => 'certs/server-key.pem',
SSL_cert_file => 'certs/server-cert.pem',
SSL_key_file => 'certs/server-key.pem',
},
'PEM_one_file' => {
SSL_cert_file => $pemfile,
SSL_cert_file => $pemfile,
},
'PEM_keyenc' => {
SSL_cert_file => 'certs/server-cert.pem',
SSL_key_file => 'certs/server-key.enc',
SSL_passwd_cb => sub { "bluebell" },
SSL_cert_file => 'certs/server-cert.pem',
SSL_key_file => 'certs/server-key.enc',
SSL_passwd_cb => sub { "bluebell" },
},
'DER' => {
SSL_cert_file => 'certs/server-cert.der',
SSL_key_file => 'certs/server-key.der',
SSL_cert_file => 'certs/server-cert.der',
SSL_key_file => 'certs/server-key.der',
},
'PKCS12' => {
SSL_cert_file => 'certs/server.p12',
SSL_cert_file => 'certs/server.p12',
},
'PKCS12_enc' => {
SSL_cert_file => 'certs/server_enc.p12',
SSL_passwd_cb => sub { "bluebell" },
SSL_cert_file => 'certs/server_enc.p12',
SSL_passwd_cb => sub { "bluebell" },
},
);
plan tests => @tests/2;
Expand All @@ -62,15 +62,15 @@ while (my ($name,$sslargs) = splice(@tests,0,2)) {
}
exit(0);
} else {
# parent = client
my $cl = IO::Socket::INET->new($saddr) or die "connect: $!";
if (!IO::Socket::SSL->start_SSL($cl,
SSL_verify_mode => 0
)) {
fail("[$name] ssl connect failed: $SSL_ERROR");
} else {
pass("[$name] ssl connect sucess");
}
wait;
# parent = client
my $cl = IO::Socket::INET->new($saddr) or die "connect: $!";
if (!IO::Socket::SSL->start_SSL($cl,
SSL_verify_mode => 0
)) {
fail("[$name] ssl connect failed: $SSL_ERROR");
} else {
pass("[$name] ssl connect sucess");
}
wait;
}
}
37 changes: 16 additions & 21 deletions t/cert_no_file.t
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,12 @@ use warnings;
use Net::SSLeay;
use Socket;
use IO::Socket::SSL;

do './testlib.pl' || do './t/testlib.pl' || die "no testlib";

$|=1;
print "1..9\n";
use Test::More tests => 9;
Test::More->builder->use_numbers(0);
Test::More->builder->no_ending(1);

my $ID = 'server';
my %server_args = (
Expand Down Expand Up @@ -55,12 +57,12 @@ foreach my $test ( 1,2,3 ) {

# create server
my $server = IO::Socket::SSL->new( %args ) || do {
notok( "$spec: $!" );
fail( "$spec: $!" );
next;
};

my $saddr = $server->sockhost.':'.$server->sockport;
ok("Server Initialization $spec");
pass("Server Initialization $spec");
push @server,$server;

# then connect to it from a child
Expand All @@ -74,36 +76,29 @@ foreach my $test ( 1,2,3 ) {
SSL_verify_mode => 0x00,
);
if ( $test == 3 ) {
notok( "$spec: connect succeeded" ) if $to_server;
ok( "$spec: connect failed" );
exit;
ok( !$to_server, "$spec: connect succeeded" );
exit;
} elsif ( ! $to_server ) {
notok( "connect failed: $!" );
exit
plan skip_all => "connect failed: $!";
};
ok( "client connected $spec" );
pass( "client connected $spec" );
<$to_server>; # wait for close from parent
exit;
}

my $to_client = $server->accept;
if ( $test == 3 ) {
notok( "$spec: accept succeeded" ) if $to_client;
ok( "$spec: accept failed" );
ok( !$to_client, "$spec: accept succeeded" );
} elsif ( ! $to_client ) {
notok( "$spec: accept failed: $!" );
kill(9,$pid);
kill(9,$pid);
plan skip_all => "$spec: accept failed: $!";
} else {
ok( "Server accepted $spec" );
# save the X509 certificate from the server
$x509 ||= Net::SSLeay::get_certificate($to_client->_get_ssl_object);
pass( "Server accepted $spec" );
# save the X509 certificate from the server
$x509 ||= Net::SSLeay::get_certificate($to_client->_get_ssl_object);
}

close($to_client) if $to_client;
wait;
}



sub ok { print "ok # [$ID] @_\n"; }
sub notok { print "not ok # [$ID] @_\n"; }
Loading