blob: b0ae93766351f32c475d14a8305170788bab7d4d [file] [log] [blame]
Shankara-Huaweidf7b9ca2016-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;
21import org.onosproject.yangutils.datamodel.YangIdentity;
22import org.onosproject.yangutils.datamodel.YangIdentityRef;
23import org.onosproject.yangutils.datamodel.YangLeaf;
24import org.onosproject.yangutils.datamodel.YangLeafList;
25import org.onosproject.yangutils.datamodel.YangModule;
26import org.onosproject.yangutils.datamodel.YangNode;
27import org.onosproject.yangutils.datamodel.YangNodeType;
28import org.onosproject.yangutils.datamodel.YangType;
29import org.onosproject.yangutils.datamodel.YangTypeDef;
30import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
31import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
32import org.onosproject.yangutils.parser.exceptions.ParserException;
33import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
34
35import java.io.IOException;
36import java.util.ListIterator;
37
38import static org.hamcrest.MatcherAssert.assertThat;
39import static org.hamcrest.core.Is.is;
40
41/**
42 * Test case for identity listener.
43 */
44public class IdentityListenerTest {
45 @Rule
46 public ExpectedException thrown = ExpectedException.none();
47
48 private final YangUtilsParserManager manager = new YangUtilsParserManager();
49
50 /**
51 * Checks for updating datamodel for identity/identityref.
52 */
53 @Test
54 public void processIdentityrefType() throws IOException, ParserException {
55
56 YangNode node = manager
57 .getDataModel("src/test/resources/IdentityListener.yang");
58
59 // Check whether the data model tree returned is of type module.
60 assertThat((node instanceof YangModule), is(true));
61
62 // Check whether the node type is set properly to module.
63 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
64
65 // Check whether the module name is set correctly.
66 YangModule yangNode = (YangModule) node;
67 assertThat(yangNode.getName(), is("IdentityListener"));
68
69 YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
70 assertThat(yangIdentity.getName(), is("tunnel"));
71
72 yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
73 assertThat(yangIdentity.getName(), is("tunnel-type"));
74
75 yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling().getNextSibling();
76 assertThat(yangIdentity.getName(), is("ref-address-family"));
77
78 yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling().getNextSibling()
79 .getNextSibling();
80 assertThat(yangIdentity.getName(), is("ipv4-address-family"));
81 assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
82 assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
83
84 yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling().getNextSibling()
85 .getNextSibling().getNextSibling();
86 assertThat(yangIdentity.getName(), is("ipv6-address-family"));
87 assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
88 assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
89 assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
90
91 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
92 YangLeaf leafInfo = leafIterator.next();
93
94 assertThat(leafInfo.getName(), is("tunnel"));
95 assertThat(leafInfo.getDataType().getDataTypeName(), is("identityref"));
96 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
97 YangIdentityRef yangIdentityRef = (YangIdentityRef) leafInfo.getDataType().getDataTypeExtendedInfo();
98 assertThat(yangIdentityRef.getName(), is("ref-address-family"));
99 assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
100 assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
101 assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
102
103 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
104 YangLeafList leafListInfo = leafListIterator.next();
105
106 // Check whether the information in the leaf is correct.
107 assertThat(leafListInfo.getName(), is("network-ref"));
108 assertThat(leafListInfo.getDataType().getDataTypeName(), is("identityref"));
109 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
110 yangIdentityRef = (YangIdentityRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
111
112 // Check whether identityref type got resolved.
113 assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
114 }
115
116 /**
117 * Checks for updating datamodel for intrafile resolution identity/identityref.
118 */
119 @Test
120 public void processIntraIdentityrefType() throws IOException, ParserException {
121
122 YangNode node = manager
123 .getDataModel("src/test/resources/IdentityIntraFile.yang");
124
125 // Check whether the data model tree returned is of type module.
126 assertThat((node instanceof YangModule), is(true));
127
128 // Check whether the node type is set properly to module.
129 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
130
131 // Check whether the module name is set correctly.
132 YangModule yangNode = (YangModule) node;
133 assertThat(yangNode.getName(), is("IdentityIntraFile"));
134
135 YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
136 assertThat(yangIdentity.getName(), is("ipv4-address-family"));
137 assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
138 assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.INTRA_FILE_RESOLVED));
139 }
140
141 /**
142 * Checks for updating datamodel for identityref used in tydedef.
143 */
144 @Test
145 public void processIdentityTypedefStatement() throws IOException, ParserException {
146
147 YangNode node = manager.getDataModel("src/test/resources/IdentityTypedef.yang");
148
149 // Check whether the data model tree returned is of type module.
150 assertThat((node instanceof YangModule), is(true));
151
152 // Check whether the node type is set properly to module.
153 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
154
155 // Check whether the module name is set correctly.
156 YangModule yangNode = (YangModule) node;
157 assertThat(yangNode.getName(), is("Test"));
158
159 YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
160 assertThat(yangIdentity.getName(), is("tunnel"));
161
162 YangTypeDef typedef = (YangTypeDef) yangNode.getChild().getNextSibling();
163 assertThat(typedef.getName(), is("type15"));
164
165 YangType type = typedef.getTypeList().iterator().next();
166 assertThat(type.getDataType(), is(YangDataTypes.IDENTITYREF));
167 assertThat(type.getDataTypeName(), is("identityref"));
168
169 YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
170 assertThat(identityRef.getName(), is("tunnel"));
171 assertThat(identityRef.getBaseIdentity().getName(), is("tunnel"));
172
173 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
174 YangLeaf leafInfo = leafIterator.next();
175
176 assertThat(leafInfo.getName(), is("tunnel-value"));
177 assertThat(leafInfo.getDataType().getDataTypeName(), is("identityref"));
178 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
179 YangIdentityRef yangIdentityRef = (YangIdentityRef) leafInfo.getDataType().getDataTypeExtendedInfo();
180 assertThat(yangIdentityRef.getName(), is("tunnel"));
181 assertThat(yangIdentityRef.getBaseIdentity().getName(), is("tunnel"));
182 assertThat(yangIdentityRef.getReferredIdentity().getName(), is("tunnel"));
183 assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
184 }
185
186 /**
187 * Checks for updating datamodel for unresolved status of identityref used in tydedef.
188 */
189 @Test
190 public void processIdentityUnresolvedTypedefStatement() throws IOException, ParserException {
191
192 YangNode node = manager.getDataModel("src/test/resources/IdentityTypedefUnresolved.yang");
193
194 // Check whether the data model tree returned is of type module.
195 assertThat((node instanceof YangModule), is(true));
196
197 // Check whether the node type is set properly to module.
198 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
199
200 // Check whether the module name is set correctly.
201 YangModule yangNode = (YangModule) node;
202 assertThat(yangNode.getName(), is("Test"));
203
204 YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
205 assertThat(yangIdentity.getName(), is("tunnel"));
206
207 YangTypeDef typedef = (YangTypeDef) yangNode.getChild().getNextSibling();
208 assertThat(typedef.getName(), is("type15"));
209
210 YangType type = typedef.getTypeList().iterator().next();
211 assertThat(type.getDataType(), is(YangDataTypes.IDENTITYREF));
212 assertThat(type.getDataTypeName(), is("identityref"));
213
214 YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
215 assertThat(identityRef.getName(), is("tunnel"));
216 assertThat(identityRef.getBaseIdentity().getName(), is("tunnel"));
217 assertThat(identityRef.getResolvableStatus(), is(ResolvableStatus.UNRESOLVED));
218
219 }
220}