blob: 9846d0a07a95ff9275db76fc14ad476f5805f457 [file] [log] [blame]
sonu gupta1bb37b82016-11-11 16:51:18 +05301/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
Ray Milkey2d572dd2017-04-14 10:01:24 -07003 *
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.
sonu gupta1bb37b82016-11-11 16:51:18 +053015 */
16
17package org.onosproject.yms.app.ydt;
18
19import org.junit.Test;
20
21import java.util.HashSet;
22import java.util.Set;
23
sonu gupta1bb37b82016-11-11 16:51:18 +053024import static org.onosproject.yms.app.ydt.YdtAppNodeOperationType.BOTH;
sonu gupta1bb37b82016-11-11 16:51:18 +053025import static org.onosproject.yms.app.ydt.YdtTestConstants.A2L;
sonu gupta1bb37b82016-11-11 16:51:18 +053026import static org.onosproject.yms.app.ydt.YdtTestConstants.A5L;
sonu gupta1bb37b82016-11-11 16:51:18 +053027import static org.onosproject.yms.app.ydt.YdtTestConstants.A6L;
28import static org.onosproject.yms.app.ydt.YdtTestConstants.AUG1;
sonu gupta1bb37b82016-11-11 16:51:18 +053029import static org.onosproject.yms.app.ydt.YdtTestConstants.IETF;
sonu guptaeff184b2016-11-24 12:43:49 +053030import static org.onosproject.yms.app.ydt.YdtTestConstants.NETNS;
sonu gupta1bb37b82016-11-11 16:51:18 +053031import static org.onosproject.yms.app.ydt.YdtTestConstants.SLINK;
32import static org.onosproject.yms.app.ydt.YdtTestConstants.STP;
33import static org.onosproject.yms.app.ydt.YdtTestConstants.TOPONS;
34import static org.onosproject.yms.app.ydt.YdtTestUtils.augmentNetworkYdt;
35import static org.onosproject.yms.app.ydt.YdtTestUtils.validateAppLogicalNodeContents;
36import static org.onosproject.yms.app.ydt.YdtTestUtils.validateAppModuleNodeContents;
37import static org.onosproject.yms.app.ydt.YdtTestUtils.validateAppNodeContents;
38import static org.onosproject.yms.app.ydt.YdtTestUtils.validateLeafContents;
39import static org.onosproject.yms.app.ydt.YdtTestUtils.validateLeafListContents;
40import static org.onosproject.yms.app.ydt.YdtTestUtils.validateNodeContents;
41import static org.onosproject.yms.app.ydt.YdtTestUtils.walkINTree;
42import static org.onosproject.yms.ydt.YdtContextOperationType.DELETE;
43import static org.onosproject.yms.ydt.YdtContextOperationType.MERGE;
44
45public class AugmentTest {
46
47 private Set<String> valueSet = new HashSet();
48
49 private static final String[] EXPECTED = {
50 "Entry Node is yms-ietf-network.",
51 "Entry Node is yms-ietf-network.",
52 "Entry Node is networks.",
53 "Entry Node is network.",
54 "Entry Node is network-id.",
55 "Exit Node is network-id.",
56 "Entry Node is link.",
57 "Entry Node is link-id.",
58 "Exit Node is link-id.",
59 "Entry Node is source.",
60 "Entry Node is source-node.",
61 "Exit Node is source-node.",
62 "Entry Node is source-tp.",
63 "Exit Node is source-tp.",
64 "Exit Node is source.",
65
66 "Entry Node is destination.",
67 "Entry Node is dest-node.",
68 "Exit Node is dest-node.",
69 "Entry Node is dest-tp.",
70 "Exit Node is dest-tp.",
71 "Exit Node is destination.",
72
73 "Entry Node is supporting-link.",
74 "Entry Node is network-ref.",
75 "Exit Node is network-ref.",
76 "Entry Node is link-ref.",
77 "Exit Node is link-ref.",
78 "Exit Node is supporting-link.",
79
80 "Entry Node is supporting-link.",
81 "Entry Node is network-ref.",
82 "Exit Node is network-ref.",
83 "Entry Node is link-ref.",
84 "Exit Node is link-ref.",
85 "Exit Node is supporting-link.",
86
87 "Entry Node is augment1.",
88 "Entry Node is value1.",
89 "Exit Node is value1.",
90 "Exit Node is augment1.",
91
92 "Entry Node is augment2.",
93 "Entry Node is key1.",
94 "Exit Node is key1.",
95 "Entry Node is key2.",
96 "Exit Node is key2.",
97
98 "Entry Node is augment5.",
99
100 "Entry Node is augment6leafList.",
101 "Exit Node is augment6leafList.",
102
103 "Entry Node is value5.",
104 "Exit Node is value5.",
105 "Exit Node is augment5.",
106
107 "Entry Node is augment5leafList.",
108 "Exit Node is augment5leafList.",
109
110 "Entry Node is augment3.",
111
112 "Entry Node is augment4.",
113 "Entry Node is value4.",
114 "Exit Node is value4.",
115 "Exit Node is augment4.",
116
117 "Entry Node is augment5.",
118
119 "Entry Node is leaf6.",
120 "Exit Node is leaf6.",
121
122 "Entry Node is value5.",
123 "Exit Node is value5.",
124 "Exit Node is augment5.",
125
126 "Entry Node is augment6.",
127 "Entry Node is value6.",
128 "Exit Node is value6.",
129 "Exit Node is augment6.",
130
131 "Entry Node is value3.",
132 "Exit Node is value3.",
133 "Exit Node is augment3.",
134
135 "Entry Node is augment3leaf.",
136 "Exit Node is augment3leaf.",
137
138 "Exit Node is augment2.",
139
140 "Entry Node is augment2leafList.",
141 "Exit Node is augment2leafList.",
142
143 "Exit Node is link.",
144
145 "Entry Node is supporting-network.",
146 "Entry Node is network-ref.",
147 "Exit Node is network-ref.",
148 "Exit Node is supporting-network.",
149 "Entry Node is node.",
150 "Entry Node is node-id.",
151 "Exit Node is node-id.",
152 "Entry Node is t-point.",
153 "Entry Node is tp-id.",
154 "Exit Node is tp-id.",
155
156 "Entry Node is supporting-termination-point.",
157 "Entry Node is network-ref.",
158 "Exit Node is network-ref.",
159 "Entry Node is node-ref.",
160 "Exit Node is node-ref.",
161 "Entry Node is tp-ref.",
162 "Exit Node is tp-ref.",
163
164 "Entry Node is augment1.",
165 "Entry Node is value1.",
166 "Exit Node is value1.",
167 "Exit Node is augment1.",
168
169 "Entry Node is augment1-leaf.",
170 "Exit Node is augment1-leaf.",
171
172 "Entry Node is augment2.",
173
174 "Entry Node is augment3.",
175 "Entry Node is value3.",
176 "Exit Node is value3.",
177 "Exit Node is augment3.",
178
179 "Entry Node is augment4leaf.",
180 "Exit Node is augment4leaf.",
181
182 "Entry Node is value2.",
183 "Exit Node is value2.",
184 "Exit Node is augment2.",
185 "Entry Node is augment2leafList.",
186 "Exit Node is augment2leafList.",
187 "Entry Node is augment2leaf.",
188 "Exit Node is augment2leaf.",
189
190 "Exit Node is supporting-termination-point.",
191 "Exit Node is t-point.",
192 "Entry Node is supporting-node.",
193 "Entry Node is network-ref.",
194 "Exit Node is network-ref.",
195 "Entry Node is node-ref.",
196 "Exit Node is node-ref.",
197 "Exit Node is supporting-node.",
198
199 "Exit Node is node.",
200 // last augmented sibling in network
201 "Entry Node is link-id.",
202 "Exit Node is link-id.",
203
204 "Exit Node is network.",
205 "Exit Node is networks.",
206 "Entry Node is networks-state.",
207 "Entry Node is network.",
208 "Entry Node is network-ref.",
209 "Exit Node is network-ref.",
210 "Entry Node is server-provided.",
211 "Exit Node is server-provided.",
212 "Exit Node is network.",
213 "Exit Node is networks-state.",
214 "Exit Node is yms-ietf-network.",
sonu guptaeff184b2016-11-24 12:43:49 +0530215
216 "Entry Node is augmentNetwork.",
217 "Entry Node is node.",
218 "Entry Node is name.",
219 "Exit Node is name.",
220 "Entry Node is cont1s.",
221 "Entry Node is cont1s.",
222 "Entry Node is fine.",
223 "Exit Node is fine.",
224
225 // augmenting node augment1 under cont1s
226 "Entry Node is augment1.",
227 "Entry Node is value1.",
228 "Exit Node is value1.",
229 "Exit Node is augment1.",
230
231 "Exit Node is cont1s.",
232 "Exit Node is cont1s.",
233 "Exit Node is node.",
234 "Exit Node is augmentNetwork.",
235
sonu gupta1bb37b82016-11-11 16:51:18 +0530236 "Exit Node is yms-ietf-network."
237 };
238
239 /**
240 * Creates and validates ietf network augment ydt.
241 */
242 @Test
243 public void augmentTest() {
244 YangRequestWorkBench ydtBuilder = augmentNetworkYdt();
245 validateTree(ydtBuilder);
246 validateAppTree(ydtBuilder);
247 walkINTree(ydtBuilder, EXPECTED);
248 }
249
250 /**
251 * Validates the given built ydt.
252 */
253 private void validateTree(YangRequestWorkBench ydtBuilder) {
254
255 // Assign root node to ydtNode for validating purpose.
256 YdtNode ydtNode = (YdtNode) ydtBuilder.getRootNode();
257 // Logical root node does not have operation type
258 validateNodeContents(ydtNode, "yms-ietf-network", null);
259 ydtNode = ydtNode.getFirstChild();
260 validateNodeContents(ydtNode, "yms-ietf-network", MERGE);
261 ydtNode = ydtNode.getFirstChild();
262 validateNodeContents(ydtNode, "networks", MERGE);
263 ydtNode = ydtNode.getFirstChild();
264 validateNodeContents(ydtNode, "network", MERGE);
265 ydtNode = ydtNode.getFirstChild();
266 validateLeafContents(ydtNode, "network-id", "network1");
267 ydtNode = ydtNode.getNextSibling();
268
269 // Validating augmented child
270 validateNodeContents(ydtNode, "link", MERGE);
271 ydtNode = ydtNode.getFirstChild();
272 validateLeafContents(ydtNode, "link-id", "id1");
273 ydtNode = ydtNode.getNextSibling();
274
275 // Inside source node
276 validateNodeContents(ydtNode, "source", MERGE);
277 ydtNode = ydtNode.getFirstChild();
278 validateLeafContents(ydtNode, "source-node", "source1");
279 ydtNode = ydtNode.getNextSibling();
280 validateLeafContents(ydtNode, "source-tp", "source2");
281 ydtNode = ydtNode.getParent();
282 ydtNode = ydtNode.getNextSibling();
283
284 //Inside destination node
285 validateNodeContents(ydtNode, "destination", MERGE);
286 ydtNode = ydtNode.getFirstChild();
287 validateLeafContents(ydtNode, "dest-node", "dest1");
288 ydtNode = ydtNode.getNextSibling();
289 validateLeafContents(ydtNode, "dest-tp", "dest2");
290 ydtNode = ydtNode.getParent();
291 ydtNode = ydtNode.getNextSibling();
292
293 //Inside supporting links
294 validateNodeContents(ydtNode, SLINK, MERGE);
295 ydtNode = ydtNode.getFirstChild();
296 validateLeafContents(ydtNode, "network-ref", "network1");
297 ydtNode = ydtNode.getNextSibling();
298 validateLeafContents(ydtNode, "link-ref", "id2");
299 ydtNode = ydtNode.getParent();
300 ydtNode = ydtNode.getNextSibling();
301
302 //Inside another supporting links instance
303 validateNodeContents(ydtNode, SLINK, MERGE);
304 ydtNode = ydtNode.getFirstChild();
305 validateLeafContents(ydtNode, "network-ref", "network2");
306 ydtNode = ydtNode.getNextSibling();
307 validateLeafContents(ydtNode, "link-ref", "id3");
308 ydtNode = ydtNode.getParent();
309 ydtNode = ydtNode.getNextSibling();
310
311 validateNodeContents(ydtNode, "augment1", MERGE);
312 ydtNode = ydtNode.getFirstChild();
313 validateLeafContents(ydtNode, "value1", "1");
314 ydtNode = ydtNode.getParent();
315
316 ydtNode = ydtNode.getNextSibling();
317 validateNodeContents(ydtNode, "augment2", MERGE);
318 ydtNode = ydtNode.getFirstChild();
319 validateLeafContents(ydtNode, "key1", "1");
320 ydtNode = ydtNode.getNextSibling();
321 validateLeafContents(ydtNode, "key2", "2");
322
323 ydtNode = ydtNode.getNextSibling();
324 validateNodeContents(ydtNode, "augment5", DELETE);
325 ydtNode = ydtNode.getFirstChild();
326 valueSet.add("1");
327 valueSet.add("2");
328 validateLeafListContents(ydtNode, A6L, valueSet);
329 ydtNode = ydtNode.getNextSibling();
330
331 validateLeafContents(ydtNode, "value5", "5");
332 ydtNode = ydtNode.getParent();
333
334 ydtNode = ydtNode.getNextSibling();
335 validateLeafListContents(ydtNode, A5L, valueSet);
336
337 ydtNode = ydtNode.getNextSibling();
338 validateNodeContents(ydtNode, "augment3", MERGE);
339 ydtNode = ydtNode.getFirstChild();
340
341 validateNodeContents(ydtNode, "augment4", DELETE);
342 ydtNode = ydtNode.getFirstChild();
343 validateLeafContents(ydtNode, "value4", "4");
344 ydtNode = ydtNode.getParent();
345 ydtNode = ydtNode.getNextSibling();
346
347 validateNodeContents(ydtNode, "augment5", MERGE);
348 ydtNode = ydtNode.getFirstChild();
349
350 validateLeafContents(ydtNode, "leaf6", "6");
351 ydtNode = ydtNode.getNextSibling();
352
353 validateLeafContents(ydtNode, "value5", "5");
354 ydtNode = ydtNode.getParent();
355 ydtNode = ydtNode.getNextSibling();
356
357 validateNodeContents(ydtNode, "augment6", DELETE);
358 ydtNode = ydtNode.getFirstChild();
359 validateLeafContents(ydtNode, "value6", "6");
360 ydtNode = ydtNode.getParent();
361 ydtNode = ydtNode.getNextSibling();
362
363 validateLeafContents(ydtNode, "value3", "3");
364 ydtNode = ydtNode.getParent();
365 ydtNode = ydtNode.getNextSibling();
366 validateLeafContents(ydtNode, "augment3leaf", "3");
367
368 ydtNode = ydtNode.getParent();
369
370 ydtNode = ydtNode.getNextSibling();
371 validateLeafListContents(ydtNode, A2L, valueSet);
372
373 ydtNode = ydtNode.getParent();
374
375 ydtNode = ydtNode.getNextSibling();
376 validateNodeContents(ydtNode, "supporting-network", MERGE);
377 ydtNode = ydtNode.getFirstChild();
378 validateLeafContents(ydtNode, "network-ref", "network2");
379 ydtNode = ydtNode.getParent();
380
381 ydtNode = ydtNode.getNextSibling();
382 validateNodeContents(ydtNode, "node", MERGE);
383 ydtNode = ydtNode.getFirstChild();
384 validateLeafContents(ydtNode, "node-id", "node1");
385 ydtNode = ydtNode.getNextSibling();
386
387 //Inside termination-point
388 validateNodeContents(ydtNode, "t-point", MERGE);
389 ydtNode = ydtNode.getFirstChild();
390 validateLeafContents(ydtNode, "tp-id", "tp_id1");
391 ydtNode = ydtNode.getNextSibling();
392
393 validateTerminationPointAugment(ydtNode);
394 }
395
396 /**
397 * Validates the termination point node in given built ydt.
398 */
399 private void validateTerminationPointAugment(YdtNode ydtNode) {
400
401 //Inside supporting-termination-point
402 validateNodeContents(ydtNode, STP, MERGE);
403 ydtNode = ydtNode.getFirstChild();
404 validateLeafContents(ydtNode, "network-ref", "network-ref");
405 ydtNode = ydtNode.getNextSibling();
406 validateLeafContents(ydtNode, "node-ref", "node-ref");
407 ydtNode = ydtNode.getNextSibling();
408 validateLeafContents(ydtNode, "tp-ref", "tp-ref");
409
410 ydtNode = ydtNode.getNextSibling();
411 validateNodeContents(ydtNode, "augment1", MERGE);
412 ydtNode = ydtNode.getFirstChild();
413 validateLeafContents(ydtNode, "value1", "1");
414 ydtNode = ydtNode.getParent();
415
416 ydtNode = ydtNode.getNextSibling();
417 validateLeafContents(ydtNode, "augment1-leaf", "1");
418
419 ydtNode = ydtNode.getNextSibling();
420 validateNodeContents(ydtNode, "augment2", MERGE);
421 ydtNode = ydtNode.getFirstChild();
422
423 validateNodeContents(ydtNode, "augment3", MERGE);
424 ydtNode = ydtNode.getFirstChild();
425 validateLeafContents(ydtNode, "value3", "3");
426 ydtNode = ydtNode.getParent();
427
428 ydtNode = ydtNode.getNextSibling();
429 validateLeafContents(ydtNode, "augment4leaf", "4");
430
431 ydtNode = ydtNode.getNextSibling();
432 validateLeafContents(ydtNode, "value2", "2");
433 ydtNode = ydtNode.getParent();
434 ydtNode = ydtNode.getNextSibling();
435 validateLeafListContents(ydtNode, A2L, valueSet);
436
437 ydtNode = ydtNode.getNextSibling();
438 validateLeafContents(ydtNode, "augment2leaf", "2");
439
440 ydtNode = ydtNode.getParent();
441 ydtNode = ydtNode.getParent();
442
443 ydtNode = ydtNode.getNextSibling();
444 validateNodeContents(ydtNode, "supporting-node", MERGE);
445 ydtNode = ydtNode.getFirstChild();
446 validateLeafContents(ydtNode, "network-ref", "network3");
447 ydtNode = ydtNode.getNextSibling();
448 validateLeafContents(ydtNode, "node-ref", "network4");
449
450 ydtNode = ydtNode.getParent().getParent();
451
452 ydtNode = ydtNode.getNextSibling();
453 validateLeafContents(ydtNode, "link-id", "id1");
454 ydtNode = ydtNode.getParent().getParent();
455
456 ydtNode = ydtNode.getNextSibling();
457 validateNodeContents(ydtNode, "networks-state", MERGE);
458 ydtNode = ydtNode.getFirstChild();
459 validateNodeContents(ydtNode, "network", MERGE);
460 ydtNode = ydtNode.getFirstChild();
461 validateLeafContents(ydtNode, "network-ref", "network5");
462 ydtNode = ydtNode.getNextSibling();
463 validateLeafContents(ydtNode, "server-provided", "true");
sonu guptaeff184b2016-11-24 12:43:49 +0530464 ydtNode = ydtNode.getParent().getParent().getParent();
465
466 validateAugmentNetworkModule(ydtNode);
467 }
468
469 /**
470 * Validates the given built ydt for augment network module.
471 */
472 private void validateAugmentNetworkModule(YdtNode ydtNode) {
473
474 ydtNode = ydtNode.getNextSibling();
475 //augmenting network module node
476 validateNodeContents(ydtNode, "augmentNetwork", MERGE);
477 ydtNode = ydtNode.getFirstChild();
478 validateNodeContents(ydtNode, "node", MERGE);
479 ydtNode = ydtNode.getFirstChild();
480 validateLeafContents(ydtNode, "name", "node1");
481 ydtNode = ydtNode.getNextSibling();
482 validateNodeContents(ydtNode, "cont1s", MERGE);
483 ydtNode = ydtNode.getFirstChild();
484 validateNodeContents(ydtNode, "cont1s", MERGE);
485 ydtNode = ydtNode.getFirstChild();
486 validateLeafContents(ydtNode, "fine", "leaf");
487
488 // checking augmenting node augment1
489 ydtNode = ydtNode.getNextSibling();
490 validateNodeContents(ydtNode, "augment1", DELETE);
491 ydtNode = ydtNode.getFirstChild();
492 validateLeafContents(ydtNode, "value1", "1");
sonu gupta1bb37b82016-11-11 16:51:18 +0530493 }
494
495 /**
496 * Validates the given built ydt application tree.
497 */
498 private void validateAppTree(YangRequestWorkBench ydtBuilder) {
499
500 // Assign root node to ydtNode for validating purpose.
501 YdtAppContext ydtAppContext = ydtBuilder.getAppRootNode();
502 // Logical root node does not have operation type
503 validateAppLogicalNodeContents(ydtAppContext);
504 ydtAppContext = ydtAppContext.getFirstChild();
505 validateAppModuleNodeContents(ydtAppContext, IETF, BOTH);
506 ydtAppContext = ydtAppContext.getFirstChild();
507
508 //Inside link node
509 validateAppNodeContents(ydtAppContext, AUG1, TOPONS, BOTH);
sonu gupta1bb37b82016-11-11 16:51:18 +0530510
511 ydtAppContext = ydtAppContext.getParent();
sonu guptaeff184b2016-11-24 12:43:49 +0530512 validateAugmentNetworkAppTree(ydtAppContext);
513 }
514
515 /**
516 * Validates the given built ydt application tree for augmenting network
517 * module.
518 */
519 private void validateAugmentNetworkAppTree(YdtAppContext ydtAppContext) {
sonu gupta1bb37b82016-11-11 16:51:18 +0530520
521 ydtAppContext = ydtAppContext.getNextSibling();
sonu guptaeff184b2016-11-24 12:43:49 +0530522 //augmenting network module node
523 validateAppModuleNodeContents(ydtAppContext, "augmentNetwork", BOTH);
sonu gupta1bb37b82016-11-11 16:51:18 +0530524 ydtAppContext = ydtAppContext.getFirstChild();
sonu guptaeff184b2016-11-24 12:43:49 +0530525 validateAppNodeContents(ydtAppContext, "/node", NETNS, BOTH);
sonu gupta1bb37b82016-11-11 16:51:18 +0530526 }
527}