diff --git a/frameworks/native/appkit/app/context_container.cpp b/frameworks/native/appkit/app/context_container.cpp index e111b69498..13c56e0476 100644 --- a/frameworks/native/appkit/app/context_container.cpp +++ b/frameworks/native/appkit/app/context_container.cpp @@ -606,9 +606,6 @@ void ContextContainer::InitResourceManager(BundleInfo &bundleInfo, std::shared_p "ContextContainer::InitResourceManager hapModuleInfos count: %{public}zu", bundleInfo.hapModuleInfos.size()); std::regex pattern(AbilityRuntime::Constants::ABS_CODE_PATH); for (auto hapModuleInfo : bundleInfo.hapModuleInfos) { - if (hapModuleInfo.resourcePath.empty() && hapModuleInfo.hapPath.empty()) { - continue; - } std::string loadPath; if (system::GetBoolParameter(AbilityRuntime::Constants::COMPRESS_PROPERTY, false) && !hapModuleInfo.hapPath.empty()) { @@ -616,6 +613,9 @@ void ContextContainer::InitResourceManager(BundleInfo &bundleInfo, std::shared_p } else { loadPath = hapModuleInfo.resourcePath; } + if (loadPath.empty()) { + continue; + } loadPath = std::regex_replace(loadPath, pattern, AbilityRuntime::Constants::LOCAL_BUNDLES); HILOG_DEBUG("ContextContainer::InitResourceManager loadPath: %{public}s", loadPath.c_str()); if (!resourceManager->AddResource(loadPath.c_str())) { diff --git a/frameworks/native/appkit/app/main_thread.cpp b/frameworks/native/appkit/app/main_thread.cpp index bcade28c04..d971054d12 100644 --- a/frameworks/native/appkit/app/main_thread.cpp +++ b/frameworks/native/appkit/app/main_thread.cpp @@ -770,11 +770,11 @@ bool MainThread::InitResourceManager(std::shared_ptrAddResource(loadPath.c_str())) { diff --git a/services/abilitymgr/src/ability_record.cpp b/services/abilitymgr/src/ability_record.cpp index a6fe48af07..27f98ca7c5 100644 --- a/services/abilitymgr/src/ability_record.cpp +++ b/services/abilitymgr/src/ability_record.cpp @@ -720,11 +720,6 @@ std::shared_ptr AbilityRecord::CreateResource std::shared_ptr resourceMgr(Global::Resource::CreateResourceManager()); resourceMgr->UpdateResConfig(*resConfig); - if (abilityInfo_.resourcePath.empty() && abilityInfo_.hapPath.empty()) { - HILOG_WARN("Invalid app resource."); - return nullptr; - } - std::string loadPath; if (system::GetBoolParameter(AbilityRuntime::Constants::COMPRESS_PROPERTY, false) && !abilityInfo_.hapPath.empty()) { @@ -733,6 +728,11 @@ std::shared_ptr AbilityRecord::CreateResource loadPath = abilityInfo_.resourcePath; } + if (loadPath.empty()) { + HILOG_WARN("Invalid app resource."); + return nullptr; + } + if (!resourceMgr->AddResource(loadPath.c_str())) { HILOG_WARN("%{public}s AddResource failed.", __func__); return nullptr; diff --git a/services/abilitymgr/src/system_dialog_scheduler.cpp b/services/abilitymgr/src/system_dialog_scheduler.cpp index 9acd01056c..6671683f67 100644 --- a/services/abilitymgr/src/system_dialog_scheduler.cpp +++ b/services/abilitymgr/src/system_dialog_scheduler.cpp @@ -330,9 +330,6 @@ void SystemDialogScheduler::GetAppNameFromResource(int32_t labelId, std::regex pattern(std::string(AbilityRuntime::Constants::ABS_CODE_PATH) + std::string(AbilityRuntime::Constants::FILE_SEPARATOR) + bundleInfo.name); for (auto hapModuleInfo : bundleInfo.hapModuleInfos) { - if (hapModuleInfo.resourcePath.empty() && hapModuleInfo.hapPath.empty()) { - continue; - } std::string loadPath; if (system::GetBoolParameter(AbilityRuntime::Constants::COMPRESS_PROPERTY, false) && !hapModuleInfo.hapPath.empty()) { @@ -340,6 +337,9 @@ void SystemDialogScheduler::GetAppNameFromResource(int32_t labelId, } else { loadPath = hapModuleInfo.resourcePath; } + if (loadPath.empty()) { + continue; + } HILOG_DEBUG("GetAppNameFromResource loadPath: %{public}s", loadPath.c_str()); if (!resourceManager->AddResource(loadPath.c_str())) { HILOG_ERROR("ResourceManager add %{public}s resource path failed!", bundleInfo.name.c_str()); diff --git a/test/unittest/appkit/main_thread_test/main_thread_test.cpp b/test/unittest/appkit/main_thread_test/main_thread_test.cpp index 2f3d543a64..1dd797a5ef 100644 --- a/test/unittest/appkit/main_thread_test/main_thread_test.cpp +++ b/test/unittest/appkit/main_thread_test/main_thread_test.cpp @@ -16,13 +16,15 @@ #include #include -#include "hilog_wrapper.h" -#include "if_system_ability_manager.h" -#include "iservice_registry.h" #define private public #include "main_thread.h" #undef private + +#include "hilog_wrapper.h" +#include "if_system_ability_manager.h" +#include "iservice_registry.h" #include "mock_bundle_manager.h" +#include "process_info.h" #include "quick_fix_callback_stub.h" #include "system_ability_definition.h" #include "sys_mgr_client.h" @@ -160,5 +162,80 @@ HWTEST_F(MainThreadTest, ScheduleNotifyUnLoadRepairPatch_0100, TestSize.Level1) EXPECT_EQ(ret, NO_ERROR); HILOG_INFO("%{public}s end.", __func__); } + +/** + * @tc.name: InitResourceManager_0100 + * @tc.desc: init resourceManager. + * @tc.type: FUNC + * @tc.require: issueI581VW + */ +HWTEST_F(MainThreadTest, InitResourceManager_0100, TestSize.Level1) +{ + std::shared_ptr resourceManager(Global::Resource::CreateResourceManager()); + EXPECT_TRUE(resourceManager != nullptr); + AppExecFwk::BundleInfo bundleInfo; + Configuration config; + bundleInfo.applicationInfo.multiProjects = true; + mainThread_->InitResourceManager(resourceManager, bundleInfo, config); + EXPECT_TRUE(resourceManager != nullptr); + bundleInfo.applicationInfo.multiProjects = false; + mainThread_->InitResourceManager(resourceManager, bundleInfo, config); + EXPECT_TRUE(resourceManager != nullptr); + + HapModuleInfo info; + info.name = "com.ohos.contactsdataability"; + info.moduleName = "entry"; + info.description = "dataability_description"; + info.iconPath = "$media:icon"; + info.deviceTypes = {"smartVision"}; + info.bundleName = "com.ohos.contactsdataability"; + bundleInfo.hapModuleInfos.push_back(info); + bundleInfo.applicationInfo.multiProjects = true; + mainThread_->InitResourceManager(resourceManager, bundleInfo, config); + EXPECT_TRUE(resourceManager != nullptr); + + bundleInfo.applicationInfo.multiProjects = false; + mainThread_->InitResourceManager(resourceManager, bundleInfo, config); + EXPECT_TRUE(resourceManager != nullptr); + + info.resourcePath = "/data/app/el1/budle/public/com.ohos.contactsdataability"\ + "/com.ohos.contactsdataability/assets/entry/resources.index"; + bundleInfo.hapModuleInfos.clear(); + bundleInfo.hapModuleInfos.push_back(info); + mainThread_->InitResourceManager(resourceManager, bundleInfo, config); + EXPECT_TRUE(resourceManager != nullptr); + + info.hapPath = "/system/app/com.ohos.contactsdataability/Contacts_DataAbility.hap"; + bundleInfo.hapModuleInfos.clear(); + bundleInfo.hapModuleInfos.push_back(info); + mainThread_->InitResourceManager(resourceManager, bundleInfo, config); + EXPECT_TRUE(resourceManager != nullptr); + + info.resourcePath = ""; + bundleInfo.hapModuleInfos.clear(); + bundleInfo.hapModuleInfos.push_back(info); + mainThread_->InitResourceManager(resourceManager, bundleInfo, config); + EXPECT_TRUE(resourceManager != nullptr); +} + +/** + * @tc.name: HandleLaunchApplication_0100 + * @tc.desc: Handle launch application. + * @tc.type: FUNC + * @tc.require: issueI581VW + */ +HWTEST_F(MainThreadTest, HandleLaunchApplication_0100, TestSize.Level1) +{ + Configuration config; + AppLaunchData lanchdate; + ProcessInfo processing("TestProcess", 9999); + ApplicationInfo appinf; + appinf.name = "MockTestApplication"; + appinf.moduleSourceDirs.push_back("/hos/lib/libabilitydemo_native.z.so"); + lanchdate.SetApplicationInfo(appinf); + lanchdate.SetProcessInfo(processing); + mainThread_->HandleLaunchApplication(lanchdate, config); + EXPECT_TRUE(mainThread_->application_ != nullptr); +} } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/test/unittest/frameworks_kits_appkit_native_test/context_container_test.cpp b/test/unittest/frameworks_kits_appkit_native_test/context_container_test.cpp index 61412072d1..a048a889f3 100644 --- a/test/unittest/frameworks_kits_appkit_native_test/context_container_test.cpp +++ b/test/unittest/frameworks_kits_appkit_native_test/context_container_test.cpp @@ -576,5 +576,48 @@ HWTEST_F(ContextContainerTest, AppExecFwk_ContextContainer_GetProcessName_0200, std::string name = context_->GetProcessName(); EXPECT_STREQ(empty.c_str(), name.c_str()); } + +/** + * @tc.number: AppExecFwk_ContextContainer_InitResourceManager_0100 + * @tc.name: GetProcessName + * @tc.desc: Test GetProcessName exception status. + */ +HWTEST_F(ContextContainerTest, AppExecFwk_ContextContainer_InitResourceManager_0100, Function | MediumTest | Level3) +{ + std::shared_ptr appContext = std::make_shared(true); + AppExecFwk::BundleInfo bundleInfo; + context_->InitResourceManager(bundleInfo, appContext); + EXPECT_TRUE(appContext->GetResourceManager() != nullptr); + + HapModuleInfo info; + info.name = "com.ohos.contactsdataability"; + info.moduleName = "entry"; + info.description = "dataability_description"; + info.iconPath = "$media:icon"; + info.deviceTypes = {"smartVision"}; + info.bundleName = "com.ohos.contactsdataability"; + bundleInfo.hapModuleInfos.push_back(info); + context_->InitResourceManager(bundleInfo, appContext); + EXPECT_TRUE(appContext->GetResourceManager() != nullptr); + + info.resourcePath = "/data/app/el1/budle/public/com.ohos.contactsdataability"\ + "/com.ohos.contactsdataability/assets/entry/resources.index"; + bundleInfo.hapModuleInfos.clear(); + bundleInfo.hapModuleInfos.push_back(info); + context_->InitResourceManager(bundleInfo, appContext); + EXPECT_TRUE(appContext->GetResourceManager() != nullptr); + + info.hapPath = "/system/app/com.ohos.contactsdataability/Contacts_DataAbility.hap"; + bundleInfo.hapModuleInfos.clear(); + bundleInfo.hapModuleInfos.push_back(info); + context_->InitResourceManager(bundleInfo, appContext); + EXPECT_TRUE(appContext->GetResourceManager() != nullptr); + + info.resourcePath = ""; + bundleInfo.hapModuleInfos.clear(); + bundleInfo.hapModuleInfos.push_back(info); + context_->InitResourceManager(bundleInfo, appContext); + EXPECT_TRUE(appContext->GetResourceManager() != nullptr); +} } // namespace AppExecFwk } // namespace OHOS