diff --git a/services/bundlemgr/include/app_provision_info/app_provision_info_manager.h b/services/bundlemgr/include/app_provision_info/app_provision_info_manager.h index 753447a944fb0d308eefd193f7baba2a7094083b..2918d2294b7d7a0ac5500d562ded23674bfdcf98 100644 --- a/services/bundlemgr/include/app_provision_info/app_provision_info_manager.h +++ b/services/bundlemgr/include/app_provision_info/app_provision_info_manager.h @@ -31,6 +31,12 @@ public: bool DeleteAppProvisionInfo(const std::string &bundleName); bool GetAppProvisionInfo(const std::string &bundleName, AppProvisionInfo &appProvisionInfo); bool GetAllAppProvisionInfoBundleName(std::unordered_set &bundleNames); + + bool SetSpecifiedDistributionType(const std::string &bundleName, const std::string &specifiedDistributionType); + bool GetSpecifiedDistributionType(const std::string &bundleName, std::string &specifiedDistributionType); + bool SetAdditionalInfo(const std::string &bundleName, const std::string &additionalInfo); + bool GetAdditionalInfo(const std::string &bundleName, std::string &additionalInfo); + private: std::shared_ptr AppProvisionInfoManagerDb_; }; diff --git a/services/bundlemgr/include/app_provision_info/app_provision_info_rdb.h b/services/bundlemgr/include/app_provision_info/app_provision_info_rdb.h index 4eb37ec7d60dc739c5362ccc1856014dd96908dd..d62ea1a82dafb54f190a89ff82d1de72bc3cebdf 100644 --- a/services/bundlemgr/include/app_provision_info/app_provision_info_rdb.h +++ b/services/bundlemgr/include/app_provision_info/app_provision_info_rdb.h @@ -32,6 +32,12 @@ public: bool DeleteAppProvisionInfo(const std::string &bundleName); bool GetAppProvisionInfo(const std::string &bundleName, AppProvisionInfo &appProvisionInfo); bool GetAllAppProvisionInfoBundleName(std::unordered_set &bundleNames); + + bool SetSpecifiedDistributionType(const std::string &bundleName, const std::string &specifiedDistributionType); + bool GetSpecifiedDistributionType(const std::string &bundleName, std::string &specifiedDistributionType); + bool SetAdditionalInfo(const std::string &bundleName, const std::string &additionalInfo); + bool GetAdditionalInfo(const std::string &bundleName, std::string &additionalInfo); + private: bool ConvertToAppProvision(const std::shared_ptr &absSharedResultSet, AppProvisionInfo &appProvisionInfo); diff --git a/services/bundlemgr/src/app_provision_info/app_provision_info_manager.cpp b/services/bundlemgr/src/app_provision_info/app_provision_info_manager.cpp index f51784402b8e976304f468b128db2088178b1cf7..fc32970227c6bc912a41e1d6ba1653e55418ac74 100644 --- a/services/bundlemgr/src/app_provision_info/app_provision_info_manager.cpp +++ b/services/bundlemgr/src/app_provision_info/app_provision_info_manager.cpp @@ -52,5 +52,29 @@ bool AppProvisionInfoManager::GetAllAppProvisionInfoBundleName(std::unordered_se APP_LOGD("AppProvisionInfoManager::GetAllAppProvisionInfoBundleName"); return AppProvisionInfoManagerDb_->GetAllAppProvisionInfoBundleName(bundleNames); } + +bool AppProvisionInfoManager::SetSpecifiedDistributionType( + const std::string &bundleName, const std::string &specifiedDistributionType) +{ + return AppProvisionInfoManagerDb_->SetSpecifiedDistributionType(bundleName, specifiedDistributionType); +} + +bool AppProvisionInfoManager::GetSpecifiedDistributionType( + const std::string &bundleName, std::string &specifiedDistributionType) +{ + return AppProvisionInfoManagerDb_->GetSpecifiedDistributionType(bundleName, specifiedDistributionType); +} + +bool AppProvisionInfoManager::SetAdditionalInfo( + const std::string &bundleName, const std::string &additionalInfo) +{ + return AppProvisionInfoManagerDb_->SetAdditionalInfo(bundleName, additionalInfo); +} + +bool AppProvisionInfoManager::GetAdditionalInfo( + const std::string &bundleName, std::string &additionalInfo) +{ + return AppProvisionInfoManagerDb_->GetAdditionalInfo(bundleName, additionalInfo); +} } // AppExecFwk } // OHOS diff --git a/services/bundlemgr/src/app_provision_info/app_provision_info_rdb.cpp b/services/bundlemgr/src/app_provision_info/app_provision_info_rdb.cpp index 06d37f19c83b281f2758d8ac67c14fa3eb5ee5c0..8da2b6779d8f696b089940eb2ab6ee8b1e925de8 100644 --- a/services/bundlemgr/src/app_provision_info/app_provision_info_rdb.cpp +++ b/services/bundlemgr/src/app_provision_info/app_provision_info_rdb.cpp @@ -36,6 +36,8 @@ const std::string APL = "APL"; const std::string ISSUER = "ISSUER"; const std::string VALIDITY_NOT_BEFORE = "VALIDITY_NOT_BEFORE"; const std::string VALIDITY_NOT_AFTER = "VALIDITY_NOT_AFTER"; +const std::string SPECIFIED_DISTRIBUTED_TYPE = "SPECIFIED_DISTRIBUTED_TYPE"; +const std::string ADDITIONAL_INFO = "ADDITIONAL_INFO"; const int32_t INDEX_BUNDLE_NAME = 0; const int32_t INDEX_VERSION_CODE = 1; const int32_t INDEX_VERSION_NAME = 2; @@ -48,6 +50,8 @@ const int32_t INDEX_APL = 8; const int32_t INDEX_ISSUER = 9; const int32_t INDEX_VALIDITY_NOT_BEFORE = 10; const int32_t INDEX_VALIDITY_NOT_AFTER = 11; +const int32_t INDEX_SPECIFIED_DISTRIBUTED_TYPE = 12; +const int32_t INDEX_ADDITIONAL_INFO = 13; } AppProvisionInfoManagerRdb::AppProvisionInfoManagerRdb() @@ -62,7 +66,8 @@ AppProvisionInfoManagerRdb::AppProvisionInfoManagerRdb() + "(BUNDLE_NAME TEXT PRIMARY KEY NOT NULL, " + "VERSION_CODE INTEGER, VERSION_NAME TEXT, UUID TEXT, " + "TYPE TEXT, APP_DISTRIBUTION_TYPE TEXT, DEVELOPER_ID TEXT, CERTIFICATE TEXT, " - + "APL TEXT, ISSUER TEXT, VALIDITY_NOT_BEFORE INTEGER, VALIDITY_NOT_AFTER INTEGER);"); + + "APL TEXT, ISSUER TEXT, VALIDITY_NOT_BEFORE INTEGER, VALIDITY_NOT_AFTER INTEGER, " + + "SPECIFIED_DISTRIBUTED_TYPE TEXT, ADDITIONAL_INFO TEXT);"); rdbDataManager_ = std::make_shared(bmsRdbConfig); rdbDataManager_->CreateTable(); } @@ -98,6 +103,9 @@ bool AppProvisionInfoManagerRdb::AddAppProvisionInfo(const std::string &bundleNa bool AppProvisionInfoManagerRdb::DeleteAppProvisionInfo(const std::string &bundleName) { + if (bundleName.empty()) { + return false; + } NativeRdb::AbsRdbPredicates absRdbPredicates(APP_PROVISION_INFO_RDB_TABLE_NAME); absRdbPredicates.EqualTo(BUNDLE_NAME, bundleName); return rdbDataManager_->DeleteData(absRdbPredicates); @@ -106,6 +114,9 @@ bool AppProvisionInfoManagerRdb::DeleteAppProvisionInfo(const std::string &bundl bool AppProvisionInfoManagerRdb::GetAppProvisionInfo(const std::string &bundleName, AppProvisionInfo &appProvisionInfo) { + if (bundleName.empty()) { + return false; + } NativeRdb::AbsRdbPredicates absRdbPredicates(APP_PROVISION_INFO_RDB_TABLE_NAME); absRdbPredicates.EqualTo(BUNDLE_NAME, bundleName); auto absSharedResultSet = rdbDataManager_->QueryData(absRdbPredicates); @@ -174,5 +185,94 @@ bool AppProvisionInfoManagerRdb::ConvertToAppProvision( CHECK_RDB_RESULT_RETURN_IF_FAIL(ret, "GetString notAfter failed, ret: %{public}d"); return true; } + +bool AppProvisionInfoManagerRdb::SetSpecifiedDistributionType( + const std::string &bundleName, const std::string &specifiedDistributionType) +{ + if (bundleName.empty()) { + return false; + } + NativeRdb::ValuesBucket valuesBucket; + valuesBucket.PutString(SPECIFIED_DISTRIBUTED_TYPE, specifiedDistributionType); + NativeRdb::AbsRdbPredicates absRdbPredicates(APP_PROVISION_INFO_RDB_TABLE_NAME); + absRdbPredicates.EqualTo(BUNDLE_NAME, bundleName); + if (!rdbDataManager_->UpdateData(valuesBucket, absRdbPredicates)) { + APP_LOGE("bundleName: %{public}s SetSpecifiedDistributionType failed.", bundleName.c_str()); + return false; + } + return true; +} + +bool AppProvisionInfoManagerRdb::GetSpecifiedDistributionType( + const std::string &bundleName, std::string &specifiedDistributionType) +{ + if (bundleName.empty()) { + return false; + } + NativeRdb::AbsRdbPredicates absRdbPredicates(APP_PROVISION_INFO_RDB_TABLE_NAME); + absRdbPredicates.EqualTo(BUNDLE_NAME, bundleName); + auto absSharedResultSet = rdbDataManager_->QueryData(absRdbPredicates); + if (absSharedResultSet == nullptr) { + APP_LOGW("bundleName: %{public}s, GetSpecifiedDistributionType QueryData failed.", bundleName.c_str()); + return false; + } + ScopeGuard stateGuard([absSharedResultSet] { absSharedResultSet->Close(); }); + auto ret = absSharedResultSet->GoToFirstRow(); + if (ret != NativeRdb::E_OK) { + APP_LOGW("bundleName: %{public}s, AppProvisionInfoManagerRdb GetSpecifiedDistributionType failed.", + bundleName.c_str()); + return false; + } + ret = absSharedResultSet->GetString(INDEX_SPECIFIED_DISTRIBUTED_TYPE, specifiedDistributionType); + if (ret != NativeRdb::E_OK) { + APP_LOGE("bundleName: %{public}s GetSpecifiedDistributionType GetString failed.", bundleName.c_str()); + return false; + } + return true; +} + +bool AppProvisionInfoManagerRdb::SetAdditionalInfo( + const std::string &bundleName, const std::string &additionalInfo) +{ + if (bundleName.empty()) { + return false; + } + NativeRdb::ValuesBucket valuesBucket; + valuesBucket.PutString(ADDITIONAL_INFO, additionalInfo); + NativeRdb::AbsRdbPredicates absRdbPredicates(APP_PROVISION_INFO_RDB_TABLE_NAME); + absRdbPredicates.EqualTo(BUNDLE_NAME, bundleName); + if (!rdbDataManager_->UpdateData(valuesBucket, absRdbPredicates)) { + APP_LOGE("bundleName: %{public}s SetAdditionalInfo failed.", bundleName.c_str()); + return false; + } + return true; +} + +bool AppProvisionInfoManagerRdb::GetAdditionalInfo( + const std::string &bundleName, std::string &additionalInfo) +{ + if (bundleName.empty()) { + return false; + } + NativeRdb::AbsRdbPredicates absRdbPredicates(APP_PROVISION_INFO_RDB_TABLE_NAME); + absRdbPredicates.EqualTo(BUNDLE_NAME, bundleName); + auto absSharedResultSet = rdbDataManager_->QueryData(absRdbPredicates); + if (absSharedResultSet == nullptr) { + APP_LOGW("bundleName: %{public}s, GetAdditionalInfo QueryData failed.", bundleName.c_str()); + return false; + } + ScopeGuard stateGuard([absSharedResultSet] { absSharedResultSet->Close(); }); + auto ret = absSharedResultSet->GoToFirstRow(); + if (ret != NativeRdb::E_OK) { + APP_LOGW("bundleName: %{public}s, AppProvisionInfoManagerRdb GetAdditionalInfo failed.", bundleName.c_str()); + return false; + } + ret = absSharedResultSet->GetString(INDEX_ADDITIONAL_INFO, additionalInfo); + if (ret != NativeRdb::E_OK) { + APP_LOGE("bundleName: %{public}s, AppProvisionInfoManagerRdb GetAdditionalInfo failed.", bundleName.c_str()); + return false; + } + return true; +} } // namespace AppExecFwk } // namespace OHOS diff --git a/services/bundlemgr/test/unittest/bms_bundle_app_provision_info_test/bms_bundle_app_provision_info_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_app_provision_info_test/bms_bundle_app_provision_info_test.cpp index 0749f7889ac3b45e269c65ef296bbd846154e928..0745bd17709e6d88a91edfa21259ebc2b572af45 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_app_provision_info_test/bms_bundle_app_provision_info_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_app_provision_info_test/bms_bundle_app_provision_info_test.cpp @@ -353,7 +353,7 @@ HWTEST_F(BmsBundleAppProvisionInfoTest, BmsGetAppProvisionInfoTest_0009, Functio { AppProvisionInfo newProvisionInfo; bool ret = DelayedSingleton::GetInstance()->DeleteAppProvisionInfo(""); - EXPECT_TRUE(ret); + EXPECT_FALSE(ret); } /** @@ -436,4 +436,122 @@ HWTEST_F(BmsBundleAppProvisionInfoTest, AddAppProvisionInfo_0002, Function | Sma ret = DelayedSingleton::GetInstance()->DeleteAppProvisionInfo(BUNDLE_NAME); EXPECT_TRUE(ret); } + +/** + * @tc.number: SetSpecifiedDistributionType_0001 + * @tc.name: test the start function of SetSpecifiedDistributionType +*/ +HWTEST_F(BmsBundleAppProvisionInfoTest, SetSpecifiedDistributionType_0001, Function | SmallTest | Level0) +{ + std::string specifiedDistributionType = "distributionType"; + bool ret = DelayedSingleton::GetInstance()->SetSpecifiedDistributionType("", + specifiedDistributionType); + EXPECT_FALSE(ret); +} + +/** + * @tc.number: SetSpecifiedDistributionType_0002 + * @tc.name: test the start function of SetSpecifiedDistributionType and GetSpecifiedDistributionType +*/ +HWTEST_F(BmsBundleAppProvisionInfoTest, SetSpecifiedDistributionType_0002, Function | SmallTest | Level0) +{ + AppProvisionInfo appProvisionInfo; + bool ret = DelayedSingleton::GetInstance()->AddAppProvisionInfo(BUNDLE_NAME, + appProvisionInfo); + EXPECT_TRUE(ret); + std::string specifiedDistributionType = "distributionType"; + ret = DelayedSingleton::GetInstance()->SetSpecifiedDistributionType(BUNDLE_NAME, + specifiedDistributionType); + EXPECT_TRUE(ret); + std::string newSpecifiedDistributionType; + ret = DelayedSingleton::GetInstance()->GetSpecifiedDistributionType(BUNDLE_NAME, + newSpecifiedDistributionType); + EXPECT_TRUE(ret); + EXPECT_EQ(specifiedDistributionType, newSpecifiedDistributionType); + ret = DelayedSingleton::GetInstance()->DeleteAppProvisionInfo(BUNDLE_NAME); + EXPECT_TRUE(ret); +} + +/** + * @tc.number: GetSpecifiedDistributionType_0001 + * @tc.name: test the start function of GetSpecifiedDistributionType +*/ +HWTEST_F(BmsBundleAppProvisionInfoTest, GetSpecifiedDistributionType_0001, Function | SmallTest | Level0) +{ + std::string specifiedDistributionType; + bool ret = DelayedSingleton::GetInstance()->GetSpecifiedDistributionType("", + specifiedDistributionType); + EXPECT_FALSE(ret); +} + +/** + * @tc.number: GetSpecifiedDistributionType_0002 + * @tc.name: test the start function of GetSpecifiedDistributionType +*/ +HWTEST_F(BmsBundleAppProvisionInfoTest, GetSpecifiedDistributionType_0002, Function | SmallTest | Level0) +{ + std::string specifiedDistributionType; + bool ret = DelayedSingleton::GetInstance()->GetSpecifiedDistributionType(BUNDLE_NAME, + specifiedDistributionType); + EXPECT_FALSE(ret); +} + +/** + * @tc.number: SetAdditionalInfo_0001 + * @tc.name: test the start function of SetAdditionalInfo +*/ +HWTEST_F(BmsBundleAppProvisionInfoTest, SetAdditionalInfo_0001, Function | SmallTest | Level0) +{ + std::string additionalInfo = "additional"; + bool ret = DelayedSingleton::GetInstance()->SetAdditionalInfo("", + additionalInfo); + EXPECT_FALSE(ret); +} + +/** + * @tc.number: SetAdditionalInfo_0002 + * @tc.name: test the start function of SetAdditionalInfo and GetAdditionalInfo +*/ +HWTEST_F(BmsBundleAppProvisionInfoTest, SetAdditionalInfo_0002, Function | SmallTest | Level0) +{ + AppProvisionInfo appProvisionInfo; + bool ret = DelayedSingleton::GetInstance()->AddAppProvisionInfo(BUNDLE_NAME, + appProvisionInfo); + EXPECT_TRUE(ret); + std::string additionalInfo = "additional"; + ret = DelayedSingleton::GetInstance()->SetAdditionalInfo(BUNDLE_NAME, + additionalInfo); + EXPECT_TRUE(ret); + std::string newAdditionalInfo; + ret = DelayedSingleton::GetInstance()->GetAdditionalInfo(BUNDLE_NAME, + newAdditionalInfo); + EXPECT_TRUE(ret); + EXPECT_EQ(additionalInfo, newAdditionalInfo); + ret = DelayedSingleton::GetInstance()->DeleteAppProvisionInfo(BUNDLE_NAME); + EXPECT_TRUE(ret); +} + +/** + * @tc.number: GetAdditionalInfo_0001 + * @tc.name: test the start function of GetAdditionalInfo +*/ +HWTEST_F(BmsBundleAppProvisionInfoTest, GetAdditionalInfo_0001, Function | SmallTest | Level0) +{ + std::string additionalInfo; + bool ret = DelayedSingleton::GetInstance()->GetAdditionalInfo("", + additionalInfo); + EXPECT_FALSE(ret); +} + +/** + * @tc.number: GGetAdditionalInfo_0002 + * @tc.name: test the start function of GetAdditionalInfo +*/ +HWTEST_F(BmsBundleAppProvisionInfoTest, GetAdditionalInfo_0002, Function | SmallTest | Level0) +{ + std::string additionalInfo; + bool ret = DelayedSingleton::GetInstance()->GetAdditionalInfo(BUNDLE_NAME, + additionalInfo); + EXPECT_FALSE(ret); +} } // OHOS \ No newline at end of file