2018-10-29 17:19:37 +08:00
|
|
|
/*
|
2019-01-02 18:55:26 +08:00
|
|
|
* Copyright (C) 2014-2019 Lightbend Inc. <https://www.lightbend.com>
|
2014-11-27 13:12:48 +01:00
|
|
|
*/
|
2018-03-13 23:45:55 +09:00
|
|
|
|
2014-11-27 13:12:48 +01:00
|
|
|
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))
|
2019-06-26 15:35:20 +01:00
|
|
|
deadListener.expectNoMessage()
|
2014-11-27 13:12:48 +01:00
|
|
|
|
|
|
|
|
suppressedListener.expectMsg(SuppressedDeadLetter(SuppressedMsg, testActor, system.deadLetters))
|
2019-06-26 15:35:20 +01:00
|
|
|
suppressedListener.expectNoMessage()
|
2014-11-27 13:12:48 +01:00
|
|
|
|
|
|
|
|
allListener.expectMsg(SuppressedDeadLetter(SuppressedMsg, testActor, system.deadLetters))
|
|
|
|
|
allListener.expectMsg(DeadLetter(NormalMsg, testActor, deadActor))
|
2019-06-26 15:35:20 +01:00
|
|
|
allListener.expectNoMessage()
|
2014-11-27 13:12:48 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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)
|
2019-04-15 09:54:16 +01:00
|
|
|
deadListener.expectNoMessage(Duration.Zero)
|
|
|
|
|
suppressedListener.expectNoMessage(Duration.Zero)
|
|
|
|
|
allListener.expectNoMessage(Duration.Zero)
|
2014-11-27 13:12:48 +01:00
|
|
|
}
|
|
|
|
|
}
|