Added test for Cluster ChangeListener: NodeConnected, more to come. Also fixed bug in Cluster

This commit is contained in:
Jonas Bonér 2011-06-17 16:07:41 +02:00
parent 241831c5ee
commit b93755080d
7 changed files with 87 additions and 4 deletions

View file

@ -435,10 +435,10 @@ class DefaultClusterNode private[akka] (
/**
* Registers a cluster change listener.
*/
def register(listener: ChangeListener): ClusterNode = if (isConnected.isOff) {
def register(listener: ChangeListener): ClusterNode = {
changeListeners.add(listener)
this
} else throw new IllegalStateException("Can not register 'ChangeListener' after the cluster node has been started")
}
private[cluster] def publish(change: ChangeNotification) {
changeListeners.iterator.foreach(_.notify(change, this))

View file

@ -17,8 +17,6 @@ import java.util.concurrent.{ CyclicBarrier, TimeUnit }
import scala.collection.JavaConversions._
// FIXME: Test sending all funs
class MyJavaSerializableActor extends Actor with Serializable {
var count = 0

View file

@ -0,0 +1 @@
-Dakka.cluster.nodename=node1 -Dakka.cluster.port=9991

View file

@ -0,0 +1 @@
-Dakka.cluster.nodename=node2 -Dakka.cluster.port=9992

View file

@ -0,0 +1,81 @@
/**
* Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
*/
package akka.cluster.changelisteners.nodeconnected
import org.scalatest.WordSpec
import org.scalatest.matchers.MustMatchers
import org.scalatest.BeforeAndAfterAll
import akka.cluster._
import ChangeListener._
import java.util.concurrent._
object NodeConnectedChangeListenerMultiJvmSpec {
var NrOfNodes = 2
}
class NodeConnectedChangeListenerMultiJvmNode1 extends WordSpec with MustMatchers with BeforeAndAfterAll {
import NodeConnectedChangeListenerMultiJvmSpec._
"A NodeConnected change listener" must {
"be invoked when a new node joins the cluster" in {
System.getProperty("akka.cluster.nodename", "") must be("node1")
System.getProperty("akka.cluster.port", "") must be("9991")
val latch = new CountDownLatch(1)
Cluster.node.register(new ChangeListener {
override def nodeConnected(node: String, client: ClusterNode) {
latch.countDown
}
})
Cluster.node.shutdown()
Cluster.barrier("start-node1", NrOfNodes) {
Cluster.node.start()
}
Cluster.barrier("start-node2", NrOfNodes) {
latch.await(5, TimeUnit.SECONDS) must be === true
}
Cluster.barrier("shutdown", NrOfNodes) {
// Cluster.node.shutdown()
}
}
}
override def beforeAll() = {
Cluster.startLocalCluster()
}
override def afterAll() = {
Cluster.shutdownLocalCluster()
}
}
class NodeConnectedChangeListenerMultiJvmNode2 extends WordSpec with MustMatchers {
import NodeConnectedChangeListenerMultiJvmSpec._
"A NodeConnected change listener" must {
"be invoked when a new node joins the cluster" in {
System.getProperty("akka.cluster.nodename", "") must be("node2")
System.getProperty("akka.cluster.port", "") must be("9992")
Cluster.barrier("start-node1", NrOfNodes) {}
Cluster.barrier("start-node2", NrOfNodes) {
Cluster.node.start()
}
Cluster.barrier("shutdown", NrOfNodes) {
// Cluster.node.shutdown()
}
}
}
}