2 * Copyright (c) 2018 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.data.codec.xml;
10 import java.io.InputStream;
11 import javax.xml.stream.XMLStreamReader;
12 import org.junit.Before;
13 import org.junit.Test;
14 import org.opendaylight.yangtools.util.xml.UntrustedXML;
15 import org.opendaylight.yangtools.yang.common.QName;
16 import org.opendaylight.yangtools.yang.common.Revision;
17 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
18 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
19 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
20 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree;
21 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
22 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration;
23 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification;
24 import org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefContext;
25 import org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefDataValidationFailedException;
26 import org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefValidatation;
27 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
28 import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
29 import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory;
30 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
31 import org.opendaylight.yangtools.yang.model.api.Module;
32 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
33 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
35 public class Yangtools891Test {
36 private static final String FOO = "foo";
37 private static final String FOO_NS = "urn:opendaylight:params:xml:ns:yang:foo";
38 private static final String FOO_REV = "2018-07-27";
39 private static final QName FOO_TOP = QName.create(FOO_NS, FOO_REV, "foo-top");
40 private static final YangInstanceIdentifier FOO_TOP_ID = YangInstanceIdentifier.of(FOO_TOP);
41 private static final String BAZ = "baz";
42 private static final String BAZ_NS = "urn:opendaylight:params:xml:ns:yang:baz";
43 private static final String BAZ_REV = "2018-07-27";
44 private static final QName BAZ_TOP = QName.create(BAZ_NS, BAZ_REV, "baz-top");
45 private static final YangInstanceIdentifier BAZ_TOP_ID = YangInstanceIdentifier.of(BAZ_TOP);
47 private SchemaContext schemaContext;
48 private LeafRefContext leafRefContext;
49 private DataTree dataTree;
50 private ContainerSchemaNode fooTopNode;
51 private ContainerSchemaNode bazTopNode;
55 schemaContext = YangParserTestUtils.parseYangResourceDirectory("/yangtools891");
56 leafRefContext = LeafRefContext.create(schemaContext);
57 dataTree = new InMemoryDataTreeFactory().create(DataTreeConfiguration.DEFAULT_CONFIGURATION, schemaContext);
58 final Module fooModule = schemaContext.findModule(FOO, Revision.of(FOO_REV)).get();
59 fooTopNode = (ContainerSchemaNode) fooModule.findDataChildByName(FOO_TOP).get();
60 final Module bazModule = schemaContext.findModule(BAZ, Revision.of(BAZ_REV)).get();
61 bazTopNode = (ContainerSchemaNode) bazModule.findDataChildByName(BAZ_TOP).get();
65 public void testValid() throws Exception {
66 final NormalizedNode<?, ?> fooTop = readNode("/yangtools891/grouping-with-list-valid.xml", fooTopNode);
67 final DataTreeModification writeModification = dataTree.takeSnapshot().newModification();
68 writeModification.write(FOO_TOP_ID, fooTop);
69 writeModification.ready();
70 final DataTreeCandidate writeContributorsCandidate = dataTree.prepare(writeModification);
72 LeafRefValidatation.validate(writeContributorsCandidate, leafRefContext);
73 dataTree.commit(writeContributorsCandidate);
76 @Test(expected = LeafRefDataValidationFailedException.class)
77 public void testInvalid() throws Exception {
78 final NormalizedNode<?, ?> fooTop = readNode("/yangtools891/grouping-with-list-invalid.xml", fooTopNode);
79 final DataTreeModification writeModification = dataTree.takeSnapshot().newModification();
80 writeModification.write(FOO_TOP_ID, fooTop);
81 writeModification.ready();
82 final DataTreeCandidate writeContributorsCandidate = dataTree.prepare(writeModification);
84 LeafRefValidatation.validate(writeContributorsCandidate, leafRefContext);
88 public void testGroupingWithLeafrefValid() throws Exception {
89 final NormalizedNode<?, ?> bazTop = readNode("/yangtools891/baz-top.xml", bazTopNode);
90 final NormalizedNode<?, ?> fooTop = readNode("/yangtools891/grouping-with-leafref-valid.xml", fooTopNode);
91 final DataTreeModification writeModification = dataTree.takeSnapshot().newModification();
92 writeModification.write(BAZ_TOP_ID, bazTop);
93 writeModification.write(FOO_TOP_ID, fooTop);
94 writeModification.ready();
95 final DataTreeCandidate writeContributorsCandidate = dataTree.prepare(writeModification);
97 LeafRefValidatation.validate(writeContributorsCandidate, leafRefContext);
100 @Test(expected = LeafRefDataValidationFailedException.class)
101 public void testGroupingWithLeafrefInvalid() throws Exception {
102 final NormalizedNode<?, ?> bazTop = readNode("/yangtools891/baz-top.xml", bazTopNode);
103 final NormalizedNode<?, ?> fooTop = readNode("/yangtools891/grouping-with-leafref-invalid.xml", fooTopNode);
104 final DataTreeModification writeModification = dataTree.takeSnapshot().newModification();
105 writeModification.write(BAZ_TOP_ID, bazTop);
106 writeModification.write(FOO_TOP_ID, fooTop);
107 writeModification.ready();
108 final DataTreeCandidate writeContributorsCandidate = dataTree.prepare(writeModification);
110 LeafRefValidatation.validate(writeContributorsCandidate, leafRefContext);
113 private NormalizedNode<?, ?> readNode(final String filename, final ContainerSchemaNode node) throws Exception {
114 final InputStream resourceAsStream = Yangtools891Test.class.getResourceAsStream(filename);
115 final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
116 final NormalizedNodeResult result = new NormalizedNodeResult();
117 final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
118 final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, node);
119 xmlParser.parse(reader);
120 return result.getResult();