From 882520f3baee410647c3b99d608cc8fe18b0f5d0 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Sat, 9 Nov 2024 16:17:44 +0100 Subject: sftp: add single merge tests for both local <-> sftp and sftp <-> local Had to fixup the symlink code in Sftp, most importantly add a PathUtils relativeTo to fixup relative links. --- .../the_jk/cleversync/io/BaseSingleMergeTest.kt | 33 +++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'libs/test-utils/src/main/java') diff --git a/libs/test-utils/src/main/java/org/the_jk/cleversync/io/BaseSingleMergeTest.kt b/libs/test-utils/src/main/java/org/the_jk/cleversync/io/BaseSingleMergeTest.kt index 156f978..2b53a06 100644 --- a/libs/test-utils/src/main/java/org/the_jk/cleversync/io/BaseSingleMergeTest.kt +++ b/libs/test-utils/src/main/java/org/the_jk/cleversync/io/BaseSingleMergeTest.kt @@ -156,7 +156,6 @@ abstract class BaseSingleMergeTest { src.createLink("link1", srcFoo) src.createLink("link2", "does-not-exist") - src.createLink("link3", "../../escaped") val actions = SingleMerge.calculate(tgt, src) assertThat(actions).containsExactly( @@ -182,6 +181,38 @@ abstract class BaseSingleMergeTest { assertThat(tgt.openLink("link3")).isNull() } + @Test + fun symlinkOutsideRoot() { + Assume.assumeTrue(sourceSupportsSymlinks()) + + val link = src.createLink("bad_link", "../../escaped") + + // Some sources doesn't allow to create symlinks that point outside filesystem + when (val target = link.resolve()) { + is Link.NoTarget -> Assume.assumeTrue(target.path == "../../escaped") + is Link.FileTarget, + is Link.DirectoryTarget, + -> Assert.fail("Should not target anything") + } + + + val actions = SingleMerge.calculate(tgt, src) + assertThat(actions).isEmpty() + } + + @Test + fun symlinkOutsideDir() { + Assume.assumeTrue(sourceSupportsSymlinks()) + + val dir = src.createDirectory("foo") + val escaped = src.createDirectory("escaped") + dir.createLink("bad_link", escaped) + src.removeDirectory("escaped") + + val actions = SingleMerge.calculate(tgt, dir) + assertThat(actions).isEmpty() + } + @Test fun resolveSymlink() { Assume.assumeTrue(sourceSupportsSymlinks()) -- cgit v1.2.3-70-g09d2