diff --git a/tests/notgl.pl b/tests/notgl.pl index 548af429b73462f6068917e12544aaa26a9315d1..4dd14f6a2ffa52c61787557c22f7bc161325a443 100755 --- a/tests/notgl.pl +++ b/tests/notgl.pl @@ -35,7 +35,10 @@ use CapsuleTest; skip_all_unless_bwrap; -my $capsule_prefix = File::Temp->newdir(); +my $temp = File::Temp->newdir(); +my $capsule_prefix = "$temp/prefix"; +mkdir $capsule_prefix; + my $libs = ''; my $notgl_user = "$builddir/tests/notgl-user"; my $notgl_helper_user = "$builddir/tests/notgl-helper-user"; @@ -269,6 +272,50 @@ like($stdout, like($stdout, qr/^notgles_extension_red: red-only extension$/m); like($stdout, qr/^notgles_extension_green: \(not found\)$/m); +# We can use separate prefixes for different encapsulated libraries. +my $red_capsule_prefix = "$temp/red"; +mkdir $red_capsule_prefix; +my $green_capsule_prefix = "$temp/green"; +mkdir $green_capsule_prefix; + +diag 'With libcapsule loading disparate implementations, via dlopen:'; +run_ok([qw(bwrap + --ro-bind / / + --dev-bind /dev /dev + --ro-bind /), $red_capsule_prefix, + qw(--ro-bind /), $green_capsule_prefix, + '--tmpfs', realpath("$builddir/tests/lib$libs"), + '--tmpfs', $red_capsule_prefix.realpath($builddir), + '--tmpfs', $green_capsule_prefix.realpath($builddir), + '--ro-bind', realpath("$builddir/tests/red"), + $red_capsule_prefix.realpath("$builddir/tests/lib"), + '--ro-bind', realpath("$builddir/tests/green"), + $green_capsule_prefix.realpath("$builddir/tests/lib"), + '--setenv', 'CAPSULE_LIBNOTGL_SO_0_PREFIX', $red_capsule_prefix, + # We don't specify CAPSULE_LIBNOTGLES_SO_1_PREFIX, so the + # generic version gets used. + '--setenv', 'CAPSULE_PREFIX', $green_capsule_prefix, + '--setenv', 'LD_LIBRARY_PATH', join(':', + realpath("$builddir/tests/shim$libs"), + realpath("$builddir/tests/helper$libs"), + realpath("$builddir/tests/lib$libs"), + ), + $notgl_dlopener], + '>', \$stdout); +diag_multiline $stdout; +like($stdout, qr/^NotGL implementation: red$/m); +like($stdout, qr/^NotGL helper implementation: host \(red\)$/m); +like($stdout, + qr/^notgl_extension_both: red implementation of common extension$/m); +like($stdout, qr/^notgl_extension_red: red-only extension$/m); +like($stdout, qr/^notgl_extension_green: \(not found\)$/m); +like($stdout, qr/^NotGLES implementation: green$/m); +like($stdout, qr/^NotGLES helper implementation: host \(green\)$/m); +like($stdout, + qr/^notgles_extension_both: green implementation of common extension$/m); +like($stdout, qr/^notgles_extension_red: \(not found\)$/m); +like($stdout, qr/^notgles_extension_green: green-only extension$/m); + done_testing; # vim:set sw=4 sts=4 et: