X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fyang-model-parser-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fyang%2Fparser%2Fimpl%2FYangParserWithContextTest.java;h=b730445478721616294241e64f2f7d5cacbe2f38;hb=refs%2Fchanges%2F79%2F579%2F2;hp=ff32ee1fa8dae80042c30026a22b4167acabe732;hpb=586e8148730acc468c1d82cbac370f51c4c11681;p=controller.git diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/parser/impl/YangParserWithContextTest.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/parser/impl/YangParserWithContextTest.java index ff32ee1fa8..b730445478 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/parser/impl/YangParserWithContextTest.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/parser/impl/YangParserWithContextTest.java @@ -15,14 +15,19 @@ import java.net.URI; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; import org.junit.Test; import org.opendaylight.controller.yang.common.QName; +import org.opendaylight.controller.yang.model.api.AnyXmlSchemaNode; +import org.opendaylight.controller.yang.model.api.ChoiceNode; import org.opendaylight.controller.yang.model.api.ContainerSchemaNode; import org.opendaylight.controller.yang.model.api.DataSchemaNode; +import org.opendaylight.controller.yang.model.api.Deviation; +import org.opendaylight.controller.yang.model.api.Deviation.Deviate; import org.opendaylight.controller.yang.model.api.GroupingDefinition; import org.opendaylight.controller.yang.model.api.IdentitySchemaNode; import org.opendaylight.controller.yang.model.api.LeafSchemaNode; @@ -75,20 +80,124 @@ public class YangParserWithContextTest { assertEquals("inet", qname.getPrefix()); assertEquals("port-number", qname.getLocalName()); - ExtendedType dscpExt = (ExtendedType)TestUtils.findTypedef(module.getTypeDefinitions(), "dscp-ext"); + ExtendedType dscpExt = (ExtendedType) TestUtils.findTypedef(module.getTypeDefinitions(), "dscp-ext"); List ranges = dscpExt.getRanges(); assertEquals(1, ranges.size()); RangeConstraint range = ranges.get(0); assertEquals(0L, range.getMin()); assertEquals(63L, range.getMax()); + } + + @Test + public void testUsesFromContext() throws Exception { + SchemaContext context = null; + try (InputStream stream1 = new FileInputStream(getClass().getResource("/model/custom.yang").getPath()); + InputStream stream2 = new FileInputStream(getClass().getResource("/model/types.yang").getPath()); + InputStream stream3 = new FileInputStream(getClass().getResource("/model/nodes.yang").getPath())) { + context = parser.resolveSchemaContext(TestUtils.loadModules(Lists.newArrayList(stream1, stream2, stream3))); + } + Module testModule = null; + try (InputStream stream = new FileInputStream(getClass().getResource("/context-test/test2.yang").getPath())) { + testModule = TestUtils.loadModuleWithContext(stream, context); + } + assertNotNull(testModule); + + // suffix _u = added by uses + // suffix _g = defined in grouping from context + + // get grouping + Module contextModule = context.findModuleByNamespace(URI.create("urn:custom.nodes.test")); + assertNotNull(contextModule); + Set groupings = contextModule.getGroupings(); + assertEquals(1, groupings.size()); + GroupingDefinition grouping = groupings.iterator().next(); + // get node containing uses + ContainerSchemaNode peer = (ContainerSchemaNode) testModule.getDataChildByName("peer"); + ContainerSchemaNode destination = (ContainerSchemaNode) peer.getDataChildByName("destination"); + + // check uses + Set uses = destination.getUses(); + assertEquals(1, uses.size()); + + // check uses process + AnyXmlSchemaNode data_u = (AnyXmlSchemaNode) destination.getDataChildByName("data"); + assertNotNull(data_u); + assertTrue(data_u.isAddedByUses()); + + AnyXmlSchemaNode data_g = (AnyXmlSchemaNode) grouping.getDataChildByName("data"); + assertNotNull(data_g); + assertFalse(data_g.isAddedByUses()); + assertFalse(data_u.equals(data_g)); + + ChoiceNode how_u = (ChoiceNode) destination.getDataChildByName("how"); + assertNotNull(how_u); + assertTrue(how_u.isAddedByUses()); + + ChoiceNode how_g = (ChoiceNode) grouping.getDataChildByName("how"); + assertNotNull(how_g); + assertFalse(how_g.isAddedByUses()); + assertFalse(how_u.equals(how_g)); + + LeafSchemaNode address_u = (LeafSchemaNode) destination.getDataChildByName("address"); + assertNotNull(address_u); + assertTrue(address_u.isAddedByUses()); + + LeafSchemaNode address_g = (LeafSchemaNode) grouping.getDataChildByName("address"); + assertNotNull(address_g); + assertFalse(address_g.isAddedByUses()); + assertFalse(address_u.equals(address_g)); + + ContainerSchemaNode port_u = (ContainerSchemaNode) destination.getDataChildByName("port"); + assertNotNull(port_u); + assertTrue(port_u.isAddedByUses()); + + ContainerSchemaNode port_g = (ContainerSchemaNode) grouping.getDataChildByName("port"); + assertNotNull(port_g); + assertFalse(port_g.isAddedByUses()); + assertFalse(port_u.equals(port_g)); + + ListSchemaNode addresses_u = (ListSchemaNode) destination.getDataChildByName("addresses"); + assertNotNull(addresses_u); + assertTrue(addresses_u.isAddedByUses()); + + ListSchemaNode addresses_g = (ListSchemaNode) grouping.getDataChildByName("addresses"); + assertNotNull(addresses_g); + assertFalse(addresses_g.isAddedByUses()); + assertFalse(addresses_u.equals(addresses_g)); + + // grouping defined by 'uses' + Set groupings_u = destination.getGroupings(); + assertEquals(1, groupings_u.size()); + GroupingDefinition grouping_u = groupings_u.iterator().next(); + assertTrue(grouping_u.isAddedByUses()); + + // grouping defined in 'grouping' node + Set groupings_g = grouping.getGroupings(); + assertEquals(1, groupings_g.size()); + GroupingDefinition grouping_g = groupings_g.iterator().next(); + assertFalse(grouping_g.isAddedByUses()); + assertFalse(grouping_u.equals(grouping_g)); + + List nodes_u = destination.getUnknownSchemaNodes(); + assertEquals(1, nodes_u.size()); + UnknownSchemaNode node_u = nodes_u.get(0); + assertTrue(node_u.isAddedByUses()); + + List nodes_g = grouping.getUnknownSchemaNodes(); + assertEquals(1, nodes_g.size()); + UnknownSchemaNode node_g = nodes_g.get(0); + assertFalse(node_g.isAddedByUses()); + assertFalse(node_u.equals(node_g)); } @Test - public void testUsesGroupingFromContext() throws Exception { + public void testUsesRefineFromContext() throws Exception { SchemaContext context = null; - try (InputStream stream = new FileInputStream(getClass().getResource("/model/testfile2.yang").getPath())) { - context = parser.resolveSchemaContext(TestUtils.loadModules(Lists.newArrayList(stream))); + try (InputStream stream1 = new FileInputStream(getClass().getResource("/model/custom.yang").getPath()); + InputStream stream2 = new FileInputStream(getClass().getResource("/model/types.yang").getPath()); + InputStream stream3 = new FileInputStream(getClass().getResource("/model/nodes.yang").getPath())) { + context = parser.resolveSchemaContext(TestUtils.loadModules(Lists.newArrayList(stream1, stream2, stream3))); } Module module = null; try (InputStream stream = new FileInputStream(getClass().getResource("/context-test/test2.yang").getPath())) { @@ -104,7 +213,7 @@ public class YangParserWithContextTest { // test grouping path List path = new ArrayList(); - QName qname = new QName(URI.create("urn:simple.types.data.demo"), simpleDateFormat.parse("2013-02-27"), "t2", + QName qname = new QName(URI.create("urn:custom.nodes.test"), simpleDateFormat.parse("2013-02-27"), "c", "target"); path.add(qname); SchemaPath expectedPath = new SchemaPath(path, true); @@ -212,7 +321,8 @@ public class YangParserWithContextTest { @Test public void testUnknownNodes() throws Exception { SchemaContext context = null; - try (InputStream stream = new FileInputStream(getClass().getResource("/types/custom-types-test@2012-4-4.yang").getPath())) { + try (InputStream stream = new FileInputStream(getClass().getResource("/types/custom-types-test@2012-4-4.yang") + .getPath())) { context = parser.resolveSchemaContext(TestUtils.loadModules(Lists.newArrayList(stream))); } @@ -225,7 +335,7 @@ public class YangParserWithContextTest { List unknownNodes = network.getUnknownSchemaNodes(); assertEquals(1, unknownNodes.size()); - UnknownSchemaNode un = unknownNodes.iterator().next(); + UnknownSchemaNode un = unknownNodes.get(0); QName unType = un.getNodeType(); assertEquals(URI.create("urn:simple.container.demo"), unType.getNamespace()); assertEquals(simpleDateFormat.parse("2012-04-16"), unType.getRevision()); @@ -280,4 +390,43 @@ public class YangParserWithContextTest { assertTrue(ifEntry == ifEntryAfterAugment); } + @Test + public void testDeviation() throws Exception { + // load first module + SchemaContext context = null; + String resource = "/model/types.yang"; + + try (InputStream stream = new FileInputStream(getClass().getResource(resource).getPath())) { + context = parser.resolveSchemaContext(TestUtils.loadModules(Lists.newArrayList(stream))); + } + + // load another modules and parse them against already existing context + Set modules = null; + try (InputStream stream = new FileInputStream(getClass().getResource("/context-test/deviation-test.yang") + .getPath())) { + List input = Lists.newArrayList(stream); + modules = TestUtils.loadModulesWithContext(input, context); + } + assertNotNull(modules); + + // test deviation + Module testModule = TestUtils.findModule(modules, "deviation-test"); + Set deviations = testModule.getDeviations(); + assertEquals(1, deviations.size()); + Deviation dev = deviations.iterator().next(); + + assertEquals("system/user ref", dev.getReference()); + + URI expectedNS = URI.create("urn:simple.types.test"); + DateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Date expectedRev = simpleDateFormat.parse("2013-07-03"); + List path = new ArrayList(); + path.add(new QName(expectedNS, expectedRev, "t", "interfaces")); + path.add(new QName(expectedNS, expectedRev, "t", "ifEntry")); + SchemaPath expectedPath = new SchemaPath(path, true); + + assertEquals(expectedPath, dev.getTargetPath()); + assertEquals(Deviate.ADD, dev.getDeviate()); + } + }