1#! /usr/bin/env perl 2# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. 3# 4# Licensed under the Apache License 2.0 (the "License"). You may not use 5# this file except in compliance with the License. You can obtain a copy 6# in the file LICENSE in the source distribution or at 7# https://www.openssl.org/source/license.html 8 9use strict; 10use warnings; 11 12use OpenSSL::Test qw(:DEFAULT bldtop_dir srctop_file srctop_dir bldtop_file); 13use OpenSSL::Test::Utils; 14 15BEGIN { 16setup("test_evp_fetch_prov"); 17} 18 19use lib srctop_dir('Configurations'); 20use lib bldtop_dir('.'); 21 22my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0); 23 24my @types = ( "digest", "cipher" ); 25 26my @testdata = ( 27 { config => srctop_file("test", "default.cnf"), 28 providers => [ 'default' ], 29 tests => [ { providers => [] }, 30 { }, 31 { args => [ '-property', 'provider=default' ], 32 message => 'using property "provider=default"' }, 33 { args => [ '-property', 'provider!=fips' ], 34 message => 'using property "provider!=fips"' }, 35 { args => [ '-property', 'provider!=default', '-fetchfail' ], 36 message => 37 'using property "provider!=default" is expected to fail' }, 38 { args => [ '-property', 'provider=fips', '-fetchfail' ], 39 message => 40 'using property "provider=fips" is expected to fail' } ] } 41); 42 43unless ($no_fips) { 44 push @testdata, ( 45 { config => srctop_file("test", "fips.cnf"), 46 providers => [ 'fips' ], 47 tests => [ 48 { args => [ '-property', '' ] }, 49 { args => [ '-property', 'provider=fips' ], 50 message => 'using property "provider=fips"' }, 51 { args => [ '-property', 'provider!=default' ], 52 message => 'using property "provider!=default"' }, 53 { args => [ '-property', 'provider=default', '-fetchfail' ], 54 message => 55 'using property "provider=default" is expected to fail' }, 56 { args => [ '-property', 'provider!=fips', '-fetchfail' ], 57 message => 58 'using property "provider!=fips" is expected to fail' }, 59 { args => [ '-property', 'fips=yes' ], 60 message => 'using property "fips=yes"' }, 61 { args => [ '-property', 'fips!=no' ], 62 message => 'using property "fips!=no"' }, 63 { args => [ '-property', '-fips' ], 64 message => 'using property "-fips"' }, 65 { args => [ '-property', 'fips=no', '-fetchfail' ], 66 message => 'using property "fips=no is expected to fail"' }, 67 { args => [ '-property', 'fips!=yes', '-fetchfail' ], 68 message => 'using property "fips!=yes is expected to fail"' } ] }, 69 { config => srctop_file("test", "default-and-fips.cnf"), 70 providers => [ 'default', 'fips' ], 71 tests => [ 72 { args => [ '-property', '' ] }, 73 { args => [ '-property', 'provider!=default' ], 74 message => 'using property "provider!=default"' }, 75 { args => [ '-property', 'provider=default' ], 76 message => 'using property "provider=default"' }, 77 { args => [ '-property', 'provider!=fips' ], 78 message => 'using property "provider!=fips"' }, 79 { args => [ '-property', 'provider=fips' ], 80 message => 'using property "provider=fips"' }, 81 { args => [ '-property', 'fips=yes' ], 82 message => 'using property "fips=yes"' }, 83 { args => [ '-property', 'fips!=no' ], 84 message => 'using property "fips!=no"' }, 85 { args => [ '-property', '-fips' ], 86 message => 'using property "-fips"' }, 87 { args => [ '-property', 'fips=no' ], 88 message => 'using property "fips=no"' }, 89 { args => [ '-property', 'fips!=yes' ], 90 message => 'using property "fips!=yes"' } ] }, 91 ); 92} 93 94my $testcount = 0; 95foreach (@testdata) { 96 $testcount += scalar @{$_->{tests}}; 97} 98 99plan tests => 1 + $testcount * scalar(@types); 100 101ok(run(test(["evp_fetch_prov_test", "-defaultctx"])), 102 "running evp_fetch_prov_test using the default libctx"); 103 104foreach my $alg (@types) { 105 foreach my $testcase (@testdata) { 106 $ENV{OPENSSL_CONF} = ""; 107 foreach my $test (@{$testcase->{tests}}) { 108 my @testproviders = 109 @{ $test->{providers} // $testcase->{providers} }; 110 my $testprovstr = @testproviders 111 ? ' and loaded providers ' . join(' & ', 112 map { "'$_'" } @testproviders) 113 : ''; 114 my @testargs = @{ $test->{args} // [] }; 115 my $testmsg = 116 defined $test->{message} ? ' '.$test->{message} : ''; 117 118 my $message = 119 "running evp_fetch_prov_test with $alg$testprovstr$testmsg"; 120 121 ok(run(test(["evp_fetch_prov_test", "-type", "$alg", 122 "-config", "$testcase->{config}", 123 @testargs, @testproviders])), 124 $message); 125 } 126 } 127} 128