Skip to content

Commit fd38227

Browse files
committed
fix: copy contents of request body when converting to OAuth2HttpRequest
* current implementation read contents of buffer, making it impossible to get the request body from the MockWebServer.takeRequest() as it had already been consumed
1 parent b40a43d commit fd38227

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/main/kotlin/no/nav/security/mock/oauth2/extensions/RecordedRequestExtensions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ import no.nav.security.mock.oauth2.http.OAuth2HttpRequest
44
import okhttp3.mockwebserver.RecordedRequest
55

66
fun RecordedRequest.asOAuth2HttpRequest(): OAuth2HttpRequest =
7-
OAuth2HttpRequest(this.headers, this.method!!, this.requestUrl!!, this.body.readUtf8())
7+
OAuth2HttpRequest(this.headers, this.method!!, this.requestUrl!!, this.body.copy().readUtf8())

src/test/kotlin/no/nav/security/mock/oauth2/MockOAuth2ServerTest.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ import com.nimbusds.jwt.JWTClaimsSet
77
import com.nimbusds.jwt.SignedJWT
88
import com.nimbusds.oauth2.sdk.GrantType
99
import com.nimbusds.oauth2.sdk.id.Issuer
10+
import io.kotest.matchers.shouldBe
1011
import java.net.URLEncoder
1112
import no.nav.security.mock.oauth2.extensions.verifySignatureAndIssuer
1213
import no.nav.security.mock.oauth2.http.OAuth2TokenResponse
1314
import no.nav.security.mock.oauth2.http.WellKnown
15+
import no.nav.security.mock.oauth2.testutils.post
1416
import no.nav.security.mock.oauth2.token.DefaultOAuth2TokenCallback
1517
import no.nav.security.mock.oauth2.token.OAuth2TokenProvider
1618
import okhttp3.Credentials
@@ -314,6 +316,35 @@ class MockOAuth2ServerTest {
314316
assertThat(accessToken.jwtClaimsSet.issuer).endsWith("default")
315317
}
316318

319+
@Test
320+
fun takeRequestShouldReturnReceivedRequest() {
321+
server.enqueueResponse(MockResponse().setResponseCode(200).setBody("ok"))
322+
client.post(
323+
server.baseUrl(),
324+
mapOf(
325+
"param1" to "value1"
326+
)
327+
).body?.close()
328+
329+
val recordedRequest1 = server.takeRequest()
330+
recordedRequest1.requestUrl shouldBe server.baseUrl()
331+
recordedRequest1.body.readUtf8() shouldBe "param1=value1"
332+
333+
client.post(
334+
server.tokenEndpointUrl("test"),
335+
mapOf(
336+
"client_id" to "client",
337+
"client_secret" to "sec",
338+
"grant_type" to "client_credentials",
339+
"scope" to "scope1"
340+
)
341+
).body?.close()
342+
343+
val recordedRequest2 = server.takeRequest()
344+
recordedRequest2.requestUrl shouldBe server.tokenEndpointUrl("test")
345+
recordedRequest2.body.readUtf8() shouldBe "client_id=client&client_secret=sec&grant_type=client_credentials&scope=scope1"
346+
}
347+
317348
@Test
318349
fun issueTokenDirectlyFromMockOAuth2Server() {
319350
val signedJWT: SignedJWT = server.issueToken(

0 commit comments

Comments
 (0)