2 * Copyright (c) 2013 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.controller.yang.model.parser.impl;
10 import static org.junit.Assert.*;
12 import java.util.HashSet;
13 import java.util.List;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.opendaylight.controller.yang.common.QName;
19 import org.opendaylight.controller.yang.model.api.AugmentationSchema;
20 import org.opendaylight.controller.yang.model.api.ContainerSchemaNode;
21 import org.opendaylight.controller.yang.model.api.LeafSchemaNode;
22 import org.opendaylight.controller.yang.model.api.ListSchemaNode;
23 import org.opendaylight.controller.yang.model.api.Module;
24 import org.opendaylight.controller.yang.model.api.TypeDefinition;
25 import org.opendaylight.controller.yang.model.api.type.LengthConstraint;
26 import org.opendaylight.controller.yang.model.api.type.PatternConstraint;
27 import org.opendaylight.controller.yang.model.api.type.RangeConstraint;
28 import org.opendaylight.controller.yang.model.parser.api.YangModelParser;
29 import org.opendaylight.controller.yang.model.util.Decimal64;
30 import org.opendaylight.controller.yang.model.util.ExtendedType;
31 import org.opendaylight.controller.yang.model.util.Int16;
32 import org.opendaylight.controller.yang.model.util.Int32;
33 import org.opendaylight.controller.yang.model.util.StringType;
34 import org.opendaylight.controller.yang.model.util.UnionType;
36 public class YangModelParserTest {
38 private static final String TEST_FILE1 = "src/test/resources/model/testfile1.yang";
39 private static final String TEST_FILE2 = "src/test/resources/model/testfile2.yang";
40 private YangModelParser tested;
44 tested = new YangModelParserImpl();
48 public void testAugment() {
49 Set<Module> modules = tested.parseYangModels(TEST_FILE1, TEST_FILE2);
50 assertEquals(2, modules.size());
52 Module testModule = findModule(modules, "types2");
53 assertNotNull(testModule);
55 AugmentationSchema augment = testModule.getAugmentations().iterator().next();
56 assertNotNull(augment);
60 public void testAugmentTarget() {
61 Set<Module> modules = tested.parseYangModels(TEST_FILE1, TEST_FILE2);
62 assertEquals(2, modules.size());
64 Module testModule = findModule(modules, "types1");
65 assertNotNull(testModule);
67 ContainerSchemaNode container = (ContainerSchemaNode)testModule.getDataChildByName("interfaces");
68 assertNotNull(container);
70 ListSchemaNode list = (ListSchemaNode)container.getDataChildByName("ifEntry");
72 assertEquals(1, list.getAvailableAugmentations().size());
74 LeafSchemaNode leaf = (LeafSchemaNode)list.getDataChildByName("ds0ChannelNumber");
79 public void testTypedefRangesResolving() {
80 Set<Module> modules = tested.parseYangModels(TEST_FILE1, TEST_FILE2);
81 assertEquals(2, modules.size());
83 Module testModule = findModule(modules, "types1");
84 assertNotNull(testModule);
86 LeafSchemaNode testleaf = (LeafSchemaNode)testModule.getDataChildByName("testleaf");
87 ExtendedType leafType = (ExtendedType)testleaf.getType();
88 assertEquals("my-type1", leafType.getQName().getLocalName());
89 assertEquals("t2", leafType.getQName().getPrefix());
90 ExtendedType baseType = (ExtendedType)leafType.getBaseType();
91 assertEquals("my-base-int32-type", baseType.getQName().getLocalName());
92 assertEquals("t2", baseType.getQName().getPrefix());
94 List<RangeConstraint> ranges = leafType.getRanges();
95 assertEquals(1, ranges.size());
96 RangeConstraint range = ranges.get(0);
97 assertEquals(11L, range.getMin());
98 assertEquals(20L, range.getMax());
102 public void testTypedefPatternsResolving() {
103 Set<Module> modules = tested.parseYangModels(TEST_FILE1, TEST_FILE2);
104 assertEquals(2, modules.size());
106 Module testModule = findModule(modules, "types1");
107 assertNotNull(testModule);
109 LeafSchemaNode testleaf = (LeafSchemaNode)testModule.getDataChildByName("test-string-leaf");
110 ExtendedType testleafType = (ExtendedType)testleaf.getType();
111 QName testleafTypeQName = testleafType.getQName();
112 assertEquals("my-string-type-ext", testleafTypeQName.getLocalName());
113 assertEquals("t2", testleafTypeQName.getPrefix());
115 Set<String> expectedRegex = new HashSet<String>();
116 expectedRegex.add("[a-k]*");
117 expectedRegex.add("[b-u]*");
118 expectedRegex.add("[e-z]*");
120 Set<String> actualRegex = new HashSet<String>();
121 List<PatternConstraint> patterns = testleafType.getPatterns();
122 assertEquals(3, patterns.size());
123 for (PatternConstraint pc : patterns) {
124 actualRegex.add(pc.getRegularExpression());
126 assertEquals(expectedRegex, actualRegex);
128 TypeDefinition<?> baseType = testleafType.getBaseType();
129 assertEquals("my-string-type2", baseType.getQName().getLocalName());
131 List<LengthConstraint> lengths = testleafType.getLengths();
132 assertEquals(1, lengths.size());
134 LengthConstraint length = lengths.get(0);
135 assertEquals(5L, length.getMin());
136 assertEquals(10L, length.getMax());
140 public void testTypedefLengthsResolving() {
141 Set<Module> modules = tested.parseYangModels(TEST_FILE1, TEST_FILE2);
142 assertEquals(2, modules.size());
144 Module testModule = findModule(modules, "types1");
145 assertNotNull(testModule);
147 LeafSchemaNode testleaf = (LeafSchemaNode)testModule.getDataChildByName("leaf-with-length");
148 ExtendedType testleafType = (ExtendedType)testleaf.getType();
149 assertEquals("my-string-type", testleafType.getQName().getLocalName());
151 List<LengthConstraint> lengths = testleafType.getLengths();
152 assertEquals(1, lengths.size());
154 LengthConstraint length = lengths.get(0);
155 assertEquals(7L, length.getMin());
156 assertEquals(10L, length.getMax());
160 public void testTypeDef() {
161 Set<Module> modules = tested.parseYangModels(TEST_FILE1, TEST_FILE2);
162 assertEquals(2, modules.size());
164 Module testModule = findModule(modules, "types2");
165 assertNotNull(testModule);
167 LeafSchemaNode testleaf = (LeafSchemaNode)testModule.getDataChildByName("nested-type-leaf");
168 ExtendedType testleafType = (ExtendedType)testleaf.getType();
169 assertEquals("my-type1", testleafType.getQName().getLocalName());
171 ExtendedType baseType = (ExtendedType)testleafType.getBaseType();
172 assertEquals("my-base-int32-type", baseType.getQName().getLocalName());
174 Int32 int32base = (Int32)baseType.getBaseType();
175 List<RangeConstraint> ranges = int32base.getRangeStatements();
176 assertEquals(1, ranges.size());
177 RangeConstraint range = ranges.get(0);
178 assertEquals(2L, range.getMin());
179 assertEquals(20L, range.getMax());
183 public void testTypedefDecimal1() {
184 Set<Module> modules = tested.parseYangModels(TEST_FILE1, TEST_FILE2);
185 assertEquals(2, modules.size());
187 Module testModule = findModule(modules, "types1");
188 assertNotNull(testModule);
190 LeafSchemaNode testleaf = (LeafSchemaNode)testModule.getDataChildByName("test-decimal-leaf");
191 ExtendedType type = (ExtendedType)testleaf.getType();
193 TypeDefinition<?> baseType = type.getBaseType();
194 assertTrue(baseType instanceof Decimal64);
195 Decimal64 baseTypeCast = (Decimal64)baseType;
196 assertEquals(6, (int)baseTypeCast.getFractionDigits());
200 public void testTypedefDecimal2() {
201 Set<Module> modules = tested.parseYangModels(TEST_FILE1, TEST_FILE2);
202 assertEquals(2, modules.size());
204 Module testModule = findModule(modules, "types1");
205 assertNotNull(testModule);
207 LeafSchemaNode testleaf = (LeafSchemaNode)testModule.getDataChildByName("test-decimal-leaf2");
208 TypeDefinition<?> baseType = testleaf.getType().getBaseType();
209 assertTrue(testleaf.getType().getBaseType() instanceof Decimal64);
210 Decimal64 baseTypeCast = (Decimal64)baseType;
211 assertEquals(5, (int)baseTypeCast.getFractionDigits());
215 public void testTypedefUnion() {
216 Set<Module> modules = tested.parseYangModels(TEST_FILE1, TEST_FILE2);
217 assertEquals(2, modules.size());
219 Module testModule = findModule(modules, "types1");
220 assertNotNull(testModule);
222 LeafSchemaNode testleaf = (LeafSchemaNode)testModule.getDataChildByName("union-leaf");
223 ExtendedType testleafType = (ExtendedType)testleaf.getType();
224 assertEquals("my-union-ext", testleafType.getQName().getLocalName());
226 ExtendedType baseType = (ExtendedType)testleafType.getBaseType();
227 assertEquals("my-union", baseType.getQName().getLocalName());
229 UnionType unionBase = (UnionType) baseType.getBaseType();
231 List<TypeDefinition<?>> unionTypes = unionBase.getTypes();
232 Int16 unionType1 = (Int16)unionTypes.get(0);
233 List<RangeConstraint> ranges = unionType1.getRangeStatements();
234 assertEquals(1, ranges.size());
235 RangeConstraint range = ranges.get(0);
236 assertEquals(1L, range.getMin());
237 assertEquals(100L, range.getMax());
239 assertTrue(unionTypes.get(0) instanceof Int16);
240 assertTrue(unionTypes.get(1) instanceof Int32);
244 public void testNestedUnionResolving() {
245 Set<Module> modules = tested.parseYangModels(TEST_FILE1, TEST_FILE2);
246 assertEquals(2, modules.size());
248 Module testModule = findModule(modules, "types1");
249 assertNotNull(testModule);
251 LeafSchemaNode testleaf = (LeafSchemaNode)testModule.getDataChildByName("nested-union-leaf");
253 ExtendedType nestedUnion1 = (ExtendedType)testleaf.getType();
254 assertEquals("nested-union1", nestedUnion1.getQName().getLocalName());
256 ExtendedType nestedUnion2 = (ExtendedType)nestedUnion1.getBaseType();
257 assertEquals("nested-union2", nestedUnion2.getQName().getLocalName());
259 UnionType unionType1 = (UnionType)nestedUnion2.getBaseType();
260 List<TypeDefinition<?>> unionTypes = unionType1.getTypes();
261 assertEquals(2, unionTypes.size());
262 assertTrue(unionTypes.get(0) instanceof StringType);
263 assertTrue(unionTypes.get(1) instanceof ExtendedType);
265 ExtendedType extendedUnion = (ExtendedType)unionTypes.get(1);
266 ExtendedType extendedUnionBase = (ExtendedType)extendedUnion.getBaseType();
267 assertEquals("my-union", extendedUnionBase.getQName().getLocalName());
269 UnionType extendedTargetUnion = (UnionType)extendedUnionBase.getBaseType();
270 List<TypeDefinition<?>> extendedTargetTypes = extendedTargetUnion.getTypes();
271 assertTrue(extendedTargetTypes.get(0) instanceof Int16);
272 assertTrue(extendedTargetTypes.get(1) instanceof Int32);
274 Int16 int16 = (Int16) extendedTargetTypes.get(0);
275 List<RangeConstraint> ranges = int16.getRangeStatements();
276 assertEquals(1, ranges.size());
277 RangeConstraint range = ranges.get(0);
278 assertEquals(1L, range.getMin());
279 assertEquals(100L, range.getMax());
282 private Module findModule(Set<Module> modules, String moduleName) {
283 Module result = null;
284 for(Module module : modules) {
285 if(module.getName().equals(moduleName)) {