Remove SchemaNode.getPath()
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / YangParserSimpleTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.stmt;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertTrue;
14
15 import java.util.Collection;
16 import java.util.Optional;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.common.QNameModule;
21 import org.opendaylight.yangtools.yang.common.Revision;
22 import org.opendaylight.yangtools.yang.common.XMLNamespace;
23 import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
27 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
28 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
29 import org.opendaylight.yangtools.yang.model.api.Module;
30 import org.opendaylight.yangtools.yang.model.api.MustDefinition;
31 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
32 import org.opendaylight.yangtools.yang.model.api.Status;
33 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
34 import org.opendaylight.yangtools.yang.model.api.UsesNode;
35
36 public class YangParserSimpleTest {
37     private static final XMLNamespace NS = XMLNamespace.of("urn:opendaylight:simple-nodes");
38     private static final QNameModule SN = QNameModule.create(NS, Revision.of("2013-07-30"));
39     private static final QName SN_NODES = QName.create(SN, "nodes");
40
41     private SchemaContext context;
42     private Module testModule;
43
44     @Before
45     public void init() throws Exception {
46         context = TestUtils.loadModules(getClass().getResource("/simple-test").toURI());
47         testModule = TestUtils.findModule(context, "simple-nodes").get();
48     }
49
50     @Test
51     public void testParseAnyXml() {
52         final AnyxmlSchemaNode data = (AnyxmlSchemaNode) testModule.getDataChildByName(
53             QName.create(testModule.getQNameModule(), "data"));
54         assertNotNull("'anyxml data not found'", data);
55         assertFalse(data.equals(null));
56         assertEquals("RegularAnyxmlEffectiveStatement{qname=(urn:opendaylight:simple-nodes?revision=2013-07-30)data}",
57                 data.toString());
58
59         // test SchemaNode args
60         assertEquals(QName.create(SN, "data"), data.getQName());
61         assertEquals(Optional.of("anyxml desc"), data.getDescription());
62         assertEquals(Optional.of("data ref"), data.getReference());
63         assertEquals(Status.OBSOLETE, data.getStatus());
64         assertEquals(0, data.getUnknownSchemaNodes().size());
65         // test DataSchemaNode args
66         assertFalse(data.isAugmenting());
67         assertEquals(Optional.of(Boolean.FALSE), data.effectiveConfig());
68
69         assertTrue(data.isMandatory());
70         assertEquals("class != 'wheel'", data.getWhenCondition().orElseThrow().toString());
71         final Collection<? extends MustDefinition> mustConstraints = data.getMustConstraints();
72         assertEquals(2, mustConstraints.size());
73
74         final String must1 = "ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)";
75         final String must2 = "ifType != 'atm' or (ifType = 'atm' and ifMTU <= 17966 and ifMTU >= 64)";
76
77         boolean found1 = false;
78         boolean found2 = false;
79         for (final MustDefinition must : mustConstraints) {
80             if (must1.equals(must.getXpath().toString())) {
81                 found1 = true;
82                 assertEquals(Optional.of("An ethernet MTU must be 1500"), must.getErrorMessage());
83             } else if (must2.equals(must.getXpath().toString())) {
84                 found2 = true;
85                 assertEquals(Optional.of("An atm MTU must be  64 .. 17966"), must.getErrorMessage());
86                 assertEquals(Optional.of("anyxml data error-app-tag"), must.getErrorAppTag());
87                 assertEquals(Optional.of("an error occured in data"), must.getDescription());
88                 assertEquals(Optional.of("data must ref"), must.getReference());
89             }
90         }
91         assertTrue(found1);
92         assertTrue(found2);
93     }
94
95     @Test
96     public void testParseAnyData() {
97         final AnydataSchemaNode anydata = (AnydataSchemaNode) testModule.findDataChildByName(
98                 QName.create(testModule.getQNameModule(), "data2")).orElse(null);
99
100         assertNotNull("'anydata data not found'", anydata);
101         assertEquals("RegularAnydataEffectiveStatement{qname=(urn:opendaylight:simple-nodes?revision=2013-07-30)data2}",
102                 anydata.toString());
103
104         // test SchemaNode args
105         assertEquals(QName.create(SN, "data2"), anydata.getQName());
106         assertEquals(Optional.of("anydata desc"), anydata.getDescription());
107         assertEquals(Optional.of("data ref"), anydata.getReference());
108         assertEquals(Status.OBSOLETE, anydata.getStatus());
109         assertEquals(0, anydata.getUnknownSchemaNodes().size());
110         // test DataSchemaNode args
111         assertFalse(anydata.isAugmenting());
112         assertEquals(Optional.of(Boolean.FALSE), anydata.effectiveConfig());
113
114         assertTrue(anydata.isMandatory());
115         assertTrue(anydata.getWhenCondition().isPresent());
116         assertEquals("class != 'wheel'", anydata.getWhenCondition().orElseThrow().toString());
117         final Collection<? extends MustDefinition> mustConstraints = anydata.getMustConstraints();
118         assertEquals(2, mustConstraints.size());
119
120         final String must1 = "ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)";
121         final String must2 = "ifType != 'atm' or (ifType = 'atm' and ifMTU <= 17966 and ifMTU >= 64)";
122
123         boolean found1 = false;
124         boolean found2 = false;
125         for (final MustDefinition must : mustConstraints) {
126             if (must1.equals(must.getXpath().toString())) {
127                 found1 = true;
128                 assertEquals(Optional.of("An ethernet MTU must be 1500"), must.getErrorMessage());
129             } else if (must2.equals(must.getXpath().toString())) {
130                 found2 = true;
131                 assertEquals(Optional.of("An atm MTU must be  64 .. 17966"), must.getErrorMessage());
132                 assertEquals(Optional.of("anydata data error-app-tag"), must.getErrorAppTag());
133                 assertEquals(Optional.of("an error occured in data"), must.getDescription());
134                 assertEquals(Optional.of("data must ref"), must.getReference());
135             }
136         }
137         assertTrue(found1);
138         assertTrue(found2);
139     }
140
141     @Test
142     public void testParseContainer() {
143         final ContainerSchemaNode nodes = (ContainerSchemaNode) testModule
144                 .getDataChildByName(QName.create(testModule.getQNameModule(), "nodes"));
145         // test SchemaNode args
146         assertEquals(SN_NODES, nodes.getQName());
147         assertEquals(Optional.of("nodes collection"), nodes.getDescription());
148         assertEquals(Optional.of("nodes ref"), nodes.getReference());
149         assertEquals(Status.CURRENT, nodes.getStatus());
150         assertEquals(0, nodes.getUnknownSchemaNodes().size());
151         // test DataSchemaNode args
152         assertFalse(nodes.isAugmenting());
153         assertEquals(Optional.of(Boolean.FALSE), nodes.effectiveConfig());
154
155         // constraints
156         assertEquals("class != 'wheel'", nodes.getWhenCondition().orElseThrow().toString());
157         final Collection<? extends MustDefinition> mustConstraints = nodes.getMustConstraints();
158         assertEquals(2, mustConstraints.size());
159
160         final String must1 = "ifType != 'atm' or (ifType = 'atm' and ifMTU <= 17966 and ifMTU >= 64)";
161         final String errMsg1 = "An atm MTU must be  64 .. 17966";
162         final String must2 = "ifId != 0";
163
164         boolean found1 = false;
165         boolean found2 = false;
166         for (final MustDefinition must : mustConstraints) {
167             if (must1.equals(must.getXpath().toString())) {
168                 found1 = true;
169                 assertEquals(Optional.of(errMsg1), must.getErrorMessage());
170             } else if (must2.equals(must.getXpath().toString())) {
171                 found2 = true;
172                 assertFalse(must.getErrorMessage().isPresent());
173                 assertFalse(must.getErrorAppTag().isPresent());
174                 assertFalse(must.getDescription().isPresent());
175                 assertFalse(must.getReference().isPresent());
176             }
177         }
178         assertTrue(found1);
179         assertTrue(found2);
180
181         assertTrue(nodes.isPresenceContainer());
182
183         // typedef
184         final Collection<? extends TypeDefinition<?>> typedefs = nodes.getTypeDefinitions();
185         assertEquals(1, typedefs.size());
186         final TypeDefinition<?> nodesType = typedefs.iterator().next();
187         final QName typedefQName = QName.create(SN, "nodes-type");
188         assertEquals(typedefQName, nodesType.getQName());
189         assertFalse(nodesType.getDescription().isPresent());
190         assertFalse(nodesType.getReference().isPresent());
191         assertEquals(Status.CURRENT, nodesType.getStatus());
192         assertEquals(0, nodesType.getUnknownSchemaNodes().size());
193
194         // child nodes
195         // total size = 8: defined 6, inserted by uses 2
196         assertEquals(8, nodes.getChildNodes().size());
197         final LeafListSchemaNode added = (LeafListSchemaNode)nodes.getDataChildByName(QName.create(
198             testModule.getQNameModule(), "added"));
199         assertEquals(QName.create(SN, "added"), added.getQName());
200         assertEquals(QName.create(SN, "mytype"), added.getType().getQName());
201
202         final ListSchemaNode links = (ListSchemaNode) nodes.getDataChildByName(QName.create(
203             testModule.getQNameModule(), "links"));
204         assertFalse(links.isUserOrdered());
205
206         final Collection<? extends GroupingDefinition> groupings = nodes.getGroupings();
207         assertEquals(1, groupings.size());
208         final GroupingDefinition nodeGroup = groupings.iterator().next();
209         assertEquals(QName.create(SN, "node-group"), nodeGroup.getQName());
210
211         final Collection<? extends UsesNode> uses = nodes.getUses();
212         assertEquals(1, uses.size());
213         final UsesNode use = uses.iterator().next();
214         assertEquals(nodeGroup, use.getSourceGrouping());
215     }
216 }