2013-04-04 17:56:29 +02:00
|
|
|
/**
|
2017-01-04 17:37:10 +01:00
|
|
|
* Copyright (C) 2009-2017 Lightbend Inc. <http://www.lightbend.com>
|
2013-04-04 17:56:29 +02:00
|
|
|
*/
|
|
|
|
|
package akka.cluster.protobuf
|
|
|
|
|
|
|
|
|
|
import akka.cluster._
|
|
|
|
|
import akka.actor.{ ExtendedActorSystem, Address }
|
|
|
|
|
import collection.immutable.SortedSet
|
|
|
|
|
import akka.testkit.AkkaSpec
|
|
|
|
|
|
2013-10-17 10:35:37 +02:00
|
|
|
class ClusterMessageSerializerSpec extends AkkaSpec(
|
2016-06-10 15:04:13 +02:00
|
|
|
"akka.actor.provider = cluster") {
|
2013-04-04 17:56:29 +02:00
|
|
|
|
|
|
|
|
val serializer = new ClusterMessageSerializer(system.asInstanceOf[ExtendedActorSystem])
|
|
|
|
|
|
|
|
|
|
def checkSerialization(obj: AnyRef): Unit = {
|
|
|
|
|
val blob = serializer.toBinary(obj)
|
|
|
|
|
val ref = serializer.fromBinary(blob, obj.getClass)
|
2013-10-17 10:35:37 +02:00
|
|
|
obj match {
|
|
|
|
|
case env: GossipEnvelope ⇒
|
|
|
|
|
val env2 = obj.asInstanceOf[GossipEnvelope]
|
2015-01-16 11:09:59 +01:00
|
|
|
env2.from should ===(env.from)
|
|
|
|
|
env2.to should ===(env.to)
|
|
|
|
|
env2.gossip should ===(env.gossip)
|
2013-10-17 10:35:37 +02:00
|
|
|
case _ ⇒
|
2015-01-16 11:09:59 +01:00
|
|
|
ref should ===(obj)
|
2013-10-17 10:35:37 +02:00
|
|
|
}
|
|
|
|
|
|
2013-04-04 17:56:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
import MemberStatus._
|
|
|
|
|
|
2013-04-11 09:18:12 +02:00
|
|
|
val a1 = TestMember(Address("akka.tcp", "sys", "a", 2552), Joining, Set.empty)
|
|
|
|
|
val b1 = TestMember(Address("akka.tcp", "sys", "b", 2552), Up, Set("r1"))
|
|
|
|
|
val c1 = TestMember(Address("akka.tcp", "sys", "c", 2552), Leaving, Set("r2"))
|
|
|
|
|
val d1 = TestMember(Address("akka.tcp", "sys", "d", 2552), Exiting, Set("r1", "r2"))
|
|
|
|
|
val e1 = TestMember(Address("akka.tcp", "sys", "e", 2552), Down, Set("r3"))
|
|
|
|
|
val f1 = TestMember(Address("akka.tcp", "sys", "f", 2552), Removed, Set("r2", "r3"))
|
2013-04-04 17:56:29 +02:00
|
|
|
|
|
|
|
|
"ClusterMessages" must {
|
|
|
|
|
|
|
|
|
|
"be serializable" in {
|
|
|
|
|
val address = Address("akka.tcp", "system", "some.host.org", 4711)
|
2016-12-01 18:49:38 +01:00
|
|
|
val uniqueAddress = UniqueAddress(address, 17L)
|
2013-04-11 09:18:12 +02:00
|
|
|
val address2 = Address("akka.tcp", "system", "other.host.org", 4711)
|
2016-12-01 18:49:38 +01:00
|
|
|
val uniqueAddress2 = UniqueAddress(address2, 18L)
|
2013-04-11 09:18:12 +02:00
|
|
|
checkSerialization(InternalClusterAction.Join(uniqueAddress, Set("foo", "bar")))
|
2013-04-04 17:56:29 +02:00
|
|
|
checkSerialization(ClusterUserAction.Leave(address))
|
|
|
|
|
checkSerialization(ClusterUserAction.Down(address))
|
|
|
|
|
checkSerialization(InternalClusterAction.InitJoin)
|
|
|
|
|
checkSerialization(InternalClusterAction.InitJoinAck(address))
|
|
|
|
|
checkSerialization(InternalClusterAction.InitJoinNack(address))
|
2013-11-07 13:52:08 +01:00
|
|
|
checkSerialization(ClusterHeartbeatSender.Heartbeat(address))
|
|
|
|
|
checkSerialization(ClusterHeartbeatSender.HeartbeatRsp(uniqueAddress))
|
2016-12-01 18:49:38 +01:00
|
|
|
checkSerialization(InternalClusterAction.ExitingConfirmed(uniqueAddress))
|
2013-04-04 17:56:29 +02:00
|
|
|
|
|
|
|
|
val node1 = VectorClock.Node("node1")
|
|
|
|
|
val node2 = VectorClock.Node("node2")
|
2013-04-25 10:59:27 +02:00
|
|
|
val node3 = VectorClock.Node("node3")
|
|
|
|
|
val node4 = VectorClock.Node("node4")
|
|
|
|
|
val g1 = (Gossip(SortedSet(a1, b1, c1, d1)) :+ node1 :+ node2).seen(a1.uniqueAddress).seen(b1.uniqueAddress)
|
|
|
|
|
val g2 = (g1 :+ node3 :+ node4).seen(a1.uniqueAddress).seen(c1.uniqueAddress)
|
2013-08-27 15:14:53 +02:00
|
|
|
val reachability3 = Reachability.empty.unreachable(a1.uniqueAddress, e1.uniqueAddress).unreachable(b1.uniqueAddress, e1.uniqueAddress)
|
|
|
|
|
val g3 = g2.copy(members = SortedSet(a1, b1, c1, d1, e1), overview = g2.overview.copy(reachability = reachability3))
|
2013-04-25 10:59:27 +02:00
|
|
|
checkSerialization(GossipEnvelope(a1.uniqueAddress, uniqueAddress2, g1))
|
|
|
|
|
checkSerialization(GossipEnvelope(a1.uniqueAddress, uniqueAddress2, g2))
|
2013-04-28 22:28:20 +02:00
|
|
|
checkSerialization(GossipEnvelope(a1.uniqueAddress, uniqueAddress2, g3))
|
|
|
|
|
|
|
|
|
|
checkSerialization(GossipStatus(a1.uniqueAddress, g1.version))
|
|
|
|
|
checkSerialization(GossipStatus(a1.uniqueAddress, g2.version))
|
|
|
|
|
checkSerialization(GossipStatus(a1.uniqueAddress, g3.version))
|
2013-04-11 09:18:12 +02:00
|
|
|
|
|
|
|
|
checkSerialization(InternalClusterAction.Welcome(uniqueAddress, g2))
|
2013-04-04 17:56:29 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|