diff options
Diffstat (limited to 'libs/samba/src/test')
| -rw-r--r-- | libs/samba/src/test/docker/docker-compose.yml | 22 | ||||
| -rw-r--r-- | libs/samba/src/test/java/org/the_jk/cleversync/samba/SambaTreeTest.kt | 108 |
2 files changed, 116 insertions, 14 deletions
diff --git a/libs/samba/src/test/docker/docker-compose.yml b/libs/samba/src/test/docker/docker-compose.yml new file mode 100644 index 0000000..c7af330 --- /dev/null +++ b/libs/samba/src/test/docker/docker-compose.yml @@ -0,0 +1,22 @@ +services: + samba: + image: ghcr.io/servercontainers/samba:smbd-only-a3.20.2-s4.19.6-r0 + restart: always + environment: + WSDD2_DISABLE: 1 + AVAHI_DISABLE: 1 + NETBIOS_DISABLE: 1 + + GROUP_family: 1050 + + ACCOUNT_test: notverysecret + UID_test: 1000 + GROUPS_test: family + + SAMBA_VOLUME_CONFIG_test: "[Share]; path=/shares/test; valid users = test; guest ok = no; read only = no; browseable = yes" + + volumes: + - ../../../build/test-share:/shares/test + + ports: + - "127.0.0.1:10445:445" 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() + } } } |
