From bb8b742dc41075011b6a49bb64efabf4a5576e47 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Wed, 12 Jan 2022 07:21:34 -0600 Subject: [PATCH] server: Delete links --- .../org/isoron/uhabits/sync/app/LinkModule.kt | 55 ----------- .../uhabits/sync/app/SyncApplication.kt | 2 - .../uhabits/sync/app/LinksModuleTest.kt | 91 ------------------- .../uhabits/sync/links/LinkManagerTest.kt | 44 --------- 4 files changed, 192 deletions(-) delete mode 100644 uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/app/LinkModule.kt delete mode 100644 uhabits-server/src/test/kotlin/org/isoron/uhabits/sync/app/LinksModuleTest.kt delete mode 100644 uhabits-server/src/test/kotlin/org/isoron/uhabits/sync/links/LinkManagerTest.kt diff --git a/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/app/LinkModule.kt b/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/app/LinkModule.kt deleted file mode 100644 index 32ed88349..000000000 --- a/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/app/LinkModule.kt +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2016-2021 Álinson Santos Xavier - * - * 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 . - */ - -package org.isoron.uhabits.sync.app - -import io.ktor.application.* -import io.ktor.http.* -import io.ktor.request.* -import io.ktor.response.* -import io.ktor.routing.* -import org.isoron.uhabits.sync.* - -data class LinkRegisterRequestData( - val syncKey: String, -) -fun LinkRegisterRequestData.toJson(): String = defaultMapper.writeValueAsString(this) - -fun Routing.links(app: SyncApplication) { - post("/links") { - try { - val data = call.receive() - val link = app.server.registerLink(data.syncKey) - call.respond(HttpStatusCode.OK, link) - } catch (e: ServiceUnavailable) { - call.respond(HttpStatusCode.ServiceUnavailable) - } - } - get("/links/{id}") { - try { - val id = call.parameters["id"]!! - val link = app.server.getLink(id) - call.respond(HttpStatusCode.OK, link) - } catch (e: ServiceUnavailable) { - call.respond(HttpStatusCode.ServiceUnavailable) - } catch (e: KeyNotFoundException) { - call.respond(HttpStatusCode.NotFound) - } - } -} diff --git a/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/app/SyncApplication.kt b/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/app/SyncApplication.kt index 71344b16f..1da1f3a71 100644 --- a/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/app/SyncApplication.kt +++ b/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/app/SyncApplication.kt @@ -23,7 +23,6 @@ import io.ktor.application.* import io.ktor.features.* import io.ktor.jackson.* import io.ktor.routing.* -import org.isoron.uhabits.sync.* import org.isoron.uhabits.sync.repository.* import org.isoron.uhabits.sync.server.* import java.nio.file.* @@ -46,7 +45,6 @@ class SyncApplication( routing { registration(this@SyncApplication) storage(this@SyncApplication) - links(this@SyncApplication) metrics(this@SyncApplication) } } diff --git a/uhabits-server/src/test/kotlin/org/isoron/uhabits/sync/app/LinksModuleTest.kt b/uhabits-server/src/test/kotlin/org/isoron/uhabits/sync/app/LinksModuleTest.kt deleted file mode 100644 index ef2bc8963..000000000 --- a/uhabits-server/src/test/kotlin/org/isoron/uhabits/sync/app/LinksModuleTest.kt +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2016-2021 Álinson Santos Xavier - * - * 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 . - */ - -package org.isoron.uhabits.sync.app - -import com.nhaarman.mockitokotlin2.whenever -import io.ktor.http.ContentType -import io.ktor.http.HttpHeaders -import io.ktor.http.HttpMethod -import io.ktor.http.HttpStatusCode -import io.ktor.server.testing.TestApplicationCall -import io.ktor.server.testing.TestApplicationEngine -import io.ktor.server.testing.handleRequest -import io.ktor.server.testing.setBody -import io.ktor.server.testing.withTestApplication -import kotlinx.coroutines.runBlocking -import org.isoron.uhabits.sync.KeyNotFoundException -import org.isoron.uhabits.sync.links.Link -import org.isoron.uhabits.sync.links.toJson -import org.junit.Test -import kotlin.test.assertEquals - -class LinksModuleTest : BaseApplicationTest() { - private val link = Link( - id = "ABC123", - syncKey = "SECRET", - createdAt = System.currentTimeMillis(), - ) - - @Test - fun `when POST is successful should return link`(): Unit = runBlocking { - whenever(server.registerLink("SECRET")).thenReturn(link) - withTestApplication(app()) { - handlePost("/links", LinkRegisterRequestData(syncKey = "SECRET")).apply { - assertEquals(HttpStatusCode.OK, response.status()) - assertEquals(link.toJson(), response.content) - } - } - } - - @Test - fun `when GET is successful should return link`(): Unit = runBlocking { - whenever(server.getLink("ABC123")).thenReturn(link) - withTestApplication(app()) { - handleGet("/links/ABC123").apply { - assertEquals(HttpStatusCode.OK, response.status()) - assertEquals(link.toJson(), response.content) - } - } - } - - @Test - fun `GET with invalid link id should return 404`(): Unit = runBlocking { - whenever(server.getLink("ABC123")).thenThrow(KeyNotFoundException()) - withTestApplication(app()) { - handleGet("/links/ABC123").apply { - assertEquals(HttpStatusCode.NotFound, response.status()) - } - } - } - - private fun TestApplicationEngine.handlePost( - url: String, - data: LinkRegisterRequestData - ): TestApplicationCall { - return handleRequest(HttpMethod.Post, url) { - addHeader(HttpHeaders.ContentType, ContentType.Application.Json.toString()) - setBody(data.toJson()) - } - } - - private fun TestApplicationEngine.handleGet(url: String): TestApplicationCall { - return handleRequest(HttpMethod.Get, url) - } -} diff --git a/uhabits-server/src/test/kotlin/org/isoron/uhabits/sync/links/LinkManagerTest.kt b/uhabits-server/src/test/kotlin/org/isoron/uhabits/sync/links/LinkManagerTest.kt deleted file mode 100644 index d1eb88c24..000000000 --- a/uhabits-server/src/test/kotlin/org/isoron/uhabits/sync/links/LinkManagerTest.kt +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2016-2021 Álinson Santos Xavier - * - * 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 . - */ - -package org.isoron.uhabits.sync.links - -import org.isoron.uhabits.sync.* -import org.junit.Test -import kotlin.test.* - -class LinkManagerTest { - - @Test - fun testUsage() { - val manager = LinkManager(timeoutInMillis = 250) - val originalLink = manager.register(syncKey = "SECRET") - val retrievedLink = manager.get(originalLink.id) - assertEquals(originalLink, retrievedLink) - - Thread.sleep(260) // wait until expiration - assertFailsWith { - manager.get(originalLink.id) - } - - assertFailsWith { - manager.get("INVALID") - } - } -} \ No newline at end of file