summaryrefslogtreecommitdiff
path: root/runtime/class_loader_context_test.cc
diff options
context:
space:
mode:
author Brad Stenning <stenning@google.com> 2021-10-11 19:09:00 -0700
committer Treehugger Robot <treehugger-gerrit@google.com> 2021-10-26 17:36:32 +0000
commit9c924e89e5f52da9faadd1e4e60c73eaed6bc9d1 (patch)
tree8ffdc7f0c144cb392b50144a9ae9cb4ac4d3cca7 /runtime/class_loader_context_test.cc
parentd690f8ae8f8e2675bc52089a83ac18c749f8e6d2 (diff)
Add support to place shared libraries after the dex path
This allows for a shared library to overriden by content in the dex path Bug: 179429740 Test: m test-art-host-gtest-art_runtime_tests32 Change-Id: I5f69c7bf32b7bd389eff8bdbb21616ba89ed9e87
Diffstat (limited to 'runtime/class_loader_context_test.cc')
-rw-r--r--runtime/class_loader_context_test.cc34
1 files changed, 32 insertions, 2 deletions
diff --git a/runtime/class_loader_context_test.cc b/runtime/class_loader_context_test.cc
index bf51ae3a0f..073b4b61e2 100644
--- a/runtime/class_loader_context_test.cc
+++ b/runtime/class_loader_context_test.cc
@@ -77,6 +77,15 @@ class ClassLoaderContextTest : public CommonRuntimeTest {
classpath);
}
+ void VerifyClassLoaderSharedLibraryPCLAfter(ClassLoaderContext* context,
+ size_t loader_index,
+ size_t shared_library_index,
+ const std::string& classpath) {
+ VerifyClassLoaderInfoSLAfter(
+ context, loader_index, shared_library_index, ClassLoaderContext::kPathClassLoader,
+ classpath);
+ }
+
void VerifyClassLoaderSharedLibraryIMC(ClassLoaderContext* context,
size_t loader_index,
size_t shared_library_index,
@@ -356,7 +365,25 @@ class ClassLoaderContextTest : public CommonRuntimeTest {
ASSERT_GT(info.shared_libraries.size(), shared_library_index);
const ClassLoaderContext::ClassLoaderInfo& sl =
*info.shared_libraries[shared_library_index].get();
- ASSERT_EQ(type, info.type);
+ ASSERT_EQ(type, sl.type);
+ std::vector<std::string> expected_classpath;
+ Split(classpath, ':', &expected_classpath);
+ ASSERT_EQ(expected_classpath, sl.classpath);
+ }
+
+ void VerifyClassLoaderInfoSLAfter(ClassLoaderContext* context,
+ size_t loader_index,
+ size_t shared_library_index,
+ ClassLoaderContext::ClassLoaderType type,
+ const std::string& classpath) {
+ ASSERT_TRUE(context != nullptr);
+ ASSERT_GT(context->GetParentChainSize(), loader_index);
+ const ClassLoaderContext::ClassLoaderInfo& info = *context->GetParent(loader_index);
+ ASSERT_GT(info.shared_libraries_after.size(), shared_library_index);
+
+ const ClassLoaderContext::ClassLoaderInfo& sl =
+ *info.shared_libraries_after[shared_library_index].get();
+ ASSERT_EQ(type, sl.type);
std::vector<std::string> expected_classpath;
Split(classpath, ':', &expected_classpath);
ASSERT_EQ(expected_classpath, sl.classpath);
@@ -437,10 +464,13 @@ TEST_F(ClassLoaderContextTest, ParseValidContextChain) {
TEST_F(ClassLoaderContextTest, ParseSharedLibraries) {
std::unique_ptr<ClassLoaderContext> context = ClassLoaderContext::Create(
- "PCL[a.dex:b.dex]{PCL[s1.dex]#PCL[s2.dex:s3.dex]};DLC[c.dex:d.dex]{DLC[s4.dex]}");
+ "PCL[a.dex:b.dex]{PCL[s1.dex]#PCL[s2.dex:s3.dex]#~PCL[s5.dex]#~PCL[s6.dex:s7.dex]};"
+ "DLC[c.dex:d.dex]{DLC[s4.dex]}");
VerifyContextSize(context.get(), 2);
VerifyClassLoaderSharedLibraryPCL(context.get(), 0, 0, "s1.dex");
VerifyClassLoaderSharedLibraryPCL(context.get(), 0, 1, "s2.dex:s3.dex");
+ VerifyClassLoaderSharedLibraryPCLAfter(context.get(), 0, 0, "s5.dex");
+ VerifyClassLoaderSharedLibraryPCLAfter(context.get(), 0, 1, "s6.dex:s7.dex");
VerifyClassLoaderDLC(context.get(), 1, "c.dex:d.dex");
VerifyClassLoaderSharedLibraryDLC(context.get(), 1, 0, "s4.dex");
}