diff --git a/frameworks/native/distributed_file_inner/src/copy/trans_listener.cpp b/frameworks/native/distributed_file_inner/src/copy/trans_listener.cpp index 6305ef5076646339f8ce87f9ad930012517f5c89..72808cb13665cc5be57ab89e96aa3cd71d66efff 100644 --- a/frameworks/native/distributed_file_inner/src/copy/trans_listener.cpp +++ b/frameworks/native/distributed_file_inner/src/copy/trans_listener.cpp @@ -171,7 +171,12 @@ std::string TransListener::GetFileName(const std::string &path) std::string TransListener::GetNetworkIdFromUri(const std::string &uri) { - return uri.substr(uri.find(TRANS_NETWORK_PARA) + TRANS_NETWORK_PARA.size(), uri.size()); + size_t pos = uri.find(TRANS_NETWORK_PARA); + if (pos != std::string::npos) { + return uri.substr(pos + TRANS_NETWORK_PARA.size(), uri.size()); + } + LOGE("netWorkId is null"); + return ""; } int32_t TransListener::Cancel(const std::string &srcUri, const std::string &destUri) diff --git a/frameworks/native/distributed_file_inner/src/distributed_file_daemon_proxy.cpp b/frameworks/native/distributed_file_inner/src/distributed_file_daemon_proxy.cpp index c8be941489ab06a292a65afd52b32791d51ac624..b01aead1e7c80cb3a9e92283dbe86c2b5695a932 100644 --- a/frameworks/native/distributed_file_inner/src/distributed_file_daemon_proxy.cpp +++ b/frameworks/native/distributed_file_inner/src/distributed_file_daemon_proxy.cpp @@ -530,7 +530,12 @@ int32_t DistributedFileDaemonProxy::PushAsset(int32_t userId, LOGE("UnRegisterAssetCallback failed, ret = %{public}d", ret); return OHOS::FileManagement::E_BROKEN_IPC; } - return reply.ReadInt32(); + int32_t result = -1; + if (!reply.ReadInt32(result)) { + LOGE("Failed to read result"); + return OHOS::FileManagement::E_INVAL_ARG; + } + return result; } int32_t DistributedFileDaemonProxy::RegisterAssetCallback(const sptr &recvCallback) @@ -562,7 +567,12 @@ int32_t DistributedFileDaemonProxy::RegisterAssetCallback(const sptr &recvCallback) @@ -594,7 +604,12 @@ int32_t DistributedFileDaemonProxy::UnRegisterAssetCallback(const sptr &uriList, diff --git a/services/distributedfiledaemon/src/ipc/daemon.cpp b/services/distributedfiledaemon/src/ipc/daemon.cpp index 333ee17fcbb761405fc84a09c3bb1742a573bacd..fd5f6880a7c01c1a1efec104b81260f9fbc4a763 100644 --- a/services/distributedfiledaemon/src/ipc/daemon.cpp +++ b/services/distributedfiledaemon/src/ipc/daemon.cpp @@ -157,9 +157,6 @@ void Daemon::OnStop() if (!subRet) { LOGE("UnSubscribe common event failed"); } - subScriber_ = nullptr; - daemonExecute_ = nullptr; - eventHandler_ = nullptr; SoftBusHandlerAsset::GetInstance().DeleteAssetLocalSessionServer(); AllConnectManager::GetInstance().UnInitAllConnectManager(); LOGI("Stop finished successfully"); @@ -467,6 +464,10 @@ int32_t Daemon::PrepareSession(const std::string &srcUri, const sptr &listener, HmdfsInfo &info) { + if (srcDeviceId.empty()) { + LOGE("srcDeviceId is nullptr"); + return EINVAL; + } auto listenerCallback = iface_cast(listener); if (listenerCallback == nullptr) { LOGE("ListenerCallback is nullptr"); diff --git a/services/distributedfiledaemon/src/ipc/daemon_stub.cpp b/services/distributedfiledaemon/src/ipc/daemon_stub.cpp index acf73d0a595a1a468ad12acdc113aa5b53e9c6d8..3860bd2a6da445aa26b017da9cccfd8b74a3acee 100644 --- a/services/distributedfiledaemon/src/ipc/daemon_stub.cpp +++ b/services/distributedfiledaemon/src/ipc/daemon_stub.cpp @@ -271,7 +271,10 @@ int32_t DaemonStub::HandleRequestSendFile(MessageParcel &data, MessageParcel &re return E_IPC_READ_FAILED; } auto res = RequestSendFile(srcUri, dstPath, dstDeviceId, sessionName); - reply.WriteInt32(res); + if (!reply.WriteInt32(res)) { + LOGE("WriteInt32 failed"); + return E_IPC_WRITE_FAILED; + } LOGD("End RequestSendFile, ret = %{public}d.", res); return res; } diff --git a/services/distributedfiledaemon/src/network/kernel_talker.cpp b/services/distributedfiledaemon/src/network/kernel_talker.cpp index 57381becd042232ee0f630165859af69144806e2..0566aeae4128799fa4182f03f45b8d86783386a2 100644 --- a/services/distributedfiledaemon/src/network/kernel_talker.cpp +++ b/services/distributedfiledaemon/src/network/kernel_talker.cpp @@ -90,7 +90,7 @@ void KernelTalker::SinkSessionTokernel(shared_ptr session, const st .devsl = 0, .status = status, }; - if (memcpy_s(cmd.masterKey, KEY_MAX_LEN, masterkey.data(), KEY_MAX_LEN) != EOK) { + if (memcpy_s(cmd.masterKey, KEY_MAX_LEN, masterkey.data(), masterkey.size()) != EOK) { return; } @@ -110,7 +110,7 @@ void KernelTalker::SinkDevslTokernel(const std::string &cid, uint32_t devsl) .devsl = devsl, }; - if (memcpy_s(cmd.cid, CID_MAX_LEN, cid.c_str(), CID_MAX_LEN)) { + if (memcpy_s(cmd.cid, CID_MAX_LEN, cid.c_str(), cid.length())) { return; } SetCmd(cmd); @@ -127,7 +127,7 @@ void KernelTalker::SinkOfflineCmdToKernel(string cid) return; } - if (memcpy_s(cmd.remoteCid, CID_MAX_LEN, cid.c_str(), CID_MAX_LEN) != EOK) { + if (memcpy_s(cmd.remoteCid, CID_MAX_LEN, cid.c_str(), cid.length()) != EOK) { return; } SetCmd(cmd); diff --git a/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp b/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp index 85fd35d67c689d520b52ade6a8aed72af7c7c00b..8f1ed8253b10ebf34f78aab9323f6246476ce307 100644 --- a/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp +++ b/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp @@ -790,7 +790,7 @@ HWTEST_F(DaemonTest, DaemonTest_PrepareSession_001, TestSize.Level1) ASSERT_TRUE(listener != nullptr) << "监听器创建失败"; // 测试用例 1: 空监听器 - EXPECT_EQ(daemon_->PrepareSession("", "", "", nullptr, hmdfsInfo), E_NULLPTR); + EXPECT_EQ(daemon_->PrepareSession("", "", NETWORKID_ONE, nullptr, hmdfsInfo), E_NULLPTR); // 测试用例 2: 有效 URI,物理路径无效 g_getPhysicalPath = ERR_BAD_VALUE; @@ -821,6 +821,8 @@ HWTEST_F(DaemonTest, DaemonTest_PrepareSession_001, TestSize.Level1) // 测试用例 6: DFS 有效 URI,物理路径有效,stat 成功,DFS 版本获取失败,文件大小 < 1GB, CopyBaseOnRPC EXPECT_EQ(daemon_->PrepareSession(srcUri, dstUri, "invalidDevice", listener, hmdfsInfo), E_SA_LOAD_FAILED); + // 测试用例 7: DFS 有效 URI,物理路径有效,stat 成功,srcDeviceId 为空 + EXPECT_EQ(daemon_->PrepareSession(srcUri, dstUri, "", listener, hmdfsInfo), EINVAL); // 清理 if (std::filesystem::exists(g_physicalPath)) { std::filesystem::remove(g_physicalPath); diff --git a/test/unittests/distributed_file_daemon/daemon_stub_sup_test.cpp b/test/unittests/distributed_file_daemon/daemon_stub_sup_test.cpp index bc11759f130c9e568c11bba1f6c77acbdb40b474..813a140282a1509d6c767f9b72103a2d81ae7306 100644 --- a/test/unittests/distributed_file_daemon/daemon_stub_sup_test.cpp +++ b/test/unittests/distributed_file_daemon/daemon_stub_sup_test.cpp @@ -413,6 +413,29 @@ HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleRequestSendFileTest001, TestSize GTEST_LOG_(INFO) << "DaemonStubSupHandleRequestSendFileTest001 End"; } +/** + * @tc.name: DaemonStubSupHandleRequestSendFileTest002 + * @tc.desc: Verify the HandleRequestSendFile function + * @tc.type: FUNC + * @tc.require: I7M6L1 + */ +HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleRequestSendFileTest002, TestSize.Level0) +{ + GTEST_LOG_(INFO) << "DaemonStubSupHandleRequestSendFileTest002 Start"; + UID = DAEMON_UID; + MessageParcel data; + MessageParcel reply; + + g_getCallingUidTrue = true; + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(true)).WillOnce(Return(true)); + EXPECT_CALL(*daemonStub_, RequestSendFile(_, _, _, _)).WillOnce(Return(E_INVAL_ARG)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); + auto ret = daemonStub_->HandleRequestSendFile(data, reply); + EXPECT_EQ(ret, E_INVAL_ARG); + GTEST_LOG_(INFO) << "DaemonStubSupHandleRequestSendFileTest002 End"; +} + /** * @tc.name: DaemonStubSupHandleGetRemoteCopyInfoTest001 * @tc.desc: Verify the HandleGetRemoteCopyInfo function diff --git a/test/unittests/distributed_file_inner/copy/trans_listener_test.cpp b/test/unittests/distributed_file_inner/copy/trans_listener_test.cpp index f4c8f83a8c4c68f4cac3e9a94d7f3b82553df9f0..79f54d513b52cb91e7f11078c090df3b4aadee81 100644 --- a/test/unittests/distributed_file_inner/copy/trans_listener_test.cpp +++ b/test/unittests/distributed_file_inner/copy/trans_listener_test.cpp @@ -546,6 +546,13 @@ HWTEST_F(TransListenerTest, TransListener_0013, TestSize.Level0) string networkId = ptr->GetNetworkIdFromUri(desturi); EXPECT_EQ(networkId, "12345"); // Expect correct network ID extraction + // Set up URI with network ID is null + desturi = "file://docs/storage/media/100/local/files/Docs/aa1/"; + ptr = std::make_shared(desturi, listener); + + // Test network ID extraction + networkId = ptr->GetNetworkIdFromUri(desturi); + EXPECT_EQ(networkId, ""); // Expect correct network ID extraction GTEST_LOG_(INFO) << "TransListener_0013 End"; } diff --git a/test/unittests/distributed_file_inner/distributed_file_daemon_proxy_test.cpp b/test/unittests/distributed_file_inner/distributed_file_daemon_proxy_test.cpp index ea9b1eb689be177b469e98090b67a5c6596fbc78..f424cbc76d99a092fa6bd46684f045f58a9a1331 100644 --- a/test/unittests/distributed_file_inner/distributed_file_daemon_proxy_test.cpp +++ b/test/unittests/distributed_file_inner/distributed_file_daemon_proxy_test.cpp @@ -29,6 +29,7 @@ namespace { bool g_writeBatchUrisTrue = true; int32_t g_readBatchUris = OHOS::FileManagement::E_OK; std::string g_context = "1"; + constexpr int32_t E_DEFAULT_FAIL = -1; } namespace OHOS::Storage::DistributedFile { bool IpcWrapper::WriteUriByRawData(MessageParcel &data, const std::vector &uriVec) @@ -720,8 +721,9 @@ HWTEST_F(DistributedFileDaemonProxyTest, DistributedFileDaemon_PushAsset_0200, T .WillOnce(Return(true)); EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).WillOnce(Return(E_OK)); EXPECT_CALL(*messageParcelMock_, ReadInt32()).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); auto ret = proxy_->PushAsset(100, assetObj, callbackmock); - EXPECT_EQ(ret, E_OK); + EXPECT_EQ(ret, E_DEFAULT_FAIL); GTEST_LOG_(INFO) << "DistributedFileDaemon_PushAsset_0200 End"; } @@ -748,6 +750,31 @@ HWTEST_F(DistributedFileDaemonProxyTest, DistributedFileDaemon_PushAsset_0300, T GTEST_LOG_(INFO) << "DistributedFileDaemon_PushAsset_0300 End"; } +/** + * @tc.name: DistributedFileDaemon_PushAsset_0400 + * @tc.desc: verify PushAsset. + * @tc.type: FUNC + * @tc.require: I7TDJK + */ +HWTEST_F(DistributedFileDaemonProxyTest, DistributedFileDaemon_PushAsset_0400, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "DistributedFileDaemon_PushAsset_0400 Start"; + auto assetObj (new (std::nothrow) AssetObj()); + auto callbackmock = sptr(new IAssetSendCallbackMock()); + + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteParcelable(_)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteRemoteObject(An&>())) + .WillOnce(Return(true)); + EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, ReadInt32()).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(false)); + auto ret = proxy_->PushAsset(100, assetObj, callbackmock); + EXPECT_EQ(ret, E_INVAL_ARG); + GTEST_LOG_(INFO) << "DistributedFileDaemon_PushAsset_0400 End"; +} + /** * @tc.name: DistributedFileDaemon_RegisterAssetCallback_0100 * @tc.desc: verify RegisterAssetCallback. @@ -785,8 +812,18 @@ HWTEST_F(DistributedFileDaemonProxyTest, DistributedFileDaemon_RegisterAssetCall .WillOnce(Return(true)); EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).WillOnce(Return(E_OK)); EXPECT_CALL(*messageParcelMock_, ReadInt32()).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); ret = proxy_->RegisterAssetCallback(recvCallback); - EXPECT_EQ(ret, E_OK); + EXPECT_EQ(ret, E_DEFAULT_FAIL); + + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteRemoteObject(An&>())) + .WillOnce(Return(true)); + EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, ReadInt32()).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(false)); + ret = proxy_->RegisterAssetCallback(recvCallback); + EXPECT_EQ(ret, E_INVAL_ARG); EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); EXPECT_CALL(*messageParcelMock_, WriteRemoteObject(An&>())) @@ -835,8 +872,18 @@ HWTEST_F(DistributedFileDaemonProxyTest, DistributedFileDaemon_UnRegisterAssetCa .WillOnce(Return(true)); EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).WillOnce(Return(E_OK)); EXPECT_CALL(*messageParcelMock_, ReadInt32()).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); ret = proxy_->UnRegisterAssetCallback(recvCallback); - EXPECT_EQ(ret, E_OK); + EXPECT_EQ(ret, E_DEFAULT_FAIL); + + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteRemoteObject(An&>())) + .WillOnce(Return(true)); + EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, ReadInt32()).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(false)); + ret = proxy_->UnRegisterAssetCallback(recvCallback); + EXPECT_EQ(ret, E_INVAL_ARG); EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); EXPECT_CALL(*messageParcelMock_, WriteRemoteObject(An&>()))