Refactored YANG types resolving.
[controller.git] / opendaylight / sal / yang-prototype / code-generator / binding-generator-impl / src / test / java / org / opendaylight / controller / sal / binding / yang / types / test / GeneratedTypesTest.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.sal.binding.yang.types.test;\r
9 \r
10 import static org.junit.Assert.*;\r
11 \r
12 import java.util.List;\r
13 import java.util.Set;\r
14 \r
15 import org.junit.Ignore;\r
16 import org.junit.Test;\r
17 import org.opendaylight.controller.sal.binding.generator.api.BindingGenerator;\r
18 import org.opendaylight.controller.sal.binding.generator.impl.BindingGeneratorImpl;\r
19 import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty;\r
20 import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject;\r
21 import org.opendaylight.controller.sal.binding.model.api.GeneratedType;\r
22 import org.opendaylight.controller.sal.binding.model.api.MethodSignature;\r
23 import org.opendaylight.controller.sal.binding.model.api.Type;\r
24 import org.opendaylight.controller.yang.model.api.Module;\r
25 import org.opendaylight.controller.yang.model.api.SchemaContext;\r
26 import org.opendaylight.controller.yang.model.parser.api.YangModelParser;\r
27 import org.opendaylight.controller.yang.model.parser.impl.YangModelParserImpl;\r
28 \r
29 public class GeneratedTypesTest {\r
30 \r
31     private SchemaContext resolveSchemaContextFromFiles(\r
32             final String... yangFiles) {\r
33         final YangModelParser parser = new YangModelParserImpl();\r
34         final Set<Module> modules = parser.parseYangModels(yangFiles);\r
35 \r
36         return parser.resolveSchemaContext(modules);\r
37     }\r
38 \r
39     @Test\r
40     public void testMultipleModulesResolving() {\r
41         final String topologyPath = getClass().getResource(\r
42                 "/abstract-topology.yang").getPath();\r
43         final String typesPath = getClass().getResource(\r
44                 "/ietf-inet-types@2010-09-24.yang").getPath();\r
45         final SchemaContext context = resolveSchemaContextFromFiles(\r
46                 topologyPath, typesPath);\r
47         assertTrue(context != null);\r
48 \r
49         final BindingGenerator bindingGen = new BindingGeneratorImpl();\r
50         final List<Type> genTypes = bindingGen.generateTypes(context);\r
51 \r
52         assertTrue(genTypes != null);\r
53         assertEquals(11, genTypes.size());\r
54     }\r
55 \r
56     @Ignore\r
57     @Test\r
58     public void testLeafrefResolving() {\r
59         final String topologyPath = getClass().getResource(\r
60                 "/leafref-test-models/abstract-topology@2013-02-08.yang")\r
61                 .getPath();\r
62         final String interfacesPath = getClass().getResource(\r
63                 "/leafref-test-models/ietf-interfaces@2012-11-15.yang")\r
64                 .getPath();\r
65 //        final String ifTypePath = getClass().getResource(\r
66 //                "/leafref-test-models/iana-if-type@2012-06-05.yang").getPath();\r
67         final String inetTypesPath = getClass().getResource(\r
68                 "/leafref-test-models/ietf-inet-types@2010-09-24.yang")\r
69                 .getPath();\r
70         final String yangTypesPath = getClass().getResource(\r
71                 "/leafref-test-models/ietf-yang-types@2010-09-24.yang")\r
72                 .getPath();\r
73 \r
74         assertTrue(topologyPath != null);\r
75         assertTrue(interfacesPath != null);\r
76 //        assertTrue(ifTypePath != null);\r
77         assertTrue(inetTypesPath != null);\r
78         assertTrue(yangTypesPath != null);\r
79 \r
80 //        final SchemaContext context = resolveSchemaContextFromFiles(\r
81 //                topologyPath, interfacesPath, ifTypePath, inetTypesPath, yangTypesPath);\r
82         final SchemaContext context = resolveSchemaContextFromFiles(\r
83                 topologyPath, interfacesPath, inetTypesPath, yangTypesPath);\r
84         assertTrue(context != null);\r
85         assertEquals(4, context.getModules().size());\r
86 \r
87         final BindingGenerator bindingGen = new BindingGeneratorImpl();\r
88         final List<Type> genTypes = bindingGen.generateTypes(context);\r
89 \r
90         assertEquals(21, genTypes.size());\r
91         assertTrue(genTypes != null);\r
92 \r
93         for (final Type genType : genTypes) {\r
94             if (genType.getName().equals("Interface") && genType instanceof GeneratedType) {\r
95 //                System.out.println(((GeneratedType)genType).getMethodDefinitions().toString());\r
96             } else if (genType.getName().equals("NetworkLink") && genType instanceof GeneratedType) {\r
97 //                System.out.println(((GeneratedType)genType).getMethodDefinitions().toString());\r
98             }\r
99         }\r
100     }\r
101 \r
102     @Test\r
103     public void testContainerResolving() {\r
104         final String filePath = getClass().getResource(\r
105                 "/simple-container-demo.yang").getPath();\r
106         final SchemaContext context = resolveSchemaContextFromFiles(filePath);\r
107         assertTrue(context != null);\r
108 \r
109         final BindingGenerator bindingGen = new BindingGeneratorImpl();\r
110         final List<Type> genTypes = bindingGen.generateTypes(context);\r
111 \r
112         assertTrue(genTypes != null);\r
113         assertEquals(2, genTypes.size());\r
114 \r
115         final GeneratedType simpleContainer = (GeneratedType) genTypes.get(0);\r
116         final GeneratedType nestedContainer = (GeneratedType) genTypes.get(1);\r
117 \r
118         assertEquals("SimpleContainer", simpleContainer.getName());\r
119         assertEquals("NestedContainer", nestedContainer.getName());\r
120         assertEquals(4, simpleContainer.getMethodDefinitions().size());\r
121         assertEquals(4, nestedContainer.getMethodDefinitions().size());\r
122 \r
123         int methodsCount = 0;\r
124         for (final MethodSignature method : simpleContainer\r
125                 .getMethodDefinitions()) {\r
126             if (method.getName().equals("getFoo")) {\r
127                 method.getReturnType().getName().equals("Integer");\r
128                 methodsCount++;\r
129             }\r
130 \r
131             if (method.getName().equals("setFoo")) {\r
132                 methodsCount++;\r
133                 final MethodSignature.Parameter param = method.getParameters()\r
134                         .get(0);\r
135                 assertEquals("foo", param.getName());\r
136                 assertEquals("Integer", param.getType().getName());\r
137             }\r
138 \r
139             if (method.getName().equals("getBar")) {\r
140                 method.getReturnType().getName().equals("String");\r
141                 methodsCount++;\r
142             }\r
143 \r
144             if (method.getName().equals("getNestedContainer")) {\r
145                 method.getReturnType().getName().equals("NestedContainer");\r
146                 methodsCount++;\r
147             }\r
148         }\r
149         assertEquals(4, methodsCount);\r
150 \r
151         methodsCount = 0;\r
152         for (final MethodSignature method : nestedContainer\r
153                 .getMethodDefinitions()) {\r
154             if (method.getName().equals("getFoo")) {\r
155                 method.getReturnType().getName().equals("Short");\r
156                 methodsCount++;\r
157             }\r
158 \r
159             if (method.getName().equals("setFoo")) {\r
160                 methodsCount++;\r
161                 final MethodSignature.Parameter param = method.getParameters()\r
162                         .get(0);\r
163                 assertEquals("foo", param.getName());\r
164                 assertEquals("Short", param.getType().getName());\r
165             }\r
166 \r
167             if (method.getName().equals("getBar")) {\r
168                 method.getReturnType().getName().equals("String");\r
169                 methodsCount++;\r
170             }\r
171 \r
172             if (method.getName().equals("setBar")) {\r
173                 method.getReturnType().getName().equals("String");\r
174                 methodsCount++;\r
175             }\r
176         }\r
177         assertEquals(4, methodsCount);\r
178     }\r
179 \r
180     @Test\r
181     public void testLeafListResolving() {\r
182         final String filePath = getClass().getResource(\r
183                 "/simple-leaf-list-demo.yang").getPath();\r
184         final SchemaContext context = resolveSchemaContextFromFiles(filePath);\r
185         assertTrue(context != null);\r
186 \r
187         final BindingGenerator bindingGen = new BindingGeneratorImpl();\r
188         final List<Type> genTypes = bindingGen.generateTypes(context);\r
189 \r
190         assertTrue(genTypes != null);\r
191         assertEquals(2, genTypes.size());\r
192 \r
193         final GeneratedType simpleContainer = (GeneratedType) genTypes.get(0);\r
194         final GeneratedType nestedContainer = (GeneratedType) genTypes.get(1);\r
195 \r
196         assertEquals("SimpleContainer", simpleContainer.getName());\r
197         assertEquals("NestedContainer", nestedContainer.getName());\r
198         assertEquals(4, simpleContainer.getMethodDefinitions().size());\r
199         assertEquals(3, nestedContainer.getMethodDefinitions().size());\r
200 \r
201         int methodsCount = 0;\r
202         for (final MethodSignature method : simpleContainer\r
203                 .getMethodDefinitions()) {\r
204             if (method.getName().equals("getFoo")) {\r
205                 method.getReturnType().getName().equals("List");\r
206                 methodsCount++;\r
207             }\r
208 \r
209             if (method.getName().equals("setFoo")) {\r
210                 methodsCount++;\r
211                 final MethodSignature.Parameter param = method.getParameters()\r
212                         .get(0);\r
213                 assertEquals("foo", param.getName());\r
214                 assertEquals("List", param.getType().getName());\r
215             }\r
216 \r
217             if (method.getName().equals("getBar")) {\r
218                 method.getReturnType().getName().equals("String");\r
219                 methodsCount++;\r
220             }\r
221 \r
222             if (method.getName().equals("getNestedContainer")) {\r
223                 method.getReturnType().getName().equals("NestedContainer");\r
224                 methodsCount++;\r
225             }\r
226         }\r
227         assertEquals(4, methodsCount);\r
228 \r
229         methodsCount = 0;\r
230         for (final MethodSignature method : nestedContainer\r
231                 .getMethodDefinitions()) {\r
232             if (method.getName().equals("getFoo")) {\r
233                 method.getReturnType().getName().equals("Short");\r
234                 methodsCount++;\r
235             }\r
236 \r
237             if (method.getName().equals("setFoo")) {\r
238                 methodsCount++;\r
239                 final MethodSignature.Parameter param = method.getParameters()\r
240                         .get(0);\r
241                 assertEquals("foo", param.getName());\r
242                 assertEquals("Short", param.getType().getName());\r
243             }\r
244 \r
245             if (method.getName().equals("getBar")) {\r
246                 method.getReturnType().getName().equals("List");\r
247                 methodsCount++;\r
248             }\r
249         }\r
250         assertEquals(3, methodsCount);\r
251     }\r
252 \r
253     @Test\r
254     public void testListResolving() {\r
255         final String filePath = getClass()\r
256                 .getResource("/simple-list-demo.yang").getPath();\r
257         final SchemaContext context = resolveSchemaContextFromFiles(filePath);\r
258         assertTrue(context != null);\r
259 \r
260         final BindingGenerator bindingGen = new BindingGeneratorImpl();\r
261         final List<Type> genTypes = bindingGen.generateTypes(context);\r
262 \r
263         assertTrue(genTypes != null);\r
264         assertEquals(4, genTypes.size());\r
265 \r
266         int genTypesCount = 0;\r
267         int genTOsCount = 0;\r
268         for (final Type type : genTypes) {\r
269             if (type instanceof GeneratedType) {\r
270                 final GeneratedType genType = (GeneratedType) type;\r
271                 if (genType.getName().equals("ListParentContainer")) {\r
272                     assertEquals(2, genType.getMethodDefinitions().size());\r
273                     genTypesCount++;\r
274                 } else if (genType.getName().equals("SimpleList")) {\r
275                     assertEquals(7, genType.getMethodDefinitions().size());\r
276                     final List<MethodSignature> methods = genType\r
277                             .getMethodDefinitions();\r
278                     int methodsCount = 0;\r
279                     for (final MethodSignature method : methods) {\r
280                         if (method.getName().equals("getSimpleListKey")) {\r
281                             assertEquals("SimpleListKey", method\r
282                                     .getReturnType().getName());\r
283                             methodsCount++;\r
284                         } else if (method.getName().equals(\r
285                                 "getListChildContainer")) {\r
286                             assertEquals("ListChildContainer", method\r
287                                     .getReturnType().getName());\r
288                             methodsCount++;\r
289                         } else if (method.getName().equals("getFoo")) {\r
290                             methodsCount++;\r
291                         } else if (method.getName().equals("setFoo")) {\r
292                             methodsCount++;\r
293                         } else if (method.getName().equals("getSimpleLeafList")) {\r
294                             methodsCount++;\r
295                         } else if (method.getName().equals("setSimpleLeafList")) {\r
296                             methodsCount++;\r
297                         } else if (method.getName().equals("getBar")) {\r
298                             methodsCount++;\r
299                         }\r
300                     }\r
301                     assertEquals(7, methodsCount);\r
302                     genTypesCount++;\r
303                 } else if (genType.getName().equals("ListChildContainer")) {\r
304                     assertEquals(2, genType.getMethodDefinitions().size());\r
305                     genTypesCount++;\r
306                 }\r
307             } else if (type instanceof GeneratedTransferObject) {\r
308                 genTOsCount++;\r
309                 final GeneratedTransferObject genTO = (GeneratedTransferObject) type;\r
310                 final List<GeneratedProperty> properties = genTO\r
311                         .getProperties();\r
312                 final List<GeneratedProperty> hashProps = genTO\r
313                         .getHashCodeIdentifiers();\r
314                 final List<GeneratedProperty> equalProps = genTO\r
315                         .getEqualsIdentifiers();\r
316 \r
317                 assertEquals(1, properties.size());\r
318                 assertEquals("ListKey", properties.get(0).getName());\r
319                 assertEquals("Byte", properties.get(0).getReturnType()\r
320                         .getName());\r
321                 assertEquals(true, properties.get(0).isReadOnly());\r
322                 assertEquals(1, hashProps.size());\r
323                 assertEquals("ListKey", hashProps.get(0).getName());\r
324                 assertEquals("Byte", hashProps.get(0).getReturnType().getName());\r
325                 assertEquals(1, equalProps.size());\r
326                 assertEquals("ListKey", equalProps.get(0).getName());\r
327                 assertEquals("Byte", equalProps.get(0).getReturnType()\r
328                         .getName());\r
329             }\r
330         }\r
331         assertEquals(3, genTypesCount);\r
332         assertEquals(1, genTOsCount);\r
333     }\r
334 \r
335     @Test\r
336     public void testListCompositeKeyResolving() {\r
337         final String filePath = getClass().getResource(\r
338                 "/list-composite-key.yang").getPath();\r
339         final SchemaContext context = resolveSchemaContextFromFiles(filePath);\r
340 \r
341         assertTrue(context != null);\r
342 \r
343         final BindingGenerator bindingGen = new BindingGeneratorImpl();\r
344         final List<Type> genTypes = bindingGen.generateTypes(context);\r
345 \r
346         assertTrue(genTypes != null);\r
347         assertEquals(6, genTypes.size());\r
348 \r
349         int genTypesCount = 0;\r
350         int genTOsCount = 0;\r
351         for (final Type type : genTypes) {\r
352             if (type instanceof GeneratedType) {\r
353                 genTypesCount++;\r
354             } else if (type instanceof GeneratedTransferObject) {\r
355                 final GeneratedTransferObject genTO = (GeneratedTransferObject) type;\r
356 \r
357                 if (genTO.getName().equals("CompositeKeyListKey")) {\r
358                     final List<GeneratedProperty> properties = genTO\r
359                             .getProperties();\r
360                     int propertyCount = 0;\r
361                     for (final GeneratedProperty prop : properties) {\r
362                         if (prop.getName().equals("Key1")) {\r
363                             propertyCount++;\r
364                         } else if (prop.getName().equals("Key2")) {\r
365                             propertyCount++;\r
366                         }\r
367                     }\r
368                     assertEquals(2, propertyCount);\r
369                     genTOsCount++;\r
370                 } else if (genTO.getName().equals("InnerListKey")) {\r
371                     final List<GeneratedProperty> properties = genTO\r
372                             .getProperties();\r
373                     assertEquals(1, properties.size());\r
374                     genTOsCount++;\r
375                 }\r
376             }\r
377         }\r
378 \r
379         assertEquals(4, genTypesCount);\r
380         assertEquals(2, genTOsCount);\r
381     }\r
382 \r
383     @Test\r
384     public void testGeneratedTypes() {\r
385         final String filePath = getClass().getResource("/demo-topology.yang")\r
386                 .getPath();\r
387         final SchemaContext context = resolveSchemaContextFromFiles(filePath);\r
388         assertTrue(context != null);\r
389 \r
390         final BindingGenerator bindingGen = new BindingGeneratorImpl();\r
391         final List<Type> genTypes = bindingGen.generateTypes(context);\r
392 \r
393         assertTrue(genTypes != null);\r
394         assertEquals(13, genTypes.size());\r
395 \r
396         int genTypesCount = 0;\r
397         int genTOsCount = 0;\r
398         for (final Type type : genTypes) {\r
399             if (type instanceof GeneratedType) {\r
400                 genTypesCount++;\r
401             } else if (type instanceof GeneratedTransferObject) {\r
402                 genTOsCount++;\r
403             }\r
404         }\r
405 \r
406         assertEquals(10, genTypesCount);\r
407         assertEquals(3, genTOsCount);\r
408     }\r
409 }\r