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.sal.binding.yang.types.test;
10 import static org.junit.Assert.*;
12 import java.util.List;
15 import org.junit.Ignore;
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.Enumeration;
20 import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty;
21 import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject;
22 import org.opendaylight.controller.sal.binding.model.api.GeneratedType;
23 import org.opendaylight.controller.sal.binding.model.api.MethodSignature;
24 import org.opendaylight.controller.sal.binding.model.api.Type;
25 import org.opendaylight.controller.yang.model.api.Module;
26 import org.opendaylight.controller.yang.model.api.SchemaContext;
27 import org.opendaylight.controller.yang.model.parser.api.YangModelParser;
28 import org.opendaylight.controller.yang.model.parser.impl.YangModelParserImpl;
30 public class GeneratedTypesTest {
32 private SchemaContext resolveSchemaContextFromFiles(
33 final String... yangFiles) {
34 final YangModelParser parser = new YangModelParserImpl();
35 final Set<Module> modules = parser.parseYangModels(yangFiles);
37 return parser.resolveSchemaContext(modules);
41 public void testLeafEnumResolving() {
42 final String ietfInterfacesPath = getClass().getResource(
43 "/enum-test-models/ietf-interfaces@2012-11-15.yang").getPath();
44 final String ifTypePath = getClass().getResource(
45 "/enum-test-models/iana-if-type@2012-06-05.yang").getPath();
46 final String yangTypesPath = getClass().getResource(
47 "/enum-test-models/ietf-yang-types@2010-09-24.yang").getPath();
49 final SchemaContext context = resolveSchemaContextFromFiles(
50 ietfInterfacesPath, ifTypePath, yangTypesPath);
51 assertTrue(context != null);
53 final BindingGenerator bindingGen = new BindingGeneratorImpl();
54 final List<Type> genTypes = bindingGen.generateTypes(context);
55 assertTrue(genTypes != null);
59 public void testTypedefEnumResolving() {
60 final String ianaIfTypePath = getClass().getResource(
61 "/leafref-test-models/iana-if-type@2012-06-05.yang").getPath();
63 final SchemaContext context = resolveSchemaContextFromFiles(ianaIfTypePath);
64 assertTrue(context != null);
66 final BindingGenerator bindingGen = new BindingGeneratorImpl();
67 final List<Type> genTypes = bindingGen.generateTypes(context);
68 assertTrue(genTypes != null);
69 assertEquals(1, genTypes.size());
71 final Type type = genTypes.get(0);
72 assertTrue(type instanceof GeneratedType);
74 final GeneratedType genType = (GeneratedType) type;
75 assertEquals(1, genType.getEnumDefintions().size());
77 final Enumeration enumer = genType.getEnumDefintions().get(0);
78 assertEquals(272, enumer.getValues().size());
82 public void testMultipleModulesResolving() {
83 final String topologyPath = getClass().getResource(
84 "/abstract-topology.yang").getPath();
85 final String typesPath = getClass().getResource(
86 "/ietf-inet-types@2010-09-24.yang").getPath();
87 final SchemaContext context = resolveSchemaContextFromFiles(
88 topologyPath, typesPath);
89 assertTrue(context != null);
91 final BindingGenerator bindingGen = new BindingGeneratorImpl();
92 final List<Type> genTypes = bindingGen.generateTypes(context);
94 assertTrue(genTypes != null);
95 assertEquals(13, genTypes.size());
99 public void testLeafrefResolving() {
100 final String topologyPath = getClass().getResource(
101 "/leafref-test-models/abstract-topology@2013-02-08.yang")
103 final String interfacesPath = getClass().getResource(
104 "/leafref-test-models/ietf-interfaces@2012-11-15.yang")
106 // final String ifTypePath = getClass().getResource(
107 // "/leafref-test-models/iana-if-type@2012-06-05.yang").getPath();
108 final String inetTypesPath = getClass().getResource(
109 "/leafref-test-models/ietf-inet-types@2010-09-24.yang")
111 final String yangTypesPath = getClass().getResource(
112 "/leafref-test-models/ietf-yang-types@2010-09-24.yang")
115 assertTrue(topologyPath != null);
116 assertTrue(interfacesPath != null);
117 // assertTrue(ifTypePath != null);
118 assertTrue(inetTypesPath != null);
119 assertTrue(yangTypesPath != null);
121 // final SchemaContext context = resolveSchemaContextFromFiles(
122 // topologyPath, interfacesPath, ifTypePath, inetTypesPath,
124 final SchemaContext context = resolveSchemaContextFromFiles(
125 topologyPath, interfacesPath, inetTypesPath, yangTypesPath);
126 assertTrue(context != null);
127 assertEquals(4, context.getModules().size());
129 final BindingGenerator bindingGen = new BindingGeneratorImpl();
130 final List<Type> genTypes = bindingGen.generateTypes(context);
132 assertEquals(25, genTypes.size());
133 assertTrue(genTypes != null);
135 int resolvedLeafrefCount = 0;
136 for (final Type type : genTypes) {
137 if (type.getName().equals("InterfaceKey")
138 && type instanceof GeneratedTransferObject) {
139 final GeneratedTransferObject genTO = (GeneratedTransferObject) type;
140 final List<GeneratedProperty> properties = genTO
143 assertTrue(properties != null);
144 for (final GeneratedProperty property : properties) {
145 if (property.getName().equals("InterfaceId")) {
146 assertTrue(property.getReturnType() != null);
147 assertFalse(property.getReturnType().equals(
149 assertTrue(property.getReturnType().getName()
151 resolvedLeafrefCount++;
155 } else if (type.getName().equals("Interface")
156 && type instanceof GeneratedType) {
157 final GeneratedType genType = (GeneratedType) type;
158 final List<MethodSignature> methods = genType
159 .getMethodDefinitions();
161 assertTrue(methods != null);
162 for (final MethodSignature method : methods) {
163 if (method.getName().equals("getInterfaceKey")) {
164 assertTrue(method.getReturnType() != null);
165 assertFalse(method.getReturnType().equals(
167 assertTrue(method.getReturnType().getName()
168 .equals("InterfaceKey"));
169 resolvedLeafrefCount++;
170 } else if (method.getName().equals("getHigherLayerIf")) {
171 assertTrue(method.getReturnType() != null);
172 assertFalse(method.getReturnType().equals(
174 assertTrue(method.getReturnType().getName()
176 resolvedLeafrefCount++;
179 } else if (type.getName().equals("NetworkLink")
180 && type instanceof GeneratedType) {
181 final GeneratedType genType = (GeneratedType) type;
182 final List<MethodSignature> methods = genType
183 .getMethodDefinitions();
184 assertTrue(methods != null);
185 for (MethodSignature method : methods) {
186 if (method.getName().equals("getInterface")) {
187 assertTrue(method.getReturnType() != null);
188 assertFalse(method.getReturnType().equals(
190 assertTrue(method.getReturnType().getName()
192 resolvedLeafrefCount++;
195 } else if ((type.getName().equals("SourceNode") || type.getName()
196 .equals("DestinationNode"))
197 && type instanceof GeneratedType) {
198 final GeneratedType genType = (GeneratedType) type;
199 final List<MethodSignature> methods = genType
200 .getMethodDefinitions();
201 assertTrue(methods != null);
202 for (MethodSignature method : methods) {
203 if (method.getName().equals("getId")) {
204 assertTrue(method.getReturnType() != null);
205 assertFalse(method.getReturnType().equals(
207 assertTrue(method.getReturnType().getName()
209 resolvedLeafrefCount++;
212 } else if (type.getName().equals("Tunnel")
213 && type instanceof GeneratedType) {
214 final GeneratedType genType = (GeneratedType) type;
215 final List<MethodSignature> methods = genType
216 .getMethodDefinitions();
217 assertTrue(methods != null);
218 for (MethodSignature method : methods) {
219 if (method.getName().equals("getTunnelKey")) {
220 assertTrue(method.getReturnType() != null);
221 assertFalse(method.getReturnType().equals(
223 assertTrue(method.getReturnType().getName()
224 .equals("TunnelKey"));
225 resolvedLeafrefCount++;
228 } else if (type.getName().equals("TunnelKey")
229 && type instanceof GeneratedTransferObject) {
230 final GeneratedTransferObject genTO = (GeneratedTransferObject) type;
231 final List<GeneratedProperty> properties = genTO
234 assertTrue(properties != null);
235 for (final GeneratedProperty property : properties) {
236 if (property.getName().equals("TunnelId")) {
237 assertTrue(property.getReturnType() != null);
238 assertFalse(property.getReturnType().equals(
240 assertTrue(property.getReturnType().getName()
242 resolvedLeafrefCount++;
247 assertEquals(10, resolvedLeafrefCount);
252 public void testContainerResolving() {
253 final String filePath = getClass().getResource(
254 "/simple-container-demo.yang").getPath();
255 final SchemaContext context = resolveSchemaContextFromFiles(filePath);
256 assertTrue(context != null);
258 final BindingGenerator bindingGen = new BindingGeneratorImpl();
259 final List<Type> genTypes = bindingGen.generateTypes(context);
261 assertTrue(genTypes != null);
262 assertEquals(3, genTypes.size());
264 final GeneratedType simpleContainer = (GeneratedType) genTypes.get(0);
265 final GeneratedType nestedContainer = (GeneratedType) genTypes.get(1);
267 assertEquals("SimpleContainer", simpleContainer.getName());
268 assertEquals("NestedContainer", nestedContainer.getName());
269 assertEquals(4, simpleContainer.getMethodDefinitions().size());
270 assertEquals(4, nestedContainer.getMethodDefinitions().size());
272 int methodsCount = 0;
273 for (final MethodSignature method : simpleContainer
274 .getMethodDefinitions()) {
275 if (method.getName().equals("getFoo")) {
276 method.getReturnType().getName().equals("Integer");
280 if (method.getName().equals("setFoo")) {
282 final MethodSignature.Parameter param = method.getParameters()
284 assertEquals("foo", param.getName());
285 assertEquals("Integer", param.getType().getName());
288 if (method.getName().equals("getBar")) {
289 method.getReturnType().getName().equals("String");
293 if (method.getName().equals("getNestedContainer")) {
294 method.getReturnType().getName().equals("NestedContainer");
298 assertEquals(4, methodsCount);
301 for (final MethodSignature method : nestedContainer
302 .getMethodDefinitions()) {
303 if (method.getName().equals("getFoo")) {
304 method.getReturnType().getName().equals("Short");
308 if (method.getName().equals("setFoo")) {
310 final MethodSignature.Parameter param = method.getParameters()
312 assertEquals("foo", param.getName());
313 assertEquals("Short", param.getType().getName());
316 if (method.getName().equals("getBar")) {
317 method.getReturnType().getName().equals("String");
321 if (method.getName().equals("setBar")) {
322 method.getReturnType().getName().equals("String");
326 assertEquals(4, methodsCount);
331 public void testLeafListResolving() {
332 final String filePath = getClass().getResource(
333 "/simple-leaf-list-demo.yang").getPath();
334 final SchemaContext context = resolveSchemaContextFromFiles(filePath);
335 assertTrue(context != null);
337 final BindingGenerator bindingGen = new BindingGeneratorImpl();
338 final List<Type> genTypes = bindingGen.generateTypes(context);
340 assertTrue(genTypes != null);
341 assertEquals(3, genTypes.size());
343 final GeneratedType simpleContainer = (GeneratedType) genTypes.get(0);
344 final GeneratedType nestedContainer = (GeneratedType) genTypes.get(1);
346 assertEquals("SimpleContainer", simpleContainer.getName());
347 assertEquals("NestedContainer", nestedContainer.getName());
348 assertEquals(4, simpleContainer.getMethodDefinitions().size());
349 assertEquals(3, nestedContainer.getMethodDefinitions().size());
351 int methodsCount = 0;
352 for (final MethodSignature method : simpleContainer
353 .getMethodDefinitions()) {
354 if (method.getName().equals("getFoo")) {
355 method.getReturnType().getName().equals("List");
359 if (method.getName().equals("setFoo")) {
361 final MethodSignature.Parameter param = method.getParameters()
363 assertEquals("foo", param.getName());
364 assertEquals("List", param.getType().getName());
367 if (method.getName().equals("getBar")) {
368 method.getReturnType().getName().equals("String");
372 if (method.getName().equals("getNestedContainer")) {
373 method.getReturnType().getName().equals("NestedContainer");
377 assertEquals(4, methodsCount);
380 for (final MethodSignature method : nestedContainer
381 .getMethodDefinitions()) {
382 if (method.getName().equals("getFoo")) {
383 method.getReturnType().getName().equals("Short");
387 if (method.getName().equals("setFoo")) {
389 final MethodSignature.Parameter param = method.getParameters()
391 assertEquals("foo", param.getName());
392 assertEquals("Short", param.getType().getName());
395 if (method.getName().equals("getBar")) {
396 method.getReturnType().getName().equals("List");
400 assertEquals(3, methodsCount);
405 public void testListResolving() {
406 final String filePath = getClass()
407 .getResource("/simple-list-demo.yang").getPath();
408 final SchemaContext context = resolveSchemaContextFromFiles(filePath);
409 assertTrue(context != null);
411 final BindingGenerator bindingGen = new BindingGeneratorImpl();
412 final List<Type> genTypes = bindingGen.generateTypes(context);
414 assertTrue(genTypes != null);
415 assertEquals(5, genTypes.size());
417 int genTypesCount = 0;
419 for (final Type type : genTypes) {
420 if (type instanceof GeneratedType) {
421 final GeneratedType genType = (GeneratedType) type;
422 if (genType.getName().equals("ListParentContainer")) {
423 assertEquals(2, genType.getMethodDefinitions().size());
425 } else if (genType.getName().equals("SimpleList")) {
426 assertEquals(7, genType.getMethodDefinitions().size());
427 final List<MethodSignature> methods = genType
428 .getMethodDefinitions();
429 int methodsCount = 0;
430 for (final MethodSignature method : methods) {
431 if (method.getName().equals("getSimpleListKey")) {
432 assertEquals("SimpleListKey", method
433 .getReturnType().getName());
435 } else if (method.getName().equals(
436 "getListChildContainer")) {
437 assertEquals("ListChildContainer", method
438 .getReturnType().getName());
440 } else if (method.getName().equals("getFoo")) {
442 } else if (method.getName().equals("setFoo")) {
444 } else if (method.getName().equals("getSimpleLeafList")) {
446 } else if (method.getName().equals("setSimpleLeafList")) {
448 } else if (method.getName().equals("getBar")) {
452 assertEquals(7, methodsCount);
454 } else if (genType.getName().equals("ListChildContainer")) {
455 assertEquals(2, genType.getMethodDefinitions().size());
458 } else if (type instanceof GeneratedTransferObject) {
460 final GeneratedTransferObject genTO = (GeneratedTransferObject) type;
461 final List<GeneratedProperty> properties = genTO
463 final List<GeneratedProperty> hashProps = genTO
464 .getHashCodeIdentifiers();
465 final List<GeneratedProperty> equalProps = genTO
466 .getEqualsIdentifiers();
468 assertEquals(1, properties.size());
469 assertEquals("ListKey", properties.get(0).getName());
470 assertEquals("Byte", properties.get(0).getReturnType()
472 assertEquals(true, properties.get(0).isReadOnly());
473 assertEquals(1, hashProps.size());
474 assertEquals("ListKey", hashProps.get(0).getName());
475 assertEquals("Byte", hashProps.get(0).getReturnType().getName());
476 assertEquals(1, equalProps.size());
477 assertEquals("ListKey", equalProps.get(0).getName());
478 assertEquals("Byte", equalProps.get(0).getReturnType()
482 assertEquals(3, genTypesCount);
483 assertEquals(1, genTOsCount);
487 public void testListCompositeKeyResolving() {
488 final String filePath = getClass().getResource(
489 "/list-composite-key.yang").getPath();
490 final SchemaContext context = resolveSchemaContextFromFiles(filePath);
492 assertTrue(context != null);
494 final BindingGenerator bindingGen = new BindingGeneratorImpl();
495 final List<Type> genTypes = bindingGen.generateTypes(context);
497 assertTrue(genTypes != null);
498 assertEquals(7, genTypes.size());
500 int genTypesCount = 0;
502 for (final Type type : genTypes) {
503 if (type instanceof GeneratedType) {
505 } else if (type instanceof GeneratedTransferObject) {
506 final GeneratedTransferObject genTO = (GeneratedTransferObject) type;
508 if (genTO.getName().equals("CompositeKeyListKey")) {
509 final List<GeneratedProperty> properties = genTO
511 int propertyCount = 0;
512 for (final GeneratedProperty prop : properties) {
513 if (prop.getName().equals("Key1")) {
515 } else if (prop.getName().equals("Key2")) {
519 assertEquals(2, propertyCount);
521 } else if (genTO.getName().equals("InnerListKey")) {
522 final List<GeneratedProperty> properties = genTO
524 assertEquals(1, properties.size());
530 assertEquals(5, genTypesCount);
531 assertEquals(2, genTOsCount);
535 public void testGeneratedTypes() {
536 final String filePath = getClass().getResource("/demo-topology.yang")
538 final SchemaContext context = resolveSchemaContextFromFiles(filePath);
539 assertTrue(context != null);
541 final BindingGenerator bindingGen = new BindingGeneratorImpl();
542 final List<Type> genTypes = bindingGen.generateTypes(context);
544 assertTrue(genTypes != null);
545 assertEquals(14, genTypes.size());
547 int genTypesCount = 0;
549 for (final Type type : genTypes) {
550 if (type instanceof GeneratedType) {
552 } else if (type instanceof GeneratedTransferObject) {
557 assertEquals(11, genTypesCount);
558 assertEquals(3, genTOsCount);