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

@ -30,7 +30,7 @@ class ClientDowningNodeThatIsUnreachableWithAccrualFailureDetectorMultiJvmNode4
abstract class ClientDowningNodeThatIsUnreachableSpec
extends MultiNodeSpec(ClientDowningNodeThatIsUnreachableMultiJvmSpec)
with MultiNodeClusterSpec {
with MultiNodeClusterSpec with FailureDetectorStrategy {
import ClientDowningNodeThatIsUnreachableMultiJvmSpec._

View file

@ -30,7 +30,7 @@ class ClientDowningNodeThatIsUpWithAccrualFailureDetectorMultiJvmNode4 extends C
abstract class ClientDowningNodeThatIsUpSpec
extends MultiNodeSpec(ClientDowningNodeThatIsUpMultiJvmSpec)
with MultiNodeClusterSpec {
with MultiNodeClusterSpec with FailureDetectorStrategy {
import ClientDowningNodeThatIsUpMultiJvmSpec._

View file

@ -35,7 +35,7 @@ class ConvergenceWithAccrualFailureDetectorMultiJvmNode4 extends ConvergenceSpec
abstract class ConvergenceSpec
extends MultiNodeSpec(ConvergenceMultiJvmSpec)
with MultiNodeClusterSpec {
with MultiNodeClusterSpec with FailureDetectorStrategy {
import ConvergenceMultiJvmSpec._

View file

@ -29,8 +29,8 @@ object JoinInProgressMultiJvmSpec extends MultiNodeConfig {
.withFallback(MultiNodeClusterSpec.clusterConfig)))
}
class JoinInProgressMultiJvmNode1 extends JoinInProgressSpec with AccrualFailureDetectorStrategy
class JoinInProgressMultiJvmNode2 extends JoinInProgressSpec with AccrualFailureDetectorStrategy
class JoinInProgressMultiJvmNode1 extends JoinInProgressSpec
class JoinInProgressMultiJvmNode2 extends JoinInProgressSpec
abstract class JoinInProgressSpec
extends MultiNodeSpec(JoinInProgressMultiJvmSpec)

View file

@ -71,11 +71,11 @@ object LargeClusterMultiJvmSpec extends MultiNodeConfig {
"""))
}
class LargeClusterMultiJvmNode1 extends LargeClusterSpec with AccrualFailureDetectorStrategy
class LargeClusterMultiJvmNode2 extends LargeClusterSpec with AccrualFailureDetectorStrategy
class LargeClusterMultiJvmNode3 extends LargeClusterSpec with AccrualFailureDetectorStrategy
class LargeClusterMultiJvmNode4 extends LargeClusterSpec with AccrualFailureDetectorStrategy
class LargeClusterMultiJvmNode5 extends LargeClusterSpec with AccrualFailureDetectorStrategy
class LargeClusterMultiJvmNode1 extends LargeClusterSpec
class LargeClusterMultiJvmNode2 extends LargeClusterSpec
class LargeClusterMultiJvmNode3 extends LargeClusterSpec
class LargeClusterMultiJvmNode4 extends LargeClusterSpec
class LargeClusterMultiJvmNode5 extends LargeClusterSpec
abstract class LargeClusterSpec
extends MultiNodeSpec(LargeClusterMultiJvmSpec)

View file

@ -35,7 +35,7 @@ class LeaderDowningNodeThatIsUnreachableWithAccrualFailureDetectorMultiJvmNode4
abstract class LeaderDowningNodeThatIsUnreachableSpec
extends MultiNodeSpec(LeaderDowningNodeThatIsUnreachableMultiJvmSpec)
with MultiNodeClusterSpec {
with MultiNodeClusterSpec with FailureDetectorStrategy {
import LeaderDowningNodeThatIsUnreachableMultiJvmSpec._

View file

@ -33,7 +33,7 @@ class LeaderElectionWithAccrualFailureDetectorMultiJvmNode5 extends LeaderElecti
abstract class LeaderElectionSpec
extends MultiNodeSpec(LeaderElectionMultiJvmSpec)
with MultiNodeClusterSpec {
with MultiNodeClusterSpec with FailureDetectorStrategy {
import LeaderElectionMultiJvmSpec._

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)
}

View file

@ -33,7 +33,7 @@ class SingletonClusterWithAccrualFailureDetectorMultiJvmNode2 extends SingletonC
abstract class SingletonClusterSpec
extends MultiNodeSpec(SingletonClusterMultiJvmSpec)
with MultiNodeClusterSpec {
with MultiNodeClusterSpec with FailureDetectorStrategy {
import SingletonClusterMultiJvmSpec._

View file

@ -43,7 +43,7 @@ class SplitBrainWithAccrualFailureDetectorMultiJvmNode5 extends SplitBrainSpec w
abstract class SplitBrainSpec
extends MultiNodeSpec(SplitBrainMultiJvmSpec)
with MultiNodeClusterSpec {
with MultiNodeClusterSpec with FailureDetectorStrategy {
import SplitBrainMultiJvmSpec._

View file

@ -32,11 +32,11 @@ object SunnyWeatherMultiJvmSpec extends MultiNodeConfig {
"""))
}
class SunnyWeatherMultiJvmNode1 extends SunnyWeatherSpec with AccrualFailureDetectorStrategy
class SunnyWeatherMultiJvmNode2 extends SunnyWeatherSpec with AccrualFailureDetectorStrategy
class SunnyWeatherMultiJvmNode3 extends SunnyWeatherSpec with AccrualFailureDetectorStrategy
class SunnyWeatherMultiJvmNode4 extends SunnyWeatherSpec with AccrualFailureDetectorStrategy
class SunnyWeatherMultiJvmNode5 extends SunnyWeatherSpec with AccrualFailureDetectorStrategy
class SunnyWeatherMultiJvmNode1 extends SunnyWeatherSpec
class SunnyWeatherMultiJvmNode2 extends SunnyWeatherSpec
class SunnyWeatherMultiJvmNode3 extends SunnyWeatherSpec
class SunnyWeatherMultiJvmNode4 extends SunnyWeatherSpec
class SunnyWeatherMultiJvmNode5 extends SunnyWeatherSpec
abstract class SunnyWeatherSpec
extends MultiNodeSpec(SunnyWeatherMultiJvmSpec)

View file

@ -33,6 +33,7 @@ class TransitionMultiJvmNode3 extends TransitionSpec with FailureDetectorPuppetS
abstract class TransitionSpec
extends MultiNodeSpec(TransitionMultiJvmSpec)
with MultiNodeClusterSpec
with FailureDetectorStrategy
with ImplicitSender {
import TransitionMultiJvmSpec._

View file

@ -35,7 +35,7 @@ class UnreachableNodeRejoinsClusterWithAccrualFailureDetectorMultiJvmNode4 exten
abstract class UnreachableNodeRejoinsClusterSpec
extends MultiNodeSpec(UnreachableNodeRejoinsClusterMultiJvmSpec)
with MultiNodeClusterSpec {
with MultiNodeClusterSpec with FailureDetectorStrategy {
import UnreachableNodeRejoinsClusterMultiJvmSpec._
def allBut(role: RoleName, roles: Seq[RoleName] = roles): Seq[RoleName] = {

View file

@ -20,7 +20,6 @@ import akka.testkit._
import scala.concurrent.util.duration._
import akka.cluster.MultiNodeClusterSpec
import com.typesafe.config.ConfigFactory
import akka.cluster.FailureDetectorPuppetStrategy
import akka.cluster.Cluster
object ClusterRoundRobinRoutedActorMultiJvmSpec extends MultiNodeConfig {
@ -50,10 +49,10 @@ object ClusterRoundRobinRoutedActorMultiJvmSpec extends MultiNodeConfig {
}
class ClusterRoundRobinRoutedActorMultiJvmNode1 extends ClusterRoundRobinRoutedActorSpec with FailureDetectorPuppetStrategy
class ClusterRoundRobinRoutedActorMultiJvmNode2 extends ClusterRoundRobinRoutedActorSpec with FailureDetectorPuppetStrategy
class ClusterRoundRobinRoutedActorMultiJvmNode3 extends ClusterRoundRobinRoutedActorSpec with FailureDetectorPuppetStrategy
class ClusterRoundRobinRoutedActorMultiJvmNode4 extends ClusterRoundRobinRoutedActorSpec with FailureDetectorPuppetStrategy
class ClusterRoundRobinRoutedActorMultiJvmNode1 extends ClusterRoundRobinRoutedActorSpec
class ClusterRoundRobinRoutedActorMultiJvmNode2 extends ClusterRoundRobinRoutedActorSpec
class ClusterRoundRobinRoutedActorMultiJvmNode3 extends ClusterRoundRobinRoutedActorSpec
class ClusterRoundRobinRoutedActorMultiJvmNode4 extends ClusterRoundRobinRoutedActorSpec
abstract class ClusterRoundRobinRoutedActorSpec extends MultiNodeSpec(ClusterRoundRobinRoutedActorMultiJvmSpec)
with MultiNodeClusterSpec
@ -63,9 +62,6 @@ abstract class ClusterRoundRobinRoutedActorSpec extends MultiNodeSpec(ClusterRou
// sorted in the order used by the cluster
lazy val sortedRoles = Seq(first, second, third, fourth).sorted
// FIXME make this use of Cluster(system) more easy to use in tests
override def cluster: Cluster = Cluster(system)
"A cluster router configured with a RoundRobin router" must {
"start cluster" taggedAs LongRunningTest in {
awaitClusterUp(first, second, third, fourth)