XML -> NormalizedNodes parser identity-ref/instance-id/leafref support 21/16021/2
authorMaros Marsalek <mmarsale@cisco.com>
Wed, 4 Mar 2015 14:08:33 +0000 (15:08 +0100)
committerMaros Marsalek <mmarsale@cisco.com>
Wed, 4 Mar 2015 14:14:45 +0000 (14:14 +0000)
The parsers now pars leaves of mentioned types properly.

Change-Id: I73e07079e27005dd2c22c239da6f81bdd2ef43a1
Signed-off-by: Maros Marsalek <mmarsale@cisco.com>
common/util/src/main/java/org/opendaylight/yangtools/util/UnmodifiableCollection.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/DomUtils.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/DomToNormalizedNodeParserFactory.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafNodeDomParser.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafSetEntryNodeDomParser.java
yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/NormalizedNodeXmlTranslationTest.java
yang/yang-data-impl/src/test/resources/org/opendaylight/yangtools/yang/data/impl/schema/simple.xml
yang/yang-data-impl/src/test/resources/org/opendaylight/yangtools/yang/data/impl/schema/test.yang
yang/yang-data-operations/src/test/java/org/opendaylight/yangtools/yang/data/operations/YangDataOperationsTest.java

index 3e9d41405fd49139dc90ac164421ed5248c241b3..5b9d98a641dac4a26bd6306977679efab303a882 100644 (file)
@@ -132,4 +132,11 @@ public final class UnmodifiableCollection<E> implements Collection<E>, Serializa
     public void clear() {
         throw new UnsupportedOperationException();
     }
+
+    @Override
+    public String toString() {
+        final StringBuffer sb = new StringBuffer("UnmodifiableCollection{");
+        sb.append(delegate);
+        return sb.toString();
+    }
 }
index eb1939604a237054c825da4e78ad9428f24e430e..6b65c05a9e375ef0934f74b1e4a8d34f8e24c704 100644 (file)
@@ -9,25 +9,29 @@ package org.opendaylight.yangtools.yang.data.impl.schema.transform.dom;
 
 import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.Lists;
-
 import java.net.URI;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import javax.xml.XMLConstants;
 import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 import javax.xml.transform.dom.DOMResult;
-
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.impl.codec.TypeDefinitionAwareCodec;
+import org.opendaylight.yangtools.yang.data.impl.codec.xml.InstanceIdentifierForXmlCodec;
 import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider;
 import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlDocumentUtils;
 import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlStreamUtils;
 import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlUtils;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
+import org.opendaylight.yangtools.yang.model.util.InstanceIdentifierType;
+import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
@@ -111,4 +115,26 @@ public final class DomUtils {
         }
         return attributes;
     }
+
+    public static Object parseXmlValue(final Element xml, final XmlCodecProvider codecProvider, final DataSchemaNode schema, final TypeDefinition<?> type, final SchemaContext schemaCtx) {
+        TypeDefinition<?> baseType = XmlUtils.resolveBaseTypeFrom(type);
+        if (baseType instanceof LeafrefTypeDefinition) {
+            final LeafrefTypeDefinition leafrefTypeDefinition = (LeafrefTypeDefinition) baseType;
+            baseType = SchemaContextUtil.getBaseTypeForLeafRef(leafrefTypeDefinition, schemaCtx, schema);
+        }
+
+        String text = xml.getTextContent();
+        text = text.trim();
+        final Object value;
+
+        if (baseType instanceof InstanceIdentifierType) {
+            value = InstanceIdentifierForXmlCodec.deserialize(xml, schemaCtx);
+        } else if (baseType instanceof IdentityrefTypeDefinition) {
+            value = InstanceIdentifierForXmlCodec.toIdentity(text, xml, schemaCtx);
+        } else {
+            value = parseXmlValue(xml, codecProvider, type);
+        }
+
+        return value;
+    }
 }
