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