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. --- .../cleversync/sftp/SingleMergeLocalSftpTest.kt | 76 +++++++++++++++++++++ .../cleversync/sftp/SingleMergeSftpLocalTest.kt | 77 ++++++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 libs/sftp/src/test/java/org/the_jk/cleversync/sftp/SingleMergeLocalSftpTest.kt create mode 100644 libs/sftp/src/test/java/org/the_jk/cleversync/sftp/SingleMergeSftpLocalTest.kt (limited to 'libs/sftp/src/test/java/org/the_jk') diff --git a/libs/sftp/src/test/java/org/the_jk/cleversync/sftp/SingleMergeLocalSftpTest.kt b/libs/sftp/src/test/java/org/the_jk/cleversync/sftp/SingleMergeLocalSftpTest.kt new file mode 100644 index 0000000..0e61fa6 --- /dev/null +++ b/libs/sftp/src/test/java/org/the_jk/cleversync/sftp/SingleMergeLocalSftpTest.kt @@ -0,0 +1,76 @@ +package org.the_jk.cleversync.sftp + +import androidx.test.core.app.ApplicationProvider +import com.google.common.truth.Truth.assertThat +import org.junit.After +import org.junit.AfterClass +import org.junit.BeforeClass +import org.junit.Rule +import org.junit.rules.TemporaryFolder +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.the_jk.cleversync.io.BaseSingleMergeTest +import org.the_jk.cleversync.io.ModifiableTree +import org.the_jk.cleversync.io.sftp.SftpCredentials +import org.the_jk.cleversync.io.sftp.SftpHostsStorage +import org.the_jk.cleversync.local.LocalTreeFactory + +@Config(manifest=Config.NONE) +@RunWith(RobolectricTestRunner::class) +class SingleMergeLocalSftpTest : BaseSingleMergeTest() { + @Rule + @JvmField + val temp = TemporaryFolder() + + private lateinit var hostsStorage: SftpHostsStorage + private lateinit var sftp: ModifiableTree + + @After + fun tearDownTest() { + sftp.close() + + for (file in helper.shareDir.listFiles()!!) { + if (file.isDirectory) { + file.deleteRecursively() + } else { + file.delete() + } + } + } + + override fun source(): ModifiableTree { + return LocalTreeFactory.modifiableTree(temp.root.toPath()) + } + + override fun sourceSupportsSymlinks() = true + + override fun target(): ModifiableTree { + assertThat(helper.shareDir.listFiles()).isEmpty() + + val credentials = SftpCredentials.SftpPasswordCredentials("user", "notverysecret") + + hostsStorage = SftpHostsStorage(ApplicationProvider.getApplicationContext()) + + sftp = SftpTreeFactory.modifiableTree(helper.uri, credentials, hostsStorage).getOrThrow() + return sftp + } + + override fun targetSupportsSymlinks() = true + + companion object { + private val helper = SftpTestHelper() + + @BeforeClass + @JvmStatic + fun setUpClass() { + helper.setUp() + } + + @AfterClass + @JvmStatic + fun tearDownClass() { + helper.tearDown() + } + } +} diff --git a/libs/sftp/src/test/java/org/the_jk/cleversync/sftp/SingleMergeSftpLocalTest.kt b/libs/sftp/src/test/java/org/the_jk/cleversync/sftp/SingleMergeSftpLocalTest.kt new file mode 100644 index 0000000..eeb473c --- /dev/null +++ b/libs/sftp/src/test/java/org/the_jk/cleversync/sftp/SingleMergeSftpLocalTest.kt @@ -0,0 +1,77 @@ +package org.the_jk.cleversync.sftp + +import androidx.test.core.app.ApplicationProvider +import com.google.common.truth.Truth.assertThat +import org.junit.After +import org.junit.AfterClass +import org.junit.BeforeClass +import org.junit.Rule +import org.junit.rules.TemporaryFolder +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.the_jk.cleversync.io.BaseSingleMergeTest +import org.the_jk.cleversync.io.ModifiableTree +import org.the_jk.cleversync.io.sftp.SftpCredentials +import org.the_jk.cleversync.io.sftp.SftpHostsStorage +import org.the_jk.cleversync.local.LocalTreeFactory +import kotlin.time.Duration.Companion.milliseconds + +@Config(manifest=Config.NONE) +@RunWith(RobolectricTestRunner::class) +class SingleMergeSftpLocalTest : BaseSingleMergeTest() { + @Rule + @JvmField + val temp = TemporaryFolder() + + private lateinit var hostsStorage: SftpHostsStorage + private lateinit var sftp: ModifiableTree + + @After + fun tearDownTest() { + sftp.close() + + for (file in helper.shareDir.listFiles()!!) { + if (file.isDirectory) { + file.deleteRecursively() + } else { + file.delete() + } + } + } + + override fun source(): ModifiableTree { + assertThat(helper.shareDir.listFiles()).isEmpty() + + val credentials = SftpCredentials.SftpPasswordCredentials("user", "notverysecret") + + hostsStorage = SftpHostsStorage(ApplicationProvider.getApplicationContext()) + + sftp = SftpTreeFactory.modifiableTree(helper.uri, credentials, hostsStorage).getOrThrow() + return sftp + } + + override fun sourceSupportsSymlinks() = true + + override fun target(): ModifiableTree { + return LocalTreeFactory.modifiableTree(temp.root.toPath()) + } + + override fun targetSupportsSymlinks() = true + + companion object { + private val helper = SftpTestHelper() + + @BeforeClass + @JvmStatic + fun setUpClass() { + helper.setUp() + } + + @AfterClass + @JvmStatic + fun tearDownClass() { + helper.tearDown() + } + } +} -- cgit v1.2.3-70-g09d2