From bdc4cf8315b6ab6ea8d42cc616596d1045abfc62 Mon Sep 17 00:00:00 2001 From: Sina Madani Date: Tue, 27 Aug 2024 10:58:29 +0100 Subject: [PATCH] Factor out JWT duplication --- .../kotlin/com/vonage/client/kt/VideoTest.kt | 91 +++++++++---------- 1 file changed, 42 insertions(+), 49 deletions(-) diff --git a/src/test/kotlin/com/vonage/client/kt/VideoTest.kt b/src/test/kotlin/com/vonage/client/kt/VideoTest.kt index 4e2093f..3101ea4 100644 --- a/src/test/kotlin/com/vonage/client/kt/VideoTest.kt +++ b/src/test/kotlin/com/vonage/client/kt/VideoTest.kt @@ -21,8 +21,6 @@ import java.net.URI import java.time.Duration import java.time.Instant import java.time.temporal.ChronoUnit -import java.time.temporal.Temporal -import java.time.temporal.TemporalUnit import java.util.* import kotlin.test.* @@ -112,6 +110,48 @@ class VideoTest : AbstractTest() { assertEquals(UUID.fromString(streamId), response.streamId) } + private fun assertEqualsJwt(encoded: String, role: Role = Role.PUBLISHER, + ttl: Duration = Duration.ofHours(24), assertions: Map? = null) { + val decoded = JWT.decode(encoded) + assertNotNull(decoded) + assertNotNull(decoded.id) + assertNotNull(decoded.signature) + assertNotNull(decoded.issuedAt) + val iat = decoded.issuedAtAsInstant + assertTrue(Instant.now().isBefore(iat.plusSeconds(15))) + val expectedExpires = iat.plus(ttl).truncatedTo(ChronoUnit.SECONDS) + assertEquals(expectedExpires, decoded.expiresAtAsInstant?.truncatedTo(ChronoUnit.SECONDS)) + val claims = decoded.claims + assertNotNull(claims) + assertEquals(applicationId, claims["application_id"]?.asString()) + assertEquals("session.connect", claims["scope"]?.asString()) + assertEquals(sessionId, claims["session_id"]?.asString()) + assertEquals(role.name.lowercase(), claims["role"]?.asString()) + assertions?.forEach { (key, value) -> assertEquals(value, claims[key]?.asString()) } + } + + @Test + fun `generate token default parameters`() { + assertEqualsJwt(existingSession.generateToken()) + } + + @Test + fun `generate token all parameters`() { + val data = userName + val role = Role.SUBSCRIBER + val ttl = Duration.ofHours(8) + + val encoded = existingSession.generateToken { + data(data); role(role); expiryLength(ttl) + initialLayoutClassList(layoutClasses) + } + + assertEqualsJwt(encoded, role, ttl, mapOf( + "connection_data" to data, + "initial_layout_class_list" to layoutClasses.joinToString(separator = " ") + )) + } + @Test fun `start audio connector all fields`() { mockPost(expectedUrl = "$baseUrl/connect", expectedRequestParams = mapOf( @@ -473,51 +513,4 @@ class VideoTest : AbstractTest() { sessionId(sessionId); token(token); name(renderName) }) } - - @Test - fun `generate token all parameters`() { - val data = userName - val role = Role.SUBSCRIBER - val ttl = Duration.ofHours(8) - val encoded = existingSession.generateToken { - data(data); role(role); expiryLength(ttl) - initialLayoutClassList(layoutClasses) - } - val decoded = JWT.decode(encoded) - assertNotNull(decoded) - assertNotNull(decoded.id) - assertNotNull(decoded.signature) - val iat = decoded.issuedAtAsInstant - assertTrue(Instant.now().isBefore(iat.plusSeconds(15))) - assertEquals( - iat.plus(ttl).truncatedTo(ChronoUnit.SECONDS), - decoded.expiresAtAsInstant.truncatedTo(ChronoUnit.SECONDS) - ) - val claims = decoded.claims - assertNotNull(claims) - assertEquals(applicationId, claims["application_id"]?.asString()) - assertEquals("session.connect", claims["scope"]?.asString()) - assertEquals(sessionId, claims["session_id"]?.asString()) - assertEquals(data, claims["connection_data"]?.asString()) - assertEquals(role.name.lowercase(), claims["role"]?.asString()) - assertEquals(layoutClasses.joinToString(separator = " "), claims["initial_layout_class_list"]?.asString()) - } - - @Test - fun `generate token default parameters`() { - val encoded = existingSession.generateToken() - val decoded = JWT.decode(encoded) - assertNotNull(decoded) - assertNotNull(decoded.id) - assertNotNull(decoded.signature) - assertNotNull(decoded.issuedAt) - val expectedExpires = decoded.issuedAtAsInstant.plusSeconds(86400).truncatedTo(ChronoUnit.SECONDS) - assertEquals(expectedExpires, decoded.expiresAtAsInstant?.truncatedTo(ChronoUnit.SECONDS)) - val claims = decoded.claims - assertNotNull(claims) - assertEquals(applicationId, claims["application_id"]?.asString()) - assertEquals("session.connect", claims["scope"]?.asString()) - assertEquals(sessionId, claims["session_id"]?.asString()) - assertEquals(Role.PUBLISHER.toString(), claims["role"]?.asString()) - } } \ No newline at end of file