X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fyang-model-parser-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fyang%2Fparser%2Fimpl%2FYangParserTest.java;h=fd2593ba4805fade12bb2193e7a3d4cf94a5b097;hp=b2a93ea07ec8f1749d6523788d8d51afe00c25b4;hb=50d50e106bcbe761b05417e747c217c1f5b36534;hpb=06aa5ce746e29a3760688b2ef2817f50bec5ea7a;ds=sidebyside diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/parser/impl/YangParserTest.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/parser/impl/YangParserTest.java index b2a93ea07e..fd2593ba48 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/parser/impl/YangParserTest.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/parser/impl/YangParserTest.java @@ -9,7 +9,10 @@ package org.opendaylight.controller.yang.parser.impl; import static org.junit.Assert.*; +import java.io.FileNotFoundException; import java.net.URI; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; @@ -26,10 +29,13 @@ import org.opendaylight.controller.yang.model.api.ChoiceCaseNode; import org.opendaylight.controller.yang.model.api.ChoiceNode; import org.opendaylight.controller.yang.model.api.ConstraintDefinition; 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.ExtensionDefinition; import org.opendaylight.controller.yang.model.api.FeatureDefinition; +import org.opendaylight.controller.yang.model.api.GroupingDefinition; +import org.opendaylight.controller.yang.model.api.LeafListSchemaNode; import org.opendaylight.controller.yang.model.api.LeafSchemaNode; import org.opendaylight.controller.yang.model.api.ListSchemaNode; import org.opendaylight.controller.yang.model.api.Module; @@ -50,6 +56,7 @@ import org.opendaylight.controller.yang.model.util.Decimal64; import org.opendaylight.controller.yang.model.util.ExtendedType; import org.opendaylight.controller.yang.model.util.Int16; import org.opendaylight.controller.yang.model.util.Int32; +import org.opendaylight.controller.yang.model.util.Leafref; import org.opendaylight.controller.yang.model.util.StringType; import org.opendaylight.controller.yang.model.util.Uint32; import org.opendaylight.controller.yang.model.util.UnionType; @@ -58,7 +65,7 @@ public class YangParserTest { private Set modules; @Before - public void init() { + public void init() throws FileNotFoundException { modules = TestUtils.loadModules("src/test/resources/model"); assertEquals(3, modules.size()); } @@ -165,8 +172,8 @@ public class YangParserTest { assertNull(constraints.getWhenCondition()); assertEquals(0, constraints.getMustConstraints().size()); assertFalse(constraints.isMandatory()); - assertNull(constraints.getMinElements()); - assertNull(constraints.getMaxElements()); + assertEquals(1, (int) constraints.getMinElements()); + assertEquals(11, (int) constraints.getMaxElements()); // test AugmentationTarget args Set availableAugmentations = ifEntry .getAvailableAugmentations(); @@ -212,9 +219,15 @@ public class YangParserTest { .getDataChildByName("ifEntry"); ContainerSchemaNode augmentedContainer = (ContainerSchemaNode) ifEntry .getDataChildByName("augment-holder"); - // Set augmentedContainerAugments = - // augmentedContainer - // .getAvailableAugmentations(); + + // augmentation defined in testfile1 and augmentation returned from + // augmented container have to be same + Set augmentedContainerAugments = augmentedContainer + .getAvailableAugmentations(); + AugmentationSchema augmentDefinition = augmentedContainerAugments + .iterator().next(); + assertEquals(augment1, augmentDefinition); + LeafSchemaNode augmentedLeaf = (LeafSchemaNode) augmentedContainer .getDataChildByName("ds0ChannelNumber"); assertTrue(augmentedLeaf.isAugmenting()); @@ -230,18 +243,19 @@ public class YangParserTest { Set module3Augmentations = module3 .getAugmentations(); assertEquals(2, module3Augmentations.size()); - // AugmentationSchema augment3 = module3Augmentations.iterator().next(); - // ContainerSchemaNode augmentedContainerDefinition = - // (ContainerSchemaNode) augment3 - // .getDataChildByName("augment-holder"); - // assertTrue(augmentedContainerDefinition.isAugmenting()); - // - // // check - // assertEquals(augmentedContainer, augmentedContainerDefinition); - // assertEquals(augmentedContainerAugments.iterator().next(), augment1); - // - // assertEquals(augmentedLeaf, augmentedLeafDefinition); - // assertEquals(ifEntryAugments.iterator().next(), augment3); + AugmentationSchema augment3 = null; + for (AugmentationSchema as : module3Augmentations) { + if ("if:ifType='ds0'".equals(as.getWhenCondition().toString())) { + augment3 = as; + } + } + ContainerSchemaNode augmentedContainerDefinition = (ContainerSchemaNode) augment3 + .getDataChildByName("augment-holder"); + assertTrue(augmentedContainerDefinition.isAugmenting()); + + // check + assertEquals(augmentedContainer, augmentedContainerDefinition); + assertEquals(augmentedLeaf, augmentedLeafDefinition); } @Test @@ -256,17 +270,21 @@ public class YangParserTest { .getAvailableAugmentations(); assertEquals(2, augmentations.size()); - // AugmentationSchema augment = augmentations.iterator().next(); - - // ContainerSchemaNode augmentHolder = (ContainerSchemaNode) augment - // .getDataChildByName("augment-holder"); - // assertNotNull(augmentHolder); - // assertTrue(augmentHolder.isAugmenting()); - // QName augmentHolderQName = augmentHolder.getQName(); - // assertEquals("augment-holder", augmentHolderQName.getLocalName()); - // assertEquals("t3", augmentHolderQName.getPrefix()); - // assertEquals("Description for augment holder", - // augmentHolder.getDescription()); + AugmentationSchema augment = null; + for (AugmentationSchema as : augmentations) { + if ("if:ifType='ds0'".equals(as.getWhenCondition().toString())) { + augment = as; + } + } + ContainerSchemaNode augmentHolder = (ContainerSchemaNode) augment + .getDataChildByName("augment-holder"); + assertNotNull(augmentHolder); + assertTrue(augmentHolder.isAugmenting()); + QName augmentHolderQName = augmentHolder.getQName(); + assertEquals("augment-holder", augmentHolderQName.getLocalName()); + assertEquals("t3", augmentHolderQName.getPrefix()); + assertEquals("Description for augment holder", + augmentHolder.getDescription()); } @Test @@ -285,7 +303,7 @@ public class YangParserTest { List ranges = leafType.getRanges(); assertEquals(1, ranges.size()); RangeConstraint range = ranges.get(0); - assertEquals(11L, range.getMin()); + assertEquals(3L, range.getMin()); assertEquals(20L, range.getMax()); } @@ -540,25 +558,84 @@ public class YangParserTest { assertEquals(1, usesNodes.size()); UsesNode usesNode = usesNodes.iterator().next(); Map refines = usesNode.getRefines(); - assertEquals(2, refines.size()); + assertEquals(5, refines.size()); + LeafSchemaNode refineLeaf = null; + ContainerSchemaNode refineContainer = null; + ListSchemaNode refineList = null; + GroupingDefinition refineGrouping = null; + TypeDefinition typedef = null; for (Map.Entry entry : refines.entrySet()) { SchemaNode value = entry.getValue(); - if (value instanceof LeafSchemaNode) { - LeafSchemaNode refineLeaf = (LeafSchemaNode) value; - assertNotNull(refineLeaf); - } else { - ContainerSchemaNode refineContainer = (ContainerSchemaNode) value; - Set mustConstraints = refineContainer - .getConstraints().getMustConstraints(); - assertEquals(1, mustConstraints.size()); - MustDefinition must = mustConstraints.iterator().next(); - assertEquals("must-condition", must.toString()); - assertEquals("An error message test", must.getErrorMessage()); - assertEquals(("An error app tag test"), must.getErrorAppTag()); + refineLeaf = (LeafSchemaNode) value; + } else if (value instanceof ContainerSchemaNode) { + refineContainer = (ContainerSchemaNode) value; + } else if (value instanceof ListSchemaNode) { + refineList = (ListSchemaNode) value; + } else if (value instanceof GroupingDefinition) { + refineGrouping = (GroupingDefinition) value; + } else if (value instanceof TypeDefinition) { + typedef = (TypeDefinition) value; } } + + // leaf address + assertNotNull(refineLeaf); + assertEquals("address", refineLeaf.getQName().getLocalName()); + assertEquals("description of address defined by refine", + refineLeaf.getDescription()); + assertEquals("address reference added by refine", + refineLeaf.getReference()); + assertFalse(refineLeaf.isConfiguration()); + assertTrue(refineLeaf.getConstraints().isMandatory()); + Set leafMustConstraints = refineLeaf.getConstraints() + .getMustConstraints(); + assertEquals(1, leafMustConstraints.size()); + MustDefinition leafMust = leafMustConstraints.iterator().next(); + assertEquals( + "\"ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)\"", + leafMust.toString()); + + // container port + assertNotNull(refineContainer); + Set mustConstraints = refineContainer.getConstraints() + .getMustConstraints(); + assertTrue(mustConstraints.isEmpty()); + assertEquals("description of port defined by refine", + refineContainer.getDescription()); + assertEquals("port reference added by refine", + refineContainer.getReference()); + assertFalse(refineContainer.isConfiguration()); + assertTrue(refineContainer.isPresenceContainer()); + + // list addresses + assertNotNull(refineList); + assertEquals("description of addresses defined by refine", + refineList.getDescription()); + assertEquals("addresses reference added by refine", + refineList.getReference()); + assertFalse(refineList.isConfiguration()); + assertEquals(2, (int) refineList.getConstraints().getMinElements()); + assertEquals(12, (int) refineList.getConstraints().getMaxElements()); + + // grouping target-inner + assertNotNull(refineGrouping); + Set refineGroupingChildren = refineGrouping + .getChildNodes(); + assertEquals(1, refineGroupingChildren.size()); + LeafSchemaNode refineGroupingLeaf = (LeafSchemaNode) refineGroupingChildren + .iterator().next(); + assertEquals("inner-grouping-id", refineGroupingLeaf.getQName() + .getLocalName()); + assertEquals("new target-inner grouping description", + refineGrouping.getDescription()); + + // typedef group-type + assertNotNull(typedef); + assertEquals("new group-type description", typedef.getDescription()); + assertEquals("new group-type reference", typedef.getReference()); + assertTrue(typedef.getBaseType() instanceof ExtendedType); } @Test @@ -681,4 +758,53 @@ public class YangParserTest { assertNotNull(output.getDataChildByName("data")); } + @Test + public void testGrouping() { + Module testModule = TestUtils.findModule(modules, "types2"); + Set groupings = testModule.getGroupings(); + assertEquals(1, groupings.size()); + GroupingDefinition grouping = groupings.iterator().next(); + Set children = grouping.getChildNodes(); + assertEquals(5, children.size()); + } + + @Test + public void testAugmentNodesTypesSchemaPath() throws Exception { + final DateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Module testModule = TestUtils.findModule(modules, "types1"); + Set augments = testModule.getAugmentations(); + assertEquals(1, augments.size()); + AugmentationSchema augment = augments.iterator().next(); + + LeafSchemaNode ifcId = (LeafSchemaNode) augment + .getDataChildByName("interface-id"); + Leafref ifcIdType = (Leafref) ifcId.getType(); + SchemaPath ifcIdTypeSchemaPath = ifcIdType.getPath(); + List ifcIdTypePath = ifcIdTypeSchemaPath.getPath(); + QName q0 = new QName(new URI("urn:simple.types.data.demo"), + simpleDateFormat.parse("2013-02-27"), "data", "interfaces"); + QName q1 = new QName(new URI("urn:simple.types.data.demo"), + simpleDateFormat.parse("2013-02-27"), "data", "ifEntry"); + QName q2 = new QName(new URI("urn:simple.container.demo.test"), + simpleDateFormat.parse("2013-02-27"), "data", "augment-holder"); + QName q3 = new QName(new URI("urn:simple.container.demo"), + simpleDateFormat.parse("2013-02-27"), "data", "interface-id"); + assertEquals(q0, ifcIdTypePath.get(0)); + assertEquals(q1, ifcIdTypePath.get(1)); + assertEquals(q2, ifcIdTypePath.get(2)); + assertEquals(q3, ifcIdTypePath.get(3)); + + LeafListSchemaNode higherLayer = (LeafListSchemaNode) augment + .getDataChildByName("higher-layer-if"); + Leafref higherLayerType = (Leafref) higherLayer.getType(); + SchemaPath higherLayerTypeSchemaPath = higherLayerType.getPath(); + List higherLayerTypePath = higherLayerTypeSchemaPath.getPath(); + assertEquals(q0, higherLayerTypePath.get(0)); + assertEquals(q1, higherLayerTypePath.get(1)); + assertEquals(q2, higherLayerTypePath.get(2)); + q3 = new QName(new URI("urn:simple.container.demo"), + simpleDateFormat.parse("2013-02-27"), "data", "higher-layer-if"); + assertEquals(q3, higherLayerTypePath.get(3)); + } + }