已合并
新增 CloudDisk 文件不存在和名称过长错误码 #4266
新增 CloudDisk 文件不存在和名称过长错误码 #4266
已合并
phybee创建于 25 天前
9 个文件变更+148-7
Minterfaces/kits/ndk/clouddiskmanager/include/cloud_disk_error_code.h+8-0
@@ -138,6 +138,14 @@ typedef enum CloudDisk_ErrorCode {
138 * @error The parent path of the target path is not a directory.138 * @error The parent path of the target path is not a directory.
139 */139 */
140 CLOUD_DISK_NOT_A_DIRECTORY = 34400023,140 CLOUD_DISK_NOT_A_DIRECTORY = 34400023,
141+ /**
142+ * @error The target path does not exist.
143+ */
144+ CLOUD_DISK_FILE_NOT_EXIST = 34400024,
145+ /**
146+ * @error The target file name is too long.
147+ */
148+ CLOUD_DISK_NAME_TOO_LONG = 34400025,
141} CloudDisk_ErrorCode;149} CloudDisk_ErrorCode;
142 150 
143#ifdef __cplusplus151#ifdef __cplusplus
Minterfaces/kits/ndk/clouddiskmanager/include/oh_cloud_disk_utils.h+2-0
@@ -62,6 +62,8 @@ const std::unordered_map<int32_t, CloudDisk_ErrorCode> innerToNErrTable = {
62 {OHOS::FileManagement::CloudDiskService::CloudDiskServiceErrCode::E_NO_SPACE_LEFT, CLOUD_DISK_NO_SPACE_LEFT},62 {OHOS::FileManagement::CloudDiskService::CloudDiskServiceErrCode::E_NO_SPACE_LEFT, CLOUD_DISK_NO_SPACE_LEFT},
63 {OHOS::FileManagement::CloudDiskService::CloudDiskServiceErrCode::E_NOT_A_DIRECTORY,63 {OHOS::FileManagement::CloudDiskService::CloudDiskServiceErrCode::E_NOT_A_DIRECTORY,
64 CLOUD_DISK_NOT_A_DIRECTORY},64 CLOUD_DISK_NOT_A_DIRECTORY},
65+ {OHOS::FileManagement::CloudDiskService::CloudDiskServiceErrCode::E_FILE_NOT_EXIST, CLOUD_DISK_FILE_NOT_EXIST},
66+ {OHOS::FileManagement::CloudDiskService::CloudDiskServiceErrCode::E_NAME_TOO_LONG, CLOUD_DISK_NAME_TOO_LONG},
65 {OHOS::FileManagement::CloudDiskService::CloudDiskServiceErrCode::E_NOT_SUPPORTED, CLOUD_DISK_NOT_SUPPORTED},67 {OHOS::FileManagement::CloudDiskService::CloudDiskServiceErrCode::E_NOT_SUPPORTED, CLOUD_DISK_NOT_SUPPORTED},
66 {OHOS::FileManagement::CloudDiskService::CloudDiskServiceErrCode::E_PERMISSION_DENIED,68 {OHOS::FileManagement::CloudDiskService::CloudDiskServiceErrCode::E_PERMISSION_DENIED,
67 CLOUD_DISK_PERMISSION_DENIED},69 CLOUD_DISK_PERMISSION_DENIED},
Minterfaces/kits/ndk/clouddiskmanager/src/oh_cloud_disk_utils.cpp+7-1
@@ -15,6 +15,8 @@
15 15 
16#include "oh_cloud_disk_utils.h"16#include "oh_cloud_disk_utils.h"
17 17 
18+#include <cstring>
19+ 
18#include <securec.h>20#include <securec.h>
19 21 
20#include "utils_log.h"22#include "utils_log.h"
@@ -56,10 +58,14 @@ bool IsValidPathInfo(const char *path, size_t length)
56 LOGE("length is invalid: %{public}zu", length);58 LOGE("length is invalid: %{public}zu", length);
57 return false;59 return false;
58 }60 }
61+ if (std::memchr(path, '\0', length) != nullptr) {
62+ LOGE("path contains embedded NUL byte");
63+ return false;
64+ }
59 size_t actualLen = strnlen(path, length + 1);65 size_t actualLen = strnlen(path, length + 1);
60 if (actualLen != length) {66 if (actualLen != length) {
61 LOGE("length not equal to actual string length: %{public}zu", actualLen);67 LOGE("length not equal to actual string length: %{public}zu", actualLen);
62 return false;68 return false;
63 }69 }
64 return true;70 return true;
65-}71+}
Mservices/clouddiskservice/ipc/src/cloud_disk_service.cpp+5-1
@@ -193,6 +193,7 @@ static int32_t NormalizeCreatePlaceholderError(int32_t ret)
193 case E_FILE_ALREADY_EXISTS:193 case E_FILE_ALREADY_EXISTS:
194 case E_NO_SPACE_LEFT:194 case E_NO_SPACE_LEFT:
195 case E_NOT_A_DIRECTORY:195 case E_NOT_A_DIRECTORY:
196+ case E_NAME_TOO_LONG:
196 return ret;197 return ret;
197 default:198 default:
198 return ConvertErrnoToCloudDiskError(ret);199 return ConvertErrnoToCloudDiskError(ret);
@@ -608,9 +609,12 @@ static int32_t ConvertPlaceholderXattrErrno(int32_t error)
608 if (error == ENODATA) {609 if (error == ENODATA) {
609 return E_OK;610 return E_OK;
610 }611 }
611- if (error == ERANGE || error == ENAMETOOLONG) {612+ if (error == ERANGE) {
612 return E_INVALID_ARG;613 return E_INVALID_ARG;
613 }614 }
615+ if (error == ENOENT) {
616+ return E_FILE_NOT_EXIST;
617+ }
614 return ConvertErrnoToCloudDiskError(error);618 return ConvertErrnoToCloudDiskError(error);
615}619}
616 620 
Mtest/unittests/clouddisk_service/BUILD.gn+1-0
@@ -368,6 +368,7 @@ ohos_unittest("cloud_disk_service_test_new") {
368 "${distributedfile_path}/test/unittests/clouddisk_service/mock/cloud_disk_service_manager_mock.cpp",368 "${distributedfile_path}/test/unittests/clouddisk_service/mock/cloud_disk_service_manager_mock.cpp",
369 "${distributedfile_path}/test/unittests/clouddisk_service/mock/cloud_disk_sync_folder_manager_mock.cpp",369 "${distributedfile_path}/test/unittests/clouddisk_service/mock/cloud_disk_sync_folder_manager_mock.cpp",
370 "${distributedfile_path}/test/unittests/clouddisk_service/mock/cloud_disk_service_stub.cpp",370 "${distributedfile_path}/test/unittests/clouddisk_service/mock/cloud_disk_service_stub.cpp",
371+ "${distributedfile_path}/test/unittests/clouddisk_service/mock/ffrt_timer_api_mock.cpp",
371 "${services_path}/clouddiskservice/ipc/src/account_status_listener.cpp",372 "${services_path}/clouddiskservice/ipc/src/account_status_listener.cpp",
372 "${services_path}/clouddiskservice/ipc/src/cloud_disk_service_callback_manager.cpp",373 "${services_path}/clouddiskservice/ipc/src/cloud_disk_service_callback_manager.cpp",
373 "${services_path}/clouddiskservice/ipc/src/cloud_disk_service_callback_proxy.cpp",374 "${services_path}/clouddiskservice/ipc/src/cloud_disk_service_callback_proxy.cpp",
Mtest/unittests/clouddiskservice/ipc/cloud_disk_service_static_test.cpp+35-5
@@ -37,6 +37,7 @@ constexpr int32_t TEST_CLOUD_DISK_SERVICE_SA_ID = 5207;
37constexpr bool TEST_RUN_ON_CREATE = true;37constexpr bool TEST_RUN_ON_CREATE = true;
38constexpr size_t PLACEHOLDER_XATTR_VALUE_SIZE = 1;38constexpr size_t PLACEHOLDER_XATTR_VALUE_SIZE = 1;
39constexpr int32_t MOCK_SYSCALL_FAILED = -1;39constexpr int32_t MOCK_SYSCALL_FAILED = -1;
40+constexpr int32_t TEST_PARENT_FD = 10;
40const std::string TEST_BUNDLE = "ohos.clouddiskservice.test";41const std::string TEST_BUNDLE = "ohos.clouddiskservice.test";
41const std::string TEST_SYNC_FOLDER = "/storage/Users/currentUser/testdir";42const std::string TEST_SYNC_FOLDER = "/storage/Users/currentUser/testdir";
42const std::string TEST_SYNC_FOLDER_PHYSICAL = "/data/service/el2/100/hmdfs/account/files/Docs/testdir";43const std::string TEST_SYNC_FOLDER_PHYSICAL = "/data/service/el2/100/hmdfs/account/files/Docs/testdir";
@@ -566,7 +567,7 @@ HWTEST_F(CloudDiskServiceStaticTest, QueryPlaceholderByXattrTest003, TestSize.Le
566 567 
567/**568/**
568 * @tc.name: QueryPlaceholderByXattrTest004569 * @tc.name: QueryPlaceholderByXattrTest004
569- * @tc.desc: Verify first getxattr failure is converted to service error code570+ * @tc.desc: Verify first getxattr missing file failure is converted to file not exist
570 * @tc.type: FUNC571 * @tc.type: FUNC
571 * @tc.require: NA572 * @tc.require: NA
572 */573 */
@@ -579,7 +580,7 @@ HWTEST_F(CloudDiskServiceStaticTest, QueryPlaceholderByXattrTest004, TestSize.Le
579 580 
580 auto res = QueryPlaceholderByXattr(PLACEHOLDER_TEST_PATH, isPlaceholder);581 auto res = QueryPlaceholderByXattr(PLACEHOLDER_TEST_PATH, isPlaceholder);
581 582 
582- EXPECT_EQ(res, E_SYNC_FOLDER_PATH_NOT_EXIST);583+ EXPECT_EQ(res, E_FILE_NOT_EXIST);
583 EXPECT_FALSE(isPlaceholder);584 EXPECT_FALSE(isPlaceholder);
584 } catch (...) {585 } catch (...) {
585 EXPECT_TRUE(false);586 EXPECT_TRUE(false);
@@ -741,7 +742,7 @@ HWTEST_F(CloudDiskServiceStaticTest, QueryPlaceholderByXattrTest010, TestSize.Le
741 742 
742/**743/**
743 * @tc.name: QueryPlaceholderByXattrTest011744 * @tc.name: QueryPlaceholderByXattrTest011
744- * @tc.desc: Verify second getxattr ENAMETOOLONG is converted to invalid argument745+ * @tc.desc: Verify second getxattr ENAMETOOLONG is converted to name too long
745 * @tc.type: FUNC746 * @tc.type: FUNC
746 * @tc.require: NA747 * @tc.require: NA
747 */748 */
@@ -754,7 +755,7 @@ HWTEST_F(CloudDiskServiceStaticTest, QueryPlaceholderByXattrTest011, TestSize.Le
754 755 
755 auto res = QueryPlaceholderByXattr(PLACEHOLDER_TEST_PATH, isPlaceholder);756 auto res = QueryPlaceholderByXattr(PLACEHOLDER_TEST_PATH, isPlaceholder);
756 757 
757- EXPECT_EQ(res, E_INVALID_ARG);758+ EXPECT_EQ(res, E_NAME_TOO_LONG);
758 EXPECT_FALSE(isPlaceholder);759 EXPECT_FALSE(isPlaceholder);
759 } catch (...) {760 } catch (...) {
760 EXPECT_TRUE(false);761 EXPECT_TRUE(false);
@@ -850,6 +851,8 @@ HWTEST_F(CloudDiskServiceStaticTest, ConvertPlaceholderXattrErrnoTest001, TestSi
850 GTEST_LOG_(INFO) << "ConvertPlaceholderXattrErrnoTest001 start";851 GTEST_LOG_(INFO) << "ConvertPlaceholderXattrErrnoTest001 start";
851 EXPECT_EQ(ConvertPlaceholderXattrErrno(ENODATA), E_OK);852 EXPECT_EQ(ConvertPlaceholderXattrErrno(ENODATA), E_OK);
852 EXPECT_EQ(ConvertPlaceholderXattrErrno(ERANGE), E_INVALID_ARG);853 EXPECT_EQ(ConvertPlaceholderXattrErrno(ERANGE), E_INVALID_ARG);
854+ EXPECT_EQ(ConvertPlaceholderXattrErrno(ENAMETOOLONG), E_NAME_TOO_LONG);
855+ EXPECT_EQ(ConvertPlaceholderXattrErrno(ENOENT), E_FILE_NOT_EXIST);
853 EXPECT_EQ(ConvertPlaceholderXattrErrno(EIO), E_TRY_AGAIN);856 EXPECT_EQ(ConvertPlaceholderXattrErrno(EIO), E_TRY_AGAIN);
854 GTEST_LOG_(INFO) << "ConvertPlaceholderXattrErrnoTest001 end";857 GTEST_LOG_(INFO) << "ConvertPlaceholderXattrErrnoTest001 end";
855}858}
@@ -1231,7 +1234,7 @@ HWTEST_F(CloudDiskServiceStaticTest, IsPlaceholderFileInnerTest011, TestSize.Lev
1231 1234 
1232#ifdef SUPPORT_CLOUD_DISK_SERVICE1235#ifdef SUPPORT_CLOUD_DISK_SERVICE
1233 CloudDiskSyncFolder::GetInstance().ClearMap();1236 CloudDiskSyncFolder::GetInstance().ClearMap();
1234- EXPECT_EQ(res, E_SYNC_FOLDER_PATH_NOT_EXIST);1237+ EXPECT_EQ(res, E_FILE_NOT_EXIST);
1235 EXPECT_FALSE(isPlaceholder);1238 EXPECT_FALSE(isPlaceholder);
1236#else1239#else
1237 EXPECT_EQ(res, E_NOT_SUPPORTED);1240 EXPECT_EQ(res, E_NOT_SUPPORTED);
@@ -1720,6 +1723,8 @@ HWTEST_F(CloudDiskServiceStaticTest, CreatePlaceholderBranchTest009, TestSize.Le
1720 EXPECT_EQ(ConvertErrnoToCloudDiskError(EINVAL), E_INVALID_ARG);1723 EXPECT_EQ(ConvertErrnoToCloudDiskError(EINVAL), E_INVALID_ARG);
1721 EXPECT_EQ(ConvertErrnoToCloudDiskError(EISDIR), E_INVALID_ARG);1724 EXPECT_EQ(ConvertErrnoToCloudDiskError(EISDIR), E_INVALID_ARG);
1722 EXPECT_EQ(ConvertErrnoToCloudDiskError(ELOOP), E_INVALID_ARG);1725 EXPECT_EQ(ConvertErrnoToCloudDiskError(ELOOP), E_INVALID_ARG);
1726+ GTEST_LOG_(INFO) << "[BRANCH] ConvertErrnoToCloudDiskError name too long errno";
1727+ EXPECT_EQ(ConvertErrnoToCloudDiskError(ENAMETOOLONG), E_NAME_TOO_LONG);
1723 GTEST_LOG_(INFO) << "[BRANCH] ConvertErrnoToCloudDiskError missing sync folder errno";1728 GTEST_LOG_(INFO) << "[BRANCH] ConvertErrnoToCloudDiskError missing sync folder errno";
1724 EXPECT_EQ(ConvertErrnoToCloudDiskError(ENOENT), E_SYNC_FOLDER_PATH_NOT_EXIST);1729 EXPECT_EQ(ConvertErrnoToCloudDiskError(ENOENT), E_SYNC_FOLDER_PATH_NOT_EXIST);
1725 GTEST_LOG_(INFO) << "[BRANCH] ConvertErrnoToCloudDiskError permission denied errno";1730 GTEST_LOG_(INFO) << "[BRANCH] ConvertErrnoToCloudDiskError permission denied errno";
@@ -1748,6 +1753,7 @@ HWTEST_F(CloudDiskServiceStaticTest, CreatePlaceholderBranchTest010, TestSize.Le
1748 EXPECT_EQ(NormalizeCreatePlaceholderError(E_FILE_ALREADY_EXISTS), E_FILE_ALREADY_EXISTS);1753 EXPECT_EQ(NormalizeCreatePlaceholderError(E_FILE_ALREADY_EXISTS), E_FILE_ALREADY_EXISTS);
1749 EXPECT_EQ(NormalizeCreatePlaceholderError(E_NO_SPACE_LEFT), E_NO_SPACE_LEFT);1754 EXPECT_EQ(NormalizeCreatePlaceholderError(E_NO_SPACE_LEFT), E_NO_SPACE_LEFT);
1750 EXPECT_EQ(NormalizeCreatePlaceholderError(E_NOT_A_DIRECTORY), E_NOT_A_DIRECTORY);1755 EXPECT_EQ(NormalizeCreatePlaceholderError(E_NOT_A_DIRECTORY), E_NOT_A_DIRECTORY);
1756+ EXPECT_EQ(NormalizeCreatePlaceholderError(E_NAME_TOO_LONG), E_NAME_TOO_LONG);
1751 GTEST_LOG_(INFO) << "[BRANCH] NormalizeCreatePlaceholderError errno fallback";1757 GTEST_LOG_(INFO) << "[BRANCH] NormalizeCreatePlaceholderError errno fallback";
1752 EXPECT_EQ(NormalizeCreatePlaceholderError(ENOENT), E_SYNC_FOLDER_PATH_NOT_EXIST);1758 EXPECT_EQ(NormalizeCreatePlaceholderError(ENOENT), E_SYNC_FOLDER_PATH_NOT_EXIST);
1753 GTEST_LOG_(INFO) << "CreatePlaceholderBranchTest010 end";1759 GTEST_LOG_(INFO) << "CreatePlaceholderBranchTest010 end";
@@ -1884,6 +1890,30 @@ HWTEST_F(CloudDiskServiceStaticTest, CreatePlaceholderFileInnerBranchTest006, Te
1884 GTEST_LOG_(INFO) << "CreatePlaceholderFileInnerBranchTest006 end";1890 GTEST_LOG_(INFO) << "CreatePlaceholderFileInnerBranchTest006 end";
1885}1891}
1886 1892 
1893+/**
1894+ * @tc.name: CreatePlaceholderFileInnerBranchTest008
1895+ * @tc.desc: Verify CreatePlaceholderFileInner keeps file name too long errors
1896+ * @tc.type: FUNC
1897+ * @tc.require: NA
1898+ */
1899+HWTEST_F(CloudDiskServiceStaticTest, CreatePlaceholderFileInnerBranchTest008, TestSize.Level1)
1900+{
1901+ GTEST_LOG_(INFO) << "CreatePlaceholderFileInnerBranchTest008 start";
1902+ GTEST_LOG_(INFO) << "[BRANCH] CreatePlaceholderFileInner file name too long";
1903+ RegisterPlaceholderSyncFolder();
1904+ CloudDiskService service;
1905+ PlaceholderInfo info;
1906+ 
1907+ Assistant::mockErrno = ENAMETOOLONG;
1908+ EXPECT_CALL(*dfsuAccessToken_, GetUserId()).WillOnce(Return(TEST_USER_ID));
1909+ EXPECT_CALL(*dfsuAccessToken_, GetCallerBundleName(_))
1910+ .WillOnce(DoAll(SetArgReferee<0>(TEST_BUNDLE), Return(E_OK)));
1911+ EXPECT_CALL(*insMock_, Open(_, _, _)).WillOnce(Return(TEST_PARENT_FD));
1912+ EXPECT_CALL(*insMock_, OpenAt(TEST_PARENT_FD, _, _, _)).WillOnce(Return(MOCK_SYSCALL_FAILED));
1913+ EXPECT_EQ(service.CreatePlaceholderFileInner(TEST_SYNC_FOLDER, TEST_RELATIVE_PATH, info), E_NAME_TOO_LONG);
1914+ GTEST_LOG_(INFO) << "CreatePlaceholderFileInnerBranchTest008 end";
1915+}
1916+ 
1887/**1917/**
1888 * @tc.name: CreatePlaceholderFileInnerBranchTest0071918 * @tc.name: CreatePlaceholderFileInnerBranchTest007
1889 * @tc.desc: Verify CreatePlaceholderFileInner returns success after file create and ioctl1919 * @tc.desc: Verify CreatePlaceholderFileInner returns success after file create and ioctl
Mtest/unittests/ndk/cloud_disk_manager_test.cpp+86-0
@@ -253,6 +253,26 @@ HWTEST_F(CloudDiskManagerTest, IsValidPathInfoTest004, TestSize.Level1)
253 GTEST_LOG_(INFO) << "IsValidPathInfoTest004 end";253 GTEST_LOG_(INFO) << "IsValidPathInfoTest004 end";
254}254}
255 255 
256+/**
257+ * @tc.name: IsValidPathInfoTest005
258+ * @tc.desc: Verify IsValidPathInfo rejects paths with embedded NUL bytes
259+ * @tc.type: FUNC
260+ * @tc.require: NA
261+ */
262+HWTEST_F(CloudDiskManagerTest, IsValidPathInfoTest005, TestSize.Level1)
263+{
264+ GTEST_LOG_(INFO) << "IsValidPathInfoTest005 start";
265+ try {
266+ char value[] = {'1', '2', '\0', '4'};
267+ bool ret = IsValidPathInfo(value, sizeof(value));
268+ EXPECT_EQ(ret, false);
269+ } catch (...) {
270+ EXPECT_TRUE(false);
271+ GTEST_LOG_(INFO) << "IsValidPathInfoTest005 failed";
272+ }
273+ GTEST_LOG_(INFO) << "IsValidPathInfoTest005 end";
274+}
275+ 
256/**276/**
257 * @tc.name: ConvertToErrorCodeTest001277 * @tc.name: ConvertToErrorCodeTest001
258 * @tc.desc: Verify the ConvertToErrorCode function278 * @tc.desc: Verify the ConvertToErrorCode function
@@ -309,6 +329,8 @@ HWTEST_F(CloudDiskManagerTest, ConvertToErrorCodeTest003, TestSize.Level1)
309 EXPECT_EQ(ConvertToErrorCode(E_FILE_ALREADY_EXISTS), CloudDisk_ErrorCode::CLOUD_DISK_FILE_ALREADY_EXISTS);329 EXPECT_EQ(ConvertToErrorCode(E_FILE_ALREADY_EXISTS), CloudDisk_ErrorCode::CLOUD_DISK_FILE_ALREADY_EXISTS);
310 EXPECT_EQ(ConvertToErrorCode(E_NO_SPACE_LEFT), CloudDisk_ErrorCode::CLOUD_DISK_NO_SPACE_LEFT);330 EXPECT_EQ(ConvertToErrorCode(E_NO_SPACE_LEFT), CloudDisk_ErrorCode::CLOUD_DISK_NO_SPACE_LEFT);
311 EXPECT_EQ(ConvertToErrorCode(E_NOT_A_DIRECTORY), CloudDisk_ErrorCode::CLOUD_DISK_NOT_A_DIRECTORY);331 EXPECT_EQ(ConvertToErrorCode(E_NOT_A_DIRECTORY), CloudDisk_ErrorCode::CLOUD_DISK_NOT_A_DIRECTORY);
332+ EXPECT_EQ(ConvertToErrorCode(E_FILE_NOT_EXIST), CloudDisk_ErrorCode::CLOUD_DISK_FILE_NOT_EXIST);
333+ EXPECT_EQ(ConvertToErrorCode(E_NAME_TOO_LONG), CloudDisk_ErrorCode::CLOUD_DISK_NAME_TOO_LONG);
312 } catch (...) {334 } catch (...) {
313 EXPECT_TRUE(false);335 EXPECT_TRUE(false);
314 GTEST_LOG_(INFO) << "ConvertToErrorCodeTest003 failed";336 GTEST_LOG_(INFO) << "ConvertToErrorCodeTest003 failed";
@@ -479,6 +501,14 @@ HWTEST_F(CloudDiskManagerTest, CreatePlaceholderFileTest005, TestSize.Level1)
479 auto ret = OH_CloudDisk_CreatePlaceholder(syncFolderPath, relativePathInfo, info);501 auto ret = OH_CloudDisk_CreatePlaceholder(syncFolderPath, relativePathInfo, info);
480 502 
481 EXPECT_EQ(ret, CloudDisk_ErrorCode::CLOUD_DISK_FILE_ALREADY_EXISTS);503 EXPECT_EQ(ret, CloudDisk_ErrorCode::CLOUD_DISK_FILE_ALREADY_EXISTS);
504+ Mock::VerifyAndClearExpectations(&mock);
505+ 
506+ EXPECT_CALL(mock, CreatePlaceholderFile(syncFolder, relativePath, _))
507+ .WillOnce(Return(E_NAME_TOO_LONG));
508+ 
509+ ret = OH_CloudDisk_CreatePlaceholder(syncFolderPath, relativePathInfo, info);
510+ 
511+ EXPECT_EQ(ret, CloudDisk_ErrorCode::CLOUD_DISK_NAME_TOO_LONG);
482 GTEST_LOG_(INFO) << "CreatePlaceholderFileTest005 end";512 GTEST_LOG_(INFO) << "CreatePlaceholderFileTest005 end";
483}513}
484 514 
@@ -636,4 +666,60 @@ HWTEST_F(CloudDiskManagerTest, IsPlaceholderFileIpcTest006, TestSize.Level1)
636 }666 }
637 GTEST_LOG_(INFO) << "IsPlaceholderFileIpcTest006 end";667 GTEST_LOG_(INFO) << "IsPlaceholderFileIpcTest006 end";
638}668}
669+ 
670+/**
671+ * @tc.name: IsPlaceholderFileIpcTest007
672+ * @tc.desc: Verify OH_CloudDisk_IsPlaceholderFile maps target file missing errors
673+ * @tc.type: FUNC
674+ * @tc.require: NA
675+ */
676+HWTEST_F(CloudDiskManagerTest, IsPlaceholderFileIpcTest007, TestSize.Level1)
677+{
678+ GTEST_LOG_(INFO) << "IsPlaceholderFileIpcTest007 start";
679+ try {
680+ CloudDisk_SyncFolderPath syncFolderPath = ToPathInfo(SANDBOX_SYNC_FOLDER);
681+ CloudDisk_PathInfo path = ToPathInfo(RELATIVE_FILE_PATH);
682+ auto &mock = CloudDiskServiceManagerMock::GetInstance();
683+ EXPECT_CALL(mock, IsPlaceholderFile(SANDBOX_SYNC_FOLDER, RELATIVE_FILE_PATH, _))
684+ .WillOnce(Return(E_FILE_NOT_EXIST));
685+ 
686+ bool isPlaceholder = true;
687+ CloudDisk_ErrorCode ret = OH_CloudDisk_IsPlaceholderFile(syncFolderPath, path, &isPlaceholder);
688+ 
689+ EXPECT_EQ(ret, CloudDisk_ErrorCode::CLOUD_DISK_FILE_NOT_EXIST);
690+ EXPECT_FALSE(isPlaceholder);
691+ } catch (...) {
692+ EXPECT_TRUE(false);
693+ GTEST_LOG_(INFO) << "IsPlaceholderFileIpcTest007 failed";
694+ }
695+ GTEST_LOG_(INFO) << "IsPlaceholderFileIpcTest007 end";
696+}
697+ 
698+/**
699+ * @tc.name: IsPlaceholderFileIpcTest008
700+ * @tc.desc: Verify OH_CloudDisk_IsPlaceholderFile maps name too long errors
701+ * @tc.type: FUNC
702+ * @tc.require: NA
703+ */
704+HWTEST_F(CloudDiskManagerTest, IsPlaceholderFileIpcTest008, TestSize.Level1)
705+{
706+ GTEST_LOG_(INFO) << "IsPlaceholderFileIpcTest008 start";
707+ try {
708+ CloudDisk_SyncFolderPath syncFolderPath = ToPathInfo(SANDBOX_SYNC_FOLDER);
709+ CloudDisk_PathInfo path = ToPathInfo(RELATIVE_FILE_PATH);
710+ auto &mock = CloudDiskServiceManagerMock::GetInstance();
711+ EXPECT_CALL(mock, IsPlaceholderFile(SANDBOX_SYNC_FOLDER, RELATIVE_FILE_PATH, _))
712+ .WillOnce(Return(E_NAME_TOO_LONG));
713+ 
714+ bool isPlaceholder = true;
715+ CloudDisk_ErrorCode ret = OH_CloudDisk_IsPlaceholderFile(syncFolderPath, path, &isPlaceholder);
716+ 
717+ EXPECT_EQ(ret, CloudDisk_ErrorCode::CLOUD_DISK_NAME_TOO_LONG);
718+ EXPECT_FALSE(isPlaceholder);
719+ } catch (...) {
720+ EXPECT_TRUE(false);
721+ GTEST_LOG_(INFO) << "IsPlaceholderFileIpcTest008 failed";
722+ }
723+ GTEST_LOG_(INFO) << "IsPlaceholderFileIpcTest008 end";
724+}
639} // namespace OHOS::FileManagement::CloudDiskService::Test725} // namespace OHOS::FileManagement::CloudDiskService::Test
Mutils/clouddiskservice/include/cloud_disk_service_error.h+2-0
@@ -44,6 +44,8 @@ enum CloudDiskServiceErrCode : uint32_t {
44 E_HYDRATE_IN_PROGRESS = 34400019,44 E_HYDRATE_IN_PROGRESS = 34400019,
45 E_NO_SPACE_LEFT = 34400020,45 E_NO_SPACE_LEFT = 34400020,
46 E_NOT_A_DIRECTORY = 34400023,46 E_NOT_A_DIRECTORY = 34400023,
47+ E_FILE_NOT_EXIST = 34400024,
48+ E_NAME_TOO_LONG = 34400025,
47 E_NOT_SUPPORTED = 801,49 E_NOT_SUPPORTED = 801,
48 E_PERMISSION_DENIED = 201,50 E_PERMISSION_DENIED = 201,
49};51};
Mutils/clouddiskservice/src/cloud_disk_service_utils.cpp+2-0
@@ -77,6 +77,8 @@ int32_t ConvertErrnoToCloudDiskError(int32_t err)
77 case EISDIR:77 case EISDIR:
78 case ELOOP:78 case ELOOP:
79 return E_INVALID_ARG;79 return E_INVALID_ARG;
80+ case ENAMETOOLONG:
81+ return E_NAME_TOO_LONG;
80 case ENOENT:82 case ENOENT:
81 return E_SYNC_FOLDER_PATH_NOT_EXIST;83 return E_SYNC_FOLDER_PATH_NOT_EXIST;
82 case EACCES:84 case EACCES: