Skip to content

Commit

Permalink
Change test build system to suites
Browse files Browse the repository at this point in the history
  • Loading branch information
LukasBrand committed Dec 7, 2023
1 parent 2c032a1 commit 01577e3
Showing 1 changed file with 80 additions and 91 deletions.
171 changes: 80 additions & 91 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -231,107 +231,96 @@ tasks.register<Sync>("updateOpenApiSpecs") {

/* ******************** test ******************** */

tasks.test {
useJUnitPlatform()
@Suppress("UnstableApiUsage") //
testing {
suites {
val test by getting(JvmTestSuite::class) {
useJUnitJupiter(libs.versions.junit.jupiter)

dependencies {
implementation(libs.junit.systemExit)
implementation(libs.mockito)
implementation(libs.okhttp.mockWebserver)
}
}

val integrationTest by registering(JvmTestSuite::class) {
testType = TestSuiteType.INTEGRATION_TEST

dependencies {
implementation(libs.awaitility)
implementation(libs.hivemq.testcontainer.junit5)
implementation(libs.junit.systemExit)
implementation(libs.mockito)
implementation(libs.testcontainers)

implementation(libs.dagger)
implementation(libs.gson)
implementation(libs.hivemq.mqttClient)
implementation(libs.okhttp)
implementation(libs.openCsv)
implementation(libs.picocli)
implementation(libs.tinylog.api)
implementation(project())
}
}

val systemTest by registering(JvmTestSuite::class) {
testType = TestSuiteType.FUNCTIONAL_TEST
targets {
all {
testTask.configure {
systemProperties["junit.jupiter.testinstance.lifecycle.default"] = "per_class"
}

}

named("systemTest") {
testTask.configure {
dependsOn(tasks.shadowJar)
systemProperties["cliExec"] = javaLauncher.get().executablePath.asFile.absolutePath + " -jar " +
tasks.shadowJar.map { it.outputs.files.singleFile }.get()
}
}
register("systemTestNative") {
testTask.configure {
dependsOn(tasks.nativeCompile)
systemProperties["cliExec"] =
tasks.nativeCompile.map { it.outputs.files.singleFile }.get()
.resolve(project.name).absolutePath
}
}
}

dependencies {
implementation(libs.awaitility)
implementation(libs.hivemq.communityEditionEmbedded)
implementation(libs.hivemq.testcontainer.junit5)
implementation(libs.junit.pioneer)
implementation(libs.junit.platformLauncher)
implementation(libs.testcontainers)

implementation(libs.apache.commonsIO)
implementation(libs.gson)
implementation(libs.guava)
implementation(libs.hivemq.mqttClient)
}
}

tasks.named("check") {
dependsOn(integrationTest, systemTest)
}
}
}

dependencies {
testImplementation(libs.junit.jupiter)
testImplementation(libs.junit.platformLauncher)
testImplementation(libs.mockito)
testImplementation(libs.okhttp.mockWebserver)
testImplementation(libs.junit.systemExit)

modules {
module("org.bouncycastle:bcpkix-jdk15on") { replacedBy("org.bouncycastle:bcpkix-jdk18on") }
module("org.bouncycastle:bcprov-jdk15on") { replacedBy("org.bouncycastle:bcprov-jdk18on") }
module("org.bouncycastle:bcutil-jdk15on") { replacedBy("org.bouncycastle:bcutil-jdk18on") }
}
}

/* ******************** integration Tests ******************** */

sourceSets.create("integrationTest") {
compileClasspath += sourceSets.main.get().output
runtimeClasspath += sourceSets.main.get().output
}

val integrationTestImplementation: Configuration by configurations.getting {
extendsFrom(configurations.testImplementation.get())
}
val integrationTestRuntimeOnly: Configuration by configurations.getting {
extendsFrom(configurations.testRuntimeOnly.get())
}

dependencies {
integrationTestImplementation(libs.hivemq.testcontainer.junit5)
integrationTestImplementation(libs.testcontainers)
integrationTestImplementation(libs.awaitility)
}

val integrationTest by tasks.registering(Test::class) {
group = "verification"
description = "Runs integration tests."
testClassesDirs = sourceSets[name].output.classesDirs
classpath = sourceSets[name].runtimeClasspath
useJUnitPlatform()
shouldRunAfter(tasks.test)
}

tasks.check { dependsOn(integrationTest) }

/* ******************** system Tests ******************** */

sourceSets.create("systemTest")

val systemTestImplementation: Configuration by configurations.getting {
extendsFrom(configurations.testImplementation.get())
}
val systemTestRuntimeOnly: Configuration by configurations.getting {
extendsFrom(configurations.testRuntimeOnly.get())
}

dependencies {
systemTestImplementation(libs.hivemq.testcontainer.junit5)
systemTestImplementation(libs.testcontainers)
systemTestImplementation(libs.awaitility)
systemTestImplementation(libs.hivemq.communityEditionEmbedded)
systemTestImplementation(libs.junit.pioneer)
}

val systemTest by tasks.registering(Test::class) {
group = "verification"
description = "Runs system tests."
testClassesDirs = sourceSets["systemTest"].output.classesDirs
classpath = sourceSets["systemTest"].runtimeClasspath
useJUnitPlatform()
shouldRunAfter(tasks.test)
dependsOn(tasks.shadowJar)
systemProperties["junit.jupiter.testinstance.lifecycle.default"] = "per_class"
systemProperties["cliExec"] = javaLauncher.get().executablePath.asFile.absolutePath + " -jar " +
tasks.shadowJar.map { it.outputs.files.singleFile }.get()
systemProperties["java"] = javaLauncher.get().executablePath.asFile.absolutePath
}

val systemTestNative by tasks.registering(Test::class) {
group = "verification"
description = "Runs native system tests."
testClassesDirs = sourceSets["systemTest"].output.classesDirs
classpath = sourceSets["systemTest"].runtimeClasspath
useJUnitPlatform()
shouldRunAfter(tasks.test)
dependsOn(tasks.nativeCompile)
systemProperties["junit.jupiter.testinstance.lifecycle.default"] = "per_class"
systemProperties["cliExec"] =
tasks.nativeCompile.map { it.outputs.files.singleFile }.get().resolve(project.name).absolutePath
systemProperties["java"] = javaLauncher.get().executablePath.asFile.absolutePath
testLogging {
showStandardStreams = true
}
}

tasks.check { dependsOn(systemTest, systemTestNative) }

/* ******************** compliance ******************** */

license {
Expand Down

0 comments on commit 01577e3

Please sign in to comment.