|
Akka/Scala example source code file (NewRemoteActorSpec.scala)
The NewRemoteActorSpec.scala Akka example source code/** * Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com> */ package akka.remote import language.postfixOps import com.typesafe.config.ConfigFactory import akka.actor.Actor import akka.actor.ActorRef import akka.actor.Props import akka.pattern.ask import testkit.{ STMultiNodeSpec, MultiNodeConfig, MultiNodeSpec } import akka.testkit._ import akka.actor.Terminated import scala.concurrent.duration._ import com.typesafe.config.ConfigFactory object NewRemoteActorMultiJvmSpec extends MultiNodeConfig { class SomeActor extends Actor { def receive = { case "identify" ⇒ sender() ! self } } commonConfig(debugConfig(on = false).withFallback( ConfigFactory.parseString("akka.remote.log-remote-lifecycle-events = off"))) val master = role("master") val slave = role("slave") deployOn(master, """ /service-hello.remote = "@slave@" /service-hello3.remote = "@slave@" """) deployOnAll("""/service-hello2.remote = "@slave@" """) } class NewRemoteActorMultiJvmNode1 extends NewRemoteActorSpec class NewRemoteActorMultiJvmNode2 extends NewRemoteActorSpec class NewRemoteActorSpec extends MultiNodeSpec(NewRemoteActorMultiJvmSpec) with STMultiNodeSpec with ImplicitSender with DefaultTimeout { import NewRemoteActorMultiJvmSpec._ def initialParticipants = roles.size // ensure that system shutdown is successful override def verifySystemShutdown = true "A new remote actor" must { "be locally instantiated on a remote node and be able to communicate through its RemoteActorRef" taggedAs LongRunningTest in { runOn(master) { val actor = system.actorOf(Props[SomeActor], "service-hello") actor.isInstanceOf[RemoteActorRef] should be(true) actor.path.address should be(node(slave).address) val slaveAddress = testConductor.getAddressFor(slave).await actor ! "identify" expectMsgType[ActorRef].path.address should be(slaveAddress) } enterBarrier("done") } "be locally instantiated on a remote node and be able to communicate through its RemoteActorRef (with deployOnAll)" taggedAs LongRunningTest in { runOn(master) { val actor = system.actorOf(Props[SomeActor], "service-hello2") actor.isInstanceOf[RemoteActorRef] should be(true) actor.path.address should be(node(slave).address) val slaveAddress = testConductor.getAddressFor(slave).await actor ! "identify" expectMsgType[ActorRef].path.address should be(slaveAddress) } enterBarrier("done") } "be able to shutdown system when using remote deployed actor" taggedAs LongRunningTest in within(20 seconds) { runOn(master) { val actor = system.actorOf(Props[SomeActor], "service-hello3") actor.isInstanceOf[RemoteActorRef] should be(true) actor.path.address should be(node(slave).address) // This watch is in race with the shutdown of the watched system. This race should remain, as the test should // handle both cases: // - remote system receives watch, replies with DeathWatchNotification // - remote system never gets watch, but DeathWatch heartbeats time out, and AddressTerminated is generated // (this needs some time to happen) watch(actor) enterBarrier("deployed") // master system is supposed to be shutdown after slave // this should be triggered by slave system shutdown expectMsgPF() { case Terminated(`actor`) ⇒ true } } runOn(slave) { enterBarrier("deployed") } // Important that this is the last test. // It should not be any barriers here. // verifySystemShutdown = true will ensure that system shutdown is successful } } } Other Akka source code examplesHere is a short list of links related to this Akka NewRemoteActorSpec.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.