X-Git-Url: https://git.openssl.org/?a=blobdiff_plain;f=test%2Frecipes%2F90-test_shlibload.t;h=1f097edaf65103eaff06999f6200cf13935d2fe0;hb=9afc2b92fe6725336f9c7d917deb5ca8c5e4011b;hp=2761d58502ba764b3e1e912628b4c5d7a13eadea;hpb=18289399743da6c3db462f37fc8797738e8acf7c;p=openssl.git diff --git a/test/recipes/90-test_shlibload.t b/test/recipes/90-test_shlibload.t index 2761d58502..1f097edaf6 100644 --- a/test/recipes/90-test_shlibload.t +++ b/test/recipes/90-test_shlibload.t @@ -1,52 +1,63 @@ #! /usr/bin/env perl # Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use +# Licensed under the Apache License 2.0 (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy # in the file LICENSE in the source distribution or at # https://www.openssl.org/source/license.html -use OpenSSL::Test qw/:DEFAULT bldtop_dir bldtop_file/; +use OpenSSL::Test qw/:DEFAULT srctop_dir bldtop_dir/; use OpenSSL::Test::Utils; +use File::Temp qw(tempfile); #Load configdata.pm BEGIN { setup("test_shlibload"); } +use lib srctop_dir('Configurations'); use lib bldtop_dir('.'); -use configdata; +use platform; plan skip_all => "Test only supported in a shared build" if disabled("shared"); plan skip_all => "Test is disabled on AIX" if config('target') =~ m|^aix|; -plan tests => 4; - -# When libssl and libcrypto are compiled on Linux with "-rpath", but not -# "--enable-new-dtags", the RPATH takes precedence over LD_LIBRARY_PATH, -# and we end up running with the wrong libraries. This is resolved by -# using paths to the shared objects, not just the names. - -my $libcrypto = bldtop_file(shlib('libcrypto')); -my $libssl = bldtop_file(shlib('libssl')); - -ok(run(test(["shlibloadtest", "-crypto_first", $libcrypto, $libssl])), - "running shlibloadtest -crypto_first"); -ok(run(test(["shlibloadtest", "-ssl_first", $libcrypto, $libssl])), - "running shlibloadtest -ssl_first"); -ok(run(test(["shlibloadtest", "-just_crypto", $libcrypto, $libssl])), - "running shlibloadtest -just_crypto"); -ok(run(test(["shlibloadtest", "-dso_ref", $libcrypto, $libssl])), - "running shlibloadtest -dso_ref"); - -sub shlib { - my $lib = shift; - $lib = $unified_info{rename}->{$lib} - if defined $unified_info{rename}->{$lib}; - $lib = $unified_info{sharednames}->{$lib} - . ($target{shlib_variant} || "") - . ($target{shared_extension} || ".so"); - $lib =~ s|\.\$\(SHLIB_VERSION_NUMBER\) - |.$config{shlib_version_number}|x; - return $lib; +plan tests => 10; + +my $libcrypto = platform->sharedlib('libcrypto'); +my $libssl = platform->sharedlib('libssl'); + +(my $fh, my $filename) = tempfile(); +ok(run(test(["shlibloadtest", "-crypto_first", $libcrypto, $libssl, $filename])), + "running shlibloadtest -crypto_first $filename"); +ok(check_atexit($fh)); +unlink $filename; +($fh, $filename) = tempfile(); +ok(run(test(["shlibloadtest", "-ssl_first", $libcrypto, $libssl, $filename])), + "running shlibloadtest -ssl_first $filename"); +ok(check_atexit($fh)); +unlink $filename; +($fh, $filename) = tempfile(); +ok(run(test(["shlibloadtest", "-just_crypto", $libcrypto, $libssl, $filename])), + "running shlibloadtest -just_crypto $filename"); +ok(check_atexit($fh)); +unlink $filename; +($fh, $filename) = tempfile(); +ok(run(test(["shlibloadtest", "-dso_ref", $libcrypto, $libssl, $filename])), + "running shlibloadtest -dso_ref $filename"); +ok(check_atexit($fh)); +unlink $filename; +($fh, $filename) = tempfile(); +ok(run(test(["shlibloadtest", "-no_atexit", $libcrypto, $libssl, $filename])), + "running shlibloadtest -no_atexit $filename"); +ok(!check_atexit($fh)); +unlink $filename; + +sub check_atexit { + my $fh = shift; + my $data = <$fh>; + + return 1 if (defined $data && $data =~ m/atexit\(\) run/); + + return 0; }