cad548110aaacb9cf6c9ddfc069590abd8951128
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / test / java / org / opendaylight / controller / yang / model / parser / impl / TypesResolutionTest.java
1 /*\r
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
3  *\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
7  */\r
8 package org.opendaylight.controller.yang.model.parser.impl;\r
9 \r
10 import static org.junit.Assert.*;\r
11 \r
12 import java.io.File;\r
13 import java.util.List;\r
14 import java.util.Set;\r
15 \r
16 import org.junit.Before;\r
17 import org.junit.Test;\r
18 import org.opendaylight.controller.yang.model.api.IdentitySchemaNode;\r
19 import org.opendaylight.controller.yang.model.api.LeafSchemaNode;\r
20 import org.opendaylight.controller.yang.model.api.Module;\r
21 import org.opendaylight.controller.yang.model.api.TypeDefinition;\r
22 import org.opendaylight.controller.yang.model.api.type.EnumTypeDefinition.EnumPair;\r
23 import org.opendaylight.controller.yang.model.api.type.LengthConstraint;\r
24 import org.opendaylight.controller.yang.model.api.type.PatternConstraint;\r
25 import org.opendaylight.controller.yang.model.parser.api.YangModelParser;\r
26 import org.opendaylight.controller.yang.model.util.EnumerationType;\r
27 import org.opendaylight.controller.yang.model.util.InstanceIdentifier;\r
28 import org.opendaylight.controller.yang.model.util.StringType;\r
29 import org.opendaylight.controller.yang.model.util.UnionType;\r
30 \r
31 public class TypesResolutionTest {\r
32 \r
33     private YangModelParser parser;\r
34     private String[] testFiles;\r
35     private Set<Module> modules;\r
36 \r
37     @Before\r
38     public void init() {\r
39         parser = new YangModelParserImpl();\r
40         File testDir = new File("src/test/resources/types");\r
41         String[] fileList = testDir.list();\r
42         testFiles = new String[fileList.length];\r
43         int i = 0;\r
44         for(String fileName : fileList) {\r
45             File file = new File(testDir, fileName);\r
46             testFiles[i] = file.getAbsolutePath();\r
47             i++;\r
48         }\r
49         modules = parser.parseYangModels(testFiles);\r
50         assertEquals(fileList.length, modules.size());\r
51     }\r
52 \r
53     @Test\r
54     public void testIPVersion() {\r
55         Module tested = findModule(modules, "ietf-inet-types");\r
56         Set<TypeDefinition<?>> typedefs = tested.getTypeDefinitions();\r
57         assertEquals(14, typedefs.size());\r
58 \r
59         TypeDefinition<?> type = findTypedef(typedefs, "ip-version");\r
60         EnumerationType en = (EnumerationType)type.getBaseType();\r
61         List<EnumPair> values = en.getValues();\r
62         assertEquals(3, values.size());\r
63 \r
64         EnumPair value0 = values.get(0);\r
65         assertEquals("unknown", value0.getName());\r
66         assertEquals(0, (int)value0.getValue());\r
67 \r
68         EnumPair value1 = values.get(1);\r
69         assertEquals("ipv4", value1.getName());\r
70         assertEquals(1, (int)value1.getValue());\r
71 \r
72         EnumPair value2 = values.get(2);\r
73         assertEquals("ipv6", value2.getName());\r
74         assertEquals(2, (int)value2.getValue());\r
75     }\r
76 \r
77     @Test\r
78     public void testIpAddress() {\r
79         Module tested = findModule(modules, "ietf-inet-types");\r
80         Set<TypeDefinition<?>> typedefs = tested.getTypeDefinitions();\r
81         TypeDefinition<?> type = findTypedef(typedefs, "ip-address");\r
82         UnionType baseType = (UnionType)type.getBaseType();\r
83         List<TypeDefinition<?>> unionTypes = baseType.getTypes();\r
84 \r
85         StringType ipv4 = (StringType)unionTypes.get(0);\r
86         String expectedPattern =\r
87         "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}"\r
88       +  "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"\r
89       + "(%[\\p{N}\\p{L}]+)?";\r
90         assertEquals(expectedPattern, ipv4.getPatterns().get(0).getRegularExpression());\r
91 \r
92         StringType ipv6 = (StringType)unionTypes.get(1);\r
93         List<PatternConstraint> ipv6Patterns = ipv6.getPatterns();\r
94         expectedPattern = "((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}"\r
95         + "((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|"\r
96         + "(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}"\r
97         + "(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))"\r
98         + "(%[\\p{N}\\p{L}]+)?";\r
99         assertEquals(expectedPattern, ipv6Patterns.get(0).getRegularExpression());\r
100 \r
101         expectedPattern = "(([^:]+:){6}(([^:]+:[^:]+)|(.*\\..*)))|"\r
102         + "((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)"\r
103         + "(%.+)?";\r
104         assertEquals(expectedPattern, ipv6Patterns.get(1).getRegularExpression());\r
105     }\r
106 \r
107     @Test\r
108     public void testDomainName() {\r
109         Module tested = findModule(modules, "ietf-inet-types");\r
110         Set<TypeDefinition<?>> typedefs = tested.getTypeDefinitions();\r
111         TypeDefinition<?> type = findTypedef(typedefs, "domain-name");\r
112         StringType baseType = (StringType)type.getBaseType();\r
113         List<PatternConstraint> patterns = baseType.getPatterns();\r
114         assertEquals(1, patterns.size());\r
115         String expectedPattern = "((([a-zA-Z0-9_]([a-zA-Z0-9\\-_]){0,61})?[a-zA-Z0-9]\\.)*"\r
116         +  "([a-zA-Z0-9_]([a-zA-Z0-9\\-_]){0,61})?[a-zA-Z0-9]\\.?)"\r
117         +  "|\\.";\r
118         assertEquals(expectedPattern, patterns.get(0).getRegularExpression());\r
119 \r
120         List<LengthConstraint> lengths = baseType.getLengthStatements();\r
121         assertEquals(1, lengths.size());\r
122         LengthConstraint length = baseType.getLengthStatements().get(0);\r
123         assertEquals(1L, length.getMin().longValue());\r
124         assertEquals(253L, length.getMax().longValue());\r
125     }\r
126 \r
127     @Test\r
128     public void testInstanceIdentifier1() {\r
129         Module tested = findModule(modules, "custom-types-test");\r
130         LeafSchemaNode leaf = (LeafSchemaNode)tested.getDataChildByName("inst-id-leaf1");\r
131         InstanceIdentifier leafType = (InstanceIdentifier)leaf.getType();\r
132         assertFalse(leafType.requireInstance());\r
133     }\r
134 \r
135     @Test\r
136     public void testInstanceIdentifier2() {\r
137         Module tested = findModule(modules, "custom-types-test");\r
138         LeafSchemaNode leaf = (LeafSchemaNode)tested.getDataChildByName("inst-id-leaf2");\r
139         InstanceIdentifier leafType = (InstanceIdentifier)leaf.getType();\r
140         assertTrue(leafType.requireInstance());\r
141     }\r
142 \r
143     @Test\r
144     public void testIdentity() {\r
145         Module tested = findModule(modules, "custom-types-test");\r
146         Set<IdentitySchemaNode> identities = tested.getIdentities();\r
147         IdentitySchemaNode testedIdentity = null;\r
148         for(IdentitySchemaNode id : identities) {\r
149             if(id.getQName().getLocalName().equals("crypto-alg")) {\r
150                 testedIdentity = id;\r
151                 IdentitySchemaNode baseIdentity = id.getBaseIdentity();\r
152                 assertEquals("crypto-base", baseIdentity.getQName().getLocalName());\r
153                 assertNull(baseIdentity.getBaseIdentity());\r
154             }\r
155         }\r
156         assertNotNull(testedIdentity);\r
157     }\r
158 \r
159     private Module findModule(Set<Module> modules, String name) {\r
160         for(Module module : modules) {\r
161             if(module.getName().equals(name)) {\r
162                 return module;\r
163             }\r
164         }\r
165         return null;\r
166     }\r
167 \r
168     private TypeDefinition<?> findTypedef(Set<TypeDefinition<?>> typedefs, String name) {\r
169         for(TypeDefinition<?> td : typedefs) {\r
170             if(td.getQName().getLocalName().equals(name)) {\r
171                 return td;\r
172             }\r
173         }\r
174         return null;\r
175     }\r
176 \r
177 }\r