From 14ebe0896d1ff4f9a9e8127f8d5654a6c8560e1f Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 21 Feb 2022 14:03:13 +0100 Subject: [PATCH] Add negative tests for instance identifier codec We are about to refactor a few aspects of how things are being looked up, make sure we cover cases which should be rejected. JIRA: MDSAL-696 Change-Id: I8b0eddf05eadd4178951176480fa35b9753bc751 Signed-off-by: Robert Varga --- ...nceIdentifierSerializeDeserializeTest.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) 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 a837d96127..c80f1e72f4 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; @@ -178,4 +186,39 @@ public class InstanceIdentifierSerializeDeserializeTest extends AbstractBindingC 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 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 list lst", ex.getMessage()); + } } -- 2.36.6