Added methods for Cluster.remove and Cluster.release that accepts ActorRef

This commit is contained in:
Jonas Bonér 2011-06-22 11:31:01 +02:00
parent 5d4f8b4bcb
commit df8c4dac89
3 changed files with 27 additions and 114 deletions

View file

@ -42,120 +42,6 @@ class ClusterSpec extends WordSpec with MustMatchers with BeforeAndAfterAll with
"A ClusterNode" should {
"be able to use an actor by actor address" in {
val node = Cluster.newNode(nodeAddress = NodeAddress("test-cluster", "use-actor-id", port = 9001))
node.start
// create actor
val actorRef1 = actorOf[MyJavaSerializableActor]("actor-address").start
(actorRef1 !! "hello").getOrElse("_") must equal("world 1")
(actorRef1 !! "hello").getOrElse("_") must equal("world 2")
// register actor
var serializeMailbox = true
import BinaryFormatMyJavaSerializableActor._
node.store(actorRef1, serializeMailbox)
node.isClustered(actorRef1.address) must be(true)
node.addressesForClusteredActors.exists(_ == actorRef1.address) must be(true)
// check out actor
val actorRef2 = node.use(actorRef1.address).head
node.isInUseOnNode(actorRef1.address, node = NodeAddress("test-cluster", "use-actor-id")) must be(true)
(actorRef2 !! "hello").getOrElse("_") must equal("world 3")
actorRef1.stop
actorRef2.stop
node.stop
}
"be able to release an actor by address" in {
val node = Cluster.newNode(nodeAddress = NodeAddress("test-cluster", "release-actor-id", port = 9001))
node.start
// create actor
val actorRef1 = actorOf[MyJavaSerializableActor]("actor-address").start
(actorRef1 !! "hello").getOrElse("_") must equal("world 1")
(actorRef1 !! "hello").getOrElse("_") must equal("world 2")
// register actor
var serializeMailbox = true
import BinaryFormatMyJavaSerializableActor._
node.store(actorRef1, serializeMailbox)
node.isClustered(actorRef1.address) must be(true)
node.addressesForClusteredActors.exists(_ == actorRef1.address) must be(true)
// check out actor
val actorRef2 = node.use(actorRef1.address).head
node.isInUseOnNode(actorRef1.address, node = NodeAddress("test-cluster", "release-actor-id")) must be(true)
(actorRef2 !! "hello").getOrElse("_") must equal("world 3")
// check in actor
node.release(actorRef2.address)
node.isInUseOnNode(actorRef1.address, node = NodeAddress("test-cluster", "release-actor-id")) must be(false)
actorRef1.stop
actorRef2.stop
node.stop
}
"be able to release used actor on remove an actor by actor address" in {
// create actor
val actorRef = actorOf[MyJavaSerializableActor]("actor-address").start
val node = Cluster.newNode(nodeAddress = NodeAddress("test-cluster", "remove-actor-id", port = 9001)).start
val node2 = Cluster.newNode(nodeAddress = NodeAddress("test-cluster", "remove-actor-uuid-2", port = 9002)).start
// register actor
import BinaryFormatMyJavaSerializableActor._
var serializeMailbox = true
node.store(actorRef, serializeMailbox)
val actorRef2 = node2.use(actorRef.address).head
node2.isClustered(actorRef.address) must be(true)
node.addressesForClusteredActors.exists(_ == actorRef.address) must be(true)
node.nodesForActorsInUseWithAddress(actorRef.address) must have length (1)
// deregister actor
node.remove(actorRef.address)
node.addressesForClusteredActors.exists(_ == actorRef.address) must be(false)
node.nodesForActorsInUseWithAddress(actorRef.address) must have length (0)
node.stop
}
"be able to get home address for a clustered actor" in {
val node = Cluster.newNode(nodeAddress = NodeAddress("test-cluster", "get-home-address", port = 9001))
node.start
// create actor
val actorRef1 = actorOf[MyJavaSerializableActor]("actor-address").start
(actorRef1 !! "hello").getOrElse("_") must equal("world 1")
(actorRef1 !! "hello").getOrElse("_") must equal("world 2")
// register actor
var serializeMailbox = true
import BinaryFormatMyJavaSerializableActor._
node.store(actorRef1, serializeMailbox)
node.isClustered(actorRef1.address) must be(true)
node.uuidsForClusteredActors.exists(_ == actorRef1.uuid) must be(true)
// check out actor
val actorRef2 = node.use(actorRef1.address).head
node.isInUseOnNode(actorRef1.address, node = NodeAddress("test-cluster", "get-home-address")) must be(true)
(actorRef2 !! "hello").getOrElse("_") must equal("world 3")
val addresses = node.addressesForActor(actorRef1.address)
addresses.length must be > (0)
addresses(0)._2.getPort must equal(9001)
actorRef1.stop
actorRef2.stop
node.stop
}
"be able to migrate an actor between two nodes using address" in {
val node1 = Cluster.newNode(nodeAddress = NodeAddress("test-cluster", "migrate-id-1", port = 9001))
val node2 = Cluster.newNode(nodeAddress = NodeAddress("test-cluster", "migrate-id-2", port = 9002))