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.io.IOException;
14 import java.io.InputStream;
15 import java.util.List;
17 import org.antlr.v4.runtime.ANTLRInputStream;
18 import org.antlr.v4.runtime.CommonTokenStream;
19 import org.antlr.v4.runtime.tree.ParseTree;
20 import org.antlr.v4.runtime.tree.ParseTreeWalker;
21 import org.junit.Test;
22 import org.opendaylight.controller.antlrv4.code.gen.YangLexer;
23 import org.opendaylight.controller.antlrv4.code.gen.YangParser;
24 import org.opendaylight.controller.model.parser.builder.ModuleBuilder;
25 import org.opendaylight.controller.model.parser.impl.YangModelParserImpl;
26 import org.opendaylight.controller.sal.binding.generator.api.BindingGenerator;
27 import org.opendaylight.controller.sal.binding.generator.impl.BindingGeneratorImpl;
28 import org.opendaylight.controller.sal.binding.model.api.GeneratedType;
29 import org.opendaylight.controller.sal.binding.model.api.MethodSignature;
30 import org.opendaylight.controller.yang.model.api.Module;
32 public class GeneratedTypesTest {
34 private Module resolveModuleFromFile(final String filePath) {
36 final InputStream inStream = getClass().getResourceAsStream(
38 if (inStream != null) {
39 ANTLRInputStream input = new ANTLRInputStream(inStream);
40 final YangLexer lexer = new YangLexer(input);
41 final CommonTokenStream tokens = new CommonTokenStream(lexer);
42 final YangParser parser = new YangParser(tokens);
44 final ParseTree tree = parser.yang();
45 final ParseTreeWalker walker = new ParseTreeWalker();
47 final YangModelParserImpl modelParser = new YangModelParserImpl();
48 walker.walk(modelParser, tree);
50 final ModuleBuilder genModule = modelParser.getModuleBuilder();
51 final Module module = genModule.build();
55 } catch (IOException e) {
62 public void testContainerResolving() {
63 final Module module = resolveModuleFromFile("/simple-container-demo.yang");
64 assertTrue(module != null);
66 final BindingGenerator bindingGen = new BindingGeneratorImpl();
67 final List<GeneratedType> genTypes = bindingGen.generateTypes(module);
69 assertTrue(genTypes != null);
70 assertEquals(genTypes.size(), 2);
72 final GeneratedType simpleContainer = genTypes.get(0);
73 final GeneratedType nestedContainer = genTypes.get(1);
75 assertEquals(simpleContainer.getName(), "SimpleContainer");
76 assertEquals(nestedContainer.getName(), "NestedContainer");
78 assertEquals(simpleContainer.getMethodDefinitions().size(), 4);
79 assertEquals(nestedContainer.getMethodDefinitions().size(), 4);
82 for (final MethodSignature method : simpleContainer
83 .getMethodDefinitions()) {
84 if (method.getName().equals("getFoo")) {
85 method.getReturnType().getName().equals("Integer");
89 if (method.getName().equals("setFoo")) {
91 final MethodSignature.Parameter param = method.getParameters()
93 assertEquals(param.getName(), "foo");
94 assertEquals(param.getType().getName(), "Integer");
97 if (method.getName().equals("getBar")) {
98 method.getReturnType().getName().equals("String");
102 if (method.getName().equals("getNestedContainer")) {
103 method.getReturnType().getName().equals("NestedContainer");
107 assertEquals(methodsCount, 4);
110 for (final MethodSignature method : nestedContainer
111 .getMethodDefinitions()) {
112 if (method.getName().equals("getFoo")) {
113 method.getReturnType().getName().equals("Short");
117 if (method.getName().equals("setFoo")) {
119 final MethodSignature.Parameter param = method.getParameters()
121 assertEquals(param.getName(), "foo");
122 assertEquals(param.getType().getName(), "Short");
125 if (method.getName().equals("getBar")) {
126 method.getReturnType().getName().equals("String");
130 if (method.getName().equals("setBar")) {
131 method.getReturnType().getName().equals("String");
135 assertEquals(methodsCount, 4);
139 public void testLeafListResolving() {
140 final Module module = resolveModuleFromFile("/simple-leaf-list-demo.yang");
141 assertTrue(module != null);
143 final BindingGenerator bindingGen = new BindingGeneratorImpl();
144 final List<GeneratedType> genTypes = bindingGen.generateTypes(module);
146 assertTrue(genTypes != null);
147 assertEquals(genTypes.size(), 2);
149 final GeneratedType simpleContainer = genTypes.get(0);
150 final GeneratedType nestedContainer = genTypes.get(1);
152 assertEquals(simpleContainer.getName(), "SimpleContainer");
153 assertEquals(nestedContainer.getName(), "NestedContainer");
155 // FIXME: uncomment after fix in DOM tree parser - LeafSchemaNode bad
156 // isConfig resolving
157 assertEquals(simpleContainer.getMethodDefinitions().size(), 4);
158 assertEquals(nestedContainer.getMethodDefinitions().size(), 3);
160 int methodsCount = 0;
161 for (final MethodSignature method : simpleContainer
162 .getMethodDefinitions()) {
163 if (method.getName().equals("getFoo")) {
164 method.getReturnType().getName().equals("List");
168 if (method.getName().equals("setFoo")) {
170 final MethodSignature.Parameter param = method.getParameters()
172 assertEquals(param.getName(), "foo");
173 assertEquals(param.getType().getName(), "List");
176 if (method.getName().equals("getBar")) {
177 method.getReturnType().getName().equals("String");
181 if (method.getName().equals("getNestedContainer")) {
182 method.getReturnType().getName().equals("NestedContainer");
186 assertEquals(methodsCount, 4);
189 for (final MethodSignature method : nestedContainer
190 .getMethodDefinitions()) {
191 if (method.getName().equals("getFoo")) {
192 method.getReturnType().getName().equals("Short");
196 if (method.getName().equals("setFoo")) {
198 final MethodSignature.Parameter param = method.getParameters()
200 assertEquals(param.getName(), "foo");
201 assertEquals(param.getType().getName(), "Short");
204 if (method.getName().equals("getBar")) {
205 method.getReturnType().getName().equals("List");
209 assertEquals(methodsCount, 3);
213 public void testListResolving() {
214 final Module module = resolveModuleFromFile("/simple-list-demo.yang");
215 assertTrue(module != null);
217 final BindingGenerator bindingGen = new BindingGeneratorImpl();
218 final List<GeneratedType> genTypes = bindingGen.generateTypes(module);
220 assertTrue(genTypes != null);
221 assertEquals(genTypes.size(), 3);
225 public void testGeneratedTypes() {
226 final Module module = resolveModuleFromFile("/demo-topology.yang");
227 assertTrue(module != null);
229 final BindingGenerator bindingGen = new BindingGeneratorImpl();
230 final List<GeneratedType> genTypes = bindingGen.generateTypes(module);
232 assertTrue(genTypes != null);
233 assertEquals(genTypes.size(), 10);