diff options
Diffstat (limited to 'libs')
6 files changed, 193 insertions, 47 deletions
diff --git a/libs/samba/build.gradle.kts b/libs/samba/build.gradle.kts index 30046a8..290e77d 100644 --- a/libs/samba/build.gradle.kts +++ b/libs/samba/build.gradle.kts @@ -42,6 +42,7 @@ android { dependencies { implementation(project(":libs:io")) implementation(project(":libs:utils")) + testImplementation(project(":libs:local")) testImplementation(project(":libs:test-utils")) } diff --git a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt index c0f18a4..99914e4 100644 --- a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt +++ b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt @@ -178,7 +178,7 @@ internal object NativeSamba { else -> throw IllegalArgumentException("Unknown type: $type") }, size = size.toULong(), - lastModified = Instant.ofEpochMilli(lastModified), + lastModified = Instant.ofEpochMilli(lastModified * 1000), ) private external fun nativeContextNew(timeoutSeconds: Int): Long diff --git a/libs/samba/src/test/java/org/the_jk/cleversync/samba/SambaTestHelper.kt b/libs/samba/src/test/java/org/the_jk/cleversync/samba/SambaTestHelper.kt new file mode 100644 index 0000000..9172ecf --- /dev/null +++ b/libs/samba/src/test/java/org/the_jk/cleversync/samba/SambaTestHelper.kt @@ -0,0 +1,60 @@ +package org.the_jk.cleversync.samba + +import com.google.common.truth.Truth.assertThat +import org.the_jk.cleversync.io.ModifiableTree +import org.the_jk.cleversync.io.samba.SambaCredentials +import java.io.File + +class SambaTestHelper { + val uri get() = _uri + val shareDir get() = _shareDir + + private lateinit var _uri: String + private lateinit var credentials: SambaCredentials + private lateinit var dockerDir: File + private lateinit var _shareDir: File + private var dockerRunning = false + + fun openTree(): ModifiableTree { + assertThat(_shareDir.listFiles()).isEmpty() + + return SambaTreeFactory.modifiableTree(_uri, credentials).getOrThrow() + } + + fun closeTree(tree: ModifiableTree) { + tree.close() + + for (file in _shareDir.listFiles()!!) { + if (file.isDirectory) { + file.deleteRecursively() + } else { + file.delete() + } + } + } + + fun setUp() { + _uri = "smb://127.0.0.1:10445/Share" + credentials = SambaCredentials("test", "notverysecret") + dockerDir = File(System.getProperty("dockerDir")!!) + _shareDir = File(System.getProperty("shareDir")!!) + _shareDir.deleteRecursively() + _shareDir.mkdirs() + + val pb = ProcessBuilder("docker", "compose", "up", "--wait", "--wait-timeout", "60") + pb.directory(dockerDir) + val exitCode = pb.start().waitFor() + assertThat(exitCode).isEqualTo(0) + dockerRunning = true + } + + fun tearDown() { + if (dockerRunning) { + val pb = ProcessBuilder("docker", "compose", "down") + pb.directory(dockerDir) + pb.start().waitFor() + dockerRunning = false + } + _shareDir.deleteRecursively() + } +} diff --git a/libs/samba/src/test/java/org/the_jk/cleversync/samba/SambaTreeTest.kt b/libs/samba/src/test/java/org/the_jk/cleversync/samba/SambaTreeTest.kt index fd92fc0..630df97 100644 --- a/libs/samba/src/test/java/org/the_jk/cleversync/samba/SambaTreeTest.kt +++ b/libs/samba/src/test/java/org/the_jk/cleversync/samba/SambaTreeTest.kt @@ -13,7 +13,6 @@ import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.robolectric.shadows.ShadowLooper import org.the_jk.cleversync.TreeAbstractTest -import org.the_jk.cleversync.io.samba.SambaCredentials import java.io.File import java.nio.charset.StandardCharsets import java.nio.file.Files @@ -24,35 +23,25 @@ import java.util.concurrent.TimeUnit class SambaTreeTest : TreeAbstractTest() { @Before fun setUpTest() { - assertThat(shareDir.listFiles()).isEmpty() - - tree = SambaTreeFactory.modifiableTree(uri, credentials).getOrThrow() + tree = helper.openTree() } @After fun tearDownTest() { - tree.close() - - for (file in shareDir.listFiles()!!) { - if (file.isDirectory) { - file.deleteRecursively() - } else { - file.delete() - } - } + helper.closeTree(tree) } @Test fun description() { val resources = ApplicationProvider.getApplicationContext<Context>().resources - assertThat(tree.description(resources).toString()).contains(uri) + assertThat(tree.description(resources).toString()).contains(helper.uri) } @Test fun listRootWithSymlink() { - File(shareDir, "dir").mkdir() - File(shareDir, "file").writeText("foo") - Files.createSymbolicLink(File(shareDir, "link").toPath(), File("file").toPath()) + File(helper.shareDir, "dir").mkdir() + File(helper.shareDir, "file").writeText("foo") + Files.createSymbolicLink(File(helper.shareDir, "link").toPath(), File("file").toPath()) val content = tree.list() @@ -76,7 +65,7 @@ class SambaTreeTest : TreeAbstractTest() { @Test fun readExistingFile() { - File(shareDir, "file").writeText("hello world") + File(helper.shareDir, "file").writeText("hello world") val file = tree.openFile("file") assertThat(file?.name).isEqualTo("file") @@ -105,28 +94,28 @@ class SambaTreeTest : TreeAbstractTest() { override fun createFile() { super.createFile() - assertThat(File(shareDir, "foo").readBytes()).isEqualTo(byteArrayOf(1, 2, 3, 4)) + assertThat(File(helper.shareDir, "foo").readBytes()).isEqualTo(byteArrayOf(1, 2, 3, 4)) } @Test override fun overwriteFile() { super.overwriteFile() - assertThat(File(shareDir, "foo").readBytes()).isEqualTo(byteArrayOf(127, 1)) + assertThat(File(helper.shareDir, "foo").readBytes()).isEqualTo(byteArrayOf(127, 1)) } @Test override fun createDirectory() { super.createDirectory() - assertThat(File(shareDir, "foo").isDirectory).isTrue() + assertThat(File(helper.shareDir, "foo").isDirectory).isTrue() } @Test(timeout = 10000) override fun observeCreateDirectory() { super.observeCreateDirectory() - assertThat(File(shareDir, "foo").isDirectory).isTrue() + assertThat(File(helper.shareDir, "foo").isDirectory).isTrue() } // libsmb uses SMB2/SMB3 and unix extensions are SMB1, so no symlinks for now @@ -137,39 +126,19 @@ class SambaTreeTest : TreeAbstractTest() { } companion object { - private lateinit var uri: String - private lateinit var credentials: SambaCredentials - private lateinit var dockerDir: File - private lateinit var shareDir: File - private var dockerRunning = false + private val helper = SambaTestHelper() @BeforeClass @JvmStatic fun setUpClass() { - uri = "smb://127.0.0.1:10445/Share" - credentials = SambaCredentials("test", "notverysecret") - dockerDir = File(System.getProperty("dockerDir")!!) - shareDir = File(System.getProperty("shareDir")!!) - shareDir.deleteRecursively() - shareDir.mkdirs() - - val pb = ProcessBuilder("docker", "compose", "up", "--wait", "--wait-timeout", "60") - pb.directory(dockerDir) - val exitCode = pb.start().waitFor() - assertThat(exitCode).isEqualTo(0) - dockerRunning = true + helper.setUp() } @AfterClass @JvmStatic fun tearDownClass() { - if (dockerRunning) { - val pb = ProcessBuilder("docker", "compose", "down") - pb.directory(dockerDir) - pb.start().waitFor() - dockerRunning = false - } - shareDir.deleteRecursively() + helper.tearDown() } + } } diff --git a/libs/samba/src/test/java/org/the_jk/cleversync/samba/SingleMergeLocalSambaTest.kt b/libs/samba/src/test/java/org/the_jk/cleversync/samba/SingleMergeLocalSambaTest.kt new file mode 100644 index 0000000..82391d7 --- /dev/null +++ b/libs/samba/src/test/java/org/the_jk/cleversync/samba/SingleMergeLocalSambaTest.kt @@ -0,0 +1,58 @@ +package org.the_jk.cleversync.samba + +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.local.LocalTreeFactory + +@Config(manifest=Config.NONE) +@RunWith(RobolectricTestRunner::class) +class SingleMergeLocalSambaTest : BaseSingleMergeTest() { + @Rule + @JvmField + val temp = TemporaryFolder() + + private lateinit var samba: ModifiableTree + + @After + fun tearDownTest() { + helper.closeTree(samba) + } + + override fun source(): ModifiableTree { + return LocalTreeFactory.modifiableTree(temp.root.toPath()) + } + + override fun sourceSupportsSymlinks() = true + + override fun target(): ModifiableTree { + samba = helper.openTree() + return samba + } + + // libsmb uses SMB2/SMB3 and unix extensions are SMB1, so no symlinks for now + override fun targetSupportsSymlinks() = false + + companion object { + private val helper = SambaTestHelper() + + @BeforeClass + @JvmStatic + fun setUpClass() { + helper.setUp() + } + + @AfterClass + @JvmStatic + fun tearDownClass() { + helper.tearDown() + } + } +} diff --git a/libs/samba/src/test/java/org/the_jk/cleversync/samba/SingleMergeSambaLocalTest.kt b/libs/samba/src/test/java/org/the_jk/cleversync/samba/SingleMergeSambaLocalTest.kt new file mode 100644 index 0000000..6ceb076 --- /dev/null +++ b/libs/samba/src/test/java/org/the_jk/cleversync/samba/SingleMergeSambaLocalTest.kt @@ -0,0 +1,58 @@ +package org.the_jk.cleversync.samba + +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.local.LocalTreeFactory + +@Config(manifest=Config.NONE) +@RunWith(RobolectricTestRunner::class) +class SingleMergeSambaLocalTest : BaseSingleMergeTest() { + @Rule + @JvmField + val temp = TemporaryFolder() + + private lateinit var samba: ModifiableTree + + @After + fun tearDownTest() { + helper.closeTree(samba) + } + + override fun source(): ModifiableTree { + samba = helper.openTree() + return samba + } + + // libsmb uses SMB2/SMB3 and unix extensions are SMB1, so no symlinks for now + override fun sourceSupportsSymlinks() = false + + override fun target(): ModifiableTree { + return LocalTreeFactory.modifiableTree(temp.root.toPath()) + } + + override fun targetSupportsSymlinks() = true + + companion object { + private val helper = SambaTestHelper() + + @BeforeClass + @JvmStatic + fun setUpClass() { + helper.setUp() + } + + @AfterClass + @JvmStatic + fun tearDownClass() { + helper.tearDown() + } + } +} |
