From 971a926711ee41092fac8521dd5c3d40c9963abe Mon Sep 17 00:00:00 2001 From: cuiruibin Date: Fri, 22 Nov 2024 09:31:16 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=BF=80=E6=B4=BB=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: cuiruibin --- interfaces/innerkits/native/file_share/src/file_permission.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/interfaces/innerkits/native/file_share/src/file_permission.cpp b/interfaces/innerkits/native/file_share/src/file_permission.cpp index ea7e11483..677b35d75 100644 --- a/interfaces/innerkits/native/file_share/src/file_permission.cpp +++ b/interfaces/innerkits/native/file_share/src/file_permission.cpp @@ -319,6 +319,9 @@ int32_t FilePermission::ActivatePermission(const vector &uriPolic return EPERM; } vector resultCodes; + for (size_t i = 0; i < pathPolicies.size(); i++) { + resultCodes.emplace_back(0); + } auto &uriPermissionClient = AAFwk::UriPermissionManagerClient::GetInstance(); int32_t sandboxManagerErrorCode = uriPermissionClient.Active(pathPolicies, resultCodes); errorCode = ErrorCodeConversion(sandboxManagerErrorCode, errorResults, resultCodes); -- Gitee From 436d87daf6b81e330f0d19a5e52e7b47aac9d337 Mon Sep 17 00:00:00 2001 From: cuiruibin Date: Mon, 25 Nov 2024 11:39:18 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=8A=A8=E6=80=81=E6=8C=82=E8=BD=BD?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: cuiruibin --- interfaces/common/include/sandbox_helper.h | 2 + interfaces/common/src/sandbox_helper.cpp | 137 ++++-------------- .../native/file_share/include/file_share.h | 13 +- .../native/file_share/src/file_permission.cpp | 3 - .../native/file_share/src/file_share.cpp | 68 +++++++-- .../src/remote_file_share.cpp | 59 +++++++- .../file_share_native/file_share_test.cpp | 64 ++++++++ 7 files changed, 213 insertions(+), 133 deletions(-) diff --git a/interfaces/common/include/sandbox_helper.h b/interfaces/common/include/sandbox_helper.h index c0fa99864..3d029b5b9 100644 --- a/interfaces/common/include/sandbox_helper.h +++ b/interfaces/common/include/sandbox_helper.h @@ -35,6 +35,8 @@ public: static bool CheckValidPath(const std::string &filePath); static int32_t GetPhysicalPath(const std::string &fileUri, const std::string &userId, std::string &physicalPath); + static int32_t GetMediaPhysicalPath(const std::vector &uriList, + std::vector &physicalPathList); static int32_t GetBackupPhysicalPath(const std::string &fileUri, const std::string &userId, std::string &physicalPath); static bool IsValidPath(const std::string &path); diff --git a/interfaces/common/src/sandbox_helper.cpp b/interfaces/common/src/sandbox_helper.cpp index 71b6d63c5..af43a63dc 100644 --- a/interfaces/common/src/sandbox_helper.cpp +++ b/interfaces/common/src/sandbox_helper.cpp @@ -28,6 +28,7 @@ using namespace std; namespace OHOS { namespace AppFileService { +typedef void (*ConvertFileUriToMntPath)(const std::vector &, std::vector &); namespace { const string PACKAGE_NAME_FLAG = ""; const string CURRENT_USER_ID_FLAG = ""; @@ -36,8 +37,6 @@ namespace { const string MOUNT_PATH_MAP_KEY = "mount-path-map"; const string SANDBOX_JSON_FILE_PATH = "/etc/app_file_service/file_share_sandbox.json"; const string BACKUP_SANDBOX_JSON_FILE_PATH = "/etc/app_file_service/backup_sandbox.json"; - const std::string SHAER_PATH_HEAD = "/mnt/hmdfs/"; - const std::string SHAER_PATH_MID = "/account/cloud_merge_view/files/"; const string FILE_MANAGER_URI_HEAD = "/storage/"; const string FILE_MANAGER_AUTHORITY = "docs"; const string DLP_MANAGER_BUNDLE_NAME = "com.ohos.dlpmanager"; @@ -46,8 +45,6 @@ namespace { const string MEDIA = "media"; const string NETWORK_ID_FLAG = ""; const string LOCAL = "local"; - const int ASSET_IN_BUCKET_NUM_MAX = 1000; - const int ASSET_DIR_START_NUM = 16; const int DECODE_FORMAT_NUM = 16; } @@ -193,116 +190,22 @@ bool SandboxHelper::GetBackupSandboxPathMap() return true; } -static int32_t GetPathSuffix(const std::string &path, string &pathSuffix) +int32_t SandboxHelper::GetMediaPhysicalPath(const std::vector &uriList, + std::vector &physicalPathList) { - size_t pos = path.rfind('.'); - if (pos != string::npos) { - pathSuffix = path.substr(pos); - return 0; - } - return -EINVAL; -} - -static int32_t CalAssetBucket(const int32_t &fileId) -{ - int32_t bucketNum = 0; - if (fileId < 0) { - LOGE("input fileId %{private}d is invalid", fileId); - return -EINVAL; - } - - int32_t start = ASSET_DIR_START_NUM; - int32_t divider = ASSET_DIR_START_NUM; - while (fileId > start * ASSET_IN_BUCKET_NUM_MAX) { - divider = start; - start <<= 1; - } - - int32_t fileIdRemainder = fileId % divider; - if (fileIdRemainder == 0) { - bucketNum = start + fileIdRemainder; - } else { - bucketNum = (start - divider) + fileIdRemainder; - } - return bucketNum; -} - -static int32_t GetFileIdFromFileName(const std::string &fileName) -{ - if (fileName.empty()) { - return -EINVAL; - } - - string tmpName = fileName; - std::replace(tmpName.begin(), tmpName.end(), '_', ' '); - stringstream ss; - ss << tmpName; - - string mediaType; - string dateTime; - string idStr; - string other; - ss >> mediaType >> dateTime >> idStr >> other; - if (idStr.empty()) { - return -EINVAL; - } - - if (!std::all_of(idStr.begin(), idStr.end(), ::isdigit)) { - return -EINVAL; - } - - return std::atoi(idStr.c_str()); -} - -static int32_t GetBucketNum(const std::string &fileName) -{ - int32_t fileId = GetFileIdFromFileName(fileName); - if (fileId < 0) { - LOGE("GetFileIdFromFileName failed with %{private}s", fileName.c_str()); - return fileId; - } - return CalAssetBucket(fileId); -} - -static bool ParseMediaSandboxPath(const string &sandboxPath, MediaUriInfo &mediaUriInfo) -{ - string path = sandboxPath; - std::replace(path.begin(), path.end(), '/', ' '); - stringstream ss; - ss << path; - ss >> mediaUriInfo.mediaType >> mediaUriInfo.fileId >> mediaUriInfo.realName >> mediaUriInfo.displayName; - - string buf; - ss >> buf; - if (!buf.empty()) { - LOGE("media sandboxPath is invalid"); - return false; - } - - return true; -} - -static int32_t GetMediaPhysicalPath(const std::string &sandboxPath, const std::string &userId, - std::string &physicalPath) -{ - MediaUriInfo mediaUriInfo; - if (!ParseMediaSandboxPath(sandboxPath, mediaUriInfo)) { - return -EINVAL; - } - - int32_t bucketNum = GetBucketNum(mediaUriInfo.realName); - if (bucketNum < 0) { + void *handler = dlopen("libmedia_library_handler.z.so", RTLD_LAZY); + if (!handler) { + LOGE("GetMediaPhysicalPath cannot open so, errno = %{public}s", dlerror()); return -EINVAL; } - - std::string mediaSuffix; - if (GetPathSuffix(sandboxPath, mediaSuffix) != 0) { - LOGE("GetPathSuffix failed"); + ConvertFileUriToMntPath convertFileUriToMntPath = + reinterpret_cast(dlsym(handler, "ConvertFileUriToMntPath")); + if (convertFileUriToMntPath == nullptr) { + LOGE("GetMediaPhysicalPath dlsym failed, errno = %{public}s", dlerror()); return -EINVAL; } - - physicalPath = SHAER_PATH_HEAD + userId + SHAER_PATH_MID + mediaUriInfo.mediaType + - BACKFLASH + to_string(bucketNum) + BACKFLASH + mediaUriInfo.realName + mediaSuffix; + convertFileUriToMntPath(uriList, physicalPathList); + LOGE("GetMediaPhysicalPath physicalPath = %{public}s", physicalPathList[0].c_str()); return 0; } @@ -345,7 +248,13 @@ int32_t SandboxHelper::GetPhysicalPath(const std::string &fileUri, const std::st Uri uri(fileUri); string bundleName = uri.GetAuthority(); if (bundleName == MEDIA) { - return GetMediaPhysicalPath(uri.GetPath(), userId, physicalPath); + std::vector fileUriList; + fileUriList.emplace_back(fileUri); + std::vector physicalPathList; + if(GetMediaPhysicalPath(fileUriList, physicalPathList) == 0 && !physicalPathList.empty()){ + physicalPath = physicalPathList.front(); + } + return 0; } string sandboxPath = SandboxHelper::Decode(uri.GetPath()); @@ -381,7 +290,13 @@ int32_t SandboxHelper::GetBackupPhysicalPath(const std::string &fileUri, const s Uri uri(fileUri); string bundleName = uri.GetAuthority(); if (bundleName == MEDIA) { - return GetMediaPhysicalPath(uri.GetPath(), userId, physicalPath); + std::vector fileUriList; + fileUriList.emplace_back(fileUri); + std::vector physicalPathList; + if(GetMediaPhysicalPath(fileUriList, physicalPathList) == 0 && !physicalPathList.empty()){ + physicalPath = physicalPathList.front(); + } + return 0; } string sandboxPath = SandboxHelper::Decode(uri.GetPath()); diff --git a/interfaces/innerkits/native/file_share/include/file_share.h b/interfaces/innerkits/native/file_share/include/file_share.h index b6baef1c3..4cb882fd9 100644 --- a/interfaces/innerkits/native/file_share/include/file_share.h +++ b/interfaces/innerkits/native/file_share/include/file_share.h @@ -25,14 +25,23 @@ namespace AppFileService { using namespace std; class FileShare { private: - static mutex mapMutex_; + static mutex vecMutex_; public: static int32_t CreateShareFile(const vector &uriList, uint32_t tokenId, uint32_t flag, vector &retList); - static int32_t DeleteShareFile(uint32_t tokenId, const vector &uriList); + static int32_t CreateShareFile(const vector &uriList, + uint32_t tokenId, + uint32_t flag, + vector &retList, + const std::string &targetBundleName); + static int32_t DeleteShareFile(uint32_t tokenId, + const vector &uriList); + static int32_t DeleteShareFile(uint32_t tokenId, + const vector &uriList, + const std::string &targetBundleName); }; } // namespace AppFileService } // namespace OHOS diff --git a/interfaces/innerkits/native/file_share/src/file_permission.cpp b/interfaces/innerkits/native/file_share/src/file_permission.cpp index f8668c2a8..5981938dd 100644 --- a/interfaces/innerkits/native/file_share/src/file_permission.cpp +++ b/interfaces/innerkits/native/file_share/src/file_permission.cpp @@ -319,9 +319,6 @@ int32_t FilePermission::ActivatePermission(const vector &uriPolic return EPERM; } vector resultCodes; - for (size_t i = 0; i < pathPolicies.size(); i++) { - resultCodes.emplace_back(0); - } auto &uriPermissionClient = AAFwk::UriPermissionManagerClient::GetInstance(); int32_t sandboxManagerErrorCode = uriPermissionClient.Active(pathPolicies, resultCodes); errorCode = ErrorCodeConversion(sandboxManagerErrorCode, errorResults, resultCodes); diff --git a/interfaces/innerkits/native/file_share/src/file_share.cpp b/interfaces/innerkits/native/file_share/src/file_share.cpp index 0c954afab..d916a124c 100644 --- a/interfaces/innerkits/native/file_share/src/file_share.cpp +++ b/interfaces/innerkits/native/file_share/src/file_share.cpp @@ -65,9 +65,9 @@ struct FileShareInfo { ino_t stIno_; }; -mutex FileShare::mapMutex_; +mutex FileShare::vecMutex_; -static int32_t GetTargetInfo(uint32_t tokenId, string &bundleName, string ¤tUid) +static int32_t GetTargetInfoUserID(uint32_t tokenId, string ¤tUid) { Security::AccessToken::HapTokenInfo hapInfo; int32_t result = Security::AccessToken::AccessTokenKit::GetHapTokenInfo(tokenId, hapInfo); @@ -75,11 +75,22 @@ static int32_t GetTargetInfo(uint32_t tokenId, string &bundleName, string &curre LOGE("Failed to get hap token info %{public}d", result); return result; } - bundleName = hapInfo.bundleName; currentUid = to_string(hapInfo.userID); + return 0; +} + +static int32_t GetTargetInfoBundleName(uint32_t tokenId, string &bundleName) +{ + Security::AccessToken::HapTokenInfo hapInfo; + int32_t result = Security::AccessToken::AccessTokenKit::GetHapTokenInfo(tokenId, hapInfo); + if (result != 0) { + LOGE("Failed to get hap token info %{public}d", result); + return result; + } + bundleName = hapInfo.bundleName; int index = hapInfo.instIndex; - string dirName = "" ; if (index != 0) { + string dirName = "" ; if (hapInfo.dlpType != DLP_COMMON) { bundleName = to_string(index) + "_" + bundleName; } else if (CommonFunc::GetDirByBundleNameAndAppIndex(bundleName, index, dirName)) { @@ -373,9 +384,30 @@ int32_t FileShare::CreateShareFile(const vector &uriList, vector &retList) { LOGI("CreateShareFile start"); - lock_guard lock(mapMutex_); + string targetBundleName; + int32_t ret = GetTargetInfoBundleName(tokenId, targetBundleName); + { + lock_guard lock(vecMutex_); + if (ret != 0) { + retList.push_back(ret); + LOGE("Failed to get target info %{public}d", ret); + return ret; + } + } + return CreateShareFile(uriList, tokenId, flag, retList, targetBundleName); +} + +int32_t FileShare::CreateShareFile(const vector &uriList, + uint32_t tokenId, + uint32_t flag, + vector &retList, + const std::string &targetBundleName) +{ + LOGI("CreateShareFile start"); + lock_guard lock(vecMutex_); FileShareInfo info; - int32_t ret = GetTargetInfo(tokenId, info.targetBundleName_, info.currentUid_); + info.targetBundleName_ = targetBundleName; + int32_t ret = GetTargetInfoUserID(tokenId, info.currentUid_); if (ret != 0) { retList.push_back(ret); LOGE("Failed to get target info %{public}d", ret); @@ -395,15 +427,31 @@ int32_t FileShare::CreateShareFile(const vector &uriList, int32_t FileShare::DeleteShareFile(uint32_t tokenId, const vector &uriList) { - lock_guard lock(mapMutex_); + lock_guard lock(vecMutex_); string bundleName; - string currentUid; - int32_t ret = GetTargetInfo(tokenId, bundleName, currentUid); + string currentUserId; + int32_t ret = GetTargetInfoUserID(tokenId, currentUserId); + int32_t getBundleNameRet = GetTargetInfoBundleName(tokenId, bundleName); + if (ret != 0 || getBundleNameRet != 0) { + LOGE("Failed to delete share file %{public}d", -EINVAL); + return -EINVAL; + } + UmountDelUris(uriList, currentUserId, bundleName); + + LOGI("Delete Share File Successfully!"); + return 0; +} + +int32_t FileShare::DeleteShareFile(uint32_t tokenId, const vector &uriList, const std::string &targetBundleName) +{ + lock_guard lock(vecMutex_); + string currentUserId; + int32_t ret = GetTargetInfoUserID(tokenId, currentUserId); if (ret != 0) { LOGE("Failed to delete share file %{public}d", -EINVAL); return -EINVAL; } - UmountDelUris(uriList, currentUid, bundleName); + UmountDelUris(uriList, currentUserId, targetBundleName); LOGI("Delete Share File Successfully!"); return 0; diff --git a/interfaces/innerkits/native/remote_file_share/src/remote_file_share.cpp b/interfaces/innerkits/native/remote_file_share/src/remote_file_share.cpp index c4ffc9583..2957fa974 100644 --- a/interfaces/innerkits/native/remote_file_share/src/remote_file_share.cpp +++ b/interfaces/innerkits/native/remote_file_share/src/remote_file_share.cpp @@ -426,10 +426,61 @@ int32_t RemoteFileShare::GetDfsUriFromLocal(const std::string &uriStr, const int return 0; } +static int32_t GetMediaDfsUris(const std::vector &uriList, + const int32_t &userId, + std::unordered_map &uriToDfsUriMaps) +{ + LOGI("GetMediaDfsUris start"); + std::string ioctlDir = SHAER_PATH_HEAD + std::to_string(userId) + LOWER_SHARE_PATH_MID; + UniqueFd dirFd(open(ioctlDir.c_str(), O_RDONLY)); + if (dirFd < 0) { + LOGE("Open share path failed with %{public}d", errno); + return errno; + } + LOGI("open ioctlDir end"); + std::string bundleName = MEDIA_BUNDLE_NAME; + std::string networkId = NETWORK_PARA + GetLocalNetworkId(); + std::vector physicalPathList; + int ret = SandboxHelper::GetMediaPhysicalPath(uriList, physicalPathList); + if (ret != 0 || physicalPathList.size() != uriList.size()) { + LOGE("Get physical path failed with %{public}d", ret); + return errno; + } + for (size_t i = 0; i < uriList.size(); i++) { + Uri uri(uriList[i]); + struct HmdfsDstInfo hdi; + std::string distributedPath; + int ret = GetDistributedPath(uri, userId, distributedPath, bundleName); + if (ret != 0) { + LOGE("Path is too long with %{public}d", ret); + return ret; + } + InitHmdfsInfo(hdi, physicalPathList[i], distributedPath, bundleName); + ret = ioctl(dirFd, HMDFS_IOC_GET_DST_PATH, &hdi); + if (ret != 0 && GetMergePathFd(hdi, dirFd, userId) != 0) { + return errno; + } + HmdfsUriInfo dfsUriInfo; + SetHmdfsUriInfo(dfsUriInfo, uri, hdi.size, networkId, bundleName); + uriToDfsUriMaps.insert({uriList[i], dfsUriInfo}); + } + LOGI("GetMediaDfsUris successfully"); + return 0; +} + int32_t RemoteFileShare::GetDfsUrisFromLocal(const std::vector &uriList, const int32_t &userId, std::unordered_map &uriToDfsUriMaps) { + if(uriList.empty()){ + LOGE("uriList size is 0"); + return -EINVAL; + } + Uri fileUri(uriList.front()); + std::string bundleName = fileUri.GetAuthority(); + if (bundleName == MEDIA_AUTHORITY) { + return GetMediaDfsUris(uriList, userId, uriToDfsUriMaps); + } LOGI("GetDfsUrisFromLocal start"); std::string ioctlDir = SHAER_PATH_HEAD + std::to_string(userId) + LOWER_SHARE_PATH_MID; UniqueFd dirFd(open(ioctlDir.c_str(), O_RDONLY)); @@ -441,16 +492,11 @@ int32_t RemoteFileShare::GetDfsUrisFromLocal(const std::vector &uri std::string networkId = NETWORK_PARA + GetLocalNetworkId(); for (auto &uriStr : uriList) { Uri uri(uriStr); - std::string bundleName = uri.GetAuthority(); - LOGD("GetDfsUriFromLocal begin"); std::string physicalPath = GetPhysicalPath(uri, std::to_string(userId)); if (physicalPath == "") { LOGE("Failed to get physical path"); return -EINVAL; } - if (bundleName == MEDIA_AUTHORITY) { - bundleName = MEDIA_BUNDLE_NAME; - } if (bundleName == FILE_MANAGER_AUTHORITY) { HmdfsUriInfo dfsUriInfo; (void)SetPublicDirHmdfsInfo(physicalPath, uriStr, dfsUriInfo, networkId); @@ -458,14 +504,13 @@ int32_t RemoteFileShare::GetDfsUrisFromLocal(const std::vector &uri LOGD("GetDfsUriFromLocal successfully"); continue; } - + struct HmdfsDstInfo hdi; std::string distributedPath; int ret = GetDistributedPath(uri, userId, distributedPath, bundleName); if (ret != 0) { LOGE("Path is too long with %{public}d", ret); return ret; } - struct HmdfsDstInfo hdi; InitHmdfsInfo(hdi, physicalPath, distributedPath, bundleName); ret = ioctl(dirFd, HMDFS_IOC_GET_DST_PATH, &hdi); if (ret != 0 && GetMergePathFd(hdi, dirFd, userId) != 0) { diff --git a/test/unittest/file_share_native/file_share_test.cpp b/test/unittest/file_share_native/file_share_test.cpp index 2a0b3c279..9a07e29c6 100644 --- a/test/unittest/file_share_native/file_share_test.cpp +++ b/test/unittest/file_share_native/file_share_test.cpp @@ -210,6 +210,46 @@ HWTEST_F(FileShareTest, File_share_CreateShareFile_0004, testing::ext::TestSize. GTEST_LOG_(INFO) << "FileShareTest-end File_share_CreateShareFile_0004"; } +/** + * @tc.name: file_share_test_0005 + * @tc.desc: Test function of CreateShareFile() interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H63TL + */ +HWTEST_F(FileShareTest, File_share_CreateShareFile_0005, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileShareTest-begin File_share_CreateShareFile_0000"; + + int32_t uid = 100; + + string bundleNameA = "com.example.filesharea"; + string fileStr = "/data/app/el2/" + to_string(uid) + "/base/" + bundleNameA + "/files/test.txt"; + int32_t fd = open(fileStr.c_str(), O_RDWR | O_CREAT); + ASSERT_TRUE(fd != -1) << "FileShareTest Create File Failed!"; + close(fd); + string uri = "file://" + bundleNameA + "/data/storage/el2/base/files/test.txt"; + + string bundleNameB = "com.example.fileshareb"; + uint32_t tokenId = AccessTokenKit::GetHapTokenID(uid, bundleNameB, 0); + + int32_t flag = 3; + vector uriList(1, uri); + vector retList; + int32_t ret = FileShare::CreateShareFile(uriList, tokenId, flag, retList, bundleNameB); + EXPECT_EQ(ret, E_OK); + + uriList.clear(); + retList.clear(); + uri.clear(); + uri = "file://" + bundleNameA + "/data/storage/el2/base/files/../files/test.txt"; + uriList.push_back(uri); + ret = FileShare::CreateShareFile(uriList, tokenId, flag, retList, bundleNameB); + EXPECT_EQ(ret, -EINVAL); + GTEST_LOG_(INFO) << "FileShareTest-end File_share_CreateShareFile_0000"; +} + /** * @tc.name: file_share_test_0005 * @tc.desc: Test function of DeleteShareFile() interface for SUCCESS. @@ -304,6 +344,30 @@ HWTEST_F(FileShareTest, File_share_DeleteShareFile_0007, testing::ext::TestSize. GTEST_LOG_(INFO) << "FileShareTest-end File_share_DeleteShareFile_0007"; } +/** + * @tc.name: file_share_test_0008 + * @tc.desc: Test function of DeleteShareFile() interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H63TL + */ +HWTEST_F(FileShareTest, File_share_DeleteShareFile_0008, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileShareTest-begin File_share_DeleteShareFile_0005"; + int32_t uid = 100; + + string bundleNameB = "com.example.fileshareb"; + uint32_t tokenId = AccessTokenKit::GetHapTokenID(uid, bundleNameB, 0); + vector sharePathList; + string bundleNameA = "com.example.filesharea"; + string uri = "file://" + bundleNameA + "/data/storage/el2/base/files/test.txt"; + sharePathList.push_back(uri); + int32_t ret = FileShare::DeleteShareFile(tokenId, sharePathList, bundleNameB); + EXPECT_EQ(ret, E_OK); + GTEST_LOG_(INFO) << "FileShareTest-end File_share_DeleteShareFile_0005"; +} + /** * @tc.name: File_share_GetPhysicalPath_0001 * @tc.desc: Test function of GetPhysicalPath() interface for SUCCESS. -- Gitee