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