|
Akka/Scala example source code file (AkkaSpecSpec.scala)
The AkkaSpecSpec.scala Akka example source code/** * Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com> */ package akka.testkit import language.reflectiveCalls import language.postfixOps import org.scalatest.WordSpec import org.scalatest.Matchers import akka.actor._ import com.typesafe.config.ConfigFactory import scala.concurrent.Await import scala.concurrent.duration._ import akka.actor.DeadLetter import akka.pattern.ask @org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner]) class AkkaSpecSpec extends WordSpec with Matchers { "An AkkaSpec" must { "warn about unhandled messages" in { implicit val system = ActorSystem("AkkaSpec0", AkkaSpec.testConf) try { val a = system.actorOf(Props.empty) EventFilter.warning(start = "unhandled message", occurrences = 1) intercept { a ! 42 } } finally { TestKit.shutdownActorSystem(system) } } "terminate all actors" in { // verbose config just for demonstration purposes, please leave in in case of debugging import scala.collection.JavaConverters._ val conf = Map( "akka.actor.debug.lifecycle" -> true, "akka.actor.debug.event-stream" -> true, "akka.loglevel" -> "DEBUG", "akka.stdout-loglevel" -> "DEBUG") val system = ActorSystem("AkkaSpec1", ConfigFactory.parseMap(conf.asJava).withFallback(AkkaSpec.testConf)) val spec = new AkkaSpec(system) { val ref = Seq(testActor, system.actorOf(Props.empty, "name")) } spec.ref foreach (_.isTerminated should not be true) TestKit.shutdownActorSystem(system) spec.awaitCond(spec.ref forall (_.isTerminated), 2 seconds) } "stop correctly when sending PoisonPill to rootGuardian" in { val system = ActorSystem("AkkaSpec2", AkkaSpec.testConf) val spec = new AkkaSpec(system) {} val latch = new TestLatch(1)(system) system.registerOnTermination(latch.countDown()) system.actorSelection("/") ! PoisonPill Await.ready(latch, 2 seconds) } "enqueue unread messages from testActor to deadLetters" in { val system, otherSystem = ActorSystem("AkkaSpec3", AkkaSpec.testConf) try { var locker = Seq.empty[DeadLetter] implicit val timeout = TestKitExtension(system).DefaultTimeout val davyJones = otherSystem.actorOf(Props(new Actor { def receive = { case m: DeadLetter ⇒ locker :+= m case "Die!" ⇒ sender() ! "finally gone"; context.stop(self) } }), "davyJones") system.eventStream.subscribe(davyJones, classOf[DeadLetter]) val probe = new TestProbe(system) probe.ref.tell(42, davyJones) /* * this will ensure that the message is actually received, otherwise it * may happen that the system.stop() suspends the testActor before it had * a chance to put the message into its private queue */ probe.receiveWhile(1 second) { case null ⇒ } val latch = new TestLatch(1)(system) system.registerOnTermination(latch.countDown()) TestKit.shutdownActorSystem(system) Await.ready(latch, 2 seconds) Await.result(davyJones ? "Die!", timeout.duration) should be("finally gone") // this will typically also contain log messages which were sent after the logger shutdown locker should contain(DeadLetter(42, davyJones, probe.ref)) } finally { TestKit.shutdownActorSystem(system) TestKit.shutdownActorSystem(otherSystem) } } } } Other Akka source code examplesHere is a short list of links related to this Akka AkkaSpecSpec.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.