diff --git a/akka-distributed-data/src/multi-jvm/scala/akka/cluster/ddata/ReplicatorSpec.scala b/akka-distributed-data/src/multi-jvm/scala/akka/cluster/ddata/ReplicatorSpec.scala index 0c220218a3..433c36adbf 100644 --- a/akka-distributed-data/src/multi-jvm/scala/akka/cluster/ddata/ReplicatorSpec.scala +++ b/akka-distributed-data/src/multi-jvm/scala/akka/cluster/ddata/ReplicatorSpec.scala @@ -57,6 +57,7 @@ class ReplicatorSpec extends MultiNodeSpec(ReplicatorSpec) with STMultiNodeSpec val KeyE2 = GCounterKey("E2") val KeyF = GCounterKey("F") val KeyG = ORSetKey[String]("G") + val KeyH = ORMapKey[Flag]("H") val KeyX = GCounterKey("X") val KeyY = GCounterKey("Y") val KeyZ = GCounterKey("Z") @@ -295,7 +296,6 @@ class ReplicatorSpec extends MultiNodeSpec(ReplicatorSpec) with STMultiNodeSpec val c31 = expectMsgPF() { case g @ GetSuccess(KeyC, _) ⇒ g.get(KeyC) } c31.value should be(31) - val c32 = c31 + 1 replicator ! Update(KeyC, GCounter(), WriteLocal)(_ + 1) expectMsg(UpdateSuccess(KeyC, None)) @@ -499,5 +499,31 @@ class ReplicatorSpec extends MultiNodeSpec(ReplicatorSpec) with STMultiNodeSpec enterBarrier("after-8") } + "check that a remote update and a local update both cause a change event to emit with the merged data" in { + val changedProbe = TestProbe() + + runOn(second) { + replicator ! Subscribe(KeyH, changedProbe.ref) + replicator ! Update(KeyH, ORMap.empty[Flag], writeTwo)(_ + ("a" -> Flag(enabled = false))) + changedProbe.expectMsgPF() { case c @ Changed(KeyH) ⇒ c.get(KeyH).entries } should be(Map("a" -> Flag(enabled = false))) + } + + enterBarrier("update-h1") + + runOn(first) { + replicator ! Update(KeyH, ORMap.empty[Flag], writeTwo)(_ + ("a" -> Flag(enabled = true))) + } + + runOn(second) { + changedProbe.expectMsgPF() { case c @ Changed(KeyH) ⇒ c.get(KeyH).entries } should be(Map("a" -> Flag(enabled = true))) + + replicator ! Update(KeyH, ORMap.empty[Flag], writeTwo)(_ + ("b" -> Flag(enabled = true))) + changedProbe.expectMsgPF() { case c @ Changed(KeyH) ⇒ c.get(KeyH).entries } should be( + Map("a" -> Flag(enabled = true), "b" -> Flag(enabled = true))) + } + + enterBarrier("after-9") + } + }