/* * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package test.concurrent import java.util.* import kotlin.concurrent.* import kotlin.test.* import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit import java.util.concurrent.TimeoutException class TimerTest { @Test fun scheduledTask() { val timer = Timer() val latch = CountDownLatch(10) val startedAt = System.nanoTime() lateinit var callbackTask: TimerTask val task = timer.scheduleAtFixedRate(100, 10) { callbackTask = this latch.countDown() if (latch.count == 0L) this.cancel() } if (!latch.await(2500, TimeUnit.MILLISECONDS)) throw TimeoutException() val elapsed = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startedAt) val expectedAtLeast = 180L assertTrue(elapsed > expectedAtLeast, "Expected elapsed ($elapsed ms) to be at least $expectedAtLeast ms") assertSame(task, callbackTask) } }