已合并
新增 CloudDisk 文件不存在和名称过长错误码 #4266
phybee创建于 25 天前
新增 CloudDisk 文件不存在和名称过长错误码 #4266
已合并
共 9 个文件变更+148-7
| @@ -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 | 151 | ||
| @@ -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}, |
| @@ -15,6 +15,8 @@ | |||
| 15 | 15 | ||
| 16 | 16 | ||
| 17 | 17 | ||
| 18 | + | ||
| 19 | + | ||
| 18 | 20 | ||
| 19 | 21 | ||
| 20 | 22 | ||
| @@ -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 | +} |
| @@ -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 | ||
| @@ -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", |
| @@ -37,6 +37,7 @@ constexpr int32_t TEST_CLOUD_DISK_SERVICE_SA_ID = 5207; | |||
| 37 | constexpr bool TEST_RUN_ON_CREATE = true; | 37 | constexpr bool TEST_RUN_ON_CREATE = true; |
| 38 | constexpr size_t PLACEHOLDER_XATTR_VALUE_SIZE = 1; | 38 | constexpr size_t PLACEHOLDER_XATTR_VALUE_SIZE = 1; |
| 39 | constexpr int32_t MOCK_SYSCALL_FAILED = -1; | 39 | constexpr int32_t MOCK_SYSCALL_FAILED = -1; |
| 40 | +constexpr int32_t TEST_PARENT_FD = 10; | ||
| 40 | const std::string TEST_BUNDLE = "ohos.clouddiskservice.test"; | 41 | const std::string TEST_BUNDLE = "ohos.clouddiskservice.test"; |
| 41 | const std::string TEST_SYNC_FOLDER = "/storage/Users/currentUser/testdir"; | 42 | const std::string TEST_SYNC_FOLDER = "/storage/Users/currentUser/testdir"; |
| 42 | const std::string TEST_SYNC_FOLDER_PHYSICAL = "/data/service/el2/100/hmdfs/account/files/Docs/testdir"; | 43 | const 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: QueryPlaceholderByXattrTest004 | 569 | * @tc.name: QueryPlaceholderByXattrTest004 |
| 569 | - * @tc.desc: Verify first getxattr failure is converted to service error code | 570 | + * @tc.desc: Verify first getxattr missing file failure is converted to file not exist |
| 570 | * @tc.type: FUNC | 571 | * @tc.type: FUNC |
| 571 | * @tc.require: NA | 572 | * @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: QueryPlaceholderByXattrTest011 | 744 | * @tc.name: QueryPlaceholderByXattrTest011 |
| 744 | - * @tc.desc: Verify second getxattr ENAMETOOLONG is converted to invalid argument | 745 | + * @tc.desc: Verify second getxattr ENAMETOOLONG is converted to name too long |
| 745 | * @tc.type: FUNC | 746 | * @tc.type: FUNC |
| 746 | * @tc.require: NA | 747 | * @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 | 1235 | ||
| 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 | 1239 | ||
| 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: CreatePlaceholderFileInnerBranchTest007 | 1918 | * @tc.name: CreatePlaceholderFileInnerBranchTest007 |
| 1889 | * @tc.desc: Verify CreatePlaceholderFileInner returns success after file create and ioctl | 1919 | * @tc.desc: Verify CreatePlaceholderFileInner returns success after file create and ioctl |
| @@ -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: ConvertToErrorCodeTest001 | 277 | * @tc.name: ConvertToErrorCodeTest001 |
| 258 | * @tc.desc: Verify the ConvertToErrorCode function | 278 | * @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::Test | 725 | } // namespace OHOS::FileManagement::CloudDiskService::Test |
| @@ -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 | }; |
| @@ -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: |