Skip to content

Commit c28a83d

Browse files
committed
#691 implement test for timeProvider
1 parent 402e568 commit c28a83d

File tree

1 file changed

+67
-2
lines changed

1 file changed

+67
-2
lines changed

src/test/kotlin/no/nav/security/mock/oauth2/token/OAuth2TokenProviderRSATest.kt

+67-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
1616
import org.junit.jupiter.api.Test
1717
import org.junit.jupiter.params.ParameterizedTest
1818
import org.junit.jupiter.params.provider.ValueSource
19+
import java.time.Clock
1920
import java.time.Instant
21+
import java.time.ZoneId
2022
import java.time.temporal.ChronoUnit
2123
import java.util.Date
2224

@@ -99,8 +101,8 @@ internal class OAuth2TokenProviderRSATest {
99101

100102
@Test
101103
fun `token should have issuedAt set to systemTime if set, otherwise use now()`() {
102-
val yesterDay = Instant.now().minus(1, ChronoUnit.DAYS)
103-
val tokenProvider = OAuth2TokenProvider(systemTime = yesterDay)
104+
val yesterday = Instant.now().minus(1, ChronoUnit.DAYS)
105+
val tokenProvider = OAuth2TokenProvider(systemTime = yesterday)
104106

105107
tokenProvider.exchangeAccessToken(
106108
tokenRequest =
@@ -118,6 +120,69 @@ internal class OAuth2TokenProviderRSATest {
118120
}
119121
}
120122

123+
@Test
124+
fun `token should have issuedAt set dynamically according to timeProvider`() {
125+
val clock = object: Clock() {
126+
private var clock = systemDefaultZone()
127+
128+
override fun instant() = clock.instant()
129+
130+
override fun withZone(zone: ZoneId) = clock.withZone(zone)
131+
132+
override fun getZone() = clock.zone
133+
134+
fun fixed(instant: Instant) {
135+
clock = fixed(instant, zone)
136+
}
137+
}
138+
139+
val tokenProvider = OAuth2TokenProvider { clock.instant() }
140+
141+
val instant1 = Instant.parse("2000-12-03T10:15:30.00Z")
142+
val instant2 = Instant.parse("2020-01-21T00:00:00.00Z")
143+
instant1 shouldNotBe instant2
144+
145+
run {
146+
clock.fixed(instant1)
147+
tokenProvider.systemTime shouldBe instant1
148+
149+
tokenProvider.exchangeAccessToken(
150+
tokenRequest =
151+
nimbusTokenRequest(
152+
"id",
153+
"grant_type" to GrantType.CLIENT_CREDENTIALS.value,
154+
"scope" to "scope1",
155+
),
156+
issuerUrl = "http://default_if_not_overridden".toHttpUrl(),
157+
claimsSet = tokenProvider.jwt(mapOf()).jwtClaimsSet,
158+
oAuth2TokenCallback = DefaultOAuth2TokenCallback(),
159+
).asClue {
160+
it.jwtClaimsSet.issueTime shouldBe Date.from(instant1)
161+
println(it.serialize())
162+
}
163+
}
164+
165+
run {
166+
clock.fixed(instant2)
167+
tokenProvider.systemTime shouldBe instant2
168+
169+
tokenProvider.exchangeAccessToken(
170+
tokenRequest =
171+
nimbusTokenRequest(
172+
"id",
173+
"grant_type" to GrantType.CLIENT_CREDENTIALS.value,
174+
"scope" to "scope1",
175+
),
176+
issuerUrl = "http://default_if_not_overridden".toHttpUrl(),
177+
claimsSet = tokenProvider.jwt(mapOf()).jwtClaimsSet,
178+
oAuth2TokenCallback = DefaultOAuth2TokenCallback(),
179+
).asClue {
180+
it.jwtClaimsSet.issueTime shouldBe Date.from(instant2)
181+
println(it.serialize())
182+
}
183+
}
184+
}
185+
121186
private fun idToken(issuerUrl: String): SignedJWT =
122187
tokenProvider.idToken(
123188
tokenRequest =

0 commit comments

Comments
 (0)