From bfaae97689bd7356fc3d1c9439ba6064acb69ad9 Mon Sep 17 00:00:00 2001 From: Leonid Stashevsky Date: Tue, 26 Sep 2023 11:08:42 +0200 Subject: [PATCH 1/4] Fix mingwX64 compilation --- .../test/io/ktor/client/tests/plugins/ServerSentEventsTest.kt | 2 +- .../src/io/ktor/client/engine/winhttp/WinHttpClientEngine.kt | 3 +++ ktor-io/posix/src/io/ktor/utils/io/locks/Synchronized.kt | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ktor-client/ktor-client-tests/common/test/io/ktor/client/tests/plugins/ServerSentEventsTest.kt b/ktor-client/ktor-client-tests/common/test/io/ktor/client/tests/plugins/ServerSentEventsTest.kt index 7fae92d51b6..af75d1c8bdf 100644 --- a/ktor-client/ktor-client-tests/common/test/io/ktor/client/tests/plugins/ServerSentEventsTest.kt +++ b/ktor-client/ktor-client-tests/common/test/io/ktor/client/tests/plugins/ServerSentEventsTest.kt @@ -14,7 +14,7 @@ import kotlinx.coroutines.* import kotlinx.coroutines.flow.* import kotlin.test.* -class ServerSentEventsTest : ClientLoader() { +class ServerSentEventsTest : ClientLoader(timeoutSeconds = 120) { @Test fun testExceptionIfSseIsNotInstalled() = testSuspend { diff --git a/ktor-client/ktor-client-winhttp/windows/src/io/ktor/client/engine/winhttp/WinHttpClientEngine.kt b/ktor-client/ktor-client-winhttp/windows/src/io/ktor/client/engine/winhttp/WinHttpClientEngine.kt index 46d45374d83..2910bad9780 100644 --- a/ktor-client/ktor-client-winhttp/windows/src/io/ktor/client/engine/winhttp/WinHttpClientEngine.kt +++ b/ktor-client/ktor-client-winhttp/windows/src/io/ktor/client/engine/winhttp/WinHttpClientEngine.kt @@ -13,6 +13,7 @@ import io.ktor.client.request.* import io.ktor.util.date.* import io.ktor.utils.io.* import kotlinx.coroutines.* +import kotlin.coroutines.* internal class WinHttpClientEngine( override val config: WinHttpClientEngineConfig @@ -30,6 +31,8 @@ internal class WinHttpClientEngine( } } + override fun toString(): String = "WinHttp" + @OptIn(InternalAPI::class) override suspend fun execute(data: HttpRequestData): HttpResponseData { val callContext = callContext() diff --git a/ktor-io/posix/src/io/ktor/utils/io/locks/Synchronized.kt b/ktor-io/posix/src/io/ktor/utils/io/locks/Synchronized.kt index 14eae4c4301..9241fef1c2d 100644 --- a/ktor-io/posix/src/io/ktor/utils/io/locks/Synchronized.kt +++ b/ktor-io/posix/src/io/ktor/utils/io/locks/Synchronized.kt @@ -8,6 +8,8 @@ import io.ktor.utils.io.* import io.ktor.utils.io.interop.mutex.* import kotlinx.cinterop.* import platform.posix.* +import kotlin.concurrent.AtomicNativePtr +import kotlin.concurrent.AtomicReference import kotlin.native.concurrent.* import kotlin.native.internal.NativePtr From d5c7c7505bb0db6bbf1937d73c8191aec267883f Mon Sep 17 00:00:00 2001 From: "leonid.stashevsky" Date: Wed, 27 Sep 2023 11:53:22 +0200 Subject: [PATCH 2/4] Update kotlin to 1.9.10 --- buildSrc/build.gradle.kts | 4 ++-- buildSrc/src/main/kotlin/CommonConfig.kt | 4 ++-- buildSrc/src/main/kotlin/JsConfig.kt | 22 +++++++++++-------- buildSrc/src/main/kotlin/KotlinExtensions.kt | 10 +++++++++ buildSrc/src/main/kotlin/Versions.kt | 2 +- .../main/kotlin/test/server/ServerUtils.kt | 1 + gradle/wrapper/gradle-wrapper.properties | 2 +- .../ktor-server-jte/build.gradle.kts | 4 ++-- 8 files changed, 32 insertions(+), 17 deletions(-) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index c4e1c519a16..9286b5a5f07 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -24,8 +24,8 @@ sourceSets.main { val ktor_version = "2.3.3" dependencies { - implementation(kotlin("gradle-plugin", "1.9.0")) - implementation(kotlin("serialization", "1.9.0")) + implementation(kotlin("gradle-plugin", "1.9.10")) + implementation(kotlin("serialization", "1.9.10")) val ktlint_version = libs.versions.ktlint.version.get() implementation("org.jmailen.gradle:kotlinter-gradle:$ktlint_version") diff --git a/buildSrc/src/main/kotlin/CommonConfig.kt b/buildSrc/src/main/kotlin/CommonConfig.kt index fd6abb79db8..9f5071b7857 100644 --- a/buildSrc/src/main/kotlin/CommonConfig.kt +++ b/buildSrc/src/main/kotlin/CommonConfig.kt @@ -7,13 +7,13 @@ import org.gradle.kotlin.dsl.* fun Project.configureCommon() { kotlin { sourceSets { - val commonMain by getting { + commonMain { dependencies { api("org.jetbrains.kotlinx:kotlinx-coroutines-core:${Versions.coroutines}") } } - val commonTest by getting { + commonTest { dependencies { implementation(kotlin("test")) } diff --git a/buildSrc/src/main/kotlin/JsConfig.kt b/buildSrc/src/main/kotlin/JsConfig.kt index b5cefa4ffeb..3a48d2fe5f1 100644 --- a/buildSrc/src/main/kotlin/JsConfig.kt +++ b/buildSrc/src/main/kotlin/JsConfig.kt @@ -27,20 +27,24 @@ private fun Project.configureJsTasks() { kotlin { js(IR) { nodejs { - testTask { - useMocha { - timeout = "10000" + testTask( + Action { + useMocha { + timeout = "10000" + } } - } + ) } browser { - testTask { - useKarma { - useChromeHeadless() - useConfigDirectory(File(project.rootProject.projectDir, "karma")) + testTask( + Action { + useKarma { + useChromeHeadless() + useConfigDirectory(File(project.rootProject.projectDir, "karma")) + } } - } + ) } binaries.library() diff --git a/buildSrc/src/main/kotlin/KotlinExtensions.kt b/buildSrc/src/main/kotlin/KotlinExtensions.kt index 47f6fcb9e55..6d4dbd34c81 100644 --- a/buildSrc/src/main/kotlin/KotlinExtensions.kt +++ b/buildSrc/src/main/kotlin/KotlinExtensions.kt @@ -27,6 +27,16 @@ fun KotlinMultiplatformExtension.createCInterop( } } +fun NamedDomainObjectContainer.commonMain(block: KotlinSourceSet.() -> Unit) { + val sourceSet = getByName("commonMain") + block(sourceSet) +} + +fun NamedDomainObjectContainer.commonTest(block: KotlinSourceSet.() -> Unit) { + val sourceSet = getByName("commonTest") + block(sourceSet) +} + fun NamedDomainObjectContainer.jvmAndNixMain(block: KotlinSourceSet.() -> Unit) { val sourceSet = findByName("jvmAndNixMain") ?: getByName("jvmMain") block(sourceSet) diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 0431f3ba9bb..3ae52dd5b7f 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -3,7 +3,7 @@ */ object Versions { - val kotlin = "1.9.0" + val kotlin = "1.9.10" val coroutines = "1.7.2" val slf4j = "1.7.36" val junit = "4.13.2" diff --git a/buildSrc/src/main/kotlin/test/server/ServerUtils.kt b/buildSrc/src/main/kotlin/test/server/ServerUtils.kt index 27030cca246..52063ca535b 100644 --- a/buildSrc/src/main/kotlin/test/server/ServerUtils.kt +++ b/buildSrc/src/main/kotlin/test/server/ServerUtils.kt @@ -29,6 +29,7 @@ fun List.makeString(): String = buildString { } } +@Suppress("DEPRECATION") private fun filenameContentTypeAndContentString(provider: () -> Input, headers: Headers): String { val dispositionHeader: String = headers.getAll(HttpHeaders.ContentDisposition)!!.joinToString(";") val disposition: ContentDisposition = ContentDisposition.parse(dispositionHeader) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 15de90249f9..db9a6b825d7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/ktor-server/ktor-server-plugins/ktor-server-jte/build.gradle.kts b/ktor-server/ktor-server-plugins/ktor-server-jte/build.gradle.kts index 7a805708671..51b54c0819e 100644 --- a/ktor-server/ktor-server-plugins/ktor-server-jte/build.gradle.kts +++ b/ktor-server/ktor-server-plugins/ktor-server-jte/build.gradle.kts @@ -4,12 +4,12 @@ kotlin.sourceSets { val jteVersion = "2.3.2" - val jvmMain by getting { + jvmMain { dependencies { api("gg.jte:jte:$jteVersion") } } - val jvmTest by getting { + jvmTest { dependencies { api(project(":ktor-server:ktor-server-plugins:ktor-server-status-pages")) api(project(":ktor-server:ktor-server-plugins:ktor-server-compression")) From 65c34c1fa7f737e5abd750e1c19ef81a667773cf Mon Sep 17 00:00:00 2001 From: "leonid.stashevsky" Date: Wed, 27 Sep 2023 15:32:04 +0200 Subject: [PATCH 3/4] Fix CallLogging tests --- .../plugins/callloging/CallLoggingTest.kt | 38 +++++++++---------- .../src/io/ktor/util/pipeline/Pipeline.kt | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/ktor-server/ktor-server-plugins/ktor-server-call-logging/jvm/test/io/ktor/server/plugins/callloging/CallLoggingTest.kt b/ktor-server/ktor-server-plugins/ktor-server-call-logging/jvm/test/io/ktor/server/plugins/callloging/CallLoggingTest.kt index e53af1bcafc..c868a12230f 100644 --- a/ktor-server/ktor-server-plugins/ktor-server-call-logging/jvm/test/io/ktor/server/plugins/callloging/CallLoggingTest.kt +++ b/ktor-server/ktor-server-plugins/ktor-server-call-logging/jvm/test/io/ktor/server/plugins/callloging/CallLoggingTest.kt @@ -73,26 +73,26 @@ class CallLoggingTest { testApplication { environment { environment() } application { - hash = this.toString() + hash = hashCode().toString(radix = 16) } } assertTrue(messages.size >= 3, "It should be at least 3 message logged:\n$messages") - assertEquals( - "INFO: Application started: $hash", - messages[messages.size - 3], - "No started message logged:\n$messages" - ) - assertEquals( - "INFO: Application stopping: $hash", - messages[messages.size - 2], - "No stopping message logged:\n$messages" - ) - assertEquals( - "INFO: Application stopped: $hash", - messages[messages.size - 1], - "No stopped message logged:\n$messages" - ) + assertTrue { + messages[messages.size - 3].startsWith( + "INFO: Application started: io.ktor.server.application.Application(0x$hash)" + ) + } + assertTrue { + messages[messages.size - 2].startsWith( + "INFO: Application stopping: io.ktor.server.application.Application(0x$hash)" + ) + } + assertTrue { + messages[messages.size - 1].startsWith( + "INFO: Application stopped: io.ktor.server.application.Application(0x$hash)" + ) + } } @Test @@ -374,7 +374,7 @@ class CallLoggingTest { } } } - var hash: String? = null + lateinit var hash: String testApplication { environment { @@ -385,11 +385,11 @@ class CallLoggingTest { } } } - application { hash = this.toString() } + application { hash = hashCode().toString(radix = 16) } } assertTrue(customMessages.isNotEmpty()) - assertTrue(customMessages.all { it.startsWith("CUSTOM TRACE:") && it.contains(hash!!) }) + assertTrue(customMessages.all { it.startsWith("CUSTOM TRACE:") && it.contains(hash) }) assertTrue(messages.isEmpty()) } diff --git a/ktor-utils/common/src/io/ktor/util/pipeline/Pipeline.kt b/ktor-utils/common/src/io/ktor/util/pipeline/Pipeline.kt index 20d09f3e7d5..1644fd8c2a2 100644 --- a/ktor-utils/common/src/io/ktor/util/pipeline/Pipeline.kt +++ b/ktor-utils/common/src/io/ktor/util/pipeline/Pipeline.kt @@ -248,7 +248,7 @@ public open class Pipeline( val interceptors = interceptorsForTests() .joinToString("\n") { " " + it::class.toString() } - return "${this::class.simpleName} [\n$interceptors\n]" + return "${this::class.qualifiedName}(0x${hashCode().toString(16)}) [\n$interceptors\n]" } internal fun phaseInterceptors(phase: PipelinePhase): List> = From caf1cbe485af26c3b3916b11f437523a4d198bb4 Mon Sep 17 00:00:00 2001 From: Leonid Stashevsky Date: Thu, 28 Sep 2023 09:51:47 +0200 Subject: [PATCH 4/4] Fix js compilation --- .../io/ktor/server/plugins/callloging/CallLoggingTest.kt | 6 +++--- ktor-utils/common/src/io/ktor/util/pipeline/Pipeline.kt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ktor-server/ktor-server-plugins/ktor-server-call-logging/jvm/test/io/ktor/server/plugins/callloging/CallLoggingTest.kt b/ktor-server/ktor-server-plugins/ktor-server-call-logging/jvm/test/io/ktor/server/plugins/callloging/CallLoggingTest.kt index c868a12230f..c9a1d04edb5 100644 --- a/ktor-server/ktor-server-plugins/ktor-server-call-logging/jvm/test/io/ktor/server/plugins/callloging/CallLoggingTest.kt +++ b/ktor-server/ktor-server-plugins/ktor-server-call-logging/jvm/test/io/ktor/server/plugins/callloging/CallLoggingTest.kt @@ -80,17 +80,17 @@ class CallLoggingTest { assertTrue(messages.size >= 3, "It should be at least 3 message logged:\n$messages") assertTrue { messages[messages.size - 3].startsWith( - "INFO: Application started: io.ktor.server.application.Application(0x$hash)" + "INFO: Application started: class io.ktor.server.application.Application(0x$hash)" ) } assertTrue { messages[messages.size - 2].startsWith( - "INFO: Application stopping: io.ktor.server.application.Application(0x$hash)" + "INFO: Application stopping: class io.ktor.server.application.Application(0x$hash)" ) } assertTrue { messages[messages.size - 1].startsWith( - "INFO: Application stopped: io.ktor.server.application.Application(0x$hash)" + "INFO: Application stopped: class io.ktor.server.application.Application(0x$hash)" ) } } diff --git a/ktor-utils/common/src/io/ktor/util/pipeline/Pipeline.kt b/ktor-utils/common/src/io/ktor/util/pipeline/Pipeline.kt index 1644fd8c2a2..9fe1ce772b1 100644 --- a/ktor-utils/common/src/io/ktor/util/pipeline/Pipeline.kt +++ b/ktor-utils/common/src/io/ktor/util/pipeline/Pipeline.kt @@ -248,7 +248,7 @@ public open class Pipeline( val interceptors = interceptorsForTests() .joinToString("\n") { " " + it::class.toString() } - return "${this::class.qualifiedName}(0x${hashCode().toString(16)}) [\n$interceptors\n]" + return "${this::class}(0x${hashCode().toString(16)}) [\n$interceptors\n]" } internal fun phaseInterceptors(phase: PipelinePhase): List> =