Make sure actor started timer before we change time #25799

This commit is contained in:
Johan Andrén 2019-03-19 14:02:50 +01:00 committed by GitHub
parent 97d7eadb6f
commit dffd5da3a4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -48,7 +48,7 @@ class ManualTimerExampleSpec extends ScalaTestWithActorTestKit(ManualTime.config
val probe = TestProbe[Tock.type]()
val behavior = Behaviors.withTimers[Tick.type] { timer =>
timer.startPeriodicTimer("T", Tick, 10.millis)
Behaviors.receive { (context, Tick) =>
Behaviors.receiveMessage { _ =>
probe.ref ! Tock
Behaviors.same
}
@ -56,7 +56,7 @@ class ManualTimerExampleSpec extends ScalaTestWithActorTestKit(ManualTime.config
spawn(behavior)
for (_ <- Range(0, 5)) {
for (_ <- 0 until 5) {
manualTime.expectNoMessageFor(9.millis, probe)
manualTime.timePasses(1.milli)
@ -69,6 +69,7 @@ class ManualTimerExampleSpec extends ScalaTestWithActorTestKit(ManualTime.config
case class Tick(n: Int) extends Command
case class SlowThenBump(nextCount: Int) extends Command
sealed trait Event
case object Started extends Event
case class Tock(n: Int) extends Event
case object SlowThenBumpAck extends Event
@ -77,21 +78,25 @@ class ManualTimerExampleSpec extends ScalaTestWithActorTestKit(ManualTime.config
val behavior = Behaviors.withTimers[Command] { timer =>
timer.startPeriodicTimer("T", Tick(1), interval)
Behaviors.receive { (context, cmd) =>
cmd match {
case Tick(n) =>
probe.ref ! Tock(n)
Behaviors.same
case SlowThenBump(nextCount) =>
manualTime.timePasses(interval)
timer.startPeriodicTimer("T", Tick(nextCount), interval)
probe.ref ! SlowThenBumpAck
Behaviors.same
}
probe.ref ! Started
Behaviors.receiveMessage {
case Tick(n) =>
probe.ref ! Tock(n)
Behaviors.same
case SlowThenBump(nextCount) =>
manualTime.timePasses(interval)
timer.startPeriodicTimer("T", Tick(nextCount), interval)
probe.ref ! SlowThenBumpAck
Behaviors.same
}
}
val ref = spawn(behavior)
// make sure we actually started the timer before we change the time
probe.expectMessage(Started)
manualTime.timePasses(11.millis)
probe.expectMessage(Tock(1))