X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-dom-codec%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fdom%2Fcodec%2Fimpl%2FInstanceIdentifierSerializeDeserializeTest.java;h=e000547f16696173ace68e1b8b6967ff2bd0fba7;hb=11408d627adca7eb71ac956c3ad01f75b6b91596;hp=bbcb8937730cea8a157a5f705d173f5108ed49e4;hpb=77fb9f72a894d84ca3ba16fb79411b59d9b9507b;p=mdsal.git diff --git a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/InstanceIdentifierSerializeDeserializeTest.java b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/InstanceIdentifierSerializeDeserializeTest.java index bbcb893773..e000547f16 100644 --- a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/InstanceIdentifierSerializeDeserializeTest.java +++ b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/InstanceIdentifierSerializeDeserializeTest.java @@ -7,13 +7,21 @@ */ package org.opendaylight.mdsal.binding.dom.codec.impl; +import static org.hamcrest.CoreMatchers.startsWith; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import com.google.common.collect.Iterables; import org.junit.Test; +import org.opendaylight.mdsal.binding.dom.codec.api.IncorrectNestingException; +import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.Lst; +import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.lst.Foo; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.bi.ba.notification.rev150205.OutOfPixieDustNotification; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.md.sal.knock.knock.rev180723.KnockKnockInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.TreeComplexUsesAugment; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.TreeLeafOnlyAugment; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.Top; @@ -60,19 +68,21 @@ public class InstanceIdentifierSerializeDeserializeTest extends AbstractBindingC @Test public void testYangIIToBindingAwareII() { - final InstanceIdentifier instanceIdentifier = registry.fromYangInstanceIdentifier(BI_TOP_PATH); + final InstanceIdentifier instanceIdentifier = codecContext.fromYangInstanceIdentifier(BI_TOP_PATH); assertEquals(Top.class, instanceIdentifier.getTargetType()); } @Test public void testYangIIToBindingAwareIIListWildcarded() { - final InstanceIdentifier instanceIdentifier = registry.fromYangInstanceIdentifier(BI_TOP_LEVEL_LIST_PATH); + final InstanceIdentifier instanceIdentifier = codecContext.fromYangInstanceIdentifier( + BI_TOP_LEVEL_LIST_PATH); assertNull(instanceIdentifier); } @Test public void testYangIIToBindingAwareIIListWithKey() { - final InstanceIdentifier instanceIdentifier = registry.fromYangInstanceIdentifier(BI_TOP_LEVEL_LIST_1_PATH); + final InstanceIdentifier instanceIdentifier = codecContext.fromYangInstanceIdentifier( + BI_TOP_LEVEL_LIST_1_PATH); final InstanceIdentifier.PathArgument last = Iterables.getLast(instanceIdentifier.getPathArguments()); assertEquals(TopLevelList.class, instanceIdentifier.getTargetType()); assertFalse(instanceIdentifier.isWildcarded()); @@ -84,7 +94,7 @@ public class InstanceIdentifierSerializeDeserializeTest extends AbstractBindingC @Test public void testBindingAwareIIToYangIContainer() { - final YangInstanceIdentifier yangInstanceIdentifier = registry.toYangInstanceIdentifier( + final YangInstanceIdentifier yangInstanceIdentifier = codecContext.toYangInstanceIdentifier( InstanceIdentifier.create(Top.class).child(TopLevelList.class)); final PathArgument lastPathArgument = yangInstanceIdentifier.getLastPathArgument(); assertTrue(lastPathArgument instanceof NodeIdentifier); @@ -93,7 +103,7 @@ public class InstanceIdentifierSerializeDeserializeTest extends AbstractBindingC @Test public void testBindingAwareIIToYangIIWildcard() { - final YangInstanceIdentifier yangInstanceIdentifier = registry.toYangInstanceIdentifier( + final YangInstanceIdentifier yangInstanceIdentifier = codecContext.toYangInstanceIdentifier( InstanceIdentifier.create(Top.class).child(TopLevelList.class)); final PathArgument lastPathArgument = yangInstanceIdentifier.getLastPathArgument(); assertTrue(lastPathArgument instanceof NodeIdentifier); @@ -102,7 +112,7 @@ public class InstanceIdentifierSerializeDeserializeTest extends AbstractBindingC @Test public void testBindingAwareIIToYangIIListWithKey() { - final YangInstanceIdentifier yangInstanceIdentifier = registry.toYangInstanceIdentifier( + final YangInstanceIdentifier yangInstanceIdentifier = codecContext.toYangInstanceIdentifier( InstanceIdentifier.create(Top.class).child(TopLevelList.class, TOP_FOO_KEY)); final PathArgument lastPathArgument = yangInstanceIdentifier.getLastPathArgument(); assertTrue(lastPathArgument instanceof NodeIdentifierWithPredicates); @@ -112,67 +122,104 @@ public class InstanceIdentifierSerializeDeserializeTest extends AbstractBindingC @Test public void testBindingAwareIIToYangIIAugmentation() { - final PathArgument lastArg = registry.toYangInstanceIdentifier(BA_TREE_COMPLEX_USES).getLastPathArgument(); + final PathArgument lastArg = codecContext.toYangInstanceIdentifier(BA_TREE_COMPLEX_USES).getLastPathArgument(); assertTrue(lastArg instanceof AugmentationIdentifier); } @Test public void testBindingAwareIIToYangIILeafOnlyAugmentation() { - final PathArgument leafOnlyLastArg = registry.toYangInstanceIdentifier(BA_TREE_LEAF_ONLY).getLastPathArgument(); + final PathArgument leafOnlyLastArg = codecContext.toYangInstanceIdentifier(BA_TREE_LEAF_ONLY) + .getLastPathArgument(); assertTrue(leafOnlyLastArg instanceof AugmentationIdentifier); assertTrue(((AugmentationIdentifier) leafOnlyLastArg).getPossibleChildNames().contains(SIMPLE_VALUE_QNAME)); } @Test public void testChoiceCaseGroupingFromBinding() { - final YangInstanceIdentifier contBase = registry.toYangInstanceIdentifier( + final YangInstanceIdentifier contBase = codecContext.toYangInstanceIdentifier( InstanceIdentifier.builder(Cont.class).child(ContBase.class, GrpCont.class).build()); assertEquals(YangInstanceIdentifier.create(NodeIdentifier.create(Cont.QNAME), NodeIdentifier.create(ContChoice.QNAME), NodeIdentifier.create(GrpCont.QNAME)), contBase); - final YangInstanceIdentifier contAug = registry.toYangInstanceIdentifier( + final YangInstanceIdentifier contAug = codecContext.toYangInstanceIdentifier( InstanceIdentifier.builder(Cont.class).child(ContAug.class, GrpCont.class).build()); assertEquals(YangInstanceIdentifier.create(NodeIdentifier.create(Cont.QNAME), NodeIdentifier.create(ContChoice.QNAME), - NodeIdentifier.create(GrpCont.QNAME.withModule(ContAug.QNAME.getModule()))), contAug); + NodeIdentifier.create(GrpCont.QNAME.bindTo(ContAug.QNAME.getModule()))), contAug); // Legacy: downcast the child to Class, losing type safety but still working. Faced with ambiguity, it will // select the lexically-lower class assertEquals(1, ContBase.class.getCanonicalName().compareTo(ContAug.class.getCanonicalName())); - final YangInstanceIdentifier contAugLegacy = registry.toYangInstanceIdentifier( + final YangInstanceIdentifier contAugLegacy = codecContext.toYangInstanceIdentifier( InstanceIdentifier.builder(Cont.class).child((Class) GrpCont.class).build()); assertEquals(contAug, contAugLegacy); - final YangInstanceIdentifier rootBase = registry.toYangInstanceIdentifier( + final YangInstanceIdentifier rootBase = codecContext.toYangInstanceIdentifier( InstanceIdentifier.builder(RootBase.class, GrpCont.class).build()); assertEquals(YangInstanceIdentifier.create(NodeIdentifier.create(Root.QNAME), NodeIdentifier.create(GrpCont.QNAME)), rootBase); - final YangInstanceIdentifier rootAug = registry.toYangInstanceIdentifier( + final YangInstanceIdentifier rootAug = codecContext.toYangInstanceIdentifier( InstanceIdentifier.builder(RootAug.class, GrpCont.class).build()); assertEquals(YangInstanceIdentifier.create(NodeIdentifier.create(Root.QNAME), - NodeIdentifier.create(GrpCont.QNAME.withModule(RootAug.QNAME.getModule()))), rootAug); + NodeIdentifier.create(GrpCont.QNAME.bindTo(RootAug.QNAME.getModule()))), rootAug); } @Test public void testChoiceCaseGroupingToBinding() { - final InstanceIdentifier contBase = registry.fromYangInstanceIdentifier( + final InstanceIdentifier contBase = codecContext.fromYangInstanceIdentifier( YangInstanceIdentifier.create(NodeIdentifier.create(Cont.QNAME), NodeIdentifier.create(ContChoice.QNAME), NodeIdentifier.create(GrpCont.QNAME))); assertEquals(InstanceIdentifier.builder(Cont.class).child(ContBase.class, GrpCont.class).build(), contBase); - final InstanceIdentifier contAug = registry.fromYangInstanceIdentifier( + final InstanceIdentifier contAug = codecContext.fromYangInstanceIdentifier( YangInstanceIdentifier.create(NodeIdentifier.create(Cont.QNAME), NodeIdentifier.create(ContChoice.QNAME), - NodeIdentifier.create(GrpCont.QNAME.withModule(ContAug.QNAME.getModule())))); + NodeIdentifier.create(GrpCont.QNAME.bindTo(ContAug.QNAME.getModule())))); assertEquals(InstanceIdentifier.builder(Cont.class).child(ContAug.class, GrpCont.class).build(), contAug); - final InstanceIdentifier rootBase = registry.fromYangInstanceIdentifier( + final InstanceIdentifier rootBase = codecContext.fromYangInstanceIdentifier( YangInstanceIdentifier.create(NodeIdentifier.create(Root.QNAME), NodeIdentifier.create(GrpCont.QNAME))); assertEquals(InstanceIdentifier.builder(RootBase.class, GrpCont.class).build(), rootBase); - final InstanceIdentifier rootAug = registry.fromYangInstanceIdentifier( + final InstanceIdentifier rootAug = codecContext.fromYangInstanceIdentifier( YangInstanceIdentifier.create(NodeIdentifier.create(Root.QNAME), - NodeIdentifier.create(GrpCont.QNAME.withModule(RootAug.QNAME.getModule())))); + NodeIdentifier.create(GrpCont.QNAME.bindTo(RootAug.QNAME.getModule())))); assertEquals(InstanceIdentifier.builder(RootAug.class, GrpCont.class).build(), rootAug); } + + @Test + public void testRejectNotificationQName() { + // A purposely-wrong YangInstanceIdentifier + final var yiid = YangInstanceIdentifier.create(NodeIdentifier.create(OutOfPixieDustNotification.QNAME)); + final var ex = assertThrows(IncorrectNestingException.class, + () -> codecContext.fromYangInstanceIdentifier(yiid)); + assertThat(ex.getMessage(), + startsWith("Argument (urn:opendaylight:params:xml:ns:yang:controller:md:sal:test:bi:ba:notification" + + "?revision=2015-02-05)out-of-pixie-dust-notification is not valid data tree child of ")); + } + + @Test + public void testRejectRpcQName() { + // A purposely-wrong YangInstanceIdentifier + final var yiid = YangInstanceIdentifier.create(NodeIdentifier.create( + // TODO: use the RPC interface once we are generating it + QName.create(KnockKnockInput.QNAME, "knock-knock"))); + final var ex = assertThrows(IncorrectNestingException.class, + () -> codecContext.fromYangInstanceIdentifier(yiid)); + assertThat(ex.getMessage(), startsWith("Argument (urn:opendaylight:params:xml:ns:yang:md:sal:knock-knock" + + "?revision=2018-07-23)knock-knock is not valid child of ")); + } + + @Test + public void testRejectActionQName() { + // A purposely-wrong YangInstanceIdentifier + final var yiid = YangInstanceIdentifier.create( + NodeIdentifier.create(Lst.QNAME), + NodeIdentifierWithPredicates.of(Lst.QNAME, QName.create(Lst.QNAME, "key"), "foo"), + NodeIdentifier.create(Foo.QNAME)); + final var ex = assertThrows(IncorrectNestingException.class, + () -> codecContext.fromYangInstanceIdentifier(yiid)); + assertEquals("Argument (urn:odl:actions)foo is not valid child of " + + "EmptyListEffectiveStatement{argument=(urn:odl:actions)lst}", ex.getMessage()); + } }