|
Akka/Scala example source code file (RemoteDeploymentDeathWatchSpec.scala)
The RemoteDeploymentDeathWatchSpec.scala Akka example source code/** * Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com> */ package akka.remote import language.postfixOps import java.util.concurrent.TimeoutException import scala.concurrent.duration._ import com.typesafe.config.ConfigFactory import akka.actor.Actor import akka.actor.ActorSystemImpl import akka.actor.Props import akka.remote.testkit.MultiNodeConfig import akka.remote.testkit.MultiNodeSpec import akka.remote.testkit.STMultiNodeSpec import akka.testkit._ import akka.testkit.TestEvent._ object RemoteDeploymentDeathWatchMultiJvmSpec extends MultiNodeConfig { val first = role("first") val second = role("second") val third = role("third") commonConfig(debugConfig(on = false).withFallback( ConfigFactory.parseString(""" akka.loglevel = INFO akka.remote.log-remote-lifecycle-events = off """))) deployOn(second, """/hello.remote = "@third@" """) class Hello extends Actor { def receive = Actor.emptyBehavior } } // Several different variations of the test class RemoteDeploymentDeathWatchFastMultiJvmNode1 extends RemoteDeploymentNodeDeathWatchFastSpec class RemoteDeploymentDeathWatchFastMultiJvmNode2 extends RemoteDeploymentNodeDeathWatchFastSpec class RemoteDeploymentDeathWatchFastMultiJvmNode3 extends RemoteDeploymentNodeDeathWatchFastSpec abstract class RemoteDeploymentNodeDeathWatchFastSpec extends RemoteDeploymentDeathWatchSpec { override def scenario = "fast" } class RemoteDeploymentDeathWatchSlowMultiJvmNode1 extends RemoteDeploymentNodeDeathWatchSlowSpec class RemoteDeploymentDeathWatchSlowMultiJvmNode2 extends RemoteDeploymentNodeDeathWatchSlowSpec class RemoteDeploymentDeathWatchSlowMultiJvmNode3 extends RemoteDeploymentNodeDeathWatchSlowSpec abstract class RemoteDeploymentNodeDeathWatchSlowSpec extends RemoteDeploymentDeathWatchSpec { override def scenario = "slow" override def sleep(): Unit = Thread.sleep(3000) } abstract class RemoteDeploymentDeathWatchSpec extends MultiNodeSpec(RemoteDeploymentDeathWatchMultiJvmSpec) with STMultiNodeSpec with ImplicitSender { import RemoteDeploymentDeathWatchMultiJvmSpec._ def scenario: String // Possible to override to let them heartbeat for a while. def sleep(): Unit = () override def initialParticipants = roles.size "An actor system that deploys actors on another node" must { "be able to shutdown when remote node crash" taggedAs LongRunningTest in within(20 seconds) { runOn(second) { // remote deployment to third val hello = system.actorOf(Props[Hello], "hello") hello.path.address should be(node(third).address) enterBarrier("hello-deployed") enterBarrier("third-crashed") sleep() // if the remote deployed actor is not removed the system will not shutdown val timeout = remainingOrDefault try system.awaitTermination(timeout) catch { case _: TimeoutException ⇒ fail("Failed to stop [%s] within [%s] \n%s".format(system.name, timeout, system.asInstanceOf[ActorSystemImpl].printTree)) } } runOn(third) { enterBarrier("hello-deployed") enterBarrier("third-crashed") } runOn(first) { enterBarrier("hello-deployed") sleep() testConductor.exit(third, 0).await enterBarrier("third-crashed") // second system will be shutdown testConductor.shutdown(second).await enterBarrier("after-3") } } } } Other Akka source code examplesHere is a short list of links related to this Akka RemoteDeploymentDeathWatchSpec.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.