diff options
author | Jooyung Han <jooyung@google.com> | 2020-09-01 14:53:23 +0900 |
---|---|---|
committer | Jooyung Han <jooyung@google.com> | 2020-09-08 23:07:32 +0000 |
commit | cd616d0fa2f11ced7f979d60cc686c86c7e74d9a (patch) | |
tree | a5a930782fbaf542d66bc9eccf9d59a241cf0ca2 /libnativeloader/native_loader_test.cpp | |
parent | d78be00e7bc1daf0a1db07ba3944a2924bba8e26 (diff) |
libnativeloader: clean-up hard-coded public libs
art, nn, i18n apexes provide some of libs listed in
public.libraries.txt. The list of these apexes are now read from
/linkerconfig/apex.libraries.config.txt generated by
/system/bin/linkerconfig.
Bug: 150767721
Test: cuttlefish boots
Test: atest libnativeloader_test
Change-Id: Ic603b42669dff89d5d3da2f6822312e827eddd86
Diffstat (limited to 'libnativeloader/native_loader_test.cpp')
-rw-r--r-- | libnativeloader/native_loader_test.cpp | 74 |
1 files changed, 61 insertions, 13 deletions
diff --git a/libnativeloader/native_loader_test.cpp b/libnativeloader/native_loader_test.cpp index 81109b6008..146ab5a5b9 100644 --- a/libnativeloader/native_loader_test.cpp +++ b/libnativeloader/native_loader_test.cpp @@ -41,7 +41,7 @@ using ::testing::StrEq; using ::testing::_; using internal::ConfigEntry; using internal::ParseConfig; -using internal::ParseJniConfig; +using internal::ParseApexLibrariesConfig; #if defined(__LP64__) #define LIB_DIR "lib64" @@ -369,13 +369,13 @@ class NativeLoaderTest_Create : public NativeLoaderTest { bool expected_link_with_neuralnetworks_ns = true; bool expected_link_with_statsd_ns = true; std::string expected_shared_libs_to_platform_ns = default_public_libraries(); - std::string expected_shared_libs_to_art_ns = art_public_libraries(); - std::string expected_shared_libs_to_i18n_ns = i18n_public_libraries(); + std::string expected_shared_libs_to_art_ns = apex_public_libraries().at("com_android_art"); + std::string expected_shared_libs_to_i18n_ns = apex_public_libraries().at("com_android_i18n"); std::string expected_shared_libs_to_sphal_ns = vendor_public_libraries(); std::string expected_shared_libs_to_vndk_ns = vndksp_libraries_vendor(); std::string expected_shared_libs_to_vndk_product_ns = vndksp_libraries_product(); std::string expected_shared_libs_to_default_ns = default_public_libraries(); - std::string expected_shared_libs_to_neuralnetworks_ns = neuralnetworks_public_libraries(); + std::string expected_shared_libs_to_neuralnetworks_ns = apex_public_libraries().at("com_android_neuralnetworks"); std::string expected_shared_libs_to_statsd_ns = statsd_public_libraries(); void SetExpectations() { @@ -690,29 +690,77 @@ TEST(NativeLoaderConfigParser, RejectMalformed) { ASSERT_FALSE(ParseConfig("libA.so nopreload # comment", always_true).ok()); } -TEST(NativeLoaderJniConfigParser, BasicLoading) { +TEST(NativeLoaderApexLibrariesConfigParser, BasicLoading) { const char file_content[] = R"( # comment -com_android_foo libfoo.so +jni com_android_foo libfoo.so # Empty line is ignored -com_android_bar libbar.so:libbar2.so +jni com_android_bar libbar.so:libbar2.so + + public com_android_bar libpublic.so )"; - std::map<std::string, std::string> expected_result{ + auto jni_libs = ParseApexLibrariesConfig(file_content, "jni"); + ASSERT_RESULT_OK(jni_libs); + std::map<std::string, std::string> expected_jni_libs { {"com_android_foo", "libfoo.so"}, {"com_android_bar", "libbar.so:libbar2.so"}, }; + ASSERT_EQ(expected_jni_libs, *jni_libs); - Result<std::map<std::string, std::string>> result = ParseJniConfig(file_content); - ASSERT_RESULT_OK(result); - ASSERT_EQ(expected_result, *result); + auto public_libs = ParseApexLibrariesConfig(file_content, "public"); + ASSERT_RESULT_OK(public_libs); + std::map<std::string, std::string> expected_public_libs { + {"com_android_bar", "libpublic.so"}, + }; + ASSERT_EQ(expected_public_libs, *public_libs); +} + +TEST(NativeLoaderApexLibrariesConfigParser, RejectMalformedLine) { + const char file_content[] = R"( +jni com_android_foo libfoo +# missing <library list> +jni com_android_bar +)"; + auto result = ParseApexLibrariesConfig(file_content, "jni"); + ASSERT_FALSE(result.ok()); + ASSERT_EQ("Malformed line \"jni com_android_bar\"", result.error().message()); } -TEST(NativeLoaderJniConfigParser, RejectMalformed) { - ASSERT_FALSE(ParseJniConfig("com_android_foo").ok()); +TEST(NativeLoaderApexLibrariesConfigParser, RejectInvalidTag) { + const char file_content[] = R"( +jni apex1 lib +public apex2 lib +# unknown tag +unknown com_android_foo libfoo +)"; + auto result = ParseApexLibrariesConfig(file_content, "jni"); + ASSERT_FALSE(result.ok()); + ASSERT_EQ("Invalid tag \"unknown com_android_foo libfoo\"", result.error().message()); } +TEST(NativeLoaderApexLibrariesConfigParser, RejectInvalidApexNamespace) { + const char file_content[] = R"( +# apex linker namespace should be mangled ('.' -> '_') +jni com.android.foo lib +)"; + auto result = ParseApexLibrariesConfig(file_content, "jni"); + ASSERT_FALSE(result.ok()); + ASSERT_EQ("Invalid apex_namespace \"jni com.android.foo lib\"", result.error().message()); +} + +TEST(NativeLoaderApexLibrariesConfigParser, RejectInvalidLibraryList) { + const char file_content[] = R"( +# library list is ":" separated list of filenames +jni com_android_foo lib64/libfoo.so +)"; + auto result = ParseApexLibrariesConfig(file_content, "jni"); + ASSERT_FALSE(result.ok()); + ASSERT_EQ("Invalid library_list \"jni com_android_foo lib64/libfoo.so\"", result.error().message()); +} + + } // namespace nativeloader } // namespace android |