From 2454639244591a4b67c8b4c7d2e1a823cfd1e003 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=81=E7=AB=9E=E8=8E=9C?= Date: Mon, 11 Aug 2025 17:07:51 +0800 Subject: [PATCH 1/9] =?UTF-8?q?dfs=20rpc=E6=8E=A5=E5=8F=A3acl=E5=8A=A0?= =?UTF-8?q?=E5=9B=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 宁竞莜 --- .../include/distributed_file_daemon_proxy.h | 13 + .../src/distributed_file_daemon_proxy.cpp | 109 ++++++++ .../include/device/device_profile_adapter.h | 6 +- .../include/ipc/daemon.h | 20 +- .../include/ipc/daemon_event.h | 7 +- .../include/ipc/daemon_execute.h | 3 +- .../include/ipc/daemon_stub.h | 2 + ...stributed_file_daemon_ipc_interface_code.h | 4 +- .../include/ipc/i_daemon.h | 12 +- .../src/device/device_profile_adapter.cpp | 18 +- .../distributedfiledaemon/src/ipc/daemon.cpp | 169 +++++++++--- .../src/ipc/daemon_execute.cpp | 16 +- .../src/ipc/daemon_stub.cpp | 110 +++++++- .../src/multiuser/os_account_observer.cpp | 1 - .../test/mock/include/daemon_mock.h | 39 +-- .../test/unittest/BUILD.gn | 1 + .../device_profile_adapter_test.cpp | 26 +- .../test/unittest/ipc/daemon/daemon_test.cpp | 175 +++++++++--- .../daemon_execute/daemon_execute_test.cpp | 16 +- .../daemonstub_fuzzer/daemonstub_fuzzer.cpp | 16 ++ .../daemon_stub_sup_test.cpp | 175 ++++++++++++ .../daemon_stub_test.cpp | 8 + .../include/i_daemon_mock.h | 13 + .../unittests/distributed_file_inner/BUILD.gn | 2 + .../distributed_file_daemon_proxy_test.cpp | 253 ++++++++++++++++-- utils/log/include/dfs_error.h | 1 + 26 files changed, 1044 insertions(+), 171 deletions(-) diff --git a/frameworks/native/distributed_file_inner/include/distributed_file_daemon_proxy.h b/frameworks/native/distributed_file_inner/include/distributed_file_daemon_proxy.h index 8dbe49c75..fc95d8c85 100644 --- a/frameworks/native/distributed_file_inner/include/distributed_file_daemon_proxy.h +++ b/frameworks/native/distributed_file_inner/include/distributed_file_daemon_proxy.h @@ -48,11 +48,24 @@ public: HmdfsInfo &info) override; int32_t CancelCopyTask(const std::string &sessionName) override; int32_t CancelCopyTask(const std::string &srcUri, const std::string &dstUri) override; + int32_t RequestSendFile(const std::string &srcUri, const std::string &dstPath, const std::string &dstDeviceId, const std::string &sessionName) override; + // for ACL verification after 6.0 version + int32_t RequestSendFileACL(const std::string &srcUri, + const std::string &dstPath, + const std::string &dstDeviceId, + const std::string &sessionName, + const AccountInfo &callerAccountInfo) override; + int32_t GetRemoteCopyInfo(const std::string &srcUri, bool &isFile, bool &isDir) override; + // for ACL verification after 6.0 version + int32_t GetRemoteCopyInfoACL(const std::string &srcUri, + bool &isFile, + bool &isDir, + const AccountInfo &callerAccountInfo) override; int32_t PushAsset(int32_t userId, const sptr &assetObj, 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 c8be94148..dc9cfbd71 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 @@ -390,6 +390,62 @@ int32_t DistributedFileDaemonProxy::RequestSendFile(const std::string &srcUri, return reply.ReadInt32(); } +int32_t DistributedFileDaemonProxy::RequestSendFileACL(const std::string &srcUri, + const std::string &dstPath, + const std::string &remoteDeviceId, + const std::string &sessionName, + const AccountInfo &callerAccountInfo) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + if (!data.WriteInterfaceToken(GetDescriptor())) { + LOGE("Failed to write interface token"); + return OHOS::FileManagement::E_BROKEN_IPC; + } + if (!data.WriteString(srcUri)) { + LOGE("Failed to send srcUri"); + return OHOS::FileManagement::E_INVAL_ARG; + } + if (!data.WriteString(dstPath)) { + LOGE("Failed to send dstPath"); + return OHOS::FileManagement::E_INVAL_ARG; + } + if (!data.WriteString(remoteDeviceId)) { + LOGE("Failed to send remoteDeviceId"); + return OHOS::FileManagement::E_INVAL_ARG; + } + if (!data.WriteString(sessionName)) { + LOGE("Failed to send sessionName"); + return OHOS::FileManagement::E_INVAL_ARG; + } + if (!data.WriteInt32(callerAccountInfo.userId_)) { + LOGE("Failed to send userId"); + return OHOS::FileManagement::E_INVAL_ARG; + } + if (!data.WriteString(callerAccountInfo.accountId_)) { + LOGE("Failed to send accountId"); + return OHOS::FileManagement::E_INVAL_ARG; + } + if (!data.WriteString(callerAccountInfo.networkId_)) { + LOGE("Failed to send networkId"); + return OHOS::FileManagement::E_INVAL_ARG; + } + auto remote = Remote(); + if (remote == nullptr) { + LOGE("remote is nullptr"); + return OHOS::FileManagement::E_BROKEN_IPC; + } + int32_t ret = remote->SendRequest( + static_cast(DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_REQUEST_SEND_FILE_BASE_ACL), data, + reply, option); + if (ret != 0) { + LOGE("SendRequest failed, ret = %{public}d", ret); + return OHOS::FileManagement::E_BROKEN_IPC; + } + return reply.ReadInt32(); +} + int32_t DistributedFileDaemonProxy::GetRemoteCopyInfo(const std::string &srcUri, bool &isFile, bool &isDir) { MessageParcel data; @@ -430,6 +486,59 @@ int32_t DistributedFileDaemonProxy::GetRemoteCopyInfo(const std::string &srcUri, return ret; } +int32_t DistributedFileDaemonProxy::GetRemoteCopyInfoACL(const std::string &srcUri, bool &isFile, bool &isDir, + const AccountInfo &callerAccountInfo) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + if (!data.WriteInterfaceToken(GetDescriptor())) { + LOGE("Failed to write interface token"); + return OHOS::FileManagement::E_BROKEN_IPC; + } + if (!data.WriteString(srcUri)) { + LOGE("Failed to send srcUri"); + return OHOS::FileManagement::E_INVAL_ARG; + } + if (!data.WriteInt32(callerAccountInfo.userId_)) { + LOGE("Failed to send userId"); + return OHOS::FileManagement::E_INVAL_ARG; + } + if (!data.WriteString(callerAccountInfo.accountId_)) { + LOGE("Failed to send accountId"); + return OHOS::FileManagement::E_INVAL_ARG; + } + if (!data.WriteString(callerAccountInfo.networkId_)) { + LOGE("Failed to send networkId"); + return OHOS::FileManagement::E_INVAL_ARG; + } + auto remote = Remote(); + if (remote == nullptr) { + LOGE("remote is nullptr"); + return OHOS::FileManagement::E_BROKEN_IPC; + } + auto ret = remote->SendRequest( + static_cast(DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_GET_REMOTE_COPY_INFO_BASE_ACL), data, + reply, option); + if (ret != 0) { + LOGE("SendRequest failed, ret = %{public}d", ret); + return OHOS::FileManagement::E_BROKEN_IPC; + } + if (!reply.ReadBool(isFile)) { + LOGE("read isFile failed"); + return OHOS::FileManagement::E_INVAL_ARG; + } + if (!reply.ReadBool(isDir)) { + LOGE("read isDir failed"); + return OHOS::FileManagement::E_INVAL_ARG; + } + if (!reply.ReadInt32(ret)) { + LOGE("read res failed"); + return OHOS::FileManagement::E_INVAL_ARG; + } + return ret; +} + int32_t DistributedFileDaemonProxy::CancelCopyTask(const std::string &sessionName) { MessageParcel data; diff --git a/services/distributedfiledaemon/include/device/device_profile_adapter.h b/services/distributedfiledaemon/include/device/device_profile_adapter.h index 7bae78d33..20c2daf80 100644 --- a/services/distributedfiledaemon/include/device/device_profile_adapter.h +++ b/services/distributedfiledaemon/include/device/device_profile_adapter.h @@ -39,7 +39,7 @@ struct DfsVersion { return ss.str(); } }; - + class DeviceProfileAdapter { public: ~DeviceProfileAdapter() = default; @@ -48,9 +48,9 @@ public: static DeviceProfileAdapter instance; return instance; } - bool IsRemoteDfsVersionLower(const std::string &remoteNetworkId, + bool IsRemoteDfsVersionLowerThanLocal(const std::string &remoteNetworkId, VersionPackageName packageName = VersionPackageName::DFS_VERSION); - bool IsRemoteDfsVersionLower(const std::string &remoteNetworkId, + bool IsRemoteDfsVersionLowerThanGiven(const std::string &remoteNetworkId, const DfsVersion& thresholdDfsVersion, VersionPackageName packageName = VersionPackageName::DFS_VERSION); int32_t GetDfsVersionFromNetworkId(const std::string &networkId, DfsVersion &dfsVersion, VersionPackageName packageName = VersionPackageName::DFS_VERSION); diff --git a/services/distributedfiledaemon/include/ipc/daemon.h b/services/distributedfiledaemon/include/ipc/daemon.h index e21c348e0..0444a718f 100644 --- a/services/distributedfiledaemon/include/ipc/daemon.h +++ b/services/distributedfiledaemon/include/ipc/daemon.h @@ -25,6 +25,7 @@ #include "daemon_eventhandler.h" #include "daemon_execute.h" #include "daemon_stub.h" +#include "device/device_profile_adapter.h" #include "dm_device_info.h" #include "file_trans_listener_proxy.h" #include "hmdfs_info.h" @@ -80,7 +81,16 @@ public: const std::string &dstPath, const std::string &dstDeviceId, const std::string &sessionName) override; + // for ACL verification after 6.0 version + int32_t RequestSendFileACL(const std::string &srcUri, + const std::string &dstPath, + const std::string &dstDeviceId, + const std::string &sessionName, + const AccountInfo &callerAccountInfo) override; int32_t GetRemoteCopyInfo(const std::string &srcUri, bool &isFile, bool &isDir) override; + // for ACL verification after 6.0 version + int32_t GetRemoteCopyInfoACL(const std::string &srcUri, bool &isFile, bool &isDir, + const AccountInfo &callerAccountInfo) override; int32_t PushAsset(int32_t userId, const sptr &assetObj, @@ -95,7 +105,8 @@ public: static int32_t Copy(const std::string &srcUri, const std::string &dstPath, const sptr &daemon, - const std::string &sessionName); + const std::string &sessionName, + const std::string &srcNetworkId); int32_t GetDfsSwitchStatus(const std::string &networkId, int32_t &switchStatus) override; int32_t UpdateDfsSwitchStatus(int32_t switchStatus) override; int32_t GetConnectedDeviceList(std::vector &deviceList) override; @@ -118,12 +129,17 @@ private: const std::string &dstUri, std::string &physicalPath, HmdfsInfo &info, - const sptr &daemon); + const sptr &daemon, + const std::string &networkId); int32_t CheckCopyRule(std::string &physicalPath, const std::string &dstUri, HapTokenInfo &hapTokenInfo, const bool &isSrcFile, HmdfsInfo &info); + int32_t HandleDestinationPathAndPermissions(const std::string &dstUri, + bool isSrcFile, + HmdfsInfo &info, + std::string &physicalPath); int32_t SendDfsDelayTask(const std::string &networkId); void RemoveDfsDelayTask(const std::string &networkId); void DisconnectDevice(const std::string networkId); diff --git a/services/distributedfiledaemon/include/ipc/daemon_event.h b/services/distributedfiledaemon/include/ipc/daemon_event.h index ee0abfdba..a89669bdb 100644 --- a/services/distributedfiledaemon/include/ipc/daemon_event.h +++ b/services/distributedfiledaemon/include/ipc/daemon_event.h @@ -67,13 +67,15 @@ struct PrepareSessionData { const std::string &sessionName, const sptr daemon, HmdfsInfo &info, - const std::shared_ptr> &prepareSessionBlock) + const std::shared_ptr> &prepareSessionBlock, + const std::string &srcNetworkId) : srcUri_(srcUri), physicalPath_(physicalPath), sessionName_(sessionName), daemon_(daemon), info_(info), - prepareSessionBlock_(prepareSessionBlock) + prepareSessionBlock_(prepareSessionBlock), + srcNetworkId_(srcNetworkId) { } @@ -83,6 +85,7 @@ struct PrepareSessionData { const sptr daemon_; HmdfsInfo &info_; const std::shared_ptr> prepareSessionBlock_; + const std::string srcNetworkId_; }; } // namespace DistributedFile diff --git a/services/distributedfiledaemon/include/ipc/daemon_execute.h b/services/distributedfiledaemon/include/ipc/daemon_execute.h index d96528d33..04e2bd146 100644 --- a/services/distributedfiledaemon/include/ipc/daemon_execute.h +++ b/services/distributedfiledaemon/include/ipc/daemon_execute.h @@ -47,7 +47,8 @@ private: std::string &physicalPath, const std::string &sessionName, const sptr &daemon, - HmdfsInfo &info); + HmdfsInfo &info, + const std::string &srcNetworkId); private: std::string GetZipName(const std::string &relativePath); std::vector GetFileList(const std::vector &uris, diff --git a/services/distributedfiledaemon/include/ipc/daemon_stub.h b/services/distributedfiledaemon/include/ipc/daemon_stub.h index 22e1ffae5..31eb21090 100644 --- a/services/distributedfiledaemon/include/ipc/daemon_stub.h +++ b/services/distributedfiledaemon/include/ipc/daemon_stub.h @@ -45,7 +45,9 @@ private: int32_t HandleCancelCopyTask(MessageParcel &data, MessageParcel &reply); int32_t HandleInnerCancelCopyTask(MessageParcel &data, MessageParcel &reply); int32_t HandleRequestSendFile(MessageParcel &data, MessageParcel &reply); + int32_t HandleRequestSendFileACL(MessageParcel &data, MessageParcel &reply); int32_t HandleGetRemoteCopyInfo(MessageParcel &data, MessageParcel &reply); + int32_t HandleGetRemoteCopyInfoACL(MessageParcel &data, MessageParcel &reply); int32_t HandlePushAsset(MessageParcel &data, MessageParcel &reply); int32_t HandleRegisterRecvCallback(MessageParcel &data, MessageParcel &reply); diff --git a/services/distributedfiledaemon/include/ipc/distributed_file_daemon_ipc_interface_code.h b/services/distributedfiledaemon/include/ipc/distributed_file_daemon_ipc_interface_code.h index 7ecd93d32..571c9507f 100644 --- a/services/distributedfiledaemon/include/ipc/distributed_file_daemon_ipc_interface_code.h +++ b/services/distributedfiledaemon/include/ipc/distributed_file_daemon_ipc_interface_code.h @@ -35,7 +35,9 @@ namespace DistributedFile { GET_DFS_URI_IS_DIR_FROM_LOCAL, DISTRIBUTED_FILE_GET_DFS_SWITCH_STATUS, DISTRIBUTED_FILE_UPDATE_DFS_SWITCH_STATUS, - DISTRIBUTED_FILE_GET_CONNECTED_DEVICE_LIST + DISTRIBUTED_FILE_GET_CONNECTED_DEVICE_LIST, + DISTRIBUTED_FILE_GET_REMOTE_COPY_INFO_BASE_ACL, + DISTRIBUTED_FILE_REQUEST_SEND_FILE_BASE_ACL, }; } // namespace DistributedFile } // namespace Storage diff --git a/services/distributedfiledaemon/include/ipc/i_daemon.h b/services/distributedfiledaemon/include/ipc/i_daemon.h index 67ef3ad08..508281dca 100644 --- a/services/distributedfiledaemon/include/ipc/i_daemon.h +++ b/services/distributedfiledaemon/include/ipc/i_daemon.h @@ -24,6 +24,7 @@ #include "hmdfs_info.h" #include "iremote_broker.h" #include "i_file_dfs_listener.h" +#include "network/softbus/softbus_permission_check.h" #include "remote_file_share.h" namespace OHOS { @@ -50,8 +51,17 @@ public: const std::string &dstPath, const std::string &remoteDeviceId, const std::string &sessionName) = 0; - static inline const std::string SERVICE_NAME { "ohos.storage.distributedfile.daemon" }; + virtual int32_t RequestSendFileACL(const std::string &srcUri, + const std::string &dstPath, + const std::string &remoteDeviceId, + const std::string &sessionName, + const AccountInfo &callerAccountInfo) = 0; + static inline const std::string SERVICE_NAME{"ohos.storage.distributedfile.daemon"}; virtual int32_t GetRemoteCopyInfo(const std::string &srcUri, bool &isFile, bool &isDir) = 0; + virtual int32_t GetRemoteCopyInfoACL(const std::string &srcUri, + bool &isFile, + bool &isDir, + const AccountInfo &callerAccountInfo) = 0; virtual int32_t PushAsset(int32_t userId, const sptr &assetObj, diff --git a/services/distributedfiledaemon/src/device/device_profile_adapter.cpp b/services/distributedfiledaemon/src/device/device_profile_adapter.cpp index 648c4ec28..cc1f6e0bc 100644 --- a/services/distributedfiledaemon/src/device/device_profile_adapter.cpp +++ b/services/distributedfiledaemon/src/device/device_profile_adapter.cpp @@ -64,29 +64,31 @@ static inline bool Str2Bool(const std::string &value) } #endif -bool DeviceProfileAdapter::IsRemoteDfsVersionLower(const std::string &remoteNetworkId, - VersionPackageName packageName) +bool DeviceProfileAdapter::IsRemoteDfsVersionLowerThanLocal(const std::string &remoteNetworkId, + VersionPackageName packageName) { + LOGI("remoteDevice.networkId: %{public}.6s", remoteNetworkId.c_str()); #ifdef SUPPORT_DEVICE_PROFILE - LOGI("remoteDevice.networkId: %{public}.5s", remoteNetworkId.c_str()); DfsVersion localDfsVersion; int32_t ret = GetLocalDfsVersion(packageName, localDfsVersion); if (ret != FileManagement::ERR_OK) { LOGE("GetLocalDfsVersion failed, ret=%{public}d", ret); return false; } - return IsRemoteDfsVersionLower(remoteNetworkId, localDfsVersion, packageName); + return IsRemoteDfsVersionLowerThanGiven(remoteNetworkId, localDfsVersion, packageName); #else return false; #endif } // Comparison of version numbers later than the current version number is not supported. -bool DeviceProfileAdapter::IsRemoteDfsVersionLower(const std::string &remoteNetworkId, - const DfsVersion &thresholdDfsVersion, VersionPackageName packageName) +bool DeviceProfileAdapter::IsRemoteDfsVersionLowerThanGiven(const std::string &remoteNetworkId, + const DfsVersion &givenDfsVersion, + VersionPackageName packageName) { + LOGI("remoteDevice.networkId: %{public}.6s ,GivenDFSVersion: %{public}s", remoteNetworkId.c_str(), + givenDfsVersion.dump().c_str()); #ifdef SUPPORT_DEVICE_PROFILE - LOGI("remoteDevice.networkId: %{public}.5s", remoteNetworkId.c_str()); if (remoteNetworkId.empty()) { LOGE("remoteNetworkId is empty"); return false; @@ -97,7 +99,7 @@ bool DeviceProfileAdapter::IsRemoteDfsVersionLower(const std::string &remoteNetw LOGE("GetDfsVersionFromNetworkId failed, ret=%{public}d", ret); return false; } - return CompareDfsVersion(remoteDfsVersion, thresholdDfsVersion); + return CompareDfsVersion(remoteDfsVersion, givenDfsVersion); #else return false; #endif diff --git a/services/distributedfiledaemon/src/ipc/daemon.cpp b/services/distributedfiledaemon/src/ipc/daemon.cpp index e3cb12fb0..96fe4434c 100644 --- a/services/distributedfiledaemon/src/ipc/daemon.cpp +++ b/services/distributedfiledaemon/src/ipc/daemon.cpp @@ -81,6 +81,7 @@ constexpr mode_t DEFAULT_UMASK = 0002; constexpr int32_t BLOCK_INTERVAL_SEND_FILE = 10 * 1000; constexpr int32_t DEFAULT_USER_ID = 100; constexpr int32_t VALID_MOUNT_NETWORKID_LEN = 16; +constexpr DfsVersion ACL_VERSION = {6, 0, 1}; constexpr uint64_t INNER_COPY_LIMIT = 1024 * 1024 * 1024; } // namespace @@ -268,7 +269,9 @@ int32_t Daemon::CleanUp(const DistributedHardware::DmDeviceInfo &deviceInfo) } int32_t Daemon::ConnectionAndMount(const DistributedHardware::DmDeviceInfo &deviceInfo, - const std::string &networkId, uint32_t callingTokenId, sptr remoteReverseObj) + const std::string &networkId, + uint32_t callingTokenId, + sptr remoteReverseObj) { LOGI("ConnectionAndMount start"); int32_t ret = NO_ERROR; @@ -350,7 +353,7 @@ int32_t Daemon::CloseP2PConnectionEx(const std::string &networkId) auto deviceManager = DeviceManagerAgent::GetInstance(); auto callingTokenId = IPCSkeleton::GetCallingTokenID(); if (networkId.empty() || networkId.length() >= DM_MAX_DEVICE_ID_LEN) { - LOGE("Daemon::CloseP2PConnectionEx networkId length is invalid. len: %{public}zu", networkId.length()); + LOGE("Daemon::CloseP2PConnectionEx networkId length is invalid. len: %{public}zu", networkId.length()); return E_INVAL_ARG_NAPI; } std::string deviceId = deviceManager->GetDeviceIdByNetworkId(networkId); @@ -416,8 +419,8 @@ int32_t Daemon::RequestSendFile(const std::string &srcUri, return OHOS::FileManagement::E_ILLEGAL_URI; } auto requestSendFileBlock = std::make_shared>(BLOCK_INTERVAL_SEND_FILE, ERR_BAD_VALUE); - auto requestSendFileData = std::make_shared( - srcUri, dstPath, dstDeviceId, sessionName, requestSendFileBlock); + auto requestSendFileData = + std::make_shared(srcUri, dstPath, dstDeviceId, sessionName, requestSendFileBlock); auto msgEvent = AppExecFwk::InnerEvent::Get(DEAMON_EXECUTE_REQUEST_SEND_FILE, requestSendFileData, 0); { std::lock_guard lock(eventHandlerMutex_); @@ -437,8 +440,25 @@ int32_t Daemon::RequestSendFile(const std::string &srcUri, return ret; } -int32_t Daemon::InnerCopy(const std::string &srcUri, const std::string &dstUri, - const std::string &srcDeviceId, const sptr &listener, HmdfsInfo &info) +int32_t Daemon::RequestSendFileACL(const std::string &srcUri, + const std::string &dstPath, + const std::string &dstDeviceId, + const std::string &sessionName, + const AccountInfo &callerAccountInfo) +{ + LOGI("RequestSendFileACL begin dstDeviceId: %{public}s", Utils::GetAnonyString(dstDeviceId).c_str()); + if (!SoftBusPermissionCheck::CheckSinkPermission(callerAccountInfo)) { + LOGE("CheckSinkPermission failed"); + return ERR_ACL_FAILED; + } + return RequestSendFile(srcUri, dstPath, dstDeviceId, sessionName); +} + +int32_t Daemon::InnerCopy(const std::string &srcUri, + const std::string &dstUri, + const std::string &srcDeviceId, + const sptr &listener, + HmdfsInfo &info) { if (!FileSizeUtils::IsFilePathValid(FileSizeUtils::GetRealUri(srcUri)) || !FileSizeUtils::IsFilePathValid(FileSizeUtils::GetRealUri(dstUri))) { @@ -452,8 +472,8 @@ int32_t Daemon::InnerCopy(const std::string &srcUri, const std::string &dstUri, return ERR_BAD_VALUE; } OpenP2PConnection(deviceInfo); - auto ret = Storage::DistributedFile::RemoteFileCopyManager::GetInstance()->RemoteCopy(srcUri, dstUri, - listener, QueryActiveUserId(), info.copyPath); + auto ret = Storage::DistributedFile::RemoteFileCopyManager::GetInstance()->RemoteCopy( + srcUri, dstUri, listener, QueryActiveUserId(), info.copyPath); CloseP2PConnection(deviceInfo); LOGI("InnerCopy end, ret = %{public}d", ret); return ret; @@ -461,7 +481,7 @@ int32_t Daemon::InnerCopy(const std::string &srcUri, const std::string &dstUri, int32_t Daemon::PrepareSession(const std::string &srcUri, const std::string &dstUri, - const std::string &srcDeviceId, + const std::string &srcNetworkId, const sptr &listener, HmdfsInfo &info) { @@ -486,30 +506,30 @@ int32_t Daemon::PrepareSession(const std::string &srcUri, } DfsVersion remoteDfsVersion; - auto ret = DeviceProfileAdapter::GetInstance().GetDfsVersionFromNetworkId(srcDeviceId, remoteDfsVersion); + int32_t ret = DeviceProfileAdapter::GetInstance().GetDfsVersionFromNetworkId(srcNetworkId, remoteDfsVersion); LOGI("GetRemoteVersion: ret:%{public}d, version:%{public}s", ret, remoteDfsVersion.dump().c_str()); if ((ret == FileManagement::ERR_OK) && (remoteDfsVersion.majorVersionNum != 0) && fileSize < INNER_COPY_LIMIT) { - return InnerCopy(srcUri, dstUri, srcDeviceId, listenerCallback, info); + return InnerCopy(srcUri, dstUri, srcNetworkId, listenerCallback, info); } - return CopyBaseOnRPC(srcUri, dstUri, srcDeviceId, listenerCallback, info); + return CopyBaseOnRPC(srcUri, dstUri, srcNetworkId, listenerCallback, info); } int32_t Daemon::CopyBaseOnRPC(const std::string &srcUri, const std::string &dstUri, - const std::string &srcDeviceId, + const std::string &srcNetworkId, const sptr &listenerCallback, HmdfsInfo &info) { - auto daemon = GetRemoteSA(srcDeviceId); + auto daemon = GetRemoteSA(srcNetworkId); if (daemon == nullptr) { - LOGE("Daemon is nullptr"); + LOGE("GetRemoteSA is nullptr"); return E_SA_LOAD_FAILED; } std::string physicalPath; - auto ret = GetRealPath(srcUri, dstUri, physicalPath, info, daemon); + auto ret = GetRealPath(srcUri, dstUri, physicalPath, info, daemon, srcNetworkId); if (ret != E_OK) { LOGE("GetRealPath failed, ret = %{public}d", ret); return ret; @@ -520,8 +540,8 @@ int32_t Daemon::CopyBaseOnRPC(const std::string &srcUri, } auto prepareSessionBlock = std::make_shared>(BLOCK_INTERVAL_SEND_FILE, ERR_BAD_VALUE); - auto prepareSessionData = - std::make_shared(srcUri, physicalPath, info.sessionName, daemon, info, prepareSessionBlock); + auto prepareSessionData = std::make_shared(srcUri, physicalPath, info.sessionName, daemon, info, + prepareSessionBlock, srcNetworkId); auto msgEvent = AppExecFwk::InnerEvent::Get(DEAMON_EXECUTE_PREPARE_SESSION, prepareSessionData, 0); { std::lock_guard lock(eventHandlerMutex_); @@ -562,7 +582,8 @@ int32_t Daemon::GetRealPath(const std::string &srcUri, const std::string &dstUri, std::string &physicalPath, HmdfsInfo &info, - const sptr &daemon) + const sptr &daemon, + const std::string &srcNetworkId) { bool isSrcFile = false; bool isSrcDir = false; @@ -575,26 +596,53 @@ int32_t Daemon::GetRealPath(const std::string &srcUri, LOGE("Path is forbidden"); return OHOS::FileManagement::E_ILLEGAL_URI; } - auto ret = daemon->GetRemoteCopyInfo(srcUri, isSrcFile, isSrcDir); + + int32_t ret = E_OK; + if (!DeviceProfileAdapter::GetInstance().IsRemoteDfsVersionLowerThanGiven(srcNetworkId, ACL_VERSION)) { + LOGI("Version > 6.0.1 ,need ACL check"); + if (!SoftBusPermissionCheck::CheckSrcPermission(srcNetworkId)) { + LOGE("CheckSrcPermission failed"); + return ERR_ACL_FAILED; + } + + AccountInfo localAccountInfo; + if (!SoftBusPermissionCheck::GetLocalAccountInfo(localAccountInfo)) { + LOGE("GetLocalAccountInfo failed"); + return ERR_ACL_FAILED; + } + ret = daemon->GetRemoteCopyInfoACL(srcUri, isSrcFile, isSrcDir, localAccountInfo); + } else { + ret = daemon->GetRemoteCopyInfo(srcUri, isSrcFile, isSrcDir); + } + if (ret != E_OK) { LOGE("GetRemoteCopyInfo failed, ret = %{public}d", ret); RADAR_REPORT(RadarReporter::DFX_SET_DFS, RadarReporter::DFX_SET_BIZ_SCENE, RadarReporter::DFX_FAILED, - RadarReporter::BIZ_STATE, RadarReporter::DFX_END, RadarReporter::ERROR_CODE, - RadarReporter::GET_REMOTE_COPY_INFO_ERROR); + RadarReporter::BIZ_STATE, RadarReporter::DFX_END, RadarReporter::ERROR_CODE, + RadarReporter::GET_REMOTE_COPY_INFO_ERROR); return E_SOFTBUS_SESSION_FAILED; } + return HandleDestinationPathAndPermissions(dstUri, isSrcFile, info, physicalPath); +} + +int32_t Daemon::HandleDestinationPathAndPermissions(const std::string &dstUri, + bool isSrcFile, + HmdfsInfo &info, + std::string &physicalPath) +{ HapTokenInfo hapTokenInfo; int result = AccessTokenKit::GetHapTokenInfo(IPCSkeleton::GetCallingTokenID(), hapTokenInfo); if (result != Security::AccessToken::AccessTokenKitRet::RET_SUCCESS) { LOGE("GetHapTokenInfo failed, errCode = %{public}d", result); RADAR_REPORT(RadarReporter::DFX_SET_DFS, RadarReporter::DFX_SET_BIZ_SCENE, RadarReporter::DFX_FAILED, - RadarReporter::BIZ_STATE, RadarReporter::DFX_END, RadarReporter::ERROR_CODE, - RadarReporter::GET_HAP_TOKEN_INFO_ERROR, RadarReporter::PACKAGE_NAME, - RadarReporter::accessTokenKit + to_string(result)); + RadarReporter::BIZ_STATE, RadarReporter::DFX_END, RadarReporter::ERROR_CODE, + RadarReporter::GET_HAP_TOKEN_INFO_ERROR, RadarReporter::PACKAGE_NAME, + RadarReporter::accessTokenKit + std::to_string(result)); return E_GET_USER_ID; } - ret = SandboxHelper::GetPhysicalPath(dstUri, std::to_string(hapTokenInfo.userID), physicalPath); + + int32_t ret = SandboxHelper::GetPhysicalPath(dstUri, std::to_string(hapTokenInfo.userID), physicalPath); if (ret != E_OK) { LOGE("invalid uri, ret = %{public}d", ret); return E_GET_PHYSICAL_PATH_FAILED; @@ -602,11 +650,13 @@ int32_t Daemon::GetRealPath(const std::string &srcUri, LOGI("GetRealPath userId %{public}s", std::to_string(hapTokenInfo.userID).c_str()); info.dstPhysicalPath = physicalPath; + ret = CheckCopyRule(physicalPath, dstUri, hapTokenInfo, isSrcFile, info); if (ret != E_OK) { LOGE("CheckCopyRule failed, ret = %{public}d", ret); return E_GET_PHYSICAL_PATH_FAILED; } + return E_OK; } @@ -685,6 +735,19 @@ int32_t Daemon::GetRemoteCopyInfo(const std::string &srcUri, bool &isSrcFile, bo return E_OK; } +int32_t Daemon::GetRemoteCopyInfoACL(const std::string &srcUri, + bool &isSrcFile, + bool &srcIsDir, + const AccountInfo &callerAccountInfo) +{ + LOGI("GetRemoteCopyInfoACL begin."); + if (!SoftBusPermissionCheck::CheckSinkPermission(callerAccountInfo)) { + LOGE("CheckSinkPermission failed"); + return ERR_ACL_FAILED; + } + return GetRemoteCopyInfo(srcUri, isSrcFile, srcIsDir); +} + sptr Daemon::GetRemoteSA(const std::string &remoteDeviceId) { LOGI("GetRemoteSA begin, DeviceId: %{public}s", Utils::GetAnonyString(remoteDeviceId).c_str()); @@ -698,8 +761,8 @@ sptr Daemon::GetRemoteSA(const std::string &remoteDeviceId) if (object == nullptr) { LOGE("GetSystemAbility failed"); RADAR_REPORT(RadarReporter::DFX_SET_DFS, RadarReporter::DFX_SET_BIZ_SCENE, RadarReporter::DFX_FAILED, - RadarReporter::BIZ_STATE, RadarReporter::DFX_END, RadarReporter::ERROR_CODE, - RadarReporter::GET_SYSTEM_ABILITY_ERROR, RadarReporter::PACKAGE_NAME, RadarReporter::saMgr); + RadarReporter::BIZ_STATE, RadarReporter::DFX_END, RadarReporter::ERROR_CODE, + RadarReporter::GET_SYSTEM_ABILITY_ERROR, RadarReporter::PACKAGE_NAME, RadarReporter::saMgr); return nullptr; } auto daemon = iface_cast(object); @@ -714,8 +777,13 @@ sptr Daemon::GetRemoteSA(const std::string &remoteDeviceId) int32_t Daemon::Copy(const std::string &srcUri, const std::string &dstPath, const sptr &daemon, - const std::string &sessionName) + const std::string &sessionName, + const std::string &srcNetworkId) { + if (daemon == nullptr) { + LOGE("Daemon::Copy daemon is nullptr"); + return E_INVAL_ARG_NAPI; + } if (!FileSizeUtils::IsFilePathValid(FileSizeUtils::GetRealUri(srcUri)) || !FileSizeUtils::IsFilePathValid(FileSizeUtils::GetRealUri(dstPath))) { LOGE("Path is forbidden"); @@ -728,17 +796,32 @@ int32_t Daemon::Copy(const std::string &srcUri, LOGE("GetLocalDeviceInfo failed, errCode = %{public}d", errCode); return E_GET_DEVICE_ID; } - if (daemon == nullptr) { - LOGE("Daemon::Copy daemon is nullptr"); - return E_INVAL_ARG_NAPI; - } LOGI("Copy localDeviceInfo.networkId: %{public}s", Utils::GetAnonyString(localDeviceInfo.networkId).c_str()); - auto ret = daemon->RequestSendFile(srcUri, dstPath, localDeviceInfo.networkId, sessionName); + + int32_t ret = E_OK; + if (!DeviceProfileAdapter::GetInstance().IsRemoteDfsVersionLowerThanGiven(srcNetworkId, ACL_VERSION)) { + LOGI("Version > 6.0.1 ,need ACL check"); + if (!SoftBusPermissionCheck::CheckSrcPermission(srcNetworkId)) { + LOGE("CheckSrcPermission failed"); + return ERR_ACL_FAILED; + } + + AccountInfo localAccountInfo; + if (!SoftBusPermissionCheck::GetLocalAccountInfo(localAccountInfo)) { + LOGE("GetLocalAccountInfo failed"); + return ERR_ACL_FAILED; + } + + ret = daemon->RequestSendFileACL(srcUri, dstPath, localDeviceInfo.networkId, sessionName, localAccountInfo); + } else { + ret = daemon->RequestSendFile(srcUri, dstPath, localDeviceInfo.networkId, sessionName); + } + if (ret != E_OK) { LOGE("RequestSendFile failed, ret = %{public}d", ret); RADAR_REPORT(RadarReporter::DFX_SET_DFS, RadarReporter::DFX_SET_BIZ_SCENE, RadarReporter::DFX_FAILED, - RadarReporter::BIZ_STATE, RadarReporter::DFX_END, RadarReporter::ERROR_CODE, - RadarReporter::REQUEST_SEND_FILE_ERROR, RadarReporter::PACKAGE_NAME, ret); + RadarReporter::BIZ_STATE, RadarReporter::DFX_END, RadarReporter::ERROR_CODE, + RadarReporter::REQUEST_SEND_FILE_ERROR, RadarReporter::PACKAGE_NAME, ret); return E_SA_LOAD_FAILED; } return E_OK; @@ -820,9 +903,7 @@ void Daemon::DfsListenerDeathRecipient::OnRemoteDied(const wptr & return; } -int32_t Daemon::PushAsset(int32_t userId, - const sptr &assetObj, - const sptr &sendCallback) +int32_t Daemon::PushAsset(int32_t userId, const sptr &assetObj, const sptr &sendCallback) { LOGI("Daemon::PushAsset begin."); if (assetObj == nullptr || sendCallback == nullptr) { @@ -911,7 +992,7 @@ int32_t Daemon::SendDfsDelayTask(const std::string &networkId) auto executeFunc = [this, networkId] { DisconnectDevice(networkId); }; bool isSucc = eventHandler_->PostTask(executeFunc, networkId, DEFAULT_DELAY_INTERVAL, - AppExecFwk::EventHandler::Priority::IMMEDIATE); + AppExecFwk::EventHandler::Priority::IMMEDIATE); if (!isSucc) { LOGE("Daemon event handler post delay disconnect device event fail."); return E_EVENT_HANDLER; @@ -945,10 +1026,10 @@ void Daemon::DisconnectDevice(const std::string networkId) LOGI("Daemon::DisconnectDevice result %{public}d", ret); } -int32_t Daemon::GetDfsUrisDirFromLocal(const std::vector &uriList, - const int32_t userId, - std::unordered_map &uriToDfsUriMaps) +int32_t Daemon::GetDfsUrisDirFromLocal( + const std::vector &uriList, + const int32_t userId, + std::unordered_map &uriToDfsUriMaps) { LOGI("Daemon::GetDfsUrisDirFromLocal start"); auto callingUid = IPCSkeleton::GetCallingUid(); diff --git a/services/distributedfiledaemon/src/ipc/daemon_execute.cpp b/services/distributedfiledaemon/src/ipc/daemon_execute.cpp index 7f9b6774b..83e16f443 100644 --- a/services/distributedfiledaemon/src/ipc/daemon_execute.cpp +++ b/services/distributedfiledaemon/src/ipc/daemon_execute.cpp @@ -211,25 +211,27 @@ void DaemonExecute::ExecutePrepareSession(const AppExecFwk::InnerEvent::Pointer return; } - auto prepareSessionBlock = prepareSessionData->prepareSessionBlock_; + auto prepareSessionBlock = prepareSessionData->prepareSessionBlock_; if (prepareSessionBlock == nullptr) { LOGE("prepareSessionBlock is nullptr."); return; } std::string srcUri = prepareSessionData->srcUri_; - std::string physicalPath = prepareSessionData->physicalPath_; - std::string sessionName = prepareSessionData->sessionName_; - sptr daemon = prepareSessionData->daemon_; + std::string physicalPath = prepareSessionData->physicalPath_; + std::string sessionName = prepareSessionData->sessionName_; + sptr daemon = prepareSessionData->daemon_; HmdfsInfo &info = prepareSessionData->info_; + std::string srcNetworkId = prepareSessionData->srcNetworkId_; - prepareSessionBlock->SetValue(PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info)); + prepareSessionBlock->SetValue(PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info, srcNetworkId)); } int32_t DaemonExecute::PrepareSessionInner(const std::string &srcUri, std::string &physicalPath, const std::string &sessionName, const sptr &daemon, - HmdfsInfo &info) + HmdfsInfo &info, + const std::string &srcNetworkId) { LOGI("PrepareSessionInner begin."); auto socketId = SoftBusHandler::GetInstance().CreateSessionServer(IDaemon::SERVICE_NAME, sessionName, @@ -243,7 +245,7 @@ int32_t DaemonExecute::PrepareSessionInner(const std::string &srcUri, LOGI("authority is media or docs"); physicalPath = "??" + info.dstPhysicalPath; } - auto ret = Daemon::Copy(srcUri, physicalPath, daemon, sessionName); + auto ret = Daemon::Copy(srcUri, physicalPath, daemon, sessionName, srcNetworkId); if (ret != E_OK) { LOGE("Remote copy failed,ret = %{public}d", ret); SoftBusHandler::GetInstance().CloseSession(socketId, sessionName); diff --git a/services/distributedfiledaemon/src/ipc/daemon_stub.cpp b/services/distributedfiledaemon/src/ipc/daemon_stub.cpp index acf73d0a5..716194283 100644 --- a/services/distributedfiledaemon/src/ipc/daemon_stub.cpp +++ b/services/distributedfiledaemon/src/ipc/daemon_stub.cpp @@ -21,8 +21,9 @@ #include "dm_device_info.h" #include "ipc/distributed_file_daemon_ipc_interface_code.h" #include "ipc_skeleton.h" -#include "utils_log.h" #include "securec.h" +#include "utils_log.h" +#include namespace OHOS { namespace Storage { @@ -65,6 +66,12 @@ DaemonStub::DaemonStub() &DaemonStub::HandlePushAsset; opToInterfaceMap_[static_cast(DistributedFileDaemonInterfaceCode::GET_DFS_URI_IS_DIR_FROM_LOCAL)] = &DaemonStub::HandleGetDfsUrisDirFromLocal; + opToInterfaceMap_[static_cast( + DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_GET_REMOTE_COPY_INFO_BASE_ACL)] = + &DaemonStub::HandleGetRemoteCopyInfoACL; + opToInterfaceMap_[static_cast( + DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_REQUEST_SEND_FILE_BASE_ACL)] = + &DaemonStub::HandleRequestSendFileACL; opToInterfaceMap_[static_cast( DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_GET_DFS_SWITCH_STATUS)] = &DaemonStub::HandleGetDfsSwitchStatus; @@ -81,10 +88,15 @@ int32_t DaemonStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageP if (data.ReadInterfaceToken() != GetDescriptor()) { return DFS_DAEMON_DESCRIPTOR_IS_EMPTY; } - if (code != static_cast(DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_REQUEST_SEND_FILE) && - code != static_cast(DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_GET_REMOTE_COPY_INFO) && - !IPCSkeleton::IsLocalCalling()) { - LOGE("function is only allowed to be called locally."); + + static const std::unordered_set remoteAllowedCodes = { + static_cast(DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_REQUEST_SEND_FILE), + static_cast(DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_GET_REMOTE_COPY_INFO), + static_cast(DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_GET_REMOTE_COPY_INFO_BASE_ACL), + static_cast(DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_REQUEST_SEND_FILE_BASE_ACL)}; + + if (remoteAllowedCodes.find(code) == remoteAllowedCodes.end() && !IPCSkeleton::IsLocalCalling()) { + LOGE("Function is only allowed to be called locally, code: %{public}u", code); return E_ALLOW_LOCAL_CALL_ONLY; } auto iter = opToInterfaceMap_.find(code); @@ -276,6 +288,48 @@ int32_t DaemonStub::HandleRequestSendFile(MessageParcel &data, MessageParcel &re return res; } +int32_t DaemonStub::HandleRequestSendFileACL(MessageParcel &data, MessageParcel &reply) +{ + LOGI("Begin HandleRequestSendFileACL"); + std::string srcUri; + if (!data.ReadString(srcUri)) { + LOGE("read srcUri failed"); + return E_IPC_READ_FAILED; + } + std::string dstPath; + if (!data.ReadString(dstPath)) { + LOGE("read dstPath failed"); + return E_IPC_READ_FAILED; + } + std::string dstDeviceId; + if (!data.ReadString(dstDeviceId)) { + LOGE("read remoteDeviceId failed"); + return E_IPC_READ_FAILED; + } + std::string sessionName; + if (!data.ReadString(sessionName)) { + LOGE("read sessionName failed"); + return E_IPC_READ_FAILED; + } + AccountInfo callerAccountInfo; + if (!data.ReadInt32(callerAccountInfo.userId_)) { + LOGE("read userId failed"); + return E_IPC_READ_FAILED; + } + if (!data.ReadString(callerAccountInfo.accountId_)) { + LOGE("read accountId failed"); + return E_IPC_READ_FAILED; + } + if (!data.ReadString(callerAccountInfo.networkId_)) { + LOGE("read networkId failed"); + return E_IPC_READ_FAILED; + } + auto res = RequestSendFileACL(srcUri, dstPath, dstDeviceId, sessionName, callerAccountInfo); + reply.WriteInt32(res); + LOGD("End HandleRequestSendFileACL, ret = %{public}d.", res); + return res; +} + int32_t DaemonStub::HandleGetRemoteCopyInfo(MessageParcel &data, MessageParcel &reply) { LOGI("Begin HandleGetRemoteCopyInfo"); @@ -307,6 +361,46 @@ int32_t DaemonStub::HandleGetRemoteCopyInfo(MessageParcel &data, MessageParcel & return res; } +int32_t DaemonStub::HandleGetRemoteCopyInfoACL(MessageParcel &data, MessageParcel &reply) +{ + LOGI("Begin HandleGetRemoteCopyInfoACL"); + std::string srcUri; + AccountInfo callerAccountInfo; + if (!data.ReadString(srcUri)) { + LOGE("read srcUri failed"); + return E_IPC_READ_FAILED; + } + if (!data.ReadInt32(callerAccountInfo.userId_)) { + LOGE("read userId failed"); + return E_IPC_READ_FAILED; + } + if (!data.ReadString(callerAccountInfo.accountId_)) { + LOGE("read accountId failed"); + return E_IPC_READ_FAILED; + } + if (!data.ReadString(callerAccountInfo.networkId_)) { + LOGE("read networkId failed"); + return E_IPC_READ_FAILED; + } + bool isFile = false; + bool isDir = false; + auto res = GetRemoteCopyInfoACL(srcUri, isFile, isDir, callerAccountInfo); + if (!reply.WriteBool(isFile)) { + LOGE("Write isFile failed"); + return E_IPC_WRITE_FAILED; + } + if (!reply.WriteBool(isDir)) { + LOGE("Write isDir failed"); + return E_IPC_WRITE_FAILED; + } + if (!reply.WriteInt32(res)) { + LOGE("Write res failed"); + return E_IPC_WRITE_FAILED; + } + LOGD("End GetRemoteCopyInfoACL, ret = %{public}d.", res); + return res; +} + int32_t DaemonStub::HandleCancelCopyTask(MessageParcel &data, MessageParcel &reply) { LOGI("Begin HandleCancelCopyTask"); @@ -555,6 +649,6 @@ int32_t DaemonStub::HandleGetConnectedDeviceList(MessageParcel &data, MessagePar } return E_OK; } -} // namespace DistributedFile -} // namespace Storage -} // namespace OHOS \ No newline at end of file +} // namespace DistributedFile +} // namespace Storage +} // namespace OHOS \ No newline at end of file diff --git a/services/distributedfiledaemon/src/multiuser/os_account_observer.cpp b/services/distributedfiledaemon/src/multiuser/os_account_observer.cpp index f499eae53..5b4dad3cf 100644 --- a/services/distributedfiledaemon/src/multiuser/os_account_observer.cpp +++ b/services/distributedfiledaemon/src/multiuser/os_account_observer.cpp @@ -28,7 +28,6 @@ namespace DistributedFile { using namespace std; namespace { static const std::string SAME_ACCOUNT = "account"; -const int32_t INVALID_USER_ID = -1; } // namespace OsAccountObserver::OsAccountObserver(const EventFwk::CommonEventSubscribeInfo &subscribeInfo) diff --git a/services/distributedfiledaemon/test/mock/include/daemon_mock.h b/services/distributedfiledaemon/test/mock/include/daemon_mock.h index 282afdd96..bc0c320a3 100644 --- a/services/distributedfiledaemon/test/mock/include/daemon_mock.h +++ b/services/distributedfiledaemon/test/mock/include/daemon_mock.h @@ -1,23 +1,23 @@ /* -* Copyright (c) 2024 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. + * Copyright (c) 2024 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. */ #ifndef FILEMANAGEMENT_DFS_SERVICE_DAEMON_MOCK_H #define FILEMANAGEMENT_DFS_SERVICE_DAEMON_MOCK_H -#include #include "daemon.h" +#include namespace OHOS { namespace Storage { @@ -33,6 +33,12 @@ public: const std::string &dstPath, const std::string &remoteDeviceId, const std::string &sessionName)); + MOCK_METHOD5(RequestSendFileACL, + int32_t(const std::string &srcUri, + const std::string &dstPath, + const std::string &remoteDeviceId, + const std::string &sessionName, + const AccountInfo &callerAccountInfo)); MOCK_METHOD5(PrepareSession, int32_t(const std::string &srcUri, const std::string &dstUri, @@ -42,11 +48,10 @@ public: MOCK_METHOD1(CancelCopyTask, int32_t(const std::string &sessionName)); MOCK_METHOD2(CancelCopyTask, int32_t(const std::string &srcUri, const std::string &dstUri)); MOCK_METHOD3(GetRemoteCopyInfo, int32_t(const std::string &srcUri, bool &isFile, bool &isDir)); - + MOCK_METHOD4(GetRemoteCopyInfoACL, + int32_t(const std::string &srcUri, bool &isFile, bool &isDir, const AccountInfo &callerAccountInfo)); MOCK_METHOD3(PushAsset, - int32_t(int32_t userId, - const sptr &assetObj, - const sptr &sendCallback)); + int32_t(int32_t userId, const sptr &assetObj, const sptr &sendCallback)); MOCK_METHOD1(RegisterAssetCallback, int32_t(const sptr &recvCallback)); MOCK_METHOD1(UnRegisterAssetCallback, int32_t(const sptr &recvCallback)); MOCK_METHOD3(GetDfsUrisDirFromLocal, int32_t(const std::vector &uriList, diff --git a/services/distributedfiledaemon/test/unittest/BUILD.gn b/services/distributedfiledaemon/test/unittest/BUILD.gn index f6c8f2bf3..173baf606 100644 --- a/services/distributedfiledaemon/test/unittest/BUILD.gn +++ b/services/distributedfiledaemon/test/unittest/BUILD.gn @@ -55,6 +55,7 @@ ohos_unittest("device_info_test") { "app_file_service:remote_file_share_native", "c_utils:utils", "device_manager:devicemanagersdk", + "dsoftbus:softbus_client", "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", diff --git a/services/distributedfiledaemon/test/unittest/device/device_profile_adapter/device_profile_adapter_test.cpp b/services/distributedfiledaemon/test/unittest/device/device_profile_adapter/device_profile_adapter_test.cpp index 114485766..1274f1902 100644 --- a/services/distributedfiledaemon/test/unittest/device/device_profile_adapter/device_profile_adapter_test.cpp +++ b/services/distributedfiledaemon/test/unittest/device/device_profile_adapter/device_profile_adapter_test.cpp @@ -102,53 +102,53 @@ void DeviceProfileAdapterTest::TearDown(void) } /** - * @tc.name: DeviceProfileAdapterTest_IsRemoteDfsVersionLower_001 + * @tc.name: DeviceProfileAdapterTest_IsRemoteDfsVersionLowerThanLocal_001 * @tc.desc: verify PublishSA. * @tc.type: FUNC * @tc.require: I7TDJK */ -HWTEST_F(DeviceProfileAdapterTest, DeviceProfileAdapterTest_IsRemoteDfsVersionLower_001, TestSize.Level1) +HWTEST_F(DeviceProfileAdapterTest, DeviceProfileAdapterTest_IsRemoteDfsVersionLowerThanLocal_001, TestSize.Level1) { - GTEST_LOG_(INFO) << "DeviceProfileAdapterTest_IsRemoteDfsVersionLower_001 begin"; + GTEST_LOG_(INFO) << "DeviceProfileAdapterTest_IsRemoteDfsVersionLowerThanLocal_001 begin"; g_GetLocalDeviceInfo = ERR_BAD_VALUE; - auto ret = DeviceProfileAdapter::GetInstance().IsRemoteDfsVersionLower(""); + auto ret = DeviceProfileAdapter::GetInstance().IsRemoteDfsVersionLowerThanLocal(""); EXPECT_EQ(ret, false); g_GetLocalDeviceInfo = FileManagement::ERR_OK; g_GetUdidByNetworkId = FileManagement::ERR_OK; g_GetCharacteristicProfile = FileManagement::ERR_OK; - ret = DeviceProfileAdapter::GetInstance().IsRemoteDfsVersionLower(""); + ret = DeviceProfileAdapter::GetInstance().IsRemoteDfsVersionLowerThanLocal(""); EXPECT_EQ(ret, false); - GTEST_LOG_(INFO) << "DeviceProfileAdapterTest_IsRemoteDfsVersionLower_001 end"; + GTEST_LOG_(INFO) << "DeviceProfileAdapterTest_IsRemoteDfsVersionLowerThanLocal_001 end"; } /** - * @tc.name: DeviceProfileAdapterTest_IsRemoteDfsVersionLower_002 + * @tc.name: DeviceProfileAdapterTest_IsRemoteDfsVersionLowerThanGiven_002 * @tc.desc: verify PublishSA. * @tc.type: FUNC * @tc.require: I7TDJK */ -HWTEST_F(DeviceProfileAdapterTest, DeviceProfileAdapterTest_IsRemoteDfsVersionLower_002, TestSize.Level1) +HWTEST_F(DeviceProfileAdapterTest, DeviceProfileAdapterTest_IsRemoteDfsVersionLowerThanGiven_002, TestSize.Level1) { - GTEST_LOG_(INFO) << "DeviceProfileAdapterTest_IsRemoteDfsVersionLower_002 begin"; + GTEST_LOG_(INFO) << "DeviceProfileAdapterTest_IsRemoteDfsVersionLowerThanGiven_002 begin"; - auto ret = DeviceProfileAdapter::GetInstance().IsRemoteDfsVersionLower("", {0, 0, 0}); + auto ret = DeviceProfileAdapter::GetInstance().IsRemoteDfsVersionLowerThanGiven("", {0, 0, 0}); EXPECT_EQ(ret, false); g_GetUdidByNetworkId = -1; std::string remoteNetworkId = "remoteTest"; - ret = DeviceProfileAdapter::GetInstance().IsRemoteDfsVersionLower(remoteNetworkId, {0, 0, 0}); + ret = DeviceProfileAdapter::GetInstance().IsRemoteDfsVersionLowerThanGiven(remoteNetworkId, {0, 0, 0}); EXPECT_EQ(ret, false); g_GetUdidByNetworkId = FileManagement::ERR_OK; g_GetCharacteristicProfile = FileManagement::ERR_OK; DfsVersion thresholdDfsVersion = {99, 99, 99}; - ret = DeviceProfileAdapter::GetInstance().IsRemoteDfsVersionLower(remoteNetworkId, thresholdDfsVersion); + ret = DeviceProfileAdapter::GetInstance().IsRemoteDfsVersionLowerThanGiven(remoteNetworkId, thresholdDfsVersion); EXPECT_EQ(ret, true); - GTEST_LOG_(INFO) << "DeviceProfileAdapterTest_IsRemoteDfsVersionLower_002 end"; + GTEST_LOG_(INFO) << "DeviceProfileAdapterTest_IsRemoteDfsVersionLowerThanGiven_002 end"; } /** diff --git a/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp b/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp index 85fd35d67..b63eb5925 100644 --- a/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp +++ b/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp @@ -64,6 +64,10 @@ bool g_subscribeCommonEvent; bool g_unSubscribeCommonEvent; int32_t g_getDfsVersionFromNetworkId = 0; OHOS::Storage::DistributedFile::DfsVersion g_dfsVersion; +bool g_isRemoteDfsVersionLowerThanGiven = false; +bool g_checkSrcPermission = true; +bool g_getLocalAccountInfo = true; +bool g_checkSinkPermission = true; } // namespace namespace { @@ -94,6 +98,28 @@ int32_t DeviceProfileAdapter::GetDfsVersionFromNetworkId(const std::string &netw dfsVersion = g_dfsVersion; return g_getDfsVersionFromNetworkId; } + +bool DeviceProfileAdapter::IsRemoteDfsVersionLowerThanGiven(const std::string &remoteNetworkId, + const DfsVersion &givenDfsVersion, + VersionPackageName packageName) +{ + return g_isRemoteDfsVersionLowerThanGiven; +} + +bool SoftBusPermissionCheck::CheckSrcPermission(const std::string &sinkNetworkId) +{ + return g_checkSrcPermission; +} + +bool SoftBusPermissionCheck::GetLocalAccountInfo(AccountInfo &localAccountInfo) +{ + return g_getLocalAccountInfo; +} + +bool SoftBusPermissionCheck::CheckSinkPermission(const AccountInfo &callerAccountInfo) +{ + return g_checkSinkPermission; +} } // namespace OHOS::Storage::DistributedFile namespace OHOS::FileManagement { @@ -252,10 +278,6 @@ void DaemonTest::SetUpTestCase(void) ISoftBusHandlerAssetMock::iSoftBusHandlerAssetMock_ = softBusHandlerAssetMock_; softBusHandlerMock_ = std::make_shared(); ISoftBusHandlerMock::iSoftBusHandlerMock_ = softBusHandlerMock_; - deviceManagerImplMock_ = std::make_shared(); - DfsDeviceManagerImpl::dfsDeviceManagerImpl = deviceManagerImplMock_; - channelManagerMock_ = std::make_shared(); - IChannelManagerMock::iChannelManagerMock = channelManagerMock_; std::string path = "/mnt/hmdfs/100/account/device_view/local/data/com.example.app"; if (!std::filesystem::exists(path)) { @@ -268,8 +290,6 @@ void DaemonTest::SetUpTestCase(void) } std::ofstream file(path + "/docs/1.txt"); std::ofstream file1(path + "/docs/1@.txt"); - g_getDfsVersionFromNetworkId = 0; - g_dfsVersion = {0, 0, 0}; } void DaemonTest::TearDownTestCase(void) @@ -287,12 +307,6 @@ void DaemonTest::TearDownTestCase(void) softBusHandlerAssetMock_ = nullptr; ISoftBusHandlerMock::iSoftBusHandlerMock_ = nullptr; softBusHandlerMock_ = nullptr; - deviceManagerImplMock_ = nullptr; - DfsDeviceManagerImpl::dfsDeviceManagerImpl = nullptr; - channelManagerMock_ = nullptr; - IChannelManagerMock::iChannelManagerMock = nullptr; - deviceManagerImplMock_ = nullptr; - DfsDeviceManagerImpl::dfsDeviceManagerImpl = nullptr; std::string path = "/mnt/hmdfs/100/account/device_view/local/data/com.example.app"; if (std::filesystem::exists(path)) { @@ -307,12 +321,27 @@ void DaemonTest::SetUp(void) bool runOnCreate = true; daemon_ = new (std::nothrow) Daemon(saID, runOnCreate); ASSERT_TRUE(daemon_ != nullptr) << "daemon_ assert failed!"; + deviceManagerImplMock_ = std::make_shared(); + DfsDeviceManagerImpl::dfsDeviceManagerImpl = deviceManagerImplMock_; + channelManagerMock_ = std::make_shared(); + IChannelManagerMock::iChannelManagerMock = channelManagerMock_; + + g_getDfsVersionFromNetworkId = 0; + g_dfsVersion = {0, 0, 0}; + g_isRemoteDfsVersionLowerThanGiven = false; + g_checkSrcPermission = true; + g_getLocalAccountInfo = true; + g_checkSinkPermission = true; } void DaemonTest::TearDown(void) { GTEST_LOG_(INFO) << "TearDown"; daemon_ = nullptr; + deviceManagerImplMock_ = nullptr; + DfsDeviceManagerImpl::dfsDeviceManagerImpl = nullptr; + channelManagerMock_ = nullptr; + IChannelManagerMock::iChannelManagerMock = nullptr; } /** @@ -841,39 +870,52 @@ HWTEST_F(DaemonTest, DaemonTest_GetRealPath_001, TestSize.Level1) ASSERT_NE(daemon_, nullptr); std::string physicalPath; HmdfsInfo info; - EXPECT_EQ(daemon_->GetRealPath("", "", physicalPath, info, nullptr), E_INVAL_ARG_NAPI); + EXPECT_EQ(daemon_->GetRealPath("", "", physicalPath, info, nullptr, "networkId"), E_INVAL_ARG_NAPI); sptr daemon = new (std::nothrow) DaemonMock(); ASSERT_TRUE(daemon != nullptr) << "daemon assert failed!"; - EXPECT_EQ(daemon_->GetRealPath("../srcUri", "", physicalPath, info, daemon), E_ILLEGAL_URI); + EXPECT_EQ(daemon_->GetRealPath("../srcUri", "", physicalPath, info, daemon, "networkId"), E_ILLEGAL_URI); + + EXPECT_EQ(daemon_->GetRealPath("", "../dstUri", physicalPath, info, daemon, "networkId"), E_ILLEGAL_URI); + + g_checkSrcPermission = false; + EXPECT_EQ(daemon_->GetRealPath("", "", physicalPath, info, daemon, "networkId"), ERR_ACL_FAILED); - EXPECT_EQ(daemon_->GetRealPath("", "../dstUri", physicalPath, info, daemon), E_ILLEGAL_URI); + g_checkSrcPermission = true; + g_getLocalAccountInfo = false; + EXPECT_EQ(daemon_->GetRealPath("", "", physicalPath, info, daemon, "networkId"), ERR_ACL_FAILED); + g_checkSrcPermission = true; + g_getLocalAccountInfo = true; + EXPECT_CALL(*daemon, GetRemoteCopyInfoACL(_, _, _, _)).WillOnce(Return(ERR_BAD_VALUE)); + EXPECT_EQ(daemon_->GetRealPath("", "", physicalPath, info, daemon, "networkId"), E_SOFTBUS_SESSION_FAILED); + + g_isRemoteDfsVersionLowerThanGiven = true; EXPECT_CALL(*daemon, GetRemoteCopyInfo(_, _, _)).WillOnce(Return(ERR_BAD_VALUE)); - EXPECT_EQ(daemon_->GetRealPath("", "", physicalPath, info, daemon), E_SOFTBUS_SESSION_FAILED); + EXPECT_EQ(daemon_->GetRealPath("", "", physicalPath, info, daemon, "networkId"), E_SOFTBUS_SESSION_FAILED); g_getHapTokenInfo = ERR_BAD_VALUE; EXPECT_CALL(*daemon, GetRemoteCopyInfo(_, _, _)).WillOnce(Return(E_OK)); - EXPECT_EQ(daemon_->GetRealPath("", "", physicalPath, info, daemon), E_GET_USER_ID); + EXPECT_EQ(daemon_->GetRealPath("", "", physicalPath, info, daemon, "networkId"), E_GET_USER_ID); g_getHapTokenInfo = Security::AccessToken::AccessTokenKitRet::RET_SUCCESS; g_getPhysicalPath = ERR_BAD_VALUE; EXPECT_CALL(*daemon, GetRemoteCopyInfo(_, _, _)).WillOnce(Return(E_OK)); - EXPECT_EQ(daemon_->GetRealPath("", "", physicalPath, info, daemon), E_GET_PHYSICAL_PATH_FAILED); + EXPECT_EQ(daemon_->GetRealPath("", "", physicalPath, info, daemon, "networkId"), E_GET_PHYSICAL_PATH_FAILED); g_getPhysicalPath = E_OK; g_checkValidPath = false; info.dirExistFlag = false; EXPECT_CALL(*daemon, GetRemoteCopyInfo(_, _, _)).WillOnce(Return(E_OK)); - EXPECT_EQ(daemon_->GetRealPath("", "", physicalPath, info, daemon), E_GET_PHYSICAL_PATH_FAILED); + EXPECT_EQ(daemon_->GetRealPath("", "", physicalPath, info, daemon, "networkId"), E_GET_PHYSICAL_PATH_FAILED); g_checkValidPath = true; g_physicalPath = "test@test/test"; info.dirExistFlag = true; std::string dstUri = "file://com.example.app/data/storage/el2/distributedfiles/images/1.png"; EXPECT_CALL(*daemon, GetRemoteCopyInfo(_, _, _)).WillOnce(Return(E_OK)); - EXPECT_EQ(daemon_->GetRealPath("", "", physicalPath, info, daemon), E_OK); + EXPECT_EQ(daemon_->GetRealPath("", "", physicalPath, info, daemon, "networkId"), E_OK); GTEST_LOG_(INFO) << "DaemonTest_GetRealPath_001 end"; } @@ -1079,40 +1121,50 @@ HWTEST_F(DaemonTest, DaemonTest_GetRemoteSA_001, TestSize.Level1) HWTEST_F(DaemonTest, DaemonTest_Copy_001, TestSize.Level1) { GTEST_LOG_(INFO) << "DaemonTest_Copy_001 begin"; - ASSERT_NE(daemon_, nullptr); - EXPECT_CALL(*deviceManagerImplMock_, GetLocalDeviceInfo(_, _)) - .WillOnce(Return(ERR_BAD_VALUE)); - EXPECT_EQ(daemon_->Copy("", "", nullptr, ""), E_GET_DEVICE_ID); - EXPECT_CALL(*deviceManagerImplMock_, GetLocalDeviceInfo(_, _)) - .WillOnce(Return(E_OK)); - EXPECT_EQ(daemon_->Copy("", "", nullptr, ""), E_INVAL_ARG_NAPI); + EXPECT_EQ(daemon_->Copy("", "", nullptr, "", "networkId"), E_INVAL_ARG_NAPI); - EXPECT_CALL(*deviceManagerImplMock_, GetLocalDeviceInfo(_, _)) - .WillOnce(Return(E_OK)); sptr daemon = new (std::nothrow) DaemonMock(); ASSERT_TRUE(daemon != nullptr) << "daemon assert failed!"; - EXPECT_CALL(*daemon, RequestSendFile(_, _, _, _)).WillOnce(Return(ERR_BAD_VALUE)); - EXPECT_EQ(daemon_->Copy("", "", daemon, ""), E_SA_LOAD_FAILED); - - EXPECT_CALL(*deviceManagerImplMock_, GetLocalDeviceInfo(_, _)) - .WillOnce(Return(E_OK)); - EXPECT_CALL(*daemon, RequestSendFile(_, _, _, _)).WillOnce(Return(E_OK)); - EXPECT_EQ(daemon_->Copy("", "", daemon, ""), E_OK); string srcUri = "file://docs/storage/media/100/local/files/Docs/../A/1.txt"; string destPath = "/storage/media/100/local/files/Docs/aa1/"; - EXPECT_EQ(daemon_->Copy(srcUri, destPath, daemon, ""), E_INVAL_ARG); + EXPECT_EQ(daemon_->Copy(srcUri, destPath, daemon, "", "networkId"), E_INVAL_ARG); srcUri = "file://docs/storage/media/100/local/files/Docs/../A/1.txt?networkid=123456"; - EXPECT_EQ(daemon_->Copy(srcUri, destPath, daemon, ""), E_INVAL_ARG); + EXPECT_EQ(daemon_->Copy(srcUri, destPath, daemon, "", "networkId"), E_INVAL_ARG); srcUri = "file://docs/storage/media/100/local/files/Docs/1.txt"; destPath = "/storage/media/100/local/files/Docs/../aa1/"; - EXPECT_EQ(daemon_->Copy(srcUri, destPath, daemon, ""), E_INVAL_ARG); + EXPECT_EQ(daemon_->Copy(srcUri, destPath, daemon, "", "networkId"), E_INVAL_ARG); destPath = "/storage/media/100/local/files/Docs/../aa1/?networkid=123456"; - EXPECT_EQ(daemon_->Copy(srcUri, destPath, daemon, ""), E_INVAL_ARG); + EXPECT_EQ(daemon_->Copy(srcUri, destPath, daemon, "", "networkId"), E_INVAL_ARG); + + EXPECT_CALL(*deviceManagerImplMock_, GetLocalDeviceInfo(_, _)).WillOnce(Return(ERR_BAD_VALUE)); + EXPECT_EQ(daemon_->Copy("", "", daemon, "", "networkId"), E_GET_DEVICE_ID); + + EXPECT_CALL(*deviceManagerImplMock_, GetLocalDeviceInfo(_, _)).WillRepeatedly(Return(E_OK)); + g_checkSrcPermission = false; + EXPECT_EQ(daemon_->Copy("", "", daemon, "", "networkId"), ERR_ACL_FAILED); + + g_checkSrcPermission = true; + g_getLocalAccountInfo = false; + EXPECT_EQ(daemon_->Copy("", "", daemon, "", "networkId"), ERR_ACL_FAILED); + + g_checkSrcPermission = true; + g_getLocalAccountInfo = true; + EXPECT_CALL(*daemon, RequestSendFileACL(_, _, _, _, _)).WillOnce(Return(ERR_BAD_VALUE)); + EXPECT_EQ(daemon_->Copy("", "", daemon, "", "networkId"), E_SA_LOAD_FAILED); + + g_isRemoteDfsVersionLowerThanGiven = true; + EXPECT_CALL(*daemon, RequestSendFile(_, _, _, _)).WillOnce(Return(ERR_BAD_VALUE)); + EXPECT_EQ(daemon_->Copy("", "", daemon, "", "networkId"), E_SA_LOAD_FAILED); + + EXPECT_CALL(*deviceManagerImplMock_, GetLocalDeviceInfo(_, _)).WillOnce(Return(E_OK)); + EXPECT_CALL(*daemon, RequestSendFile(_, _, _, _)).WillOnce(Return(E_OK)); + EXPECT_EQ(daemon_->Copy("", "", daemon, "", "networkId"), E_OK); + GTEST_LOG_(INFO) << "DaemonTest_Copy_001 end"; } @@ -1480,5 +1532,48 @@ HWTEST_F(DaemonTest, DaemonTest_NotifyRemoteCancelNotification_001, TestSize.Lev GTEST_LOG_(INFO) << "DaemonTest_NotifyRemoteCancelNotification_001"; } + +/** + * @tc.name: DaemonTest_RequestSendFileACL_001 + * @tc.desc: verify RequestSendFileACL. + * @tc.type: FUNC + * @tc.require: I7TDJK + */ +HWTEST_F(DaemonTest, DaemonTest_RequestSendFileACL_001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "DaemonTest_RequestSendFileACL_001 begin"; + + AccountInfo accountInfo; + g_checkSinkPermission = false; + EXPECT_EQ(daemon_->RequestSendFileACL("", "", "", "", accountInfo), ERR_ACL_FAILED); + + g_checkSinkPermission = true; + EXPECT_EQ(daemon_->RequestSendFileACL("", "", "", "", accountInfo), E_PERMISSION_DENIED); + + GTEST_LOG_(INFO) << "DaemonTest_RequestSendFileACL_001 end"; +} + +/** + * @tc.name: DaemonTest_GetRemoteCopyInfoACL_001 + * @tc.desc: verify GetRemoteCopyInfoACL. + * @tc.type: FUNC + * @tc.require: I7TDJK + */ +HWTEST_F(DaemonTest, DaemonTest_GetRemoteCopyInfoACL_001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "DaemonTest_GetRemoteCopyInfoACL_001 begin"; + + AccountInfo accountInfo; + bool isSrcFile = false; + bool srcIsDir = false; + + g_checkSinkPermission = false; + EXPECT_EQ(daemon_->GetRemoteCopyInfoACL("", isSrcFile, srcIsDir, accountInfo), ERR_ACL_FAILED); + + g_checkSinkPermission = true; + EXPECT_EQ(daemon_->GetRemoteCopyInfoACL("", isSrcFile, srcIsDir, accountInfo), E_PERMISSION_DENIED); + + GTEST_LOG_(INFO) << "DaemonTest_RequestSendFileACL_001 end"; +} } // namespace Test } // namespace OHOS::Storage::DistributedFile \ No newline at end of file diff --git a/services/distributedfiledaemon/test/unittest/ipc/daemon_execute/daemon_execute_test.cpp b/services/distributedfiledaemon/test/unittest/ipc/daemon_execute/daemon_execute_test.cpp index b83428bfc..1e65f7136 100644 --- a/services/distributedfiledaemon/test/unittest/ipc/daemon_execute/daemon_execute_test.cpp +++ b/services/distributedfiledaemon/test/unittest/ipc/daemon_execute/daemon_execute_test.cpp @@ -399,7 +399,7 @@ HWTEST_F(DaemonExecuteTest, DaemonExecute_PrepareSessionInner_001, TestSize.Leve ASSERT_NE(daemonExecute_, nullptr); // Test case 1: CreateSessionServer fails EXPECT_CALL(*softBusHandlerMock_, CreateSessionServer(_, _, _, _)).WillOnce(Return(-1)); - EXPECT_EQ(daemonExecute_->PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info), + EXPECT_EQ(daemonExecute_->PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info, "networkId"), E_SOFTBUS_SESSION_FAILED); GTEST_LOG_(INFO) << "DaemonExecute_PrepareSessionInner_001 end"; @@ -423,7 +423,7 @@ HWTEST_F(DaemonExecuteTest, DaemonExecute_PrepareSessionInner_002, TestSize.Leve ASSERT_NE(daemonExecute_, nullptr); // Test case 2: CreateSessionServer success but daemon is nullptr EXPECT_CALL(*softBusHandlerMock_, CreateSessionServer(_, _, _, _)).WillOnce(Return(1)); - EXPECT_EQ(daemonExecute_->PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info), E_INVAL_ARG_NAPI); + EXPECT_EQ(daemonExecute_->PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info, "networkId"), E_INVAL_ARG_NAPI); GTEST_LOG_(INFO) << "DaemonExecute_PrepareSessionInner_002 end"; } @@ -447,7 +447,7 @@ HWTEST_F(DaemonExecuteTest, DaemonExecute_PrepareSessionInner_003, TestSize.Leve ASSERT_NE(daemonExecute_, nullptr); // Test case 3: CreateSessionServer succeeds, but authority is not media or docs EXPECT_CALL(*softBusHandlerMock_, CreateSessionServer(_, _, _, _)).WillOnce(Return(1)); - EXPECT_EQ(daemonExecute_->PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info), E_OK); + EXPECT_EQ(daemonExecute_->PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info, "networkId"), ERR_ACL_FAILED); GTEST_LOG_(INFO) << "DaemonExecute_PrepareSessionInner_003 end"; } @@ -473,7 +473,7 @@ HWTEST_F(DaemonExecuteTest, DaemonExecute_PrepareSessionInner_004, TestSize.Leve // Test case 4: CreateSessionServer succeeds, authority is media or docs, but Copy fails EXPECT_CALL(*softBusHandlerMock_, CreateSessionServer(_, _, _, _)).WillOnce(Return(1)); - EXPECT_EQ(daemonExecute_->PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info), E_OK); + EXPECT_EQ(daemonExecute_->PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info, "networkId"), ERR_ACL_FAILED); GTEST_LOG_(INFO) << "DaemonExecute_PrepareSessionInner_004 end"; } @@ -532,7 +532,7 @@ HWTEST_F(DaemonExecuteTest, DaemonExecute_ExecutePrepareSession_003, TestSize.Le // // Initialize the PrepareSessionData auto prepareSessionData = - std::make_shared(srcUri, physicalPath, sessionName, daemon, info, nullBlock); + std::make_shared(srcUri, physicalPath, sessionName, daemon, info, nullBlock, "networkId"); // Initialize InnerEvent auto event = AppExecFwk::InnerEvent::Get(DEAMON_EXECUTE_PREPARE_SESSION, prepareSessionData); @@ -561,7 +561,7 @@ HWTEST_F(DaemonExecuteTest, DaemonExecute_ExecutePrepareSession_004, TestSize.Le // Initialize PrepareSessionData auto prepareSessionData = std::make_shared("test_uri", "test_path", "test_session", daemon, - info, prepareSessionBlock); + info, prepareSessionBlock, "networkId"); auto event = AppExecFwk::InnerEvent::Get(DEAMON_EXECUTE_PREPARE_SESSION, prepareSessionData, 0); @@ -570,7 +570,7 @@ HWTEST_F(DaemonExecuteTest, DaemonExecute_ExecutePrepareSession_004, TestSize.Le ASSERT_NE(daemonExecute_, nullptr); EXPECT_NO_THROW(daemonExecute_->ExecutePrepareSession(event)); - EXPECT_EQ(prepareSessionBlock->GetValue(), E_OK); + EXPECT_EQ(prepareSessionBlock->GetValue(), ERR_ACL_FAILED); GTEST_LOG_(INFO) << "DaemonExecute_ExecutePrepareSession_004 end"; } @@ -593,7 +593,7 @@ HWTEST_F(DaemonExecuteTest, DaemonExecute_ExecutePrepareSession_005, TestSize.Le // Initialize PrepareSessionData auto prepareSessionData = std::make_shared("test_uri", "test_path", "test_session", daemon, - info, prepareSessionBlock); + info, prepareSessionBlock, "networkId"); auto event = AppExecFwk::InnerEvent::Get(DEAMON_EXECUTE_PREPARE_SESSION, prepareSessionData, 0); diff --git a/test/fuzztest/daemonstub_fuzzer/daemonstub_fuzzer.cpp b/test/fuzztest/daemonstub_fuzzer/daemonstub_fuzzer.cpp index 717f38bb2..eeb232acc 100644 --- a/test/fuzztest/daemonstub_fuzzer/daemonstub_fuzzer.cpp +++ b/test/fuzztest/daemonstub_fuzzer/daemonstub_fuzzer.cpp @@ -98,12 +98,28 @@ public: { return 0; } + int32_t RequestSendFileACL(const std::string &srcUri, + const std::string &dstPath, + const std::string &remoteDeviceId, + const std::string &sessionName, + const AccountInfo &callerAccountInfo) override + { + return 0; + } int32_t GetRemoteCopyInfo(const std::string &srcUri, bool &isFile, bool &isDir) override { return 0; } + int32_t GetRemoteCopyInfoACL(const std::string &srcUri, + bool &isFile, + bool &isDir, + const AccountInfo &callerAccountInfo) override + { + return 0; + } + int32_t PushAsset(int32_t userId, const sptr &assetObj, const sptr &sendCallback) override 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 bc11759f1..6b908ca55 100644 --- a/test/unittests/distributed_file_daemon/daemon_stub_sup_test.cpp +++ b/test/unittests/distributed_file_daemon/daemon_stub_sup_test.cpp @@ -130,6 +130,12 @@ public: const std::string &dstPath, const std::string &remoteDeviceId, const std::string &sessionName)); + MOCK_METHOD5(RequestSendFileACL, + int32_t(const std::string &srcUri, + const std::string &dstPath, + const std::string &remoteDeviceId, + const std::string &sessionName, + const AccountInfo &callerAccountInfo)); MOCK_METHOD5(PrepareSession, int32_t(const std::string &srcUri, const std::string &dstUri, @@ -139,6 +145,8 @@ public: MOCK_METHOD1(CancelCopyTask, int32_t(const std::string &sessionName)); MOCK_METHOD2(CancelCopyTask, int32_t(const std::string &srcUri, const std::string &dstUri)); MOCK_METHOD3(GetRemoteCopyInfo, int32_t(const std::string &srcUri, bool &isFile, bool &isDir)); + MOCK_METHOD4(GetRemoteCopyInfoACL, + int32_t(const std::string &srcUri, bool &isFile, bool &isDir, const AccountInfo &callerAccountInfo)); MOCK_METHOD3(PushAsset, int32_t(int32_t userId, const sptr &assetObj, const sptr &sendCallback)); @@ -635,6 +643,173 @@ HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleGetDfsUrisDirFromLocalTest, Test GTEST_LOG_(INFO) << "DaemonStubSupHandleGetDfsUrisDirFromLocalTest End"; } +/** + * @tc.name: DaemonStubSupHandleRequestSendFileACLTest + * @tc.desc: Verify the HandleRequestSendFileACL function + * @tc.type: FUNC + * @tc.require: I7M6L1 + */ +HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleRequestSendFileACLTest, TestSize.Level0) +{ + GTEST_LOG_(INFO) << "DaemonStubSupHandleRequestSendFileACLTest Start"; + UID = DAEMON_UID; + MessageParcel data; + MessageParcel reply; + + g_getCallingUidTrue = true; + // 测试 srcUri 读取失败 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(false)); + auto ret = daemonStub_->HandleRequestSendFileACL(data, reply); + EXPECT_EQ(ret, E_IPC_READ_FAILED); + + // 测试 dstPath 读取失败 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(false)); + ret = daemonStub_->HandleRequestSendFileACL(data, reply); + EXPECT_EQ(ret, E_IPC_READ_FAILED); + + // 测试 dstDeviceId 读取失败 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(false)); + ret = daemonStub_->HandleRequestSendFileACL(data, reply); + EXPECT_EQ(ret, E_IPC_READ_FAILED); + + // 测试 sessionName 读取失败 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(true)).WillOnce(Return(false)); + ret = daemonStub_->HandleRequestSendFileACL(data, reply); + EXPECT_EQ(ret, E_IPC_READ_FAILED); + + // 测试 userId 读取失败 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(true)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(false)); + ret = daemonStub_->HandleRequestSendFileACL(data, reply); + EXPECT_EQ(ret, E_IPC_READ_FAILED); + + // 测试 accountId 读取失败 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(false)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); + ret = daemonStub_->HandleRequestSendFileACL(data, reply); + EXPECT_EQ(ret, E_IPC_READ_FAILED); + + // 测试 networkId 读取失败 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(false)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); + ret = daemonStub_->HandleRequestSendFileACL(data, reply); + EXPECT_EQ(ret, E_IPC_READ_FAILED); + + // 测试成功路径 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); + EXPECT_CALL(*daemonStub_, RequestSendFileACL(_, _, _, _, _)).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); + ret = daemonStub_->HandleRequestSendFileACL(data, reply); + EXPECT_EQ(ret, E_OK); + + // 测试 RequestSendFileACL 返回错误 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); + EXPECT_CALL(*daemonStub_, RequestSendFileACL(_, _, _, _, _)).WillOnce(Return(E_INVAL_ARG)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); + ret = daemonStub_->HandleRequestSendFileACL(data, reply); + EXPECT_EQ(ret, E_INVAL_ARG); + + GTEST_LOG_(INFO) << "DaemonStubSupHandleRequestSendFileACLTest End"; +} + +/** + * @tc.name: DaemonStubSupHandleGetRemoteCopyInfoACLTest + * @tc.desc: Verify the HandleGetRemoteCopyInfoACL function + * @tc.type: FUNC + * @tc.require: I7M6L1 + */ +HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleGetRemoteCopyInfoACLTest, TestSize.Level0) +{ + GTEST_LOG_(INFO) << "DaemonStubSupHandleGetRemoteCopyInfoACLTest Start"; + UID = DAEMON_UID; + MessageParcel data; + MessageParcel reply; + + g_getCallingUidTrue = true; + // 测试 srcUri 读取失败 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(false)); + auto ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); + EXPECT_EQ(ret, E_IPC_READ_FAILED); + + // 测试 userId 读取失败 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(false)); + ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); + EXPECT_EQ(ret, E_IPC_READ_FAILED); + + // 测试 accountId 读取失败 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(false)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); + ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); + EXPECT_EQ(ret, E_IPC_READ_FAILED); + + // 测试 networkId 读取失败 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(false)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); + ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); + EXPECT_EQ(ret, E_IPC_READ_FAILED); + + // 测试 isFile 写入失败 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); + EXPECT_CALL(*daemonStub_, GetRemoteCopyInfoACL(_, _, _, _)).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, WriteBool(_)).WillOnce(Return(false)); + ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); + EXPECT_EQ(ret, E_IPC_WRITE_FAILED); + + // 测试 isDir 写入失败 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); + EXPECT_CALL(*daemonStub_, GetRemoteCopyInfoACL(_, _, _, _)).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, WriteBool(_)).WillOnce(Return(true)).WillOnce(Return(false)); + ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); + EXPECT_EQ(ret, E_IPC_WRITE_FAILED); + + // 测试 res 写入失败 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); + EXPECT_CALL(*daemonStub_, GetRemoteCopyInfoACL(_, _, _, _)).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, WriteBool(_)).WillOnce(Return(true)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(false)); + ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); + EXPECT_EQ(ret, E_IPC_WRITE_FAILED); + + // 测试成功路径 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); + EXPECT_CALL(*daemonStub_, GetRemoteCopyInfoACL(_, _, _, _)).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, WriteBool(_)).WillOnce(Return(true)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); + ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); + EXPECT_EQ(ret, E_OK); + + // 测试 GetRemoteCopyInfoACL 返回错误 + EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); + EXPECT_CALL(*daemonStub_, GetRemoteCopyInfoACL(_, _, _, _)).WillOnce(Return(E_INVAL_ARG)); + EXPECT_CALL(*messageParcelMock_, WriteBool(_)).WillOnce(Return(true)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); + ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); + EXPECT_EQ(ret, E_INVAL_ARG); + + GTEST_LOG_(INFO) << "DaemonStubSupHandleGetRemoteCopyInfoACLTest End"; +} + /** * @tc.name: DaemonStubSupHandleGetDfsSwitchStatus * @tc.desc: Verify the HandleGetDfsSwitchStatus function diff --git a/test/unittests/distributed_file_daemon/daemon_stub_test.cpp b/test/unittests/distributed_file_daemon/daemon_stub_test.cpp index 5c1f83db1..bd980415b 100644 --- a/test/unittests/distributed_file_daemon/daemon_stub_test.cpp +++ b/test/unittests/distributed_file_daemon/daemon_stub_test.cpp @@ -75,6 +75,12 @@ public: const std::string &dstPath, const std::string &remoteDeviceId, const std::string &sessionName)); + MOCK_METHOD5(RequestSendFileACL, + int32_t(const std::string &srcUri, + const std::string &dstPath, + const std::string &remoteDeviceId, + const std::string &sessionName, + const AccountInfo &callerAccountInfo)); MOCK_METHOD5(PrepareSession, int32_t(const std::string &srcUri, const std::string &dstUri, @@ -84,6 +90,8 @@ public: MOCK_METHOD1(CancelCopyTask, int32_t(const std::string &sessionName)); MOCK_METHOD2(CancelCopyTask, int32_t(const std::string &srcUri, const std::string &dstUri)); MOCK_METHOD3(GetRemoteCopyInfo, int32_t(const std::string &srcUri, bool &isFile, bool &isDir)); + MOCK_METHOD4(GetRemoteCopyInfoACL, + int32_t(const std::string &srcUri, bool &isFile, bool &isDir, const AccountInfo &callerAccountInfo)); MOCK_METHOD3(PushAsset, int32_t(int32_t userId, diff --git a/test/unittests/distributed_file_daemon/include/i_daemon_mock.h b/test/unittests/distributed_file_daemon/include/i_daemon_mock.h index d69d040cd..91e9b7213 100644 --- a/test/unittests/distributed_file_daemon/include/i_daemon_mock.h +++ b/test/unittests/distributed_file_daemon/include/i_daemon_mock.h @@ -77,11 +77,24 @@ public: return FileManagement::E_OK; } + int32_t RequestSendFileACL(const std::string &srcUri, const std::string &dstPath, + const std::string &remoteDeviceId, const std::string &sessionName, + const AccountInfo &callerAccountInfo) + { + return FileManagement::E_OK; + } + int32_t GetRemoteCopyInfo(const std::string &srcUri, bool &isFile, bool &isDir) { return FileManagement::E_OK; } + int32_t GetRemoteCopyInfoACL(const std::string &srcUri, bool &isFile, bool &isDir, + const AccountInfo &callerAccountInfo) + { + return FileManagement::E_OK; + } + int32_t CancelCopyTask(const std::string &sessionName) { return FileManagement::E_OK; diff --git a/test/unittests/distributed_file_inner/BUILD.gn b/test/unittests/distributed_file_inner/BUILD.gn index 9257f8ef5..22d417db5 100644 --- a/test/unittests/distributed_file_inner/BUILD.gn +++ b/test/unittests/distributed_file_inner/BUILD.gn @@ -52,6 +52,7 @@ ohos_unittest("distributed_file_daemon_proxy_test") { "app_file_service:remote_file_share_native", "c_utils:utils", "device_manager:devicemanagersdk", + "dsoftbus:softbus_client", "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", @@ -101,6 +102,7 @@ ohos_unittest("distributed_file_daemon_proxy_sup_test") { "app_file_service:remote_file_share_native", "c_utils:utils", "device_manager:devicemanagersdk", + "dsoftbus:softbus_client", "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", 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 ea9b1eb68..acbb9e9ae 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 @@ -83,30 +83,30 @@ public: void DistributedFileDaemonProxyTest::SetUpTestCase(void) { GTEST_LOG_(INFO) << "SetUpTestCase"; - mock_ = sptr(new DaemonServiceMock()); - proxy_ = make_shared(mock_); - messageParcelMock_ = make_shared(); - MessageParcelMock::messageParcel = messageParcelMock_; } void DistributedFileDaemonProxyTest::TearDownTestCase(void) { GTEST_LOG_(INFO) << "TearDownTestCase"; - mock_ = nullptr; - proxy_ = nullptr; - messageParcelMock_ = nullptr; - MessageParcelMock::messageParcel = nullptr; } void DistributedFileDaemonProxyTest::SetUp(void) { - ASSERT_TRUE(mock_ != nullptr); GTEST_LOG_(INFO) << "SetUp"; + mock_ = sptr(new DaemonServiceMock()); + proxy_ = make_shared(mock_); + ASSERT_TRUE(mock_ != nullptr); + messageParcelMock_ = make_shared(); + MessageParcelMock::messageParcel = messageParcelMock_; } void DistributedFileDaemonProxyTest::TearDown(void) { GTEST_LOG_(INFO) << "TearDown"; + messageParcelMock_ = nullptr; + MessageParcelMock::messageParcel = nullptr; + mock_ = nullptr; + proxy_ = nullptr; } /** @@ -883,27 +883,27 @@ HWTEST_F(DistributedFileDaemonProxyTest, DistributedFileDaemon_GetDfsUrisDirFrom EXPECT_EQ(ret, E_BROKEN_IPC); EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)).WillOnce(Return(false)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).WillOnce(Return(E_INVAL_ARG)); ret = proxy_->GetDfsUrisDirFromLocal(uriList, userId, uriToDfsUriMaps); EXPECT_EQ(ret, E_BROKEN_IPC); EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)).WillOnce(Return(false)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).WillOnce(Return(E_OK)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(false)); ret = proxy_->GetDfsUrisDirFromLocal(uriList, userId, uriToDfsUriMaps); EXPECT_EQ(ret, E_BROKEN_IPC); EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)).WillOnce(Return(false)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).WillOnce(Return(E_OK)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(DoAll(SetArgReferee<0>(E_INVAL_ARG), Return(true))); ret = proxy_->GetDfsUrisDirFromLocal(uriList, userId, uriToDfsUriMaps); EXPECT_EQ(ret, E_INVAL_ARG); EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)).WillOnce(Return(false)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).WillOnce(Return(E_OK)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(DoAll(SetArgReferee<0>(E_OK), Return(true))); ret = proxy_->GetDfsUrisDirFromLocal(uriList, userId, uriToDfsUriMaps); @@ -928,7 +928,7 @@ HWTEST_F(DistributedFileDaemonProxyTest, DistributedFileDaemon_GetDfsUrisDirFrom g_context = "aa"; EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)).WillOnce(Return(false)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).WillOnce(Return(E_OK)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(DoAll(SetArgReferee<0>(E_OK), Return(true))); auto ret = proxy_->GetDfsUrisDirFromLocal(uriList, userId, uriToDfsUriMaps); @@ -936,7 +936,7 @@ HWTEST_F(DistributedFileDaemonProxyTest, DistributedFileDaemon_GetDfsUrisDirFrom g_context = "1"; EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)).WillOnce(Return(false)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).WillOnce(Return(E_OK)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(DoAll(SetArgReferee<0>(E_OK), Return(true))); g_readBatchUris = E_INVAL_ARG; @@ -945,6 +945,229 @@ HWTEST_F(DistributedFileDaemonProxyTest, DistributedFileDaemon_GetDfsUrisDirFrom GTEST_LOG_(INFO) << "DistributedFileDaemon_GetDfsUrisDirFromLocal_0200 End"; } +/** + * @tc.name: DistributedFileDaemon_RequestSendFileACL_0100 + * @tc.desc: Verify RequestSendFileACL for parameter serialization failures. + * @tc.type: FUNC + * @tc.require: I7TDJK + */ +HWTEST_F(DistributedFileDaemonProxyTest, DistributedFileDaemon_RequestSendFileACL_0100, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "DistributedFileDaemon_RequestSendFileACL_0100 Start"; + AccountInfo accountInfo{123, 0, "account_id", "network_id"}; + + // Test WriteInterfaceToken failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(false)); + auto ret = proxy_->RequestSendFileACL("uri", "path", "deviceId", "test", accountInfo); + EXPECT_EQ(ret, E_BROKEN_IPC); + + // Test WriteString(srcUri) failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(1).WillOnce(Return(false)); + ret = proxy_->RequestSendFileACL("uri", "path", "deviceId", "test", accountInfo); + EXPECT_EQ(ret, E_INVAL_ARG); + + // Test WriteString(dstPath) failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(2).WillOnce(Return(true)).WillOnce(Return(false)); + ret = proxy_->RequestSendFileACL("uri", "path", "deviceId", "test", accountInfo); + EXPECT_EQ(ret, E_INVAL_ARG); + + // Test WriteString(remoteDeviceId) failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(3).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(false)); + ret = proxy_->RequestSendFileACL("uri", "path", "deviceId", "test", accountInfo); + EXPECT_EQ(ret, E_INVAL_ARG); + + // Test WriteString(sessionName) failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(4).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(true)).WillOnce(Return(false)); + ret = proxy_->RequestSendFileACL("uri", "path", "deviceId", "test", accountInfo); + EXPECT_EQ(ret, E_INVAL_ARG); + + // Test WriteInt32(userId_) failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(4).WillRepeatedly(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).Times(1).WillOnce(Return(false)); + ret = proxy_->RequestSendFileACL("uri", "path", "deviceId", "test", accountInfo); + EXPECT_EQ(ret, E_INVAL_ARG); + + // Test WriteString(accountId_) failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(5).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(false)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).Times(1).WillOnce(Return(true)); + ret = proxy_->RequestSendFileACL("uri", "path", "deviceId", "test", accountInfo); + EXPECT_EQ(ret, E_INVAL_ARG); + + // Test WriteString(networkId_) failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(6).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(false)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).Times(1).WillOnce(Return(true)); + ret = proxy_->RequestSendFileACL("uri", "path", "deviceId", "test", accountInfo); + EXPECT_EQ(ret, E_INVAL_ARG); + + GTEST_LOG_(INFO) << "DistributedFileDaemon_RequestSendFileACL_0100 End"; +} + +/** + * @tc.name: DistributedFileDaemon_RequestSendFileACL_0200 + * @tc.desc: Verify RequestSendFileACL for remote object, IPC, and reply read failures, and success case. + * @tc.type: FUNC + * @tc.require: I7TDJK + */ +HWTEST_F(DistributedFileDaemonProxyTest, DistributedFileDaemon_RequestSendFileACL_0200, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "DistributedFileDaemon_RequestSendFileACL_0200 Start"; + AccountInfo accountInfo{123, 0, "account_id", "network_id"}; + + // Test remote object null + auto testProxy = make_shared(nullptr); + auto ret = testProxy->RequestSendFileACL("uri", "path", "deviceId", "test", accountInfo); + EXPECT_EQ(ret, E_BROKEN_IPC); + + // Test SendRequest failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(6).WillRepeatedly(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).Times(1).WillOnce(Return(E_INVAL_ARG)); + ret = proxy_->RequestSendFileACL("uri", "path", "deviceId", "test", accountInfo); + EXPECT_EQ(ret, E_BROKEN_IPC); + + // Test success case + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(6).WillRepeatedly(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).Times(1).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, ReadInt32()).Times(1).WillOnce(Return(E_OK)); + ret = proxy_->RequestSendFileACL("uri", "path", "deviceId", "test", accountInfo); + EXPECT_EQ(ret, E_OK); + + GTEST_LOG_(INFO) << "DistributedFileDaemon_RequestSendFileACL_0200 End"; +} + +/** + * @tc.name: DistributedFileDaemon_GetRemoteCopyInfoACL_0100 + * @tc.desc: Verify GetRemoteCopyInfoACL for parameter serialization failures. + * @tc.type: FUNC + * @tc.require: I7TDJK + */ +HWTEST_F(DistributedFileDaemonProxyTest, DistributedFileDaemon_GetRemoteCopyInfoACL_0100, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "DistributedFileDaemon_GetRemoteCopyInfoACL_0100 Start"; + AccountInfo accountInfo{123, 0, "account_id", "network_id"}; + bool isFile = false; + bool isDir = false; + + // Test WriteInterfaceToken failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(false)); + auto ret = proxy_->GetRemoteCopyInfoACL("uri", isFile, isDir, accountInfo); + EXPECT_EQ(ret, E_BROKEN_IPC); + + // Test WriteString(srcUri) failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(1).WillOnce(Return(false)); + ret = proxy_->GetRemoteCopyInfoACL("uri", isFile, isDir, accountInfo); + EXPECT_EQ(ret, E_INVAL_ARG); + + // Test WriteInt32(userId_) failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).Times(1).WillOnce(Return(false)); + ret = proxy_->GetRemoteCopyInfoACL("uri", isFile, isDir, accountInfo); + EXPECT_EQ(ret, E_INVAL_ARG); + + // Test WriteString(accountId_) failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(2).WillOnce(Return(true)).WillOnce(Return(false)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).Times(1).WillOnce(Return(true)); + ret = proxy_->GetRemoteCopyInfoACL("uri", isFile, isDir, accountInfo); + EXPECT_EQ(ret, E_INVAL_ARG); + + // Test WriteString(networkId_) failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(3).WillOnce(Return(true)).WillOnce(Return(true)) + .WillOnce(Return(false)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).Times(1).WillOnce(Return(true)); + ret = proxy_->GetRemoteCopyInfoACL("uri", isFile, isDir, accountInfo); + EXPECT_EQ(ret, E_INVAL_ARG); + + GTEST_LOG_(INFO) << "DistributedFileDaemon_GetRemoteCopyInfoACL_0100 End"; +} + +/** + * @tc.name: DistributedFileDaemon_GetRemoteCopyInfoACL_0200 + * @tc.desc: Verify GetRemoteCopyInfoACL for remote object, IPC, and reply read failures, and success case. + * @tc.type: FUNC + * @tc.require: I7TDJK + */ +HWTEST_F(DistributedFileDaemonProxyTest, DistributedFileDaemon_GetRemoteCopyInfoACL_0200, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "DistributedFileDaemon_GetRemoteCopyInfoACL_0200 Start"; + AccountInfo accountInfo{123, 0, "account_id", "network_id"}; + bool isFile = false; + bool isDir = false; + + // Test remote object null + auto testProxy = make_shared(nullptr); + auto ret = testProxy->GetRemoteCopyInfoACL("uri", isFile, isDir, accountInfo); + EXPECT_EQ(ret, E_BROKEN_IPC); + + // Test SendRequest failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(3).WillRepeatedly(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).Times(1).WillOnce(Return(E_INVAL_ARG)); + ret = proxy_->GetRemoteCopyInfoACL("uri", isFile, isDir, accountInfo); + EXPECT_EQ(ret, E_BROKEN_IPC); + + // Test ReadBool(isFile) failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(3).WillRepeatedly(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).Times(1).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, ReadBool(_)).Times(1).WillOnce(Return(false)); + ret = proxy_->GetRemoteCopyInfoACL("uri", isFile, isDir, accountInfo); + EXPECT_EQ(ret, E_INVAL_ARG); + + // Test ReadBool(isDir) failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(3).WillRepeatedly(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).Times(1).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, ReadBool(_)).Times(2).WillOnce(Return(true)).WillOnce(Return(false)); + ret = proxy_->GetRemoteCopyInfoACL("uri", isFile, isDir, accountInfo); + EXPECT_EQ(ret, E_INVAL_ARG); + + // Test ReadInt32 failure + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(3).WillRepeatedly(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).Times(1).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, ReadBool(_)).Times(2).WillOnce(Return(true)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).Times(1).WillOnce(Return(false)); + ret = proxy_->GetRemoteCopyInfoACL("uri", isFile, isDir, accountInfo); + EXPECT_EQ(ret, E_INVAL_ARG); + + // Test success case + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).Times(3).WillRepeatedly(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).Times(1).WillOnce(Return(E_OK)); + EXPECT_CALL(*messageParcelMock_, ReadBool(_)).Times(2).WillOnce(DoAll(SetArgReferee<0>(true), Return(true))) + .WillOnce(DoAll(SetArgReferee<0>(false), Return(true))); + EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).Times(1).WillOnce(Return(true)); + ret = proxy_->GetRemoteCopyInfoACL("uri", isFile, isDir, accountInfo); + EXPECT_EQ(ret, E_OK); + EXPECT_TRUE(isFile); + EXPECT_FALSE(isDir); + + GTEST_LOG_(INFO) << "DistributedFileDaemon_GetRemoteCopyInfoACL_0200 End"; +} + /** * @tc.name: DistributedFileDaemon_GetDfsSwitchStatus * @tc.desc: Verify GetDfsSwitchStatus function diff --git a/utils/log/include/dfs_error.h b/utils/log/include/dfs_error.h index b22e68b22..f471050e7 100644 --- a/utils/log/include/dfs_error.h +++ b/utils/log/include/dfs_error.h @@ -148,6 +148,7 @@ enum DFSErrCode { ERR_CHECKOUT_COUNT, ERR_NULLPTR, + ERR_ACL_FAILED, /* dfs version */ ERR_DFS_VERSION_BASE = 1000, -- Gitee From dadb7721d1e09703f39580fa82fe66cf2dc39f38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=81=E7=AB=9E=E8=8E=9C?= Date: Mon, 11 Aug 2025 19:58:11 +0800 Subject: [PATCH 2/9] fix gn MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 宁竞莜 --- test/unittests/distributed_file_inner/BUILD.gn | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/unittests/distributed_file_inner/BUILD.gn b/test/unittests/distributed_file_inner/BUILD.gn index 22d417db5..4cd4074f3 100644 --- a/test/unittests/distributed_file_inner/BUILD.gn +++ b/test/unittests/distributed_file_inner/BUILD.gn @@ -195,6 +195,7 @@ ohos_unittest("asset_recv_callback_stub_test") { external_deps = [ "c_utils:utils", "device_manager:devicemanagersdk", + "dsoftbus:softbus_client", "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", @@ -243,6 +244,7 @@ ohos_unittest("asset_send_callback_stub_test") { external_deps = [ "c_utils:utils", "device_manager:devicemanagersdk", + "dsoftbus:softbus_client", "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", @@ -301,6 +303,7 @@ ohos_unittest("file_copy_manager_test") { "c_utils:utils", "data_share:datashare_consumer", "device_manager:devicemanagersdk", + "dsoftbus:softbus_client", "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", @@ -365,6 +368,7 @@ ohos_unittest("remote_file_copy_manager_test") { "c_utils:utils", "data_share:datashare_consumer", "device_manager:devicemanagersdk", + "dsoftbus:softbus_client", "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", @@ -430,6 +434,7 @@ ohos_unittest("trans_listener_test") { "c_utils:utils", "data_share:datashare_consumer", "device_manager:devicemanagersdk", + "dsoftbus:softbus_client", "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", @@ -494,6 +499,7 @@ ohos_unittest("file_size_utils_test") { "c_utils:utils", "data_share:datashare_consumer", "device_manager:devicemanagersdk", + "dsoftbus:softbus_client", "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", @@ -546,6 +552,7 @@ ohos_unittest("file_copy_listener_test") { "ability_base:zuri", "app_file_service:fileuri_native", "c_utils:utils", + "dsoftbus:softbus_client", "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", @@ -598,6 +605,7 @@ ohos_unittest("file_mount_manager_test") { "app_file_service:remote_file_share_native", "c_utils:utils", "device_manager:devicemanagersdk", + "dsoftbus:softbus_client", "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", -- Gitee From f3b4a42a75c1a1a0db5a2b1faed97eae7c8d3ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=81=E7=AB=9E=E8=8E=9C?= Date: Mon, 11 Aug 2025 20:37:40 +0800 Subject: [PATCH 3/9] fix codecheck MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 宁竞莜 --- .../src/distributed_file_daemon_proxy.cpp | 14 ++- .../daemon_execute/daemon_execute_test.cpp | 6 +- .../daemon_stub_sup_test.cpp | 103 +++++++++++------- .../unittests/distributed_file_inner/BUILD.gn | 1 + 4 files changed, 75 insertions(+), 49 deletions(-) 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 dc9cfbd71..cf8950c45 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 @@ -391,10 +391,10 @@ int32_t DistributedFileDaemonProxy::RequestSendFile(const std::string &srcUri, } int32_t DistributedFileDaemonProxy::RequestSendFileACL(const std::string &srcUri, - const std::string &dstPath, - const std::string &remoteDeviceId, - const std::string &sessionName, - const AccountInfo &callerAccountInfo) + const std::string &dstPath, + const std::string &remoteDeviceId, + const std::string &sessionName, + const AccountInfo &callerAccountInfo) { MessageParcel data; MessageParcel reply; @@ -486,8 +486,10 @@ int32_t DistributedFileDaemonProxy::GetRemoteCopyInfo(const std::string &srcUri, return ret; } -int32_t DistributedFileDaemonProxy::GetRemoteCopyInfoACL(const std::string &srcUri, bool &isFile, bool &isDir, - const AccountInfo &callerAccountInfo) +int32_t DistributedFileDaemonProxy::GetRemoteCopyInfoACL(const std::string &srcUri, + bool &isFile, + bool &isDir, + const AccountInfo &callerAccountInfo) { MessageParcel data; MessageParcel reply; diff --git a/services/distributedfiledaemon/test/unittest/ipc/daemon_execute/daemon_execute_test.cpp b/services/distributedfiledaemon/test/unittest/ipc/daemon_execute/daemon_execute_test.cpp index 1e65f7136..443ae3e28 100644 --- a/services/distributedfiledaemon/test/unittest/ipc/daemon_execute/daemon_execute_test.cpp +++ b/services/distributedfiledaemon/test/unittest/ipc/daemon_execute/daemon_execute_test.cpp @@ -423,7 +423,8 @@ HWTEST_F(DaemonExecuteTest, DaemonExecute_PrepareSessionInner_002, TestSize.Leve ASSERT_NE(daemonExecute_, nullptr); // Test case 2: CreateSessionServer success but daemon is nullptr EXPECT_CALL(*softBusHandlerMock_, CreateSessionServer(_, _, _, _)).WillOnce(Return(1)); - EXPECT_EQ(daemonExecute_->PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info, "networkId"), E_INVAL_ARG_NAPI); + EXPECT_EQ(daemonExecute_->PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info, "networkId"), + E_INVAL_ARG_NAPI); GTEST_LOG_(INFO) << "DaemonExecute_PrepareSessionInner_002 end"; } @@ -473,7 +474,8 @@ HWTEST_F(DaemonExecuteTest, DaemonExecute_PrepareSessionInner_004, TestSize.Leve // Test case 4: CreateSessionServer succeeds, authority is media or docs, but Copy fails EXPECT_CALL(*softBusHandlerMock_, CreateSessionServer(_, _, _, _)).WillOnce(Return(1)); - EXPECT_EQ(daemonExecute_->PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info, "networkId"), ERR_ACL_FAILED); + EXPECT_EQ(daemonExecute_->PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info, "networkId"), + ERR_ACL_FAILED); GTEST_LOG_(INFO) << "DaemonExecute_PrepareSessionInner_004 end"; } 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 6b908ca55..6700c660a 100644 --- a/test/unittests/distributed_file_daemon/daemon_stub_sup_test.cpp +++ b/test/unittests/distributed_file_daemon/daemon_stub_sup_test.cpp @@ -191,6 +191,7 @@ void DaemonStubSupPTest::TearDownTestCase(void) void DaemonStubSupPTest::SetUp(void) { GTEST_LOG_(INFO) << "SetUp"; + UID = DATA_UID; } void DaemonStubSupPTest::TearDown(void) @@ -644,63 +645,78 @@ HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleGetDfsUrisDirFromLocalTest, Test } /** - * @tc.name: DaemonStubSupHandleRequestSendFileACLTest - * @tc.desc: Verify the HandleRequestSendFileACL function + * @tc.name: DaemonStubSupHandleRequestSendFileACLTest_0001 + * @tc.desc: Verify the HandleRequestSendFileACL function (read failures) * @tc.type: FUNC * @tc.require: I7M6L1 */ -HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleRequestSendFileACLTest, TestSize.Level0) +HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleRequestSendFileACLTest_0001, TestSize.Level0) { - GTEST_LOG_(INFO) << "DaemonStubSupHandleRequestSendFileACLTest Start"; - UID = DAEMON_UID; + GTEST_LOG_(INFO) << "DaemonStubSupHandleRequestSendFileACLTest_0001 Start"; MessageParcel data; MessageParcel reply; g_getCallingUidTrue = true; - // 测试 srcUri 读取失败 + // Test srcUri read failure EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(false)); auto ret = daemonStub_->HandleRequestSendFileACL(data, reply); EXPECT_EQ(ret, E_IPC_READ_FAILED); - // 测试 dstPath 读取失败 + // Test dstPath read failure EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(false)); ret = daemonStub_->HandleRequestSendFileACL(data, reply); EXPECT_EQ(ret, E_IPC_READ_FAILED); - // 测试 dstDeviceId 读取失败 + // Test dstDeviceId read failure EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) .WillOnce(Return(false)); ret = daemonStub_->HandleRequestSendFileACL(data, reply); EXPECT_EQ(ret, E_IPC_READ_FAILED); - // 测试 sessionName 读取失败 + // Test sessionName read failure EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) .WillOnce(Return(true)).WillOnce(Return(false)); ret = daemonStub_->HandleRequestSendFileACL(data, reply); EXPECT_EQ(ret, E_IPC_READ_FAILED); - // 测试 userId 读取失败 + // Test userId read failure EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) .WillOnce(Return(true)).WillOnce(Return(true)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(false)); ret = daemonStub_->HandleRequestSendFileACL(data, reply); EXPECT_EQ(ret, E_IPC_READ_FAILED); - // 测试 accountId 读取失败 + GTEST_LOG_(INFO) << "DaemonStubSupHandleRequestSendFileACLTest_0001 End"; +} + +/** + * @tc.name: DaemonStubSupHandleRequestSendFileACLTest_0002 + * @tc.desc: Verify the HandleRequestSendFileACL function (success cases) + * @tc.type: FUNC + * @tc.require: I7M6L1 + */ +HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleRequestSendFileACLTest_0002, TestSize.Level0) +{ + GTEST_LOG_(INFO) << "DaemonStubSupHandleRequestSendFileACLTest_0002 Start"; + MessageParcel data; + MessageParcel reply; + + g_getCallingUidTrue = true; + // Test accountId read failure EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) .WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(false)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); - ret = daemonStub_->HandleRequestSendFileACL(data, reply); + auto ret = daemonStub_->HandleRequestSendFileACL(data, reply); EXPECT_EQ(ret, E_IPC_READ_FAILED); - // 测试 networkId 读取失败 + // Test networkId read failure EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) .WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(false)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); ret = daemonStub_->HandleRequestSendFileACL(data, reply); EXPECT_EQ(ret, E_IPC_READ_FAILED); - // 测试成功路径 + // Test success path EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) .WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(true)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); @@ -709,7 +725,7 @@ HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleRequestSendFileACLTest, TestSize ret = daemonStub_->HandleRequestSendFileACL(data, reply); EXPECT_EQ(ret, E_OK); - // 测试 RequestSendFileACL 返回错误 + // Test RequestSendFileACL returns error EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) .WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(true)).WillOnce(Return(true)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); @@ -718,57 +734,72 @@ HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleRequestSendFileACLTest, TestSize ret = daemonStub_->HandleRequestSendFileACL(data, reply); EXPECT_EQ(ret, E_INVAL_ARG); - GTEST_LOG_(INFO) << "DaemonStubSupHandleRequestSendFileACLTest End"; + GTEST_LOG_(INFO) << "DaemonStubSupHandleRequestSendFileACLTest_0002 End"; } /** - * @tc.name: DaemonStubSupHandleGetRemoteCopyInfoACLTest - * @tc.desc: Verify the HandleGetRemoteCopyInfoACL function + * @tc.name: DaemonStubSupHandleGetRemoteCopyInfoACLTest_0001 + * @tc.desc: Verify the HandleGetRemoteCopyInfoACL function (read failures) * @tc.type: FUNC * @tc.require: I7M6L1 */ -HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleGetRemoteCopyInfoACLTest, TestSize.Level0) +HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleGetRemoteCopyInfoACLTest_0001, TestSize.Level0) { - GTEST_LOG_(INFO) << "DaemonStubSupHandleGetRemoteCopyInfoACLTest Start"; - UID = DAEMON_UID; + GTEST_LOG_(INFO) << "DaemonStubSupHandleGetRemoteCopyInfoACLTest_0001 Start"; MessageParcel data; MessageParcel reply; g_getCallingUidTrue = true; - // 测试 srcUri 读取失败 + // Test srcUri read failure EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(false)); auto ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); EXPECT_EQ(ret, E_IPC_READ_FAILED); - // 测试 userId 读取失败 + // Test userId read failure EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(false)); ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); EXPECT_EQ(ret, E_IPC_READ_FAILED); - // 测试 accountId 读取失败 + // Test accountId read failure EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(false)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); EXPECT_EQ(ret, E_IPC_READ_FAILED); - // 测试 networkId 读取失败 + // Test networkId read failure EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) .WillOnce(Return(false)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); EXPECT_EQ(ret, E_IPC_READ_FAILED); - // 测试 isFile 写入失败 + GTEST_LOG_(INFO) << "DaemonStubSupHandleGetRemoteCopyInfoACLTest_0001 End"; +} + +/** + * @tc.name: DaemonStubSupHandleGetRemoteCopyInfoACLTest_0002 + * @tc.desc: Verify the HandleGetRemoteCopyInfoACL function (write and success cases) + * @tc.type: FUNC + * @tc.require: I7M6L1 + */ +HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleGetRemoteCopyInfoACLTest_0002, TestSize.Level0) +{ + GTEST_LOG_(INFO) << "DaemonStubSupHandleGetRemoteCopyInfoACLTest_0002 Start"; + MessageParcel data; + MessageParcel reply; + + g_getCallingUidTrue = true; + // Test isFile write failure EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) .WillOnce(Return(true)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); EXPECT_CALL(*daemonStub_, GetRemoteCopyInfoACL(_, _, _, _)).WillOnce(Return(E_OK)); EXPECT_CALL(*messageParcelMock_, WriteBool(_)).WillOnce(Return(false)); - ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); + auto ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); EXPECT_EQ(ret, E_IPC_WRITE_FAILED); - // 测试 isDir 写入失败 + // Test isDir write failure EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) .WillOnce(Return(true)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); @@ -777,17 +808,7 @@ HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleGetRemoteCopyInfoACLTest, TestSi ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); EXPECT_EQ(ret, E_IPC_WRITE_FAILED); - // 测试 res 写入失败 - EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) - .WillOnce(Return(true)); - EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); - EXPECT_CALL(*daemonStub_, GetRemoteCopyInfoACL(_, _, _, _)).WillOnce(Return(E_OK)); - EXPECT_CALL(*messageParcelMock_, WriteBool(_)).WillOnce(Return(true)).WillOnce(Return(true)); - EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(false)); - ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); - EXPECT_EQ(ret, E_IPC_WRITE_FAILED); - - // 测试成功路径 + // Test success path EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) .WillOnce(Return(true)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); @@ -797,7 +818,7 @@ HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleGetRemoteCopyInfoACLTest, TestSi ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); EXPECT_EQ(ret, E_OK); - // 测试 GetRemoteCopyInfoACL 返回错误 + // Test GetRemoteCopyInfoACL returns error EXPECT_CALL(*messageParcelMock_, ReadString(_)).WillOnce(Return(true)).WillOnce(Return(true)) .WillOnce(Return(true)); EXPECT_CALL(*messageParcelMock_, ReadInt32(_)).WillOnce(Return(true)); @@ -807,7 +828,7 @@ HWTEST_F(DaemonStubSupPTest, DaemonStubSupHandleGetRemoteCopyInfoACLTest, TestSi ret = daemonStub_->HandleGetRemoteCopyInfoACL(data, reply); EXPECT_EQ(ret, E_INVAL_ARG); - GTEST_LOG_(INFO) << "DaemonStubSupHandleGetRemoteCopyInfoACLTest End"; + GTEST_LOG_(INFO) << "DaemonStubSupHandleGetRemoteCopyInfoACLTest_0002 End"; } /** diff --git a/test/unittests/distributed_file_inner/BUILD.gn b/test/unittests/distributed_file_inner/BUILD.gn index 4cd4074f3..cd508452c 100644 --- a/test/unittests/distributed_file_inner/BUILD.gn +++ b/test/unittests/distributed_file_inner/BUILD.gn @@ -705,6 +705,7 @@ ohos_unittest("ipc_wrapper_test") { "c_utils:utils", "data_share:datashare_consumer", "device_manager:devicemanagersdk", + "dsoftbus:softbus_client", "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", -- Gitee From 9a58bc81d29ebd7770b9317acf796bc5d96629fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=81=E7=AB=9E=E8=8E=9C?= Date: Tue, 12 Aug 2025 09:18:27 +0800 Subject: [PATCH 4/9] fix codecheck MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 宁竞莜 --- test/fuzztest/daemonstub_fuzzer/BUILD.gn | 1 + 1 file changed, 1 insertion(+) diff --git a/test/fuzztest/daemonstub_fuzzer/BUILD.gn b/test/fuzztest/daemonstub_fuzzer/BUILD.gn index 67ed23b8e..d6d28bcba 100644 --- a/test/fuzztest/daemonstub_fuzzer/BUILD.gn +++ b/test/fuzztest/daemonstub_fuzzer/BUILD.gn @@ -47,6 +47,7 @@ ohos_fuzztest("DaemonStubFuzzTest") { "cJSON:cjson_static", "c_utils:utils", "device_manager:devicemanagersdk", + "dsoftbus:softbus_client", "hilog:libhilog", "hisysevent:libhisysevent", "ipc:ipc_single", -- Gitee From cd1c50b8c3790f5a1efa7cb915719e93cf8f95f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=81=E7=AB=9E=E8=8E=9C?= Date: Tue, 12 Aug 2025 09:48:46 +0800 Subject: [PATCH 5/9] fix codecheck MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 宁竞莜 --- test/unittests/distributed_file_daemon/BUILD.gn | 1 + 1 file changed, 1 insertion(+) diff --git a/test/unittests/distributed_file_daemon/BUILD.gn b/test/unittests/distributed_file_daemon/BUILD.gn index 6901ce3bf..b362eb9ba 100644 --- a/test/unittests/distributed_file_daemon/BUILD.gn +++ b/test/unittests/distributed_file_daemon/BUILD.gn @@ -346,6 +346,7 @@ ohos_unittest("daemon_service_proxy_test") { "app_file_service:remote_file_share_native", "c_utils:utils", "device_manager:devicemanagersdk", + "dsoftbus:softbus_client", "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", -- Gitee From 630241b61abf83fd9a0ea040468671eb53d95e84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=81=E7=AB=9E=E8=8E=9C?= Date: Tue, 12 Aug 2025 11:32:44 +0800 Subject: [PATCH 6/9] fix checkcode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 宁竞莜 --- .../test/unittest/ipc/daemon_execute/daemon_execute_test.cpp | 3 ++- test/unittests/distributed_file_daemon/BUILD.gn | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/services/distributedfiledaemon/test/unittest/ipc/daemon_execute/daemon_execute_test.cpp b/services/distributedfiledaemon/test/unittest/ipc/daemon_execute/daemon_execute_test.cpp index 443ae3e28..fa6077549 100644 --- a/services/distributedfiledaemon/test/unittest/ipc/daemon_execute/daemon_execute_test.cpp +++ b/services/distributedfiledaemon/test/unittest/ipc/daemon_execute/daemon_execute_test.cpp @@ -448,7 +448,8 @@ HWTEST_F(DaemonExecuteTest, DaemonExecute_PrepareSessionInner_003, TestSize.Leve ASSERT_NE(daemonExecute_, nullptr); // Test case 3: CreateSessionServer succeeds, but authority is not media or docs EXPECT_CALL(*softBusHandlerMock_, CreateSessionServer(_, _, _, _)).WillOnce(Return(1)); - EXPECT_EQ(daemonExecute_->PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info, "networkId"), ERR_ACL_FAILED); + EXPECT_EQ(daemonExecute_->PrepareSessionInner(srcUri, physicalPath, sessionName, daemon, info, "networkId"), + ERR_ACL_FAILED); GTEST_LOG_(INFO) << "DaemonExecute_PrepareSessionInner_003 end"; } diff --git a/test/unittests/distributed_file_daemon/BUILD.gn b/test/unittests/distributed_file_daemon/BUILD.gn index 6901ce3bf..8aa6d75b3 100644 --- a/test/unittests/distributed_file_daemon/BUILD.gn +++ b/test/unittests/distributed_file_daemon/BUILD.gn @@ -250,6 +250,7 @@ ohos_unittest("daemon_manager_impl_test") { "app_file_service:remote_file_share_native", "c_utils:utils", "device_manager:devicemanagersdk", + "dsoftbus:softbus_client", "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", @@ -346,6 +347,7 @@ ohos_unittest("daemon_service_proxy_test") { "app_file_service:remote_file_share_native", "c_utils:utils", "device_manager:devicemanagersdk", + "dsoftbus:softbus_client", "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", -- Gitee From 082306c139fd36592a63e15bfe36043ef109ebd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=81=E7=AB=9E=E8=8E=9C?= Date: Tue, 12 Aug 2025 15:04:06 +0800 Subject: [PATCH 7/9] fix ut MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 宁竞莜 --- .../include/distributed_file_daemon_proxy.h | 14 +++++++------- .../src/device/device_profile_adapter.cpp | 2 +- .../distributedfiledaemon/src/ipc/daemon.cpp | 4 ++-- .../src/ipc/daemon_stub.cpp | 5 ++++- .../test/unittest/ipc/daemon/daemon_test.cpp | 18 +++++++++++++++--- 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/frameworks/native/distributed_file_inner/include/distributed_file_daemon_proxy.h b/frameworks/native/distributed_file_inner/include/distributed_file_daemon_proxy.h index fc95d8c85..1ae611654 100644 --- a/frameworks/native/distributed_file_inner/include/distributed_file_daemon_proxy.h +++ b/frameworks/native/distributed_file_inner/include/distributed_file_daemon_proxy.h @@ -55,17 +55,17 @@ public: const std::string &sessionName) override; // for ACL verification after 6.0 version int32_t RequestSendFileACL(const std::string &srcUri, - const std::string &dstPath, - const std::string &dstDeviceId, - const std::string &sessionName, - const AccountInfo &callerAccountInfo) override; + const std::string &dstPath, + const std::string &dstDeviceId, + const std::string &sessionName, + const AccountInfo &callerAccountInfo) override; int32_t GetRemoteCopyInfo(const std::string &srcUri, bool &isFile, bool &isDir) override; // for ACL verification after 6.0 version int32_t GetRemoteCopyInfoACL(const std::string &srcUri, - bool &isFile, - bool &isDir, - const AccountInfo &callerAccountInfo) override; + bool &isFile, + bool &isDir, + const AccountInfo &callerAccountInfo) override; int32_t PushAsset(int32_t userId, const sptr &assetObj, diff --git a/services/distributedfiledaemon/src/device/device_profile_adapter.cpp b/services/distributedfiledaemon/src/device/device_profile_adapter.cpp index cc1f6e0bc..1566a0ce6 100644 --- a/services/distributedfiledaemon/src/device/device_profile_adapter.cpp +++ b/services/distributedfiledaemon/src/device/device_profile_adapter.cpp @@ -86,7 +86,7 @@ bool DeviceProfileAdapter::IsRemoteDfsVersionLowerThanGiven(const std::string &r const DfsVersion &givenDfsVersion, VersionPackageName packageName) { - LOGI("remoteDevice.networkId: %{public}.6s ,GivenDFSVersion: %{public}s", remoteNetworkId.c_str(), + LOGI("remoteDevice.networkId: %{public}.6s, GivenDFSVersion: %{public}s", remoteNetworkId.c_str(), givenDfsVersion.dump().c_str()); #ifdef SUPPORT_DEVICE_PROFILE if (remoteNetworkId.empty()) { diff --git a/services/distributedfiledaemon/src/ipc/daemon.cpp b/services/distributedfiledaemon/src/ipc/daemon.cpp index d003c9e8f..6090134ff 100644 --- a/services/distributedfiledaemon/src/ipc/daemon.cpp +++ b/services/distributedfiledaemon/src/ipc/daemon.cpp @@ -601,7 +601,7 @@ int32_t Daemon::GetRealPath(const std::string &srcUri, int32_t ret = E_OK; if (!DeviceProfileAdapter::GetInstance().IsRemoteDfsVersionLowerThanGiven(srcNetworkId, ACL_VERSION)) { - LOGI("Version > 6.0.1 ,need ACL check"); + LOGI("Version >= 6.0.1, need ACL check"); if (!SoftBusPermissionCheck::CheckSrcPermission(srcNetworkId)) { LOGE("CheckSrcPermission failed"); return ERR_ACL_FAILED; @@ -802,7 +802,7 @@ int32_t Daemon::Copy(const std::string &srcUri, int32_t ret = E_OK; if (!DeviceProfileAdapter::GetInstance().IsRemoteDfsVersionLowerThanGiven(srcNetworkId, ACL_VERSION)) { - LOGI("Version > 6.0.1 ,need ACL check"); + LOGI("Version >= 6.0.1, need ACL check"); if (!SoftBusPermissionCheck::CheckSrcPermission(srcNetworkId)) { LOGE("CheckSrcPermission failed"); return ERR_ACL_FAILED; diff --git a/services/distributedfiledaemon/src/ipc/daemon_stub.cpp b/services/distributedfiledaemon/src/ipc/daemon_stub.cpp index 716194283..e672cc58f 100644 --- a/services/distributedfiledaemon/src/ipc/daemon_stub.cpp +++ b/services/distributedfiledaemon/src/ipc/daemon_stub.cpp @@ -325,7 +325,10 @@ int32_t DaemonStub::HandleRequestSendFileACL(MessageParcel &data, MessageParcel return E_IPC_READ_FAILED; } auto res = RequestSendFileACL(srcUri, dstPath, dstDeviceId, sessionName, callerAccountInfo); - reply.WriteInt32(res); + if (!reply.WriteInt32(res)) { + LOGE("read networkId failed"); + return E_IPC_READ_FAILED; + } LOGD("End HandleRequestSendFileACL, ret = %{public}d.", res); return res; } diff --git a/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp b/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp index b63eb5925..15891779e 100644 --- a/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp +++ b/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp @@ -709,22 +709,30 @@ HWTEST_F(DaemonTest, DaemonTest_RequestSendFile_001, TestSize.Level1) g_getCallingNetworkId = "testNetWork1"; std::vector deviceList; deviceList.push_back(deviceInfo); +#ifdef SUPPORT_SAME_ACCOUNT EXPECT_CALL(*deviceManagerImplMock_, GetTrustedDeviceList(_, _, _)) .WillOnce(DoAll(SetArgReferee<2>(deviceList), Return(0))); +#endif daemon_->eventHandler_ = nullptr; EXPECT_EQ(daemon_->RequestSendFile("", "", "", ""), E_EVENT_HANDLER); +#ifdef SUPPORT_SAME_ACCOUNT EXPECT_CALL(*deviceManagerImplMock_, GetTrustedDeviceList(_, _, _)) .WillOnce(DoAll(SetArgReferee<2>(deviceList), Return(0))); +#endif EXPECT_EQ(daemon_->RequestSendFile("../srcUri", "", "", ""), E_ILLEGAL_URI); +#ifdef SUPPORT_SAME_ACCOUNT EXPECT_CALL(*deviceManagerImplMock_, GetTrustedDeviceList(_, _, _)) .WillOnce(DoAll(SetArgReferee<2>(deviceList), Return(0))); +#endif EXPECT_EQ(daemon_->RequestSendFile("", "../dstUri", "", ""), E_ILLEGAL_URI); daemon_->StartEventHandler(); +#ifdef SUPPORT_SAME_ACCOUNT EXPECT_CALL(*deviceManagerImplMock_, GetTrustedDeviceList(_, _, _)) .WillOnce(DoAll(SetArgReferee<2>(deviceList), Return(0))); +#endif EXPECT_EQ(daemon_->RequestSendFile("", "", "", ""), ERR_BAD_VALUE); GTEST_LOG_(INFO) << "DaemonTest_RequestSendFile_001 end"; } @@ -1037,18 +1045,22 @@ HWTEST_F(DaemonTest, DaemonTest_GetRemoteCopyInfo_001, TestSize.Level1) ASSERT_NE(daemon_, nullptr); g_getCallingNetworkId = "testNetWork1"; std::vector deviceList; - (void)memcpy_s(deviceInfo.networkId, DM_MAX_DEVICE_NAME_LEN - 1, - NETWORKID_ONE.c_str(), NETWORKID_ONE.size()); + (void)memcpy_s(deviceInfo.networkId, DM_MAX_DEVICE_NAME_LEN - 1, NETWORKID_ONE.c_str(), NETWORKID_ONE.size()); deviceList.push_back(deviceInfo); +#ifdef SUPPORT_SAME_ACCOUNT EXPECT_CALL(*deviceManagerImplMock_, GetTrustedDeviceList(_, _, _)) .WillOnce(DoAll(SetArgReferee<2>(deviceList), Return(0))); +#endif + EXPECT_CALL(*softBusSessionListenerMock_, GetRealPath(_)).WillOnce(Return("")); bool isSrcFile = false; bool srcIsDir = false; EXPECT_EQ(daemon_->GetRemoteCopyInfo("", isSrcFile, srcIsDir), E_SOFTBUS_SESSION_FAILED); - +#ifdef SUPPORT_SAME_ACCOUNT EXPECT_CALL(*deviceManagerImplMock_, GetTrustedDeviceList(_, _, _)) .WillOnce(DoAll(SetArgReferee<2>(deviceList), Return(0))); +#endif + EXPECT_CALL(*softBusSessionListenerMock_, GetRealPath(_)).WillOnce(Return("test")); EXPECT_EQ(daemon_->GetRemoteCopyInfo("", isSrcFile, srcIsDir), E_OK); GTEST_LOG_(INFO) << "DaemonTest_GetRemoteCopyInfo_001 end"; -- Gitee From cd0a982e35a588386d5d569ec5f1e5a767f032dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=81=E7=AB=9E=E8=8E=9C?= Date: Tue, 12 Aug 2025 16:48:49 +0800 Subject: [PATCH 8/9] fix ut MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 宁竞莜 --- .../test/unittest/ipc/daemon/daemon_test.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp b/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp index 15891779e..dff7667ea 100644 --- a/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp +++ b/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp @@ -1560,7 +1560,7 @@ HWTEST_F(DaemonTest, DaemonTest_RequestSendFileACL_001, TestSize.Level1) EXPECT_EQ(daemon_->RequestSendFileACL("", "", "", "", accountInfo), ERR_ACL_FAILED); g_checkSinkPermission = true; - EXPECT_EQ(daemon_->RequestSendFileACL("", "", "", "", accountInfo), E_PERMISSION_DENIED); + EXPECT_EQ(daemon_->RequestSendFileACL("", "", "", "", accountInfo), E_EVENT_HANDLER); GTEST_LOG_(INFO) << "DaemonTest_RequestSendFileACL_001 end"; } @@ -1583,6 +1583,7 @@ HWTEST_F(DaemonTest, DaemonTest_GetRemoteCopyInfoACL_001, TestSize.Level1) EXPECT_EQ(daemon_->GetRemoteCopyInfoACL("", isSrcFile, srcIsDir, accountInfo), ERR_ACL_FAILED); g_checkSinkPermission = true; + EXPECT_CALL(*softBusSessionListenerMock_, GetRealPath(_)).WillOnce(Return("test")); EXPECT_EQ(daemon_->GetRemoteCopyInfoACL("", isSrcFile, srcIsDir, accountInfo), E_PERMISSION_DENIED); GTEST_LOG_(INFO) << "DaemonTest_RequestSendFileACL_001 end"; -- Gitee From c3ccc92b51261ce71618c23189fbec0ced0138f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=81=E7=AB=9E=E8=8E=9C?= Date: Tue, 12 Aug 2025 18:55:07 +0800 Subject: [PATCH 9/9] fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 宁竞莜 --- .../test/unittest/ipc/daemon/daemon_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp b/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp index dff7667ea..0942de797 100644 --- a/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp +++ b/services/distributedfiledaemon/test/unittest/ipc/daemon/daemon_test.cpp @@ -1584,7 +1584,7 @@ HWTEST_F(DaemonTest, DaemonTest_GetRemoteCopyInfoACL_001, TestSize.Level1) g_checkSinkPermission = true; EXPECT_CALL(*softBusSessionListenerMock_, GetRealPath(_)).WillOnce(Return("test")); - EXPECT_EQ(daemon_->GetRemoteCopyInfoACL("", isSrcFile, srcIsDir, accountInfo), E_PERMISSION_DENIED); + EXPECT_EQ(daemon_->GetRemoteCopyInfoACL("", isSrcFile, srcIsDir, accountInfo), E_OK); GTEST_LOG_(INFO) << "DaemonTest_RequestSendFileACL_001 end"; } -- Gitee