X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Feos-dom-akka%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Feos%2Fakka%2FAbstractNativeEosTest.java;h=c4e97d60cbaea847e747921b4e61c9e4f9df1d03;hp=27b4bcba84deb45a14db68bf4c906bc6d4e96b08;hb=HEAD;hpb=7ce039b3e55d153fc75bc88198c49536ab83befc diff --git a/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/AbstractNativeEosTest.java b/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/AbstractNativeEosTest.java index 27b4bcba84..6adba42c09 100644 --- a/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/AbstractNativeEosTest.java +++ b/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/AbstractNativeEosTest.java @@ -19,6 +19,8 @@ import akka.actor.typed.javadsl.AskPattern; import akka.actor.typed.javadsl.Behaviors; import akka.cluster.ddata.LWWRegister; import akka.cluster.ddata.LWWRegisterKey; +import akka.cluster.ddata.ORMap; +import akka.cluster.ddata.ORSet; import akka.cluster.ddata.typed.javadsl.DistributedData; import akka.cluster.ddata.typed.javadsl.Replicator; import com.typesafe.config.Config; @@ -44,17 +46,19 @@ import org.opendaylight.controller.eos.akka.owner.supervisor.command.MemberReach import org.opendaylight.controller.eos.akka.owner.supervisor.command.MemberUnreachableEvent; import org.opendaylight.controller.eos.akka.owner.supervisor.command.OwnerSupervisorCommand; import org.opendaylight.controller.eos.akka.owner.supervisor.command.OwnerSupervisorReply; +import org.opendaylight.controller.eos.akka.registry.candidate.CandidateRegistry; import org.opendaylight.controller.eos.akka.registry.candidate.command.CandidateRegistryCommand; import org.opendaylight.controller.eos.akka.registry.candidate.command.RegisterCandidate; import org.opendaylight.controller.eos.akka.registry.candidate.command.UnregisterCandidate; +import org.opendaylight.controller.eos.akka.registry.listener.type.command.EntityOwnerChanged; import org.opendaylight.controller.eos.akka.registry.listener.type.command.RegisterListener; import org.opendaylight.controller.eos.akka.registry.listener.type.command.TypeListenerRegistryCommand; import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext; import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator; import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeGenerator; import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers; +import org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange; import org.opendaylight.mdsal.eos.dom.api.DOMEntity; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -263,7 +267,7 @@ public abstract class AbstractNativeEosTest { } protected static void waitUntillOwnerPresent(final ClusterNode clusterNode, final DOMEntity entity) { - await().until(() -> { + await().atMost(Duration.ofSeconds(15)).until(() -> { final DistributedData distributedData = DistributedData.get(clusterNode.getActorSystem()); final CompletionStage>> ask = AskPattern.ask(distributedData.replicator(), @@ -284,6 +288,32 @@ public abstract class AbstractNativeEosTest { }); } + protected static void waitUntillCandidatePresent(final ClusterNode clusterNode, final DOMEntity entity, + final String candidate) { + await().atMost(Duration.ofSeconds(15)).until(() -> { + final DistributedData distributedData = DistributedData.get(clusterNode.getActorSystem()); + + final CompletionStage>>> ask = + AskPattern.ask(distributedData.replicator(), + replyTo -> new Replicator.Get<>( + CandidateRegistry.KEY, Replicator.readLocal(), replyTo), + Duration.ofSeconds(5), + clusterNode.getActorSystem().scheduler()); + + final Replicator.GetResponse>> response = + ask.toCompletableFuture().get(5, TimeUnit.SECONDS); + + if (response instanceof Replicator.GetSuccess) { + final Map> entries = + ((Replicator.GetSuccess>>) response).dataValue().getEntries(); + + return entries.get(entity).contains(candidate); + + } + return false; + }); + } + protected static CompletableFuture activateDatacenter(final ClusterNode clusterNode) { final CompletionStage ask = AskPattern.ask(clusterNode.getOwnerSupervisor(), @@ -306,14 +336,14 @@ public abstract class AbstractNativeEosTest { final boolean hasOwner, final boolean isOwner, final boolean wasOwner) { await().until(() -> !listener.getChanges().isEmpty()); - await().untilAsserted(() -> { - final List changes = listener.getChanges(); - final DOMEntityOwnershipChange domEntityOwnershipChange = listener.getChanges().get(changes.size() - 1); - assertEquals(entity, domEntityOwnershipChange.getEntity()); + await().atMost(Duration.ofSeconds(10)).untilAsserted(() -> { + final var changes = listener.getChanges(); + final var domEntityOwnershipChange = listener.getChanges().get(changes.size() - 1); + assertEquals(entity, domEntityOwnershipChange.entity()); - assertEquals(hasOwner, domEntityOwnershipChange.getState().hasOwner()); - assertEquals(isOwner, domEntityOwnershipChange.getState().isOwner()); - assertEquals(wasOwner, domEntityOwnershipChange.getState().wasOwner()); + assertEquals(hasOwner, domEntityOwnershipChange.change().hasOwner()); + assertEquals(isOwner, domEntityOwnershipChange.change().isOwner()); + assertEquals(wasOwner, domEntityOwnershipChange.change().wasOwner()); }); } @@ -386,11 +416,9 @@ public abstract class AbstractNativeEosTest { } protected static final class MockEntityOwnershipListener implements DOMEntityOwnershipListener { - - private final Logger log; - - private final List changes = new ArrayList<>(); + private final List changes = new ArrayList<>(); private final String member; + private final Logger log; public MockEntityOwnershipListener(final String member) { log = LoggerFactory.getLogger("EOS-listener-" + member); @@ -398,13 +426,15 @@ public abstract class AbstractNativeEosTest { } @Override - public void ownershipChanged(final DOMEntityOwnershipChange ownershipChange) { - log.info("{} Received ownershipCHanged: {}", member, ownershipChange); + public void ownershipChanged(final DOMEntity entity, final EntityOwnershipStateChange change, + final boolean inJeopardy) { + final var changed = new EntityOwnerChanged(entity, change, inJeopardy); + log.info("{} Received ownershipCHanged: {}", member, changed); log.info("{} changes: {}", member, changes.size()); - changes.add(ownershipChange); + changes.add(changed); } - public List getChanges() { + public List getChanges() { return changes; }