diff options
-rw-r--r-- | test/recipes/80-test_ssl.t | 20 | ||||
-rw-r--r-- | test/testlib/OpenSSL/Test/Utils.pm | 78 |
2 files changed, 91 insertions, 7 deletions
diff --git a/test/recipes/80-test_ssl.t b/test/recipes/80-test_ssl.t index 32616f0195..e84d3cce54 100644 --- a/test/recipes/80-test_ssl.t +++ b/test/recipes/80-test_ssl.t @@ -431,12 +431,20 @@ sub testssl { ok(run(test([@ssltest, "-bio_pair", "-server_auth", "-client_auth", "-app_verify", @CA, @extra])), 'test sslv2/sslv3 with both client and server authentication via BIO pair and app verify'); - ok(run(test([@ssltest, "-ipv4", @extra])), - 'test TLS via IPv4'); - ok(run(test([@ssltest, "-ipv6", @extra])), - 'test TLS via IPv6'); - - } + SKIP: { + skip "No IPv4 available on this machine", 1 + unless have_IPv4(); + ok(run(test([@ssltest, "-ipv4", @extra])), + 'test TLS via IPv4'); + } + + SKIP: { + skip "No IPv6 available on this machine", 1 + unless have_IPv6(); + ok(run(test([@ssltest, "-ipv6", @extra])), + 'test TLS via IPv6'); + } + } }; subtest "Testing ciphersuites" => sub { diff --git a/test/testlib/OpenSSL/Test/Utils.pm b/test/testlib/OpenSSL/Test/Utils.pm index 8f75013a6c..2b2cfcd0a8 100644 --- a/test/testlib/OpenSSL/Test/Utils.pm +++ b/test/testlib/OpenSSL/Test/Utils.pm @@ -7,7 +7,8 @@ use Exporter; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); $VERSION = "0.1"; @ISA = qw(Exporter); -@EXPORT = qw(alldisabled anydisabled disabled config available_protocols); +@EXPORT = qw(alldisabled anydisabled disabled config available_protocols + have_IPv4 have_IPv6); =head1 NAME @@ -24,6 +25,9 @@ OpenSSL::Test::Utils - test utility functions config("fips"); + have_IPv4(); + have_IPv6(); + =head1 DESCRIPTION This module provides utility functions for the testing framework. @@ -55,6 +59,11 @@ disabled. Returns an item from the %config hash in \$TOP/configdata.pm. +=item B<have_IPv4> +=item B<have_IPv6> + +Return true if IPv4 / IPv6 is possible to use on the current system. + =back =cut @@ -142,6 +151,73 @@ sub config { return $config{$_[0]}; } +# IPv4 / IPv6 checker +my $have_IPv4 = -1; +my $have_IPv6 = 1; +my $IP_factory; +sub check_IP { + my $listenaddress = shift; + + eval { + require IO::Socket::IP; + my $s = IO::Socket::IP->new( + LocalAddr => $listenaddress, + LocalPort => 0, + Listen=>1, + ); + $s or die "\n"; + $s->close(); + }; + if ($@ eq "") { + return 1; + } + + eval { + require IO::Socket::INET6; + my $s = IO::Socket::INET6->new( + LocalAddr => $listenaddress, + LocalPort => 0, + Listen=>1, + ); + $s or die "\n"; + $s->close(); + }; + if ($@ eq "") { + return 1; + } + + eval { + require IO::Socket::INET; + my $s = IO::Socket::INET->new( + LocalAddr => $listenaddress, + LocalPort => 0, + Listen=>1, + ); + $s or die "\n"; + $s->close(); + }; + if ($@ eq "") { + return 1; + } + + return 0; +} + +sub have_IPv4 { + if ($have_IPv4 < 0) { + $have_IPv4 = check_IP("127.0.0.1"); + } + return $have_IPv4; +} + +sub have_IPv6 { + if ($have_IPv6 < 0) { + $have_IPv6 = check_IP("::1"); + } + return $have_IPv6; +} + + =head1 SEE ALSO L<OpenSSL::Test> |