2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
\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
8 package org.opendaylight.controller.sal.binding.yang.types.test;
\r
10 import static org.junit.Assert.*;
\r
12 import java.util.List;
\r
13 import java.util.Set;
\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
29 public class GeneratedTypesTest {
\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
36 return parser.resolveSchemaContext(modules);
\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
49 final BindingGenerator bindingGen = new BindingGeneratorImpl();
\r
50 final List<Type> genTypes = bindingGen.generateTypes(context);
\r
52 assertTrue(genTypes != null);
\r
53 assertEquals(11, genTypes.size());
\r
58 public void testLeafrefResolving() {
\r
59 final String topologyPath = getClass().getResource(
\r
60 "/leafref-test-models/abstract-topology@2013-02-08.yang")
\r
62 final String interfacesPath = getClass().getResource(
\r
63 "/leafref-test-models/ietf-interfaces@2012-11-15.yang")
\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
70 final String yangTypesPath = getClass().getResource(
\r
71 "/leafref-test-models/ietf-yang-types@2010-09-24.yang")
\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
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
87 final BindingGenerator bindingGen = new BindingGeneratorImpl();
\r
88 final List<Type> genTypes = bindingGen.generateTypes(context);
\r
90 assertEquals(21, genTypes.size());
\r
91 assertTrue(genTypes != null);
\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
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
109 final BindingGenerator bindingGen = new BindingGeneratorImpl();
\r
110 final List<Type> genTypes = bindingGen.generateTypes(context);
\r
112 assertTrue(genTypes != null);
\r
113 assertEquals(2, genTypes.size());
\r
115 final GeneratedType simpleContainer = (GeneratedType) genTypes.get(0);
\r
116 final GeneratedType nestedContainer = (GeneratedType) genTypes.get(1);
\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
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
131 if (method.getName().equals("setFoo")) {
\r
133 final MethodSignature.Parameter param = method.getParameters()
\r
135 assertEquals("foo", param.getName());
\r
136 assertEquals("Integer", param.getType().getName());
\r
139 if (method.getName().equals("getBar")) {
\r
140 method.getReturnType().getName().equals("String");
\r
144 if (method.getName().equals("getNestedContainer")) {
\r
145 method.getReturnType().getName().equals("NestedContainer");
\r
149 assertEquals(4, methodsCount);
\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
159 if (method.getName().equals("setFoo")) {
\r
161 final MethodSignature.Parameter param = method.getParameters()
\r
163 assertEquals("foo", param.getName());
\r
164 assertEquals("Short", param.getType().getName());
\r
167 if (method.getName().equals("getBar")) {
\r
168 method.getReturnType().getName().equals("String");
\r
172 if (method.getName().equals("setBar")) {
\r
173 method.getReturnType().getName().equals("String");
\r
177 assertEquals(4, methodsCount);
\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
187 final BindingGenerator bindingGen = new BindingGeneratorImpl();
\r
188 final List<Type> genTypes = bindingGen.generateTypes(context);
\r
190 assertTrue(genTypes != null);
\r
191 assertEquals(2, genTypes.size());
\r
193 final GeneratedType simpleContainer = (GeneratedType) genTypes.get(0);
\r
194 final GeneratedType nestedContainer = (GeneratedType) genTypes.get(1);
\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
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
209 if (method.getName().equals("setFoo")) {
\r
211 final MethodSignature.Parameter param = method.getParameters()
\r
213 assertEquals("foo", param.getName());
\r
214 assertEquals("List", param.getType().getName());
\r
217 if (method.getName().equals("getBar")) {
\r
218 method.getReturnType().getName().equals("String");
\r
222 if (method.getName().equals("getNestedContainer")) {
\r
223 method.getReturnType().getName().equals("NestedContainer");
\r
227 assertEquals(4, methodsCount);
\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
237 if (method.getName().equals("setFoo")) {
\r
239 final MethodSignature.Parameter param = method.getParameters()
\r
241 assertEquals("foo", param.getName());
\r
242 assertEquals("Short", param.getType().getName());
\r
245 if (method.getName().equals("getBar")) {
\r
246 method.getReturnType().getName().equals("List");
\r
250 assertEquals(3, methodsCount);
\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
260 final BindingGenerator bindingGen = new BindingGeneratorImpl();
\r
261 final List<Type> genTypes = bindingGen.generateTypes(context);
\r
263 assertTrue(genTypes != null);
\r
264 assertEquals(4, genTypes.size());
\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
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
284 } else if (method.getName().equals(
\r
285 "getListChildContainer")) {
\r
286 assertEquals("ListChildContainer", method
\r
287 .getReturnType().getName());
\r
289 } else if (method.getName().equals("getFoo")) {
\r
291 } else if (method.getName().equals("setFoo")) {
\r
293 } else if (method.getName().equals("getSimpleLeafList")) {
\r
295 } else if (method.getName().equals("setSimpleLeafList")) {
\r
297 } else if (method.getName().equals("getBar")) {
\r
301 assertEquals(7, methodsCount);
\r
303 } else if (genType.getName().equals("ListChildContainer")) {
\r
304 assertEquals(2, genType.getMethodDefinitions().size());
\r
307 } else if (type instanceof GeneratedTransferObject) {
\r
309 final GeneratedTransferObject genTO = (GeneratedTransferObject) type;
\r
310 final List<GeneratedProperty> properties = genTO
\r
312 final List<GeneratedProperty> hashProps = genTO
\r
313 .getHashCodeIdentifiers();
\r
314 final List<GeneratedProperty> equalProps = genTO
\r
315 .getEqualsIdentifiers();
\r
317 assertEquals(1, properties.size());
\r
318 assertEquals("ListKey", properties.get(0).getName());
\r
319 assertEquals("Byte", properties.get(0).getReturnType()
\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
331 assertEquals(3, genTypesCount);
\r
332 assertEquals(1, genTOsCount);
\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
341 assertTrue(context != null);
\r
343 final BindingGenerator bindingGen = new BindingGeneratorImpl();
\r
344 final List<Type> genTypes = bindingGen.generateTypes(context);
\r
346 assertTrue(genTypes != null);
\r
347 assertEquals(6, genTypes.size());
\r
349 int genTypesCount = 0;
\r
350 int genTOsCount = 0;
\r
351 for (final Type type : genTypes) {
\r
352 if (type instanceof GeneratedType) {
\r
354 } else if (type instanceof GeneratedTransferObject) {
\r
355 final GeneratedTransferObject genTO = (GeneratedTransferObject) type;
\r
357 if (genTO.getName().equals("CompositeKeyListKey")) {
\r
358 final List<GeneratedProperty> properties = genTO
\r
360 int propertyCount = 0;
\r
361 for (final GeneratedProperty prop : properties) {
\r
362 if (prop.getName().equals("Key1")) {
\r
364 } else if (prop.getName().equals("Key2")) {
\r
368 assertEquals(2, propertyCount);
\r
370 } else if (genTO.getName().equals("InnerListKey")) {
\r
371 final List<GeneratedProperty> properties = genTO
\r
373 assertEquals(1, properties.size());
\r
379 assertEquals(4, genTypesCount);
\r
380 assertEquals(2, genTOsCount);
\r
384 public void testGeneratedTypes() {
\r
385 final String filePath = getClass().getResource("/demo-topology.yang")
\r
387 final SchemaContext context = resolveSchemaContextFromFiles(filePath);
\r
388 assertTrue(context != null);
\r
390 final BindingGenerator bindingGen = new BindingGeneratorImpl();
\r
391 final List<Type> genTypes = bindingGen.generateTypes(context);
\r
393 assertTrue(genTypes != null);
\r
394 assertEquals(13, genTypes.size());
\r
396 int genTypesCount = 0;
\r
397 int genTOsCount = 0;
\r
398 for (final Type type : genTypes) {
\r
399 if (type instanceof GeneratedType) {
\r
401 } else if (type instanceof GeneratedTransferObject) {
\r
406 assertEquals(10, genTypesCount);
\r
407 assertEquals(3, genTOsCount);
\r