@@ -28,6 +28,8 @@ import io.sentry.metrics.EncodedMetrics
2828import io.sentry.protocol.SentryId
2929import io.sentry.protocol.SentryTransaction
3030import io.sentry.protocol.User
31+ import io.sentry.test.getProperty
32+ import io.sentry.test.injectForField
3133import org.awaitility.kotlin.await
3234import org.mockito.kotlin.eq
3335import org.mockito.kotlin.mock
@@ -37,6 +39,7 @@ import org.mockito.kotlin.verify
3739import org.mockito.kotlin.verifyNoMoreInteractions
3840import org.mockito.kotlin.whenever
3941import java.io.File
42+ import java.util.Timer
4043import java.util.UUID
4144import java.util.concurrent.atomic.AtomicBoolean
4245import kotlin.test.Test
@@ -412,18 +415,16 @@ class RateLimiterTest {
412415 @Test
413416 fun `close cancels the timer` () {
414417 val rateLimiter = fixture.getSUT()
415- whenever(fixture.currentDateProvider.currentTimeMillis).thenReturn(0 , 1 , 2001 )
416-
417- val applied = AtomicBoolean (true )
418- rateLimiter.addRateLimitObserver {
419- applied.set(rateLimiter.isActiveForCategory(Replay ))
420- }
418+ val timer = mock<Timer >()
419+ rateLimiter.injectForField(" timer" , timer)
421420
422- rateLimiter.updateRetryAfterLimits( " 1:replay:key " , null , 1 )
421+ // When the rate limiter is closed
423422 rateLimiter.close()
424423
425- // wait for 1.5s to ensure the timer has run after 1s
426- await.untilTrue(applied)
427- assertTrue(applied.get())
424+ // Then the timer is cancelled
425+ verify(timer).cancel()
426+
427+ // And is removed by the rateLimiter
428+ assertNull(rateLimiter.getProperty(" timer" ))
428429 }
429430}
0 commit comments