review patience config (#30709)

* take it from testkit settings instead of hard coded
* dilate it
* it's still somewhat confusing since we have both
  classic and typed testkits and they dilate the default
  timeout differently, but don't want to change too much
This commit is contained in:
Patrik Nordwall 2021-10-01 16:48:16 +02:00 committed by GitHub
parent 1b381bd26c
commit 2bc8460777
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 46 additions and 20 deletions

View file

@ -66,7 +66,9 @@ abstract class ScalaTestWithActorTestKit(testKit: ActorTestKit)
this(ActorTestKit(ActorTestKitBase.testNameFromCallStack(), config, settings)) this(ActorTestKit(ActorTestKitBase.testNameFromCallStack(), config, settings))
/** /**
* `PatienceConfig` from [[akka.actor.testkit.typed.TestKitSettings#DefaultTimeout]] * `PatienceConfig` from [[akka.actor.testkit.typed.TestKitSettings#DefaultTimeout]].
* `DefaultTimeout` is dilated with [[akka.actor.testkit.typed.TestKitSettings#TestTimeFactor]],
* which means that the patience is also dilated.
*/ */
implicit val patience: PatienceConfig = implicit val patience: PatienceConfig =
PatienceConfig(testKit.testKitSettings.DefaultTimeout.duration, Span(100, org.scalatest.time.Millis)) PatienceConfig(testKit.testKitSettings.DefaultTimeout.duration, Span(100, org.scalatest.time.Millis))

View file

@ -7,13 +7,14 @@ package internal
import scala.concurrent.Future import scala.concurrent.Future
import scala.concurrent.Promise import scala.concurrent.Promise
import scala.concurrent.duration._
import scala.util.control.NonFatal import scala.util.control.NonFatal
import org.scalatest.BeforeAndAfterAll import org.scalatest.BeforeAndAfterAll
import org.scalatest.concurrent.Eventually import org.scalatest.concurrent.Eventually
import org.scalatest.concurrent.ScalaFutures import org.scalatest.concurrent.ScalaFutures
import org.scalatest.matchers.should.Matchers import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec import org.scalatest.wordspec.AnyWordSpec
import akka.Done import akka.Done
import akka.actor.dungeon.Dispatch import akka.actor.dungeon.Dispatch
import akka.actor.{ Address, CoordinatedShutdown, InvalidMessageException } import akka.actor.{ Address, CoordinatedShutdown, InvalidMessageException }
@ -22,6 +23,9 @@ import akka.actor.testkit.typed.scaladsl.TestInbox
import akka.actor.testkit.typed.scaladsl.TestProbe import akka.actor.testkit.typed.scaladsl.TestProbe
import akka.actor.typed.scaladsl.Behaviors import akka.actor.typed.scaladsl.Behaviors
import com.typesafe.config.ConfigFactory import com.typesafe.config.ConfigFactory
import org.scalatest.time.Span
import akka.actor.testkit.typed.TestKitSettings
class ActorSystemSpec class ActorSystemSpec
extends AnyWordSpec extends AnyWordSpec
@ -31,7 +35,9 @@ class ActorSystemSpec
with Eventually with Eventually
with LogCapturing { with LogCapturing {
override implicit val patienceConfig: PatienceConfig = PatienceConfig(1.second) private val testKitSettings = TestKitSettings(ConfigFactory.load().getConfig("akka.actor.testkit.typed"))
override implicit val patienceConfig: PatienceConfig =
PatienceConfig(testKitSettings.SingleExpectDefaultTimeout, Span(100, org.scalatest.time.Millis))
def system[T](behavior: Behavior[T], name: String, props: Props = Props.empty) = def system[T](behavior: Behavior[T], name: String, props: Props = Props.empty) =
ActorSystem(behavior, name, ConfigFactory.empty(), props) ActorSystem(behavior, name, ConfigFactory.empty(), props)
def suite = "adapter" def suite = "adapter"

View file

@ -56,8 +56,10 @@ abstract class MultiDcClusterShardingSpec
import MultiDcClusterShardingSpecConfig._ import MultiDcClusterShardingSpecConfig._
import MultiDcPinger._ import MultiDcPinger._
override implicit def patienceConfig: PatienceConfig = override implicit def patienceConfig: PatienceConfig = {
PatienceConfig(testKitSettings.DefaultTimeout.duration, 100.millis) import akka.testkit.TestDuration
PatienceConfig(testKitSettings.DefaultTimeout.duration.dilated, 100.millis)
}
val typeKey = EntityTypeKey[Command]("ping") val typeKey = EntityTypeKey[Command]("ping")
val entityId = "ping-1" val entityId = "ping-1"

View file

@ -118,8 +118,10 @@ abstract class ReplicatedShardingSpec
with Eventually { with Eventually {
import ReplicatedShardingSpec._ import ReplicatedShardingSpec._
implicit val patience: PatienceConfig = implicit val patience: PatienceConfig = {
PatienceConfig(testKitSettings.DefaultTimeout.duration * 2, Span(500, org.scalatest.time.Millis)) import akka.testkit.TestDuration
PatienceConfig(testKitSettings.DefaultTimeout.duration.dilated * 2, Span(500, org.scalatest.time.Millis))
}
"Replicated sharding" should { "Replicated sharding" should {
"form cluster" in { "form cluster" in {

View file

@ -7,6 +7,7 @@ package akka.cluster.sharding
import scala.concurrent.duration._ import scala.concurrent.duration._
import org.scalatest.concurrent.ScalaFutures import org.scalatest.concurrent.ScalaFutures
import org.scalatest.time.Span
import akka.actor.{ Actor, ActorLogging, Address, Props } import akka.actor.{ Actor, ActorLogging, Address, Props }
import akka.cluster.Cluster import akka.cluster.Cluster
@ -74,7 +75,10 @@ abstract class ExternalShardAllocationSpec
import ExternalShardAllocationSpec.GiveMeYourHome._ import ExternalShardAllocationSpec.GiveMeYourHome._
import ExternalShardAllocationSpecConfig._ import ExternalShardAllocationSpecConfig._
override implicit val patienceConfig: PatienceConfig = PatienceConfig(5.second) override implicit val patienceConfig: PatienceConfig = {
import akka.testkit.TestDuration
PatienceConfig(testKitSettings.DefaultTimeout.duration.dilated, Span(100, org.scalatest.time.Millis))
}
val typeName = "home" val typeName = "home"
val initiallyOnForth = "on-forth" val initiallyOnForth = "on-forth"

View file

@ -92,7 +92,8 @@ trait MultiNodeTypedClusterSpec extends Suite with STMultiNodeSpec with WatchedB
private lazy val spawnActor = private lazy val spawnActor =
system.actorOf(PropsAdapter(SpawnProtocol()), "testSpawn").toTyped[SpawnProtocol.Command] system.actorOf(PropsAdapter(SpawnProtocol()), "testSpawn").toTyped[SpawnProtocol.Command]
def spawn[T](behavior: Behavior[T], name: String): ActorRef[T] = { def spawn[T](behavior: Behavior[T], name: String): ActorRef[T] = {
implicit val timeout: Timeout = testKitSettings.DefaultTimeout import akka.testkit.TestDuration
implicit val timeout: Timeout = testKitSettings.DefaultTimeout.duration.dilated
val f: Future[ActorRef[T]] = spawnActor.ask(SpawnProtocol.Spawn(behavior, name, Props.empty, _)) val f: Future[ActorRef[T]] = spawnActor.ask(SpawnProtocol.Spawn(behavior, name, Props.empty, _))
Await.result(f, timeout.duration * 2) Await.result(f, timeout.duration * 2)

View file

@ -8,7 +8,6 @@ import java.nio.charset.StandardCharsets
import scala.concurrent.Future import scala.concurrent.Future
import scala.concurrent.Promise import scala.concurrent.Promise
import scala.concurrent.duration._
import scala.util.control.NonFatal import scala.util.control.NonFatal
import com.typesafe.config.ConfigFactory import com.typesafe.config.ConfigFactory
@ -23,6 +22,7 @@ import akka.Done
import akka.actor.CoordinatedShutdown import akka.actor.CoordinatedShutdown
import akka.actor.ExtendedActorSystem import akka.actor.ExtendedActorSystem
import akka.actor.InvalidMessageException import akka.actor.InvalidMessageException
import akka.actor.testkit.typed.TestKitSettings
import akka.actor.testkit.typed.scaladsl.LogCapturing import akka.actor.testkit.typed.scaladsl.LogCapturing
import akka.actor.testkit.typed.scaladsl.TestInbox import akka.actor.testkit.typed.scaladsl.TestInbox
import akka.actor.typed.ActorRef import akka.actor.typed.ActorRef
@ -68,7 +68,9 @@ class ActorSystemSpec
with Eventually with Eventually
with LogCapturing { with LogCapturing {
implicit val patience: PatienceConfig = PatienceConfig(3.seconds, Span(100, org.scalatest.time.Millis)) private val testKitSettings = TestKitSettings(ConfigFactory.load().getConfig("akka.actor.testkit.typed"))
override implicit val patienceConfig: PatienceConfig =
PatienceConfig(testKitSettings.SingleExpectDefaultTimeout, Span(100, org.scalatest.time.Millis))
val config = ConfigFactory.parseString(""" val config = ConfigFactory.parseString("""
akka.actor.provider = cluster akka.actor.provider = cluster

View file

@ -31,8 +31,10 @@ class OutboundIdleShutdownSpec extends ArteryMultiNodeSpec(s"""
} }
""") with ImplicitSender with Eventually { """) with ImplicitSender with Eventually {
override implicit val patience: PatienceConfig = override implicit val patience: PatienceConfig = {
PatienceConfig(testKitSettings.DefaultTimeout.duration * 2, Span(200, org.scalatest.time.Millis)) import akka.testkit.TestDuration
PatienceConfig(testKitSettings.DefaultTimeout.duration.dilated * 2, Span(200, org.scalatest.time.Millis))
}
private def isArteryTcp: Boolean = private def isArteryTcp: Boolean =
RARP(system).provider.transport.asInstanceOf[ArteryTransport].settings.Transport == ArterySettings.Tcp RARP(system).provider.transport.asInstanceOf[ArteryTransport].settings.Transport == ArterySettings.Tcp

View file

@ -27,8 +27,10 @@ class QueueSourceSpec extends StreamSpec {
val pause = 300.millis val pause = 300.millis
// more frequent checks than defaults from AkkaSpec // more frequent checks than defaults from AkkaSpec
implicit val testPatience: PatienceConfig = implicit val testPatience: PatienceConfig = {
PatienceConfig(testKitSettings.DefaultTimeout.duration, Span(5, org.scalatest.time.Millis)) import akka.testkit.TestDuration
PatienceConfig(testKitSettings.DefaultTimeout.duration.dilated, Span(5, org.scalatest.time.Millis))
}
def assertSuccess(f: Future[QueueOfferResult]): Unit = { def assertSuccess(f: Future[QueueOfferResult]): Unit = {
f.futureValue should ===(QueueOfferResult.Enqueued) f.futureValue should ===(QueueOfferResult.Enqueued)

View file

@ -22,7 +22,7 @@ class TestKitSettings(val config: Config) extends Extension {
import akka.util.Helpers._ import akka.util.Helpers._
val TestTimeFactor = config val TestTimeFactor: Double = config
.getDouble("akka.test.timefactor") .getDouble("akka.test.timefactor")
.requiring(tf => !tf.isInfinite && tf > 0, "akka.test.timefactor must be positive finite double") .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 SingleExpectDefaultTimeout: FiniteDuration = config.getMillisDuration("akka.test.single-expect-default")

View file

@ -60,8 +60,6 @@ abstract class AkkaSpec(_system: ActorSystem)
with TypeCheckedTripleEquals with TypeCheckedTripleEquals
with ScalaFutures { with ScalaFutures {
implicit val patience: PatienceConfig = PatienceConfig(testKitSettings.DefaultTimeout.duration, Span(100, Millis))
def this(config: Config) = def this(config: Config) =
this( this(
ActorSystem( ActorSystem(
@ -74,6 +72,9 @@ abstract class AkkaSpec(_system: ActorSystem)
def this() = this(ActorSystem(TestKitUtils.testNameFromCallStack(classOf[AkkaSpec], "".r), AkkaSpec.testConf)) def this() = this(ActorSystem(TestKitUtils.testNameFromCallStack(classOf[AkkaSpec], "".r), AkkaSpec.testConf))
implicit val patience: PatienceConfig =
PatienceConfig(testKitSettings.SingleExpectDefaultTimeout.dilated, Span(100, Millis))
val log: LoggingAdapter = Logging(system, Logging.simpleName(this)) val log: LoggingAdapter = Logging(system, Logging.simpleName(this))
override val invokeBeforeAllAndAfterAllEvenIfNoTestsAreExpected = true override val invokeBeforeAllAndAfterAllEvenIfNoTestsAreExpected = true

View file

@ -6,16 +6,18 @@ package akka.testkit
import scala.concurrent.Await import scala.concurrent.Await
import scala.concurrent.duration._ import scala.concurrent.duration._
import scala.annotation.nowarn import scala.annotation.nowarn
import com.typesafe.config.ConfigFactory import com.typesafe.config.ConfigFactory
import language.postfixOps import language.postfixOps
import org.scalatest.matchers.should.Matchers import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec import org.scalatest.wordspec.AnyWordSpec
import akka.actor._ import akka.actor._
import akka.actor.DeadLetter import akka.actor.DeadLetter
import akka.pattern.ask import akka.pattern.ask
import akka.util.Timeout
@nowarn @nowarn
class AkkaSpecSpec extends AnyWordSpec with Matchers { class AkkaSpecSpec extends AnyWordSpec with Matchers {
@ -66,7 +68,7 @@ class AkkaSpecSpec extends AnyWordSpec with Matchers {
try { try {
var locker = Seq.empty[DeadLetter] var locker = Seq.empty[DeadLetter]
implicit val timeout = TestKitExtension(system).DefaultTimeout implicit val timeout: Timeout = TestKitExtension(system).DefaultTimeout.duration.dilated(system)
val davyJones = otherSystem.actorOf(Props(new Actor { val davyJones = otherSystem.actorOf(Props(new Actor {
def receive = { def receive = {
case m: DeadLetter => locker :+= m case m: DeadLetter => locker :+= m