summaryrefslogtreecommitdiff
path: root/libs/samba/src/test/java/org
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@spawned.biz>2024-08-22 00:10:26 +0200
committerJoel Klinghed <the_jk@spawned.biz>2024-08-22 00:23:23 +0200
commitd7eefa8066b8e2ac70e0a4080c52bce20da24a23 (patch)
tree2d2ccae50b30f82ced23363a17653e31c0d79804 /libs/samba/src/test/java/org
parent275de81f854be66f575e3c8e36a0c1b56281e788 (diff)
samba: Add docker server run by tests
Current user needs to be in docker group (or in some other way have access to the docker.socket) for this to work. Two current problems: * listRoot() fails, no directories are found. * gradle hangs after running the samba tests
Diffstat (limited to 'libs/samba/src/test/java/org')
-rw-r--r--libs/samba/src/test/java/org/the_jk/cleversync/samba/SambaTreeTest.kt108
1 files changed, 94 insertions, 14 deletions
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 3f1fa04..b581df9 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
@@ -1,39 +1,119 @@
package org.the_jk.cleversync.samba
+import android.content.Context
+import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
import org.junit.After
+import org.junit.AfterClass
import org.junit.Before
+import org.junit.BeforeClass
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
+import org.the_jk.cleversync.io.Link
import org.the_jk.cleversync.io.samba.SambaCredentials
+import java.io.File
+import kotlin.io.path.createSymbolicLinkPointingTo
@Config(manifest=Config.NONE)
@RunWith(RobolectricTestRunner::class)
class SambaTreeTest {
- private lateinit var uri: String
- private lateinit var credentials: SambaCredentials
-
@Before
- fun setUp() {
- uri = "smb://127.0.0.1:10445/"
- credentials = SambaCredentials("test", "notverysecret")
+ fun setUpTest() {
+ assertThat(shareDir.listFiles()).isEmpty()
}
@After
- fun tearDown() {
+ fun tearDownTest() {
+ for (file in shareDir.listFiles()!!) {
+ if (file.isDirectory) {
+ file.deleteRecursively()
+ } else {
+ file.delete()
+ }
+ }
+ }
+
+ @Test
+ fun description() {
+ val resources = ApplicationProvider.getApplicationContext<Context>().resources
+ SambaTreeFactory.tree(uri, credentials).getOrThrow().use { tree ->
+ assertThat(tree.description(resources).toString()).contains(uri)
+ }
+ }
+ @Test
+ fun listEmptyRoot() {
+ SambaTreeFactory.tree(uri, credentials).getOrThrow().use { root ->
+ val content = root.list()
+ assertThat(content.directories).isEmpty()
+ assertThat(content.files).isEmpty()
+ assertThat(content.links).isEmpty()
+ }
}
@Test
fun listRoot() {
- val result = SambaTreeFactory.tree(uri, credentials)
- assertThat(result.isSuccess).isTrue()
- val root = result.getOrThrow()
- val content = root.list()
- assertThat(content.directories).hasSize(1)
- assertThat(content.files).isEmpty()
- assertThat(content.links).isEmpty()
+ val dir = File(shareDir, "dir")
+ val file = File(shareDir, "file")
+ val link = File(shareDir, "link")
+ dir.mkdir()
+ file.writeText("foo")
+ link.toPath().createSymbolicLinkPointingTo(file.toPath())
+
+ SambaTreeFactory.tree(uri, credentials).getOrThrow().use { root ->
+ val content = root.list()
+ assertThat(content.directories).hasSize(1)
+ assertThat(content.directories[0].name).isEqualTo("dir")
+ assertThat(content.files).hasSize(1)
+ assertThat(content.files[0].name).isEqualTo("file")
+ assertThat(content.files[0].size).isEqualTo(3U)
+ assertThat(content.links).hasSize(1)
+ assertThat(content.links[0].name).isEqualTo("link")
+ val target = content.links[0].resolve()
+ if (target is Link.FileTarget) {
+ assertThat(target.file.name).isEqualTo("file")
+ } else {
+ assertThat(target).isInstanceOf(Link.FileTarget::class.java)
+ }
+ }
+ }
+
+ 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
+
+ @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
+ }
+
+ @AfterClass
+ @JvmStatic
+ fun tearDownClass() {
+ if (dockerRunning) {
+ val pb = ProcessBuilder("docker", "compose", "down")
+ pb.directory(dockerDir)
+ pb.start().waitFor()
+ dockerRunning = false
+ }
+ shareDir.deleteRecursively()
+ }
}
}