index 2451771d59a7e640c6a5011bf82b27caec3a7750..72dbc5677f23879560ce8bc6da75b71028d2746c 100644 (file)
@@ -29,6 +29,7 @@ import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.w3c.dom.Element;
 
 public final class DomToNormalizedNodeParserFactory implements ToNormalizedNodeParserFactory<Element> {
@@ -45,9 +46,9 @@ public final class DomToNormalizedNodeParserFactory implements ToNormalizedNodeP
     private final OrderedListNodeDomParser orderedListNodeParser;
     private final AnyXmlDomParser anyXmlNodeParser;
 
-    private DomToNormalizedNodeParserFactory(final XmlCodecProvider codecProvider) {
-        leafNodeParser = new LeafNodeDomParser(codecProvider);
-        leafSetEntryNodeParser = new LeafSetEntryNodeDomParser(codecProvider);
+    private DomToNormalizedNodeParserFactory(final XmlCodecProvider codecProvider, final SchemaContext schema) {
+        leafNodeParser = new LeafNodeDomParser(codecProvider, schema);
+        leafSetEntryNodeParser = new LeafSetEntryNodeDomParser(codecProvider, schema);
         leafSetNodeParser = new LeafSetNodeDomParser(leafSetEntryNodeParser);
         anyXmlNodeParser = new AnyXmlDomParser();
 
@@ -65,8 +66,8 @@ public final class DomToNormalizedNodeParserFactory implements ToNormalizedNodeP
         augmentationNodeParser = new AugmentationNodeDomParser(dispatcher);
     }
 
-    public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider) {
-        return new DomToNormalizedNodeParserFactory(codecProvider);
+    public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider, final SchemaContext schema) {
+        return new DomToNormalizedNodeParserFactory(codecProvider, schema);
     }
 
     @Override
index 6c5d064268b09270ed80ef40522d932af19433c1..357ddb762f00b2f5d13858a2b45507f1c07b3727 100644 (file)
@@ -14,6 +14,7 @@ import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider;
 import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.LeafNodeBaseParser;
 import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.DomUtils;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.w3c.dom.Element;
 
 import com.google.common.base.Preconditions;
@@ -21,14 +22,16 @@ import com.google.common.base.Preconditions;
 final class LeafNodeDomParser extends LeafNodeBaseParser<Element> {
 
     private final XmlCodecProvider codecProvider;
+    private final SchemaContext ctx;
 
-    LeafNodeDomParser(XmlCodecProvider codecProvider) {
+    LeafNodeDomParser(XmlCodecProvider codecProvider, final SchemaContext schema) {
+        this.ctx = schema;
         this.codecProvider = Preconditions.checkNotNull(codecProvider);
     }
 
     @Override
     protected Object parseLeaf(Element xmlElement, LeafSchemaNode schema) {
-        return DomUtils.parseXmlValue(xmlElement, codecProvider, schema.getType());
+        return DomUtils.parseXmlValue(xmlElement, codecProvider, schema, schema.getType(), ctx);
     }
 
     @Override
index 2b224a0e718b5064c6c2c32d259ebf29e3abffbc..cc48bb33cf88d59368377f00682d83b7afb1d4e7 100644 (file)
@@ -14,6 +14,7 @@ import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider;
 import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.LeafSetEntryNodeBaseParser;
 import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.DomUtils;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.w3c.dom.Element;
 
 import com.google.common.base.Preconditions;
@@ -21,14 +22,16 @@ import com.google.common.base.Preconditions;
 final class LeafSetEntryNodeDomParser extends LeafSetEntryNodeBaseParser<Element> {
 
     private final XmlCodecProvider codecProvider;
+    private final SchemaContext ctx;
 
-    LeafSetEntryNodeDomParser(XmlCodecProvider codecProvider) {
+    LeafSetEntryNodeDomParser(XmlCodecProvider codecProvider, final SchemaContext schema) {
+        ctx = schema;
         this.codecProvider = Preconditions.checkNotNull(codecProvider);
     }
 
     @Override
     protected Object parseLeafListEntry(Element xmlElement, LeafListSchemaNode schema) {
-        return DomUtils.parseXmlValue(xmlElement, codecProvider, schema.getType());
+        return DomUtils.parseXmlValue(xmlElement, codecProvider, schema, schema.getType(), ctx);
     }
 
     @Override
index 8979339abbb159610674b4fbe7616149f0840b5c..655e756baa1f53d145d8c839dca2eda424c70c7f 100644 (file)
@@ -13,7 +13,6 @@ import com.google.common.collect.Collections2;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringWriter;
@@ -27,7 +26,6 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
@@ -38,7 +36,7 @@ import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.TransformerFactoryConfigurationError;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
-
+import org.custommonkey.xmlunit.DetailedDiff;
 import org.custommonkey.xmlunit.Diff;
 import org.custommonkey.xmlunit.XMLUnit;
 import org.junit.Test;
@@ -73,6 +71,7 @@ import org.xml.sax.SAXException;
 @RunWith(Parameterized.class)
 public class NormalizedNodeXmlTranslationTest {
     private static final Logger logger = LoggerFactory.getLogger(NormalizedNodeXmlTranslationTest.class);
+    private final SchemaContext schema;
 
     @Parameterized.Parameters()
     public static Collection<Object[]> data() {
@@ -92,26 +91,26 @@ public class NormalizedNodeXmlTranslationTest {
     static {
         try {
             revision = new SimpleDateFormat("yyyy-MM-dd").parse("2014-03-13");
-        } catch (ParseException e) {
+        } catch (final ParseException e) {
             throw new RuntimeException(e);
         }
     }
 
     private static ContainerNode withAttributes() {
-        DataContainerNodeBuilder<YangInstanceIdentifier.NodeIdentifier, ContainerNode> b = Builders.containerBuilder();
+        final DataContainerNodeBuilder<YangInstanceIdentifier.NodeIdentifier, ContainerNode> b = Builders.containerBuilder();
         b.withNodeIdentifier(getNodeIdentifier("container"));
 
-        CollectionNodeBuilder<MapEntryNode, MapNode> listBuilder = Builders.mapBuilder().withNodeIdentifier(
+        final CollectionNodeBuilder<MapEntryNode, MapNode> listBuilder = Builders.mapBuilder().withNodeIdentifier(
                 getNodeIdentifier("list"));
 
-        Map<QName, Object> predicates = Maps.newHashMap();
+        final Map<QName, Object> predicates = Maps.newHashMap();
         predicates.put(getNodeIdentifier("uint32InList").getNodeType(), 3L);
 
-        DataContainerNodeBuilder<YangInstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> list1Builder = Builders
+        final DataContainerNodeBuilder<YangInstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> list1Builder = Builders
                 .mapEntryBuilder().withNodeIdentifier(
                         new YangInstanceIdentifier.NodeIdentifierWithPredicates(getNodeIdentifier("list").getNodeType(),
                                 predicates));
-        NormalizedNodeBuilder<YangInstanceIdentifier.NodeIdentifier,Object,LeafNode<Object>> uint32InListBuilder
+        final NormalizedNodeBuilder<YangInstanceIdentifier.NodeIdentifier,Object,LeafNode<Object>> uint32InListBuilder
         = Builders.leafBuilder().withNodeIdentifier(getNodeIdentifier("uint32InList"));
 
         list1Builder.withChild(uint32InListBuilder.withValue(3L).build());
@@ -119,15 +118,15 @@ public class NormalizedNodeXmlTranslationTest {
         listBuilder.withChild(list1Builder.build());
         b.withChild(listBuilder.build());
 
-        NormalizedNodeBuilder<YangInstanceIdentifier.NodeIdentifier, Object, LeafNode<Object>> booleanBuilder
+        final NormalizedNodeBuilder<YangInstanceIdentifier.NodeIdentifier, Object, LeafNode<Object>> booleanBuilder
         = Builders.leafBuilder().withNodeIdentifier(getNodeIdentifier("boolean"));
         booleanBuilder.withValue(false);
         b.withChild(booleanBuilder.build());
 
-        ListNodeBuilder<Object, LeafSetEntryNode<Object>> leafListBuilder
+        final ListNodeBuilder<Object, LeafSetEntryNode<Object>> leafListBuilder
         = Builders.leafSetBuilder().withNodeIdentifier(getNodeIdentifier("leafList"));
 
-        NormalizedNodeBuilder<YangInstanceIdentifier.NodeWithValue, Object, LeafSetEntryNode<Object>> leafList1Builder
+        final NormalizedNodeBuilder<YangInstanceIdentifier.NodeWithValue, Object, LeafSetEntryNode<Object>> leafList1Builder
         = Builders.leafSetEntryBuilder().withNodeIdentifier(new YangInstanceIdentifier.NodeWithValue(getNodeIdentifier("leafList").getNodeType(), "a"));
 
         leafList1Builder.withValue("a");
@@ -140,7 +139,7 @@ public class NormalizedNodeXmlTranslationTest {
 
     private static ContainerNode augmentChoiceHell() {
 
-        DataContainerNodeBuilder<YangInstanceIdentifier.NodeIdentifier, ContainerNode> b = Builders.containerBuilder();
+        final DataContainerNodeBuilder<YangInstanceIdentifier.NodeIdentifier, ContainerNode> b = Builders.containerBuilder();
         b.withNodeIdentifier(getNodeIdentifier("container"));
 
         b.withChild(
@@ -190,9 +189,9 @@ public class NormalizedNodeXmlTranslationTest {
     }
 
     public static YangInstanceIdentifier.AugmentationIdentifier getAugmentIdentifier(final String... childNames) {
-        Set<QName> qn = Sets.newHashSet();
+        final Set<QName> qn = Sets.newHashSet();
 
-        for (String childName : childNames) {
+        for (final String childName : childNames) {
             qn.add(getNodeIdentifier(childName).getNodeType());
         }
 
@@ -200,7 +199,7 @@ public class NormalizedNodeXmlTranslationTest {
     }
 
     public NormalizedNodeXmlTranslationTest(final String yangPath, final String xmlPath, final ContainerNode expectedNode) {
-        SchemaContext schema = parseTestSchema(yangPath);
+        schema = parseTestSchema(yangPath);
         this.xmlPath = xmlPath;
         this.containerNode = (ContainerSchemaNode) NormalizedDataBuilderTest.getSchemaNode(schema, "test", "container");
         this.expectedNode = expectedNode;
@@ -212,8 +211,8 @@ public class NormalizedNodeXmlTranslationTest {
 
 
     SchemaContext parseTestSchema(final String... yangPath) {
-        YangParserImpl yangParserImpl = new YangParserImpl();
-        Set<Module> modules = yangParserImpl.parseYangModelsFromStreams(getTestYangs(yangPath));
+        final YangParserImpl yangParserImpl = new YangParserImpl();
+        final Set<Module> modules = yangParserImpl.parseYangModelsFromStreams(getTestYangs(yangPath));
         return yangParserImpl.resolveSchemaContext(modules);
     }
 
@@ -223,7 +222,7 @@ public class NormalizedNodeXmlTranslationTest {
                 new Function<String, InputStream>() {
             @Override
             public InputStream apply(final String input) {
-                InputStream resourceAsStream = NormalizedDataBuilderTest.class.getResourceAsStream(input);
+                final InputStream resourceAsStream = NormalizedDataBuilderTest.class.getResourceAsStream(input);
                 Preconditions.checkNotNull(resourceAsStream, "File %s was null", resourceAsStream);
                 return resourceAsStream;
             }
@@ -232,36 +231,45 @@ public class NormalizedNodeXmlTranslationTest {
 
     @Test
     public void testTranslation() throws Exception {
-        Document doc = loadDocument(xmlPath);
+        final Document doc = loadDocument(xmlPath);
 
-        ContainerNode built =
-                DomToNormalizedNodeParserFactory.getInstance(DomUtils.defaultValueCodecProvider()).getContainerNodeParser().parse(
+        final ContainerNode built =
+                DomToNormalizedNodeParserFactory.getInstance(DomUtils.defaultValueCodecProvider(), schema).getContainerNodeParser().parse(
                         Collections.singletonList(doc.getDocumentElement()), containerNode);
 
         if (expectedNode != null) {
             org.junit.Assert.assertEquals(expectedNode, built);
         }
 
+        System.err.println(built);
         logger.info("{}", built);
 
-        Iterable<Element> els = DomFromNormalizedNodeSerializerFactory.getInstance(XmlDocumentUtils.getDocument(), DomUtils.defaultValueCodecProvider())
+        final Iterable<Element> els = DomFromNormalizedNodeSerializerFactory.getInstance(XmlDocumentUtils.getDocument(), DomUtils.defaultValueCodecProvider())
                 .getContainerNodeSerializer().serialize(containerNode, built);
 
-        Element el = els.iterator().next();
+        final Element el = els.iterator().next();
 
         XMLUnit.setIgnoreWhitespace(true);
         XMLUnit.setIgnoreComments(true);
+        XMLUnit.setIgnoreAttributeOrder(true);
+
 
         System.err.println(toString(doc.getDocumentElement()));
         System.err.println(toString(el));
 
-        boolean diff = new Diff(XMLUnit.buildControlDocument(toString(doc.getDocumentElement())), XMLUnit.buildTestDocument(toString(el))).similar();
+        final Diff diff = new Diff(XMLUnit.buildControlDocument(toString(doc.getDocumentElement())), XMLUnit.buildTestDocument(toString(el)));
+        DetailedDiff dd = new DetailedDiff(diff);
+
+        // FIXME the comparison cannot be performed, since the qualifiers supplied by XMlUnit do not work correctly in this case
+        // We need to implement custom qualifier so that the element ordering does not mess the DIFF
+//        dd.overrideElementQualifier(new ElementNameAndAttributeQualifier());
+//        assertTrue(dd.toString(), dd.similar());
     }
 
     private Document loadDocument(final String xmlPath) throws Exception {
-        InputStream resourceAsStream = NormalizedDataBuilderTest.class.getResourceAsStream(xmlPath);
+        final InputStream resourceAsStream = NormalizedDataBuilderTest.class.getResourceAsStream(xmlPath);
 
-        Document currentConfigElement = readXmlToDocument(resourceAsStream);
+        final Document currentConfigElement = readXmlToDocument(resourceAsStream);
         Preconditions.checkNotNull(currentConfigElement);
         return currentConfigElement;
     }
@@ -269,7 +277,7 @@ public class NormalizedNodeXmlTranslationTest {
     private static final DocumentBuilderFactory BUILDERFACTORY;
 
     static {
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
         factory.setNamespaceAware(true);
         factory.setCoalescing(true);
         factory.setIgnoringElementContentWhitespace(true);
@@ -278,13 +286,13 @@ public class NormalizedNodeXmlTranslationTest {
     }
 
     private Document readXmlToDocument(final InputStream xmlContent) throws IOException, SAXException {
-        DocumentBuilder dBuilder;
+        final DocumentBuilder dBuilder;
         try {
             dBuilder = BUILDERFACTORY.newDocumentBuilder();
-        } catch (ParserConfigurationException e) {
+        } catch (final ParserConfigurationException e) {
             throw new RuntimeException("Failed to parse XML document", e);
         }
-        Document doc = dBuilder.parse(xmlContent);
+        final Document doc = dBuilder.parse(xmlContent);
 
         doc.getDocumentElement().normalize();
         return doc;
@@ -292,11 +300,11 @@ public class NormalizedNodeXmlTranslationTest {
 
     public static String toString(final Element xml) {
         try {
-            Transformer transformer = TransformerFactory.newInstance().newTransformer();
+            final Transformer transformer = TransformerFactory.newInstance().newTransformer();
             transformer.setOutputProperty(OutputKeys.INDENT, "yes");
 
-            StreamResult result = new StreamResult(new StringWriter());
-            DOMSource source = new DOMSource(xml);
+            final StreamResult result = new StreamResult(new StringWriter());
+            final DOMSource source = new DOMSource(xml);
             transformer.transform(source, result);
 
             return result.getWriter().toString();
index b36531b2ff9a80293d125eb394497e4bb9755af3..e5a3bbcc43bec572fd829eac67202441a7a15b85 100644 (file)
@@ -11,6 +11,9 @@
         <containerInList name="inContainer">
             <uint32>32</uint32>
             <uint16>16</uint16>
+            <identityr xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:test">prefix:b</identityr>
+            <uint16-ref>16</uint16-ref>
+            <instance-id xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:test">/prefix:container/prefix:list[prefix:uint32InList="1"]</instance-id>
         </containerInList>
         <stringAugmentedToList>augmentInList</stringAugmentedToList>
         <stringAugmentedToListInCase1>augmentInListCase1</stringAugmentedToListInCase1>
index 5f0e5000d13dc205aaf24b3fe1267128f5c5dd2c..68d678fcfd60a340741efbca01f78db9201c9c5a 100644 (file)
@@ -11,6 +11,12 @@ module test {
             "Initial revision";
     }
 
+    identity a {}
+
+    identity b {
+        base "test:a";
+    }
+
     grouping listGroup {
         list list {
             key "uint32InList";
@@ -26,6 +32,22 @@ module test {
                 leaf uint16 {
                     type uint16;
                 }
+
+                leaf identityr {
+                    type identityref {
+                        base "test:a";
+                     }
+                }
+
+                leaf uint16-ref {
+                    type leafref {
+                        path "../uint16";
+                     }
+                }
+
+                leaf instance-id {
+                    type instance-identifier;
+                }
             }
         }
      }
index bebee24315bc0cef52fbf13d492e6b71643b4a30..f05db1e5da95e06c6c40afc4acf67d1020467368 100644 (file)
@@ -72,6 +72,7 @@ public class YangDataOperationsTest {
     protected final Optional<ContainerNode> currentConfig;
     protected final Optional<ContainerNode> modification;
     protected final ModifyAction modifyAction;
+    private final SchemaContext schema;
 
     @Parameterized.Parameters()
     public static Collection<Object[]> data() {
@@ -98,7 +99,7 @@ public class YangDataOperationsTest {
     }
 
     public YangDataOperationsTest(final String testDir) throws Exception {
-        SchemaContext schema = parseTestSchema();
+        schema = parseTestSchema();
         containerNode = (ContainerSchemaNode) getSchemaNode(schema, "test", "container");
         this.testDirName = testDir;
 
@@ -177,7 +178,7 @@ public class YangDataOperationsTest {
         Document currentConfigElement = readXmlToDocument(resourceAsStream);
         Preconditions.checkNotNull(currentConfigElement);
 
-        return Optional.of(DomToNormalizedNodeParserFactory.getInstance(DomUtils.defaultValueCodecProvider()).getContainerNodeParser().parse(
+        return Optional.of(DomToNormalizedNodeParserFactory.getInstance(DomUtils.defaultValueCodecProvider(), schema).getContainerNodeParser().parse(
                 Collections.singletonList(currentConfigElement.getDocumentElement()), containerNode));
     }