diff --git a/services/bundlemgr/src/bundle_data_mgr.cpp b/services/bundlemgr/src/bundle_data_mgr.cpp index 224f4fe397edaca83fe6db0e370b0d2ea38227ce..17f14ca3aea0285132c0ea6478a94d7687cac9cd 100644 --- a/services/bundlemgr/src/bundle_data_mgr.cpp +++ b/services/bundlemgr/src/bundle_data_mgr.cpp @@ -3826,6 +3826,8 @@ const std::vector BundleDataMgr::GetRecoverablePreInstallB if (infoItem->second.IsU1Enable() && !infoItem->second.HasInnerBundleUserInfo(Constants::U1)) { recoverablePreInstallBundleInfos.emplace_back(preInstallBundleInfo); + APP_LOGW("-n %{public}s is u1enabled, but not has InnerBundleUserInfo in -u %{public}d", + preInstallBundleInfo.GetBundleName().c_str(), userId); continue; } if (!infoItem->second.HasInnerBundleUserInfo(Constants::DEFAULT_USERID) && diff --git a/services/bundlemgr/src/bundle_install_checker.cpp b/services/bundlemgr/src/bundle_install_checker.cpp index 0586513bb54d01323fcbb3bc91a38d1ddb4132cb..f54fe0aa6dc82236a171c0fc72f49e495b3da9ca 100644 --- a/services/bundlemgr/src/bundle_install_checker.cpp +++ b/services/bundlemgr/src/bundle_install_checker.cpp @@ -528,6 +528,9 @@ ErrCode BundleInstallChecker::CheckNoU1Enable(const std::unordered_map &infos, const std::string &bundleName, bool &u1Enable) { + if (infos.empty()) { + return ERR_OK; + } u1Enable = infos.begin()->second.IsU1Enable(); for (auto &item : infos) { if (u1Enable != item.second.IsU1Enable()) { diff --git a/services/bundlemgr/test/unittest/bms_bundle_aot_test/bms_data_aot_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_aot_test/bms_data_aot_test.cpp index e5949f0169ff25048c73b37b3d0bad159043ce92..ffc154a1483e99ac2addd2e62530531724604ae2 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_aot_test/bms_data_aot_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_aot_test/bms_data_aot_test.cpp @@ -77,6 +77,8 @@ constexpr const char* COMPILE_FULL = "full"; constexpr const char* USER_STATUS_SO_NAME = "libuser_status_client.z.so"; constexpr const char* FAILURE_REASON_BUNDLE_NOT_EXIST = "bundle not exist"; constexpr const char* UPDATE_TYPE_NIGHT = "night"; +const int32_t TEST_U0 = 0; +const int32_t TEST_U1 = 1; } // namespace class BmsAOTMgrTest : public testing::Test { @@ -1801,4 +1803,15 @@ HWTEST_F(BmsAOTMgrTest, AOTSignDataCacheMgr_1000, Function | SmallTest | Level1) InstalldClient::GetInstance()->installdProxy_ = nullptr; InstalldClient::GetInstance()->GetInstalldProxy(); } + +/** +* @tc.number: CheckAllUser_0010 +* @tc.name: test CheckAllUser +* @tc.desc: 1.test CheckAllUser +*/ +HWTEST_F(BmsAOTMgrTest, CheckAllUser_0010, Function | SmallTest | Level1) +{ + DelayedSingleton::GetInstance()->GetDataMgr()->AddUserId(TEST_U1); + DelayedSingleton::GetInstance()->CheckAllUser(); +} } // OHOS diff --git a/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_app_service_fwk_installer.cpp b/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_app_service_fwk_installer.cpp index da4f6714a30ec3f09e88e51aa39a63780263c40f..c0b46c55d3f9c35c660c3e7956786d9b0b3d920b 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_app_service_fwk_installer.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_app_service_fwk_installer.cpp @@ -1985,4 +1985,22 @@ HWTEST_F(BmsBundleAppServiceFwkInstallerTest, CheckAndParseFiles_0010, Function auto res = installer.CheckAndParseFiles(hspPaths, installParam, newInfos); EXPECT_EQ(res, ERR_APPEXECFWK_INSTALL_FILE_PATH_INVALID); } + +/** + * @tc.number: CheckAndParseFiles_0020 + * @tc.name: test CheckAndParseFiles + * @tc.desc: 1.test CheckAndParseFiles + */ +HWTEST_F(BmsBundleAppServiceFwkInstallerTest, CheckAndParseFiles_0020, Function | SmallTest | Level1) +{ + AppServiceFwkInstaller appServiceFwkInstaller; + InitAppServiceFwkInstaller(appServiceFwkInstaller); + InstallParam installParam; + installParam.isPreInstallApp = true; + installParam.removable = false; + std::vector hspPaths{ VERSION_ONE_LIBRARY_ONE_PATH }; + std::unordered_map newInfos; + auto res = appServiceFwkInstaller.CheckAndParseFiles(hspPaths, installParam, newInfos); + EXPECT_EQ(res, ERR_OK); +} } 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 269abd50641444477f5d808d53f359c0cfecbb03..dc244d04cea824b34d3065ede1de292820e10c1f 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 @@ -2634,4 +2634,162 @@ HWTEST_F(BmsBundleInstallCheckerTest, BaseBundleInstaller_0200, Function | Small auto ret = baseBundleInstaller.IsEnterpriseForAllUser(installParam, ""); EXPECT_EQ(ret, false); } + +/** + * @tc.number: CheckNoU1Enable_0100 + * @tc.name: Test CheckNoU1Enable + * @tc.desc: 1.Test CheckNoU1Enable + */ +HWTEST_F(BmsBundleInstallCheckerTest, CheckNoU1Enable_0100, Function | SmallTest | Level1) +{ + BundleInstallChecker installChecker; + std::unordered_map infos; + auto ret = installChecker.CheckNoU1Enable(infos); + EXPECT_EQ(ret, ERR_OK); +} + +/** + * @tc.number: CheckNoU1Enable_0200 + * @tc.name: Test CheckNoU1Enable + * @tc.desc: 1.Test CheckNoU1Enable + */ +HWTEST_F(BmsBundleInstallCheckerTest, CheckNoU1Enable_0200, Function | SmallTest | Level1) +{ + BundleInstallChecker installChecker; + std::unordered_map infos; + InnerBundleInfo innerBundleInfo1; + InnerBundleInfo innerBundleInfo2; + infos.insert(pair("1", innerBundleInfo1)); + infos.insert(pair("2", innerBundleInfo2)); + auto ret = installChecker.CheckNoU1Enable(infos); + EXPECT_EQ(ret, ERR_OK); +} + +/** + * @tc.number: CheckNoU1Enable_0300 + * @tc.name: Test CheckNoU1Enable + * @tc.desc: 1.Test CheckNoU1Enable + */ +HWTEST_F(BmsBundleInstallCheckerTest, CheckNoU1Enable_0300, Function | SmallTest | Level1) +{ + BundleInstallChecker installChecker; + std::unordered_map infos; + InnerBundleInfo innerBundleInfo1; + std::vector acls; + acls.push_back(std::string(Constants::PERMISSION_U1_ENABLED)); + innerBundleInfo1.SetAllowedAcls(acls); + EXPECT_FALSE(innerBundleInfo1.GetAllowedAcls().empty()); + + InnerBundleInfo innerBundleInfo2; + innerBundleInfo2.SetAllowedAcls(acls); + EXPECT_FALSE(innerBundleInfo2.GetAllowedAcls().empty()); + + infos.insert(pair("1", innerBundleInfo1)); + infos.insert(pair("2", innerBundleInfo2)); + auto ret = installChecker.CheckNoU1Enable(infos); + EXPECT_EQ(ret, ERR_APPEXECFWK_INSTALL_U1_ENABLE_NOT_SUPPORT_APP_SERVICE_AND_SHARED_BUNDLE); +} + +/** + * @tc.number: CheckNoU1Enable_0400 + * @tc.name: Test CheckNoU1Enable + * @tc.desc: 1.Test CheckNoU1Enable + */ +HWTEST_F(BmsBundleInstallCheckerTest, CheckNoU1Enable_0400, Function | SmallTest | Level1) +{ + BundleInstallChecker installChecker; + std::unordered_map infos; + InnerBundleInfo innerBundleInfo1; + std::vector acls; + acls.push_back(std::string(Constants::PERMISSION_U1_ENABLED)); + innerBundleInfo1.SetAllowedAcls(acls); + EXPECT_FALSE(innerBundleInfo1.GetAllowedAcls().empty()); + + InnerBundleInfo innerBundleInfo2; + infos.insert(pair("1", innerBundleInfo1)); + infos.insert(pair("2", innerBundleInfo2)); + auto ret = installChecker.CheckNoU1Enable(infos); + EXPECT_EQ(ret, ERR_APPEXECFWK_INSTALL_U1_ENABLE_NOT_SUPPORT_APP_SERVICE_AND_SHARED_BUNDLE); +} + +/** + * @tc.number: CheckU1EnableSameInHaps_0100 + * @tc.name: Test CheckU1EnableSameInHaps + * @tc.desc: 1.Test CheckU1EnableSameInHaps + */ +HWTEST_F(BmsBundleInstallCheckerTest, CheckU1EnableSameInHaps_0100, Function | SmallTest | Level1) +{ + BundleInstallChecker installChecker; + std::unordered_map infos; + bool u1Enable = false; + auto ret = installChecker.CheckU1EnableSameInHaps(infos, "", u1Enable); + EXPECT_EQ(ret, ERR_OK); +} + +/** + * @tc.number: CheckU1EnableSameInHaps_0200 + * @tc.name: Test CheckU1EnableSameInHaps + * @tc.desc: 1.Test CheckU1EnableSameInHaps + */ +HWTEST_F(BmsBundleInstallCheckerTest, CheckU1EnableSameInHaps_0200, Function | SmallTest | Level1) +{ + BundleInstallChecker installChecker; + std::unordered_map infos; + InnerBundleInfo innerBundleInfo1; + InnerBundleInfo innerBundleInfo2; + infos.insert(pair("1", innerBundleInfo1)); + infos.insert(pair("2", innerBundleInfo2)); + bool u1Enable = false; + auto ret = installChecker.CheckU1EnableSameInHaps(infos, "", u1Enable); + EXPECT_EQ(ret, ERR_OK); +} + +/** + * @tc.number: CheckU1EnableSameInHaps_0300 + * @tc.name: Test CheckU1EnableSameInHaps + * @tc.desc: 1.Test CheckU1EnableSameInHaps + */ +HWTEST_F(BmsBundleInstallCheckerTest, CheckU1EnableSameInHaps_0300, Function | SmallTest | Level1) +{ + BundleInstallChecker installChecker; + std::unordered_map infos; + InnerBundleInfo innerBundleInfo1; + std::vector acls; + acls.push_back(std::string(Constants::PERMISSION_U1_ENABLED)); + innerBundleInfo1.SetAllowedAcls(acls); + EXPECT_FALSE(innerBundleInfo1.GetAllowedAcls().empty()); + + InnerBundleInfo innerBundleInfo2; + innerBundleInfo2.SetAllowedAcls(acls); + EXPECT_FALSE(innerBundleInfo2.GetAllowedAcls().empty()); + + infos.insert(pair("1", innerBundleInfo1)); + infos.insert(pair("2", innerBundleInfo2)); + bool u1Enable = false; + auto ret = installChecker.CheckU1EnableSameInHaps(infos, "", u1Enable); + EXPECT_EQ(ret, ERR_OK); +} + +/** + * @tc.number: CheckU1EnableSameInHaps_0400 + * @tc.name: Test CheckU1EnableSameInHaps + * @tc.desc: 1.Test CheckU1EnableSameInHaps + */ +HWTEST_F(BmsBundleInstallCheckerTest, CheckU1EnableSameInHaps_0400, Function | SmallTest | Level1) +{ + BundleInstallChecker installChecker; + std::unordered_map infos; + InnerBundleInfo innerBundleInfo1; + std::vector acls; + acls.push_back(std::string(Constants::PERMISSION_U1_ENABLED)); + innerBundleInfo1.SetAllowedAcls(acls); + EXPECT_FALSE(innerBundleInfo1.GetAllowedAcls().empty()); + + InnerBundleInfo innerBundleInfo2; + infos.insert(pair("1", innerBundleInfo1)); + infos.insert(pair("2", innerBundleInfo2)); + bool u1Enable = false; + auto ret = installChecker.CheckU1EnableSameInHaps(infos, "", u1Enable); + EXPECT_EQ(ret, ERR_APPEXECFWK_INSTALL_U1_ENABLE_NOT_SAME_IN_ALL_BUNDLE_INFOS); +} } // OHOS diff --git a/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_installer_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_installer_test.cpp index 975c1ef94dba2e1513e78b79a57067d2d010e78b..0b4a8e106229ee049530da7799d33ddb88b73a7d 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_installer_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_installer_test/bms_bundle_installer_test.cpp @@ -147,6 +147,9 @@ const std::string BUNDLE_CODE_PATH_DIR_REAL = "/data/app/el1/bundle/public/com.e const std::string BUNDLE_CODE_PATH_DIR_NEW = "/data/app/el1/bundle/public/+new-com.example.example_test"; const std::string BUNDLE_CODE_PATH_DIR_OLD = "/data/app/el1/bundle/public/+old-com.example.example_test"; const std::string BUNDLE_NAME_FOR_TEST = "com.example.example_test"; +const std::string BUNDLE_NAME_FOR_TEST_U1ENABLE = "com.example.u1Enable_test"; +const int32_t TEST_U100 = 100; +const int32_t TEST_U1 = 1; } // namespace class BmsBundleInstallerTest : public testing::Test { @@ -7637,6 +7640,46 @@ HWTEST_F(BmsBundleInstallerTest, BundleUserMgrHostImpl_0200, Function | MediumTe EXPECT_TRUE(ret); } +/** + * @tc.number: BundleUserMgrHostImpl_0300 + * @tc.name: test GetAllPreInstallBundleInfos + * @tc.desc: 1.Test GetAllPreInstallBundleInfos the UserReceiverImpl +*/ +HWTEST_F(BmsBundleInstallerTest, BundleUserMgrHostImpl_0300, Function | MediumTest | Level1) +{ + auto dataMgr = GetBundleDataMgr(); + EXPECT_NE(dataMgr, nullptr); + std::vector disallowList; + std::set preInstallBundleInfos; + BundleUserMgrHostImpl host; + bool ret = host.GetAllPreInstallBundleInfos(disallowList, Constants::U1, false, preInstallBundleInfos); + EXPECT_FALSE(ret); + + // test isU1 && !preInfo.GetU1Enable() + std::string bundleFile = RESOURCE_ROOT_PATH + RIGHT_BUNDLE; + bool result = InstallSystemBundle(bundleFile); + EXPECT_TRUE(result) << "the bundle file install failed: " << bundleFile; + InnerBundleInfo innerBundleInfo; + bool res = dataMgr->FetchInnerBundleInfo(BUNDLE_NAME, innerBundleInfo); + EXPECT_TRUE(result) << "the bundle is not exist: " << BUNDLE_NAME; + ret = host.GetAllPreInstallBundleInfos(disallowList, Constants::U1, false, preInstallBundleInfos); + EXPECT_FALSE(ret); + + // add u1Enable, test !isU1 && preInfo.GetU1Enable() + std::vector acls; + acls.push_back(std::string(Constants::PERMISSION_U1_ENABLED)); + innerBundleInfo.SetAllowedAcls(acls); + dataMgr->UpdateInnerBundleInfo(innerBundleInfo, false); + ret = host.GetAllPreInstallBundleInfos(disallowList, Constants::START_USERID, false, preInstallBundleInfos); + EXPECT_TRUE(ret); + + // test isU1 && preInfo.GetU1Enable() + ret = host.GetAllPreInstallBundleInfos(disallowList, Constants::U1, false, preInstallBundleInfos); + EXPECT_TRUE(ret); + + ClearBundleInfo(); +} + /** * @tc.number: BundleStreamInstallerHostImpl_0100 * @tc.name: test CreateSignatureFileStream @@ -9698,4 +9741,416 @@ HWTEST_F(BmsBundleInstallerTest, BaseBundleInstaller_9600, Function | MediumTest EXPECT_NE(nativeLibraryPath, ""); EXPECT_TRUE(targetSoPath.find(BUNDLE_CODE_PATH_DIR_NEW) == 0); } + +/** + * @tc.number: BaseBundleInstaller_9700 + * @tc.name: test CheckU1Enable + * @tc.desc: 1.Test the CheckU1Enable of BaseBundleInstaller +*/ +HWTEST_F(BmsBundleInstallerTest, BaseBundleInstaller_9700, Function | SmallTest | Level0) +{ + BaseBundleInstaller installer; + InnerBundleInfo info; + info.baseApplicationInfo_->bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + + // test !u1Enable && isU1 + auto ret = installer.CheckU1Enable(info, TEST_U1); + EXPECT_EQ(ret, ERR_APPEXECFWK_INSTALL_U1ENABLE_CAN_ONLY_INSTALL_IN_U1_WITH_NOT_SINGLETON); + + // test for u1Enable && !isU1 + std::vector acls; + acls.push_back(std::string(Constants::PERMISSION_U1_ENABLED)); + info.SetAllowedAcls(acls); + ret = installer.CheckU1Enable(info, 0); + EXPECT_EQ(ret, ERR_APPEXECFWK_INSTALL_U1ENABLE_CAN_ONLY_INSTALL_IN_U1_WITH_NOT_SINGLETON); +} + +/** + * @tc.number: BaseBundleInstaller_9800 + * @tc.name: test CheckU1Enable + * @tc.desc: 1.Test the CheckU1Enable of BaseBundleInstaller, u1Enable && isU1, one innerBundleUserInfo for u1 +*/ +HWTEST_F(BmsBundleInstallerTest, BaseBundleInstaller_9800, Function | SmallTest | Level0) +{ + BaseBundleInstaller installer; + installer.dataMgr_ = GetBundleDataMgr(); + InnerBundleInfo info; + info.baseApplicationInfo_->bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + // add u1Enable + std::vector acls; + acls.push_back(std::string(Constants::PERMISSION_U1_ENABLED)); + info.SetAllowedAcls(acls); + // add innerBundleUserInfo for u1 + InnerBundleUserInfo innerBundleUserInfo; + innerBundleUserInfo.bundleUserInfo.userId = TEST_U1; + innerBundleUserInfo.bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + info.AddInnerBundleUserInfo(innerBundleUserInfo); + installer.dataMgr_->bundleInfos_.emplace(BUNDLE_NAME_FOR_TEST_U1ENABLE, info); + // set isAppExist_ true + installer.isAppExist_ = true; + auto ret = installer.CheckU1Enable(info, TEST_U1); + EXPECT_EQ(ret, ERR_OK); + // set isAppExist_ false + installer.isAppExist_ = false; + ret = installer.CheckU1Enable(info, TEST_U1); + EXPECT_EQ(ret, ERR_OK); + installer.dataMgr_->bundleInfos_.clear(); +} + +/** + * @tc.number: BaseBundleInstaller_9900 + * @tc.name: test CheckU1Enable + * @tc.desc: 1.Test the CheckU1Enable of BaseBundleInstaller, u1Enable && isU1, no innerbundleinfo +*/ +HWTEST_F(BmsBundleInstallerTest, BaseBundleInstaller_9900, Function | SmallTest | Level0) +{ + BaseBundleInstaller installer; + installer.dataMgr_ = GetBundleDataMgr(); + InnerBundleInfo info; + info.baseApplicationInfo_->bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + // add u1Enable + std::vector acls; + acls.push_back(std::string(Constants::PERMISSION_U1_ENABLED)); + info.SetAllowedAcls(acls); + installer.dataMgr_->bundleInfos_.emplace(BUNDLE_NAME_FOR_TEST_U1ENABLE, info); + // set isAppExist_ true + installer.isAppExist_ = true; + auto ret = installer.CheckU1Enable(info, TEST_U1); + EXPECT_EQ(ret, ERR_APPEXECFWK_INSTALL_BUNDLE_EXISTED_IN_U1_AND_OTHER_USERS); + + // set isAppExist_ false + installer.isAppExist_ = false; + ret = installer.CheckU1Enable(info, TEST_U1); + EXPECT_EQ(ret, ERR_OK); + installer.dataMgr_->bundleInfos_.clear(); +} + +/** + * @tc.number: BaseBundleInstaller_1001 + * @tc.name: test CheckU1Enable + * @tc.desc: 1.Test the CheckU1Enable of BaseBundleInstaller, u1Enable && isU1, two innerbundleuserinfos: 1,100 +*/ +HWTEST_F(BmsBundleInstallerTest, BaseBundleInstaller_1001, Function | SmallTest | Level0) +{ + BaseBundleInstaller installer; + installer.dataMgr_ = GetBundleDataMgr(); + InnerBundleInfo info; + info.baseApplicationInfo_->bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + // add u1Enable + std::vector acls; + acls.push_back(std::string(Constants::PERMISSION_U1_ENABLED)); + info.SetAllowedAcls(acls); + // add innerBundleUserInfo for u1 + InnerBundleUserInfo innerBundleUserInfo1; + innerBundleUserInfo1.bundleUserInfo.userId = TEST_U1; + innerBundleUserInfo1.bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + info.AddInnerBundleUserInfo(innerBundleUserInfo1); + // add innerBundleUserInfo for u100 + InnerBundleUserInfo innerBundleUserInfo100; + innerBundleUserInfo100.bundleUserInfo.userId = TEST_U100; + innerBundleUserInfo100.bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + info.AddInnerBundleUserInfo(innerBundleUserInfo100); + installer.dataMgr_->bundleInfos_.emplace(BUNDLE_NAME_FOR_TEST_U1ENABLE, info); + // set isAppExist_ true + installer.isAppExist_ = true; + auto ret = installer.CheckU1Enable(info, TEST_U1); + EXPECT_EQ(ret, ERR_APPEXECFWK_INSTALL_BUNDLE_EXISTED_IN_U1_AND_OTHER_USERS); + + // set isAppExist_ false + installer.isAppExist_ = false; + ret = installer.CheckU1Enable(info, TEST_U1); + EXPECT_EQ(ret, ERR_OK); + installer.dataMgr_->bundleInfos_.clear(); +} + +/** + * @tc.number: BaseBundleInstaller_1002 + * @tc.name: test CheckU1Enable + * @tc.desc: 1.Test the CheckU1Enable of BaseBundleInstaller, u1Enable && isU1, two innerbundleuserinfos: 100,1 +*/ +HWTEST_F(BmsBundleInstallerTest, BaseBundleInstaller_1002, Function | SmallTest | Level0) +{ + BaseBundleInstaller installer; + installer.dataMgr_ = GetBundleDataMgr(); + InnerBundleInfo info; + info.baseApplicationInfo_->bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + // add u1Enable + std::vector acls; + acls.push_back(std::string(Constants::PERMISSION_U1_ENABLED)); + info.SetAllowedAcls(acls); + + // add innerBundleUserInfo for u100 + InnerBundleUserInfo innerBundleUserInfo100; + innerBundleUserInfo100.bundleUserInfo.userId = TEST_U100; + innerBundleUserInfo100.bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + info.AddInnerBundleUserInfo(innerBundleUserInfo100); + + // add innerBundleUserInfo for u1 + InnerBundleUserInfo innerBundleUserInfo1; + innerBundleUserInfo1.bundleUserInfo.userId = TEST_U1; + innerBundleUserInfo1.bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + info.AddInnerBundleUserInfo(innerBundleUserInfo1); + + installer.dataMgr_->bundleInfos_.emplace(BUNDLE_NAME_FOR_TEST_U1ENABLE, info); + // set isAppExist_ true + installer.isAppExist_ = true; + auto ret = installer.CheckU1Enable(info, TEST_U1); + EXPECT_EQ(ret, ERR_APPEXECFWK_INSTALL_BUNDLE_EXISTED_IN_U1_AND_OTHER_USERS); + + // set isAppExist_ false + installer.isAppExist_ = false; + ret = installer.CheckU1Enable(info, TEST_U1); + EXPECT_EQ(ret, ERR_OK); + installer.dataMgr_->bundleInfos_.clear(); +} + +/** + * @tc.number: BaseBundleInstaller_1003 + * @tc.name: test CheckU1Enable + * @tc.desc: 1.Test the CheckU1Enable of BaseBundleInstaller, u1Enable && isU1, one innerbundleuserinfo, but not u1 +*/ +HWTEST_F(BmsBundleInstallerTest, BaseBundleInstaller_1003, Function | SmallTest | Level0) +{ + BaseBundleInstaller installer; + installer.dataMgr_ = GetBundleDataMgr(); + InnerBundleInfo info; + info.baseApplicationInfo_->bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + // add u1Enable + std::vector acls; + acls.push_back(std::string(Constants::PERMISSION_U1_ENABLED)); + info.SetAllowedAcls(acls); + // add innerBundleUserInfo for u100 + InnerBundleUserInfo innerBundleUserInfo100; + innerBundleUserInfo100.bundleUserInfo.userId = TEST_U100; + innerBundleUserInfo100.bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + info.AddInnerBundleUserInfo(innerBundleUserInfo100); + installer.dataMgr_->bundleInfos_.emplace(BUNDLE_NAME_FOR_TEST_U1ENABLE, info); + // set isAppExist_ true + installer.isAppExist_ = true; + auto ret = installer.CheckU1Enable(info, TEST_U1); + EXPECT_EQ(ret, ERR_APPEXECFWK_INSTALL_BUNDLE_EXISTED_IN_U1_AND_OTHER_USERS); + + // set isAppExist_ false + installer.isAppExist_ = false; + ret = installer.CheckU1Enable(info, TEST_U1); + EXPECT_EQ(ret, ERR_OK); + installer.dataMgr_->bundleInfos_.clear(); +} + +/** + * @tc.number: BaseBundleInstaller_1004 + * @tc.name: test CheckU1Enable + * @tc.desc: 1.Test the CheckU1Enable of BaseBundleInstaller, !u1Enable && !isU1, one innerBundleUserInfo for u1 +*/ +HWTEST_F(BmsBundleInstallerTest, BaseBundleInstaller_1004, Function | SmallTest | Level0) +{ + BaseBundleInstaller installer; + installer.dataMgr_ = GetBundleDataMgr(); + InnerBundleInfo info; + info.baseApplicationInfo_->bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + + // add innerBundleUserInfo for u1 + InnerBundleUserInfo innerBundleUserInfo; + innerBundleUserInfo.bundleUserInfo.userId = TEST_U1; + innerBundleUserInfo.bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + info.AddInnerBundleUserInfo(innerBundleUserInfo); + installer.dataMgr_->bundleInfos_.emplace(BUNDLE_NAME_FOR_TEST_U1ENABLE, info); + // set isAppExist_ true + installer.isAppExist_ = true; + auto ret = installer.CheckU1Enable(info, TEST_U100); + EXPECT_EQ(ret, ERR_APPEXECFWK_INSTALL_U1ENABLE_CAN_ONLY_INSTALL_IN_U1_WITH_NOT_SINGLETON); + // set isAppExist_ false + installer.isAppExist_ = false; + ret = installer.CheckU1Enable(info, TEST_U100); + EXPECT_EQ(ret, ERR_OK); + installer.dataMgr_->bundleInfos_.clear(); +} + +/** + * @tc.number: BaseBundleInstaller_1005 + * @tc.name: test CheckU1Enable + * @tc.desc: 1.Test the CheckU1Enable of BaseBundleInstaller, !u1Enable && !isU1, no innerbundleinfo +*/ +HWTEST_F(BmsBundleInstallerTest, BaseBundleInstaller_1005, Function | SmallTest | Level0) +{ + BaseBundleInstaller installer; + installer.dataMgr_ = GetBundleDataMgr(); + InnerBundleInfo info; + info.baseApplicationInfo_->bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + installer.dataMgr_->bundleInfos_.emplace(BUNDLE_NAME_FOR_TEST_U1ENABLE, info); + // set isAppExist_ true + installer.isAppExist_ = true; + auto ret = installer.CheckU1Enable(info, TEST_U100); + EXPECT_EQ(ret, ERR_OK); + + // set isAppExist_ false + installer.isAppExist_ = false; + ret = installer.CheckU1Enable(info, TEST_U100); + EXPECT_EQ(ret, ERR_OK); + installer.dataMgr_->bundleInfos_.clear(); +} + +/** + * @tc.number: BaseBundleInstaller_1006 + * @tc.name: test CheckU1Enable + * @tc.desc: 1.Test the CheckU1Enable of BaseBundleInstaller, !u1Enable && !isU1, two innerbundleuserinfos: 1,100 +*/ +HWTEST_F(BmsBundleInstallerTest, BaseBundleInstaller_1006, Function | SmallTest | Level0) +{ + BaseBundleInstaller installer; + installer.dataMgr_ = GetBundleDataMgr(); + InnerBundleInfo info; + info.baseApplicationInfo_->bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + + // add innerBundleUserInfo for u1 + InnerBundleUserInfo innerBundleUserInfo1; + innerBundleUserInfo1.bundleUserInfo.userId = TEST_U1; + innerBundleUserInfo1.bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + info.AddInnerBundleUserInfo(innerBundleUserInfo1); + // add innerBundleUserInfo for u100 + InnerBundleUserInfo innerBundleUserInfo100; + innerBundleUserInfo100.bundleUserInfo.userId = TEST_U100; + innerBundleUserInfo100.bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + info.AddInnerBundleUserInfo(innerBundleUserInfo100); + installer.dataMgr_->bundleInfos_.emplace(BUNDLE_NAME_FOR_TEST_U1ENABLE, info); + // set isAppExist_ true + installer.isAppExist_ = true; + auto ret = installer.CheckU1Enable(info, TEST_U100); + EXPECT_EQ(ret, ERR_OK); + + // set isAppExist_ false + installer.isAppExist_ = false; + ret = installer.CheckU1Enable(info, TEST_U100); + EXPECT_EQ(ret, ERR_OK); + installer.dataMgr_->bundleInfos_.clear(); +} + +/** + * @tc.number: BaseBundleInstaller_1007 + * @tc.name: test CheckU1Enable + * @tc.desc: 1.Test the CheckU1Enable of BaseBundleInstaller, !u1Enable && !isU1, two innerbundleuserinfos: 100,1 +*/ +HWTEST_F(BmsBundleInstallerTest, BaseBundleInstaller_1007, Function | SmallTest | Level0) +{ + BaseBundleInstaller installer; + installer.dataMgr_ = GetBundleDataMgr(); + InnerBundleInfo info; + info.baseApplicationInfo_->bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + + // add innerBundleUserInfo for u100 + InnerBundleUserInfo innerBundleUserInfo100; + innerBundleUserInfo100.bundleUserInfo.userId = TEST_U100; + innerBundleUserInfo100.bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + info.AddInnerBundleUserInfo(innerBundleUserInfo100); + + // add innerBundleUserInfo for u1 + InnerBundleUserInfo innerBundleUserInfo1; + innerBundleUserInfo1.bundleUserInfo.userId = TEST_U1; + innerBundleUserInfo1.bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + info.AddInnerBundleUserInfo(innerBundleUserInfo1); + + installer.dataMgr_->bundleInfos_.emplace(BUNDLE_NAME_FOR_TEST_U1ENABLE, info); + // set isAppExist_ true + installer.isAppExist_ = true; + auto ret = installer.CheckU1Enable(info, TEST_U100); + EXPECT_EQ(ret, ERR_OK); + + // set isAppExist_ false + installer.isAppExist_ = false; + ret = installer.CheckU1Enable(info, TEST_U100); + EXPECT_EQ(ret, ERR_OK); + installer.dataMgr_->bundleInfos_.clear(); +} + +/** + * @tc.number: BaseBundleInstaller_1008 + * @tc.name: test CheckU1Enable + * @tc.desc: 1.Test the CheckU1Enable of BaseBundleInstaller, !u1Enable && !isU1, one innerbundleuserinfo, but not u1 +*/ +HWTEST_F(BmsBundleInstallerTest, BaseBundleInstaller_1008, Function | SmallTest | Level0) +{ + BaseBundleInstaller installer; + installer.dataMgr_ = GetBundleDataMgr(); + InnerBundleInfo info; + info.baseApplicationInfo_->bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + // add innerBundleUserInfo for u100 + InnerBundleUserInfo innerBundleUserInfo100; + innerBundleUserInfo100.bundleUserInfo.userId = TEST_U100; + innerBundleUserInfo100.bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + info.AddInnerBundleUserInfo(innerBundleUserInfo100); + installer.dataMgr_->bundleInfos_.emplace(BUNDLE_NAME_FOR_TEST_U1ENABLE, info); + // set isAppExist_ true + installer.isAppExist_ = true; + auto ret = installer.CheckU1Enable(info, TEST_U100); + EXPECT_EQ(ret, ERR_OK); + + // set isAppExist_ false + installer.isAppExist_ = false; + ret = installer.CheckU1Enable(info, TEST_U100); + EXPECT_EQ(ret, ERR_OK); + installer.dataMgr_->bundleInfos_.clear(); +} + + +/** + * @tc.number: GetU1Enable_0001 + * @tc.name: test GetU1Enable and SetU1Enable in PreInstallBundleInfo + * @tc.desc: 1.SetU1Enable + */ +HWTEST_F(BmsBundleInstallerTest, GetU1Enable_0001, Function | SmallTest | Level0) +{ + BaseBundleInstaller installer; + installer.dataMgr_ = GetBundleDataMgr(); + + auto dataMgr = GetBundleDataMgr(); + EXPECT_NE(dataMgr, nullptr); + PreInstallBundleInfo preInstallBundleInfo; + preInstallBundleInfo.SetU1Enable(false); + bool u1Enable = preInstallBundleInfo.GetU1Enable(); + EXPECT_FALSE(u1Enable); + + preInstallBundleInfo.SetU1Enable(true); + u1Enable = preInstallBundleInfo.GetU1Enable(); + EXPECT_TRUE(u1Enable); +} + +/** + * @tc.number: GetConfirmUserId_0001 + * @tc.name: test GetConfirmUserId + * @tc.desc: 1.GetConfirmUserId, otaInstall_ is false, innerBundleInfo1 is singleton + */ +HWTEST_F(BmsBundleInstallerTest, GetConfirmUserId_0001, Function | SmallTest | Level0) +{ + BaseBundleInstaller installer; + installer.dataMgr_ = GetBundleDataMgr(); + installer.otaInstall_ = false; + std::unordered_map infos; + InnerBundleInfo innerBundleInfo1; + innerBundleInfo1.SetSingleton(true); + infos.insert(pair("1", innerBundleInfo1)); + auto res = installer.GetConfirmUserId(TEST_U100, infos); + EXPECT_EQ(res, Constants::DEFAULT_USERID); +} + +/** + * @tc.number: GetConfirmUserId_0002 + * @tc.name: test GetConfirmUserId + * @tc.desc: 1.GetConfirmUserId, otaInstall_ is false, innerBundleInfo1 is not singleton, u1enabled + */ +HWTEST_F(BmsBundleInstallerTest, GetConfirmUserId_0002, Function | SmallTest | Level0) +{ + BaseBundleInstaller installer; + installer.dataMgr_ = GetBundleDataMgr(); + installer.otaInstall_ = false; + std::unordered_map infos; + InnerBundleInfo innerBundleInfo1; + innerBundleInfo1.SetSingleton(false); + // add u1Enable + std::vector acls; + acls.push_back(std::string(Constants::PERMISSION_U1_ENABLED)); + innerBundleInfo1.SetAllowedAcls(acls); + infos.insert(pair("1", innerBundleInfo1)); + auto res = installer.GetConfirmUserId(TEST_U100, infos); + EXPECT_EQ(res, Constants::U1); +} } // OHOS diff --git a/services/bundlemgr/test/unittest/bms_bundle_kit_service_test/bms_bundle_data_mgr_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_kit_service_test/bms_bundle_data_mgr_test.cpp index 5058237d7b6db448a42c3aea42ea9d4497287669..9978c135b579a182d6e0ec55fc6aa0d30d41e865 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_kit_service_test/bms_bundle_data_mgr_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_kit_service_test/bms_bundle_data_mgr_test.cpp @@ -331,6 +331,9 @@ const std::string ENTRY = "entry"; const std::string FEATURE = "feature"; constexpr const char* OVERLAY_STATE = "overlayState"; const std::string CALLER_NAME_UT = "ut"; +const std::string BUNDLE_NAME_FOR_TEST_U1ENABLE = "com.example.u1Enable_test"; +const int32_t TEST_U100 = 100; +const int32_t TEST_U1 = 1; } // namespace struct Param { @@ -415,6 +418,7 @@ public: void RemoveBundleinfo(const std::string &bundleName); ShortcutInfo InitShortcutInfo(); bool CheckBmsExtensionProfile(); + bool CheckPreInstallBundleInfo(const std::vector &preInfos, const std::string &bundleName); public: static std::shared_ptr installdService_; @@ -968,6 +972,18 @@ bool BmsBundleDataMgrTest::CheckBmsExtensionProfile() return true; } +bool BmsBundleDataMgrTest::CheckPreInstallBundleInfo(const std::vector &preInfos, + const std::string &bundleName) +{ + for (auto info : preInfos) + { + if (info.GetBundleName() == bundleName) { + return true; + } + } + return false; +} + class IBundleStatusCallbackTest : public IBundleStatusCallback { public: void OnBundleStateChanged(const uint8_t installType, const int32_t resultCode, const std::string &resultMsg, @@ -8308,6 +8324,91 @@ HWTEST_F(BmsBundleDataMgrTest, FetchPluginBundleInfo_0001, Function | MediumTest EXPECT_EQ(result, false); } +/** + * @tc.number: GetRecoverablePreInstallBundleInfos_0100 + * @tc.name: test GetRecoverablePreInstallBundleInfos + * @tc.desc: 1.test GetRecoverablePreInstallBundleInfos, add u1enable, add innerBundleUserInfo for u1 + * @tc.require: issueI7HXM5 + */ +HWTEST_F(BmsBundleDataMgrTest, GetRecoverablePreInstallBundleInfos_0100, Function | SmallTest | Level1) +{ + auto dataMgr = GetBundleDataMgr(); + EXPECT_NE(dataMgr, nullptr); + InnerBundleInfo info; + info.baseApplicationInfo_->bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + // add u1Enable + std::vector acls; + acls.push_back(std::string(Constants::PERMISSION_U1_ENABLED)); + info.SetAllowedAcls(acls); + // add innerBundleUserInfo for u1 + InnerBundleUserInfo innerBundleUserInfo1; + innerBundleUserInfo1.bundleUserInfo.userId = TEST_U1; + innerBundleUserInfo1.bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + info.AddInnerBundleUserInfo(innerBundleUserInfo1); + dataMgr->bundleInfos_.emplace(BUNDLE_NAME_FOR_TEST_U1ENABLE, info); + std::vector res = dataMgr->GetRecoverablePreInstallBundleInfos(); + EXPECT_FALSE(CheckPreInstallBundleInfo(res, BUNDLE_NAME_FOR_TEST_U1ENABLE)); +} + +/** + * @tc.number: GetRecoverablePreInstallBundleInfos_0200 + * @tc.name: test GetRecoverablePreInstallBundleInfos + * @tc.desc: 1.test GetRecoverablePreInstallBundleInfos, no u1enable, no innerBundleUserInfo for u1 + * @tc.require: issueI7HXM5 + */ +HWTEST_F(BmsBundleDataMgrTest, GetRecoverablePreInstallBundleInfos_0200, Function | SmallTest | Level1) +{ + auto dataMgr = GetBundleDataMgr(); + EXPECT_NE(dataMgr, nullptr); + InnerBundleInfo info; + info.baseApplicationInfo_->bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + dataMgr->bundleInfos_.emplace(BUNDLE_NAME_FOR_TEST_U1ENABLE, info); + std::vector res = dataMgr->GetRecoverablePreInstallBundleInfos(); + EXPECT_FALSE(CheckPreInstallBundleInfo(res, BUNDLE_NAME_FOR_TEST_U1ENABLE)); +} + +/** + * @tc.number: GetRecoverablePreInstallBundleInfos_0300 + * @tc.name: test GetRecoverablePreInstallBundleInfos + * @tc.desc: 1.test GetRecoverablePreInstallBundleInfos + * @tc.require: issueI7HXM5 + */ +HWTEST_F(BmsBundleDataMgrTest, GetRecoverablePreInstallBundleInfos_0300, Function | SmallTest | Level1) +{ + auto dataMgr = GetBundleDataMgr(); + EXPECT_NE(dataMgr, nullptr); + InnerBundleInfo info; + info.baseApplicationInfo_->bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + // add u1Enable + std::vector acls; + acls.push_back(std::string(Constants::PERMISSION_U1_ENABLED)); + info.SetAllowedAcls(acls); + dataMgr->bundleInfos_.emplace(BUNDLE_NAME_FOR_TEST_U1ENABLE, info); + std::vector res = dataMgr->GetRecoverablePreInstallBundleInfos(); + EXPECT_TRUE(CheckPreInstallBundleInfo(res, BUNDLE_NAME_FOR_TEST_U1ENABLE)); +} + +/** + * @tc.number: GetRecoverablePreInstallBundleInfos_0400 + * @tc.name: test GetRecoverablePreInstallBundleInfos + * @tc.desc: 1.test GetRecoverablePreInstallBundleInfos + * @tc.require: issueI7HXM5 + */ +HWTEST_F(BmsBundleDataMgrTest, GetRecoverablePreInstallBundleInfos_0400, Function | SmallTest | Level1) +{ + auto dataMgr = GetBundleDataMgr(); + EXPECT_NE(dataMgr, nullptr); + InnerBundleInfo info; + info.baseApplicationInfo_->bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + // add innerBundleUserInfo for u1 + InnerBundleUserInfo innerBundleUserInfo1; + innerBundleUserInfo1.bundleUserInfo.userId = TEST_U1; + innerBundleUserInfo1.bundleName = BUNDLE_NAME_FOR_TEST_U1ENABLE; + info.AddInnerBundleUserInfo(innerBundleUserInfo1); + dataMgr->bundleInfos_.emplace(BUNDLE_NAME_FOR_TEST_U1ENABLE, info); + std::vector res = dataMgr->GetRecoverablePreInstallBundleInfos(); + EXPECT_FALSE(CheckPreInstallBundleInfo(res, BUNDLE_NAME_FOR_TEST_U1ENABLE)); +} /** * @tc.number: SetBit_0001 * @tc.name: SetBit_0001 diff --git a/services/bundlemgr/test/unittest/bms_bundle_kit_service_test/bms_bundle_kit_service_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_kit_service_test/bms_bundle_kit_service_test.cpp index 108920965c9fd77044d1db58c23c7fba51920047..889ce7cc2360845266bd26f88fa51df156961a55 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_kit_service_test/bms_bundle_kit_service_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_kit_service_test/bms_bundle_kit_service_test.cpp @@ -1649,7 +1649,7 @@ ErrCode BmsBundleKitServiceTest::MockGetAllBundleCacheStat(const sptr acls; + acls.push_back(std::string(Constants::PERMISSION_U1_ENABLED)); + InnerBundleInfo info; + bool isU1Enable = info.IsU1Enable(); + EXPECT_FALSE(isU1Enable); + info.SetAllowedAcls(acls); + isU1Enable = info.IsU1Enable(); + EXPECT_TRUE(isU1Enable); +} + + /** * @tc.number: GetSpecifiedDistributionType_0001 * @tc.name: test can get the bundleName's SpecifiedDistributionType @@ -14243,6 +14261,24 @@ HWTEST_F(BmsBundleKitServiceTest, Dump_0001, Function | SmallTest | Level0) EXPECT_EQ(agingRequest.agingBundles_[0].GetStartCount(), 2); } +/** + * @tc.number: NotifyBundleStatus_0100 + * @tc.name: test NotifyBundleStatus + * @tc.desc: 1.NotifyBundleStatus + */ +HWTEST_F(BmsBundleKitServiceTest, NotifyBundleStatus_0100, Function | SmallTest | Level1) +{ + sptr bundleStatusCallback = new (std::nothrow) MockBundleStatus(); + bundleStatusCallback->SetBundleName(HAP_FILE_PATH); + bool result = GetBundleDataMgr()->RegisterBundleStatusCallback(bundleStatusCallback); + EXPECT_TRUE(result); + EXPECT_NE(commonEventMgr_, nullptr); + installRes_.uid = 1; + commonEventMgr_->NotifyBundleStatus(installRes_, GetBundleDataMgr()); + int32_t callbackResult = bundleStatusCallback->GetResultCode(); + EXPECT_EQ(callbackResult, ERR_OK); +} + /** * @tc.number: InitAgingRequest_0002 * @tc.name: test BundleAgingMgr of Process diff --git a/services/bundlemgr/test/unittest/bms_bundle_resource_test/bms_bundle_resource_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_resource_test/bms_bundle_resource_test.cpp index 5b00321200d2abbcda81a7dcfbf367579e918430..5f67173a688e826a5e34fb39814fd6aa8768e9d8 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_resource_test/bms_bundle_resource_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_resource_test/bms_bundle_resource_test.cpp @@ -72,6 +72,7 @@ using namespace OHOS::Security; namespace OHOS { namespace { const int32_t USERID = 100; +const int32_t U1 = 1; const int32_t WAIT_TIME = 5; // init mocked bms const std::string BUNDLE_NAME = "com.example.bmsaccesstoken1"; const std::string BUNDLE_NAME_NOT_EXIST = "com.example.not_exist"; @@ -264,6 +265,29 @@ sptr BmsBundleResourceTest::GetBundleMgrProxy() } #ifdef BUNDLE_FRAMEWORK_BUNDLE_RESOURCE +/** + * @tc.number: OnReceiveEvent_0010 + * Function: OnReceiveEvent + * @tc.name: test + * @tc.desc: 1. system running normally + * 2. test OnReceiveEvent + */ +HWTEST_F(BmsBundleResourceTest, OnReceiveEvent_0010, Function | SmallTest | Level0) +{ + OHOS::AAFwk::Want want; + want.SetAction(OHOS::EventFwk::CommonEventSupport::COMMON_EVENT_USER_SWITCHED); + OHOS::EventFwk::CommonEventData commonData { want }; + commonData.SetCode(2000); // userId not exist + bool ans = OnReceiveEvent(commonData); + EXPECT_FALSE(ans); + + want.SetAction(OHOS::EventFwk::CommonEventSupport::COMMON_EVENT_USER_SWITCHED); + OHOS::EventFwk::CommonEventData commonData2 { want }; + commonData2.SetCode(U1); // userId not exist + ans = OnReceiveEvent(commonData2); + EXPECT_TRUE(ans); +} + /** * @tc.number: BmsBundleResourceTest_0001 * Function: GetKey diff --git a/services/bundlemgr/test/unittest/bms_event_handler_test/bms_event_handler_test.cpp b/services/bundlemgr/test/unittest/bms_event_handler_test/bms_event_handler_test.cpp index 2638e4833d29037026c3da009cac2b4ba2c48e71..bbf074436a2861184979d333d10a4c70475f80b2 100644 --- a/services/bundlemgr/test/unittest/bms_event_handler_test/bms_event_handler_test.cpp +++ b/services/bundlemgr/test/unittest/bms_event_handler_test/bms_event_handler_test.cpp @@ -2381,4 +2381,26 @@ HWTEST_F(BmsEventHandlerTest, BundleEl1ShaderCacheLocal_0100, Function | SmallTe EXPECT_FALSE(isExist) << "the shader cache path not exist: " << UNINSTALL_PREINSTALL_BUNDLE_NAME; setuid(Constants::ROOT_UID); } + +/** + * @tc.number: CreateAppInstallDir_0100 + * @tc.name: CreateAppInstallDir + * @tc.desc: test CreateAppInstallDir + * @tc.require: + */ +HWTEST_F(BmsEventHandlerTest, CreateAppInstallDir_0100, Function | SmallTest | Level0) +{ + std::shared_ptr handler = std::make_shared(); + ASSERT_NE(handler, nullptr); + auto dataMgr = DelayedSingleton::GetInstance()->GetDataMgr(); + ASSERT_NE(dataMgr, nullptr); + dataMgr->AddUserId(Constants::U1); + dataMgr->AddUserId(Constants::START_USERID); + handler->CreateAppInstallDir(); + std::string path = std::string(ServiceConstants::HAP_COPY_PATH) + + ServiceConstants::GALLERY_DOWNLOAD_PATH + std::to_string(Constants::U1); + EXPECT_EQ(BundleUtil::IsExistDir(path), false); + std::string appClonePath = path + ServiceConstants::GALLERY_CLONE_PATH; + EXPECT_EQ(BundleUtil::IsExistDir(appClonePath), false); +} } // OHOS