@@ -28,6 +28,8 @@ import io.sentry.hints.DiskFlushNotification
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 io.sentry.util.HintUtils
3234import org.awaitility.kotlin.await
3335import org.mockito.kotlin.eq
@@ -38,9 +40,8 @@ import org.mockito.kotlin.verify
3840import org.mockito.kotlin.verifyNoMoreInteractions
3941import org.mockito.kotlin.whenever
4042import java.io.File
43+ import java.util.Timer
4144import java.util.UUID
42- import java.util.concurrent.CountDownLatch
43- import java.util.concurrent.TimeUnit
4445import java.util.concurrent.atomic.AtomicBoolean
4546import kotlin.test.Test
4647import kotlin.test.assertEquals
@@ -363,19 +364,16 @@ class RateLimiterTest {
363364 @Test
364365 fun `close cancels the timer` () {
365366 val rateLimiter = fixture.getSUT()
366- whenever(fixture.currentDateProvider.currentTimeMillis).thenReturn(0 , 1 , 2001 )
367-
368- val applied = CountDownLatch (1 )
369- var activeForReplay = false
370- rateLimiter.addRateLimitObserver {
371- applied.countDown()
372- activeForReplay = rateLimiter.isActiveForCategory(Replay )
373- }
367+ val timer = mock<Timer >()
368+ rateLimiter.injectForField(" timer" , timer)
374369
375- rateLimiter.updateRetryAfterLimits( " 1:replay:key " , null , 1 )
370+ // When the rate limiter is closed
376371 rateLimiter.close()
377372
378- applied.await(2 , TimeUnit .SECONDS )
379- assertTrue(activeForReplay)
373+ // Then the timer is cancelled
374+ verify(timer).cancel()
375+
376+ // And is removed by the rateLimiter
377+ assertNull(rateLimiter.getProperty(" timer" ))
380378 }
381379}
0 commit comments