Remove Augmentation{Identifier,Node}
[yangtools.git] / data / yang-data-tree-ri / src / test / java / org / opendaylight / yangtools / yang / data / tree / leafref / YT821Test.java
1 /*
2  * Copyright (c) 2018 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.yangtools.yang.data.tree.leafref;
9
10 import org.junit.AfterClass;
11 import org.junit.Before;
12 import org.junit.BeforeClass;
13 import org.junit.Test;
14 import org.opendaylight.yangtools.yang.common.QName;
15 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
16 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
17 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
18 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
19 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
20 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
21 import org.opendaylight.yangtools.yang.data.tree.api.DataTree;
22 import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate;
23 import org.opendaylight.yangtools.yang.data.tree.api.DataTreeConfiguration;
24 import org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification;
25 import org.opendaylight.yangtools.yang.data.tree.impl.di.InMemoryDataTreeFactory;
26 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
27 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
28
29 public class YT821Test {
30     private static final QName ROOT = QName.create("urn:opendaylight:params:xml:ns:yang:foo", "2018-07-18", "root");
31     private static final QName FOO = QName.create(ROOT, "foo");
32     private static final QName BAR = QName.create(ROOT, "bar");
33     private static final QName NAME = QName.create(ROOT, "name");
34     private static final QName CONTAINER_IN_LIST = QName.create(ROOT, "container-in-list");
35     private static final QName REF_FROM_AUG = QName.create(ROOT, "ref-from-aug");
36     private static final QName CONTAINER_FROM_AUG = QName.create(ROOT, "container-from-aug");
37     private static final QName REF_IN_CONTAINER = QName.create(ROOT, "ref-in-container");
38     private static final YangInstanceIdentifier ROOT_ID = YangInstanceIdentifier.of(ROOT);
39
40     private static EffectiveModelContext schemaContext;
41     private static LeafRefContext leafRefContext;
42
43     private DataTree dataTree;
44
45     @BeforeClass
46     public static void beforeClass() {
47         schemaContext = YangParserTestUtils.parseYangResource("/yt821.yang");
48         leafRefContext = LeafRefContext.create(schemaContext);
49     }
50
51     @AfterClass
52     public static void afterClass() {
53         schemaContext = null;
54         leafRefContext = null;
55     }
56
57     @Before
58     public void before() {
59         dataTree = new InMemoryDataTreeFactory().create(DataTreeConfiguration.DEFAULT_CONFIGURATION, schemaContext);
60     }
61
62     @Test
63     public void testValidRefFromAugmentation() throws Exception {
64         final DataTreeModification writeModification = dataTree.takeSnapshot().newModification();
65         writeModification.write(ROOT_ID, refFromAug("foo1"));
66         writeModification.ready();
67         final DataTreeCandidate writeContributorsCandidate = dataTree.prepare(writeModification);
68
69         LeafRefValidation.validate(writeContributorsCandidate, leafRefContext);
70         dataTree.commit(writeContributorsCandidate);
71     }
72
73     @Test(expected = LeafRefDataValidationFailedException.class)
74     public void testInvalidRefFromAugmentation() throws Exception {
75         final DataTreeModification writeModification = dataTree.takeSnapshot().newModification();
76         writeModification.write(ROOT_ID, refFromAug("foo2"));
77         writeModification.ready();
78         final DataTreeCandidate writeContributorsCandidate = dataTree.prepare(writeModification);
79
80         LeafRefValidation.validate(writeContributorsCandidate, leafRefContext);
81     }
82
83     @Test
84     public void testValidRefInContainerFromAugmentation() throws Exception {
85         final DataTreeModification writeModification = dataTree.takeSnapshot().newModification();
86         writeModification.write(ROOT_ID, refInContainer("foo1"));
87         writeModification.ready();
88         final DataTreeCandidate writeContributorsCandidate = dataTree.prepare(writeModification);
89
90         LeafRefValidation.validate(writeContributorsCandidate, leafRefContext);
91         dataTree.commit(writeContributorsCandidate);
92     }
93
94     @Test(expected = LeafRefDataValidationFailedException.class)
95     public void testInvalidRefInContainerFromAugmentation() throws Exception {
96         final DataTreeModification writeModification = dataTree.takeSnapshot().newModification();
97         writeModification.write(ROOT_ID, refInContainer("foo2"));
98         writeModification.ready();
99         final DataTreeCandidate writeContributorsCandidate = dataTree.prepare(writeModification);
100
101         LeafRefValidation.validate(writeContributorsCandidate, leafRefContext);
102     }
103
104     private static ContainerNode refFromAug(final String refValue) {
105         return Builders.containerBuilder()
106                 .withNodeIdentifier(new NodeIdentifier(ROOT))
107                 .withChild(Builders.mapBuilder()
108                     .withNodeIdentifier(new NodeIdentifier(FOO))
109                     .withChild(Builders.mapEntryBuilder()
110                         .withNodeIdentifier(NodeIdentifierWithPredicates.of(FOO, NAME, "foo1"))
111                         .withChild(ImmutableNodes.leafNode(NAME, "foo1"))
112                         .build())
113                     .build())
114                 .withChild(Builders.mapBuilder()
115                     .withNodeIdentifier(new NodeIdentifier(BAR))
116                     .withChild(Builders.mapEntryBuilder()
117                         .withNodeIdentifier(NodeIdentifierWithPredicates.of(BAR, NAME, "bar1"))
118                         .withChild(ImmutableNodes.leafNode(NAME, "bar1"))
119                         .withChild(Builders.containerBuilder()
120                             .withNodeIdentifier(new NodeIdentifier(CONTAINER_IN_LIST))
121                             .withChild(ImmutableNodes.leafNode(REF_FROM_AUG, refValue))
122                             .build())
123                         .build())
124                     .build())
125                 .build();
126     }
127
128     private static ContainerNode refInContainer(final String refValue) {
129         return Builders.containerBuilder()
130                 .withNodeIdentifier(new NodeIdentifier(ROOT))
131                 .withChild(Builders.mapBuilder()
132                     .withNodeIdentifier(new NodeIdentifier(FOO))
133                     .withChild(Builders.mapEntryBuilder()
134                         .withNodeIdentifier(NodeIdentifierWithPredicates.of(FOO, NAME, "foo1"))
135                         .withChild(ImmutableNodes.leafNode(NAME, "foo1"))
136                         .build())
137                     .build())
138                 .withChild(Builders.mapBuilder()
139                     .withNodeIdentifier(new NodeIdentifier(BAR))
140                     .withChild(Builders.mapEntryBuilder()
141                         .withNodeIdentifier(NodeIdentifierWithPredicates.of(BAR, NAME, "bar1"))
142                         .withChild(ImmutableNodes.leafNode(NAME, "bar1"))
143                         .withChild(Builders.containerBuilder()
144                             .withNodeIdentifier(new NodeIdentifier(CONTAINER_FROM_AUG))
145                             .withChild(ImmutableNodes.leafNode(REF_IN_CONTAINER, refValue))
146                             .build())
147                         .build())
148                     .build())
149                 .build();
150     }
151 }