From 73161d4955695e051f7e5a7db29699316b0b9a92 Mon Sep 17 00:00:00 2001 From: zhangzezhong Date: Mon, 16 Jun 2025 16:26:04 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=85=83=E8=83=BD=E5=8A=9B=E3=80=91?= =?UTF-8?q?=E3=80=90Ability=E7=BB=84=E4=BB=B6=E3=80=91=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=AE=BE=E7=BD=AEU1=E4=B8=8B=E7=9A=84AppServiceExtension?= =?UTF-8?q?=E5=BC=80=E6=9C=BA=E8=87=AA=E5=90=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangzezhong --- .../js_ability_auto_startup_manager_utils.cpp | 79 +++-- .../include/auto_startup_info.h | 14 +- .../ability_auto_startup_data_manager.h | 6 +- .../include/ability_auto_startup_service.h | 18 +- .../src/ability_auto_startup_data_manager.cpp | 74 +++-- .../src/ability_auto_startup_service.cpp | 225 +++++++------ .../src/ability_manager_service.cpp | 9 +- services/abilitymgr/src/auto_startup_info.cpp | 14 +- .../BUILD.gn | 3 +- .../abilityautostartupdatamanagera_fuzzer.cpp | 9 +- .../abilityautostartupdatamanagerb_fuzzer.cpp | 3 +- .../abilityautostartupservicea_fuzzer.cpp | 3 +- .../abilityautostartupserviceb_fuzzer.cpp | 40 ++- .../auto_startup_info/auto_startup_info.h | 14 +- ...ability_auto_startup_data_manager_test.cpp | 14 +- ...ility_auto_startup_service_second_test.cpp | 119 +++++-- .../ability_auto_startup_service_test.cpp | 308 +++++++++++++++++- .../BUILD.gn | 1 + .../BUILD.gn | 1 + .../BUILD.gn | 3 + .../ability_manager_service_tenth_test.cpp | 85 +++++ .../BUILD.gn | 1 + 22 files changed, 831 insertions(+), 212 deletions(-) diff --git a/frameworks/js/napi/ability_auto_startup_callback/js_ability_auto_startup_manager_utils.cpp b/frameworks/js/napi/ability_auto_startup_callback/js_ability_auto_startup_manager_utils.cpp index 6781cb86c2b..431f0edfd7e 100644 --- a/frameworks/js/napi/ability_auto_startup_callback/js_ability_auto_startup_manager_utils.cpp +++ b/frameworks/js/napi/ability_auto_startup_callback/js_ability_auto_startup_manager_utils.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023-2024 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -70,7 +70,6 @@ bool IsNormalObject(napi_env env, napi_value value) napi_value CreateJsAutoStartupInfoArray(napi_env env, const std::vector &infoList) { - TAG_LOGD(AAFwkTag::AUTO_STARTUP, "called"); napi_value arrayObj = nullptr; napi_create_array(env, &arrayObj); for (size_t i = 0; i < infoList.size(); ++i) { @@ -89,57 +88,99 @@ napi_value CreateJsAutoStartupInfoArray(napi_env env, const std::vector= 0 && info.appCloneIndex < GlobalConstant::MAX_APP_CLONE_INDEX) { napi_value appCloneIndex = AppExecFwk::WrapInt32ToJS(env, info.appCloneIndex); if (appCloneIndex == nullptr) { TAG_LOGE(AAFwkTag::AUTO_STARTUP, "null appCloneIndex"); - return nullptr; + return false; } if (!AppExecFwk::SetPropertyValueByPropertyName(env, object, "appCloneIndex", appCloneIndex)) { - TAG_LOGE(AAFwkTag::AUTO_STARTUP, "create js AutoStartupInfo failed"); - return nullptr; + TAG_LOGE(AAFwkTag::AUTO_STARTUP, "failed to set basic properties for js AutoStartupInfo"); + return false; } } + return true; +} + +bool AddReadOnlyProperties(napi_env env, napi_value object, const AutoStartupInfo &info) +{ + napi_value userId = AppExecFwk::WrapInt32ToJS(env, info.userId); + if (userId == nullptr) { + TAG_LOGE(AAFwkTag::AUTO_STARTUP, "null userId"); + return false; + } + + napi_value setterUserId = AppExecFwk::WrapInt32ToJS(env, info.setterUserId); + if (setterUserId == nullptr) { + TAG_LOGE(AAFwkTag::AUTO_STARTUP, "null setterUserId"); + return false; + } + + napi_value canUserModify = AppExecFwk::WrapBoolToJS(env, info.canUserModify); + if (canUserModify == nullptr) { + TAG_LOGE(AAFwkTag::AUTO_STARTUP, "null canUserModify"); + return false; + } + + if (!(AppExecFwk::SetPropertyValueByPropertyName(env, object, "userId", userId) && + AppExecFwk::SetPropertyValueByPropertyName(env, object, "setterUserId", setterUserId) && + AppExecFwk::SetPropertyValueByPropertyName(env, object, "canUserModify", canUserModify))) { + TAG_LOGE(AAFwkTag::AUTO_STARTUP, "failed to set readonly properties for js AutoStartupInfo"); + return false; + } + return true; +} + +napi_value CreateJsAutoStartupInfo(napi_env env, const AutoStartupInfo &info) +{ + napi_value object = AppExecFwk::CreateJSObject(env); + if (object == nullptr) { + TAG_LOGE(AAFwkTag::AUTO_STARTUP, "null object"); + return nullptr; + } + + if (!AddBasicProperties(env, object, info)) { + TAG_LOGE(AAFwkTag::AUTO_STARTUP, "failed to add basic properties"); + return nullptr; + } + + if (!AddReadOnlyProperties(env, object, info)) { + TAG_LOGE(AAFwkTag::AUTO_STARTUP, "failed to add readonly properties"); + return nullptr; + } return object; } } // namespace AbilityRuntime diff --git a/interfaces/inner_api/ability_manager/include/auto_startup_info.h b/interfaces/inner_api/ability_manager/include/auto_startup_info.h index d0d3485d156..aa6ab42cc99 100644 --- a/interfaces/inner_api/ability_manager/include/auto_startup_info.h +++ b/interfaces/inner_api/ability_manager/include/auto_startup_info.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -30,6 +30,9 @@ struct AutoStartupInfo : public Parcelable { public: int32_t appCloneIndex = 0; int32_t userId = -1; + int32_t setterUserId = -1; + int32_t currentUserId = -1; + bool canUserModify = false; // Only use in count, don't mashall and unmashall int32_t retryCount = 0; std::string bundleName; @@ -48,6 +51,15 @@ struct AutoStartupStatus { bool isEdmForce = false; int32_t code = -1; }; + +struct AutoStartupAbilityData { + std::string abilityTypeName; + std::string accessTokenId; + int32_t userId = -1; + int32_t setterUserId = -1; + int32_t currentUserId = -1; + bool isVisible = false; +}; } // namespace AbilityRuntime } // namespace OHOS #endif // OHOS_ABILITY_RUNTIME_AUTO_STARTUP_INFO_H \ No newline at end of file diff --git a/services/abilitymgr/include/ability_auto_startup_data_manager.h b/services/abilitymgr/include/ability_auto_startup_data_manager.h index fd4342f0d0e..bdfd8273009 100644 --- a/services/abilitymgr/include/ability_auto_startup_data_manager.h +++ b/services/abilitymgr/include/ability_auto_startup_data_manager.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -52,11 +52,13 @@ private: DistributedKv::Status GetKvStore(); bool CheckKvStore(); DistributedKv::Value ConvertAutoStartupStatusToValue( - bool isAutoStartup, bool isEdmForce, const std::string &abilityTypeName); + const AutoStartupInfo &info, bool isAutoStartup, bool isEdmForce); void ConvertAutoStartupStatusFromValue(const DistributedKv::Value &value, bool &isAutoStartup, bool &isEdmForce); DistributedKv::Key ConvertAutoStartupDataToKey(const AutoStartupInfo &info); AutoStartupInfo ConvertAutoStartupInfoFromKeyAndValue( const DistributedKv::Key &key, const DistributedKv::Value &value); + void ConvertAutoStartupInfoFromKey(const DistributedKv::Key &key, AutoStartupInfo &info); + void ConvertAutoStartupInfoFromValue(const DistributedKv::Value &value, AutoStartupInfo &info); bool IsEqual(const DistributedKv::Key &key, const AutoStartupInfo &info); bool IsEqual(const DistributedKv::Key &key, const std::string &accessTokenId); bool IsEqual(const DistributedKv::Key &key, int32_t userId); diff --git a/services/abilitymgr/include/ability_auto_startup_service.h b/services/abilitymgr/include/ability_auto_startup_service.h index 76f41aee313..87d8346e15c 100644 --- a/services/abilitymgr/include/ability_auto_startup_service.h +++ b/services/abilitymgr/include/ability_auto_startup_service.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -28,6 +28,10 @@ namespace OHOS { namespace AbilityRuntime { +namespace { +constexpr const char* EXTENSION_TYPE_APP_SERVICE = "AppServiceExtension"; +} // namespace + class AbilityAutoStartupService : public std::enable_shared_from_this { public: explicit AbilityAutoStartupService(); @@ -142,17 +146,17 @@ private: bool CheckSelfApplication(const std::string &bundleName); bool GetBundleInfo(const std::string &bundleName, AppExecFwk::BundleInfo &bundleInfo, int32_t uid, int32_t &userId, int32_t appIndex); - bool GetAbilityData(const AutoStartupInfo &info, bool &isVisible, - std::string &abilityTypeName, std::string &accessTokenId, int32_t &userId); - std::string GetAbilityTypeName(AppExecFwk::AbilityInfo abilityInfo); - std::string GetExtensionTypeName(AppExecFwk::ExtensionAbilityInfo extensionInfo); + bool GetAbilityData(const AutoStartupInfo &info, AutoStartupAbilityData &abilityData); + bool IsTargetAbility(const AutoStartupInfo &info, const AppExecFwk::AbilityInfo &abilityInfo); + bool IsTargetExtension(const AutoStartupInfo &info, const AppExecFwk::ExtensionAbilityInfo &extensionInfo); + std::string GetAbilityTypeName(const AppExecFwk::AbilityInfo &abilityInfo); + std::string GetExtensionTypeName(const AppExecFwk::ExtensionAbilityInfo &extensionInfo); std::shared_ptr GetBundleMgrClient(); int32_t CheckPermissionForSystem(); int32_t CheckPermissionForSelf(const std::string &bundleName); int32_t CheckPermissionForEDM(); int32_t InnerApplicationAutoStartupByEDM(const AutoStartupInfo &info, bool isSet, bool flag); - int32_t GetAbilityInfo(const AutoStartupInfo &info, std::string &abilityTypeName, - std::string &accessTokenId, int32_t &userId); + int32_t GetAbilityInfo(const AutoStartupInfo &info, AutoStartupAbilityData &abilityData); void GetCallbackVector(std::vector>& callbackVector); mutable std::mutex autoStartUpMutex_; diff --git a/services/abilitymgr/src/ability_auto_startup_data_manager.cpp b/services/abilitymgr/src/ability_auto_startup_data_manager.cpp index c045fda5138..c5e42a9bd48 100644 --- a/services/abilitymgr/src/ability_auto_startup_data_manager.cpp +++ b/services/abilitymgr/src/ability_auto_startup_data_manager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023-2024 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -36,6 +36,8 @@ const std::string JSON_KEY_IS_EDM_FORCE = "isEdmForce"; const std::string JSON_KEY_TYPE_NAME = "abilityTypeName"; const std::string JSON_KEY_APP_CLONE_INDEX = "appCloneIndex"; const std::string JSON_KEY_ACCESS_TOKENID = "accessTokenId"; +const std::string JSON_KEY_SETTER_USERID = "setterUserId"; +const std::string JSON_KEY_CURRENT_USERID = "currentUserId"; const std::string JSON_KEY_USERID = "userId"; } // namespace const DistributedKv::AppId AbilityAutoStartupDataManager::APP_ID = { "auto_startup_storage" }; @@ -112,16 +114,17 @@ bool AbilityAutoStartupDataManager::CheckKvStore() int32_t AbilityAutoStartupDataManager::InsertAutoStartupData( const AutoStartupInfo &info, bool isAutoStartup, bool isEdmForce) { - if (info.bundleName.empty() || info.abilityName.empty() || info.accessTokenId.empty() || info.userId == -1) { + if (info.bundleName.empty() || info.abilityName.empty() || + info.accessTokenId.empty() || info.currentUserId == -1 || info.userId == -1) { TAG_LOGE(AAFwkTag::AUTO_STARTUP, "Invalid value"); return ERR_INVALID_VALUE; } TAG_LOGD(AAFwkTag::AUTO_STARTUP, "bundleName: %{public}s, moduleName: %{public}s, abilityName: %{public}s," - " accessTokenId: %{public}s, userId: %{public}d", + " accessTokenId: %{public}s, currentUserId: %{public}d, userId: %{public}d", info.bundleName.c_str(), info.moduleName.c_str(), - info.abilityName.c_str(), info.accessTokenId.c_str(), info.userId); + info.abilityName.c_str(), info.accessTokenId.c_str(), info.currentUserId, info.userId); { std::lock_guard lock(kvStorePtrMutex_); if (!CheckKvStore()) { @@ -131,7 +134,7 @@ int32_t AbilityAutoStartupDataManager::InsertAutoStartupData( } DistributedKv::Key key = ConvertAutoStartupDataToKey(info); - DistributedKv::Value value = ConvertAutoStartupStatusToValue(isAutoStartup, isEdmForce, info.abilityTypeName); + DistributedKv::Value value = ConvertAutoStartupStatusToValue(info, isAutoStartup, isEdmForce); DistributedKv::Status status; { std::lock_guard lock(kvStorePtrMutex_); @@ -152,16 +155,17 @@ int32_t AbilityAutoStartupDataManager::InsertAutoStartupData( int32_t AbilityAutoStartupDataManager::UpdateAutoStartupData( const AutoStartupInfo &info, bool isAutoStartup, bool isEdmForce) { - if (info.bundleName.empty() || info.abilityName.empty() || info.accessTokenId.empty() || info.userId == -1) { + if (info.bundleName.empty() || info.abilityName.empty() || + info.accessTokenId.empty() || info.currentUserId == -1 || info.userId == -1) { TAG_LOGW(AAFwkTag::AUTO_STARTUP, "Invalid value"); return ERR_INVALID_VALUE; } TAG_LOGD(AAFwkTag::AUTO_STARTUP, "bundleName: %{public}s, moduleName: %{public}s, abilityName: %{public}s," - " accessTokenId: %{public}s, userId: %{public}d", + " accessTokenId: %{public}s, currentUserId: %{public}d, userId: %{public}d", info.bundleName.c_str(), info.moduleName.c_str(), - info.abilityName.c_str(), info.accessTokenId.c_str(), info.userId); + info.abilityName.c_str(), info.accessTokenId.c_str(), info.currentUserId, info.userId); { std::lock_guard lock(kvStorePtrMutex_); if (!CheckKvStore()) { @@ -184,7 +188,7 @@ int32_t AbilityAutoStartupDataManager::UpdateAutoStartupData( } return ERR_INVALID_OPERATION; } - DistributedKv::Value value = ConvertAutoStartupStatusToValue(isAutoStartup, isEdmForce, info.abilityTypeName); + DistributedKv::Value value = ConvertAutoStartupStatusToValue(info, isAutoStartup, isEdmForce); { std::lock_guard lock(kvStorePtrMutex_); status = kvStorePtr_->Put(key, value); @@ -203,16 +207,17 @@ int32_t AbilityAutoStartupDataManager::UpdateAutoStartupData( int32_t AbilityAutoStartupDataManager::DeleteAutoStartupData(const AutoStartupInfo &info) { - if (info.bundleName.empty() || info.abilityName.empty() || info.accessTokenId.empty() || info.userId == -1) { + if (info.bundleName.empty() || info.abilityName.empty() || + info.accessTokenId.empty() || info.currentUserId == -1 || info.userId == -1) { TAG_LOGW(AAFwkTag::AUTO_STARTUP, "Invalid value"); return ERR_INVALID_VALUE; } TAG_LOGD(AAFwkTag::AUTO_STARTUP, "bundleName: %{public}s, moduleName: %{public}s, abilityName: %{public}s," - " accessTokenId: %{public}s, userId: %{public}d", + " accessTokenId: %{public}s, currentUserId: %{public}d, userId:%{public}d", info.bundleName.c_str(), info.moduleName.c_str(), - info.abilityName.c_str(), info.accessTokenId.c_str(), info.userId); + info.abilityName.c_str(), info.accessTokenId.c_str(), info.currentUserId, info.userId); { std::lock_guard lock(kvStorePtrMutex_); if (!CheckKvStore()) { @@ -295,7 +300,8 @@ int32_t AbilityAutoStartupDataManager::DeleteAutoStartupData(const std::string & AutoStartupStatus AbilityAutoStartupDataManager::QueryAutoStartupData(const AutoStartupInfo &info) { AutoStartupStatus asustatus; - if (info.bundleName.empty() || info.abilityName.empty() || info.accessTokenId.empty() || info.userId == -1) { + if (info.bundleName.empty() || info.abilityName.empty() || + info.accessTokenId.empty() || info.currentUserId == -1 || info.userId == -1) { TAG_LOGW(AAFwkTag::AUTO_STARTUP, "Invalid value"); asustatus.code = ERR_INVALID_VALUE; return asustatus; @@ -303,9 +309,9 @@ AutoStartupStatus AbilityAutoStartupDataManager::QueryAutoStartupData(const Auto TAG_LOGD(AAFwkTag::AUTO_STARTUP, "bundleName: %{public}s, moduleName: %{public}s, abilityName: %{public}s," - " accessTokenId: %{public}s, userId: %{public}d", + " accessTokenId: %{public}s, currentUserId: %{public}d, userId: %{public}d", info.bundleName.c_str(), info.moduleName.c_str(), - info.abilityName.c_str(), info.accessTokenId.c_str(), info.userId); + info.abilityName.c_str(), info.accessTokenId.c_str(), info.currentUserId, info.userId); { std::lock_guard lock(kvStorePtrMutex_); if (!CheckKvStore()) { @@ -420,12 +426,13 @@ int32_t AbilityAutoStartupDataManager::GetCurrentAppAutoStartupData( } DistributedKv::Value AbilityAutoStartupDataManager::ConvertAutoStartupStatusToValue( - bool isAutoStartup, bool isEdmForce, const std::string &abilityTypeName) + const AutoStartupInfo &info, bool isAutoStartup, bool isEdmForce) { nlohmann::json jsonObject = nlohmann::json { { JSON_KEY_IS_AUTO_STARTUP, isAutoStartup }, { JSON_KEY_IS_EDM_FORCE, isEdmForce }, - { JSON_KEY_TYPE_NAME, abilityTypeName }, + { JSON_KEY_TYPE_NAME, info.abilityTypeName }, + { JSON_KEY_SETTER_USERID, info.setterUserId }, }; DistributedKv::Value value(jsonObject.dump()); TAG_LOGD(AAFwkTag::AUTO_STARTUP, "value: %{public}s", value.ToString().c_str()); @@ -455,7 +462,8 @@ DistributedKv::Key AbilityAutoStartupDataManager::ConvertAutoStartupDataToKey(co { JSON_KEY_MODULE_NAME, info.moduleName }, { JSON_KEY_ABILITY_NAME, info.abilityName }, { JSON_KEY_APP_CLONE_INDEX, info.appCloneIndex }, - { JSON_KEY_ACCESS_TOKENID, info.accessTokenId }, + { JSON_KEY_ACCESS_TOKENID, info.accessTokenId }, + { JSON_KEY_CURRENT_USERID, info.currentUserId }, { JSON_KEY_USERID, info.userId }, }; DistributedKv::Key key(jsonObject.dump()); @@ -467,10 +475,18 @@ AutoStartupInfo AbilityAutoStartupDataManager::ConvertAutoStartupInfoFromKeyAndV const DistributedKv::Key &key, const DistributedKv::Value &value) { AutoStartupInfo info; + ConvertAutoStartupInfoFromKey(key, info); + ConvertAutoStartupInfoFromValue(value, info); + return info; +} + +void AbilityAutoStartupDataManager::ConvertAutoStartupInfoFromKey( + const DistributedKv::Key &key, AutoStartupInfo &info) +{ nlohmann::json jsonObject = nlohmann::json::parse(key.ToString(), nullptr, false); if (jsonObject.is_discarded()) { TAG_LOGE(AAFwkTag::AUTO_STARTUP, "parse jsonObject fail"); - return info; + return; } if (jsonObject.contains(JSON_KEY_BUNDLE_NAME) && jsonObject[JSON_KEY_BUNDLE_NAME].is_string()) { @@ -496,17 +512,28 @@ AutoStartupInfo AbilityAutoStartupDataManager::ConvertAutoStartupInfoFromKeyAndV if (jsonObject.contains(JSON_KEY_USERID) && jsonObject[JSON_KEY_USERID].is_number()) { info.userId = jsonObject.at(JSON_KEY_USERID).get(); } +} +void AbilityAutoStartupDataManager::ConvertAutoStartupInfoFromValue( + const DistributedKv::Value &value, AutoStartupInfo &info) +{ nlohmann::json jsonValueObject = nlohmann::json::parse(value.ToString(), nullptr, false); if (jsonValueObject.is_discarded()) { TAG_LOGE(AAFwkTag::AUTO_STARTUP, "parse jsonValueObject fail"); - return info; + return; } if (jsonValueObject.contains(JSON_KEY_TYPE_NAME) && jsonValueObject[JSON_KEY_TYPE_NAME].is_string()) { info.abilityTypeName = jsonValueObject.at(JSON_KEY_TYPE_NAME).get(); } - return info; + + if (jsonValueObject.contains(JSON_KEY_IS_EDM_FORCE) && jsonValueObject[JSON_KEY_IS_EDM_FORCE].is_boolean()) { + info.canUserModify = !(jsonValueObject.at(JSON_KEY_IS_EDM_FORCE).get()); + } + + if (jsonValueObject.contains(JSON_KEY_SETTER_USERID) && jsonValueObject[JSON_KEY_SETTER_USERID].is_number()) { + info.setterUserId = jsonValueObject.at(JSON_KEY_SETTER_USERID).get(); + } } bool AbilityAutoStartupDataManager::IsEqual(const DistributedKv::Key &key, const AutoStartupInfo &info) @@ -522,6 +549,7 @@ bool AbilityAutoStartupDataManager::IsEqual(const DistributedKv::Key &key, const || !AAFwk::JsonUtils::GetInstance().IsEqual(jsonObject, JSON_KEY_MODULE_NAME, info.moduleName, true) || !AAFwk::JsonUtils::GetInstance().IsEqual(jsonObject, JSON_KEY_APP_CLONE_INDEX, info.appCloneIndex) || !AAFwk::JsonUtils::GetInstance().IsEqual(jsonObject, JSON_KEY_ACCESS_TOKENID, info.accessTokenId) + || !AAFwk::JsonUtils::GetInstance().IsEqual(jsonObject, JSON_KEY_CURRENT_USERID, info.currentUserId) || !AAFwk::JsonUtils::GetInstance().IsEqual(jsonObject, JSON_KEY_USERID, info.userId)) { return false; } @@ -552,8 +580,8 @@ bool AbilityAutoStartupDataManager::IsEqual(const DistributedKv::Key &key, int32 return false; } - if (jsonObject.contains(JSON_KEY_USERID) && jsonObject[JSON_KEY_USERID].is_number()) { - if (userId == jsonObject.at(JSON_KEY_USERID).get()) { + if (jsonObject.contains(JSON_KEY_CURRENT_USERID) && jsonObject[JSON_KEY_CURRENT_USERID].is_number()) { + if (userId == jsonObject.at(JSON_KEY_CURRENT_USERID).get()) { return true; } } diff --git a/services/abilitymgr/src/ability_auto_startup_service.cpp b/services/abilitymgr/src/ability_auto_startup_service.cpp index 374063092a4..55fffe9e8f1 100644 --- a/services/abilitymgr/src/ability_auto_startup_service.cpp +++ b/services/abilitymgr/src/ability_auto_startup_service.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023-2024 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -17,6 +17,7 @@ #include "ability_auto_startup_data_manager.h" #include "ability_manager_service.h" +#include "auto_startup_callback_proxy.h" #include "auto_startup_interface.h" #include "global_constant.h" #include "hilog_tag_wrapper.h" @@ -28,6 +29,7 @@ namespace AbilityRuntime { using namespace OHOS::AAFwk; namespace { constexpr char PRODUCT_APPBOOT_SETTING_ENABLED[] = "const.product.appboot.setting.enabled"; +constexpr int32_t U1_USER_ID = 1; } // namespace AbilityAutoStartupService::AbilityAutoStartupService() {} @@ -95,32 +97,27 @@ int32_t AbilityAutoStartupService::SetApplicationAutoStartup(const AutoStartupIn { TAG_LOGD(AAFwkTag::AUTO_STARTUP, "Called, bundleName: %{public}s, moduleName: %{public}s, abilityName: %{public}s," - " accessTokenId: %{public}s, userId: %{public}d", + " accessTokenId: %{public}s, setterUserId: %{public}d", info.bundleName.c_str(), info.moduleName.c_str(), - info.abilityName.c_str(), info.accessTokenId.c_str(), info.userId); + info.abilityName.c_str(), info.accessTokenId.c_str(), info.setterUserId); int32_t code = CheckPermissionForSystem(); if (code != ERR_OK) { return code; } - bool isVisible; - int32_t userId; - std::string abilityTypeName; - std::string accessTokenId; - if (!GetAbilityData(info, isVisible, abilityTypeName, accessTokenId, userId)) { - TAG_LOGE(AAFwkTag::AUTO_STARTUP, "GetAbilityData fail"); - return INNER_ERR; - } - - if (!isVisible) { - TAG_LOGE(AAFwkTag::AUTO_STARTUP, "not visible"); - return ABILITY_VISIBLE_FALSE_DENY_REQUEST; + AutoStartupAbilityData abilityData; + code = GetAbilityInfo(info, abilityData); + if (code != ERR_OK) { + return code; } AutoStartupInfo fullInfo(info); - fullInfo.abilityTypeName = abilityTypeName; - fullInfo.userId = userId; - fullInfo.accessTokenId = accessTokenId; + fullInfo.abilityTypeName = abilityData.abilityTypeName; + fullInfo.setterUserId = abilityData.setterUserId; + fullInfo.accessTokenId = abilityData.accessTokenId; + fullInfo.userId = abilityData.userId; + fullInfo.currentUserId = abilityData.currentUserId; + fullInfo.canUserModify = true; return InnerSetApplicationAutoStartup(fullInfo); } @@ -163,32 +160,27 @@ int32_t AbilityAutoStartupService::CancelApplicationAutoStartup(const AutoStartu { TAG_LOGD(AAFwkTag::AUTO_STARTUP, "Called, bundleName: %{public}s, moduleName: %{public}s, abilityName: %{public}s," - " accessTokenId: %{public}s, userId: %{public}d", + " accessTokenId: %{public}s, setterUserId: %{public}d", info.bundleName.c_str(), info.moduleName.c_str(), - info.abilityName.c_str(), info.accessTokenId.c_str(), info.userId); + info.abilityName.c_str(), info.accessTokenId.c_str(), info.setterUserId); int32_t code = CheckPermissionForSystem(); if (code != ERR_OK) { return code; } - bool isVisible; - std::string abilityTypeName; - std::string accessTokenId; - int32_t userId; - if (!GetAbilityData(info, isVisible, abilityTypeName, accessTokenId, userId)) { - TAG_LOGE(AAFwkTag::AUTO_STARTUP, "GetAbilityData fail"); - return INNER_ERR; - } - - if (!isVisible) { - TAG_LOGE(AAFwkTag::AUTO_STARTUP, "not visible"); - return ABILITY_VISIBLE_FALSE_DENY_REQUEST; + AutoStartupAbilityData abilityData; + code = GetAbilityInfo(info, abilityData); + if (code != ERR_OK) { + return code; } AutoStartupInfo fullInfo(info); - fullInfo.abilityTypeName = abilityTypeName; - fullInfo.accessTokenId = accessTokenId; - fullInfo.userId = userId; + fullInfo.abilityTypeName = abilityData.abilityTypeName; + fullInfo.accessTokenId = abilityData.accessTokenId; + fullInfo.setterUserId = abilityData.setterUserId; + fullInfo.userId = abilityData.userId; + fullInfo.currentUserId = abilityData.currentUserId; + fullInfo.canUserModify = true; return InnerCancelApplicationAutoStartup(fullInfo); } @@ -276,8 +268,7 @@ int32_t AbilityAutoStartupService::CheckAutoStartupData(const std::string &bundl bool isFound = false; for (auto info : infoList) { for (auto abilityInfo : bundleInfo.abilityInfos) { - if ((abilityInfo.bundleName == info.bundleName) && (abilityInfo.name == info.abilityName) && - (info.moduleName.empty() || (abilityInfo.moduleName == info.moduleName))) { + if (IsTargetAbility(info, abilityInfo)) { isFound = true; break; } @@ -302,9 +293,9 @@ void AbilityAutoStartupService::ExecuteCallbacks(bool isCallOn, const AutoStartu { TAG_LOGD(AAFwkTag::AUTO_STARTUP, "Called, bundleName: %{public}s, moduleName: %{public}s, abilityName: %{public}s," - " accessTokenId: %{public}s, userId: %{public}d", + " accessTokenId: %{public}s, setterUserId: %{public}d", info.bundleName.c_str(), info.moduleName.c_str(), - info.abilityName.c_str(), info.accessTokenId.c_str(), info.userId); + info.abilityName.c_str(), info.accessTokenId.c_str(), info.setterUserId); std::vector> callbackVector; GetCallbackVector(callbackVector); for (auto& item : callbackVector) { @@ -412,14 +403,14 @@ bool AbilityAutoStartupService::CheckSelfApplication(const std::string &bundleNa bool AbilityAutoStartupService::GetBundleInfo(const std::string &bundleName, AppExecFwk::BundleInfo &bundleInfo, int32_t uid, int32_t &userId, int32_t appIndex) { - TAG_LOGD(AAFwkTag::AUTO_STARTUP, "called"); + TAG_LOGD(AAFwkTag::AUTO_STARTUP, "uid: %{public}d", uid); if (uid == -1) { userId = IPCSkeleton::GetCallingUid() / AppExecFwk::Constants::BASE_USER_RANGE; } else { userId = uid / AppExecFwk::Constants::BASE_USER_RANGE; } - if (userId == 0) { + if ((userId == U0_USER_ID) || (userId == U1_USER_ID)) { auto abilityMgr = DelayedSingleton::GetInstance(); if (abilityMgr == nullptr) { TAG_LOGE(AAFwkTag::AUTO_STARTUP, "null abilityMgr"); @@ -437,11 +428,11 @@ bool AbilityAutoStartupService::GetBundleInfo(const std::string &bundleName, if (appIndex == 0) { auto flags = AppExecFwk::BundleFlag::GET_BUNDLE_WITH_ABILITIES | AppExecFwk::BundleFlag::GET_BUNDLE_WITH_EXTENSION_INFO; - if (!IN_PROCESS_CALL(bundleMgrHelper->GetBundleInfo( - bundleName, static_cast(flags), bundleInfo, userId))) { - TAG_LOGE(AAFwkTag::AUTO_STARTUP, "get bundleInfo fail"); - return false; - } + if (!IN_PROCESS_CALL(bundleMgrHelper->GetBundleInfo( + bundleName, static_cast(flags), bundleInfo, userId))) { + TAG_LOGE(AAFwkTag::AUTO_STARTUP, "get bundleInfo fail"); + return false; + } } else if (appIndex <= GlobalConstant::MAX_APP_CLONE_INDEX) { auto bundleFlag = static_cast(AppExecFwk::GetBundleInfoFlag::GET_BUNDLE_INFO_WITH_APPLICATION) + static_cast(AppExecFwk::GetBundleInfoFlag::GET_BUNDLE_INFO_WITH_ABILITY) + @@ -449,78 +440,93 @@ bool AbilityAutoStartupService::GetBundleInfo(const std::string &bundleName, static_cast(AppExecFwk::GetBundleInfoFlag::GET_BUNDLE_INFO_WITH_HAP_MODULE); auto bundleMgrResult = IN_PROCESS_CALL( bundleMgrHelper->GetCloneBundleInfo(bundleName, bundleFlag, appIndex, bundleInfo, userId)); - if (bundleMgrResult != ERR_OK) { - TAG_LOGE(AAFwkTag::AUTO_STARTUP, "error bundleMgrResult"); - return false; - } + if (bundleMgrResult != ERR_OK) { + TAG_LOGE(AAFwkTag::AUTO_STARTUP, "error bundleMgrResult"); + return false; + } } else { - if (!IN_PROCESS_CALL(bundleMgrHelper->GetSandboxBundleInfo(bundleName, appIndex, userId, bundleInfo))) { - TAG_LOGE(AAFwkTag::AUTO_STARTUP, "GetSandboxBundleInfo fail"); - return false; - } + if (!IN_PROCESS_CALL(bundleMgrHelper->GetSandboxBundleInfo(bundleName, appIndex, userId, bundleInfo))) { + TAG_LOGE(AAFwkTag::AUTO_STARTUP, "GetSandboxBundleInfo fail"); + return false; + } } return true; } -bool AbilityAutoStartupService::GetAbilityData(const AutoStartupInfo &info, bool &isVisible, - std::string &abilityTypeName, std::string &accessTokenId, int32_t &userId) +bool AbilityAutoStartupService::GetAbilityData(const AutoStartupInfo &info, AutoStartupAbilityData &abilityData) { TAG_LOGD(AAFwkTag::AUTO_STARTUP, "bundleName: %{public}s, moduleName: %{public}s, abilityName: %{public}s," - " accessTokenId: %{public}s, userId: %{public}d", + " accessTokenId: %{public}s, setterUserId: %{public}d", info.bundleName.c_str(), info.moduleName.c_str(), - info.abilityName.c_str(), info.accessTokenId.c_str(), info.userId); + info.abilityName.c_str(), info.accessTokenId.c_str(), info.setterUserId); AppExecFwk::BundleInfo bundleInfo; - int32_t currentUserId; - int32_t uid = bundleInfo.applicationInfo.uid; + int32_t currentUserId = -1; + int32_t uid = -1; if (!GetBundleInfo(info.bundleName, bundleInfo, uid, currentUserId, info.appCloneIndex)) { TAG_LOGE(AAFwkTag::AUTO_STARTUP, "GetBundleInfo fail"); return false; } - userId = currentUserId; auto accessTokenIdStr = bundleInfo.applicationInfo.accessTokenId; - accessTokenId = std::to_string(accessTokenIdStr); + abilityData.accessTokenId = std::to_string(accessTokenIdStr); + abilityData.setterUserId = IPCSkeleton::GetCallingUid() / AppExecFwk::Constants::BASE_USER_RANGE; + abilityData.userId = bundleInfo.applicationInfo.uid / AppExecFwk::Constants::BASE_USER_RANGE; + abilityData.currentUserId = currentUserId; for (const auto& hapModuleInfo : bundleInfo.hapModuleInfos) { for (const auto& abilityInfo : hapModuleInfo.abilityInfos) { - if ((abilityInfo.bundleName == info.bundleName) && (abilityInfo.name == info.abilityName) && - (info.moduleName.empty() || (abilityInfo.moduleName == info.moduleName))) { - isVisible = abilityInfo.visible; - abilityTypeName = GetAbilityTypeName(abilityInfo); - TAG_LOGD(AAFwkTag::AUTO_STARTUP, "Get ability info success"); + if (IsTargetAbility(info, abilityInfo)) { + abilityData.isVisible = abilityInfo.visible; + abilityData.abilityTypeName = GetAbilityTypeName(abilityInfo); return true; } } } - for (auto extensionInfo : bundleInfo.extensionInfos) { - if ((extensionInfo.bundleName == info.bundleName) && (extensionInfo.name == info.abilityName)) { - if (info.moduleName.empty() || (extensionInfo.moduleName == info.moduleName)) { - isVisible = extensionInfo.visible; - abilityTypeName = GetExtensionTypeName(extensionInfo); - TAG_LOGD(AAFwkTag::AUTO_STARTUP, "Get extension info success"); - return true; - } + for (const auto& extensionInfo : bundleInfo.extensionInfos) { + if (IsTargetExtension(info, extensionInfo)) { + abilityData.isVisible = extensionInfo.visible; + abilityData.abilityTypeName = GetExtensionTypeName(extensionInfo); + return true; } } return false; } -std::string AbilityAutoStartupService::GetAbilityTypeName(AppExecFwk::AbilityInfo abilityInfo) +bool AbilityAutoStartupService::IsTargetAbility(const AutoStartupInfo &info, + const AppExecFwk::AbilityInfo &abilityInfo) +{ + return ((abilityInfo.bundleName == info.bundleName) && + (abilityInfo.name == info.abilityName) && + (info.moduleName.empty() || abilityInfo.moduleName == info.moduleName)); +} + +bool AbilityAutoStartupService::IsTargetExtension(const AutoStartupInfo &info, + const AppExecFwk::ExtensionAbilityInfo &extensionInfo) +{ + return ((extensionInfo.bundleName == info.bundleName) && + (extensionInfo.name == info.abilityName) && + (info.moduleName.empty() || extensionInfo.moduleName == info.moduleName)); +} + +std::string AbilityAutoStartupService::GetAbilityTypeName(const AppExecFwk::AbilityInfo &abilityInfo) { - std::string abilityTypeName; if (abilityInfo.type == AppExecFwk::AbilityType::PAGE) { - abilityTypeName = "UIAbility"; + return "UIAbility"; } - return abilityTypeName; + return ""; } -std::string AbilityAutoStartupService::GetExtensionTypeName(AppExecFwk::ExtensionAbilityInfo extensionInfo) +std::string AbilityAutoStartupService::GetExtensionTypeName( + const AppExecFwk::ExtensionAbilityInfo &extensionInfo) { - std::string abilityTypeName; - if (extensionInfo.type == AppExecFwk::ExtensionAbilityType::SERVICE) { - abilityTypeName = "ServiceExtension"; + switch (extensionInfo.type) { + case AppExecFwk::ExtensionAbilityType::APP_SERVICE: + return EXTENSION_TYPE_APP_SERVICE; + case AppExecFwk::ExtensionAbilityType::SERVICE: + return "ServiceExtension"; + default: + return ""; } - return abilityTypeName; } std::shared_ptr AbilityAutoStartupService::GetBundleMgrClient() @@ -568,19 +574,24 @@ int32_t AbilityAutoStartupService::CheckPermissionForSelf(const std::string &bun } int32_t AbilityAutoStartupService::GetAbilityInfo( - const AutoStartupInfo &info, std::string &abilityTypeName, std::string &accessTokenId, int32_t &userId) + const AutoStartupInfo &info, AutoStartupAbilityData &abilityData) { - bool isVisible = false; - if (!GetAbilityData(info, isVisible, abilityTypeName, accessTokenId, userId)) { + if (!GetAbilityData(info, abilityData)) { TAG_LOGE(AAFwkTag::AUTO_STARTUP, "GetAbilityData fail"); return INNER_ERR; } - if (!isVisible) { + if (!abilityData.isVisible) { TAG_LOGE(AAFwkTag::AUTO_STARTUP, "not visible"); return ABILITY_VISIBLE_FALSE_DENY_REQUEST; } + if ((abilityData.abilityTypeName == EXTENSION_TYPE_APP_SERVICE) && + (abilityData.userId != U1_USER_ID)) { + TAG_LOGE(AAFwkTag::AUTO_STARTUP, "AppServiceExtension does not belong to U1"); + return INNER_ERR; + } + return ERR_OK; } @@ -590,18 +601,18 @@ int32_t AbilityAutoStartupService::SetApplicationAutoStartupByEDM(const AutoStar if (errorCode != ERR_OK) { return errorCode; } - int32_t userId; - std::string typeName; - std::string accessTokenId; - - errorCode = GetAbilityInfo(info, typeName, accessTokenId, userId); + AutoStartupAbilityData abilityData; + errorCode = GetAbilityInfo(info, abilityData); if (errorCode != ERR_OK) { return errorCode; } AutoStartupInfo fullInfo(info); - fullInfo.abilityTypeName = typeName; - fullInfo.accessTokenId = accessTokenId; - fullInfo.userId = userId; + fullInfo.abilityTypeName = abilityData.abilityTypeName; + fullInfo.accessTokenId = abilityData.accessTokenId; + fullInfo.setterUserId = abilityData.setterUserId; + fullInfo.userId = abilityData.userId; + fullInfo.currentUserId = abilityData.currentUserId; + fullInfo.canUserModify = !flag; return InnerApplicationAutoStartupByEDM(fullInfo, true, flag); } @@ -611,17 +622,18 @@ int32_t AbilityAutoStartupService::CancelApplicationAutoStartupByEDM(const AutoS if (errorCode != ERR_OK) { return errorCode; } - int32_t userId; - std::string typeName; - std::string accessTokenId; - errorCode = GetAbilityInfo(info, typeName, accessTokenId, userId); + AutoStartupAbilityData abilityData; + errorCode = GetAbilityInfo(info, abilityData); if (errorCode != ERR_OK) { return errorCode; } AutoStartupInfo fullInfo(info); - fullInfo.abilityTypeName = typeName; - fullInfo.accessTokenId = accessTokenId; - fullInfo.userId = userId; + fullInfo.abilityTypeName = abilityData.abilityTypeName; + fullInfo.accessTokenId = abilityData.accessTokenId; + fullInfo.setterUserId = abilityData.setterUserId; + fullInfo.userId = abilityData.userId; + fullInfo.currentUserId = abilityData.currentUserId; + fullInfo.canUserModify = !flag; return InnerApplicationAutoStartupByEDM(fullInfo, false, flag); } @@ -629,9 +641,9 @@ int32_t AbilityAutoStartupService::InnerApplicationAutoStartupByEDM(const AutoSt { TAG_LOGD(AAFwkTag::AUTO_STARTUP, "Called, bundleName: %{public}s, moduleName: %{public}s, abilityName: %{public}s, accessTokenId: %{public}s," - " userId: %{public}d, isSet: %{public}d, flag: %{public}d", + " setterUserId: %{public}d, isSet: %{public}d, flag: %{public}d", info.bundleName.c_str(), info.moduleName.c_str(), info.abilityName.c_str(), - info.accessTokenId.c_str(), info.userId, isSet, flag); + info.accessTokenId.c_str(), info.setterUserId, isSet, flag); AutoStartupStatus status = DelayedSingleton::GetInstance()->QueryAutoStartupData(info); if (status.code != ERR_OK && status.code != ERR_NAME_NOT_FOUND) { @@ -661,6 +673,9 @@ int32_t AbilityAutoStartupService::InnerApplicationAutoStartupByEDM(const AutoSt if (status.isEdmForce != flag) { result = DelayedSingleton::GetInstance()->UpdateAutoStartupData(info, isSet, flag); + if (result == ERR_OK) { + ExecuteCallbacks(isSet, info); + } return result; } diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 87192be9a16..d7ac601b3b3 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -7821,7 +7821,14 @@ void AbilityManagerService::StartAutoStartupApps(std::queue inf if (info.appCloneIndex >= 0 && info.appCloneIndex <= AbilityRuntime::GlobalConstant::MAX_APP_CLONE_INDEX) { want.SetParam(Want::PARAM_APP_CLONE_INDEX_KEY, info.appCloneIndex); } - if (StartAbility(want) != ERR_OK && info.retryCount > 0) { + int32_t result = ERR_OK; + if (info.abilityTypeName == AbilityRuntime::EXTENSION_TYPE_APP_SERVICE) { + result = StartExtensionAbility( + want, nullptr, DEFAULT_INVAL_VALUE, AppExecFwk::ExtensionAbilityType::APP_SERVICE); + } else { + result = StartAbility(want); + } + if ((result != ERR_OK) && (info.retryCount > 0)) { info.retryCount--; infoQueue.push(info); } diff --git a/services/abilitymgr/src/auto_startup_info.cpp b/services/abilitymgr/src/auto_startup_info.cpp index c3774172d34..7c3b62b33cc 100644 --- a/services/abilitymgr/src/auto_startup_info.cpp +++ b/services/abilitymgr/src/auto_startup_info.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -25,6 +25,9 @@ bool AutoStartupInfo::ReadFromParcel(Parcel &parcel) moduleName = Str16ToStr8(parcel.ReadString16()); abilityTypeName = Str16ToStr8(parcel.ReadString16()); appCloneIndex = parcel.ReadInt32(); + userId = parcel.ReadInt32(); + setterUserId = parcel.ReadInt32(); + canUserModify = parcel.ReadBool(); return true; } @@ -59,6 +62,15 @@ bool AutoStartupInfo::Marshalling(Parcel &parcel) const if (!parcel.WriteInt32(appCloneIndex)) { return false; } + if (!parcel.WriteInt32(userId)) { + return false; + } + if (!parcel.WriteInt32(setterUserId)) { + return false; + } + if (!parcel.WriteBool(canUserModify)) { + return false; + } return true; } } // namespace AbilityRuntime diff --git a/test/fuzztest/abilityautostartupdatamanager_fuzzer/BUILD.gn b/test/fuzztest/abilityautostartupdatamanager_fuzzer/BUILD.gn index f41703a5e43..91df483d733 100644 --- a/test/fuzztest/abilityautostartupdatamanager_fuzzer/BUILD.gn +++ b/test/fuzztest/abilityautostartupdatamanager_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. +# Copyright (c) 2024-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -62,6 +62,7 @@ ohos_fuzztest("AbilityAutoStartupDataManagerFuzzTest") { "bundle_framework:appexecfwk_base", "bundle_framework:appexecfwk_core", "c_utils:utils", + "common_event_service:cesfwk_core", "common_event_service:cesfwk_innerkits", "config_policy:configpolicy_util", "ffrt:libffrt", diff --git a/test/fuzztest/abilityautostartupdatamanagera_fuzzer/abilityautostartupdatamanagera_fuzzer.cpp b/test/fuzztest/abilityautostartupdatamanagera_fuzzer/abilityautostartupdatamanagera_fuzzer.cpp index a003af87b11..a613b9d6289 100755 --- a/test/fuzztest/abilityautostartupdatamanagera_fuzzer/abilityautostartupdatamanagera_fuzzer.cpp +++ b/test/fuzztest/abilityautostartupdatamanagera_fuzzer/abilityautostartupdatamanagera_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -72,6 +72,7 @@ void AbilityAutoStartupDataManagerFuzztest1(bool boolParam, std::string &stringP std::shared_ptr dataMgr = std::make_shared(); dataMgr->CheckKvStore(); AutoStartupInfo info1; + info1.currentUserId = int32Param; info1.userId = int32Param; dataMgr->InsertAutoStartupData(info1, boolParam, boolParam); // branch info1.bundleName empty info1.bundleName = "com.example.fuzzTest"; @@ -82,6 +83,7 @@ void AbilityAutoStartupDataManagerFuzztest1(bool boolParam, std::string &stringP dataMgr->InsertAutoStartupData(info1, boolParam, boolParam); // branch info1.accestoken empty AutoStartupInfo info2; + info2.currentUserId = int32Param; info2.userId = int32Param; dataMgr->UpdateAutoStartupData(info2, boolParam, boolParam); // branch info2.bundleName empty info2.bundleName = "com.example.fuzzTest"; @@ -92,6 +94,7 @@ void AbilityAutoStartupDataManagerFuzztest1(bool boolParam, std::string &stringP dataMgr->UpdateAutoStartupData(info2, boolParam, boolParam); // branch info2.accestoken empty AutoStartupInfo info3; + info3.currentUserId = int32Param; info3.userId = int32Param; dataMgr->UpdateAutoStartupData(info3, boolParam, boolParam); // branch info3.bundleName empty info3.bundleName = "com.example.fuzzTest"; @@ -104,6 +107,7 @@ void AbilityAutoStartupDataManagerFuzztest1(bool boolParam, std::string &stringP dataMgr->DeleteAutoStartupData(stringParam, int32Param); // called AutoStartupInfo info4; + info4.currentUserId = int32Param; info4.userId = int32Param; dataMgr->QueryAutoStartupData(info4); // branch info3.bundleName empty info4.bundleName = "com.example.fuzzTest"; @@ -123,8 +127,9 @@ void AbilityAutoStartupDataManagerFuzztest2(bool boolParam, std::string &stringP { std::shared_ptr dataMgr = std::make_shared(); AutoStartupInfo info1; + info1.currentUserId = int32Param; info1.userId = int32Param; - dataMgr->ConvertAutoStartupStatusToValue(boolParam, boolParam, info1.abilityName); + dataMgr->ConvertAutoStartupStatusToValue(info1, boolParam, boolParam); DistributedKv::Value value1(jsonStr1); dataMgr->ConvertAutoStartupStatusFromValue(value1, boolParam, boolParam); // branch json diff --git a/test/fuzztest/abilityautostartupdatamanagerb_fuzzer/abilityautostartupdatamanagerb_fuzzer.cpp b/test/fuzztest/abilityautostartupdatamanagerb_fuzzer/abilityautostartupdatamanagerb_fuzzer.cpp index d59ec4339f1..e7ecc0467dc 100755 --- a/test/fuzztest/abilityautostartupdatamanagerb_fuzzer/abilityautostartupdatamanagerb_fuzzer.cpp +++ b/test/fuzztest/abilityautostartupdatamanagerb_fuzzer/abilityautostartupdatamanagerb_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -82,6 +82,7 @@ void AbilityAutoStartupDataManagerFuzztest1(bool boolParam, std::string &stringP info.abilityName = "MainAbility"; info.appCloneIndex = int32Param; info.accessTokenId = "accessTokenId"; + info.currentUserId = int32Param; info.userId = int32Param; dataMgr->ConvertAutoStartupDataToKey(info); diff --git a/test/fuzztest/abilityautostartupservicea_fuzzer/abilityautostartupservicea_fuzzer.cpp b/test/fuzztest/abilityautostartupservicea_fuzzer/abilityautostartupservicea_fuzzer.cpp index cdc6e7b35e2..f0f990d3078 100755 --- a/test/fuzztest/abilityautostartupservicea_fuzzer/abilityautostartupservicea_fuzzer.cpp +++ b/test/fuzztest/abilityautostartupservicea_fuzzer/abilityautostartupservicea_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -79,6 +79,7 @@ void AbilityStartupServiceFuzztest(bool boolParam, std::string &stringParam, int info.abilityName = "MainAbility"; info.appCloneIndex = int32Param; info.accessTokenId = "accessTokenId"; + info.currentUserId = int32Param; info.userId = int32Param; service->SetApplicationAutoStartup(info); service->InnerSetApplicationAutoStartup(info); diff --git a/test/fuzztest/abilityautostartupserviceb_fuzzer/abilityautostartupserviceb_fuzzer.cpp b/test/fuzztest/abilityautostartupserviceb_fuzzer/abilityautostartupserviceb_fuzzer.cpp index ac92243590e..5775122c366 100755 --- a/test/fuzztest/abilityautostartupserviceb_fuzzer/abilityautostartupserviceb_fuzzer.cpp +++ b/test/fuzztest/abilityautostartupserviceb_fuzzer/abilityautostartupserviceb_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -88,31 +88,57 @@ void AbilityStartupServiceFuzztest1(bool boolParam, std::string &stringParam, in AppExecFwk::BundleInfo bundleInfo; service->GetBundleInfo(stringParam, bundleInfo, int32Param, int32Param, int32Param); // branch AutoStartupInfo info; - service->GetAbilityData(info, boolParam, stringParam, stringParam, int32Param); // branch AppExecFwk::AbilityInfo abilityInfo; + abilityInfo.bundleName = stringParam; + abilityInfo.name = stringParam; + abilityInfo.moduleName = stringParam; service->GetAbilityTypeName(abilityInfo); // branch abilityInfo.type == AppExecFwk::AbilityType::PAGE; service->GetAbilityTypeName(abilityInfo); // branch - AppExecFwk::ExtensionAbilityInfo extensionInfo; - service->GetExtensionTypeName(extensionInfo); - extensionInfo.type == AppExecFwk::ExtensionAbilityType::SERVICE; - service->GetExtensionTypeName(extensionInfo); service->GetBundleMgrClient(); service->CheckPermissionForSystem(); service->CheckPermissionForSelf(stringParam); - service->GetAbilityInfo(info, stringParam, stringParam, int32Param); service->SetApplicationAutoStartupByEDM(info, boolParam); service->CancelApplicationAutoStartupByEDM(info, boolParam); service->InnerApplicationAutoStartupByEDM(info, boolParam, boolParam); service->CheckPermissionForEDM(); } +void AbilityStartupServiceFuzztest2(bool boolParam, std::string &stringParam, int32_t int32Param) +{ + std::shared_ptr service = std::make_shared(); + AutoStartupAbilityData abilityData; + abilityData.isVisible = boolParam; + abilityData.abilityTypeName = stringParam; + abilityData.accessTokenId = stringParam; + abilityData.currentUserId = int32Param; + AutoStartupInfo info; + service->GetAbilityData(info, abilityData); // branch + AppExecFwk::AbilityInfo abilityInfo; + abilityInfo.bundleName = stringParam; + abilityInfo.name = stringParam; + abilityInfo.moduleName = stringParam; + service->IsTargetAbility(info, abilityInfo); + AppExecFwk::ExtensionAbilityInfo extensionInfo; + extensionInfo.bundleName = stringParam; + extensionInfo.name = stringParam; + extensionInfo.moduleName = stringParam; + service->IsTargetExtension(info, extensionInfo); + service->GetExtensionTypeName(extensionInfo); + extensionInfo.type == AppExecFwk::ExtensionAbilityType::SERVICE; + service->GetExtensionTypeName(extensionInfo); + extensionInfo.type == AppExecFwk::ExtensionAbilityType::APP_SERVICE; + service->GetExtensionTypeName(extensionInfo); + service->GetAbilityInfo(info, abilityData); +} + bool DoSomethingInterestingWithMyAPI(const char* data, size_t size) { bool boolParam = *data % ENABLE; std::string stringParam(data, size); int32_t int32Param = static_cast(GetU32Data(data)); AbilityStartupServiceFuzztest1(boolParam, stringParam, int32Param); + AbilityStartupServiceFuzztest2(boolParam, stringParam, int32Param); return true; } } diff --git a/test/new_test/mock/auto_startup_info/auto_startup_info.h b/test/new_test/mock/auto_startup_info/auto_startup_info.h index 3458654121f..2adcfcfde01 100644 --- a/test/new_test/mock/auto_startup_info/auto_startup_info.h +++ b/test/new_test/mock/auto_startup_info/auto_startup_info.h @@ -25,13 +25,16 @@ struct AutoStartupInfo : public Parcelable { public: int32_t appCloneIndex = 0; int32_t userId = -1; + int32_t setterUserId = -1; + int32_t currentUserId = -1; + bool canUserModify = false; int32_t retryCount = 0; std::string bundleName; std::string abilityName; std::string moduleName; std::string abilityTypeName; std::string accessTokenId; - + bool ReadFromParcel(Parcel &parcel) { return false; @@ -51,6 +54,15 @@ struct AutoStartupStatus { bool isEdmForce = false; int32_t code = -1; }; + +struct AutoStartupAbilityData { + std::string abilityTypeName; + std::string accessTokenId; + int32_t userId = -1; + int32_t setterUserId = -1; + int32_t currentUserId = -1; + bool isVisible = false; +}; } // namespace AbilityRuntime } // namespace OHOS #endif // OHOS_ABILITY_RUNTIME_AUTO_STARTUP_INFO_H \ No newline at end of file diff --git a/test/unittest/ability_auto_startup_data_manager_test/ability_auto_startup_data_manager_test.cpp b/test/unittest/ability_auto_startup_data_manager_test/ability_auto_startup_data_manager_test.cpp index e1290abcdb6..10cc6d294ac 100644 --- a/test/unittest/ability_auto_startup_data_manager_test/ability_auto_startup_data_manager_test.cpp +++ b/test/unittest/ability_auto_startup_data_manager_test/ability_auto_startup_data_manager_test.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -131,6 +131,7 @@ HWTEST_F(AbilityAutoStartupDataManagerTest, InsertAutoStartupData_300, TestSize. info.bundleName = "com.example.testbundle"; info.abilityName = "testDemoAbility"; info.accessTokenId = "123"; + info.currentUserId = 100; info.userId = 100; struct AutoStartupStatus AutoStartupStatus; AutoStartupStatus.isAutoStartup = false; @@ -160,6 +161,7 @@ HWTEST_F(AbilityAutoStartupDataManagerTest, InsertAutoStartupData_400, TestSize. info.bundleName = "com.example.testbundle"; info.abilityName = "testDemoAbility"; info.accessTokenId = "123"; + info.currentUserId = 100; info.userId = 100; struct AutoStartupStatus AutoStartupStatus; AutoStartupStatus.isAutoStartup = false; @@ -203,6 +205,7 @@ HWTEST_F(AbilityAutoStartupDataManagerTest, UpdateAutoStartupData_200, TestSize. info.bundleName = "com.example.testbundle"; info.abilityName = "testDemoAbility"; info.accessTokenId = "123"; + info.currentUserId = 100; info.userId = 100; bool isAutoStartup = false; bool isEdmForce = false; @@ -248,6 +251,7 @@ HWTEST_F(AbilityAutoStartupDataManagerTest, UpdateAutoStartupData_400, TestSize. info.bundleName = "com.example.testbundle"; info.abilityName = "testDemoAbility"; info.accessTokenId = "123"; + info.currentUserId = 100; info.userId = 100; bool isAutoStartup = false; bool isEdmForce = false; @@ -304,6 +308,7 @@ HWTEST_F(AbilityAutoStartupDataManagerTest, DeleteAutoStartupData_300, TestSize. info.bundleName = "com.example.testbundle"; info.abilityName = "testDemoAbility"; info.accessTokenId = "123"; + info.currentUserId = 100; info.userId = 100; auto result = abilityAutoStartupDataManager.DeleteAutoStartupData(info); EXPECT_EQ(result, ERR_OK); @@ -328,6 +333,7 @@ HWTEST_F(AbilityAutoStartupDataManagerTest, DeleteAutoStartupData_400, TestSize. info.bundleName = "com.example.testbundle"; info.abilityName = "testDemoAbility"; info.accessTokenId = "123"; + info.currentUserId = 100; info.userId = 100; auto result = abilityAutoStartupDataManager.DeleteAutoStartupData(info); EXPECT_EQ(result, ERR_OK); @@ -437,6 +443,7 @@ HWTEST_F(AbilityAutoStartupDataManagerTest, QueryAutoStartupData_300, TestSize.L info.bundleName = "com.example.testbundle"; info.abilityName = "testDemoAbility"; info.accessTokenId = "123"; + info.currentUserId = 100; info.userId = 100; auto result = abilityAutoStartupDataManager.QueryAutoStartupData(info); EXPECT_EQ(result.code, ERR_NAME_NOT_FOUND); @@ -461,6 +468,7 @@ HWTEST_F(AbilityAutoStartupDataManagerTest, QueryAutoStartupData_400, TestSize.L info.bundleName = "com.example.testbundle"; info.abilityName = "testDemoAbility"; info.accessTokenId = "123"; + info.currentUserId = 100; info.userId = 100; auto result = abilityAutoStartupDataManager.QueryAutoStartupData(info); EXPECT_EQ(result.code, ERR_NAME_NOT_FOUND); @@ -633,6 +641,7 @@ HWTEST_F(AbilityAutoStartupDataManagerTest, UpdateAutoStartupData_500, TestSize. info.bundleName = "com.example.testbundle"; info.abilityName = "testDemoAbility"; info.accessTokenId = "123"; + info.currentUserId = 100; info.userId = 100; bool isAutoStartup = true; bool isEdmForce = false; @@ -660,6 +669,7 @@ HWTEST_F(AbilityAutoStartupDataManagerTest, DeleteAutoStartupData_500, TestSize. info.bundleName = "com.example.testbundle"; info.abilityName = "testDemoAbility"; info.accessTokenId = "123"; + info.currentUserId = 100; info.userId = 100; kvStorePtr->Delete_ = DistributedKv::Status::INVALID_FORMAT; @@ -709,6 +719,7 @@ HWTEST_F(AbilityAutoStartupDataManagerTest, QueryAutoStartupData_500, TestSize.L info.bundleName = "com.example.testbundle"; info.abilityName = "testDemoAbility"; info.accessTokenId = "123"; + info.currentUserId = 100; info.userId = 100; kvStorePtr->GetEntries_ = DistributedKv::Status::INVALID_FORMAT; @@ -796,6 +807,7 @@ HWTEST_F(AbilityAutoStartupDataManagerTest, InsertAutoStartupData_500, TestSize. info.bundleName = "com.example.testbundle"; info.abilityName = "testDemoAbility"; info.accessTokenId = "123"; + info.currentUserId = 100; info.userId = 100; struct AutoStartupStatus AutoStartupStatus; AutoStartupStatus.isAutoStartup = false; diff --git a/test/unittest/ability_auto_startup_service_second_test/ability_auto_startup_service_second_test.cpp b/test/unittest/ability_auto_startup_service_second_test/ability_auto_startup_service_second_test.cpp index 71e8cafc41a..165d5f2ed2a 100644 --- a/test/unittest/ability_auto_startup_service_second_test/ability_auto_startup_service_second_test.cpp +++ b/test/unittest/ability_auto_startup_service_second_test/ability_auto_startup_service_second_test.cpp @@ -140,46 +140,47 @@ HWTEST_F(AbilityAutoStartupServiceSecondTest, GetAbilityData_003, TestSize.Level autoStartupInfo.accessTokenId = 1; autoStartupInfo.appCloneIndex = 0; - bool isVisible = true; - std::string abilityTypeName = ""; - std::string accessTokenId = ""; - int32_t userId = 0; + AutoStartupAbilityData abilityData; + abilityData.isVisible = true; + abilityData.abilityTypeName = ""; + abilityData.accessTokenId = ""; + abilityData.currentUserId = 0; bool result = - abilityAutoStartupService->GetAbilityData(autoStartupInfo, isVisible, abilityTypeName, accessTokenId, userId); + abilityAutoStartupService->GetAbilityData(autoStartupInfo, abilityData); EXPECT_FALSE(result); - EXPECT_TRUE(isVisible); + EXPECT_TRUE(abilityData.isVisible); - isVisible = true; + abilityData.isVisible = true; autoStartupInfo.bundleName = "hapModuleInfosModuleNameIsempty"; autoStartupInfo.moduleName = ""; result = - abilityAutoStartupService->GetAbilityData(autoStartupInfo, isVisible, abilityTypeName, accessTokenId, userId); + abilityAutoStartupService->GetAbilityData(autoStartupInfo, abilityData); EXPECT_TRUE(result); - EXPECT_FALSE(isVisible); + EXPECT_FALSE(abilityData.isVisible); - isVisible = true; + abilityData.isVisible = true; autoStartupInfo.bundleName = "hapModuleInfosModuleNameNotempty"; autoStartupInfo.moduleName = "moduleNameTest"; result = - abilityAutoStartupService->GetAbilityData(autoStartupInfo, isVisible, abilityTypeName, accessTokenId, userId); - EXPECT_FALSE(isVisible); + abilityAutoStartupService->GetAbilityData(autoStartupInfo, abilityData); + EXPECT_FALSE(abilityData.isVisible); - isVisible = true; + abilityData.isVisible = true; autoStartupInfo.bundleName = "extensionInfosModuleNameIsempty"; autoStartupInfo.moduleName = ""; result = - abilityAutoStartupService->GetAbilityData(autoStartupInfo, isVisible, abilityTypeName, accessTokenId, userId); + abilityAutoStartupService->GetAbilityData(autoStartupInfo, abilityData); EXPECT_TRUE(result); - EXPECT_FALSE(isVisible); + EXPECT_FALSE(abilityData.isVisible); - isVisible = true; + abilityData.isVisible = true; autoStartupInfo.bundleName = "extensionInfosModuleNameNotempty"; autoStartupInfo.moduleName = "moduleNameTest"; result = - abilityAutoStartupService->GetAbilityData(autoStartupInfo, isVisible, abilityTypeName, accessTokenId, userId); + abilityAutoStartupService->GetAbilityData(autoStartupInfo, abilityData); EXPECT_TRUE(result); - EXPECT_FALSE(isVisible); + EXPECT_FALSE(abilityData.isVisible); GTEST_LOG_(INFO) << "GetAbilityData_003 end"; } @@ -206,6 +207,7 @@ HWTEST_F(AbilityAutoStartupServiceSecondTest, InnerApplicationAutoStartupByEDM_0 autoStartupInfo.moduleName = "moduleNameTest"; autoStartupInfo.accessTokenId = 1; autoStartupInfo.appCloneIndex = 1; + autoStartupInfo.currentUserId = 1; autoStartupInfo.userId = 1; int32_t result = abilityAutoStartupService->InnerApplicationAutoStartupByEDM(autoStartupInfo, true, true); @@ -287,6 +289,7 @@ HWTEST_F(AbilityAutoStartupServiceSecondTest, SetApplicationAutoStartup_001, Tes info.moduleName = "testModule"; info.abilityName = "testAbility"; info.accessTokenId = "12345"; + info.currentUserId = 100; info.userId = 100; int32_t result = abilityAutoStartupService->SetApplicationAutoStartup(info); ASSERT_EQ(result, INNER_ERR); @@ -311,10 +314,14 @@ HWTEST_F(AbilityAutoStartupServiceSecondTest, SetApplicationAutoStartup_002, Tes info.moduleName = "testModule"; info.abilityName = "testAbility"; info.accessTokenId = "12345"; + info.currentUserId = 100; info.userId = 100; - bool isVisible = true; - abilityAutoStartupService->GetAbilityData(info, isVisible, info.abilityName, - info.accessTokenId, info.userId); + AutoStartupAbilityData abilityData; + abilityData.isVisible = true; + abilityData.abilityTypeName = info.abilityName; + abilityData.accessTokenId = info.accessTokenId; + abilityData.currentUserId = info.currentUserId; + abilityAutoStartupService->GetAbilityData(info, abilityData); int32_t result = abilityAutoStartupService->SetApplicationAutoStartup(info); ASSERT_EQ(result, ERR_NOT_SYSTEM_APP); GTEST_LOG_(INFO) << "SetApplicationAutoStartup_002 end"; @@ -338,10 +345,14 @@ HWTEST_F(AbilityAutoStartupServiceSecondTest, CancelApplicationAutoStartup_001, info.moduleName = "testModule"; info.abilityName = "testAbility"; info.accessTokenId = "12345"; + info.currentUserId = 100; info.userId = 100; - bool isVisible = true; - abilityAutoStartupService->GetAbilityData(info, isVisible, info.abilityName, - info.accessTokenId, info.userId); + AutoStartupAbilityData abilityData; + abilityData.isVisible = true; + abilityData.abilityTypeName = info.abilityName; + abilityData.accessTokenId = info.accessTokenId; + abilityData.currentUserId = info.currentUserId; + abilityAutoStartupService->GetAbilityData(info, abilityData); int32_t result = abilityAutoStartupService->CancelApplicationAutoStartup(info); ASSERT_EQ(result, ERR_NOT_SYSTEM_APP); GTEST_LOG_(INFO) << "CancelApplicationAutoStartup_001 end"; @@ -380,5 +391,65 @@ HWTEST_F(AbilityAutoStartupServiceSecondTest, CheckPermissionForSelf_002, TestSi ASSERT_EQ(result, ERR_NOT_SELF_APPLICATION); GTEST_LOG_(INFO) << "CheckPermissionForSelf_002 end"; } + +/* + * Feature: AbilityAutoStartupService + * Function: GetBundleInfo + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService GetBundleInfo + */ +HWTEST_F(AbilityAutoStartupServiceSecondTest, GetBundleInfo_001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceSecondTest GetBundleInfo_001 start"; + auto abilityAutoStartupService = std::make_shared(); + std::string bundleName = "infoListIs0"; + int32_t userId = -1; + int32_t uid = 2000000; + int32_t appIndex = 0; + AppExecFwk::BundleInfo bundleInfo; + auto result = abilityAutoStartupService->GetBundleInfo(bundleName, bundleInfo, uid, userId, appIndex); + EXPECT_TRUE(result); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceSecondTest GetBundleInfo_001 end"; +} + +/* + * Feature: AbilityAutoStartupService + * Function: GetBundleInfo + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService GetBundleInfo + */ +HWTEST_F(AbilityAutoStartupServiceSecondTest, GetBundleInfo_002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceSecondTest GetBundleInfo_002 start"; + auto abilityAutoStartupService = std::make_shared(); + std::string bundleName = "bundleName12345"; + int32_t userId = -1; + int32_t uid = 2000000; + int32_t appIndex = 1; + AppExecFwk::BundleInfo bundleInfo; + auto result = abilityAutoStartupService->GetBundleInfo(bundleName, bundleInfo, uid, userId, appIndex); + EXPECT_TRUE(result); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceSecondTest GetBundleInfo_002 end"; +} + +/* + * Feature: AbilityAutoStartupService + * Function: GetBundleInfo + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService GetBundleInfo + */ +HWTEST_F(AbilityAutoStartupServiceSecondTest, GetBundleInfo_003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceSecondTest GetBundleInfo_003 start"; + auto abilityAutoStartupService = std::make_shared(); + std::string bundleName = "bundleName12345"; + int32_t userId = -1; + int32_t uid = 2000000; + int32_t appIndex = 6; + AppExecFwk::BundleInfo bundleInfo; + auto result = abilityAutoStartupService->GetBundleInfo(bundleName, bundleInfo, uid, userId, appIndex); + EXPECT_TRUE(result); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceSecondTest GetBundleInfo_003 end"; +} } // namespace AAFwk } // namespace OHOS diff --git a/test/unittest/ability_auto_startup_service_test/ability_auto_startup_service_test.cpp b/test/unittest/ability_auto_startup_service_test/ability_auto_startup_service_test.cpp index bcf5a0d873c..e21cb059af9 100644 --- a/test/unittest/ability_auto_startup_service_test/ability_auto_startup_service_test.cpp +++ b/test/unittest/ability_auto_startup_service_test/ability_auto_startup_service_test.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -153,6 +153,7 @@ HWTEST_F(AbilityAutoStartupServiceTest, InnerSetApplicationAutoStartup_002, Test info.abilityName = AUTO_STARTUP_SERVICE_ABILITYNAME; info.bundleName = AUTO_STARTUP_SERVICE_BUNDLENAME; info.accessTokenId = "123"; + info.currentUserId = 100; info.userId = 100; auto result = abilityAutoStartupService->InnerSetApplicationAutoStartup(info); EXPECT_EQ(result, ERR_OK); @@ -206,6 +207,7 @@ HWTEST_F(AbilityAutoStartupServiceTest, InnerCancelApplicationAutoStartup_002, T info.abilityName = AUTO_STARTUP_SERVICE_ABILITYNAME; info.bundleName = AUTO_STARTUP_SERVICE_BUNDLENAME; info.accessTokenId = "123"; + info.currentUserId = 100; info.userId = 100; auto result = abilityAutoStartupService->InnerCancelApplicationAutoStartup(info); EXPECT_EQ(result, ERR_OK); @@ -405,14 +407,75 @@ HWTEST_F(AbilityAutoStartupServiceTest, GetBundleInfo_001, TestSize.Level1) GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetBundleInfo_001 start"; auto abilityAutoStartupService = std::make_shared(); std::string bundleName; - int32_t userId = 100; + int32_t userId = -1; + int32_t uid = 20000000; int32_t appIndex = 0; AppExecFwk::BundleInfo bundleInfo; - auto result = abilityAutoStartupService->GetBundleInfo(bundleName, bundleInfo, -1, userId, appIndex); + auto result = abilityAutoStartupService->GetBundleInfo(bundleName, bundleInfo, uid, userId, appIndex); EXPECT_FALSE(result); GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetBundleInfo_001 end"; } +/* + * Feature: AbilityAutoStartupService + * Function: GetBundleInfo + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService GetBundleInfo + */ +HWTEST_F(AbilityAutoStartupServiceTest, GetBundleInfo_002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetBundleInfo_002 start"; + auto abilityAutoStartupService = std::make_shared(); + std::string bundleName; + int32_t userId = -1; + int32_t uid = 20000000; + int32_t appIndex = 1; + AppExecFwk::BundleInfo bundleInfo; + auto result = abilityAutoStartupService->GetBundleInfo(bundleName, bundleInfo, uid, userId, appIndex); + EXPECT_FALSE(result); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetBundleInfo_002 end"; +} + +/* + * Feature: AbilityAutoStartupService + * Function: GetBundleInfo + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService GetBundleInfo + */ +HWTEST_F(AbilityAutoStartupServiceTest, GetBundleInfo_003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetBundleInfo_003 start"; + auto abilityAutoStartupService = std::make_shared(); + std::string bundleName; + int32_t userId = -1; + int32_t uid = 20000000; + int32_t appIndex = 6; + AppExecFwk::BundleInfo bundleInfo; + auto result = abilityAutoStartupService->GetBundleInfo(bundleName, bundleInfo, uid, userId, appIndex); + EXPECT_FALSE(result); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetBundleInfo_003 end"; +} + +/* + * Feature: AbilityAutoStartupService + * Function: GetBundleInfo + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService GetBundleInfo + */ +HWTEST_F(AbilityAutoStartupServiceTest, GetBundleInfo_004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetBundleInfo_004 start"; + auto abilityAutoStartupService = std::make_shared(); + std::string bundleName; + int32_t userId = -1; + int32_t uid = 200000; + int32_t appIndex = 0; + AppExecFwk::BundleInfo bundleInfo; + auto result = abilityAutoStartupService->GetBundleInfo(bundleName, bundleInfo, uid, userId, appIndex); + EXPECT_FALSE(result); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetBundleInfo_004 end"; +} + /* * Feature: AbilityAutoStartupService * Function: GetAbilityData @@ -424,11 +487,12 @@ HWTEST_F(AbilityAutoStartupServiceTest, GetAbilityData_001, TestSize.Level1) GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetAbilityData_001 start"; auto abilityAutoStartupService = std::make_shared(); AutoStartupInfo info; - std::string abilityTypeName; - bool isVisible = AUTO_STARTUP_SERVICE_FALSE; - std::string accessTokenId = "0"; - int32_t userId = 100; - auto result = abilityAutoStartupService->GetAbilityData(info, isVisible, abilityTypeName, accessTokenId, userId); + AutoStartupAbilityData abilityData; + abilityData.abilityTypeName = AUTO_STARTUP_SERVICE_EMPTY; + abilityData.isVisible = AUTO_STARTUP_SERVICE_FALSE; + abilityData.accessTokenId = "0"; + abilityData.currentUserId = 100; + auto result = abilityAutoStartupService->GetAbilityData(info, abilityData); EXPECT_FALSE(result); GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetAbilityData_001 end"; } @@ -450,6 +514,23 @@ HWTEST_F(AbilityAutoStartupServiceTest, GetAbilityTypeName_001, TestSize.Level1) GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetAbilityTypeName_001 end"; } +/* + * Feature: AbilityAutoStartupService + * Function: GetAbilityTypeName + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService GetAbilityTypeName + */ +HWTEST_F(AbilityAutoStartupServiceTest, GetAbilityTypeName_002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetAbilityTypeName_002 start"; + auto abilityAutoStartupService = std::make_shared(); + AppExecFwk::AbilityInfo abilityInfo; + abilityInfo.type = AppExecFwk::AbilityType::EXTENSION; + auto result = abilityAutoStartupService->GetAbilityTypeName(abilityInfo); + EXPECT_EQ(result, ""); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetAbilityTypeName_002 end"; +} + /* * Feature: AbilityAutoStartupService * Function: GetExtensionTypeName @@ -467,6 +548,40 @@ HWTEST_F(AbilityAutoStartupServiceTest, GetExtensionTypeName_001, TestSize.Level GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetExtensionTypeName_001 end"; } +/* + * Feature: AbilityAutoStartupService + * Function: GetExtensionTypeName + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService GetExtensionTypeName + */ +HWTEST_F(AbilityAutoStartupServiceTest, GetExtensionTypeName_002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetExtensionTypeName_002 start"; + auto abilityAutoStartupService = std::make_shared(); + AppExecFwk::ExtensionAbilityInfo extensionInfo; + extensionInfo.type = AppExecFwk::ExtensionAbilityType::APP_SERVICE; + auto result = abilityAutoStartupService->GetExtensionTypeName(extensionInfo); + EXPECT_EQ(result, "AppServiceExtension"); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetExtensionTypeName_002 end"; +} + +/* + * Feature: AbilityAutoStartupService + * Function: GetExtensionTypeName + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService GetExtensionTypeName + */ +HWTEST_F(AbilityAutoStartupServiceTest, GetExtensionTypeName_003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetExtensionTypeName_003 start"; + auto abilityAutoStartupService = std::make_shared(); + AppExecFwk::ExtensionAbilityInfo extensionInfo; + extensionInfo.type = AppExecFwk::ExtensionAbilityType::DATASHARE; + auto result = abilityAutoStartupService->GetExtensionTypeName(extensionInfo); + EXPECT_EQ(result, ""); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetExtensionTypeName_003 end"; +} + /* * Feature: AbilityAutoStartupService * Function: GetBundleMgrClient @@ -524,10 +639,11 @@ HWTEST_F(AbilityAutoStartupServiceTest, GetAbilityInfo_001, TestSize.Level1) GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetAbilityInfo_001 start"; auto abilityAutoStartupService = std::make_shared(); AutoStartupInfo info; - std::string abilityTypeName = AUTO_STARTUP_SERVICE_ABILITYNAME; - std::string accessTokenId = "0"; - int32_t userId = 100; - auto result = abilityAutoStartupService->GetAbilityInfo(info, abilityTypeName, accessTokenId, userId); + AutoStartupAbilityData abilityData; + abilityData.abilityTypeName = AUTO_STARTUP_SERVICE_ABILITYNAME; + abilityData.accessTokenId = "0"; + abilityData.currentUserId = 100; + auto result = abilityAutoStartupService->GetAbilityInfo(info, abilityData); EXPECT_EQ(result, INNER_ERR); GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest GetAbilityInfo_001 end"; } @@ -541,7 +657,6 @@ HWTEST_F(AbilityAutoStartupServiceTest, GetAbilityInfo_001, TestSize.Level1) HWTEST_F(AbilityAutoStartupServiceTest, SetApplicationAutoStartupByEDM_001, TestSize.Level1) { GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest SetApplicationAutoStartupByEDM_001 start"; - AAFwk::IsMockSaCall::IsMockSaCallWithPermission(); MyFlag::flag_ = 1; auto abilityAutoStartupService = std::make_shared(); AutoStartupInfo info; @@ -553,6 +668,28 @@ HWTEST_F(AbilityAutoStartupServiceTest, SetApplicationAutoStartupByEDM_001, Test GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest SetApplicationAutoStartupByEDM_001 end"; } +/* + * Feature: AbilityAutoStartupService + * Function: SetApplicationAutoStartupByEDM + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService SetApplicationAutoStartupByEDM + */ +HWTEST_F(AbilityAutoStartupServiceTest, SetApplicationAutoStartupByEDM_002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest SetApplicationAutoStartupByEDM_002 start"; + AAFwk::IsMockSaCall::IsMockSaCallWithPermission(); + MyFlag::flag_ = 0; + auto abilityAutoStartupService = std::make_shared(); + AutoStartupInfo info; + info.abilityName = "abilityName"; + info.bundleName = "bundleName"; + bool flag = false; + auto result = abilityAutoStartupService->SetApplicationAutoStartupByEDM(info, flag); + EXPECT_EQ(result, INNER_ERR); + AAFwk::IsMockSaCall::IsMockKillAppProcessesPermission(); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest SetApplicationAutoStartupByEDM_002 end"; +} + /* * Feature: AbilityAutoStartupService * Function: CancelApplicationAutoStartupByEDM @@ -562,7 +699,6 @@ HWTEST_F(AbilityAutoStartupServiceTest, SetApplicationAutoStartupByEDM_001, Test HWTEST_F(AbilityAutoStartupServiceTest, CancelApplicationAutoStartupByEDM_001, TestSize.Level1) { GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest CancelApplicationAutoStartupByEDM_001 start"; - AAFwk::IsMockSaCall::IsMockSaCallWithPermission(); MyFlag::flag_ = 1; auto abilityAutoStartupService = std::make_shared(); AutoStartupInfo info; @@ -574,6 +710,28 @@ HWTEST_F(AbilityAutoStartupServiceTest, CancelApplicationAutoStartupByEDM_001, T GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest SCancelApplicationAutoStartupByEDM_001 end"; } +/* + * Feature: AbilityAutoStartupService + * Function: CancelApplicationAutoStartupByEDM + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService CancelApplicationAutoStartupByEDM + */ +HWTEST_F(AbilityAutoStartupServiceTest, CancelApplicationAutoStartupByEDM_002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest CancelApplicationAutoStartupByEDM_002 start"; + AAFwk::IsMockSaCall::IsMockSaCallWithPermission(); + MyFlag::flag_ = 0; + auto abilityAutoStartupService = std::make_shared(); + AutoStartupInfo info; + info.abilityName = "abilityName"; + info.bundleName = "bundleName"; + bool flag = false; + auto result = abilityAutoStartupService->CancelApplicationAutoStartupByEDM(info, flag); + EXPECT_EQ(result, INNER_ERR); + AAFwk::IsMockSaCall::IsMockKillAppProcessesPermission(); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest CancelApplicationAutoStartupByEDM_002 end"; +} + /* * Feature: AbilityAutoStartupService * Function: InnerApplicationAutoStartupByEDM @@ -606,6 +764,7 @@ HWTEST_F(AbilityAutoStartupServiceTest, InnerApplicationAutoStartupByEDM_002, Te info.abilityName = AUTO_STARTUP_SERVICE_ABILITYNAME; info.bundleName = AUTO_STARTUP_SERVICE_BUNDLENAME; info.accessTokenId = "123"; + info.currentUserId = 100; info.userId = 100; bool isSet = AUTO_STARTUP_SERVICE_FALSE; bool flag = AUTO_STARTUP_SERVICE_FALSE; @@ -623,12 +782,131 @@ HWTEST_F(AbilityAutoStartupServiceTest, InnerApplicationAutoStartupByEDM_002, Te HWTEST_F(AbilityAutoStartupServiceTest, CheckPermissionForEDM_001, TestSize.Level1) { GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest CheckPermissionForEDM_001 start"; - AAFwk::IsMockSaCall::IsMockSaCallWithPermission(); MyFlag::flag_ = 1; auto abilityAutoStartupService = std::make_shared(); auto result = abilityAutoStartupService->CheckPermissionForEDM(); EXPECT_EQ(result, CHECK_PERMISSION_FAILED); GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest CheckPermissionForEDM_001 end"; } + +/* + * Feature: AbilityAutoStartupService + * Function: CheckPermissionForEDM + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService CheckPermissionForEDM + */ +HWTEST_F(AbilityAutoStartupServiceTest, CheckPermissionForEDM_002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest CheckPermissionForEDM_002 start"; + AAFwk::IsMockSaCall::IsMockSaCallWithPermission(); + MyFlag::flag_ = 0; + auto abilityAutoStartupService = std::make_shared(); + auto result = abilityAutoStartupService->CheckPermissionForEDM(); + EXPECT_EQ(result, ERR_OK); + AAFwk::IsMockSaCall::IsMockKillAppProcessesPermission(); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest CheckPermissionForEDM_002 end"; +} + +/* + * Feature: AbilityAutoStartupService + * Function: IsTargetAbility + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService IsTargetAbility + */ +HWTEST_F(AbilityAutoStartupServiceTest, IsTargetAbility_001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest IsTargetAbility_001 start"; + auto abilityAutoStartupService = std::make_shared(); + AutoStartupInfo info; + info.abilityName = AUTO_STARTUP_SERVICE_ABILITYNAME; + info.bundleName = AUTO_STARTUP_SERVICE_BUNDLENAME; + info.accessTokenId = "123"; + info.currentUserId = 100; + info.userId = 100; + AppExecFwk::AbilityInfo abilityInfo; + abilityInfo.bundleName = AUTO_STARTUP_SERVICE_BUNDLENAME; + abilityInfo.name = AUTO_STARTUP_SERVICE_ABILITYNAME; + abilityInfo.moduleName = ""; + auto result = abilityAutoStartupService->IsTargetAbility(info, abilityInfo); + EXPECT_TRUE(result); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest IsTargetAbility_001 end"; +} + +/* + * Feature: AbilityAutoStartupService + * Function: IsTargetAbility + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService IsTargetAbility + */ +HWTEST_F(AbilityAutoStartupServiceTest, IsTargetAbility_002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest IsTargetAbility_002 start"; + auto abilityAutoStartupService = std::make_shared(); + AutoStartupInfo info; + info.abilityName = AUTO_STARTUP_SERVICE_ABILITYNAME; + info.bundleName = AUTO_STARTUP_SERVICE_BUNDLENAME; + info.moduleName = "moduleName1"; + info.accessTokenId = "123"; + info.currentUserId = 100; + info.userId = 100; + AppExecFwk::AbilityInfo abilityInfo; + abilityInfo.bundleName = AUTO_STARTUP_SERVICE_BUNDLENAME; + abilityInfo.name = AUTO_STARTUP_SERVICE_ABILITYNAME; + abilityInfo.moduleName = "moduleName"; + auto result = abilityAutoStartupService->IsTargetAbility(info, abilityInfo); + EXPECT_FALSE(result); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest IsTargetAbility_002 end"; +} + +/* + * Feature: AbilityAutoStartupService + * Function: IsTargetExtension + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService IsTargetExtension + */ +HWTEST_F(AbilityAutoStartupServiceTest, IsTargetExtension_001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest IsTargetExtension_001 start"; + auto abilityAutoStartupService = std::make_shared(); + AutoStartupInfo info; + info.abilityName = AUTO_STARTUP_SERVICE_ABILITYNAME; + info.bundleName = AUTO_STARTUP_SERVICE_BUNDLENAME; + info.accessTokenId = "123"; + info.currentUserId = 100; + info.userId = 100; + AppExecFwk::ExtensionAbilityInfo extensionInfo; + extensionInfo.bundleName = AUTO_STARTUP_SERVICE_BUNDLENAME; + extensionInfo.name = AUTO_STARTUP_SERVICE_ABILITYNAME; + extensionInfo.moduleName = ""; + auto result = abilityAutoStartupService->IsTargetExtension(info, extensionInfo); + EXPECT_TRUE(result); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest IsTargetExtension_001 end"; +} + +/* + * Feature: AbilityAutoStartupService + * Function: IsTargetExtension + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService IsTargetExtension + */ +HWTEST_F(AbilityAutoStartupServiceTest, IsTargetExtension_002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest IsTargetExtension_002 start"; + auto abilityAutoStartupService = std::make_shared(); + AutoStartupInfo info; + info.abilityName = AUTO_STARTUP_SERVICE_ABILITYNAME; + info.bundleName = AUTO_STARTUP_SERVICE_BUNDLENAME; + info.moduleName = "moduleName1"; + info.accessTokenId = "123"; + info.currentUserId = 100; + info.userId = 100; + AppExecFwk::ExtensionAbilityInfo extensionInfo; + extensionInfo.bundleName = AUTO_STARTUP_SERVICE_BUNDLENAME; + extensionInfo.name = AUTO_STARTUP_SERVICE_ABILITYNAME; + extensionInfo.moduleName = "moduleName"; + auto result = abilityAutoStartupService->IsTargetExtension(info, extensionInfo); + EXPECT_FALSE(result); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest IsTargetExtension_002 end"; +} } // namespace AAFwk } // namespace OHOS diff --git a/test/unittest/ability_manager_service_fourth_test/BUILD.gn b/test/unittest/ability_manager_service_fourth_test/BUILD.gn index f440a013d36..a4d09d987de 100644 --- a/test/unittest/ability_manager_service_fourth_test/BUILD.gn +++ b/test/unittest/ability_manager_service_fourth_test/BUILD.gn @@ -78,6 +78,7 @@ ohos_unittest("ability_manager_service_fourth_test") { "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_innerkits_path}/deps_wrapper:ability_deps_wrapper", "${ability_runtime_innerkits_path}/uri_permission:uri_permission_mgr", + "${ability_runtime_native_path}/ability/native:auto_startup_callback", "${ability_runtime_native_path}/appkit:appkit_manager_helper", "${ability_runtime_services_path}/abilitymgr:abilityms", "${ability_runtime_services_path}/common:app_util", diff --git a/test/unittest/ability_manager_service_mock_test/BUILD.gn b/test/unittest/ability_manager_service_mock_test/BUILD.gn index 103a3590454..2d4c140cd04 100644 --- a/test/unittest/ability_manager_service_mock_test/BUILD.gn +++ b/test/unittest/ability_manager_service_mock_test/BUILD.gn @@ -73,6 +73,7 @@ ohos_unittest("ability_manager_service_mock_test") { "${ability_runtime_innerkits_path}/ability_manager:mission_info", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_innerkits_path}/deps_wrapper:ability_deps_wrapper", + "${ability_runtime_native_path}/ability/native:auto_startup_callback", "${ability_runtime_path}/utils/global/freeze:freeze_util", "${ability_runtime_path}/utils/server/startup:startup_util", "${ability_runtime_services_path}/abilitymgr:abilityms", diff --git a/test/unittest/ability_manager_service_tenth_test/BUILD.gn b/test/unittest/ability_manager_service_tenth_test/BUILD.gn index 755be9065ec..ae432f006ab 100644 --- a/test/unittest/ability_manager_service_tenth_test/BUILD.gn +++ b/test/unittest/ability_manager_service_tenth_test/BUILD.gn @@ -33,12 +33,14 @@ ohos_unittest("ability_manager_service_tenth_test") { "${ability_runtime_path}/interfaces/kits/native/ability/ability_runtime/", "${ability_runtime_path}/interfaces/inner_api/ability_manager/include", "${ability_runtime_test_path}/mock/mock_sa_call", + "${ability_runtime_test_path}/mock/task_handler_wrap_mock/include", ] sources = [ "${ability_runtime_path}/services/abilitymgr/src/ability_auto_startup_service.cpp", "${ability_runtime_path}/services/abilitymgr/src/auto_startup_info.cpp", "${ability_runtime_services_path}/abilitymgr/src/ability_connect_callback_stub.cpp", + "${ability_runtime_test_path}/mock/task_handler_wrap_mock/src/mock_task_handler_wrap.cpp", "ability_manager_service_tenth_test.cpp", ] @@ -53,6 +55,7 @@ ohos_unittest("ability_manager_service_tenth_test") { "${ability_runtime_services_path}/abilitymgr:abilityms", "${ability_runtime_services_path}/abilitymgr:wantagent_manager", "${ability_runtime_services_path}/common:perm_verification", + "${ability_runtime_services_path}/common:task_handler_wrap", ] external_deps = [ diff --git a/test/unittest/ability_manager_service_tenth_test/ability_manager_service_tenth_test.cpp b/test/unittest/ability_manager_service_tenth_test/ability_manager_service_tenth_test.cpp index f2ebe8f3479..7c180566936 100644 --- a/test/unittest/ability_manager_service_tenth_test/ability_manager_service_tenth_test.cpp +++ b/test/unittest/ability_manager_service_tenth_test/ability_manager_service_tenth_test.cpp @@ -24,6 +24,7 @@ #include "connection_observer_errors.h" #include "data_ability_manager.h" #include "hilog_tag_wrapper.h" +#include "mock_task_handler_wrap.h" #include "start_ability_utils.h" using namespace testing; @@ -702,5 +703,89 @@ HWTEST_F(AbilityManagerServiceTenhtTest, DoAbilityForeground_003, TestSize.Level ASSERT_EQ(result, ERR_INVALID_VALUE); TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTenhtTest DoAbilityForeground_003 end"); } + +/* + * Feature: AbilityManagerService + * Name: StartAutoStartupApps_001 + * Function: StartAutoStartupApps + * SubFunction: NA + */ +HWTEST_F(AbilityManagerServiceTenhtTest, StartAutoStartupApps_001, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTenhtTest StartAutoStartupApps_001 start"); + auto abilityMs = std::make_shared(); + EXPECT_NE(abilityMs, nullptr); + auto taskHandler = MockTaskHandlerWrap::CreateQueueHandler("AbilityManagerServiceTenhtTest"); + abilityMs->taskHandler_ = taskHandler; + EXPECT_CALL(*taskHandler, SubmitTaskInner(_, _)).Times(testing::AtLeast(1)); + AutoStartupInfo autoStartupInfo; + autoStartupInfo.abilityName = AbilityRuntime::EXTENSION_TYPE_APP_SERVICE; + std::queue infoQueue; + infoQueue.push(autoStartupInfo); + abilityMs->StartAutoStartupApps(infoQueue); + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTenhtTest StartAutoStartupApps_001 end"); +} + +/* + * Feature: AbilityManagerService + * Name: StartAutoStartupApps_002 + * Function: StartAutoStartupApps + * SubFunction: NA + */ +HWTEST_F(AbilityManagerServiceTenhtTest, StartAutoStartupApps_002, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTenhtTest StartAutoStartupApps_002 start"); + auto abilityMs = std::make_shared(); + EXPECT_NE(abilityMs, nullptr); + auto taskHandler = MockTaskHandlerWrap::CreateQueueHandler("AbilityManagerServiceTenhtTest"); + abilityMs->taskHandler_ = taskHandler; + EXPECT_CALL(*taskHandler, SubmitTaskInner(_, _)).Times(testing::AtLeast(1)); + AutoStartupInfo autoStartupInfo; + autoStartupInfo.appCloneIndex = 6; + std::queue infoQueue; + infoQueue.push(autoStartupInfo); + abilityMs->StartAutoStartupApps(infoQueue); + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTenhtTest StartAutoStartupApps_002 end"); +} + +/* + * Feature: AbilityManagerService + * Name: StartAutoStartupApps_003 + * Function: StartAutoStartupApps + * SubFunction: NA + */ +HWTEST_F(AbilityManagerServiceTenhtTest, StartAutoStartupApps_003, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTenhtTest StartAutoStartupApps_003 start"); + auto abilityMs = std::make_shared(); + EXPECT_NE(abilityMs, nullptr); + auto taskHandler = MockTaskHandlerWrap::CreateQueueHandler("AbilityManagerServiceTenhtTest"); + abilityMs->taskHandler_ = taskHandler; + EXPECT_CALL(*taskHandler, SubmitTaskInner(_, _)).Times(0); + std::queue infoQueue; + abilityMs->StartAutoStartupApps(infoQueue); + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTenhtTest StartAutoStartupApps_003 end"); +} + +/* + * Feature: AbilityManagerService + * Name: StartAutoStartupApps_004 + * Function: StartAutoStartupApps + * SubFunction: NA + */ +HWTEST_F(AbilityManagerServiceTenhtTest, StartAutoStartupApps_004, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTenhtTest StartAutoStartupApps_004 start"); + auto abilityMs = std::make_shared(); + EXPECT_NE(abilityMs, nullptr); + auto taskHandler = MockTaskHandlerWrap::CreateQueueHandler("AbilityManagerServiceTenhtTest"); + abilityMs->taskHandler_ = taskHandler; + EXPECT_CALL(*taskHandler, SubmitTaskInner(_, _)).Times(testing::AtLeast(1)); + AutoStartupInfo autoStartupInfo; + std::queue infoQueue; + infoQueue.push(autoStartupInfo); + abilityMs->StartAutoStartupApps(infoQueue); + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTenhtTest StartAutoStartupApps_004 end"); +} } // namespace AAFwk } // namespace OHOS diff --git a/test/unittest/ability_manager_service_twelfth_test/BUILD.gn b/test/unittest/ability_manager_service_twelfth_test/BUILD.gn index 2eecc986dcd..484b6797cc6 100644 --- a/test/unittest/ability_manager_service_twelfth_test/BUILD.gn +++ b/test/unittest/ability_manager_service_twelfth_test/BUILD.gn @@ -81,6 +81,7 @@ ohos_unittest("ability_manager_service_twelfth_test") { "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_innerkits_path}/deps_wrapper:ability_deps_wrapper", "${ability_runtime_innerkits_path}/uri_permission:uri_permission_mgr", + "${ability_runtime_native_path}/ability/native:auto_startup_callback", "${ability_runtime_native_path}/appkit:appkit_manager_helper", "${ability_runtime_services_path}/abilitymgr:abilityms", "${ability_runtime_services_path}/common:app_util", -- Gitee