pekko/akka-cluster-metrics/src/test/scala/akka/cluster/metrics/protobuf/MessageSerializerSpec.scala
Patrik Nordwall 5c96a5f556 replace unicode arrows
* ⇒, →, ←
* because we don't want to show them in documentation snippets and
  then it's complicated to avoid that when snippets are
  located in src/test/scala in individual modules
* dont replace object `→` in FSM.scala and PersistentFSM.scala
2019-03-11 16:58:51 +01:00

74 lines
2.4 KiB
Scala

/*
* Copyright (C) 2009-2019 Lightbend Inc. <https://www.lightbend.com>
*/
package akka.cluster.metrics.protobuf
import akka.actor.{ Address, ExtendedActorSystem }
import akka.testkit.AkkaSpec
import akka.cluster.MemberStatus
import akka.cluster.metrics._
import akka.cluster.TestMember
class MessageSerializerSpec extends AkkaSpec(
"""
akka.actor.provider = cluster
akka.actor.serialize-messages = off
akka.actor.allow-java-serialization = off
akka.actor.enable-additional-serialization-bindings = on
""") {
val serializer = new MessageSerializer(system.asInstanceOf[ExtendedActorSystem])
def checkSerialization(obj: AnyRef): Unit = {
val blob = serializer.toBinary(obj)
val ref = serializer.fromBinary(blob, serializer.manifest(obj))
obj match {
case _ =>
ref should ===(obj)
}
}
import MemberStatus._
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"))
"ClusterMessages" must {
"be serializable" in {
val metricsGossip = MetricsGossip(Set(
NodeMetrics(a1.address, 4711, Set(Metric("foo", 1.2, None))),
NodeMetrics(b1.address, 4712, Set(
Metric("foo", 2.1, Some(EWMA(value = 100.0, alpha = 0.18))),
Metric("bar1", Double.MinPositiveValue, None),
Metric("bar2", Float.MaxValue, None),
Metric("bar3", Int.MaxValue, None),
Metric("bar4", Long.MaxValue, None),
Metric("bar5", BigInt(Long.MaxValue), None)))))
checkSerialization(MetricsGossipEnvelope(a1.address, metricsGossip, true))
}
}
"AdaptiveLoadBalancingPool" must {
"be serializable" in {
val simplePool = AdaptiveLoadBalancingPool()
checkSerialization(simplePool)
val complicatedPool = AdaptiveLoadBalancingPool(
metricsSelector = MixMetricsSelector(Vector(CpuMetricsSelector, HeapMetricsSelector, SystemLoadAverageMetricsSelector)),
nrOfInstances = 7,
routerDispatcher = "my-dispatcher",
usePoolDispatcher = true)
checkSerialization(complicatedPool)
}
}
}