diff options
author | Richard Levitte <levitte@openssl.org> | 2016-01-26 02:09:33 +0100 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2016-01-26 09:53:36 +0100 |
commit | 96d2d7bc71a8413f23ff9fc88f600acc4c340a9b (patch) | |
tree | 82a623cdee2ea7a063b785c0d6f51ac8ed1a01aa /test/testlib | |
parent | 36b82b346454b4d0d0c4c19e0e9ca9e888f23a3e (diff) |
Use Configure's @disablables and %disabled through configdata.pm
Enhances the routines in OpenSSL::Test::Utils for checking disabled
stuff to get their information directly from Configure instead of
'openssl list -disabled'.
Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
Diffstat (limited to 'test/testlib')
-rw-r--r-- | test/testlib/OpenSSL/Test/Utils.pm | 121 |
1 files changed, 87 insertions, 34 deletions
diff --git a/test/testlib/OpenSSL/Test/Utils.pm b/test/testlib/OpenSSL/Test/Utils.pm index eed44244b8..c0248322a7 100644 --- a/test/testlib/OpenSSL/Test/Utils.pm +++ b/test/testlib/OpenSSL/Test/Utils.pm @@ -7,7 +7,7 @@ use Exporter; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); $VERSION = "0.1"; @ISA = qw(Exporter); -@EXPORT = qw(disabled config); +@EXPORT = qw(alldisabled anydisabled disabled config available_protocols); =head1 NAME @@ -17,9 +17,12 @@ OpenSSL::Test::Utils - test utility functions use OpenSSL::Test::Utils; - disabled("dh"); + my @tls = available_protocols("tls"); + my @dtls = available_protocols("dtls"); + alldisabled("dh", "dsa"); + anydisabled("dh", "dsa"); - config("no_shared"); + config("fips"); =head1 DESCRIPTION @@ -31,13 +34,23 @@ use OpenSSL::Test qw/:DEFAULT top_file/; =over 4 -=item B<disabled ARRAY> +=item B<available_protocols STRING> -In a scalar context returns 1 if any of the features in ARRAY is disabled. +Returns a list of strings for all the available SSL/TLS versions if +STRING is "tls", or for all the available DTLS versions if STRING is +"dtls". Otherwise, it returns the empty list. The strings in the +returned list can be used with B<alldisabled> and B<anydisabled>. + +=item B<alldisabled ARRAY> +=item B<anydisabled ARRAY> In an array context returns an array with each element set to 1 if the corresponding feature is disabled and 0 otherwise. +In a scalar context, alldisabled returns 1 if all of the features in +ARRAY are disabled, while anydisabled returns 1 if any of them are +disabled. + =item B<config STRING> Returns an item from the %config hash in \$TOP/configdata.pm. @@ -46,45 +59,85 @@ Returns an item from the %config hash in \$TOP/configdata.pm. =cut +our %available_protocols; our %disabled; -my $disabled_set = 0; +our %config; +my $configdata_loaded = 0; + +sub load_configdata { + # We eval it so it doesn't run at compile time of this file. + # The latter would have top_dir() complain that setup() hasn't + # been run yet. + my $configdata = top_file("configdata.pm"); + eval { require $configdata; + %available_protocols = %configdata::available_protocols; + %disabled = %configdata::disabled; + %config = %configdata::config; + }; + $configdata_loaded = 1; +} + +# args +# list of 1s and 0s, coming from check_disabled() +sub anyof { + my $x = 0; + foreach (@_) { $x += $_ } + return $x > 0; +} +# args +# list of 1s and 0s, coming from check_disabled() +sub allof { + my $x = 1; + foreach (@_) { $x *= $_ } + return $x > 0; +} + +# args +# list of strings, all of them should be names of features +# that can be disabled. +# returns a list of 1s (if the corresponding feature is disabled) +# and 0s (if it isn't) sub check_disabled { -#print STDERR "Running check_disabled\n"; - foreach (run(app(["openssl", "list", "-disabled"]), capture => 1)) { - s/\R//; # chomp; - next if /:/; # skip header - $disabled{lc $_} = 1; - } - $disabled_set = 1; + return map { exists $disabled{lc $_} ? 1 : 0 } @_; +} + +# Exported functions ################################################# + +# args: +# list of features to check +sub anydisabled { + load_configdata() unless $configdata_loaded; + my @ret = check_disabled(@_); + return @ret if wantarray; + return anyof(@ret); } # args: # list of features to check +sub alldisabled { + load_configdata() unless $configdata_loaded; + my @ret = check_disabled(@_); + return @ret if wantarray; + return allof(@ret); +} + +#!!! Kept for backward compatibility +# args: +# single string sub disabled { - check_disabled() unless $disabled_set; - if (wantarray) { - my @ret; - foreach (@_) { - push @ret, exists $disabled{lc $_} ? 1 : 0; - } - return @ret; - } - foreach (@_) { - return 1 if exists $disabled{lc $_}; + anydisabled(@_); +} + +sub available_protocols { + my $protocol_class = shift; + if (exists $available_protocols{lc $protocol_class}) { + return @{$available_protocols{lc $protocol_class}} } - return 0; + return (); } -our %config; sub config { - if (!%config) { - # We eval it so it doesn't run at compile time of this file. - # The latter would have top_dir() complain that setup() hasn't - # been run yet. - my $configdata = top_file("configdata.pm"); - eval { require $configdata; %config = %configdata::config }; - } return $config{$_[0]}; } @@ -94,8 +147,8 @@ L<OpenSSL::Test> =head1 AUTHORS -Stephen Henson E<lt>steve@openssl.orgE<gt> with inspiration -from Richard Levitte E<lt>levitte@openssl.orgE<gt> +Stephen Henson E<lt>steve@openssl.orgE<gt> and +Richard Levitte E<lt>levitte@openssl.orgE<gt> =cut |