Make it more intuitive for tests using real Cluster(system) extension, see #2103

* We will write more tests that rely on real Cluster(system) extension,
  such as ClusterRoundRobinRoutedActorSpec
* When not using FailureDetectorStrategy or overriding seed nodes
  MultiNodeClusterSpec will use the real Cluster(system) extension
  instead of a new Cluster instance with additional test facilities
This commit is contained in:
Patrik Nordwall 2012-08-28 16:38:05 +02:00
parent f1626ca1d3
commit f4cc8f8649
14 changed files with 42 additions and 34 deletions

View file

@ -38,7 +38,7 @@ object MultiNodeClusterSpec {
""")
}
trait MultiNodeClusterSpec extends FailureDetectorStrategy with Suite { self: MultiNodeSpec
trait MultiNodeClusterSpec extends Suite { self: MultiNodeSpec
override def initialParticipants = roles.size
@ -90,11 +90,21 @@ trait MultiNodeClusterSpec extends FailureDetectorStrategy with Suite { self: Mu
/**
* The cluster node instance. Needs to be lazily created.
*/
private lazy val clusterNode = new Cluster(system.asInstanceOf[ExtendedActorSystem], failureDetector) {
override def seedNodes: IndexedSeq[Address] = {
val testSeedNodes = MultiNodeClusterSpec.this.seedNodes
if (testSeedNodes.isEmpty) super.seedNodes
else testSeedNodes map address
private lazy val clusterNode = this match {
case x: FailureDetectorStrategy createTestCluster(x.failureDetector)
case _ if seedNodes.nonEmpty
createTestCluster(new AccrualFailureDetector(system, new ClusterSettings(system.settings.config, system.name)))
case _ Cluster(system)
}
private def createTestCluster(failureDetector: FailureDetector): Cluster = {
new Cluster(system.asInstanceOf[ExtendedActorSystem], failureDetector) {
override def seedNodes: IndexedSeq[Address] = {
val testSeedNodes = MultiNodeClusterSpec.this.seedNodes
if (testSeedNodes.isEmpty) super.seedNodes
else testSeedNodes map address
}
}
}
@ -215,3 +225,4 @@ trait MultiNodeClusterSpec extends FailureDetectorStrategy with Suite { self: Mu
def roleName(addr: Address): Option[RoleName] = roles.find(address(_) == addr)
}