Skip to content

Commit

Permalink
Factor out JWT duplication
Browse files Browse the repository at this point in the history
  • Loading branch information
SMadani committed Aug 27, 2024
1 parent 993a032 commit eadc8c7
Showing 1 changed file with 42 additions and 49 deletions.
91 changes: 42 additions & 49 deletions src/test/kotlin/com/vonage/client/kt/VideoTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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.*

Expand Down Expand Up @@ -112,6 +110,48 @@ class VideoTest : AbstractTest() {
assertEquals(UUID.fromString(streamId), response.streamId)
}

private fun assertJwtBase(encoded: String, role: Role = Role.PUBLISHER,
ttl: Duration = Duration.ofHours(24), assertions: Map<String, String>? = 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`() {
assertJwtBase(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)
}

assertJwtBase(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(
Expand Down Expand Up @@ -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())
}
}

0 comments on commit eadc8c7

Please sign in to comment.