diff --git a/tests/capture-libs.pl b/tests/capture-libs.pl index ac4c84cb0375e82954ce4873ef152bbb0cd47843..facc65048280dc9e65f96a6a041e4f9b7f2f1ec4 100755 --- a/tests/capture-libs.pl +++ b/tests/capture-libs.pl @@ -297,14 +297,52 @@ SKIP: { diag "ld.so is $ld_so"; run_ok([$CAPSULE_CAPTURE_LIBS_TOOL, '--resolve-ld.so=/'], '>', \$stdout); + my $resolved = $stdout; + chomp $resolved; + + is(abs_path($resolved), abs_path($ld_so), + '--resolve-ld.so=/ should print a path to '.abs_path($ld_so)); + ok(! -l $resolved, + '--resolve-ld.so=/ should not print a symlink'); + + # Autotools considers an unexpected pass to be a test failure, so we + # have to second-guess whether this is going to work. + if ($stdout eq abs_path($ld_so)."\n") { + is($stdout, abs_path($ld_so)."\n", + '--resolve-ld.so=/ should print '.abs_path($ld_so)); + } + else { + TODO: { + local $TODO = 'symlinks before the last component are not resolved, ' + .'e.g. /lib64 -> usr/lib on Arch Linux'; + is($stdout, abs_path($ld_so)."\n", + '--resolve-ld.so=/ should print '.abs_path($ld_so)); + } + } - is($stdout, abs_path($ld_so)."\n", - '--resolve-ld.so=/ should print '.abs_path($ld_so)); run_ok([qw(bwrap --ro-bind / / --ro-bind /), $host, $CAPSULE_CAPTURE_LIBS_TOOL, "--resolve-ld.so=$host"], '>', \$stdout); - is($stdout, abs_path($ld_so)."\n", - "--resolve-ld.so=$host should print ".abs_path($ld_so)); + $resolved = $stdout; + chomp $resolved; + + is(abs_path($resolved), abs_path($ld_so), + "--resolve-ld.so=$host should print a path to ".abs_path($ld_so)); + ok(! -l $resolved, + "--resolve-ld.so=$host should not print a symlink"); + + if ($stdout eq abs_path($ld_so)."\n") { + is($stdout, abs_path($ld_so)."\n", + "--resolve-ld.so=$host should print ".abs_path($ld_so)); + } + else { + TODO: { + local $TODO = 'symlinks before the last component are not resolved, ' + .'e.g. /lib64 -> usr/lib on Arch Linux'; + is($stdout, abs_path($ld_so)."\n", + "--resolve-ld.so=$host should print ".abs_path($ld_so)); + } + } }; SKIP: {