diff --git a/interfaces/inner_api/appexecfwk_base/include/appexecfwk_errors.h b/interfaces/inner_api/appexecfwk_base/include/appexecfwk_errors.h index fca20adac689d662921c0f5b957329f72ecf28e9..dbb29aff62ee44b48ae6e2728a8f0654da263ea5 100644 --- a/interfaces/inner_api/appexecfwk_base/include/appexecfwk_errors.h +++ b/interfaces/inner_api/appexecfwk_base/include/appexecfwk_errors.h @@ -148,7 +148,9 @@ enum { ERR_APPEXECFWK_INSTALL_GWP_ASAN_ENABLED_NOT_SAME = 8519783, ERR_APPEXECFWK_INSTALL_DEBUG_BUNDLE_NOT_ALLOWED = 8519784, ERR_APPEXECFWK_INSTALL_FAILED_CONTROLLED = 8519785, + ERR_APPEXECFWK_INSTALL_MULTI_APP_MAX_COUNT_DECREASE = 8519786, ERR_APPEXECFWK_INSTALL_APP_IN_BLOCKLIST = 8519787, + ERR_APPEXECFWK_INSTALL_INTERNALTESTING_BUNDLE_NOT_ALLOWED = 8519788, // native bundle ERR_APPEXECFWK_NATIVE_INSTALL_FAILED = 8519790, diff --git a/interfaces/inner_api/appexecfwk_base/include/bundle_constants.h b/interfaces/inner_api/appexecfwk_base/include/bundle_constants.h index 6f331291ec483ab3578513dfac8963f9abf49d8c..1c8dfaad3e43b07e1a9543aceb1b3323f186c166 100644 --- a/interfaces/inner_api/appexecfwk_base/include/bundle_constants.h +++ b/interfaces/inner_api/appexecfwk_base/include/bundle_constants.h @@ -129,6 +129,7 @@ constexpr const char* APP_DISTRIBUTION_TYPE_APP_GALLERY = "app_gallery"; constexpr const char* APP_DISTRIBUTION_TYPE_ENTERPRISE = "enterprise"; constexpr const char* APP_DISTRIBUTION_TYPE_ENTERPRISE_NORMAL = "enterprise_normal"; constexpr const char* APP_DISTRIBUTION_TYPE_ENTERPRISE_MDM = "enterprise_mdm"; +constexpr const char* APP_DISTRIBUTION_TYPE_INTERNALTESTING = "internaltesting"; constexpr const char* APP_DISTRIBUTION_TYPE_OS_INTEGRATION = "os_integration"; constexpr const char* APP_DISTRIBUTION_TYPE_CROWDTESTING = "crowdtesting"; // app provision type diff --git a/interfaces/inner_api/appexecfwk_base/include/bundle_info.h b/interfaces/inner_api/appexecfwk_base/include/bundle_info.h index b04d354e8060459cb96de7c6528eac9412c79456..ed988fbeccd10904e33d3bccb482e03e98265012 100644 --- a/interfaces/inner_api/appexecfwk_base/include/bundle_info.h +++ b/interfaces/inner_api/appexecfwk_base/include/bundle_info.h @@ -92,6 +92,7 @@ struct SignatureInfo : public Parcelable { std::string appId; std::string fingerprint; std::string appIdentifier; + std::string certificate; bool ReadFromParcel(Parcel &parcel); virtual bool Marshalling(Parcel &parcel) const override; diff --git a/interfaces/inner_api/appexecfwk_base/include/install_param.h b/interfaces/inner_api/appexecfwk_base/include/install_param.h index e2d0c779502278bcc79459f5f65960bc9d51b2ed..b0cdbaecf7869c4382c95fd6f486cb879b0be625 100644 --- a/interfaces/inner_api/appexecfwk_base/include/install_param.h +++ b/interfaces/inner_api/appexecfwk_base/include/install_param.h @@ -72,6 +72,8 @@ struct InstallParam : public Parcelable { PermissionStatus installEtpNormalBundlePermissionStatus = PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS; // status of install enterprise mdm bundle permission PermissionStatus installEtpMdmBundlePermissionStatus = PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS; + // status of install internaltesting bundle permission + PermissionStatus installInternaltestingBundlePermissionStatus = PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS; // status of mdm update bundle for self PermissionStatus installUpdateSelfBundlePermissionStatus = PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS; // is shell token diff --git a/interfaces/inner_api/appexecfwk_base/src/bundle_info.cpp b/interfaces/inner_api/appexecfwk_base/src/bundle_info.cpp index 1c166fc2593b0675ff9690f546121f3e358dadbd..163c55ef97046b94372bafa7819f2c582eb0cf93 100644 --- a/interfaces/inner_api/appexecfwk_base/src/bundle_info.cpp +++ b/interfaces/inner_api/appexecfwk_base/src/bundle_info.cpp @@ -158,6 +158,7 @@ bool SignatureInfo::ReadFromParcel(Parcel &parcel) appId = Str16ToStr8(parcel.ReadString16()); fingerprint = Str16ToStr8(parcel.ReadString16()); appIdentifier = Str16ToStr8(parcel.ReadString16()); + certificate = Str16ToStr8(parcel.ReadString16()); return true; } @@ -166,6 +167,7 @@ bool SignatureInfo::Marshalling(Parcel &parcel) const WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(appId)); WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(fingerprint)); WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(appIdentifier)); + WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(certificate)); return true; } diff --git a/interfaces/inner_api/appexecfwk_core/src/bundlemgr/bundle_status_callback_proxy.cpp b/interfaces/inner_api/appexecfwk_core/src/bundlemgr/bundle_status_callback_proxy.cpp index 663b3af896199764c249bc2abfa19e49c4a56471..5def1af3dac69bad959c890f5829ea769127cd48 100644 --- a/interfaces/inner_api/appexecfwk_core/src/bundlemgr/bundle_status_callback_proxy.cpp +++ b/interfaces/inner_api/appexecfwk_core/src/bundlemgr/bundle_status_callback_proxy.cpp @@ -164,6 +164,8 @@ void BundleStatusCallbackProxy::InitResultMap() {ERR_BUNDLEMANAGER_INSTALL_CODE_SIGNATURE_FILE_IS_INVALID, "ERR_BUNDLEMANAGER_INSTALL_CODE_SIGNATURE_FILE_IS_INVALID"}, {ERR_APPEXECFWK_INSTALL_ENTERPRISE_BUNDLE_NOT_ALLOWED, "ERR_APPEXECFWK_INSTALL_ENTERPRISE_BUNDLE_NOT_ALLOWED"}, + { ERR_APPEXECFWK_INSTALL_INTERNALTESTING_BUNDLE_NOT_ALLOWED, + "ERR_APPEXECFWK_INSTALL_INTERNALTESTING_BUNDLE_NOT_ALLOWED" }, {ERR_APPEXECFWK_INSTALL_SELF_UPDATE_BUNDLENAME_NOT_SAME, "ERR_APPEXECFWK_INSTALL_SELF_UPDATE_BUNDLENAME_NOT_SAME"}, {ERR_APPEXECFWK_INSTALL_GWP_ASAN_ENABLED_NOT_SAME, "ERR_APPEXECFWK_INSTALL_GWP_ASAN_ENABLED_NOT_SAME"}, diff --git a/interfaces/kits/js/common/common_func.cpp b/interfaces/kits/js/common/common_func.cpp index ca46569e0a7138198af965fa501ae0c1be28582a..403ca912d9e4a5fc20c4e0503edaca469ff82e48 100644 --- a/interfaces/kits/js/common/common_func.cpp +++ b/interfaces/kits/js/common/common_func.cpp @@ -1630,6 +1630,11 @@ void CommonFunc::ConvertSignatureInfo(napi_env env, const SignatureInfo &signatu NAPI_CALL_RETURN_VOID( env, napi_create_string_utf8(env, signatureInfo.appIdentifier.c_str(), NAPI_AUTO_LENGTH, &nAppIdentifier)); NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, value, "appIdentifier", nAppIdentifier)); + + napi_value nCertificate; + NAPI_CALL_RETURN_VOID( + env, napi_create_string_utf8(env, signatureInfo.certificate.c_str(), NAPI_AUTO_LENGTH, &nCertificate)); + NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, value, "certificate", nCertificate)); } void CommonFunc::ConvertHapModuleInfo(napi_env env, const HapModuleInfo &hapModuleInfo, napi_value objHapModuleInfo) diff --git a/interfaces/kits/js/installer/installer.cpp b/interfaces/kits/js/installer/installer.cpp index 356ba218685d736f003a77d893274228b1191dae..8bd0aaa92b243810882470268106773be993836b 100644 --- a/interfaces/kits/js/installer/installer.cpp +++ b/interfaces/kits/js/installer/installer.cpp @@ -49,7 +49,8 @@ constexpr const char* INSTALL_PERMISSION = "ohos.permission.INSTALL_BUNDLE or " "ohos.permission.INSTALL_ENTERPRISE_BUNDLE or " "ohos.permission.INSTALL_ENTERPRISE_MDM_BUNDLE or " - "ohos.permission.INSTALL_ENTERPRISE_NORMAL_BUNDLE"; + "ohos.permission.INSTALL_ENTERPRISE_NORMAL_BUNDLE or " + "ohos.permission.INSTALL_INTERNALTESTING_BUNDLE"; constexpr const char* UNINSTALL_PERMISSION = "ohos.permission.INSTALL_BUNDLE or ohos.permission.UNINSTALL_BUNDLE"; constexpr const char* RECOVER_PERMISSION = "ohos.permission.INSTALL_BUNDLE or ohos.permission.RECOVER_BUNDLE"; constexpr const char* INSTALL_SELF_PERMISSION = "ohos.permission.INSTALL_SELF_BUNDLE"; diff --git a/services/bundlemgr/include/base_bundle_installer.h b/services/bundlemgr/include/base_bundle_installer.h index c6b420b9fde5485fada015ec58135ebe0bb5548f..794f01c88d8fa9cf59c14518ba29215d39883419 100644 --- a/services/bundlemgr/include/base_bundle_installer.h +++ b/services/bundlemgr/include/base_bundle_installer.h @@ -778,6 +778,7 @@ private: std::string entryModuleName_ = ""; std::map pgoParams_; bool isEnterpriseBundle_ = false; + bool isInternaltestingBundle_ = false; std::string appIdentifier_ = ""; // When it is true, it means that the same bundleName and same userId was uninstalled with keepData before bool existBeforeKeepDataApp_ = false; diff --git a/services/bundlemgr/include/bundle_install_checker.h b/services/bundlemgr/include/bundle_install_checker.h index 6b764e0a9a3fd940c1b41884916eb1e87c577d5f..f7fcf3fed1ffd9fd115a3e83227f9d672b3ee559 100644 --- a/services/bundlemgr/include/bundle_install_checker.h +++ b/services/bundlemgr/include/bundle_install_checker.h @@ -42,6 +42,8 @@ struct InstallCheckParam { PermissionStatus installEtpNormalBundlePermissionStatus = PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS; // status of install enterprise mdm bundle permission PermissionStatus installEtpMdmBundlePermissionStatus = PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS; + // status of install internaltesting bundle permission + PermissionStatus installInternaltestingBundlePermissionStatus = PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS; // is shell token bool isCallByShell = false; Constants::AppType appType = Constants::AppType::THIRD_PARTY_APP; @@ -139,6 +141,9 @@ public: bool VaildEnterpriseInstallPermission(const InstallParam &installParam, const Security::Verify::ProvisionInfo &provisionInfo); + + bool ValidInternaltestingInstallPermission(const InstallParam &installParam, + const Security::Verify::ProvisionInfo &provisionInfo); bool VaildInstallPermissionForShare(const InstallCheckParam &checkParam, const std::vector &hapVerifyRes); @@ -146,6 +151,9 @@ public: bool VaildEnterpriseInstallPermissionForShare(const InstallCheckParam &checkParam, const Security::Verify::ProvisionInfo &provisionInfo); + bool VaildInternaltestngInstallPermissionForShare(const InstallCheckParam &checkParam, + const Security::Verify::ProvisionInfo &provisionInfo); + ErrCode CheckModuleNameForMulitHaps(const std::unordered_map &infos); bool IsExistedDistroModule(const InnerBundleInfo &newInfo, const InnerBundleInfo &info) const; @@ -167,6 +175,7 @@ public: ErrCode CheckAllowEnterpriseBundle(const std::vector &hapVerifyRes) const; bool CheckEnterpriseBundle(Security::Verify::HapVerifyResult &hapVerifyRes) const; + bool CheckInternaltestingBundle(Security::Verify::HapVerifyResult &hapVerifyRes) const; bool CheckSupportAppTypes( const std::unordered_map &infos, const std::string &supportAppTypes) const; diff --git a/services/bundlemgr/include/bundle_service_constants.h b/services/bundlemgr/include/bundle_service_constants.h index 415aeee1b781bbbd985de46f399f4c3a63231028..6706d1b533bec37afcc2f9f08c70fbee1dedc47c 100644 --- a/services/bundlemgr/include/bundle_service_constants.h +++ b/services/bundlemgr/include/bundle_service_constants.h @@ -109,6 +109,7 @@ constexpr int32_t LOG_DIR_GID = 1007; constexpr const char* PERMISSION_INSTALL_ENTERPRISE_BUNDLE = "ohos.permission.INSTALL_ENTERPRISE_BUNDLE"; constexpr const char* PERMISSION_INSTALL_ENTERPRISE_NORMAL_BUNDLE = "ohos.permission.INSTALL_ENTERPRISE_NORMAL_BUNDLE"; constexpr const char* PERMISSION_INSTALL_ENTERPRISE_MDM_BUNDLE = "ohos.permission.INSTALL_ENTERPRISE_MDM_BUNDLE"; +constexpr const char* PERMISSION_INSTALL_INTERNALTESTING_BUNDLE = "ohos.permission.INSTALL_INTERNALTESTING_BUNDLE"; constexpr const char* PERMISSION_MANAGE_DISPOSED_APP_STATUS = "ohos.permission.MANAGE_DISPOSED_APP_STATUS"; constexpr const char* PERMISSION_INSTALL_SELF_BUNDLE = "ohos.permission.INSTALL_SELF_BUNDLE"; constexpr const char* PERMISSION_UNINSTALL_BUNDLE = "ohos.permission.UNINSTALL_BUNDLE"; @@ -149,6 +150,7 @@ constexpr const char* SECURITY_SIGNATURE_FILE_PATH = "security_signature_files"; constexpr const char* PGO_FILE_SUFFIX = ".ap"; // system param constexpr const char* ALLOW_ENTERPRISE_BUNDLE = "const.bms.allowenterprisebundle"; +constexpr const char* ALLOW_INTERNALRTESTING_BUNDLE = "const.bms.allinternaltestingbundle"; constexpr const char* IS_ENTERPRISE_DEVICE = "const.edm.is_enterprise_device"; constexpr const char* DEVELOPERMODE_STATE = "const.security.developermode.state"; //extResource diff --git a/services/bundlemgr/include/inner_bundle_info.h b/services/bundlemgr/include/inner_bundle_info.h index 4eb4198c0babefd6bd8aa5d87bfd6e1da7900191..7d0d9207f284d8a521adcacb2257c5d1c61d4341 100644 --- a/services/bundlemgr/include/inner_bundle_info.h +++ b/services/bundlemgr/include/inner_bundle_info.h @@ -2183,6 +2183,8 @@ public: void SetResourcesApply(const std::vector &resourcesApply); void SetAppIdentifier(const std::string &appIdentifier); std::string GetAppIdentifier() const; + void SetCertificate(const std::string &certificate); + std::string GetCertificate() const; void AddOldAppId(const std::string &appId); std::vector GetOldAppIds() const; void SetMoudleIsEncrpted(const std::string &packageName, bool isEncrypted); diff --git a/services/bundlemgr/include/ipc/code_signature_param.h b/services/bundlemgr/include/ipc/code_signature_param.h index 6caae4d907c742c0021751234b8a461d3f2fc956..b5abdde1b190918cbf3f8ecc8743c44cb99edb22 100644 --- a/services/bundlemgr/include/ipc/code_signature_param.h +++ b/services/bundlemgr/include/ipc/code_signature_param.h @@ -26,6 +26,7 @@ struct CodeSignatureParam : public Parcelable { std::string targetSoPath; std::string signatureFileDir; bool isEnterpriseBundle = false; + bool isInternaltestingBundle = false; std::string appIdentifier; bool isPreInstalledBundle = false; bool isCompileSdkOpenHarmony = false; diff --git a/services/bundlemgr/src/base_bundle_installer.cpp b/services/bundlemgr/src/base_bundle_installer.cpp index 1719b951d754ba60a88ec2dc716eaf73205f7871..2d29fc5255eb9c3bc15386e418c7fa120782638e 100644 --- a/services/bundlemgr/src/base_bundle_installer.cpp +++ b/services/bundlemgr/src/base_bundle_installer.cpp @@ -1147,6 +1147,12 @@ ErrCode BaseBundleInstaller::ProcessBundleInstall(const std::vector CHECK_RESULT(result, "check install verifyActivation failed %{public}d"); result = CheckInstallPermission(installParam, hapVerifyResults); CHECK_RESULT(result, "check install permission failed %{public}d"); + for (uint32_t i = 0; i < hapVerifyResults.size(); ++i) { + Security::Verify::ProvisionInfo provisionInfo = hapVerifyResults[i].GetProvisionInfo(); + if (provisionInfo.distributionType == Security::Verify::AppDistType::INTERNALTESTING) { + DeliveryProfileToCodeSign(); + } + } result = CheckInstallCondition(hapVerifyResults, newInfos); CHECK_RESULT(result, "check install condition failed %{public}d"); // check the dependencies whether or not exists @@ -1154,6 +1160,13 @@ ErrCode BaseBundleInstaller::ProcessBundleInstall(const std::vector CHECK_RESULT(result, "check dependency failed %{public}d"); // hapVerifyResults at here will not be empty verifyRes_ = hapVerifyResults[0]; + + Security::Verify::ProvisionInfo provisionInfo = verifyRes_.GetProvisionInfo(); + if (provisionInfo.distributionType == Security::Verify::AppDistType::INTERNALTESTING) { + result = DeliveryProfileToCodeSign(); + CHECK_RESULT(result, "delivery profile failed %{public}d"); + } + UpdateInstallerState(InstallerState::INSTALL_PARSED); // ---- 20% userId_ = GetConfirmUserId(userId_, newInfos); @@ -3560,6 +3573,7 @@ ErrCode BaseBundleInstaller::ParseHapFiles( isContainEntry_ = bundleInstallChecker_->IsContainEntry(); /* At this place, hapVerifyRes cannot be empty and unnecessary to check it */ isEnterpriseBundle_ = bundleInstallChecker_->CheckEnterpriseBundle(hapVerifyRes[0]); + isInternaltestingBundle_ = bundleInstallChecker_->CheckInternaltestingBundle(hapVerifyRes[0]); appIdentifier_ = (hapVerifyRes[0].GetProvisionInfo().type == Security::Verify::ProvisionType::DEBUG) ? DEBUG_APP_IDENTIFIER : hapVerifyRes[0].GetProvisionInfo().bundleInfo.appIdentifier; SetAppDistributionType(infos); @@ -3891,6 +3905,7 @@ ErrCode BaseBundleInstaller::CheckInstallPermission(const InstallParam &installP installParam.installEnterpriseBundlePermissionStatus != PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS || installParam.installEtpNormalBundlePermissionStatus != PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS || installParam.installEtpMdmBundlePermissionStatus != PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS || + installParam.installInternaltestingBundlePermissionStatus != PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS || installParam.installUpdateSelfBundlePermissionStatus != PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS) && !bundleInstallChecker_->VaildInstallPermission(installParam, hapVerifyRes)) { // need vaild permission @@ -4580,6 +4595,7 @@ void BaseBundleInstaller::ResetInstallProperties() isEntryInstalled_ = false; entryModuleName_.clear(); isEnterpriseBundle_ = false; + isInternaltestingBundle_ = false; appIdentifier_.clear(); targetSoPathMap_.clear(); existBeforeKeepDataApp_ = false; @@ -5019,6 +5035,7 @@ ErrCode BaseBundleInstaller::VerifyCodeSignatureForNativeFiles(InnerBundleInfo & codeSignatureParam.targetSoPath = targetSoPath; codeSignatureParam.signatureFileDir = signatureFileDir; codeSignatureParam.isEnterpriseBundle = isEnterpriseBundle_; + codeSignatureParam.isInternaltestingBundle = isInternaltestingBundle_; codeSignatureParam.appIdentifier = appIdentifier_; codeSignatureParam.isPreInstalledBundle = info.IsPreInstallApp(); codeSignatureParam.isCompileSdkOpenHarmony = (compileSdkType == COMPILE_SDK_TYPE_OPEN_HARMONY); @@ -5052,6 +5069,7 @@ ErrCode BaseBundleInstaller::VerifyCodeSignatureForHap(const std::unordered_map< codeSignatureParam.modulePath = realHapPath; codeSignatureParam.signatureFileDir = signatureFileDir; codeSignatureParam.isEnterpriseBundle = isEnterpriseBundle_; + codeSignatureParam.isInternaltestingBundle = isInternaltestingBundle_; codeSignatureParam.appIdentifier = appIdentifier_; codeSignatureParam.isCompileSdkOpenHarmony = (compileSdkType == COMPILE_SDK_TYPE_OPEN_HARMONY); codeSignatureParam.isPreInstalledBundle = (iter->second).IsPreInstallApp(); @@ -5529,6 +5547,7 @@ ErrCode BaseBundleInstaller::DeliveryProfileToCodeSign() const if (provisionInfo.distributionType == Security::Verify::AppDistType::ENTERPRISE || provisionInfo.distributionType == Security::Verify::AppDistType::ENTERPRISE_NORMAL || provisionInfo.distributionType == Security::Verify::AppDistType::ENTERPRISE_MDM || + provisionInfo.distributionType == Security::Verify::AppDistType::INTERNALTESTING || provisionInfo.type == Security::Verify::ProvisionType::DEBUG) { return InstalldClient::GetInstance()->DeliverySignProfile(provisionInfo.bundleInfo.bundleName, provisionInfo.profileBlockLength, provisionInfo.profileBlock.get()); diff --git a/services/bundlemgr/src/bundle_data_mgr.cpp b/services/bundlemgr/src/bundle_data_mgr.cpp index 0fa0637ca363cb9b0e3a06b50acc90488986fe66..47462f565bbaa1db8383390ee95ddee60ae969f0 100644 --- a/services/bundlemgr/src/bundle_data_mgr.cpp +++ b/services/bundlemgr/src/bundle_data_mgr.cpp @@ -353,6 +353,7 @@ bool BundleDataMgr::AddNewModuleInfo( oldInfo.SetProvisionId(newInfo.GetProvisionId()); oldInfo.SetCertificateFingerprint(newInfo.GetCertificateFingerprint()); oldInfo.SetAppIdentifier(newInfo.GetAppIdentifier()); + oldInfo.SetCertificate(newInfo.GetCertificate()); oldInfo.AddOldAppId(newInfo.GetAppId()); oldInfo.SetAppPrivilegeLevel(newInfo.GetAppPrivilegeLevel()); oldInfo.UpdateNativeLibAttrs(newInfo.GetBaseApplicationInfo()); @@ -634,6 +635,7 @@ bool BundleDataMgr::UpdateInnerBundleInfo( oldInfo.AddOldAppId(newInfo.GetAppId()); oldInfo.SetProvisionId(newInfo.GetProvisionId()); oldInfo.SetAppIdentifier(newInfo.GetAppIdentifier()); + oldInfo.SetCertificate(newInfo.GetCertificate()); oldInfo.SetAppPrivilegeLevel(newInfo.GetAppPrivilegeLevel()); oldInfo.UpdateAppDetailAbilityAttrs(); oldInfo.UpdateDataGroupInfos(newInfo.GetDataGroupInfos()); diff --git a/services/bundlemgr/src/bundle_install_checker.cpp b/services/bundlemgr/src/bundle_install_checker.cpp index 2d6d9ca80f65f9158b4d9de3cc74add919f56254..d824392393fe3ff5e2e707bbeb698e91434a4848 100644 --- a/services/bundlemgr/src/bundle_install_checker.cpp +++ b/services/bundlemgr/src/bundle_install_checker.cpp @@ -257,10 +257,12 @@ bool BundleInstallChecker::VaildInstallPermission(const InstallParam &installPar PermissionStatus installBundleStatus = installParam.installBundlePermissionStatus; PermissionStatus installEnterpriseBundleStatus = installParam.installEnterpriseBundlePermissionStatus; PermissionStatus installEtpMdmBundleStatus = installParam.installEtpMdmBundlePermissionStatus; + PermissionStatus installInternaltestingBundleStatus = installParam.installInternaltestingBundlePermissionStatus; bool isCallByShell = installParam.isCallByShell; if (!isCallByShell && installBundleStatus == PermissionStatus::HAVE_PERMISSION_STATUS && installEnterpriseBundleStatus == PermissionStatus::HAVE_PERMISSION_STATUS && - installEtpMdmBundleStatus == PermissionStatus::HAVE_PERMISSION_STATUS) { + installEtpMdmBundleStatus == PermissionStatus::HAVE_PERMISSION_STATUS && + installInternaltestingBundleStatus == PermissionStatus::HAVE_PERMISSION_STATUS) { return true; } for (uint32_t i = 0; i < hapVerifyRes.size(); ++i) { @@ -284,6 +286,13 @@ bool BundleInstallChecker::VaildInstallPermission(const InstallParam &installPar } continue; } + if (provisionInfo.distributionType == Security::Verify::AppDistType::INTERNALTESTING) { + if (!isCallByShell && installInternaltestingBundleStatus != PermissionStatus::HAVE_PERMISSION_STATUS) { + LOG_E(BMS_TAG_INSTALLER, "install internaltesting bundle permission denied"); + return false; + } + continue; + } if (installBundleStatus != PermissionStatus::HAVE_PERMISSION_STATUS) { LOG_E(BMS_TAG_INSTALLER, "install permission denied"); return false; @@ -437,6 +446,7 @@ ErrCode BundleInstallChecker::CheckInstallPermission(const InstallCheckParam &ch if ((checkParam.installBundlePermissionStatus != PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS || checkParam.installEnterpriseBundlePermissionStatus != PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS || checkParam.installEtpNormalBundlePermissionStatus != PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS || + checkParam.installInternaltestingBundlePermissionStatus != PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS || checkParam.installEtpMdmBundlePermissionStatus != PermissionStatus::NOT_VERIFIED_PERMISSION_STATUS) && !VaildInstallPermissionForShare(checkParam, hapVerifyRes)) { // need vaild permission @@ -452,10 +462,12 @@ bool BundleInstallChecker::VaildInstallPermissionForShare(const InstallCheckPara PermissionStatus installBundleStatus = checkParam.installBundlePermissionStatus; PermissionStatus installEnterpriseBundleStatus = checkParam.installEnterpriseBundlePermissionStatus; PermissionStatus installEtpMdmBundleStatus = checkParam.installEtpMdmBundlePermissionStatus; + PermissionStatus installInternaltestingBundleStatus = checkParam.installInternaltestingBundlePermissionStatus; bool isCallByShell = checkParam.isCallByShell; if (!isCallByShell && installBundleStatus == PermissionStatus::HAVE_PERMISSION_STATUS && installEnterpriseBundleStatus == PermissionStatus::HAVE_PERMISSION_STATUS && - installEtpMdmBundleStatus == PermissionStatus::HAVE_PERMISSION_STATUS) { + installEtpMdmBundleStatus == PermissionStatus::HAVE_PERMISSION_STATUS && + installInternaltestingBundleStatus == PermissionStatus::HAVE_PERMISSION_STATUS) { return true; } for (uint32_t i = 0; i < hapVerifyRes.size(); ++i) { @@ -471,6 +483,17 @@ bool BundleInstallChecker::VaildInstallPermissionForShare(const InstallCheckPara } continue; } + if (provisionInfo.distributionType == Security::Verify::AppDistType::INTERNALTESTING) { + if (isCallByShell && provisionInfo.type != Security::Verify::ProvisionType::DEBUG) { + LOG_E(BMS_TAG_INSTALLER, "internaltesting bundle can not be installed by shell"); + return false; + } + if (!isCallByShell && installInternaltestingBundleStatus != PermissionStatus::HAVE_PERMISSION_STATUS) { + LOG_E(BMS_TAG_INSTALLER, "install internaltesting bundle permission denied"); + return false; + } + continue; + } if (provisionInfo.distributionType == Security::Verify::AppDistType::ENTERPRISE_NORMAL || provisionInfo.distributionType == Security::Verify::AppDistType::ENTERPRISE_MDM) { bool result = VaildEnterpriseInstallPermissionForShare(checkParam, provisionInfo); @@ -665,6 +688,11 @@ void BundleInstallChecker::CollectProvisionInfo( #endif newInfo.AddOldAppId(newInfo.GetAppId()); newInfo.SetAppIdentifier(provisionInfo.bundleInfo.appIdentifier); + if (provisionInfo.type == Security::Verify::ProvisionType::DEBUG) { + newInfo.SetCertificate(provisionInfo.bundleInfo.developmentCertificate); + } else { + newInfo.SetCertificate(provisionInfo.bundleInfo.distributionCertificate); + } } void BundleInstallChecker::SetAppProvisionMetadata(const std::vector &provisionMetadatas, @@ -1584,6 +1612,15 @@ bool BundleInstallChecker::CheckEnterpriseBundle(Security::Verify::HapVerifyResu return false; } +bool BundleInstallChecker::CheckInternaltestingBundle(Security::Verify::HapVerifyResult &hapVerifyRes) const +{ + Security::Verify::ProvisionInfo provisionInfo = hapVerifyRes.GetProvisionInfo(); + if (provisionInfo.distributionType == Security::Verify::AppDistType::INTERNALTESTING) { + return true; + } + return false; +} + std::string BundleInstallChecker::GetCheckResultMsg() const { return checkResultMsg_; diff --git a/services/bundlemgr/src/bundle_installer_host.cpp b/services/bundlemgr/src/bundle_installer_host.cpp index 9bdf26efde0d4674316cc0b6e1982373966b166f..74d658c5d0a36da4cf31d79a9ddf6bd5e533a152 100644 --- a/services/bundlemgr/src/bundle_installer_host.cpp +++ b/services/bundlemgr/src/bundle_installer_host.cpp @@ -361,7 +361,9 @@ bool BundleInstallerHost::Install( !BundlePermissionMgr::VerifyCallingPermissionForAll( ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_NORMAL_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll( - ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_MDM_BUNDLE)) { + ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_MDM_BUNDLE) && + !BundlePermissionMgr::VerifyCallingPermissionForAll( + ServiceConstants::PERMISSION_INSTALL_INTERNALTESTING_BUNDLE)) { LOG_E(BMS_TAG_INSTALLER, "install permission denied"); statusReceiver->OnFinished(ERR_APPEXECFWK_INSTALL_PERMISSION_DENIED, ""); return false; @@ -390,7 +392,9 @@ bool BundleInstallerHost::Install(const std::vector &bundleFilePath !BundlePermissionMgr::VerifyCallingPermissionForAll( ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_NORMAL_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll( - ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_MDM_BUNDLE)) { + ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_MDM_BUNDLE) && + !BundlePermissionMgr::VerifyCallingPermissionForAll( + ServiceConstants::PERMISSION_INSTALL_INTERNALTESTING_BUNDLE)) { LOG_E(BMS_TAG_INSTALLER, "install permission denied"); statusReceiver->OnFinished(ERR_APPEXECFWK_INSTALL_PERMISSION_DENIED, ""); return false; @@ -507,7 +511,9 @@ bool BundleInstallerHost::InstallByBundleName(const std::string &bundleName, !BundlePermissionMgr::VerifyCallingPermissionForAll( ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_NORMAL_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll( - ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_MDM_BUNDLE)) { + ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_MDM_BUNDLE) && + !BundlePermissionMgr::VerifyCallingPermissionForAll( + ServiceConstants::PERMISSION_INSTALL_INTERNALTESTING_BUNDLE)) { LOG_E(BMS_TAG_INSTALLER, "install permission denied"); statusReceiver->OnFinished(ERR_APPEXECFWK_INSTALL_PERMISSION_DENIED, ""); return false; @@ -633,6 +639,10 @@ bool BundleInstallerHost::IsPermissionVaild(const InstallParam &installParam, In verifiedInstallParam.installEtpMdmBundlePermissionStatus = BundlePermissionMgr::VerifyCallingPermissionForAll(ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_MDM_BUNDLE) ? PermissionStatus::HAVE_PERMISSION_STATUS : PermissionStatus::NON_HAVE_PERMISSION_STATUS; + verifiedInstallParam.installInternaltestingBundlePermissionStatus = + BundlePermissionMgr::VerifyCallingPermissionForAll(ServiceConstants::PERMISSION_INSTALL_INTERNALTESTING_BUNDLE) + ? PermissionStatus::HAVE_PERMISSION_STATUS + : PermissionStatus::NON_HAVE_PERMISSION_STATUS; verifiedInstallParam.installUpdateSelfBundlePermissionStatus = BundlePermissionMgr::VerifyCallingPermissionForAll(ServiceConstants::PERMISSION_INSTALL_SELF_BUNDLE) ? PermissionStatus::HAVE_PERMISSION_STATUS : PermissionStatus::NON_HAVE_PERMISSION_STATUS; @@ -657,6 +667,8 @@ bool BundleInstallerHost::DestoryBundleStreamInstaller(uint32_t streamInstallerI ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_NORMAL_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll( ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_MDM_BUNDLE) && + !BundlePermissionMgr::VerifyCallingPermissionForAll( + ServiceConstants::PERMISSION_INSTALL_INTERNALTESTING_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll(ServiceConstants::PERMISSION_INSTALL_QUICK_FIX_BUNDLE)) { LOG_E(BMS_TAG_INSTALLER, "install permission denied"); return false; diff --git a/services/bundlemgr/src/bundle_mgr_host_impl.cpp b/services/bundlemgr/src/bundle_mgr_host_impl.cpp index a08cdd22a1e03ccd8c78ee1f0119e089d2fd22d9..13a67f0c0e6fe0b1884954e40e7ceff786ecac3c 100644 --- a/services/bundlemgr/src/bundle_mgr_host_impl.cpp +++ b/services/bundlemgr/src/bundle_mgr_host_impl.cpp @@ -4072,6 +4072,11 @@ void BundleMgrHostImpl::SetProvisionInfoToInnerBundleInfo(const std::string &hap info.SetProvisionId(provisionInfo.appId); info.SetCertificateFingerprint(provisionInfo.fingerprint); info.SetAppIdentifier(provisionInfo.bundleInfo.appIdentifier); + if (provisionInfo.type == Security::Verify::ProvisionType::DEBUG) { + info.SetCertificate(provisionInfo.bundleInfo.developmentCertificate); + } else { + info.SetCertificate(provisionInfo.bundleInfo.distributionCertificate); + } info.SetAppPrivilegeLevel(provisionInfo.bundleInfo.apl); bool isDebug = provisionInfo.type == Security::Verify::ProvisionType::DEBUG; info.SetAppProvisionType(isDebug ? Constants::APP_PROVISION_TYPE_DEBUG : Constants::APP_PROVISION_TYPE_RELEASE); diff --git a/services/bundlemgr/src/bundle_stream_installer_host_impl.cpp b/services/bundlemgr/src/bundle_stream_installer_host_impl.cpp index 140ccfcbecd40aa79405ab0c3789ef3564c6ea61..464fb0fd0962a5a02db01d3a32e13fba3b6b9bc9 100644 --- a/services/bundlemgr/src/bundle_stream_installer_host_impl.cpp +++ b/services/bundlemgr/src/bundle_stream_installer_host_impl.cpp @@ -102,6 +102,8 @@ int32_t BundleStreamInstallerHostImpl::CreateStream(const std::string &fileName) ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_NORMAL_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll( ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_MDM_BUNDLE) && + !BundlePermissionMgr::VerifyCallingPermissionForAll( + ServiceConstants::PERMISSION_INSTALL_INTERNALTESTING_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll(ServiceConstants::PERMISSION_INSTALL_SELF_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll(ServiceConstants::PERMISSION_INSTALL_SANDBOX_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll(ServiceConstants::PERMISSION_INSTALL_QUICK_FIX_BUNDLE)) { @@ -152,6 +154,8 @@ int32_t BundleStreamInstallerHostImpl::CreateSignatureFileStream(const std::stri ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_NORMAL_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll( ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_MDM_BUNDLE) && + !BundlePermissionMgr::VerifyCallingPermissionForAll( + ServiceConstants::PERMISSION_INSTALL_INTERNALTESTING_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll(ServiceConstants::PERMISSION_INSTALL_SELF_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll(ServiceConstants::PERMISSION_INSTALL_SANDBOX_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll(ServiceConstants::PERMISSION_INSTALL_QUICK_FIX_BUNDLE)) { @@ -203,6 +207,8 @@ int32_t BundleStreamInstallerHostImpl::CreateSharedBundleStream(const std::strin ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_NORMAL_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll( ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_MDM_BUNDLE) && + !BundlePermissionMgr::VerifyCallingPermissionForAll( + ServiceConstants::PERMISSION_INSTALL_INTERNALTESTING_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll(ServiceConstants::PERMISSION_INSTALL_SELF_BUNDLE)) { APP_LOGE("CreateSharedBundleStream permission denied"); return Constants::DEFAULT_STREAM_FD; @@ -258,6 +264,8 @@ int32_t BundleStreamInstallerHostImpl::CreatePgoFileStream(const std::string &mo ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_NORMAL_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll( ServiceConstants::PERMISSION_INSTALL_ENTERPRISE_MDM_BUNDLE) && + !BundlePermissionMgr::VerifyCallingPermissionForAll( + ServiceConstants::PERMISSION_INSTALL_INTERNALTESTING_BUNDLE) && !BundlePermissionMgr::VerifyCallingPermissionForAll(ServiceConstants::PERMISSION_INSTALL_SELF_BUNDLE)) { APP_LOGE("CreatePgoFileStream permission denied"); return Constants::DEFAULT_STREAM_FD; diff --git a/services/bundlemgr/src/bundle_verify_mgr.cpp b/services/bundlemgr/src/bundle_verify_mgr.cpp index 196a4af4976a4890894fb26cc7bf545dfdcbdbac..89924ebfd472641566795a3e48778021119a5236 100644 --- a/services/bundlemgr/src/bundle_verify_mgr.cpp +++ b/services/bundlemgr/src/bundle_verify_mgr.cpp @@ -29,6 +29,7 @@ const std::unordered_map APP_DISTRIB { Security::Verify::AppDistType::ENTERPRISE, Constants::APP_DISTRIBUTION_TYPE_ENTERPRISE }, { Security::Verify::AppDistType::ENTERPRISE_NORMAL, Constants::APP_DISTRIBUTION_TYPE_ENTERPRISE_NORMAL }, { Security::Verify::AppDistType::ENTERPRISE_MDM, Constants::APP_DISTRIBUTION_TYPE_ENTERPRISE_MDM }, + { Security::Verify::AppDistType::INTERNALTESTING, Constants::APP_DISTRIBUTION_TYPE_INTERNALTESTING }, { Security::Verify::AppDistType::OS_INTEGRATION, Constants::APP_DISTRIBUTION_TYPE_OS_INTEGRATION }, { Security::Verify::AppDistType::CROWDTESTING, Constants::APP_DISTRIBUTION_TYPE_CROWDTESTING }, }; diff --git a/services/bundlemgr/src/inner_bundle_info.cpp b/services/bundlemgr/src/inner_bundle_info.cpp index 4b15a1d796646caffa251cb882f2f93e0667ce42..699f35dff1f076f27362d4f5864a33ac1d72d007 100644 --- a/services/bundlemgr/src/inner_bundle_info.cpp +++ b/services/bundlemgr/src/inner_bundle_info.cpp @@ -2523,6 +2523,7 @@ void InnerBundleInfo::ProcessBundleFlags( == static_cast(GetBundleInfoFlag::GET_BUNDLE_INFO_WITH_SIGNATURE_INFO)) { bundleInfo.signatureInfo.appId = baseBundleInfo_->appId; bundleInfo.signatureInfo.fingerprint = baseApplicationInfo_->fingerprint; + bundleInfo.signatureInfo.certificate = baseBundleInfo_->signatureInfo.certificate; } } @@ -4231,6 +4232,16 @@ void InnerBundleInfo::SetAppIdentifier(const std::string &appIdentifier) baseBundleInfo_->signatureInfo.appIdentifier = appIdentifier; } +void InnerBundleInfo::SetCertificate(const std::string &certificate) +{ + baseBundleInfo_->signatureInfo.certificate = certificate; +} + +std::string InnerBundleInfo::GetCertificate() const +{ + return baseBundleInfo_->signatureInfo.certificate; +} + void InnerBundleInfo::UpdateDebug(bool debug, bool isEntry) { if (isEntry) { diff --git a/services/bundlemgr/src/installd/installd_host_impl.cpp b/services/bundlemgr/src/installd/installd_host_impl.cpp index 1dfc70a3d46fa71b2f6ed40e009c1509e6f2aa32..2b515c3bab47dcbcd28855730286346a4fb11bbc 100644 --- a/services/bundlemgr/src/installd/installd_host_impl.cpp +++ b/services/bundlemgr/src/installd/installd_host_impl.cpp @@ -1398,6 +1398,10 @@ ErrCode InstalldHostImpl::VerifyCodeSignatureForHap(const CodeSignatureParam &co LOG_D(BMS_TAG_INSTALLD, "Verify code signature for enterprise bundle"); ret = codeSignHelper->EnforceCodeSignForAppWithOwnerId(codeSignatureParam.appIdentifier, codeSignatureParam.modulePath, entryMap, fileType); + } else if (codeSignatureParam.isInternaltestingBundle) { + LOG_D(BMS_TAG_INSTALLD, "Verify code signature for internaltesting bundle"); + ret = codeSignHelper->EnforceCodeSignForAppWithOwnerId(codeSignatureParam.appIdentifier, + codeSignatureParam.modulePath, entryMap, fileType); } else { LOG_D(BMS_TAG_INSTALLD, "Verify code signature for non-enterprise bundle"); ret = codeSignHelper->EnforceCodeSignForApp(codeSignatureParam.modulePath, entryMap, fileType); diff --git a/services/bundlemgr/src/shared/shared_bundle_installer.cpp b/services/bundlemgr/src/shared/shared_bundle_installer.cpp index 85d421bb7338fdeed2be9461790678932c968616..346847df6fc01e93e670f73c323ca156b59faf74 100644 --- a/services/bundlemgr/src/shared/shared_bundle_installer.cpp +++ b/services/bundlemgr/src/shared/shared_bundle_installer.cpp @@ -48,6 +48,8 @@ ErrCode SharedBundleInstaller::ParseFiles() checkParam.installEnterpriseBundlePermissionStatus = installParam_.installEnterpriseBundlePermissionStatus; checkParam.installEtpNormalBundlePermissionStatus = installParam_.installEtpNormalBundlePermissionStatus; checkParam.installEtpMdmBundlePermissionStatus = installParam_.installEtpMdmBundlePermissionStatus; + checkParam.installInternaltestingBundlePermissionStatus = + installParam_.installInternaltestingBundlePermissionStatus; checkParam.isCallByShell = installParam_.isCallByShell; for (const auto &path : installParam_.sharedBundleDirPaths) { diff --git a/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_install_checker_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_install_checker_test.cpp index 82bb192033f976e7377adf36a950fd07ee05ad4e..ddb35d53293a2f2ef52c9c5e6b89edf1580353e9 100755 --- a/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_install_checker_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_install_checker_test.cpp @@ -2390,6 +2390,23 @@ HWTEST_F(BmsBundleInstallCheckerTest, CheckEnterpriseBundle_0100, Function | Sma EXPECT_EQ(ret, true); } +/** + * @tc.number: CheckInternaltestingBundle_0100 + * @tc.name: test CheckInternaltestingBundle + * @tc.desc: 1.test check Internaltesting bundle + */ +HWTEST_F(BmsBundleInstallCheckerTest, CheckInternaltestingBundle_0100, Function | SmallTest | Level0) +{ + BundleInstallChecker installChecker; + Security::Verify::HapVerifyResult result; + Security::Verify::ProvisionInfo provisionInfo; + provisionInfo.type = Security::Verify::ProvisionType::DEBUG; + provisionInfo.distributionType = Security::Verify::AppDistType::INTERNALTESTING; + result.SetProvisionInfo(provisionInfo); + bool ret = installChecker.CheckInternaltestingBundle(result); + EXPECT_EQ(ret, true); +} + /** * @tc.number: ParseBundleInfo_0100 * @tc.name: test ParseBundleInfo diff --git a/services/bundlemgr/test/unittest/bms_bundle_quick_fix_test/bms_bundle_quick_fix_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_quick_fix_test/bms_bundle_quick_fix_test.cpp index 12add1223a6e168e14b114b0978e0ca5c94bb7e0..a504bd9689b1c662c4f60ce39a47745736caa1a2 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_quick_fix_test/bms_bundle_quick_fix_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_quick_fix_test/bms_bundle_quick_fix_test.cpp @@ -1763,13 +1763,13 @@ HWTEST_F(BmsBundleQuickFixTest, BmsBundleQuickFixTest_0058, Function | SmallTest * Function: GetAppDistributionType * @tc.name: test GetAppDistributionType * @tc.require: issueI5N7AD - * @tc.desc: GetAppDistributionType none + * @tc.desc: GetAppDistributionType internaltesting */ HWTEST_F(BmsBundleQuickFixTest, BmsBundleQuickFixTest_0059, Function | SmallTest | Level0) { QuickFixChecker checker; std::string type = checker.GetAppDistributionType(static_cast(7)); - EXPECT_EQ(type, "none"); + EXPECT_EQ(type, "internaltesting"); } /**