Update the API generation code and code generation sample
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / test / java / org / opendaylight / controller / yang / model / parser / impl / YangModelParserTest.java
1 /*\r
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 package org.opendaylight.controller.yang.model.parser.impl;\r
9 \r
10 import static org.junit.Assert.*;\r
11 \r
12 import java.util.HashSet;\r
13 import java.util.List;\r
14 import java.util.Set;\r
15 \r
16 import org.junit.Before;\r
17 import org.junit.Test;\r
18 import org.opendaylight.controller.yang.model.api.AugmentationSchema;\r
19 import org.opendaylight.controller.yang.model.api.ContainerSchemaNode;\r
20 import org.opendaylight.controller.yang.model.api.LeafSchemaNode;\r
21 import org.opendaylight.controller.yang.model.api.ListSchemaNode;\r
22 import org.opendaylight.controller.yang.model.api.Module;\r
23 import org.opendaylight.controller.yang.model.api.TypeDefinition;\r
24 import org.opendaylight.controller.yang.model.api.type.IntegerTypeDefinition;\r
25 import org.opendaylight.controller.yang.model.api.type.PatternConstraint;\r
26 import org.opendaylight.controller.yang.model.api.type.RangeConstraint;\r
27 import org.opendaylight.controller.yang.model.parser.api.YangModelParser;\r
28 import org.opendaylight.controller.yang.model.util.Decimal64;\r
29 import org.opendaylight.controller.yang.model.util.Int32;\r
30 import org.opendaylight.controller.yang.model.util.StringType;\r
31 \r
32 public class YangModelParserTest {\r
33 \r
34     private final String testFile1 = "src/test/resources/model/testfile1.yang";\r
35     private final String testFile2 = "src/test/resources/model/testfile2.yang";\r
36     private YangModelParser tested;\r
37 \r
38     @Before\r
39     public void init() {\r
40         tested = new YangModelParserImpl();\r
41     }\r
42 \r
43     @Test\r
44     public void testAugment() {\r
45         Set<Module> modules = tested.parseYangModels(testFile1, testFile2);\r
46         assertEquals(2, modules.size());\r
47 \r
48         Module m2 = null;\r
49         for(Module m : modules) {\r
50             if(m.getName().equals("types2")) {\r
51                 m2 = m;\r
52             }\r
53         }\r
54         assertNotNull(m2);\r
55 \r
56         AugmentationSchema augment = m2.getAugmentations().iterator().next();\r
57         assertNotNull(augment);\r
58     }\r
59 \r
60     @Test\r
61     public void testAugmentTarget() {\r
62         Set<Module> modules = tested.parseYangModels(testFile1, testFile2);\r
63         assertEquals(2, modules.size());\r
64 \r
65         Module m1 = null;\r
66         for(Module m : modules) {\r
67             if(m.getName().equals("types1")) {\r
68                 m1 = m;\r
69             }\r
70         }\r
71         assertNotNull(m1);\r
72 \r
73         ContainerSchemaNode container = (ContainerSchemaNode)m1.getDataChildByName("interfaces");\r
74         assertNotNull(container);\r
75 \r
76         ListSchemaNode list = (ListSchemaNode)container.getDataChildByName("ifEntry");\r
77         assertNotNull(list);\r
78         assertEquals(1, list.getAvailableAugmentations().size());\r
79 \r
80         LeafSchemaNode leaf = (LeafSchemaNode)list.getDataChildByName("ds0ChannelNumber");\r
81         assertNotNull(leaf);\r
82     }\r
83 \r
84     @Test\r
85     public void testTypedefRangesResolving() {\r
86         Set<Module> modules = tested.parseYangModels(testFile1, testFile2);\r
87         assertEquals(2, modules.size());\r
88 \r
89         Module m1 = null;\r
90         for(Module m : modules) {\r
91             if(m.getName().equals("types1")) {\r
92                 m1 = m;\r
93             }\r
94         }\r
95         assertNotNull(m1);\r
96 \r
97         LeafSchemaNode testleaf = (LeafSchemaNode)m1.getDataChildByName("testleaf");\r
98         TypeDefinition<?> baseType = testleaf.getType().getBaseType();\r
99         assertTrue(testleaf.getType().getBaseType() instanceof Int32);\r
100         Int32 baseTypeCast = (Int32)baseType;\r
101         List<RangeConstraint> ranges = baseTypeCast.getRangeStatements();\r
102         assertEquals(2, ranges.size());\r
103         RangeConstraint range = ranges.get(0);\r
104         assertEquals(2L, range.getMin());\r
105         assertEquals(20L, range.getMax());\r
106     }\r
107 \r
108     @Test\r
109     public void testTypedefPatternsResolving() {\r
110         Set<Module> modules = tested.parseYangModels(testFile1, testFile2);\r
111         assertEquals(2, modules.size());\r
112 \r
113         Module m1 = null;\r
114         for(Module m : modules) {\r
115             if(m.getName().equals("types1")) {\r
116                 m1 = m;\r
117             }\r
118         }\r
119         assertNotNull(m1);\r
120 \r
121         LeafSchemaNode testleaf = (LeafSchemaNode)m1.getDataChildByName("test-string-leaf");\r
122         TypeDefinition<?> baseType = testleaf.getType().getBaseType();\r
123         assertTrue(testleaf.getType().getBaseType() instanceof StringType);\r
124         StringType baseTypeCast = (StringType)baseType;\r
125 \r
126         Set<String> expectedRegularExpressions = new HashSet<String>();\r
127         expectedRegularExpressions.add("[a-k]*");\r
128         expectedRegularExpressions.add("[b-u]*");\r
129         expectedRegularExpressions.add("[e-z]*");\r
130 \r
131         Set<String> actualRegularExpressions = new HashSet<String>();\r
132         List<PatternConstraint> patterns = baseTypeCast.getPatterns();\r
133         for(PatternConstraint pc : patterns) {\r
134             actualRegularExpressions.add(pc.getRegularExpression());\r
135         }\r
136 \r
137         assertEquals(expectedRegularExpressions, actualRegularExpressions);\r
138     }\r
139 \r
140     @Test\r
141     public void testTypedefLengthsResolving() {\r
142         Set<Module> modules = tested.parseYangModels(testFile1, testFile2);\r
143         assertEquals(2, modules.size());\r
144 \r
145         Module m1 = null;\r
146         for(Module m : modules) {\r
147             if(m.getName().equals("types1")) {\r
148                 m1 = m;\r
149             }\r
150         }\r
151         assertNotNull(m1);\r
152 \r
153         LeafSchemaNode testleaf = (LeafSchemaNode)m1.getDataChildByName("test-int-leaf");\r
154         TypeDefinition<?> baseType = testleaf.getType().getBaseType();\r
155         assertTrue(testleaf.getType().getBaseType() instanceof IntegerTypeDefinition);\r
156         Int32 baseTypeCast = (Int32)baseType;\r
157 \r
158         Long[][] expectedRanges = new Long[3][2];\r
159         expectedRanges[0] = new Long[]{10L, 20L};\r
160         expectedRanges[1] = new Long[]{12L, 18L};\r
161         expectedRanges[2] = new Long[]{14L, 16L};\r
162 \r
163         List<RangeConstraint> actualRanges = baseTypeCast.getRangeStatements();\r
164         assertEquals(3, actualRanges.size());\r
165         for(int i = 0; i < actualRanges.size(); i++) {\r
166             assertEquals(expectedRanges[i][0], actualRanges.get(i).getMin());\r
167             assertEquals(expectedRanges[i][1], actualRanges.get(i).getMax());\r
168         }\r
169     }\r
170 \r
171     @Test\r
172     public void testTypeDef() {\r
173         Set<Module> modules = tested.parseYangModels(testFile1, testFile2);\r
174         assertEquals(2, modules.size());\r
175 \r
176         Module m2 = null;\r
177         for(Module m : modules) {\r
178             if(m.getName().equals("types2")) {\r
179                 m2 = m;\r
180             }\r
181         }\r
182         assertNotNull(m2);\r
183 \r
184         LeafSchemaNode testleaf = (LeafSchemaNode)m2.getDataChildByName("nested-type-leaf");\r
185         TypeDefinition<?> baseType = testleaf.getType().getBaseType();\r
186         assertTrue(testleaf.getType().getBaseType() instanceof Int32);\r
187         Int32 baseTypeCast = (Int32)baseType;\r
188         List<RangeConstraint> ranges = baseTypeCast.getRangeStatements();\r
189         assertEquals(2, ranges.size());\r
190         RangeConstraint range = ranges.get(0);\r
191         assertEquals(2L, range.getMin());\r
192         assertEquals(20L, range.getMax());\r
193     }\r
194 \r
195     @Test\r
196     public void testTypedefDecimal1() {\r
197         Set<Module> modules = tested.parseYangModels(testFile1, testFile2);\r
198         assertEquals(2, modules.size());\r
199 \r
200         Module m1 = null;\r
201         for(Module m : modules) {\r
202             if(m.getName().equals("types1")) {\r
203                 m1 = m;\r
204             }\r
205         }\r
206         assertNotNull(m1);\r
207 \r
208         LeafSchemaNode testleaf = (LeafSchemaNode)m1.getDataChildByName("test-decimal-leaf");\r
209         TypeDefinition<?> baseType = testleaf.getType().getBaseType();\r
210         assertTrue(testleaf.getType().getBaseType() instanceof Decimal64);\r
211         Decimal64 baseTypeCast = (Decimal64)baseType;\r
212         assertEquals(4, (int)baseTypeCast.getFractionDigits());\r
213     }\r
214 \r
215     @Test\r
216     public void testTypedefDecimal2() {\r
217         Set<Module> modules = tested.parseYangModels(testFile1, testFile2);\r
218         assertEquals(2, modules.size());\r
219 \r
220         Module m1 = null;\r
221         for(Module m : modules) {\r
222             if(m.getName().equals("types1")) {\r
223                 m1 = m;\r
224             }\r
225         }\r
226         assertNotNull(m1);\r
227 \r
228         LeafSchemaNode testleaf = (LeafSchemaNode)m1.getDataChildByName("test-decimal-leaf2");\r
229         TypeDefinition<?> baseType = testleaf.getType().getBaseType();\r
230         assertTrue(testleaf.getType().getBaseType() instanceof Decimal64);\r
231         Decimal64 baseTypeCast = (Decimal64)baseType;\r
232         assertEquals(5, (int)baseTypeCast.getFractionDigits());\r
233     }\r
234 \r
235 }\r