blob: b407c1b00ca2e855af3affcc4cda02687232f534 [file] [log] [blame]
Shankara-Huawei234cd092016-07-14 11:35:34 +05301/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.yangutils.parser.impl.listeners;
17
18import org.junit.Rule;
19import org.junit.Test;
20import org.junit.rules.ExpectedException;
janani bc27947a2016-10-19 01:17:40 +053021import org.onosproject.yangutils.datamodel.YangDerivedInfo;
Shankara-Huawei234cd092016-07-14 11:35:34 +053022import org.onosproject.yangutils.datamodel.YangIdentity;
23import org.onosproject.yangutils.datamodel.YangIdentityRef;
24import org.onosproject.yangutils.datamodel.YangLeaf;
25import org.onosproject.yangutils.datamodel.YangLeafList;
26import org.onosproject.yangutils.datamodel.YangModule;
27import org.onosproject.yangutils.datamodel.YangNode;
28import org.onosproject.yangutils.datamodel.YangNodeType;
29import org.onosproject.yangutils.datamodel.YangType;
30import org.onosproject.yangutils.datamodel.YangTypeDef;
31import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
32import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
33import org.onosproject.yangutils.parser.exceptions.ParserException;
34import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
35
36import java.io.IOException;
37import java.util.ListIterator;
38
39import static org.hamcrest.MatcherAssert.assertThat;
40import static org.hamcrest.core.Is.is;
janani bc27947a2016-10-19 01:17:40 +053041import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
Shankara-Huawei234cd092016-07-14 11:35:34 +053042
43/**
44 * Test case for identity listener.
45 */
46public class IdentityListenerTest {
Shankara-Huawei234cd092016-07-14 11:35:34 +053047
48 private final YangUtilsParserManager manager = new YangUtilsParserManager();
49
janani bc27947a2016-10-19 01:17:40 +053050 @Rule
51 public ExpectedException thrown = ExpectedException.none();
52
Shankara-Huawei234cd092016-07-14 11:35:34 +053053 /**
54 * Checks for updating datamodel for identity/identityref.
55 */
56 @Test
57 public void processIdentityrefType() throws IOException, ParserException {
58
59 YangNode node = manager
60 .getDataModel("src/test/resources/IdentityListener.yang");
61
62 // Check whether the data model tree returned is of type module.
63 assertThat((node instanceof YangModule), is(true));
64
65 // Check whether the node type is set properly to module.
66 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
67
68 // Check whether the module name is set correctly.
69 YangModule yangNode = (YangModule) node;
70 assertThat(yangNode.getName(), is("IdentityListener"));
71
72 YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
73 assertThat(yangIdentity.getName(), is("tunnel"));
74
75 yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
76 assertThat(yangIdentity.getName(), is("tunnel-type"));
77
78 yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling().getNextSibling();
79 assertThat(yangIdentity.getName(), is("ref-address-family"));
80
81 yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling().getNextSibling()
82 .getNextSibling();
83 assertThat(yangIdentity.getName(), is("ipv4-address-family"));
84 assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
85 assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
86
87 yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling().getNextSibling()
88 .getNextSibling().getNextSibling();
89 assertThat(yangIdentity.getName(), is("ipv6-address-family"));
90 assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
91 assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
92 assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
93
94 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
95 YangLeaf leafInfo = leafIterator.next();
96
97 assertThat(leafInfo.getName(), is("tunnel"));
98 assertThat(leafInfo.getDataType().getDataTypeName(), is("identityref"));
99 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
100 YangIdentityRef yangIdentityRef = (YangIdentityRef) leafInfo.getDataType().getDataTypeExtendedInfo();
101 assertThat(yangIdentityRef.getName(), is("ref-address-family"));
102 assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
103 assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
104 assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
105
106 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
107 YangLeafList leafListInfo = leafListIterator.next();
108
109 // Check whether the information in the leaf is correct.
110 assertThat(leafListInfo.getName(), is("network-ref"));
111 assertThat(leafListInfo.getDataType().getDataTypeName(), is("identityref"));
112 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
113 yangIdentityRef = (YangIdentityRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
114
115 // Check whether identityref type got resolved.
116 assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
117 }
118
119 /**
120 * Checks for updating datamodel for intrafile resolution identity/identityref.
121 */
122 @Test
123 public void processIntraIdentityrefType() throws IOException, ParserException {
124
125 YangNode node = manager
126 .getDataModel("src/test/resources/IdentityIntraFile.yang");
127
128 // Check whether the data model tree returned is of type module.
129 assertThat((node instanceof YangModule), is(true));
130
131 // Check whether the node type is set properly to module.
132 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
133
134 // Check whether the module name is set correctly.
135 YangModule yangNode = (YangModule) node;
136 assertThat(yangNode.getName(), is("IdentityIntraFile"));
137
138 YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
139 assertThat(yangIdentity.getName(), is("ipv4-address-family"));
140 assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
141 assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.INTRA_FILE_RESOLVED));
142 }
143
144 /**
145 * Checks for updating datamodel for identityref used in tydedef.
146 */
147 @Test
148 public void processIdentityTypedefStatement() throws IOException, ParserException {
149
150 YangNode node = manager.getDataModel("src/test/resources/IdentityTypedef.yang");
151
152 // Check whether the data model tree returned is of type module.
153 assertThat((node instanceof YangModule), is(true));
154
155 // Check whether the node type is set properly to module.
156 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
157
158 // Check whether the module name is set correctly.
159 YangModule yangNode = (YangModule) node;
160 assertThat(yangNode.getName(), is("Test"));
161
162 YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
163 assertThat(yangIdentity.getName(), is("tunnel"));
164
165 YangTypeDef typedef = (YangTypeDef) yangNode.getChild().getNextSibling();
166 assertThat(typedef.getName(), is("type15"));
167
168 YangType type = typedef.getTypeList().iterator().next();
169 assertThat(type.getDataType(), is(YangDataTypes.IDENTITYREF));
170 assertThat(type.getDataTypeName(), is("identityref"));
171
172 YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
173 assertThat(identityRef.getName(), is("tunnel"));
174 assertThat(identityRef.getBaseIdentity().getName(), is("tunnel"));
175
176 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
177 YangLeaf leafInfo = leafIterator.next();
178
179 assertThat(leafInfo.getName(), is("tunnel-value"));
janani bc27947a2016-10-19 01:17:40 +0530180 assertThat(leafInfo.getDataType().getDataTypeName(), is("type15"));
181 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED));
182
183 YangDerivedInfo info = (YangDerivedInfo) leafInfo.getDataType()
184 .getDataTypeExtendedInfo();
185 assertThat(info.getEffectiveBuiltInType(), is(IDENTITYREF));
186 YangType type1 = info.getReferredTypeDef().getTypeList().get(0);
187 YangIdentityRef idRef1 =
188 (YangIdentityRef) type1.getDataTypeExtendedInfo();
189 assertThat(idRef1.getName(), is("tunnel"));
190 assertThat(idRef1.getBaseIdentity().getName(), is("tunnel"));
191 assertThat(idRef1.getReferredIdentity().getName(), is("tunnel"));
192 assertThat(idRef1.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
193 }
Shankara-Huawei234cd092016-07-14 11:35:34 +0530194
195 /**
196 * Checks for updating datamodel for unresolved status of identityref used in tydedef.
197 */
198 @Test
199 public void processIdentityUnresolvedTypedefStatement() throws IOException, ParserException {
200
201 YangNode node = manager.getDataModel("src/test/resources/IdentityTypedefUnresolved.yang");
202
203 // Check whether the data model tree returned is of type module.
204 assertThat((node instanceof YangModule), is(true));
205
206 // Check whether the node type is set properly to module.
207 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
208
209 // Check whether the module name is set correctly.
210 YangModule yangNode = (YangModule) node;
211 assertThat(yangNode.getName(), is("Test"));
212
213 YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
214 assertThat(yangIdentity.getName(), is("tunnel"));
215
216 YangTypeDef typedef = (YangTypeDef) yangNode.getChild().getNextSibling();
217 assertThat(typedef.getName(), is("type15"));
218
219 YangType type = typedef.getTypeList().iterator().next();
220 assertThat(type.getDataType(), is(YangDataTypes.IDENTITYREF));
221 assertThat(type.getDataTypeName(), is("identityref"));
222
janani bc27947a2016-10-19 01:17:40 +0530223 YangIdentityRef idRef =
224 (YangIdentityRef) type.getDataTypeExtendedInfo();
225 assertThat(idRef.getName(), is("tunnel"));
226 assertThat(idRef.getBaseIdentity().getName(), is("tunnel"));
227 assertThat(idRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
Shankara-Huawei234cd092016-07-14 11:35:34 +0530228
229 }
230}