diff --git a/apps/emqx_ft/test/emqx_ft_fs_util_SUITE.erl b/apps/emqx_ft/test/emqx_ft_fs_util_SUITE.erl index e4aa70f81..0f6b8a5ae 100644 --- a/apps/emqx_ft/test/emqx_ft_fs_util_SUITE.erl +++ b/apps/emqx_ft/test/emqx_ft_fs_util_SUITE.erl @@ -26,6 +26,51 @@ all() -> emqx_common_test_helpers:all(?MODULE). +%%├── a +%%│ ├── b +%%│ │ └── foo +%%│ │ ├── 42 +%%│ │ └── Я +%%│ └── link -> ../c +%%├── c +%%│ ├── bar +%%│ │ └── 中文 +%%│ └── link -> ../a +%%└── d +%% ├── e +%% │ └── baz +%% │ └── needle +%% └── haystack + +init_per_suite(Config) -> + Root = ?config(data_dir, Config), + A = filename:join([Root, "a", "b", "foo"]), + C = filename:join([Root, "c", "bar"]), + D = filename:join([Root, "d", "e", "baz"]), + + F42 = filename:join([A, "42"]), + F42_1 = filename:join([A, "Я"]), + FBar = filename:join([C, "中文"]), + FNeedle = filename:join([D, "needle"]), + FHayStack = filename:join([Root, "d", "haystack"]), + Files = [F42, F42_1, FBar, FNeedle, FHayStack], + lists:foreach(fun filelib:ensure_dir/1, Files), + %% create files + lists:foreach(fun(File) -> file:write_file(File, <<"">>, [write]) end, Files), + %% create links + ALink = filename:join([Root, "a", "link"]), + CLink = filename:join([Root, "c", "link"]), + make_symlink("../c", ALink), + make_symlink("../a", CLink), + Config. + +end_per_suite(Config) -> + Root = ?config(data_dir, Config), + ok = file:del_dir_r(filename:join([Root, "a"])), + ok = file:del_dir_r(filename:join([Root, "c"])), + ok = file:del_dir_r(filename:join([Root, "d"])), + ok. + t_fold_single_level(Config) -> Root = ?config(data_dir, Config), ?assertMatch( @@ -248,3 +293,7 @@ cons(Entry, Acc) -> sort(L) when is_list(L) -> lists:sort(L). + +make_symlink(FileOrDir, NewLink) -> + _ = file:delete(NewLink), + ok = file:make_symlink(FileOrDir, NewLink). diff --git a/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/a/b/foo/42 b/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/a/b/foo/42 deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/a/b/foo/Я b/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/a/b/foo/Я deleted file mode 100644 index ac31ffd53..000000000 --- a/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/a/b/foo/Я +++ /dev/null @@ -1 +0,0 @@ -Ты diff --git a/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/a/link b/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/a/link deleted file mode 120000 index 1b271d838..000000000 --- a/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/a/link +++ /dev/null @@ -1 +0,0 @@ -../c \ No newline at end of file diff --git a/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/c/bar/中文 b/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/c/bar/中文 deleted file mode 100644 index 2e11eb72f..000000000 --- a/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/c/bar/中文 +++ /dev/null @@ -1 +0,0 @@ -Zhōngwén diff --git a/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/c/link b/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/c/link deleted file mode 120000 index 82f488f26..000000000 --- a/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/c/link +++ /dev/null @@ -1 +0,0 @@ -../a \ No newline at end of file diff --git a/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/d/e/baz/needle b/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/d/e/baz/needle deleted file mode 100644 index d755762d1..000000000 --- a/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/d/e/baz/needle +++ /dev/null @@ -1 +0,0 @@ -haystack diff --git a/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/d/haystack b/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/d/haystack deleted file mode 100644 index a6b681bf4..000000000 --- a/apps/emqx_ft/test/emqx_ft_fs_util_SUITE_data/d/haystack +++ /dev/null @@ -1 +0,0 @@ -needle diff --git a/apps/emqx_utils/test/emqx_utils_fs_SUITE.erl b/apps/emqx_utils/test/emqx_utils_fs_SUITE.erl index 243db98cd..d74a258d4 100644 --- a/apps/emqx_utils/test/emqx_utils_fs_SUITE.erl +++ b/apps/emqx_utils/test/emqx_utils_fs_SUITE.erl @@ -26,6 +26,33 @@ all() -> emqx_common_test_helpers:all(?MODULE). +init_per_suite(Config) -> + Root = ?config(data_dir, Config), + D1 = filename:join([Root, "nonempty", "d1/"]), + D2 = filename:join([Root, "nonempty", "d2/"]), + F1 = filename:join([D1, "1"]), + F2 = filename:join([D1, "2"]), + DeepDir = filename:join([Root, "nonempty", "d2", "deep", "down/"]), + DeepFile = filename:join([DeepDir, "here"]), + Files = [F1, F2, DeepFile], + lists:foreach(fun filelib:ensure_dir/1, Files), + D1LinkMutrec = filename:join([D1, "mutrec"]), + D2LinkMutrec = filename:join([D2, "deep", "mutrec"]), + lists:foreach(fun(File) -> file:write_file(File, <<"">>, [write]) end, Files), + chmod_file(D1, 8#00777), + chmod_file(DeepFile, 8#00600), + make_symlink(DeepDir, D1LinkMutrec), + %% can't file:make_link("../../d1", D2Mutrec) on mac, return {error, eperm} + make_symlink("../../d1", D2LinkMutrec), + {ok, D2MutrecInfo} = file:read_link_info(D2LinkMutrec), + ct:pal("~ts 's file_info is ~p~n", [D2LinkMutrec, D2MutrecInfo]), + Config. + +end_per_suite(Config) -> + Root = ?config(data_dir, Config), + ok = file:del_dir_r(filename:join([Root, "nonempty"])), + ok. + %% t_traverse_dir(Config) -> @@ -115,3 +142,11 @@ t_canonicalize_non_utf8(_) -> badarg, emqx_utils_fs:canonicalize(<<128, 128, 128>>) ). + +chmod_file(File, Mode) -> + {ok, FileInfo} = file:read_file_info(File), + ok = file:write_file_info(File, FileInfo#file_info{mode = Mode}). + +make_symlink(FileOrDir, NewLink) -> + _ = file:delete(NewLink), + ok = file:make_symlink(FileOrDir, NewLink). diff --git a/apps/emqx_utils/test/emqx_utils_fs_SUITE_data/nonempty/d1/1 b/apps/emqx_utils/test/emqx_utils_fs_SUITE_data/nonempty/d1/1 deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/emqx_utils/test/emqx_utils_fs_SUITE_data/nonempty/d1/2 b/apps/emqx_utils/test/emqx_utils_fs_SUITE_data/nonempty/d1/2 deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/emqx_utils/test/emqx_utils_fs_SUITE_data/nonempty/d1/mutrec b/apps/emqx_utils/test/emqx_utils_fs_SUITE_data/nonempty/d1/mutrec deleted file mode 120000 index d378eb1b6..000000000 --- a/apps/emqx_utils/test/emqx_utils_fs_SUITE_data/nonempty/d1/mutrec +++ /dev/null @@ -1 +0,0 @@ -../d2/deep/down \ No newline at end of file diff --git a/apps/emqx_utils/test/emqx_utils_fs_SUITE_data/nonempty/d2/deep/down/here b/apps/emqx_utils/test/emqx_utils_fs_SUITE_data/nonempty/d2/deep/down/here deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/emqx_utils/test/emqx_utils_fs_SUITE_data/nonempty/d2/deep/mutrec b/apps/emqx_utils/test/emqx_utils_fs_SUITE_data/nonempty/d2/deep/mutrec deleted file mode 120000 index 354c7c5c3..000000000 --- a/apps/emqx_utils/test/emqx_utils_fs_SUITE_data/nonempty/d2/deep/mutrec +++ /dev/null @@ -1 +0,0 @@ -../../d1 \ No newline at end of file