akka.remote.testkit
Class MultiNodeSpec

java.lang.Object
  extended by akka.testkit.TestKit
      extended by akka.remote.testkit.MultiNodeSpec
All Implemented Interfaces:
MultiNodeSpecCallbacks, TestKitBase

public abstract class MultiNodeSpec
extends TestKit
implements MultiNodeSpecCallbacks

Note: To be able to run tests with everything ignored or excluded by tags you must not use testconductor, or helper methods that use testconductor, from the constructor of your test class. Otherwise the controller node might be shutdown before other nodes have completed and you will see errors like: AskTimeoutException: sending to terminated ref breaks promises. Using lazy val is fine.


Nested Class Summary
 class MultiNodeSpec.AwaitHelper<T>
           
 
Constructor Summary
MultiNodeSpec(MultiNodeConfig config)
           
MultiNodeSpec(RoleName myself, ActorSystem _system, scala.collection.immutable.Seq<RoleName> _roles, scala.Function1<RoleName,scala.collection.Seq<java.lang.String>> deployments)
           
 
Method Summary
protected  void afterTermination()
          Override this method to do something when the whole test is terminating.
protected  void atStartup()
          Override this method to do something when the whole test is starting up.
<T> MultiNodeSpec.AwaitHelper<T>
awaitHelper(scala.concurrent.Awaitable<T> w)
          Enrich .await() onto all Awaitables, using remaining duration from the innermost enclosing within block or QueryTimeout.
static com.typesafe.config.Config baseConfig()
           
 void enterBarrier(scala.collection.Seq<java.lang.String> name)
          Enter the named barriers in the order given.
abstract  int initialParticipants()
          TO BE DEFINED BY USER: Defines the number of participants required for starting the test.
 boolean isNode(scala.collection.Seq<RoleName> nodes)
          Verify that the running node matches one of the given nodes
 LoggingAdapter log()
           
static int maxNodes()
          Number of nodes node taking part in this test.
 void multiNodeSpecAfterAll()
          Call this after the all test cases have run.
 void multiNodeSpecBeforeAll()
          Call this before the start of the test run.
 void muteDeadLetters(scala.collection.Seq<java.lang.Class<?>> messageClasses, ActorSystem sys)
           
 RoleName myself()
           
 ActorPath node(RoleName role)
          Query the controller for the transport address of the given node (by role name) and return that as an ActorPath for easy composition:
static com.typesafe.config.Config nodeConfig()
           
 scala.collection.immutable.Seq<RoleName> roles()
          All registered roles
 void runOn(scala.collection.Seq<RoleName> nodes, scala.Function0<scala.runtime.BoxedUnit> thunk)
          Execute the given block of code only on the given nodes (names according to the roleMap).
static java.lang.Integer selfIndex()
          Index of this node in the roles sequence.
static java.lang.String selfName()
          Name (or IP address; must be resolvable using InetAddress.getByName) of the host this node is running on.
static int selfPort()
          Port number of this node.
static java.lang.String serverName()
          Name (or IP address; must be resolvable using InetAddress.getByName) of the host that the server node is running on.
static int serverPort()
          Port number of the node that's running the server system.
 scala.concurrent.duration.FiniteDuration shutdownTimeout()
           
 TestConductorExt testConductor()
          Access to the barriers, failure injection, etc.
 boolean verifySystemShutdown()
          Override this and return true to assert that the shutdown of the ActorSystem was done properly.
 
Methods inherited from class akka.testkit.TestKit
awaitCond, dilated, now, shutdownActorSystem, system, testActorId
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface akka.testkit.TestKitBase
awaitAssert, awaitCond, checkMissingAndUnexpected, end, expectMsg_internal, expectMsg, expectMsg, expectMsgAllClassOf, expectMsgAllClassOf, expectMsgAllConformingOf, expectMsgAllConformingOf, expectMsgAllOf_internal, expectMsgAllOf, expectMsgAllOf, expectMsgAnyClassOf_internal, expectMsgAnyClassOf, expectMsgAnyClassOf, expectMsgAnyOf_internal, expectMsgAnyOf, expectMsgAnyOf, expectMsgClass_internal, expectMsgClass, expectMsgClass, expectMsgPF, expectMsgType, expectMsgType, expectNoMsg_internal, expectNoMsg, expectNoMsg, expectTerminated, fishForMessage, format, ignoreMsg, ignoreNoMsg, internalExpectMsgAllClassOf, internalExpectMsgAllConformingOf, lastMessage, lastSender, lastWasNoMsg, msgAvailable, now, queue, receiveN_internal, receiveN, receiveN, receiveOne, receiveWhile, remaining, remainingOr, remainingOrDilated, setAutoPilot, shutdown, testActor, testKitSettings, unwatch, watch, within, within
 

