diff options
author | 2024-02-12 19:09:04 +0000 | |
---|---|---|
committer | 2024-02-15 18:22:04 +0000 | |
commit | daff9792121d7778c3d628d4607bccd5ff5b0ecd (patch) | |
tree | 902890e04a0e71ffd4332da87abe5c633080fc38 | |
parent | a01591339b6c6c4426c4f087c32d75edf1d0fb98 (diff) |
Don't match dlopen errors too closely in tests.
It doesn't matter if the load failed due to not finding the library or
due to finding it in the wrong linker namespace.
Add tests to check existence of private libs as a safeguard so that we
don't error out for the wrong reason.
Test: atest libnativeloader_e2e_tests
Bug: 237577392
Change-Id: I70ebffe2763d2e5e87c45c1cf94c3b268c795fdd
6 files changed, 119 insertions, 76 deletions
diff --git a/libnativeloader/test/src/android/test/app/DataAppTest.java b/libnativeloader/test/src/android/test/app/DataAppTest.java index 4ba8afcbd2..39762ef6cc 100644 --- a/libnativeloader/test/src/android/test/app/DataAppTest.java +++ b/libnativeloader/test/src/android/test/app/DataAppTest.java @@ -34,7 +34,7 @@ public class DataAppTest { System.loadLibrary("system_extpub.oem1"); System.loadLibrary("system_extpub.oem2"); System.loadLibrary("system_extpub1.oem1"); - TestUtils.assertLinkerNamespaceError( // Missing <uses-native-library>. + TestUtils.assertLibraryInaccessible( // Missing <uses-native-library>. () -> System.loadLibrary("system_extpub_nouses.oem2")); if (!TestUtils.skipPublicProductLibTests()) { System.loadLibrary("product_extpub.product1"); @@ -44,12 +44,12 @@ public class DataAppTest { @Test public void testLoadPrivateLibraries() { - TestUtils.assertLinkerNamespaceError(() -> System.loadLibrary("system_private1")); - TestUtils.assertLinkerNamespaceError(() -> System.loadLibrary("systemext_private1")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("system_private1")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("systemext_private1")); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLibraryNotFound(() -> System.loadLibrary("product_private1")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("product_private1")); } - TestUtils.assertLibraryNotFound(() -> System.loadLibrary("vendor_private1")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("vendor_private1")); } @Test @@ -67,9 +67,10 @@ public class DataAppTest { // SystemSharedLib.loadLibrary("system_private2"); // SystemSharedLib.loadLibrary("systemext_private2"); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLibraryNotFound(() -> SystemSharedLib.loadLibrary("product_private2")); + TestUtils.assertLibraryInaccessible( + () -> SystemSharedLib.loadLibrary("product_private2")); } - TestUtils.assertLibraryNotFound(() -> SystemSharedLib.loadLibrary("vendor_private2")); + TestUtils.assertLibraryInaccessible(() -> SystemSharedLib.loadLibrary("vendor_private2")); } @Test @@ -79,30 +80,32 @@ public class DataAppTest { // SystemExtSharedLib.loadLibrary("system_private3"); // SystemExtSharedLib.loadLibrary("systemext_private3"); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLibraryNotFound( + TestUtils.assertLibraryInaccessible( () -> SystemExtSharedLib.loadLibrary("product_private3")); } - TestUtils.assertLibraryNotFound(() -> SystemExtSharedLib.loadLibrary("vendor_private3")); + TestUtils.assertLibraryInaccessible( + () -> SystemExtSharedLib.loadLibrary("vendor_private3")); } @Test public void testLoadPrivateLibrariesViaProductSharedLib() { - TestUtils.assertLinkerNamespaceError(() -> ProductSharedLib.loadLibrary("system_private4")); - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible(() -> ProductSharedLib.loadLibrary("system_private4")); + TestUtils.assertLibraryInaccessible( () -> ProductSharedLib.loadLibrary("systemext_private4")); if (!TestUtils.skipPublicProductLibTests()) { ProductSharedLib.loadLibrary("product_private4"); } - TestUtils.assertLibraryNotFound(() -> ProductSharedLib.loadLibrary("vendor_private4")); + TestUtils.assertLibraryInaccessible(() -> ProductSharedLib.loadLibrary("vendor_private4")); } @Test public void testLoadPrivateLibrariesViaVendorSharedLib() { - TestUtils.assertLinkerNamespaceError(() -> VendorSharedLib.loadLibrary("system_private5")); - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible(() -> VendorSharedLib.loadLibrary("system_private5")); + TestUtils.assertLibraryInaccessible( () -> VendorSharedLib.loadLibrary("systemext_private5")); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLibraryNotFound(() -> VendorSharedLib.loadLibrary("product_private5")); + TestUtils.assertLibraryInaccessible( + () -> VendorSharedLib.loadLibrary("product_private5")); } VendorSharedLib.loadLibrary("vendor_private5"); } @@ -117,15 +120,15 @@ public class DataAppTest { @Test public void testLoadPrivateLibrariesWithAbsolutePaths() { - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> System.load(TestUtils.libPath("/system", "system_private6"))); - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> System.load(TestUtils.libPath("/system_ext", "systemext_private6"))); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> System.load(TestUtils.libPath("/product", "product_private6"))); } - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> System.load(TestUtils.libPath("/vendor", "vendor_private6"))); } } diff --git a/libnativeloader/test/src/android/test/app/ProductAppTest.java b/libnativeloader/test/src/android/test/app/ProductAppTest.java index 82d8b6e1f1..fae20a0806 100644 --- a/libnativeloader/test/src/android/test/app/ProductAppTest.java +++ b/libnativeloader/test/src/android/test/app/ProductAppTest.java @@ -41,12 +41,17 @@ public class ProductAppTest { } @Test + public void testPrivateLibsExist() { + TestUtils.testPrivateLibsExist("/product", "product_private"); + } + + @Test public void testLoadExtendedPublicLibraries() { System.loadLibrary("system_extpub.oem1"); System.loadLibrary("system_extpub.oem2"); System.loadLibrary("system_extpub1.oem1"); if (!productAppsAreShared()) { - TestUtils.assertLinkerNamespaceError( // Missing <uses-native-library>. + TestUtils.assertLibraryInaccessible( // Missing <uses-native-library>. () -> System.loadLibrary("system_extpub_nouses.oem2")); } System.loadLibrary("product_extpub.product1"); @@ -56,11 +61,11 @@ public class ProductAppTest { @Test public void testLoadPrivateLibraries() { if (!productAppsAreShared()) { - TestUtils.assertLinkerNamespaceError(() -> System.loadLibrary("system_private1")); - TestUtils.assertLinkerNamespaceError(() -> System.loadLibrary("systemext_private1")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("system_private1")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("systemext_private1")); } System.loadLibrary("product_private1"); - TestUtils.assertLibraryNotFound(() -> System.loadLibrary("vendor_private1")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("vendor_private1")); } @Test @@ -78,9 +83,10 @@ public class ProductAppTest { // SystemSharedLib.loadLibrary("system_private2"); // SystemSharedLib.loadLibrary("systemext_private2"); if (!productAppsAreShared()) { - TestUtils.assertLibraryNotFound(() -> SystemSharedLib.loadLibrary("product_private2")); + TestUtils.assertLibraryInaccessible( + () -> SystemSharedLib.loadLibrary("product_private2")); } - TestUtils.assertLibraryNotFound(() -> SystemSharedLib.loadLibrary("vendor_private2")); + TestUtils.assertLibraryInaccessible(() -> SystemSharedLib.loadLibrary("vendor_private2")); } @Test @@ -90,32 +96,34 @@ public class ProductAppTest { // SystemExtSharedLib.loadLibrary("system_private3"); // SystemExtSharedLib.loadLibrary("systemext_private3"); if (!productAppsAreShared()) { - TestUtils.assertLibraryNotFound( + TestUtils.assertLibraryInaccessible( () -> SystemExtSharedLib.loadLibrary("product_private3")); } - TestUtils.assertLibraryNotFound(() -> SystemExtSharedLib.loadLibrary("vendor_private3")); + TestUtils.assertLibraryInaccessible( + () -> SystemExtSharedLib.loadLibrary("vendor_private3")); } @Test public void testLoadPrivateLibrariesViaProductSharedLib() { if (!productAppsAreShared()) { - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> ProductSharedLib.loadLibrary("system_private4")); - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> ProductSharedLib.loadLibrary("systemext_private4")); } ProductSharedLib.loadLibrary("product_private4"); - TestUtils.assertLibraryNotFound(() -> ProductSharedLib.loadLibrary("vendor_private4")); + TestUtils.assertLibraryInaccessible(() -> ProductSharedLib.loadLibrary("vendor_private4")); } @Test public void testLoadPrivateLibrariesViaVendorSharedLib() { if (!productAppsAreShared()) { - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> VendorSharedLib.loadLibrary("system_private5")); - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> VendorSharedLib.loadLibrary("systemext_private5")); - TestUtils.assertLibraryNotFound(() -> VendorSharedLib.loadLibrary("product_private5")); + TestUtils.assertLibraryInaccessible( + () -> VendorSharedLib.loadLibrary("product_private5")); // When the app has a shared namespace, its libraries get loaded // with shared namespaces as well, inheriting the same paths. So // since the app wouldn't have access to /vendor/${LIB}, @@ -133,13 +141,13 @@ public class ProductAppTest { @Test public void testLoadPrivateLibrariesWithAbsolutePaths() { if (!productAppsAreShared()) { - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> System.load(TestUtils.libPath("/system", "system_private6"))); - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> System.load(TestUtils.libPath("/system_ext", "systemext_private6"))); } System.load(TestUtils.libPath("/product", "product_private6")); - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> System.load(TestUtils.libPath("/vendor", "vendor_private6"))); } } diff --git a/libnativeloader/test/src/android/test/app/SystemAppTest.java b/libnativeloader/test/src/android/test/app/SystemAppTest.java index a909a4c49d..5c55f93974 100644 --- a/libnativeloader/test/src/android/test/app/SystemAppTest.java +++ b/libnativeloader/test/src/android/test/app/SystemAppTest.java @@ -31,6 +31,12 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public class SystemAppTest { @Test + public void testPrivateLibsExist() { + TestUtils.testPrivateLibsExist("/system", "system_private"); + TestUtils.testPrivateLibsExist("/system_ext", "systemext_private"); + } + + @Test public void testLoadExtendedPublicLibraries() { System.loadLibrary("system_extpub.oem1"); System.loadLibrary("system_extpub.oem2"); @@ -49,9 +55,9 @@ public class SystemAppTest { System.loadLibrary("system_private1"); System.loadLibrary("systemext_private1"); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLibraryNotFound(() -> System.loadLibrary("product_private1")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("product_private1")); } - TestUtils.assertLibraryNotFound(() -> System.loadLibrary("vendor_private1")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("vendor_private1")); } @Test @@ -67,9 +73,10 @@ public class SystemAppTest { SystemSharedLib.loadLibrary("system_private2"); SystemSharedLib.loadLibrary("systemext_private2"); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLibraryNotFound(() -> SystemSharedLib.loadLibrary("product_private2")); + TestUtils.assertLibraryInaccessible( + () -> SystemSharedLib.loadLibrary("product_private2")); } - TestUtils.assertLibraryNotFound(() -> SystemSharedLib.loadLibrary("vendor_private2")); + TestUtils.assertLibraryInaccessible(() -> SystemSharedLib.loadLibrary("vendor_private2")); } @Test @@ -77,10 +84,11 @@ public class SystemAppTest { SystemExtSharedLib.loadLibrary("system_private3"); SystemExtSharedLib.loadLibrary("systemext_private3"); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLibraryNotFound( + TestUtils.assertLibraryInaccessible( () -> SystemExtSharedLib.loadLibrary("product_private3")); } - TestUtils.assertLibraryNotFound(() -> SystemExtSharedLib.loadLibrary("vendor_private3")); + TestUtils.assertLibraryInaccessible( + () -> SystemExtSharedLib.loadLibrary("vendor_private3")); } @Test @@ -88,9 +96,10 @@ public class SystemAppTest { ProductSharedLib.loadLibrary("system_private4"); ProductSharedLib.loadLibrary("systemext_private4"); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLibraryNotFound(() -> ProductSharedLib.loadLibrary("product_private4")); + TestUtils.assertLibraryInaccessible( + () -> ProductSharedLib.loadLibrary("product_private4")); } - TestUtils.assertLibraryNotFound(() -> ProductSharedLib.loadLibrary("vendor_private4")); + TestUtils.assertLibraryInaccessible(() -> ProductSharedLib.loadLibrary("vendor_private4")); } @Test @@ -98,9 +107,10 @@ public class SystemAppTest { VendorSharedLib.loadLibrary("system_private5"); VendorSharedLib.loadLibrary("systemext_private5"); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLibraryNotFound(() -> VendorSharedLib.loadLibrary("product_private5")); + TestUtils.assertLibraryInaccessible( + () -> VendorSharedLib.loadLibrary("product_private5")); } - TestUtils.assertLibraryNotFound(() -> VendorSharedLib.loadLibrary("vendor_private5")); + TestUtils.assertLibraryInaccessible(() -> VendorSharedLib.loadLibrary("vendor_private5")); } @Test @@ -116,10 +126,10 @@ public class SystemAppTest { System.load(TestUtils.libPath("/system", "system_private6")); System.load(TestUtils.libPath("/system_ext", "systemext_private6")); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> System.load(TestUtils.libPath("/product", "product_private6"))); } - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> System.load(TestUtils.libPath("/vendor", "vendor_private6"))); } } diff --git a/libnativeloader/test/src/android/test/app/VendorAppTest.java b/libnativeloader/test/src/android/test/app/VendorAppTest.java index 52688bbf35..2177cf2cc4 100644 --- a/libnativeloader/test/src/android/test/app/VendorAppTest.java +++ b/libnativeloader/test/src/android/test/app/VendorAppTest.java @@ -30,11 +30,16 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public class VendorAppTest { @Test + public void testPrivateLibsExist() { + TestUtils.testPrivateLibsExist("/vendor", "vendor_private"); + } + + @Test public void testLoadExtendedPublicLibraries() { - TestUtils.assertLinkerNamespaceError(() -> System.loadLibrary("system_extpub.oem1")); - TestUtils.assertLinkerNamespaceError(() -> System.loadLibrary("system_extpub.oem2")); - TestUtils.assertLinkerNamespaceError(() -> System.loadLibrary("system_extpub1.oem1")); - TestUtils.assertLinkerNamespaceError(() -> System.loadLibrary("system_extpub_nouses.oem2")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("system_extpub.oem1")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("system_extpub.oem2")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("system_extpub1.oem1")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("system_extpub_nouses.oem2")); if (!TestUtils.skipPublicProductLibTests()) { System.loadLibrary("product_extpub.product1"); System.loadLibrary("product_extpub1.product1"); @@ -43,10 +48,10 @@ public class VendorAppTest { @Test public void testLoadPrivateLibraries() { - TestUtils.assertLinkerNamespaceError(() -> System.loadLibrary("system_private1")); - TestUtils.assertLinkerNamespaceError(() -> System.loadLibrary("systemext_private1")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("system_private1")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("systemext_private1")); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLibraryNotFound(() -> System.loadLibrary("product_private1")); + TestUtils.assertLibraryInaccessible(() -> System.loadLibrary("product_private1")); } System.loadLibrary("vendor_private1"); } @@ -66,9 +71,10 @@ public class VendorAppTest { // SystemSharedLib.loadLibrary("system_private2"); // SystemSharedLib.loadLibrary("systemext_private2"); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLibraryNotFound(() -> SystemSharedLib.loadLibrary("product_private2")); + TestUtils.assertLibraryInaccessible( + () -> SystemSharedLib.loadLibrary("product_private2")); } - TestUtils.assertLibraryNotFound(() -> SystemSharedLib.loadLibrary("vendor_private2")); + TestUtils.assertLibraryInaccessible(() -> SystemSharedLib.loadLibrary("vendor_private2")); } @Test @@ -78,37 +84,39 @@ public class VendorAppTest { // SystemExtSharedLib.loadLibrary("system_private3"); // SystemExtSharedLib.loadLibrary("systemext_private3"); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLibraryNotFound( + TestUtils.assertLibraryInaccessible( () -> SystemExtSharedLib.loadLibrary("product_private3")); } - TestUtils.assertLibraryNotFound(() -> SystemExtSharedLib.loadLibrary("vendor_private3")); + TestUtils.assertLibraryInaccessible( + () -> SystemExtSharedLib.loadLibrary("vendor_private3")); } @Test public void testLoadPrivateLibrariesViaProductSharedLib() { - TestUtils.assertLinkerNamespaceError(() -> ProductSharedLib.loadLibrary("system_private4")); - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible(() -> ProductSharedLib.loadLibrary("system_private4")); + TestUtils.assertLibraryInaccessible( () -> ProductSharedLib.loadLibrary("systemext_private4")); if (!TestUtils.skipPublicProductLibTests()) { ProductSharedLib.loadLibrary("product_private4"); } - TestUtils.assertLibraryNotFound(() -> ProductSharedLib.loadLibrary("vendor_private4")); + TestUtils.assertLibraryInaccessible(() -> ProductSharedLib.loadLibrary("vendor_private4")); } @Test public void testLoadPrivateLibrariesViaVendorSharedLib() { - TestUtils.assertLinkerNamespaceError(() -> VendorSharedLib.loadLibrary("system_private5")); - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible(() -> VendorSharedLib.loadLibrary("system_private5")); + TestUtils.assertLibraryInaccessible( () -> VendorSharedLib.loadLibrary("systemext_private5")); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLibraryNotFound(() -> VendorSharedLib.loadLibrary("product_private5")); + TestUtils.assertLibraryInaccessible( + () -> VendorSharedLib.loadLibrary("product_private5")); } VendorSharedLib.loadLibrary("vendor_private5"); } @Test public void testLoadExtendedPublicLibrariesWithAbsolutePaths() { - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> System.load(TestUtils.libPath("/system", "system_extpub3.oem1"))); if (!TestUtils.skipPublicProductLibTests()) { System.load(TestUtils.libPath("/product", "product_extpub3.product1")); @@ -117,12 +125,12 @@ public class VendorAppTest { @Test public void testLoadPrivateLibrariesWithAbsolutePaths() { - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> System.load(TestUtils.libPath("/system", "system_private6"))); - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> System.load(TestUtils.libPath("/system_ext", "systemext_private6"))); if (!TestUtils.skipPublicProductLibTests()) { - TestUtils.assertLinkerNamespaceError( + TestUtils.assertLibraryInaccessible( () -> System.load(TestUtils.libPath("/product", "product_private6"))); } System.load(TestUtils.libPath("/vendor", "vendor_private6")); diff --git a/libnativeloader/test/src/android/test/hostside/LibnativeloaderTest.java b/libnativeloader/test/src/android/test/hostside/LibnativeloaderTest.java index 55a6dd27b3..80bd72667e 100644 --- a/libnativeloader/test/src/android/test/hostside/LibnativeloaderTest.java +++ b/libnativeloader/test/src/android/test/hostside/LibnativeloaderTest.java @@ -278,6 +278,9 @@ public class LibnativeloaderTest extends BaseHostJUnit4Test { void pushPrivateLibs(ZipFile libApk) throws Exception { // Push the libraries once for each test. Since we cannot unload them, we need a fresh // never-before-loaded library in each loadLibrary call. + // + // Remember to update testPrivateLibsExist in TestUtils.java when + // the number of libraries changes. for (int i = 1; i <= 6; ++i) { pushNativeTestLib(libApk, "libsystem_testlib.so", "/system/${LIB}/libsystem_private" + i + ".so"); diff --git a/libnativeloader/test/src/android/test/lib/TestUtils.java b/libnativeloader/test/src/android/test/lib/TestUtils.java index ca64bad791..26bc0f8265 100644 --- a/libnativeloader/test/src/android/test/lib/TestUtils.java +++ b/libnativeloader/test/src/android/test/lib/TestUtils.java @@ -17,6 +17,7 @@ package android.test.lib; import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth.assertWithMessage; import static org.junit.Assert.assertThrows; @@ -26,16 +27,13 @@ import androidx.test.platform.app.InstrumentationRegistry; import org.junit.function.ThrowingRunnable; -public final class TestUtils { - public static void assertLibraryNotFound(ThrowingRunnable loadLibrary) { - Throwable t = assertThrows(UnsatisfiedLinkError.class, loadLibrary); - assertThat(t.getMessage()).containsMatch("dlopen failed: library .* not found"); - } +import java.io.File; - public static void assertLinkerNamespaceError(ThrowingRunnable loadLibrary) { +public final class TestUtils { + public static void assertLibraryInaccessible(ThrowingRunnable loadLibrary) { Throwable t = assertThrows(UnsatisfiedLinkError.class, loadLibrary); assertThat(t.getMessage()) - .containsMatch("dlopen failed: .* is not accessible for the namespace"); + .containsMatch("dlopen failed: .* (not found|not accessible for the namespace)"); } public static String libPath(String dir, String libName) { @@ -48,4 +46,17 @@ public final class TestUtils { public static boolean skipPublicProductLibTests() { return Build.VERSION.SDK_INT < 33; // TIRAMISU } + + // Test that private libs are present, as a safeguard so that the dlopen + // failures we expect in other tests aren't due to them not being there. + public static void testPrivateLibsExist(String libDir, String libStem) { + // Remember to update pushPrivateLibs in LibnativeloaderTest.java when + // the number of libraries changes. + for (int i = 1; i <= 6; ++i) { + String libPath = libPath(libDir, libStem + i); + assertWithMessage(libPath + " does not exist") + .that(new File(libPath).exists()) + .isTrue(); + } + } } |