diff --git a/services/distributeddataservice/service/object/src/object_data_listener.cpp b/services/distributeddataservice/service/object/src/object_data_listener.cpp index 8451fa30db0c17007ad091486b11208bc8377eb9..422ac910a4e6890eb066d4ba09383e71f35ebec3 100644 --- a/services/distributeddataservice/service/object/src/object_data_listener.cpp +++ b/services/distributeddataservice/service/object/src/object_data_listener.cpp @@ -82,9 +82,15 @@ int32_t ObjectAssetsRecvListener::OnRecvProgress(const std::string &srcNetworkId return OBJECT_INNER_ERROR; } + if (totalBytes == 0 || totalBytes < processBytes) { + ZLOGE("OnRecvProgress error! processBytes: %{public}" PRIu64 ", totalBytes: %{public}" PRIu64, + processBytes, totalBytes); + return OBJECT_INNER_ERROR; + } + auto objectKey = assetObj->dstBundleName_ + assetObj->sessionId_; - ZLOGI("OnRecvProgress, srcNetworkId: %{public}s, objectKey:%{public}s, totalBytes: %{public}llu," - "processBytes: %{public}llu.", + ZLOGI("OnRecvProgress, srcNetworkId: %{public}s, objectKey:%{public}s, totalBytes: %{public}" PRIu64 + ", processBytes: %{public}" PRIu64 ".", DistributedData::Anonymous::Change(srcNetworkId).c_str(), objectKey.c_str(), totalBytes, processBytes); return OBJECT_SUCCESS; } diff --git a/services/distributeddataservice/service/test/object_manager_test.cpp b/services/distributeddataservice/service/test/object_manager_test.cpp index 61eb66a80f3e58419b9ba1dc9f12bff86b94ebb9..14508153247e27342e719bcd0bb45b212d92d6bc 100644 --- a/services/distributeddataservice/service/test/object_manager_test.cpp +++ b/services/distributeddataservice/service/test/object_manager_test.cpp @@ -1022,6 +1022,37 @@ HWTEST_F(ObjectManagerTest, OnFinished001, TestSize.Level1) EXPECT_EQ(ret, DistributedObject::OBJECT_SUCCESS); } +/** +* @tc.name: OnRecvProgress001 +* @tc.desc: OnRecvProgress test. +* @tc.type: FUNC +*/ +HWTEST_F(ObjectManagerTest, OnRecvProgress001, TestSize.Level1) +{ + std::string srcNetworkId = "srcNetworkId"; + sptr assetObj = nullptr; + uint64_t totalBytes = 100; + uint64_t processBytes = 50; + ObjectAssetsRecvListener listener; + + int32_t ret = listener.OnRecvProgress(srcNetworkId, assetObj, totalBytes, processBytes); + EXPECT_NE(ret, DistributedObject::OBJECT_SUCCESS); + + sptr assetObj_1 = new AssetObj(); + assetObj_1->dstBundleName_ = bundleName_; + assetObj_1->srcBundleName_ = bundleName_; + assetObj_1->dstNetworkId_ = "1"; + assetObj_1->sessionId_ = "123"; + ret = listener.OnRecvProgress(srcNetworkId, assetObj_1, 0, processBytes); + EXPECT_NE(ret, DistributedObject::OBJECT_SUCCESS); + + ret = listener.OnRecvProgress(srcNetworkId, assetObj_1, totalBytes, totalBytes + 1); + EXPECT_NE(ret, DistributedObject::OBJECT_SUCCESS); + + ret = listener.OnRecvProgress(srcNetworkId, assetObj_1, totalBytes, processBytes); + EXPECT_EQ(ret, DistributedObject::OBJECT_SUCCESS); +} + /** * @tc.name: GetObjectData001 * @tc.desc: GetObjectData test.