diff --git a/services/distributeddataservice/service/object/src/object_asset_machine.cpp b/services/distributeddataservice/service/object/src/object_asset_machine.cpp index 6d1d11fb71cf86609a5b6c0df42cf0befe6ed635..4bb56de3d08f4608916d250467e34ab28bd5d0ac 100644 --- a/services/distributeddataservice/service/object/src/object_asset_machine.cpp +++ b/services/distributeddataservice/service/object/src/object_asset_machine.cpp @@ -133,7 +133,8 @@ static const DFAAction AssetDFA[STATUS_BUTT][EVENT_BUTT] = { int32_t ObjectAssetMachine::DFAPostEvent(AssetEvent eventId, ChangedAssetInfo& changedAssetInfo, Asset& asset, const std::pair& newAsset) { - if (eventId < 0 || eventId >= EVENT_BUTT) { + if (eventId < 0 || eventId >= EVENT_BUTT || changedAssetInfo.status >= STATUS_BUTT) { + ZLOGE("invalid parameters, eventId: %{public}d, status:%{public}d", eventId, changedAssetInfo.status); return GeneralError::E_ERROR; } diff --git a/services/distributeddataservice/service/test/object_asset_machine_test.cpp b/services/distributeddataservice/service/test/object_asset_machine_test.cpp index 1f09e90d6afe091208bac6780879060afa580b36..b772f24502add641ae09bc150622a42d093bc4b1 100644 --- a/services/distributeddataservice/service/test/object_asset_machine_test.cpp +++ b/services/distributeddataservice/service/test/object_asset_machine_test.cpp @@ -75,6 +75,7 @@ void ObjectAssetMachineTest::SetUp() storeInfo_ = storeInfo; ChangedAssetInfo changedAssetInfo(asset, AssetBindInfo, storeInfo); changedAssets_[uri_] = changedAssetInfo; + changedAssets_[uri_].status = STATUS_STABLE; if (machine == nullptr) { machine = std::make_shared(); auto executors = std::make_shared(2, 1); @@ -174,6 +175,26 @@ HWTEST_F(ObjectAssetMachineTest, DFAPostEvent001, TestSize.Level0) ASSERT_EQ(ret, GeneralError::E_ERROR); } +/** +* @tc.name: DFAPostEvent001 +* @tc.desc: DFAPostEvent invalid status test +* @tc.type: FUNC +*/ +HWTEST_F(ObjectAssetMachineTest, DFAPostEvent002, TestSize.Level0) +{ + Asset asset{ + .name = "test_name", + .uri = uri_, + .modifyTime = "modifyTime1", + .size = "size1", + .hash = "modifyTime1_size1", + }; + std::pair changedAsset{ "device_2", asset }; + changedAssets_[uri_].status = DistributedData::STATUS_NO_CHANGE; + auto ret = machine->DFAPostEvent(UPLOAD, changedAssets_[uri_], asset, changedAsset); + ASSERT_EQ(ret, GeneralError::E_ERROR); +} + /** * @tc.name: StatusUpload001 * @tc.desc: No conflict scenarios: normal cloud sync.