pekko/akka-actor-tests/src/test/scala/akka/actor/DeadLetterSupressionSpec.scala
Konrad 'ktoso' Malawski 73cd1d7375 +act #15163 allows to suppress certain messages from being dead-letter-ed
Conflicts:
	akka-actor/src/main/scala/akka/actor/ActorRef.scala
2014-12-01 17:03:13 +01:00

80 lines
2.7 KiB
Scala

/**
* Copyright (C) 2014 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.actor
import akka.event.Logging
import akka.testkit.AkkaSpec
import akka.testkit.ImplicitSender
import akka.testkit.TestActors
import akka.testkit.TestProbe
import scala.concurrent.duration._
object DeadLetterSupressionSpec {
case object NormalMsg
case object SuppressedMsg extends DeadLetterSuppression
}
class DeadLetterSupressionSpec extends AkkaSpec with ImplicitSender {
import DeadLetterSupressionSpec._
val deadActor = system.actorOf(TestActors.echoActorProps)
watch(deadActor)
deadActor ! PoisonPill
expectTerminated(deadActor)
s"must suppress message from default dead-letters logging (sent to dead: ${Logging.simpleName(deadActor)})" in {
val deadListener = TestProbe()
system.eventStream.subscribe(deadListener.ref, classOf[DeadLetter])
val suppressedListener = TestProbe()
system.eventStream.subscribe(suppressedListener.ref, classOf[SuppressedDeadLetter])
val allListener = TestProbe()
system.eventStream.subscribe(allListener.ref, classOf[AllDeadLetters])
deadActor ! SuppressedMsg
deadActor ! NormalMsg
deadListener.expectMsg(DeadLetter(NormalMsg, testActor, deadActor))
deadListener.expectNoMsg(200.millis)
suppressedListener.expectMsg(SuppressedDeadLetter(SuppressedMsg, testActor, system.deadLetters))
suppressedListener.expectNoMsg(200.millis)
allListener.expectMsg(SuppressedDeadLetter(SuppressedMsg, testActor, system.deadLetters))
allListener.expectMsg(DeadLetter(NormalMsg, testActor, deadActor))
allListener.expectNoMsg(200.millis)
}
s"must suppress message from default dead-letters logging (sent to dead: ${Logging.simpleName(system.deadLetters)})" in {
val deadListener = TestProbe()
system.eventStream.subscribe(deadListener.ref, classOf[DeadLetter])
val suppressedListener = TestProbe()
system.eventStream.subscribe(suppressedListener.ref, classOf[SuppressedDeadLetter])
val allListener = TestProbe()
system.eventStream.subscribe(allListener.ref, classOf[AllDeadLetters])
system.deadLetters ! SuppressedMsg
system.deadLetters ! NormalMsg
deadListener.expectMsg(200.millis, DeadLetter(NormalMsg, testActor, system.deadLetters))
suppressedListener.expectMsg(200.millis, SuppressedDeadLetter(SuppressedMsg, testActor, system.deadLetters))
allListener.expectMsg(200.millis, SuppressedDeadLetter(SuppressedMsg, testActor, system.deadLetters))
allListener.expectMsg(200.millis, DeadLetter(NormalMsg, testActor, system.deadLetters))
Thread.sleep(200)
deadListener.expectNoMsg(Duration.Zero)
suppressedListener.expectNoMsg(Duration.Zero)
allListener.expectNoMsg(Duration.Zero)
}
}