Merge pull request #2015 from jozic/dilated
=tes,act,doc Make dilated an extension method and deprecate TestKit.dila...
This commit is contained in:
commit
90133e20c0
7 changed files with 21 additions and 31 deletions
|
|
@ -8,7 +8,6 @@ import language.postfixOps
|
|||
import java.util.concurrent.{ TimeUnit, CountDownLatch }
|
||||
import scala.concurrent.Await
|
||||
import scala.concurrent.duration._
|
||||
import scala.math.BigInt.int2bigInt
|
||||
import scala.util.Random
|
||||
import scala.util.control.NoStackTrace
|
||||
import com.typesafe.config.{ ConfigFactory, Config }
|
||||
|
|
@ -17,7 +16,7 @@ import akka.actor.SupervisorStrategy.seqThrowable2Decider
|
|||
import akka.dispatch.{ MessageDispatcher, DispatcherPrerequisites, DispatcherConfigurator, Dispatcher }
|
||||
import akka.pattern.ask
|
||||
import akka.testkit.{ ImplicitSender, EventFilter, DefaultTimeout, AkkaSpec }
|
||||
import akka.testkit.{ filterException, filterEvents, duration2TestDuration, TestLatch }
|
||||
import akka.testkit.{ filterException, filterEvents, TestDuration, TestLatch }
|
||||
import akka.testkit.TestEvent.Mute
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import java.lang.ref.WeakReference
|
||||
|
|
|
|||
|
|
@ -364,8 +364,8 @@ invariably lead to spurious test failures on the heavily loaded Jenkins server
|
|||
internally scaled by a factor taken from the :ref:`configuration`,
|
||||
``akka.test.timefactor``, which defaults to 1.
|
||||
|
||||
You can scale other durations with the same factor by using the implicit conversion
|
||||
in ``akka.testkit`` package object to add dilated function to :class:`Duration`.
|
||||
You can scale other durations with the same factor by using ``dilated`` method
|
||||
in :class:`JavaTestKit`.
|
||||
|
||||
.. includecode:: code/docs/testkit/TestKitDocTest.java#duration-dilation
|
||||
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ public class JavaTestKit {
|
|||
}
|
||||
|
||||
public Duration dilated(Duration d) {
|
||||
return d.mul(TestKitExtension.get(p.system()).TestTimeFactor());
|
||||
return d.mul(TestKitExtension.get(getSystem()).TestTimeFactor());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -671,8 +671,7 @@ public class JavaTestKit {
|
|||
public void shutdown(ActorSystem actorSystem, Duration duration, Boolean verifySystemShutdown) {
|
||||
boolean vss = verifySystemShutdown != null ? verifySystemShutdown : false;
|
||||
Duration dur = duration != null ? duration :
|
||||
TestKit.dilated(FiniteDuration.create(5, TimeUnit.SECONDS),
|
||||
getSystem()).min(FiniteDuration.create(10, TimeUnit.SECONDS));
|
||||
dilated(FiniteDuration.create(5, TimeUnit.SECONDS)).min(FiniteDuration.create(10, TimeUnit.SECONDS));
|
||||
JavaTestKit.shutdownActorSystem(actorSystem, dur, vss);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -742,6 +742,7 @@ object TestKit {
|
|||
* Java API: Scale timeouts (durations) during tests with the configured
|
||||
* 'akka.test.timefactor'.
|
||||
*/
|
||||
@deprecated("Use JavaTestKit.dilated", "2.3")
|
||||
def dilated(duration: Duration, system: ActorSystem): Duration =
|
||||
duration * TestKitExtension(system).TestTimeFactor
|
||||
|
||||
|
|
@ -834,14 +835,4 @@ private[testkit] abstract class CachingPartialFunction[A, B <: AnyRef] extends s
|
|||
var cache: B = _
|
||||
final def isDefinedAt(x: A): Boolean = try { cache = `match`(x); true } catch { case NoMatch ⇒ cache = null.asInstanceOf[B]; false }
|
||||
final override def apply(x: A): B = cache
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper for implicit conversion to add dilated function to Duration.
|
||||
*/
|
||||
class TestDuration(duration: FiniteDuration) {
|
||||
def dilated(implicit system: ActorSystem): FiniteDuration = {
|
||||
// this cast will succeed unless TestTimeFactor is non-finite (which would be a misconfiguration)
|
||||
(duration * TestKitExtension(system).TestTimeFactor).asInstanceOf[FiniteDuration]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -4,9 +4,7 @@
|
|||
package akka.testkit
|
||||
|
||||
import com.typesafe.config.Config
|
||||
import scala.concurrent.duration.Duration
|
||||
import akka.util.Timeout
|
||||
import java.util.concurrent.TimeUnit.MILLISECONDS
|
||||
import akka.actor.{ ExtensionId, ActorSystem, Extension, ExtendedActorSystem }
|
||||
import scala.concurrent.duration.FiniteDuration
|
||||
|
||||
|
|
@ -17,9 +15,10 @@ object TestKitExtension extends ExtensionId[TestKitSettings] {
|
|||
|
||||
class TestKitSettings(val config: Config) extends Extension {
|
||||
|
||||
import akka.util.Helpers.ConfigOps
|
||||
import akka.util.Helpers._
|
||||
|
||||
val TestTimeFactor = config.getDouble("akka.test.timefactor")
|
||||
val TestTimeFactor = config.getDouble("akka.test.timefactor").
|
||||
requiring(tf ⇒ !tf.isInfinite && tf > 0, "akka.test.timefactor must be positive finite double")
|
||||
val SingleExpectDefaultTimeout: FiniteDuration = config.getMillisDuration("akka.test.single-expect-default")
|
||||
val TestEventFilterLeeway: FiniteDuration = config.getMillisDuration("akka.test.filter-leeway")
|
||||
val DefaultTimeout: Timeout = Timeout(config.getMillisDuration("akka.test.default-timeout"))
|
||||
|
|
|
|||
|
|
@ -39,12 +39,17 @@ package object testkit {
|
|||
/**
|
||||
* Scala API. Scale timeouts (durations) during tests with the configured
|
||||
* 'akka.test.timefactor'.
|
||||
* Implicit conversion to add dilated function to Duration.
|
||||
* Implicit class providing `dilated` method.
|
||||
* {{{
|
||||
* import scala.concurrent.duration._
|
||||
* import akka.testkit._
|
||||
* 10.milliseconds.dilated
|
||||
*
|
||||
* Corresponding Java API is available in TestKit.dilated
|
||||
* }}}
|
||||
* Corresponding Java API is available in JavaTestKit.dilated()
|
||||
*/
|
||||
implicit def duration2TestDuration(duration: FiniteDuration) = new TestDuration(duration)
|
||||
}
|
||||
implicit class TestDuration(val duration: FiniteDuration) extends AnyVal {
|
||||
def dilated(implicit system: ActorSystem): FiniteDuration =
|
||||
(duration * TestKitExtension(system).TestTimeFactor).asInstanceOf[FiniteDuration]
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,13 +1,10 @@
|
|||
package akka.testkit
|
||||
|
||||
import org.scalatest.Matchers
|
||||
import org.scalatest.{ BeforeAndAfterEach, WordSpec }
|
||||
import scala.concurrent.duration._
|
||||
import com.typesafe.config.Config
|
||||
import org.scalatest.exceptions.TestFailedException
|
||||
|
||||
@org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner])
|
||||
class TestTimeSpec extends AkkaSpec(Map("akka.test.timefactor" -> 2.0)) with BeforeAndAfterEach {
|
||||
class TestTimeSpec extends AkkaSpec(Map("akka.test.timefactor" -> 2.0)) {
|
||||
|
||||
"A TestKit" must {
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue