Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions engine-jdk-server/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ dependencies {
api(libs.kotlin.reflect)
testImplementation(libs.kotlin.test)
testImplementation(libs.kotlin.test.junit)
testImplementation(testFixtures(project(":engine-local")))
testImplementation(libs.okhttp)
testImplementation(libs.openTelemetry.sdk.testing)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.lightningkite.lightningserver.engine.jdk

import com.lightningkite.lightningserver.definition.generalSettings
import com.lightningkite.lightningserver.definition.loggingSettings
import com.lightningkite.lightningserver.definition.secretBasis
import com.lightningkite.lightningserver.definition.telemetrySettings
import com.lightningkite.lightningserver.engine.conformance.EngineHttpConformanceSuite
import com.lightningkite.lightningserver.engine.local.EngineReliabilitySettings
import com.lightningkite.lightningserver.engine.local.engineCache
import com.lightningkite.lightningserver.engine.local.enginePubSub
import com.lightningkite.lightningserver.engine.local.forceWebSocketPubSub
import com.lightningkite.lightningserver.settings.set
import com.lightningkite.services.data.DataSize.Companion.bytes
import kotlin.time.Duration.Companion.seconds

/**
* Runs the shared cross-engine HTTP conformance suite against the JDK HttpServer engine.
* See [EngineHttpConformanceSuite] for the behaviors asserted.
*/
class JdkHttpConformanceTest : EngineHttpConformanceSuite() {
override fun startEngine(port: Int, maxBodySize: Long): RunningEngine {
val engine = JdkEngine(conformanceDefinition())
engine.settings.run {
generalSettings.useDefault()
secretBasis.useDefault()
loggingSettings.useDefault()
telemetrySettings.useDefault()
enginePubSub.useDefault()
engineCache.useDefault()
forceWebSocketPubSub.useDefault()
applyConformanceAppDefaults()
jdkRunConfig set JdkRuntimeSettings(
host = "127.0.0.1",
port = port,
reliability = EngineReliabilitySettings(
maxBodySize = maxBodySize.bytes,
workerThreads = 4,
shutdownDrainTimeout = 1.seconds, // keep close() fast
),
)
}
engine.start() // non-blocking: binds and returns
awaitBound(port)
return object : RunningEngine {
override val port: Int = port
override fun close() { engine.shutdown() }
}
}
}
1 change: 1 addition & 0 deletions engine-ktor/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ dependencies {
// Test dependencies
testImplementation(libs.kotlin.test)
testImplementation(libs.kotlin.test.junit)
testImplementation(testFixtures(project(":engine-local")))
testImplementation(libs.ktor.test.host)
testImplementation(libs.ktor.client.cio.jvm)
testImplementation(libs.ktor.client.websockets.jvm)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.lightningkite.lightningserver.engine.ktor

import com.lightningkite.lightningserver.definition.generalSettings
import com.lightningkite.lightningserver.definition.loggingSettings
import com.lightningkite.lightningserver.definition.secretBasis
import com.lightningkite.lightningserver.definition.telemetrySettings
import com.lightningkite.lightningserver.engine.conformance.EngineHttpConformanceSuite
import com.lightningkite.lightningserver.engine.local.EngineReliabilitySettings
import com.lightningkite.lightningserver.engine.local.engineCache
import com.lightningkite.lightningserver.engine.local.enginePubSub
import com.lightningkite.lightningserver.engine.local.forceWebSocketPubSub
import com.lightningkite.lightningserver.settings.set
import com.lightningkite.services.data.DataSize.Companion.bytes
import io.ktor.server.cio.CIO as ServerCIO
import kotlin.concurrent.thread

/**
* Runs the shared cross-engine HTTP conformance suite against the Ktor (CIO) engine.
* See [EngineHttpConformanceSuite] for the behaviors asserted.
*/
class KtorHttpConformanceTest : EngineHttpConformanceSuite() {
override fun startEngine(port: Int, maxBodySize: Long): RunningEngine {
val engine = KtorEngine(conformanceDefinition())
engine.settings.run {
generalSettings.useDefault()
secretBasis.useDefault()
loggingSettings.useDefault()
telemetrySettings.useDefault()
enginePubSub.useDefault()
engineCache.useDefault()
forceWebSocketPubSub.useDefault()
applyConformanceAppDefaults()
ktorRunConfig set KtorRuntimeSettings(
host = "127.0.0.1",
port = port,
reliability = EngineReliabilitySettings(maxBodySize = maxBodySize.bytes),
)
}
// KtorEngine.start(factory) blocks (wait = true), so it runs on a daemon thread; interrupting it
// on close mirrors the existing KtorReliabilityTest teardown.
val serverThread = thread(start = true, isDaemon = true) { engine.start(ServerCIO) }
awaitBound(port)
return object : RunningEngine {
override val port: Int = port
override fun close() { serverThread.interrupt() }
}
}
}
6 changes: 6 additions & 0 deletions engine-local/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ plugins {
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.dokka)
id("signing")
`java-test-fixtures`
alias(libs.plugins.vanniktechMavenPublish)
}

Expand All @@ -16,6 +17,11 @@ dependencies {
api(libs.kotlin.reflect)
testImplementation(libs.kotlin.test)
testImplementation(libs.kotlin.test.junit)

// The cross-engine HTTP conformance suite lives in test fixtures so every engine module's test
// source set can run the identical assertions against its own engine (see EngineHttpConformanceSuite).
testFixturesApi(libs.kotlin.test)
testFixturesApi(libs.kotlin.test.junit)
}


Expand Down
Loading
Loading