X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fimpl%2FAugmentTest.java;h=b20c9780875c3729a7219fd9cf7f0ae15f7816ed;hb=5feac31a11a337a0c840f73c5c4612a6c997fa2a;hp=6ee61357e55563b6d68812802f4c94e14b7db453;hpb=9df13a1a1319dff08eb44354f1f44344fe8616fd;p=yangtools.git diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/AugmentTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/AugmentTest.java index 6ee61357e5..b20c978087 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/AugmentTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/AugmentTest.java @@ -7,26 +7,32 @@ */ package org.opendaylight.yangtools.yang.parser.impl; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import java.io.FileNotFoundException; import java.net.URI; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Set; -import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; import org.opendaylight.yangtools.yang.model.api.ChoiceNode; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; @@ -36,121 +42,116 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.util.BaseTypes; public class AugmentTest { + private static final URI fooNS = URI.create("urn:opendaylight.foo"); + private static final URI barNS = URI.create("urn:opendaylight.bar"); + private static final URI bazNS = URI.create("urn:opendaylight.baz"); + private static Date fooRev; + private static Date barRev; + private static Date bazRev; + private static final String foo = "foo"; + private static final String bar = "bar"; + private static final String baz = "baz"; + private static QName q0; + private static QName q1; + private static QName q2; - private final URI types1NS = URI.create("urn:simple.nodes.test"); - private final URI types2NS = URI.create("urn:simple.types.test"); - private final URI types3NS = URI.create("urn:custom.nodes.test"); - private Date types1Rev; - private Date types2Rev; - private Date types3Rev; - private final String t1 = "n"; - private final String t2 = "t"; - private final String t3 = "c"; - private QName q0; - private QName q1; - private QName q2; - - private final DateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); private Set modules; - @Before - public void init() throws FileNotFoundException, ParseException { - types1Rev = simpleDateFormat.parse("2013-02-27"); - types2Rev = simpleDateFormat.parse("2013-07-03"); - types3Rev = simpleDateFormat.parse("2013-02-27"); + @BeforeClass + public static void init() throws FileNotFoundException, ParseException { + DateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + fooRev = simpleDateFormat.parse("2013-10-13"); + barRev = simpleDateFormat.parse("2013-10-14"); + bazRev = simpleDateFormat.parse("2013-10-15"); - q0 = new QName(types2NS, types2Rev, t2, "interfaces"); - q1 = new QName(types2NS, types2Rev, t2, "ifEntry"); - q2 = new QName(types3NS, types3Rev, t3, "augment-holder"); - - modules = TestUtils.loadModules(getClass().getResource("/model").getPath()); - assertEquals(3, modules.size()); + q0 = new QName(barNS, barRev, bar, "interfaces"); + q1 = new QName(barNS, barRev, bar, "ifEntry"); + q2 = new QName(bazNS, bazRev, baz, "augment-holder"); } @Test - public void testAugmentParsing() { + public void testAugmentParsing() throws Exception { + modules = TestUtils.loadModules(getClass().getResource("/augment-test/augment-in-augment").toURI()); SchemaPath expectedSchemaPath; - QName[] qnames = new QName[3]; - qnames[0] = q0; - qnames[1] = q1; - qnames[2] = q2; + List qnames = new ArrayList<>(); + qnames.add(q0); + qnames.add(q1); + qnames.add(q2); - // testfile1 - Module module1 = TestUtils.findModule(modules, "nodes"); + // foo.yang + Module module1 = TestUtils.findModule(modules, "foo"); Set augmentations = module1.getAugmentations(); assertEquals(1, augmentations.size()); AugmentationSchema augment = augmentations.iterator().next(); assertNotNull(augment); - expectedSchemaPath = new SchemaPath(Arrays.asList(qnames), true); + expectedSchemaPath = SchemaPath.create(qnames, true); assertEquals(expectedSchemaPath, augment.getTargetPath()); - Set augmentChildren = augment.getChildNodes(); - assertEquals(5, augmentChildren.size()); + Collection augmentChildren = augment.getChildNodes(); + assertEquals(4, augmentChildren.size()); for (DataSchemaNode dsn : augmentChildren) { TestUtils.checkIsAugmenting(dsn, false); } LeafSchemaNode ds0ChannelNumber = (LeafSchemaNode) augment.getDataChildByName("ds0ChannelNumber"); LeafSchemaNode interfaceId = (LeafSchemaNode) augment.getDataChildByName("interface-id"); - LeafSchemaNode myType = (LeafSchemaNode) augment.getDataChildByName("my-type"); ContainerSchemaNode schemas = (ContainerSchemaNode) augment.getDataChildByName("schemas"); ChoiceNode odl = (ChoiceNode) augment.getDataChildByName("odl"); assertNotNull(ds0ChannelNumber); assertNotNull(interfaceId); - assertNotNull(myType); assertNotNull(schemas); assertNotNull(odl); - qnames = new QName[4]; - qnames[0] = q0; - qnames[1] = q1; - qnames[2] = q2; - // leaf ds0ChannelNumber - qnames[3] = new QName(types1NS, types1Rev, t1, "ds0ChannelNumber"); - expectedSchemaPath = new SchemaPath(Arrays.asList(qnames), true); + QName qname = new QName(fooNS, fooRev, foo, "ds0ChannelNumber"); + qnames.add(qname); + assertEquals(qname, ds0ChannelNumber.getQName()); + expectedSchemaPath = SchemaPath.create(qnames, true); assertEquals(expectedSchemaPath, ds0ChannelNumber.getPath()); assertFalse(ds0ChannelNumber.isAugmenting()); // type of leaf ds0ChannelNumber QName typeQName = BaseTypes.constructQName("string"); List typePath = Collections.singletonList(typeQName); - expectedSchemaPath = new SchemaPath(typePath, true); + expectedSchemaPath = SchemaPath.create(typePath, true); assertEquals(expectedSchemaPath, ds0ChannelNumber.getType().getPath()); // leaf interface-id - qnames[3] = new QName(types1NS, types1Rev, t1, "interface-id"); - expectedSchemaPath = new SchemaPath(Arrays.asList(qnames), true); + qname = new QName(fooNS, fooRev, foo, "interface-id"); + assertEquals(qname, interfaceId.getQName()); + qnames.set(3, qname); + expectedSchemaPath = SchemaPath.create(qnames, true); assertEquals(expectedSchemaPath, interfaceId.getPath()); assertFalse(interfaceId.isAugmenting()); - // leaf my-type - qnames[3] = new QName(types1NS, types1Rev, t1, "my-type"); - expectedSchemaPath = new SchemaPath(Arrays.asList(qnames), true); - assertEquals(expectedSchemaPath, myType.getPath()); - assertFalse(myType.isAugmenting()); - // container schemas - qnames[3] = new QName(types1NS, types1Rev, t1, "schemas"); - expectedSchemaPath = new SchemaPath(Arrays.asList(qnames), true); + qname = new QName(fooNS, fooRev, foo, "schemas"); + assertEquals(qname, schemas.getQName()); + qnames.set(3, qname); + expectedSchemaPath = SchemaPath.create(qnames, true); assertEquals(expectedSchemaPath, schemas.getPath()); assertFalse(schemas.isAugmenting()); // choice odl - qnames[3] = new QName(types1NS, types1Rev, t1, "odl"); - expectedSchemaPath = new SchemaPath(Arrays.asList(qnames), true); + qname = new QName(fooNS, fooRev, foo, "odl"); + assertEquals(qname, odl.getQName()); + qnames.set(3, qname); + expectedSchemaPath = SchemaPath.create(qnames, true); assertEquals(expectedSchemaPath, odl.getPath()); assertFalse(odl.isAugmenting()); - // testfile3 - Module module3 = TestUtils.findModule(modules, "custom"); + // baz.yang + Module module3 = TestUtils.findModule(modules, "baz"); augmentations = module3.getAugmentations(); - assertEquals(2, augmentations.size()); + assertEquals(3, augmentations.size()); AugmentationSchema augment1 = null; AugmentationSchema augment2 = null; + AugmentationSchema augment3 = null; for (AugmentationSchema as : augmentations) { - if ("if:ifType='ds0'".equals(as.getWhenCondition().toString())) { + if (as.getWhenCondition() == null) { + augment3 = as; + } else if ("if:ifType='ds0'".equals(as.getWhenCondition().toString())) { augment1 = as; } else if ("if:ifType='ds2'".equals(as.getWhenCondition().toString())) { augment2 = as; @@ -158,6 +159,7 @@ public class AugmentTest { } assertNotNull(augment1); assertNotNull(augment2); + assertNotNull(augment3); assertEquals(1, augment1.getChildNodes().size()); ContainerSchemaNode augmentHolder = (ContainerSchemaNode) augment1.getDataChildByName("augment-holder"); @@ -166,73 +168,86 @@ public class AugmentTest { assertEquals(1, augment2.getChildNodes().size()); ContainerSchemaNode augmentHolder2 = (ContainerSchemaNode) augment2.getDataChildByName("augment-holder2"); assertNotNull(augmentHolder2); + + assertEquals(1, augment3.getChildNodes().size()); + LeafSchemaNode pause = (LeafSchemaNode) augment3.getDataChildByName("pause"); + assertNotNull(pause); } @Test - public void testAugmentResolving() throws ParseException { - Module module2 = TestUtils.findModule(modules, "types"); + public void testAugmentResolving() throws Exception { + modules = TestUtils.loadModules(getClass().getResource("/augment-test/augment-in-augment").toURI()); + Module module2 = TestUtils.findModule(modules, "bar"); ContainerSchemaNode interfaces = (ContainerSchemaNode) module2.getDataChildByName("interfaces"); ListSchemaNode ifEntry = (ListSchemaNode) interfaces.getDataChildByName("ifEntry"); - ContainerSchemaNode augmentedContainer = (ContainerSchemaNode) ifEntry.getDataChildByName("augment-holder"); - TestUtils.checkIsAugmenting(augmentedContainer, true); - // testfile1.yang - // augment "/data:interfaces/data:ifEntry/t3:augment-holder" - LeafSchemaNode ds0ChannelNumber = (LeafSchemaNode) augmentedContainer.getDataChildByName("ds0ChannelNumber"); - LeafSchemaNode interfaceId = (LeafSchemaNode) augmentedContainer.getDataChildByName("interface-id"); - LeafSchemaNode myType = (LeafSchemaNode) augmentedContainer.getDataChildByName("my-type"); - ContainerSchemaNode schemas = (ContainerSchemaNode) augmentedContainer.getDataChildByName("schemas"); - ChoiceNode odl = (ChoiceNode) augmentedContainer.getDataChildByName("odl"); + SchemaPath expectedPath; + List qnames = new ArrayList<>(); + qnames.add(q0); + qnames.add(q1); + qnames.add(q2); + + // baz.yang + // augment "/br:interfaces/br:ifEntry" { + ContainerSchemaNode augmentHolder = (ContainerSchemaNode) ifEntry.getDataChildByName("augment-holder"); + TestUtils.checkIsAugmenting(augmentHolder, true); + assertEquals(q2, augmentHolder.getQName()); + expectedPath = SchemaPath.create(qnames, true); + assertEquals(expectedPath, augmentHolder.getPath()); + + // foo.yang + // augment "/br:interfaces/br:ifEntry/bz:augment-holder" + LeafSchemaNode ds0ChannelNumber = (LeafSchemaNode) augmentHolder.getDataChildByName("ds0ChannelNumber"); + LeafSchemaNode interfaceId = (LeafSchemaNode) augmentHolder.getDataChildByName("interface-id"); + ContainerSchemaNode schemas = (ContainerSchemaNode) augmentHolder.getDataChildByName("schemas"); + ChoiceNode odl = (ChoiceNode) augmentHolder.getDataChildByName("odl"); assertNotNull(ds0ChannelNumber); assertNotNull(interfaceId); - assertNotNull(myType); assertNotNull(schemas); assertNotNull(odl); - SchemaPath expectedPath; - QName[] qnames = new QName[4]; - qnames[0] = q0; - qnames[1] = q1; - qnames[2] = q2; - // leaf ds0ChannelNumber - qnames[3] = new QName(types1NS, types1Rev, t1, "ds0ChannelNumber"); - expectedPath = new SchemaPath(Arrays.asList(qnames), true); + QName qname = new QName(fooNS, fooRev, foo, "ds0ChannelNumber"); + assertEquals(qname, ds0ChannelNumber.getQName()); + qnames.add(qname); + expectedPath = SchemaPath.create(qnames, true); assertEquals(expectedPath, ds0ChannelNumber.getPath()); // leaf interface-id - qnames[3] = new QName(types1NS, types1Rev, t1, "interface-id"); - expectedPath = new SchemaPath(Arrays.asList(qnames), true); + qname = new QName(fooNS, fooRev, foo, "interface-id"); + assertEquals(qname, interfaceId.getQName()); + qnames.set(3, qname); + expectedPath = SchemaPath.create(qnames, true); assertEquals(expectedPath, interfaceId.getPath()); - // leaf my-type - qnames[3] = new QName(types1NS, types1Rev, t1, "my-type"); - expectedPath = new SchemaPath(Arrays.asList(qnames), true); - assertEquals(expectedPath, myType.getPath()); - // container schemas - qnames[3] = new QName(types1NS, types1Rev, t1, "schemas"); - expectedPath = new SchemaPath(Arrays.asList(qnames), true); + qname = new QName(fooNS, fooRev, foo, "schemas"); + assertEquals(qname, schemas.getQName()); + qnames.set(3, qname); + expectedPath = SchemaPath.create(qnames, true); assertEquals(expectedPath, schemas.getPath()); // choice odl - qnames[3] = new QName(types1NS, types1Rev, t1, "odl"); - expectedPath = new SchemaPath(Arrays.asList(qnames), true); + qname = new QName(fooNS, fooRev, foo, "odl"); + assertEquals(qname, odl.getQName()); + qnames.set(3, qname); + expectedPath = SchemaPath.create(qnames, true); assertEquals(expectedPath, odl.getPath()); } @Test - public void testAugmentChoice() throws ParseException { - Module module2 = TestUtils.findModule(modules, "types"); + public void testAugmentedChoice() throws Exception { + modules = TestUtils.loadModules(getClass().getResource("/augment-test/augment-in-augment").toURI()); + Module module2 = TestUtils.findModule(modules, "bar"); ContainerSchemaNode interfaces = (ContainerSchemaNode) module2.getDataChildByName("interfaces"); ListSchemaNode ifEntry = (ListSchemaNode) interfaces.getDataChildByName("ifEntry"); - ContainerSchemaNode augmentedContainer = (ContainerSchemaNode) ifEntry.getDataChildByName("augment-holder"); - TestUtils.checkIsAugmenting(augmentedContainer, true); + ContainerSchemaNode augmentedHolder = (ContainerSchemaNode) ifEntry.getDataChildByName("augment-holder"); + TestUtils.checkIsAugmenting(augmentedHolder, true); - // testfile1.yang - // augment "/data:interfaces/data:ifEntry/t3:augment-holder" - ChoiceNode odl = (ChoiceNode) augmentedContainer.getDataChildByName("odl"); + // foo.yang + // augment "/br:interfaces/br:ifEntry/bz:augment-holder" + ChoiceNode odl = (ChoiceNode) augmentedHolder.getDataChildByName("odl"); assertNotNull(odl); Set cases = odl.getCases(); assertEquals(4, cases.size()); @@ -260,70 +275,78 @@ public class AugmentTest { assertNotNull(node3); SchemaPath expectedPath; - QName[] qnames = new QName[5]; - qnames[0] = q0; - qnames[1] = q1; - qnames[2] = q2; - qnames[3] = new QName(types1NS, types1Rev, t1, "odl"); + List qnames = new ArrayList<>(); + qnames.add(q0); + qnames.add(q1); + qnames.add(q2); + qnames.add(new QName(fooNS, fooRev, foo, "odl")); // case id - qnames[4] = new QName(types1NS, types1Rev, t1, "id"); - expectedPath = new SchemaPath(Arrays.asList(qnames), true); + QName qname = new QName(fooNS, fooRev, foo, "id"); + assertEquals(qname, id.getQName()); + qnames.add(qname); + expectedPath = SchemaPath.create(qnames, true); assertEquals(expectedPath, id.getPath()); - Set idChildren = id.getChildNodes(); + Collection idChildren = id.getChildNodes(); assertEquals(1, idChildren.size()); // case node1 - qnames[4] = new QName(types1NS, types1Rev, t1, "node1"); - expectedPath = new SchemaPath(Arrays.asList(qnames), true); + qname = new QName(fooNS, fooRev, foo, "node1"); + assertEquals(qname, node1.getQName()); + qnames.set(4, qname); + expectedPath = SchemaPath.create(qnames, true); assertEquals(expectedPath, node1.getPath()); - Set node1Children = node1.getChildNodes(); + Collection node1Children = node1.getChildNodes(); assertTrue(node1Children.isEmpty()); // case node2 - qnames[4] = new QName(types1NS, types1Rev, t1, "node2"); - expectedPath = new SchemaPath(Arrays.asList(qnames), true); + qname = new QName(fooNS, fooRev, foo, "node2"); + assertEquals(qname, node2.getQName()); + qnames.set(4, qname); + expectedPath = SchemaPath.create(qnames, true); assertEquals(expectedPath, node2.getPath()); - Set node2Children = node2.getChildNodes(); + Collection node2Children = node2.getChildNodes(); assertTrue(node2Children.isEmpty()); // case node3 - qnames[4] = new QName(types1NS, types1Rev, t1, "node3"); - expectedPath = new SchemaPath(Arrays.asList(qnames), true); + qname = new QName(fooNS, fooRev, foo, "node3"); + assertEquals(qname, node3.getQName()); + qnames.set(4, qname); + expectedPath = SchemaPath.create(qnames, true); assertEquals(expectedPath, node3.getPath()); - Set node3Children = node3.getChildNodes(); + Collection node3Children = node3.getChildNodes(); assertEquals(1, node3Children.size()); // test cases - qnames = new QName[6]; - qnames[0] = q0; - qnames[1] = q1; - qnames[2] = q2; - qnames[3] = new QName(types1NS, types1Rev, t1, "odl"); + qnames.clear(); + qnames.add(q0); + qnames.add(q1); + qnames.add(q2); + qnames.add(new QName(fooNS, fooRev, foo, "odl")); // case id child - qnames[4] = new QName(types1NS, types1Rev, t1, "id"); - qnames[5] = new QName(types1NS, types1Rev, t1, "id"); + qnames.add(new QName(fooNS, fooRev, foo, "id")); + qnames.add(new QName(fooNS, fooRev, foo, "id")); LeafSchemaNode caseIdChild = (LeafSchemaNode) idChildren.iterator().next(); assertNotNull(caseIdChild); - expectedPath = new SchemaPath(Arrays.asList(qnames), true); + expectedPath = SchemaPath.create(qnames, true); assertEquals(expectedPath, caseIdChild.getPath()); // case node3 child - qnames[4] = new QName(types1NS, types1Rev, t1, "node3"); - qnames[5] = new QName(types1NS, types1Rev, t1, "node3"); + qnames.set(4, new QName(fooNS, fooRev, foo, "node3")); + qnames.set(5, new QName(fooNS, fooRev, foo, "node3")); ContainerSchemaNode caseNode3Child = (ContainerSchemaNode) node3Children.iterator().next(); assertNotNull(caseNode3Child); - expectedPath = new SchemaPath(Arrays.asList(qnames), true); + expectedPath = SchemaPath.create(qnames, true); assertEquals(expectedPath, caseNode3Child.getPath()); } @Test public void testAugmentRpc() throws Exception { - modules = TestUtils.loadModules(getClass().getResource("/augment-test/rpc").getPath()); + modules = TestUtils.loadModules(getClass().getResource("/augment-test/rpc").toURI()); final URI NS_BAR = URI.create("urn:opendaylight:bar"); final URI NS_FOO = URI.create("urn:opendaylight:foo"); - final Date revision = simpleDateFormat.parse("2013-10-11"); + final Date revision = new SimpleDateFormat("yyyy-MM-dd").parse("2013-10-11"); Module bar = TestUtils.findModule(modules, "bar"); Set rpcs = bar.getRpcs(); @@ -379,27 +402,43 @@ public class AugmentTest { // case attach qnames[3] = new QName(NS_FOO, revision, "f", "attach"); assertEquals(qnames[3], attach.getQName()); - expectedPath = new SchemaPath(Arrays.asList(qnames), true); + expectedPath = SchemaPath.create(Arrays.asList(qnames), true); assertEquals(expectedPath, attach.getPath()); - Set attachChildren = attach.getChildNodes(); + Collection attachChildren = attach.getChildNodes(); assertEquals(1, attachChildren.size()); // case create qnames[3] = new QName(NS_FOO, revision, "f", "create"); assertEquals(qnames[3], create.getQName()); - expectedPath = new SchemaPath(Arrays.asList(qnames), true); + expectedPath = SchemaPath.create(Arrays.asList(qnames), true); assertEquals(expectedPath, create.getPath()); - Set createChildren = create.getChildNodes(); + Collection createChildren = create.getChildNodes(); assertEquals(1, createChildren.size()); // case attach qnames[3] = new QName(NS_FOO, revision, "f", "destroy"); assertEquals(qnames[3], destroy.getQName()); - expectedPath = new SchemaPath(Arrays.asList(qnames), true); + expectedPath = SchemaPath.create(Arrays.asList(qnames), true); assertEquals(expectedPath, destroy.getPath()); - Set destroyChildren = destroy.getChildNodes(); + Collection destroyChildren = destroy.getChildNodes(); assertEquals(1, destroyChildren.size()); + } + @Test + public void testAugmentInUsesResolving() throws Exception { + modules = TestUtils.loadModules(getClass().getResource("/augment-test/augment-in-uses").toURI()); + assertEquals(1, modules.size()); + + Module test = modules.iterator().next(); + DataNodeContainer links = (DataNodeContainer) test.getDataChildByName("links"); + DataNodeContainer link = (DataNodeContainer) links.getDataChildByName("link"); + DataNodeContainer nodes = (DataNodeContainer) link.getDataChildByName("nodes"); + ContainerSchemaNode node = (ContainerSchemaNode) nodes.getDataChildByName("node"); + Set augments = node.getAvailableAugmentations(); + assertEquals(1, augments.size()); + assertEquals(1, node.getChildNodes().size()); + LeafSchemaNode id = (LeafSchemaNode) node.getDataChildByName("id"); + assertTrue(id.isAugmenting()); } }