X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fentityownership%2FAbstractEntityOwnershipTest.java;h=0e282fbbbfe09123f17a9ff8998d95fb5e3b8a80;hp=c6ef27545a3a389af008d9a8ba208cddcb0654b1;hb=00e97ff87662959a39218b47bac904235003dc8d;hpb=81cc10db365aa8cde38a3d2777488bb83bd69ef5 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/AbstractEntityOwnershipTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/AbstractEntityOwnershipTest.java index c6ef27545a..0e282fbbbf 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/AbstractEntityOwnershipTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/AbstractEntityOwnershipTest.java @@ -13,10 +13,18 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.CANDIDATE_NAME_QNAME; import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.ENTITY_ID_QNAME; +import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.ENTITY_OWNER_QNAME; import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.ENTITY_QNAME; import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.ENTITY_TYPE_QNAME; +import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.entityPath; +import com.google.common.base.Function; import com.google.common.base.Optional; +import com.google.common.base.Stopwatch; +import com.google.common.util.concurrent.Uninterruptibles; +import java.util.concurrent.TimeUnit; +import org.junit.Assert; import org.opendaylight.controller.cluster.datastore.AbstractActorTest; +import org.opendaylight.controller.cluster.datastore.ShardDataTree; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.clustering.entity.owners.rev150804.EntityOwners; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.clustering.entity.owners.rev150804.entity.owners.EntityType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.clustering.entity.owners.rev150804.entity.owners.entity.type.entity.Candidate; @@ -31,6 +39,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateTip; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; /** * Abstract base class providing utility methods. @@ -53,7 +64,7 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { getMapEntryNodeChild(entityEntry, Candidate.QNAME, CANDIDATE_NAME_QNAME, candidateName); } catch(AssertionError e) { - throw new AssertionError("Verification of enitity candidate failed - returned data was: " + node, e); + throw new AssertionError("Verification of entity candidate failed - returned data was: " + node, e); } } @@ -71,4 +82,45 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { } return entityTypeEntry.get(); } + + protected void verifyOwner(String expected, String entityType, YangInstanceIdentifier entityId, + Function> reader) { + YangInstanceIdentifier entityPath = entityPath(entityType, entityId).node(ENTITY_OWNER_QNAME); + Stopwatch sw = Stopwatch.createStarted(); + while(sw.elapsed(TimeUnit.MILLISECONDS) <= 5000) { + NormalizedNode node = reader.apply(entityPath); + if(node != null) { + Assert.assertEquals("Entity owner", expected, node.getValue().toString()); + return; + } else { + Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS); + } + } + + fail("Owner was not set for entityId: " + entityId); + } + + static void writeNode(YangInstanceIdentifier path, NormalizedNode node, ShardDataTree shardDataTree) + throws DataValidationFailedException { + DataTreeModification modification = shardDataTree.getDataTree().takeSnapshot().newModification(); + modification.merge(path, node); + commit(shardDataTree, modification); + } + + static void deleteNode(YangInstanceIdentifier path, ShardDataTree shardDataTree) + throws DataValidationFailedException { + DataTreeModification modification = shardDataTree.getDataTree().takeSnapshot().newModification(); + modification.delete(path); + commit(shardDataTree, modification); + } + + static void commit(ShardDataTree shardDataTree, DataTreeModification modification) + throws DataValidationFailedException { + modification.ready(); + + shardDataTree.getDataTree().validate(modification); + DataTreeCandidateTip candidate = shardDataTree.getDataTree().prepare(modification); + shardDataTree.getDataTree().commit(candidate); + shardDataTree.notifyListeners(candidate); + } }