From e6b4118df4f18da2c4378fb2388d5274fce65219 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Wed, 10 Feb 2021 23:23:07 +0100 Subject: [PATCH] Cleanup ci containers --- ci-containers/build.gradle.kts | 11 +++++ .../de/kuschku/ci_containers/CiContainers.kt | 28 +++++++++++ .../ci_containers/CiContainersExtension.kt | 47 +++++++++++++++++++ .../GitlabCiProvidedContainer.kt | 2 +- .../ci_containers}/ProvidedContainer.kt | 2 +- .../TestContainersProvidedContainer.kt | 2 +- .../ci_containers}/providedContainer.kt | 2 +- libquassel/build.gradle.kts | 5 +- .../de/kuschku/libquassel/EndToEndTest.kt | 16 ++----- .../libquassel/testutil/quasselContainer.kt | 3 ++ settings.gradle.kts | 3 +- 11 files changed, 101 insertions(+), 20 deletions(-) create mode 100644 ci-containers/build.gradle.kts create mode 100644 ci-containers/src/main/kotlin/de/kuschku/ci_containers/CiContainers.kt create mode 100644 ci-containers/src/main/kotlin/de/kuschku/ci_containers/CiContainersExtension.kt rename {libquassel/src/test/kotlin/de/kuschku/libquassel/testutil => ci-containers/src/main/kotlin/de/kuschku/ci_containers}/GitlabCiProvidedContainer.kt (95%) rename {libquassel/src/test/kotlin/de/kuschku/libquassel/testutil => ci-containers/src/main/kotlin/de/kuschku/ci_containers}/ProvidedContainer.kt (95%) rename {libquassel/src/test/kotlin/de/kuschku/libquassel/testutil => ci-containers/src/main/kotlin/de/kuschku/ci_containers}/TestContainersProvidedContainer.kt (96%) rename {libquassel/src/test/kotlin/de/kuschku/libquassel/testutil => ci-containers/src/main/kotlin/de/kuschku/ci_containers}/providedContainer.kt (96%) diff --git a/ci-containers/build.gradle.kts b/ci-containers/build.gradle.kts new file mode 100644 index 000000000..504442f95 --- /dev/null +++ b/ci-containers/build.gradle.kts @@ -0,0 +1,11 @@ +plugins { + kotlin("jvm") +} + +dependencies { + implementation(kotlin("stdlib")) + + val testContainersVersion: String by project.extra + api("org.testcontainers", "testcontainers", testContainersVersion) + api("org.testcontainers", "junit-jupiter", testContainersVersion) +} diff --git a/ci-containers/src/main/kotlin/de/kuschku/ci_containers/CiContainers.kt b/ci-containers/src/main/kotlin/de/kuschku/ci_containers/CiContainers.kt new file mode 100644 index 000000000..96cb82e03 --- /dev/null +++ b/ci-containers/src/main/kotlin/de/kuschku/ci_containers/CiContainers.kt @@ -0,0 +1,28 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program 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/>. + */ + +package de.kuschku.ci_containers + +import org.junit.jupiter.api.extension.ExtendWith + +@MustBeDocumented +@Target(AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS) +@Retention(AnnotationRetention.RUNTIME) +@ExtendWith(CiContainersExtension::class) +annotation class CiContainers diff --git a/ci-containers/src/main/kotlin/de/kuschku/ci_containers/CiContainersExtension.kt b/ci-containers/src/main/kotlin/de/kuschku/ci_containers/CiContainersExtension.kt new file mode 100644 index 000000000..3a9d84d19 --- /dev/null +++ b/ci-containers/src/main/kotlin/de/kuschku/ci_containers/CiContainersExtension.kt @@ -0,0 +1,47 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program 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/>. + */ + +package de.kuschku.ci_containers + +import org.junit.jupiter.api.extension.AfterEachCallback +import org.junit.jupiter.api.extension.BeforeEachCallback +import org.junit.jupiter.api.extension.ExtensionContext + +class CiContainersExtension : BeforeEachCallback, AfterEachCallback { + private fun getContainers(context: ExtensionContext?): List<ProvidedContainer> { + val containers = mutableListOf<ProvidedContainer>() + context?.requiredTestInstances?.allInstances?.forEach { instance -> + instance.javaClass.declaredFields.map { field -> + if (field.type == ProvidedContainer::class.java) { + field.trySetAccessible() + containers.add(field.get(instance) as ProvidedContainer) + } + } + } + return containers + } + + override fun beforeEach(context: ExtensionContext?) { + getContainers(context).forEach(ProvidedContainer::start) + } + + override fun afterEach(context: ExtensionContext?) { + getContainers(context).forEach(ProvidedContainer::stop) + } +} diff --git a/libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/GitlabCiProvidedContainer.kt b/ci-containers/src/main/kotlin/de/kuschku/ci_containers/GitlabCiProvidedContainer.kt similarity index 95% rename from libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/GitlabCiProvidedContainer.kt rename to ci-containers/src/main/kotlin/de/kuschku/ci_containers/GitlabCiProvidedContainer.kt index d3b246fef..2f49a38e8 100644 --- a/libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/GitlabCiProvidedContainer.kt +++ b/ci-containers/src/main/kotlin/de/kuschku/ci_containers/GitlabCiProvidedContainer.kt @@ -17,7 +17,7 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -package de.kuschku.libquassel.testutil +package de.kuschku.ci_containers import java.net.InetSocketAddress diff --git a/libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/ProvidedContainer.kt b/ci-containers/src/main/kotlin/de/kuschku/ci_containers/ProvidedContainer.kt similarity index 95% rename from libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/ProvidedContainer.kt rename to ci-containers/src/main/kotlin/de/kuschku/ci_containers/ProvidedContainer.kt index 743d735bb..7056b507a 100644 --- a/libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/ProvidedContainer.kt +++ b/ci-containers/src/main/kotlin/de/kuschku/ci_containers/ProvidedContainer.kt @@ -17,7 +17,7 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -package de.kuschku.libquassel.testutil +package de.kuschku.ci_containers import java.net.InetSocketAddress diff --git a/libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/TestContainersProvidedContainer.kt b/ci-containers/src/main/kotlin/de/kuschku/ci_containers/TestContainersProvidedContainer.kt similarity index 96% rename from libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/TestContainersProvidedContainer.kt rename to ci-containers/src/main/kotlin/de/kuschku/ci_containers/TestContainersProvidedContainer.kt index cc91fb4b1..7b76f4bf3 100644 --- a/libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/TestContainersProvidedContainer.kt +++ b/ci-containers/src/main/kotlin/de/kuschku/ci_containers/TestContainersProvidedContainer.kt @@ -17,7 +17,7 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -package de.kuschku.libquassel.testutil +package de.kuschku.ci_containers import org.testcontainers.containers.GenericContainer import java.net.InetSocketAddress diff --git a/libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/providedContainer.kt b/ci-containers/src/main/kotlin/de/kuschku/ci_containers/providedContainer.kt similarity index 96% rename from libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/providedContainer.kt rename to ci-containers/src/main/kotlin/de/kuschku/ci_containers/providedContainer.kt index 8864b423e..219fb4d55 100644 --- a/libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/providedContainer.kt +++ b/ci-containers/src/main/kotlin/de/kuschku/ci_containers/providedContainer.kt @@ -17,7 +17,7 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -package de.kuschku.libquassel.testutil +package de.kuschku.ci_containers import java.net.InetSocketAddress diff --git a/libquassel/build.gradle.kts b/libquassel/build.gradle.kts index 3c3971b47..47ed5b5ab 100644 --- a/libquassel/build.gradle.kts +++ b/libquassel/build.gradle.kts @@ -31,8 +31,7 @@ dependencies { testRuntimeOnly("org.junit.jupiter", "junit-jupiter-engine", junit5Version) val hamcrestVersion: String by project.extra testImplementation("org.hamcrest", "hamcrest-library", hamcrestVersion) - val testContainersVersion: String by project.extra - testImplementation("org.testcontainers", "testcontainers", testContainersVersion) - testImplementation("org.testcontainers", "junit-jupiter", testContainersVersion) + + testImplementation(project(":ci-containers")) testImplementation("org.slf4j", "slf4j-simple", "1.7.30") } diff --git a/libquassel/src/test/kotlin/de/kuschku/libquassel/EndToEndTest.kt b/libquassel/src/test/kotlin/de/kuschku/libquassel/EndToEndTest.kt index abfc7710c..54ad06b48 100644 --- a/libquassel/src/test/kotlin/de/kuschku/libquassel/EndToEndTest.kt +++ b/libquassel/src/test/kotlin/de/kuschku/libquassel/EndToEndTest.kt @@ -20,6 +20,8 @@ package de.kuschku.libquassel import de.kuschku.bitflags.of +import de.kuschku.ci_containers.CiContainers +import de.kuschku.ci_containers.CiContainersExtension import de.kuschku.libquassel.protocol.connection.* import de.kuschku.libquassel.protocol.features.FeatureSet import de.kuschku.libquassel.protocol.io.ChainedByteBuffer @@ -34,13 +36,13 @@ import de.kuschku.libquassel.testutil.quasselContainer import de.kuschku.quasseldroid.protocol.io.CoroutineChannel import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.runBlocking -import org.junit.jupiter.api.AfterEach -import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.ExtendWith import java.nio.ByteBuffer import javax.net.ssl.SSLContext @ExperimentalCoroutinesApi +@CiContainers class EndToEndTest { private val quassel = quasselContainer() @@ -53,16 +55,6 @@ class EndToEndTest { private val sendBuffer = ChainedByteBuffer(direct = true) private val channel = CoroutineChannel() - @BeforeEach - fun start() { - quassel.start() - } - - @AfterEach - fun stop() { - quassel.stop() - } - @Test fun testConnect() = runBlocking { channel.connect(quassel.address) diff --git a/libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/quasselContainer.kt b/libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/quasselContainer.kt index 37a304e91..44b7c1e78 100644 --- a/libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/quasselContainer.kt +++ b/libquassel/src/test/kotlin/de/kuschku/libquassel/testutil/quasselContainer.kt @@ -19,6 +19,9 @@ package de.kuschku.libquassel.testutil +import de.kuschku.ci_containers.TestContainersProvidedContainer +import de.kuschku.ci_containers.providedContainer + fun quasselContainer() = providedContainer("QUASSEL_CONTAINER") { TestContainersProvidedContainer( QuasselCoreContainer(), diff --git a/settings.gradle.kts b/settings.gradle.kts index 74ba77b6a..e1c2b62c8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -25,5 +25,6 @@ include( ":bitflags", ":protocol", ":coverage-annotations", - ":libquassel" + ":libquassel", + ":ci-containers" ) -- GitLab