|
Akka/Scala example source code file (DeployerSpec.scala)
The DeployerSpec.scala Akka example source code/** * Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com> */ package akka.actor import language.postfixOps import akka.testkit.AkkaSpec import com.typesafe.config.ConfigFactory import com.typesafe.config.ConfigParseOptions import akka.routing._ import scala.concurrent.duration._ object DeployerSpec { val deployerConf = ConfigFactory.parseString(""" akka.actor.deployment { /service1 { } /service-direct { router = from-code } /service-direct2 { router = from-code # nr-of-instances ignored when router = from-code nr-of-instances = 2 } /service3 { dispatcher = my-dispatcher } /service4 { mailbox = my-mailbox } /service-round-robin { router = round-robin-pool } /service-random { router = random-pool } /service-scatter-gather { router = scatter-gather-pool within = 2 seconds } /service-consistent-hashing { router = consistent-hashing-pool } /service-resizer { router = round-robin-pool resizer { lower-bound = 1 upper-bound = 10 } } /some/random-service { router = round-robin-pool } "/some/*" { router = random-pool } "/*/some" { router = scatter-gather-pool } } """, ConfigParseOptions.defaults) class RecipeActor extends Actor { def receive = { case _ ⇒ } } } @org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner]) class DeployerSpec extends AkkaSpec(DeployerSpec.deployerConf) { "A Deployer" must { "be able to parse 'akka.actor.deployment._' with all default values" in { val service = "/service1" val deployment = system.asInstanceOf[ActorSystemImpl].provider.deployer.lookup(service.split("/").drop(1)) deployment should be(Some( Deploy( service, deployment.get.config, NoRouter, NoScopeGiven, Deploy.NoDispatcherGiven, Deploy.NoMailboxGiven))) } "use None deployment for undefined service" in { val service = "/undefined" val deployment = system.asInstanceOf[ActorSystemImpl].provider.deployer.lookup(service.split("/").drop(1)) deployment should be(None) } "be able to parse 'akka.actor.deployment._' with dispatcher config" in { val service = "/service3" val deployment = system.asInstanceOf[ActorSystemImpl].provider.deployer.lookup(service.split("/").drop(1)) deployment should be(Some( Deploy( service, deployment.get.config, NoRouter, NoScopeGiven, dispatcher = "my-dispatcher", Deploy.NoMailboxGiven))) } "be able to parse 'akka.actor.deployment._' with mailbox config" in { val service = "/service4" val deployment = system.asInstanceOf[ActorSystemImpl].provider.deployer.lookup(service.split("/").drop(1)) deployment should be(Some( Deploy( service, deployment.get.config, NoRouter, NoScopeGiven, Deploy.NoDispatcherGiven, mailbox = "my-mailbox"))) } "detect invalid number-of-instances" in { intercept[com.typesafe.config.ConfigException.WrongType] { val invalidDeployerConf = ConfigFactory.parseString(""" akka.actor.deployment { /service-invalid-number-of-instances { router = round-robin-pool nr-of-instances = boom } } """, ConfigParseOptions.defaults).withFallback(AkkaSpec.testConf) shutdown(ActorSystem("invalid-number-of-instances", invalidDeployerConf)) } } "detect invalid deployment path" in { val e = intercept[InvalidActorNameException] { val invalidDeployerConf = ConfigFactory.parseString(""" akka.actor.deployment { /gul/ubåt { router = round-robin-pool nr-of-instances = 2 } } """, ConfigParseOptions.defaults).withFallback(AkkaSpec.testConf) shutdown(ActorSystem("invalid-path", invalidDeployerConf)) } e.getMessage should include("[ubåt]") e.getMessage should include("[/gul/ubåt]") } "be able to parse 'akka.actor.deployment._' with from-code router" in { assertRouting("/service-direct", NoRouter, "/service-direct") } "ignore nr-of-instances with from-code router" in { assertRouting("/service-direct2", NoRouter, "/service-direct2") } "be able to parse 'akka.actor.deployment._' with round-robin router" in { assertRouting("/service-round-robin", RoundRobinPool(1), "/service-round-robin") } "be able to parse 'akka.actor.deployment._' with random router" in { assertRouting("/service-random", RandomPool(1), "/service-random") } "be able to parse 'akka.actor.deployment._' with scatter-gather router" in { assertRouting("/service-scatter-gather", ScatterGatherFirstCompletedPool(nrOfInstances = 1, within = 2 seconds), "/service-scatter-gather") } "be able to parse 'akka.actor.deployment._' with consistent-hashing router" in { assertRouting("/service-consistent-hashing", ConsistentHashingPool(1), "/service-consistent-hashing") } "be able to parse 'akka.actor.deployment._' with router resizer" in { val resizer = DefaultResizer() assertRouting("/service-resizer", RoundRobinPool(nrOfInstances = 0, resizer = Some(resizer)), "/service-resizer") } "be able to use wildcards" in { assertRouting("/some/wildcardmatch", RandomPool(1), "/some/*") assertRouting("/somewildcardmatch/some", ScatterGatherFirstCompletedPool(nrOfInstances = 1, within = 2 seconds), "/*/some") } "have correct router mappings" in { val mapping = system.asInstanceOf[ActorSystemImpl].provider.deployer.routerTypeMapping mapping("from-code") should be(classOf[akka.routing.NoRouter].getName) mapping("round-robin-pool") should be(classOf[akka.routing.RoundRobinPool].getName) mapping("round-robin-group") should be(classOf[akka.routing.RoundRobinGroup].getName) mapping("random-pool") should be(classOf[akka.routing.RandomPool].getName) mapping("random-group") should be(classOf[akka.routing.RandomGroup].getName) mapping("balancing-pool") should be(classOf[akka.routing.BalancingPool].getName) mapping("smallest-mailbox-pool") should be(classOf[akka.routing.SmallestMailboxPool].getName) mapping("broadcast-pool") should be(classOf[akka.routing.BroadcastPool].getName) mapping("broadcast-group") should be(classOf[akka.routing.BroadcastGroup].getName) mapping("scatter-gather-pool") should be(classOf[akka.routing.ScatterGatherFirstCompletedPool].getName) mapping("scatter-gather-group") should be(classOf[akka.routing.ScatterGatherFirstCompletedGroup].getName) mapping("consistent-hashing-pool") should be(classOf[akka.routing.ConsistentHashingPool].getName) mapping("consistent-hashing-group") should be(classOf[akka.routing.ConsistentHashingGroup].getName) } def assertRouting(service: String, expected: RouterConfig, expectPath: String): Unit = { val deployment = system.asInstanceOf[ActorSystemImpl].provider.deployer.lookup(service.split("/").drop(1)) deployment.map(_.path).getOrElse("NOT FOUND") should be(expectPath) deployment.get.routerConfig.getClass should be(expected.getClass) deployment.get.scope should be(NoScopeGiven) expected match { case pool: Pool ⇒ deployment.get.routerConfig.asInstanceOf[Pool].resizer should be(pool.resizer) case _ ⇒ } } } } Other Akka source code examplesHere is a short list of links related to this Akka DeployerSpec.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.