summaryrefslogtreecommitdiff
path: root/libs/samba
diff options
context:
space:
mode:
Diffstat (limited to 'libs/samba')
-rw-r--r--libs/samba/build.gradle.kts1
-rw-r--r--libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt2
-rw-r--r--libs/samba/src/test/java/org/the_jk/cleversync/samba/SambaTestHelper.kt60
-rw-r--r--libs/samba/src/test/java/org/the_jk/cleversync/samba/SambaTreeTest.kt61
-rw-r--r--libs/samba/src/test/java/org/the_jk/cleversync/samba/SingleMergeLocalSambaTest.kt58
-rw-r--r--libs/samba/src/test/java/org/the_jk/cleversync/samba/SingleMergeSambaLocalTest.kt58
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()
+ }
+ }
+}