diff --git a/buildSrc/src/main/kotlin/test/server/ClientTestServer.kt b/buildSrc/src/main/kotlin/test/server/ClientTestServer.kt index 64b675155d..f185c713b7 100644 --- a/buildSrc/src/main/kotlin/test/server/ClientTestServer.kt +++ b/buildSrc/src/main/kotlin/test/server/ClientTestServer.kt @@ -69,6 +69,9 @@ internal fun Application.tests() { val contentType = call.request.header(HttpHeaders.ContentType) call.respondText(contentType ?: "") } + delete("/delete") { + call.respondText("OK ${call.receiveText()}") + } } } diff --git a/ktor-client/ktor-client-curl/desktop/src/io/ktor/client/engine/curl/internal/CurlMultiApiHandler.kt b/ktor-client/ktor-client-curl/desktop/src/io/ktor/client/engine/curl/internal/CurlMultiApiHandler.kt index ba7410e661..aefdca9238 100644 --- a/ktor-client/ktor-client-curl/desktop/src/io/ktor/client/engine/curl/internal/CurlMultiApiHandler.kt +++ b/ktor-client/ktor-client-curl/desktop/src/io/ktor/client/engine/curl/internal/CurlMultiApiHandler.kt @@ -155,15 +155,16 @@ internal class CurlMultiApiHandler : Closeable { easyHandle.apply { when (method) { "GET" -> option(CURLOPT_HTTPGET, 1L) - "PUT" -> { - option(CURLOPT_PUT, 1L) - } + "PUT" -> option(CURLOPT_PUT, 1L) "POST" -> { option(CURLOPT_POST, 1L) option(CURLOPT_POSTFIELDSIZE, size) } "HEAD" -> option(CURLOPT_NOBODY, 1L) - else -> option(CURLOPT_CUSTOMREQUEST, method) + else -> { + if (size > 0) option(CURLOPT_POST, 1L) + option(CURLOPT_CUSTOMREQUEST, method) + } } } } diff --git a/ktor-client/ktor-client-curl/desktop/test/io/ktor/client/engine/curl/test/CurlNativeTests.kt b/ktor-client/ktor-client-curl/desktop/test/io/ktor/client/engine/curl/test/CurlNativeTests.kt index be2285cb0d..e3993d03ad 100644 --- a/ktor-client/ktor-client-curl/desktop/test/io/ktor/client/engine/curl/test/CurlNativeTests.kt +++ b/ktor-client/ktor-client-curl/desktop/test/io/ktor/client/engine/curl/test/CurlNativeTests.kt @@ -8,31 +8,34 @@ import io.ktor.client.* import io.ktor.client.call.* import io.ktor.client.engine.curl.* import io.ktor.client.request.* +import io.ktor.client.statement.* +import io.ktor.utils.io.core.* import kotlinx.coroutines.* import kotlin.native.concurrent.* import kotlin.test.* -val backgroundWorker = Worker.start() - class CurlNativeTests { + private val TEST_SERVER: String = "http://127.0.0.1:8080" + @Test - @Ignore - fun testDownloadInBackground() { - backgroundWorker.execute(TransferMode.SAFE, { Unit }) { - runBlocking { - val client = HttpClient(Curl) - client.get("http://google.com").body() - } - }.consume { assert(it.isNotEmpty()) } + fun testDownload() = runBlocking { + HttpClient(Curl).use { + val res = it.get("http://google.com").body() + assert(res.isNotEmpty()) + } } @Test - fun testDownload() { - runBlocking { - val client = HttpClient(Curl) - val res = client.get("http://google.com").body() - assert(res.isNotEmpty()) + fun testDelete(): Unit = runBlocking { + HttpClient(Curl).use { + val response = it.delete("$TEST_SERVER/delete") + assertEquals("OK ", response.bodyAsText()) + + val responseWithBody = it.delete("$TEST_SERVER/delete") { + setBody("1") + } + assertEquals("OK 1", responseWithBody.bodyAsText()) } } }