Package akka.remote.testkit
Class MultiNodeSpec
- java.lang.Object
-
- akka.testkit.TestKit
-
- 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 usetestconductor
, or helper methods that usetestconductor
, 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
Nested Classes Modifier and Type Class Description class
MultiNodeSpec.AwaitHelper<T>
-
Constructor Summary
Constructors Constructor Description MultiNodeSpec(RoleName myself, ActorSystem _system, scala.collection.immutable.Seq<RoleName> _roles, scala.Function1<RoleName,scala.collection.immutable.Seq<java.lang.String>> deployments)
MultiNodeSpec(MultiNodeConfig config)
MultiNodeSpec(MultiNodeConfig config, scala.Function1<com.typesafe.config.Config,ActorSystem> actorSystemCreator)
Constructor for using arbitrary logic to create the actor system used in the multi node spec (theConfig
passed to the creator must be used in the created actor system for the multi node tests to work)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description 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.protected void
attachConductor(TestConductorExt tc)
<T> MultiNodeSpec.AwaitHelper<T>
awaitHelper(scala.concurrent.Awaitable<T> w)
Enrich.await()
onto all Awaitables, using remaining duration from the innermost enclosingwithin
block or QueryTimeout.static com.typesafe.config.Config
configureNextPortIfFixed(com.typesafe.config.Config config)
void
enterBarrier(scala.collection.immutable.Seq<java.lang.String> name)
Enter the named barriers in the order given.void
enterBarrier(scala.concurrent.duration.FiniteDuration max, scala.collection.immutable.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.protected void
injectDeployments(ActorSystem sys, RoleName role)
boolean
isNode(scala.collection.immutable.Seq<RoleName> nodes)
Verify that the running node matches one of the given nodesLoggingAdapter
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.immutable.Seq<java.lang.Class<?>> messageClasses, ActorSystem sys)
ActorSystem
muteDeadLetters$default$2(scala.collection.immutable.Seq<java.lang.Class<?>> messageClasses)
protected Address
myAddress()
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:scala.collection.immutable.Seq<RoleName>
roles()
All registered rolesvoid
runOn(scala.collection.immutable.Seq<RoleName> nodes, scala.Function0<scala.runtime.BoxedUnit> thunk)
Execute the given block of code only on the given nodes (names according to theroleMap
).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()
protected ActorSystem
startNewSystem()
This method starts a new ActorSystem with the same configuration as the previous one on the current node, including deployments.static int
tcpPort()
TCP Port number to be used when running tests on TCP.TestConductorExt
testConductor()
Access to the barriers, failure injection, etc.void
testConductor_$eq(TestConductorExt x$1)
static scala.Option<java.lang.Object>
udpPort()
UDP Port number to be used when running tests on UDP.boolean
verifySystemShutdown()
Override this and returntrue
to assert that the shutdown of theActorSystem
was done properly.-
Methods inherited from class akka.testkit.TestKit
awaitCond, awaitCond$default$3, awaitCond$default$4, now, shutdownActorSystem, shutdownActorSystem$default$2, shutdownActorSystem$default$3, system, testActor
-
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
assertForDuration, assertForDuration$default$3, awaitAssert, awaitAssert$default$2, awaitAssert$default$3, awaitCond, awaitCond$default$2, awaitCond$default$3, awaitCond$default$4, checkMissingAndUnexpected, childActorOf, childActorOf, childActorOf, childActorOf, end_$eq, expectMsg, expectMsg, expectMsg, expectMsg_internal, expectMsg_internal$default$3, expectMsgAllClassOf, expectMsgAllClassOf, expectMsgAllConformingOf, expectMsgAllConformingOf, expectMsgAllOf, expectMsgAllOf, expectMsgAllOf_internal, expectMsgAnyClassOf, expectMsgAnyClassOf, expectMsgAnyClassOf_internal, expectMsgAnyOf, expectMsgAnyOf, expectMsgAnyOf_internal, expectMsgClass, expectMsgClass, expectMsgClass_internal, expectMsgPF, expectMsgPF$default$1, expectMsgPF$default$2, expectMsgType, expectMsgType, expectNoMessage, expectNoMessage, expectNoMsg_internal, expectTerminated, expectTerminated$default$2, fishForMessage, fishForMessage$default$1, fishForMessage$default$2, fishForSpecificMessage, fishForSpecificMessage$default$1, fishForSpecificMessage$default$2, format, ignoreMsg, ignoreNoMsg, internalExpectMsgAllClassOf, internalExpectMsgAllConformingOf, lastSender, lastWasNoMsg_$eq, msgAvailable, now, receiveN, receiveN, receiveN_internal, receiveOne, receiveWhile, receiveWhile$default$1, receiveWhile$default$2, receiveWhile$default$3, remaining, remainingOr, remainingOrDefault, remainingOrDilated, setAutoPilot, shutdown, shutdown$default$1, shutdown$default$2, shutdown$default$3, testActorName, 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.immutable.Seq<java.lang.String>> deployments)
-
MultiNodeSpec
public MultiNodeSpec(MultiNodeConfig config, scala.Function1<com.typesafe.config.Config,ActorSystem> actorSystemCreator)
Constructor for using arbitrary logic to create the actor system used in the multi node spec (theConfig
passed to the creator must be used in the created actor system for the multi node tests to work)
-
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".
-
tcpPort
public static int tcpPort()
TCP Port number to be used when running tests on TCP. 0 means a random port.-Dmultinode.port=0
-
udpPort
public static scala.Option<java.lang.Object> udpPort()
UDP Port number to be used when running tests on UDP. 0 means a random port.-Dmultinode.udp.port=0
-
selfPort
public static int selfPort()
Port number of this node.This is defined in function of property
multinode.protocol
. If set to 'udp', udpPort will be used. If unset or any other value, it will default to tcpPort.
-
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
-
configureNextPortIfFixed
public static com.typesafe.config.Config configureNextPortIfFixed(com.typesafe.config.Config config)
-
myself
public RoleName myself()
-
log
public LoggingAdapter log()
-
awaitHelper
public <T> MultiNodeSpec.AwaitHelper<T> awaitHelper(scala.concurrent.Awaitable<T> w)
Enrich.await()
onto all Awaitables, using remaining duration from the innermost enclosingwithin
block or QueryTimeout.
-
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 interfaceMultiNodeSpecCallbacks
-
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 interfaceMultiNodeSpecCallbacks
-
shutdownTimeout
public scala.concurrent.duration.FiniteDuration shutdownTimeout()
-
verifySystemShutdown
public boolean verifySystemShutdown()
Override this and returntrue
to assert that the shutdown of theActorSystem
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!
-
testConductor_$eq
public void testConductor_$eq(TestConductorExt x$1)
-
runOn
public void runOn(scala.collection.immutable.Seq<RoleName> nodes, scala.Function0<scala.runtime.BoxedUnit> thunk)
Execute the given block of code only on the given nodes (names according to theroleMap
).
-
isNode
public boolean isNode(scala.collection.immutable.Seq<RoleName> nodes)
Verify that the running node matches one of the given nodes
-
enterBarrier
public void enterBarrier(scala.collection.immutable.Seq<java.lang.String> name)
Enter the named barriers in the order given. Use the remaining duration from the innermost enclosingwithin
block or the defaultBarrierTimeout
.
-
enterBarrier
public void enterBarrier(scala.concurrent.duration.FiniteDuration max, scala.collection.immutable.Seq<java.lang.String> name)
Enter the named barriers in the order given. Use the remaining duration from the innermost enclosingwithin
block or the passedmax
timeout.Note that the
max
timeout is scaled using Duration.dilated, which uses the configuration entry "akka.test.timefactor".
-
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.immutable.Seq<java.lang.Class<?>> messageClasses, ActorSystem sys)
-
muteDeadLetters$default$2
public ActorSystem muteDeadLetters$default$2(scala.collection.immutable.Seq<java.lang.Class<?>> messageClasses)
-
attachConductor
protected void attachConductor(TestConductorExt tc)
-
injectDeployments
protected void injectDeployments(ActorSystem sys, RoleName role)
-
myAddress
protected Address myAddress()
-
startNewSystem
protected ActorSystem startNewSystem()
This method starts a new ActorSystem with the same configuration as the previous one on the current node, including deployments. It also creates a new TestConductor client and registers itself with the conductor so that it is possible to use barriers etc. normally after this method has been called.NOTICE: you MUST start a new system before trying to enter a barrier or otherwise using the TestConductor after having terminated this node’s system.
-
-