From 269478b47469ca6c281c540a226da64ff3c7f695 Mon Sep 17 00:00:00 2001 From: Axi_Beft Date: Thu, 27 Feb 2025 14:52:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8std::stoi=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E8=BD=AC=E6=8D=A2=EF=BC=8C=E4=BD=86=E6=98=AF?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E6=8D=95=E8=8E=B7=E5=8F=AF=E8=83=BD=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E7=9A=84=E5=BC=82=E5=B8=B8=EF=BC=8C=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E4=B8=BAstd::atoi=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Axi_Beft --- .../service/test/BUILD.gn | 8 + .../test/object_asset_machine_test.cpp | 27 +++- .../service/test/object_manager_test.cpp | 4 +- .../service/test/object_service_impl_test.cpp | 140 ++++++++++++++++++ .../service/test/object_service_stub_test.cpp | 108 ++++++++++++++ 5 files changed, 283 insertions(+), 4 deletions(-) create mode 100644 services/distributeddataservice/service/test/object_service_impl_test.cpp create mode 100644 services/distributeddataservice/service/test/object_service_stub_test.cpp diff --git a/services/distributeddataservice/service/test/BUILD.gn b/services/distributeddataservice/service/test/BUILD.gn index 67bdef26f..e003d3d94 100644 --- a/services/distributeddataservice/service/test/BUILD.gn +++ b/services/distributeddataservice/service/test/BUILD.gn @@ -750,15 +750,22 @@ ohos_unittest("ObjectDmsHandlerTest") { ohos_unittest("ObjectManagerTest") { module_out_path = module_output_path sources = [ + "${data_service_path}/service/common/common_types_utils.cpp", "${data_service_path}/service/common/value_proxy.cpp", "../object/src/object_asset_loader.cpp", "../object/src/object_asset_machine.cpp", "../object/src/object_callback_proxy.cpp", "../object/src/object_data_listener.cpp", + "../object/src/object_dms_handler.cpp", "../object/src/object_manager.cpp", + "../object/src/object_service_impl.cpp", + "../object/src/object_service_stub.cpp", "../object/src/object_snapshot.cpp", + "../object/src/object_types_utils.cpp", "mock/kv_store_nb_delegate_mock.cpp", "object_manager_test.cpp", + "object_service_impl_test.cpp", + "object_service_stub_test.cpp", ] include_dirs = [ @@ -773,6 +780,7 @@ ohos_unittest("ObjectManagerTest") { external_deps = [ "access_token:libaccesstoken_sdk", + "access_token:libtoken_setproc", "access_token:libtokenid_sdk", "c_utils:utils", "data_object:distributeddataobject_impl", diff --git a/services/distributeddataservice/service/test/object_asset_machine_test.cpp b/services/distributeddataservice/service/test/object_asset_machine_test.cpp index 0405b8294..1f09e90d6 100644 --- a/services/distributeddataservice/service/test/object_asset_machine_test.cpp +++ b/services/distributeddataservice/service/test/object_asset_machine_test.cpp @@ -135,7 +135,7 @@ HWTEST_F(ObjectAssetMachineTest, StatusTransfer002, TestSize.Level0) * @tc.desc: Transfer event * @tc.type: FUNC * @tc.require: -* @tc.author: nhj +* @tc.author: whj */ HWTEST_F(ObjectAssetMachineTest, StatusTransfer003, TestSize.Level0) { @@ -154,6 +154,26 @@ HWTEST_F(ObjectAssetMachineTest, StatusTransfer003, TestSize.Level0) ASSERT_EQ(changedAssets_[uri_].asset.hash, asset.hash); } +/** +* @tc.name: DFAPostEvent001 +* @tc.desc: DFAPostEvent invalid eventId test +* @tc.type: FUNC +*/ +HWTEST_F(ObjectAssetMachineTest, DFAPostEvent001, 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 = STATUS_UPLOADING; + auto ret = machine->DFAPostEvent(EVENT_BUTT, changedAssets_[uri_], asset, changedAsset); + ASSERT_EQ(ret, GeneralError::E_ERROR); +} + /** * @tc.name: StatusUpload001 * @tc.desc: No conflict scenarios: normal cloud sync. @@ -176,6 +196,9 @@ HWTEST_F(ObjectAssetMachineTest, StatusUpload001, TestSize.Level0) machine->DFAPostEvent(UPLOAD_FINISHED, changedAssets_[uri_], asset); ASSERT_EQ(changedAssets_[uri_].status, STATUS_STABLE); + // dotransfer + machine->DFAPostEvent(REMOTE_CHANGED, changedAssets_[uri_], asset, changedAsset); + ASSERT_EQ(changedAssets_[uri_].status, STATUS_TRANSFERRING); } /** @@ -229,7 +252,7 @@ HWTEST_F(ObjectAssetMachineTest, StatusUpload002, TestSize.Level0) * @tc.desc: No conflict scenarios: normal cloud sync. * @tc.type: FUNC * @tc.require: -* @tc.author: nhj +* @tc.author: whj */ HWTEST_F(ObjectAssetMachineTest, StatusDownload001, TestSize.Level0) { diff --git a/services/distributeddataservice/service/test/object_manager_test.cpp b/services/distributeddataservice/service/test/object_manager_test.cpp index 0a7eca463..6f4a2c0a1 100644 --- a/services/distributeddataservice/service/test/object_manager_test.cpp +++ b/services/distributeddataservice/service/test/object_manager_test.cpp @@ -537,13 +537,13 @@ HWTEST_F(ObjectManagerTest, SyncOnStore001, TestSize.Level0) } /** -* @tc.name: RevokeSaveToStore001 +* @tc.name: RetrieveFromStore001 * @tc.desc: RetrieveFromStore test. * @tc.type: FUNC * @tc.require: * @tc.author: wangbin */ -HWTEST_F(ObjectManagerTest, RevokeSaveToStore001, TestSize.Level0) +HWTEST_F(ObjectManagerTest, RetrieveFromStore001, TestSize.Level0) { auto manager = ObjectStoreManager::GetInstance(); DistributedDB::KvStoreNbDelegateMock mockDelegate; diff --git a/services/distributeddataservice/service/test/object_service_impl_test.cpp b/services/distributeddataservice/service/test/object_service_impl_test.cpp new file mode 100644 index 000000000..a2f435e03 --- /dev/null +++ b/services/distributeddataservice/service/test/object_service_impl_test.cpp @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "ObjectServiceImplTest" + +#include "object_service_impl.h" + +#include + +#include "accesstoken_kit.h" +#include "ipc_skeleton.h" +#include "token_setproc.h" + +using namespace testing::ext; +using namespace OHOS::DistributedObject; +namespace OHOS::Test { +class ObjectServiceImplTest : public testing::Test { +public: + void SetUp(); + void TearDown(); +protected: + ObjectStore::Asset asset_; + std::string uri_; + std::string appId_ = "ObjectServiceImplTest_appid_1"; + std::string sessionId_ = "123"; + std::vector data_; + std::string deviceId_ = "7001005458323933328a258f413b3900"; + uint64_t sequenceId_ = 10; + uint64_t sequenceId_2 = 20; + uint64_t sequenceId_3 = 30; + std::string userId_ = "100"; + std::string bundleName_ = "test_bundleName"; + ObjectStore::AssetBindInfo assetBindInfo_; + pid_t pid_ = 10; + uint32_t tokenId_ = 100; +}; + +void ObjectServiceImplTest::SetUp() +{ + uri_ = "file:://com.examples.hmos.notepad/data/storage/el2/distributedfiles/dir/asset1.jpg"; + ObjectStore::Asset asset{ + .id = "test_name", + .name = uri_, + .uri = uri_, + .createTime = "2025.03.05", + .modifyTime = "modifyTime", + .size = "size", + .hash = "modifyTime_size", + .path = "/data/storage/el2", + }; + asset_ = asset; + + data_.push_back(sequenceId_); + data_.push_back(sequenceId_2); + data_.push_back(sequenceId_3); + + ObjectStore::AssetBindInfo AssetBindInfo{ + .storeName = "store_test", + .tableName = "table_test", + .field = "attachment", + .assetName = "asset1.jpg", + }; + assetBindInfo_ = AssetBindInfo; +} + +void ObjectServiceImplTest::TearDown() {} + +/** + * @tc.name: OnAssetChanged001 + * @tc.desc: OnAssetChanged test. + * @tc.type: FUNC + */ +HWTEST_F(ObjectServiceImplTest, OnAssetChanged001, TestSize.Level1) +{ + std::string bundleName = "com.examples.hmos.notepad"; + OHOS::Security::AccessToken::AccessTokenID tokenId = + OHOS::Security::AccessToken::AccessTokenKit::GetHapTokenID(100, bundleName, 0); + SetSelfTokenID(tokenId); + + std::shared_ptr objectServiceImpl = std::make_shared(); + + // bundleName not equal tokenId + auto ret = objectServiceImpl->OnAssetChanged(bundleName_, sessionId_, deviceId_, asset_); + EXPECT_EQ(ret, OBJECT_PERMISSION_DENIED); + ret = objectServiceImpl->OnAssetChanged(bundleName, sessionId_, deviceId_, asset_); + EXPECT_NE(ret, OBJECT_SUCCESS); +} + +/** + * @tc.name: BindAssetStore001 + * @tc.desc: BindAssetStore test. + * @tc.type: FUNC + */ +HWTEST_F(ObjectServiceImplTest, BindAssetStore001, TestSize.Level1) +{ + std::string bundleName = "com.examples.hmos.notepad"; + OHOS::Security::AccessToken::AccessTokenID tokenId = + OHOS::Security::AccessToken::AccessTokenKit::GetHapTokenID(100, bundleName, 0); + SetSelfTokenID(tokenId); + + std::shared_ptr objectServiceImpl = std::make_shared(); + + // bundleName not equal tokenId + auto ret = objectServiceImpl->BindAssetStore(bundleName_, sessionId_, asset_, assetBindInfo_); + EXPECT_EQ(ret, OBJECT_PERMISSION_DENIED); + ret = objectServiceImpl->BindAssetStore(bundleName, sessionId_, asset_, assetBindInfo_); + EXPECT_NE(ret, OBJECT_SUCCESS); +} + +/** + * @tc.name: DeleteSnapShot001 + * @tc.desc: DeleteSnapShot test. + * @tc.type: FUNC + */ +HWTEST_F(ObjectServiceImplTest, DeleteSnapShot001, TestSize.Level1) +{ + std::string bundleName = "com.examples.hmos.notepad"; + OHOS::Security::AccessToken::AccessTokenID tokenId = + OHOS::Security::AccessToken::AccessTokenKit::GetHapTokenID(100, bundleName, 0); + SetSelfTokenID(tokenId); + + std::shared_ptr objectServiceImpl = std::make_shared(); + + // bundleName not equal tokenId + auto ret = objectServiceImpl->DeleteSnapShot(bundleName_, sessionId_); + EXPECT_EQ(ret, OBJECT_PERMISSION_DENIED); +} +} \ No newline at end of file diff --git a/services/distributeddataservice/service/test/object_service_stub_test.cpp b/services/distributeddataservice/service/test/object_service_stub_test.cpp new file mode 100644 index 000000000..1cbb5e1a5 --- /dev/null +++ b/services/distributeddataservice/service/test/object_service_stub_test.cpp @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "ObjectServiceStubTest" + +#include "object_service_stub.h" + +#include + +#include "ipc_skeleton.h" +#include "object_service_impl.h" + +using namespace testing::ext; +using namespace OHOS::DistributedObject; +namespace OHOS::Test { +const std::u16string INTERFACE_TOKEN = u"OHOS.DistributedObject.IObjectService"; +constexpr uint32_t CODE_MAX = static_cast(ObjectCode::OBJECTSTORE_SERVICE_CMD_MAX) + 1; +constexpr size_t TEST_SIZE = 1; +constexpr uint8_t TEST_DATA = 1; +class ObjectServiceStubTest : public testing::Test { +public: + void SetUp(){}; + void TearDown(){}; +}; +std::shared_ptr objectServiceImpl = std::make_shared(); +std::shared_ptr objectServiceStub = objectServiceImpl; + +/** + * @tc.name: OnRemoteRequest001 + * @tc.desc: OnRemoteRequest data error test + * @tc.type: FUNC + * @tc.require: + * @tc.author: shuxin + */ +HWTEST_F(ObjectServiceStubTest, ObjectServiceTest001, TestSize.Level1) +{ + uint8_t value = TEST_DATA; + uint8_t *data = &value; + size_t size = TEST_SIZE; + uint32_t code = 0; + MessageParcel request; + request.WriteInterfaceToken(INTERFACE_TOKEN); + request.WriteBuffer(data, size); + request.RewindRead(0); + MessageParcel reply; + auto result = objectServiceStub->OnRemoteRequest(code, request, reply); + EXPECT_EQ(result, IPC_STUB_INVALID_DATA_ERR); + + code = CODE_MAX - 1; + result = objectServiceStub->OnRemoteRequest(code, request, reply); + EXPECT_EQ(result, -1); +} + +/** + * @tc.name: OnRemoteRequest002 + * @tc.desc: OnRemoteRequest test + * @tc.type: FUNC + * @tc.require: + * @tc.author: shuxin + */ +HWTEST_F(ObjectServiceStubTest, ObjectServiceTest002, TestSize.Level1) +{ + uint8_t value = TEST_DATA; + uint8_t *data = &value; + size_t size = TEST_SIZE; + MessageParcel request; + request.WriteInterfaceToken(INTERFACE_TOKEN); + request.WriteBuffer(data, size); + request.RewindRead(0); + MessageParcel reply; + + auto result = objectServiceStub->ObjectStoreRevokeSaveOnRemote(request, reply); + EXPECT_EQ(result, IPC_STUB_INVALID_DATA_ERR); + + result = objectServiceStub->ObjectStoreRetrieveOnRemote(request, reply); + EXPECT_EQ(result, IPC_STUB_INVALID_DATA_ERR); + + result = objectServiceStub->OnSubscribeRequest(request, reply); + EXPECT_EQ(result, IPC_STUB_INVALID_DATA_ERR); + + result = objectServiceStub->OnUnsubscribeRequest(request, reply); + EXPECT_EQ(result, IPC_STUB_INVALID_DATA_ERR); + + result = objectServiceStub->OnAssetChangedOnRemote(request, reply); + EXPECT_EQ(result, IPC_STUB_INVALID_DATA_ERR); + + result = objectServiceStub->ObjectStoreBindAssetOnRemote(request, reply); + EXPECT_EQ(result, IPC_STUB_INVALID_DATA_ERR); + + result = objectServiceStub->OnDeleteSnapshot(request, reply); + EXPECT_EQ(result, IPC_STUB_INVALID_DATA_ERR); + + result = objectServiceStub->OnIsContinue(request, reply); + EXPECT_EQ(result, 0); +} +} \ No newline at end of file -- Gitee