|
Akka/Scala example source code file (LocalActorRefProviderSpec.scala)
The LocalActorRefProviderSpec.scala Akka example source code/** * Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com> */ package akka.actor import language.postfixOps import akka.testkit._ import scala.concurrent.Await import scala.concurrent.duration._ import akka.util.Timeout import scala.concurrent.Future import scala.util.Success import scala.util.Failure object LocalActorRefProviderSpec { val config = """ akka { actor { default-dispatcher { executor = "thread-pool-executor" thread-pool-executor { core-pool-size-min = 16 core-pool-size-max = 16 } } } } """ } @org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner]) class LocalActorRefProviderSpec extends AkkaSpec(LocalActorRefProviderSpec.config) { "An LocalActorRefProvider" must { "find actor refs using actorFor" in { val a = system.actorOf(Props(new Actor { def receive = { case _ ⇒ } })) val b = system.actorFor(a.path) a should be(b) } "find child actor with URL encoded name using actorFor" in { val childName = "akka%3A%2F%2FClusterSystem%40127.0.0.1%3A2552" val a = system.actorOf(Props(new Actor { val child = context.actorOf(Props.empty, name = childName) def receive = { case "lookup" ⇒ if (childName == child.path.name) sender() ! context.actorFor(childName) else sender() ! s"$childName is not ${child.path.name}!" } })) a.tell("lookup", testActor) val b = expectMsgType[ActorRef] b.isTerminated should be(false) b.path.name should be(childName) } } "A LocalActorRef's ActorCell" must { "not retain its original Props when terminated" in { val GetChild = "GetChild" val a = watch(system.actorOf(Props(new Actor { val child = context.actorOf(Props.empty) def receive = { case `GetChild` ⇒ sender() ! child } }))) a.tell(GetChild, testActor) val child = expectMsgType[ActorRef] val childProps1 = child.asInstanceOf[LocalActorRef].underlying.props childProps1 should be(Props.empty) system stop a expectTerminated(a) // the fields are cleared after the Terminated message has been sent, // so we need to check for a reasonable time after we receive it awaitAssert({ val childProps2 = child.asInstanceOf[LocalActorRef].underlying.props childProps2 should not be theSameInstanceAs(childProps1) childProps2 should be theSameInstanceAs ActorCell.terminatedProps }, 1 second) } } "An ActorRefFactory" must { implicit val ec = system.dispatcher "only create one instance of an actor with a specific address in a concurrent environment" in { val impl = system.asInstanceOf[ActorSystemImpl] val provider = impl.provider provider.isInstanceOf[LocalActorRefProvider] should be(true) for (i ← 0 until 100) { val address = "new-actor" + i implicit val timeout = Timeout(5 seconds) val actors = for (j ← 1 to 4) yield Future(system.actorOf(Props(new Actor { def receive = { case _ ⇒ } }), address)) val set = Set() ++ actors.map(a ⇒ Await.ready(a, timeout.duration).value match { case Some(Success(a: ActorRef)) ⇒ 1 case Some(Failure(ex: InvalidActorNameException)) ⇒ 2 case x ⇒ x }) set should be(Set(1, 2)) } } "only create one instance of an actor from within the same message invocation" in { val supervisor = system.actorOf(Props(new Actor { def receive = { case "" ⇒ val a, b = context.actorOf(Props.empty, "duplicate") } })) EventFilter[InvalidActorNameException](occurrences = 1) intercept { supervisor ! "" } } "throw suitable exceptions for malformed actor names" in { intercept[InvalidActorNameException](system.actorOf(Props.empty, null)).getMessage.contains("null") should be(true) intercept[InvalidActorNameException](system.actorOf(Props.empty, "")).getMessage.contains("empty") should be(true) intercept[InvalidActorNameException](system.actorOf(Props.empty, "$hallo")).getMessage.contains("conform") should be(true) intercept[InvalidActorNameException](system.actorOf(Props.empty, "a%")).getMessage.contains("conform") should be(true) intercept[InvalidActorNameException](system.actorOf(Props.empty, "%3")).getMessage.contains("conform") should be(true) intercept[InvalidActorNameException](system.actorOf(Props.empty, "%1t")).getMessage.contains("conform") should be(true) intercept[InvalidActorNameException](system.actorOf(Props.empty, "a?")).getMessage.contains("conform") should be(true) intercept[InvalidActorNameException](system.actorOf(Props.empty, "üß")).getMessage.contains("conform") should be(true) } } } Other Akka source code examplesHere is a short list of links related to this Akka LocalActorRefProviderSpec.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.