Skip to content

Commit

Permalink
KTOR-3854 Fix: separate HttpCookie rendered cookie pairs with space (#…
Browse files Browse the repository at this point in the history
…2938)

* separate cookies by space
  • Loading branch information
john5f35 committed Sep 5, 2022
1 parent d917744 commit 08400a5
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 6 deletions.
Expand Up @@ -119,7 +119,7 @@ public class HttpCookies internal constructor(
}

private fun renderClientCookies(cookies: List<Cookie>): String =
cookies.joinToString(";", transform = ::renderCookieHeader)
cookies.joinToString("; ", transform = ::renderCookieHeader)

/**
* Gets all the cookies for the specified [url] for this [HttpClient].
Expand Down
17 changes: 15 additions & 2 deletions ktor-client/ktor-client-core/common/test/CookiesTest.kt
Expand Up @@ -42,18 +42,31 @@ class CookiesTest {
assertEquals("test=value", builder.headers[HttpHeaders.Cookie])
}

@Test
fun testCookiesAreRenderedWithSpaceInBetween() = testSuspend{
var storage = AcceptAllCookiesStorage()
storage.addCookie("http://localhost/", Cookie("name1", "value1"))
storage.addCookie("http://localhost/", Cookie("name2", "value2"))
val feature = HttpCookies(storage, emptyList())
var builder = HttpRequestBuilder()

feature.sendCookiesWith(builder)

assertContains(builder.headers[HttpHeaders.Cookie]!!, "; ")
}

@Test
fun testRequestCookiesArePreservedWhenAddingCookiesFromStorage() = testSuspend {
val storage = AcceptAllCookiesStorage()
storage.addCookie("http://localhost/", parseServerSetCookieHeader("SOMECOOKIE=somevalue;"))
storage.addCookie("http://localhost/", Cookie("SOMECOOKIE", "somevalue"))
val feature = HttpCookies(storage, emptyList())
val builder = HttpRequestBuilder()

builder.cookie("test", "value")
feature.captureHeaderCookies(builder)
feature.sendCookiesWith(builder)

val renderedCookies = builder.headers[HttpHeaders.Cookie]!!.split(";")
val renderedCookies = builder.headers[HttpHeaders.Cookie]!!.split("; ")
assertContains(renderedCookies, "test=value")
assertContains(renderedCookies, "SOMECOOKIE=somevalue")
}
Expand Down
Expand Up @@ -22,7 +22,7 @@ class CookiesMockTest {
assertEquals("*/*", request.headers[HttpHeaders.Accept])
val rawCookies = request.headers[HttpHeaders.Cookie]!!
assertEquals(1, request.headers.getAll(HttpHeaders.Cookie)?.size!!)
assertEquals("first=\"1,2,3,4\";second=abc", rawCookies)
assertEquals("first=\"1,2,3,4\"; second=abc", rawCookies)

respondOk()
}
Expand Down
Expand Up @@ -192,7 +192,7 @@ class CookiesTest : ClientLoader() {
test { client ->
client.prepareGet("$TEST_HOST/encoded").execute { httpResponse ->
val response = httpResponse.bodyAsText()
val cookieStrings = response.split(";").filter { it.isNotBlank() }
val cookieStrings = response.split("; ").filter { it.isNotBlank() }
assertEquals(4, cookieStrings.size)
assertEquals("uri=first%2C+cookie", cookieStrings[0])
assertEquals("raw=first%2C+cookie", cookieStrings[1])
Expand Down
Expand Up @@ -76,7 +76,7 @@ class CookiesAndRedirectMockedTest {
val storage = AcceptAllCookiesStorage()
config {
server { request ->
val cookies = request.headers[HttpHeaders.Cookie]!!.split(";")
val cookies = request.headers[HttpHeaders.Cookie]!!.split("; ")
assertContains(cookies, "test=value")
assertContains(cookies, "other=abc")
respondOk()
Expand Down

0 comments on commit 08400a5

Please sign in to comment.