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.assertEquals;
11 import static org.junit.Assert.assertTrue;
13 import java.util.List;
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;
29 public class GeneratedTypesTest {
31 private SchemaContext resolveSchemaContextFromFiles(
32 final String... yangFiles) {
33 final YangModelParser parser = new YangModelParserImpl();
34 final Set<Module> modules = parser.parseYangModels(yangFiles);
36 return parser.resolveSchemaContext(modules);
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);
45 final BindingGenerator bindingGen = new BindingGeneratorImpl();
46 final List<Type> genTypes = bindingGen.generateTypes(context);
48 assertTrue(genTypes != null);
49 assertEquals(2, genTypes.size());
51 final GeneratedType simpleContainer = (GeneratedType) genTypes.get(0);
52 final GeneratedType nestedContainer = (GeneratedType) genTypes.get(1);
54 assertEquals("SimpleContainer", simpleContainer.getName());
55 assertEquals("NestedContainer", nestedContainer.getName());
56 assertEquals(4, simpleContainer.getMethodDefinitions().size());
57 assertEquals(4, nestedContainer.getMethodDefinitions().size());
60 for (final MethodSignature method : simpleContainer
61 .getMethodDefinitions()) {
62 if (method.getName().equals("getFoo")) {
63 method.getReturnType().getName().equals("Integer");
67 if (method.getName().equals("setFoo")) {
69 final MethodSignature.Parameter param = method.getParameters()
71 assertEquals("foo", param.getName());
72 assertEquals("Integer", param.getType().getName());
75 if (method.getName().equals("getBar")) {
76 method.getReturnType().getName().equals("String");
80 if (method.getName().equals("getNestedContainer")) {
81 method.getReturnType().getName().equals("NestedContainer");
85 assertEquals(4, methodsCount);
88 for (final MethodSignature method : nestedContainer
89 .getMethodDefinitions()) {
90 if (method.getName().equals("getFoo")) {
91 method.getReturnType().getName().equals("Short");
95 if (method.getName().equals("setFoo")) {
97 final MethodSignature.Parameter param = method.getParameters()
99 assertEquals("foo", param.getName());
100 assertEquals("Short", param.getType().getName());
103 if (method.getName().equals("getBar")) {
104 method.getReturnType().getName().equals("String");
108 if (method.getName().equals("setBar")) {
109 method.getReturnType().getName().equals("String");
113 assertEquals(4, methodsCount);
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);
122 final BindingGenerator bindingGen = new BindingGeneratorImpl();
123 final List<Type> genTypes = bindingGen.generateTypes(context);
125 assertTrue(genTypes != null);
126 assertEquals(2, genTypes.size());
128 final GeneratedType simpleContainer = (GeneratedType) genTypes.get(0);
129 final GeneratedType nestedContainer = (GeneratedType) genTypes.get(1);
131 assertEquals("SimpleContainer", simpleContainer.getName());
132 assertEquals("NestedContainer", nestedContainer.getName());
133 assertEquals(4, simpleContainer.getMethodDefinitions().size());
134 assertEquals(3, nestedContainer.getMethodDefinitions().size());
136 int methodsCount = 0;
137 for (final MethodSignature method : simpleContainer
138 .getMethodDefinitions()) {
139 if (method.getName().equals("getFoo")) {
140 method.getReturnType().getName().equals("List");
144 if (method.getName().equals("setFoo")) {
146 final MethodSignature.Parameter param = method.getParameters()
148 assertEquals("foo", param.getName());
149 assertEquals("List", param.getType().getName());
152 if (method.getName().equals("getBar")) {
153 method.getReturnType().getName().equals("String");
157 if (method.getName().equals("getNestedContainer")) {
158 method.getReturnType().getName().equals("NestedContainer");
162 assertEquals(4, methodsCount);
165 for (final MethodSignature method : nestedContainer
166 .getMethodDefinitions()) {
167 if (method.getName().equals("getFoo")) {
168 method.getReturnType().getName().equals("Short");
172 if (method.getName().equals("setFoo")) {
174 final MethodSignature.Parameter param = method.getParameters()
176 assertEquals("foo", param.getName());
177 assertEquals("Short", param.getType().getName());
180 if (method.getName().equals("getBar")) {
181 method.getReturnType().getName().equals("List");
185 assertEquals(3, methodsCount);
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);
194 final BindingGenerator bindingGen = new BindingGeneratorImpl();
195 final List<Type> genTypes = bindingGen.generateTypes(context);
197 assertTrue(genTypes != null);
198 assertEquals(4, genTypes.size());
200 int genTypesCount = 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());
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());
218 } else if (method.getName().equals(
219 "getListChildContainer")) {
220 assertEquals("ListChildContainer", method
221 .getReturnType().getName());
223 } else if (method.getName().equals("getFoo")) {
225 } else if (method.getName().equals("setFoo")) {
227 } else if (method.getName().equals("getSimpleLeafList")) {
229 } else if (method.getName().equals("setSimpleLeafList")) {
231 } else if (method.getName().equals("getBar")) {
235 assertEquals(7, methodsCount);
237 } else if (genType.getName().equals("ListChildContainer")) {
238 assertEquals(2, genType.getMethodDefinitions().size());
241 } else if (type instanceof GeneratedTransferObject) {
243 final GeneratedTransferObject genTO = (GeneratedTransferObject) type;
244 final List<GeneratedProperty> properties = genTO
246 final List<GeneratedProperty> hashProps = genTO
247 .getHashCodeIdentifiers();
248 final List<GeneratedProperty> equalProps = genTO
249 .getEqualsIdentifiers();
251 assertEquals(1, properties.size());
252 assertEquals("ListKey", properties.get(0).getName());
253 assertEquals("Byte", properties.get(0).getReturnType()
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()
265 assertEquals(3, genTypesCount);
266 assertEquals(1, genTOsCount);
270 public void testListCompositeKeyResolving() {
271 final String filePath = getClass().getResource("/list-composite-key.yang").getPath();
272 final SchemaContext context = resolveSchemaContextFromFiles(filePath);
274 assertTrue(context != null);
276 final BindingGenerator bindingGen = new BindingGeneratorImpl();
277 final List<Type> genTypes = bindingGen.generateTypes(context);
279 assertTrue(genTypes != null);
280 assertEquals(6, genTypes.size());
282 int genTypesCount = 0;
284 for (final Type type : genTypes) {
285 if (type instanceof GeneratedType) {
287 } else if (type instanceof GeneratedTransferObject) {
288 final GeneratedTransferObject genTO = (GeneratedTransferObject) type;
290 if (genTO.getName().equals("CompositeKeyListKey")) {
291 final List<GeneratedProperty> properties = genTO
293 int propertyCount = 0;
294 for (final GeneratedProperty prop : properties) {
295 if (prop.getName().equals("Key1")) {
297 } else if (prop.getName().equals("Key2")) {
301 assertEquals(2, propertyCount);
303 } else if (genTO.getName().equals("InnerListKey")) {
304 final List<GeneratedProperty> properties = genTO
306 assertEquals(1, properties.size());
312 assertEquals(4, genTypesCount);
313 assertEquals(2, genTOsCount);
317 public void testGeneratedTypes() {
318 final String filePath = getClass().getResource("/demo-topology.yang").getPath();
319 final SchemaContext context = resolveSchemaContextFromFiles(filePath);
320 assertTrue(context != null);
322 final BindingGenerator bindingGen = new BindingGeneratorImpl();
323 final List<Type> genTypes = bindingGen.generateTypes(context);
325 assertTrue(genTypes != null);
326 assertEquals(13, genTypes.size());
328 int genTypesCount = 0;
330 for (final Type type : genTypes) {
331 if (type instanceof GeneratedType) {
333 } else if (type instanceof GeneratedTransferObject) {
338 assertEquals(10, genTypesCount);
339 assertEquals(3, genTOsCount);