Server: data persistence

This commit is contained in:
2020-11-28 16:23:21 -06:00
parent b0336fb495
commit 7979f74bea
9 changed files with 216 additions and 35 deletions

View File

@@ -20,12 +20,16 @@
package org.isoron.uhabits.sync
import kotlinx.coroutines.*
import org.isoron.uhabits.sync.repository.*
import org.isoron.uhabits.sync.server.*
import org.junit.Test
import java.nio.file.*
import kotlin.test.*
class MemorySyncServerTest {
class RepositorySyncServerTest {
private val server = MemorySyncServer()
private val tempdir = Files.createTempDirectory("db")
private val server = RepositorySyncServer(FileRepository(tempdir))
private val key = runBlocking { server.register() }
@Test

View File

@@ -20,7 +20,7 @@
package org.isoron.uhabits.sync.app
import io.ktor.application.*
import org.isoron.uhabits.sync.*
import org.isoron.uhabits.sync.server.*
import org.mockito.Mockito.*
open class BaseApplicationTest {

View File

@@ -0,0 +1,53 @@
/*
* Copyright (C) 2016-2020 Alinson Santos Xavier <git@axavier.org>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
@file:Suppress("BlockingMethodInNonBlockingContext")
package org.isoron.uhabits.sync.repository
import kotlinx.coroutines.*
import org.hamcrest.CoreMatchers.*
import org.isoron.uhabits.sync.*
import org.junit.*
import org.junit.Assert.*
import java.nio.file.*
class FileRepositoryTest {
@Test
fun testUsage() = runBlocking {
val tempdir = Files.createTempDirectory("db")!!
val repo = FileRepository(tempdir)
val original = SyncData(10, "Hello world")
repo.put("abcdefg", original)
val metaPath = tempdir.resolve("ab/cd/abcdefg/version")
assertTrue("$metaPath should exist", Files.exists(metaPath))
assertEquals("10", metaPath.toFile().readText())
val dataPath = tempdir.resolve("ab/cd/abcdefg/content")
assertTrue("$dataPath should exist", Files.exists(dataPath))
assertEquals("Hello world", dataPath.toFile().readText())
val retrieved = repo.get("abcdefg")
assertThat(retrieved, equalTo(original))
}
}