Constructor Detail

MultiNodeSpec

public MultiNodeSpec(RoleName myself,
                     ActorSystem _system,
                     scala.collection.immutable.Seq<RoleName> _roles,
                     scala.Function1<RoleName,scala.collection.Seq<java.lang.String>> deployments)

MultiNodeSpec

public MultiNodeSpec(MultiNodeConfig config)
Method Detail

maxNodes

public static int maxNodes()
Number of nodes node taking part in this test.


 -Dmultinode.max-nodes=4
 


selfName

public static java.lang.String selfName()
Name (or IP address; must be resolvable using InetAddress.getByName) of the host this node is running on.


 -Dmultinode.host=host.example.com
 

InetAddress.getLocalHost.getHostAddress is used if empty or "localhost" is defined as system property "multinode.host".


selfPort

public static int selfPort()
Port number of this node. Defaults to 0 which means a random port.


 -Dmultinode.port=0
 


serverName

public static java.lang.String serverName()
Name (or IP address; must be resolvable using InetAddress.getByName) of the host that the server node is running on.


 -Dmultinode.server-host=server.example.com
 


serverPort

public static int serverPort()
Port number of the node that's running the server system. Defaults to 4711.


 -Dmultinode.server-port=4711
 


selfIndex

public static java.lang.Integer selfIndex()
Index of this node in the roles sequence. The TestConductor is started in “controller” mode on selfIndex 0, i.e. there you can inject failures and shutdown other nodes etc.


 -Dmultinode.index=0
 


nodeConfig

public static com.typesafe.config.Config nodeConfig()

baseConfig

public static com.typesafe.config.Config baseConfig()

myself

public RoleName myself()

log

public LoggingAdapter log()

multiNodeSpecBeforeAll

public final void multiNodeSpecBeforeAll()
Description copied from interface: MultiNodeSpecCallbacks
Call this before the start of the test run. NOT before every test case.

Specified by:
multiNodeSpecBeforeAll in interface MultiNodeSpecCallbacks

multiNodeSpecAfterAll

public final void multiNodeSpecAfterAll()
Description copied from interface: MultiNodeSpecCallbacks
Call this after the all test cases have run. NOT after every test case.

Specified by:
multiNodeSpecAfterAll in interface MultiNodeSpecCallbacks

shutdownTimeout

public scala.concurrent.duration.FiniteDuration shutdownTimeout()

verifySystemShutdown

public boolean verifySystemShutdown()
Override this and return true to assert that the shutdown of the ActorSystem was done properly.


atStartup

protected void atStartup()
Override this method to do something when the whole test is starting up.


afterTermination

protected void afterTermination()
Override this method to do something when the whole test is terminating.


roles

public scala.collection.immutable.Seq<RoleName> roles()
All registered roles


initialParticipants

public abstract int initialParticipants()
TO BE DEFINED BY USER: Defines the number of participants required for starting the test. This might not be equals to the number of nodes available to the test.

Must be a def:


 def initialParticipants = 5
 


testConductor

public TestConductorExt testConductor()
Access to the barriers, failure injection, etc. The extension will have been started either in Conductor or Player mode when the constructor of MultiNodeSpec finishes, i.e. do not call the start*() methods yourself!


runOn

public void runOn(scala.collection.Seq<RoleName> nodes,
                  scala.Function0<scala.runtime.BoxedUnit> thunk)
Execute the given block of code only on the given nodes (names according to the roleMap).


isNode

public boolean isNode(scala.collection.Seq<RoleName> nodes)
Verify that the running node matches one of the given nodes


enterBarrier

public void enterBarrier(scala.collection.Seq<java.lang.String> name)
Enter the named barriers in the order given. Use the remaining duration from the innermost enclosing within block or the default BarrierTimeout


node

public ActorPath node(RoleName role)
Query the controller for the transport address of the given node (by role name) and return that as an ActorPath for easy composition:


 val serviceA = system.actorSelection(node("master") / "user" / "serviceA")
 


muteDeadLetters

public void muteDeadLetters(scala.collection.Seq<java.lang.Class<?>> messageClasses,
                            ActorSystem sys)

awaitHelper

public <T> MultiNodeSpec.AwaitHelper<T> awaitHelper(scala.concurrent.Awaitable<T> w)
Enrich .await() onto all Awaitables, using remaining duration from the innermost enclosing within block or QueryTimeout.