summaryrefslogtreecommitdiff
path: root/libnativeloader/native_loader_test.cpp
diff options
context:
space:
mode:
author Martin Stjernholm <mast@google.com> 2022-11-16 15:28:12 +0000
committer Treehugger Robot <treehugger-gerrit@google.com> 2022-11-18 18:24:30 +0000
commite5f1d635677b297ca422fb981124fffa9386872c (patch)
tree183f163351ea11537b9da953584d8921e8e9985c /libnativeloader/native_loader_test.cpp
parent51d5e87df717dcb846ff3ee589189d6f0d5a955d (diff)
Make classloader namespace names unique, for debugging.
Also take the opportunity to switch to shorter names, when they are changing anyway. These namespaces aren't visible, so renaming them shouldn't be a compat issue. Test: atest libnativeloader_test libnativeloader_e2e_tests Test: adb shell "setprop debug.ld.all dlopen,dlerror && setprop log.tag.nativeloader :v && stop && start" Then check logcat that the classloader namespaces get the expected unique names (per process). Bug: 258340826 Change-Id: Ic5d6ba850d8cd9cdfb3a66e175dfc87046c0ba31
Diffstat (limited to 'libnativeloader/native_loader_test.cpp')
-rw-r--r--libnativeloader/native_loader_test.cpp21
1 files changed, 11 insertions, 10 deletions
diff --git a/libnativeloader/native_loader_test.cpp b/libnativeloader/native_loader_test.cpp
index 3825614545..6c0c8b17a7 100644
--- a/libnativeloader/native_loader_test.cpp
+++ b/libnativeloader/native_loader_test.cpp
@@ -32,6 +32,7 @@ namespace nativeloader {
using ::testing::Eq;
using ::testing::NotNull;
+using ::testing::StartsWith;
using ::testing::StrEq;
using internal::ConfigEntry; // NOLINT - ConfigEntry is actually used
using internal::ParseApexLibrariesConfig;
@@ -191,7 +192,7 @@ class NativeLoaderTest_Create : public NativeLoaderTest {
std::string permitted_path = "/data/app/foo/" LIB_DIR;
// expected output (.. for the default test inputs)
- std::string expected_namespace_name = "classloader-namespace";
+ std::string expected_namespace_prefix = "clns";
uint64_t expected_namespace_flags =
ANDROID_NAMESPACE_TYPE_ISOLATED | ANDROID_NAMESPACE_TYPE_ALSO_USED_AS_ANONYMOUS;
std::string expected_library_path = library_path;
@@ -227,7 +228,7 @@ class NativeLoaderTest_Create : public NativeLoaderTest {
EXPECT_CALL(*mock, NativeBridgeInitialized()).Times(testing::AnyNumber());
EXPECT_CALL(*mock, mock_create_namespace(
- Eq(IsBridged()), StrEq(expected_namespace_name), nullptr,
+ Eq(IsBridged()), StartsWith(expected_namespace_prefix + "-"), nullptr,
StrEq(expected_library_path), expected_namespace_flags,
StrEq(expected_permitted_path), NsEq(expected_parent_namespace.c_str())))
.WillOnce(Return(TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE(dex_path.c_str()))));
@@ -322,7 +323,7 @@ TEST_P(NativeLoaderTest_Create, BundledSystemApp) {
dex_path = "/system/app/foo/foo.apk";
is_shared = true;
- expected_namespace_name = "classloader-namespace-shared";
+ expected_namespace_prefix = "clns-shared";
expected_namespace_flags |= ANDROID_NAMESPACE_TYPE_SHARED;
SetExpectations();
RunTest();
@@ -332,7 +333,7 @@ TEST_P(NativeLoaderTest_Create, BundledVendorApp) {
dex_path = "/vendor/app/foo/foo.apk";
is_shared = true;
- expected_namespace_name = "classloader-namespace-shared";
+ expected_namespace_prefix = "clns-shared";
expected_namespace_flags |= ANDROID_NAMESPACE_TYPE_SHARED;
SetExpectations();
RunTest();
@@ -342,7 +343,7 @@ TEST_P(NativeLoaderTest_Create, UnbundledVendorApp) {
dex_path = "/vendor/app/foo/foo.apk";
is_shared = false;
- expected_namespace_name = "vendor-classloader-namespace";
+ expected_namespace_prefix = "vendor-clns";
expected_library_path = expected_library_path + ":/vendor/" LIB_DIR;
expected_permitted_path = expected_permitted_path + ":/vendor/" LIB_DIR;
expected_shared_libs_to_platform_ns =
@@ -356,7 +357,7 @@ TEST_P(NativeLoaderTest_Create, BundledProductApp) {
dex_path = "/product/app/foo/foo.apk";
is_shared = true;
- expected_namespace_name = "classloader-namespace-shared";
+ expected_namespace_prefix = "clns-shared";
expected_namespace_flags |= ANDROID_NAMESPACE_TYPE_SHARED;
SetExpectations();
RunTest();
@@ -366,7 +367,7 @@ TEST_P(NativeLoaderTest_Create, SystemServerWithApexJars) {
dex_path = "/system/framework/services.jar:/apex/com.android.conscrypt/javalib/service-foo.jar";
is_shared = true;
- expected_namespace_name = "classloader-namespace-shared";
+ expected_namespace_prefix = "clns-shared";
expected_namespace_flags |= ANDROID_NAMESPACE_TYPE_SHARED;
expected_link_with_conscrypt_ns = true;
SetExpectations();
@@ -378,7 +379,7 @@ TEST_P(NativeLoaderTest_Create, UnbundledProductApp) {
is_shared = false;
if (is_product_vndk_version_defined()) {
- expected_namespace_name = "product-classloader-namespace";
+ expected_namespace_prefix = "product-clns";
expected_library_path = expected_library_path + ":/product/" LIB_DIR ":/system/product/" LIB_DIR;
expected_permitted_path =
expected_permitted_path + ":/product/" LIB_DIR ":/system/product/" LIB_DIR;
@@ -416,7 +417,7 @@ TEST_P(NativeLoaderTest_Create, TwoApks) {
const std::string second_app_permitted_path = "/data/app/bar/" LIB_DIR;
const std::string expected_second_app_permitted_path =
std::string("/data:/mnt/expand:") + second_app_permitted_path;
- const std::string expected_second_app_parent_namespace = "classloader-namespace";
+ const std::string expected_second_app_parent_namespace = "clns";
// no ALSO_USED_AS_ANONYMOUS
const uint64_t expected_second_namespace_flags = ANDROID_NAMESPACE_TYPE_ISOLATED;
@@ -429,7 +430,7 @@ TEST_P(NativeLoaderTest_Create, TwoApks) {
// namespace for the second app is created. Its parent is set to the namespace
// of the first app.
EXPECT_CALL(*mock, mock_create_namespace(
- Eq(IsBridged()), StrEq(expected_namespace_name), nullptr,
+ Eq(IsBridged()), StartsWith(expected_namespace_prefix + "-"), nullptr,
StrEq(second_app_library_path), expected_second_namespace_flags,
StrEq(expected_second_app_permitted_path), NsEq(dex_path.c_str())))
.WillOnce(Return(TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE(second_app_dex_path.c_str()))));