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