2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.fail;
14 import com.google.common.collect.ImmutableMap;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
19 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
20 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
21 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
22 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
23 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
24 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
25 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration;
26 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException;
27 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
28 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
29 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder;
30 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
31 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
32 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
34 public class Bug5968MergeTest {
35 private static final String NS = "foo";
36 private static final String REV = "2016-07-28";
37 private static final QName ROOT = QName.create(NS, REV, "root");
38 private static final QName MY_LIST = QName.create(NS, REV, "my-list");
39 private static final QName LIST_ID = QName.create(NS, REV, "list-id");
40 private static final QName MANDATORY_LEAF = QName.create(NS, REV, "mandatory-leaf");
41 private static final QName COMMON_LEAF = QName.create(NS, REV, "common-leaf");
42 private SchemaContext schemaContext;
45 public void init() throws ReactorException {
46 this.schemaContext = TestModel.createTestContext("/bug5968/foo.yang");
47 assertNotNull("Schema context must not be null.", this.schemaContext);
50 private static InMemoryDataTree initDataTree(final SchemaContext schemaContext, final boolean withMapNode)
51 throws DataValidationFailedException {
52 final InMemoryDataTree inMemoryDataTree = (InMemoryDataTree) InMemoryDataTreeFactory.getInstance().create(
53 DataTreeConfiguration.DEFAULT_CONFIGURATION);
54 inMemoryDataTree.setSchemaContext(schemaContext);
56 final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> root = Builders.containerBuilder()
57 .withNodeIdentifier(new NodeIdentifier(ROOT));
58 final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
59 modificationTree.merge(
60 YangInstanceIdentifier.of(ROOT),
61 withMapNode ? root.withChild(
62 Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(MY_LIST)).build()).build() : root
64 modificationTree.ready();
66 inMemoryDataTree.validate(modificationTree);
67 final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
68 inMemoryDataTree.commit(prepare);
70 return inMemoryDataTree;
73 private static InMemoryDataTree emptyDataTree(final SchemaContext schemaContext)
74 throws DataValidationFailedException {
75 final InMemoryDataTree inMemoryDataTree = (InMemoryDataTree) InMemoryDataTreeFactory.getInstance().create(
76 DataTreeConfiguration.DEFAULT_CONFIGURATION);
77 inMemoryDataTree.setSchemaContext(schemaContext);
79 return inMemoryDataTree;
83 public void mergeInvalidContainerTest() throws ReactorException, DataValidationFailedException {
84 final InMemoryDataTree inMemoryDataTree = emptyDataTree(schemaContext);
86 final MapNode myList = createMap(true);
87 final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> root = Builders.containerBuilder()
88 .withNodeIdentifier(new NodeIdentifier(ROOT)).withChild(myList);
90 final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
91 modificationTree.merge(YangInstanceIdentifier.of(ROOT), root.build());
94 modificationTree.ready();
95 inMemoryDataTree.validate(modificationTree);
96 final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
97 inMemoryDataTree.commit(prepare);
98 fail("Should fail due to missing mandatory leaf.");
99 } catch (final IllegalArgumentException e) {
101 "Node (foo?revision=2016-07-28)my-list[{(foo?revision=2016-07-28)list-id=1}] is missing mandatory "
102 + "descendant /(foo?revision=2016-07-28)mandatory-leaf", e.getMessage());
107 public void mergeInvalidMapTest() throws ReactorException, DataValidationFailedException {
108 final InMemoryDataTree inMemoryDataTree = emptyDataTree(schemaContext);
109 final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
110 mergeMap(modificationTree, true);
113 modificationTree.ready();
114 inMemoryDataTree.validate(modificationTree);
115 final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
116 inMemoryDataTree.commit(prepare);
117 fail("Should fail due to missing mandatory leaf.");
118 } catch (final IllegalArgumentException e) {
120 "Node (foo?revision=2016-07-28)my-list[{(foo?revision=2016-07-28)list-id=1}] is missing mandatory "
121 + "descendant /(foo?revision=2016-07-28)mandatory-leaf", e.getMessage());
126 public void mergeInvalidMapEntryTest() throws ReactorException, DataValidationFailedException {
127 final InMemoryDataTree inMemoryDataTree = initDataTree(schemaContext, true);
128 final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
130 mergeMapEntry(modificationTree, "1", null, "common-value");
133 modificationTree.ready();
134 inMemoryDataTree.validate(modificationTree);
135 final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
136 inMemoryDataTree.commit(prepare);
137 fail("Should fail due to missing mandatory leaf.");
138 } catch (final IllegalArgumentException e) {
140 "Node (foo?revision=2016-07-28)my-list[{(foo?revision=2016-07-28)list-id=1}] is missing mandatory "
141 + "descendant /(foo?revision=2016-07-28)mandatory-leaf", e.getMessage());
145 private static void mergeMap(final InMemoryDataTreeModification modificationTree,
146 final boolean mandatoryDataMissing) throws DataValidationFailedException {
147 final MapNode myList = createMap(mandatoryDataMissing);
148 modificationTree.merge(YangInstanceIdentifier.of(ROOT).node(MY_LIST), myList);
151 private static MapNode createMap(final boolean mandatoryDataMissing) throws DataValidationFailedException {
154 .withNodeIdentifier(new NodeIdentifier(MY_LIST))
156 mandatoryDataMissing ? createMapEntry("1", "common-value") : createMapEntry("1",
157 "mandatory-value", "common-value")).build();
160 private static void mergeMapEntry(final InMemoryDataTreeModification modificationTree, final Object listIdValue,
161 final Object mandatoryLeafValue, final Object commonLeafValue) throws DataValidationFailedException {
162 final MapEntryNode taskEntryNode = mandatoryLeafValue == null ? createMapEntry(listIdValue, commonLeafValue)
163 : createMapEntry(listIdValue, mandatoryLeafValue, commonLeafValue);
165 modificationTree.merge(
166 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
167 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, listIdValue))),
171 private static MapEntryNode createMapEntry(final Object listIdValue, final Object mandatoryLeafValue,
172 final Object commonLeafValue) throws DataValidationFailedException {
173 return Builders.mapEntryBuilder()
174 .withNodeIdentifier(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, listIdValue)))
175 .withChild(ImmutableNodes.leafNode(LIST_ID, listIdValue))
176 .withChild(ImmutableNodes.leafNode(MANDATORY_LEAF, mandatoryLeafValue))
177 .withChild(ImmutableNodes.leafNode(COMMON_LEAF, commonLeafValue)).build();
180 private static MapEntryNode createMapEntry(final Object listIdValue, final Object commonLeafValue)
181 throws DataValidationFailedException {
182 return Builders.mapEntryBuilder()
183 .withNodeIdentifier(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, listIdValue)))
184 .withChild(ImmutableNodes.leafNode(LIST_ID, listIdValue))
185 .withChild(ImmutableNodes.leafNode(COMMON_LEAF, commonLeafValue)).build();
188 private static MapEntryNode createMapEntryM(final Object listIdValue, final Object mandatoryLeafValue)
189 throws DataValidationFailedException {
190 return Builders.mapEntryBuilder()
191 .withNodeIdentifier(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, listIdValue)))
192 .withChild(ImmutableNodes.leafNode(LIST_ID, listIdValue))
193 .withChild(ImmutableNodes.leafNode(MANDATORY_LEAF, mandatoryLeafValue)).build();
197 public void mergeValidContainerTest() throws ReactorException, DataValidationFailedException {
198 final InMemoryDataTree inMemoryDataTree = emptyDataTree(schemaContext);
200 final MapNode myList = createMap(false);
201 final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> root = Builders.containerBuilder()
202 .withNodeIdentifier(new NodeIdentifier(ROOT)).withChild(myList);
204 final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
205 modificationTree.merge(YangInstanceIdentifier.of(ROOT), root.build());
206 modificationTree.ready();
207 inMemoryDataTree.validate(modificationTree);
208 final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
209 inMemoryDataTree.commit(prepare);
213 public void mergeValidMapTest() throws ReactorException, DataValidationFailedException {
214 final InMemoryDataTree inMemoryDataTree = emptyDataTree(schemaContext);
215 final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
216 mergeMap(modificationTree, false);
218 modificationTree.ready();
219 inMemoryDataTree.validate(modificationTree);
220 final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
221 inMemoryDataTree.commit(prepare);
225 public void mergeValidMapEntryTest() throws ReactorException, DataValidationFailedException {
226 final InMemoryDataTree inMemoryDataTree = initDataTree(schemaContext, true);
227 final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
229 mergeMapEntry(modificationTree, "1", "mandatory-value", "common-value");
231 modificationTree.ready();
232 inMemoryDataTree.validate(modificationTree);
233 final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
234 inMemoryDataTree.commit(prepare);
238 public void validMultiStepsMergeTest() throws ReactorException, DataValidationFailedException {
239 final InMemoryDataTree inMemoryDataTree = emptyDataTree(schemaContext);
240 final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
242 modificationTree.merge(YangInstanceIdentifier.of(ROOT), createContainerBuilder().build());
243 modificationTree.merge(YangInstanceIdentifier.of(ROOT).node(MY_LIST), createMapBuilder().build());
244 modificationTree.merge(
245 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
246 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
247 createEmptyMapEntryBuilder("1").build());
248 modificationTree.merge(
249 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
250 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
251 createMapEntry("1", "mandatory-value", "common-value"));
253 modificationTree.ready();
254 inMemoryDataTree.validate(modificationTree);
255 final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
256 inMemoryDataTree.commit(prepare);
260 public void invalidMultiStepsMergeTest() throws ReactorException, DataValidationFailedException {
261 final InMemoryDataTree inMemoryDataTree = emptyDataTree(schemaContext);
262 final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
264 modificationTree.merge(YangInstanceIdentifier.of(ROOT), createContainerBuilder().build());
265 modificationTree.merge(YangInstanceIdentifier.of(ROOT).node(MY_LIST), createMapBuilder().build());
266 modificationTree.merge(
267 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
268 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
269 createEmptyMapEntryBuilder("1").build());
270 modificationTree.merge(
271 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
272 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
273 createMapEntry("1", "common-value"));
276 modificationTree.ready();
277 inMemoryDataTree.validate(modificationTree);
278 final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
279 inMemoryDataTree.commit(prepare);
280 fail("Should fail due to missing mandatory leaf.");
281 } catch (final IllegalArgumentException e) {
283 "Node (foo?revision=2016-07-28)my-list[{(foo?revision=2016-07-28)list-id=1}] is missing mandatory "
284 + "descendant /(foo?revision=2016-07-28)mandatory-leaf", e.getMessage());
288 private static DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> createEmptyMapEntryBuilder(
289 final Object listIdValue) throws DataValidationFailedException {
290 return Builders.mapEntryBuilder()
291 .withNodeIdentifier(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, listIdValue)))
292 .withChild(ImmutableNodes.leafNode(LIST_ID, listIdValue));
295 private static CollectionNodeBuilder<MapEntryNode, MapNode> createMapBuilder() {
296 return Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(MY_LIST));
299 private static DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> createContainerBuilder() {
300 return Builders.containerBuilder().withNodeIdentifier(new NodeIdentifier(ROOT));
304 public void validMultiStepsWriteAndMergeTest() throws ReactorException, DataValidationFailedException {
305 final InMemoryDataTree inMemoryDataTree = emptyDataTree(schemaContext);
306 final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
308 modificationTree.write(YangInstanceIdentifier.of(ROOT), createContainerBuilder().build());
309 modificationTree.merge(YangInstanceIdentifier.of(ROOT).node(MY_LIST), createMapBuilder().build());
310 modificationTree.merge(
311 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
312 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
313 createEmptyMapEntryBuilder("1").build());
314 modificationTree.merge(
315 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
316 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
317 createMapEntry("1", "mandatory-value", "common-value"));
319 modificationTree.ready();
320 inMemoryDataTree.validate(modificationTree);
321 final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
322 inMemoryDataTree.commit(prepare);
326 public void invalidMultiStepsWriteAndMergeTest() throws ReactorException, DataValidationFailedException {
327 final InMemoryDataTree inMemoryDataTree = emptyDataTree(schemaContext);
328 final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
330 modificationTree.write(YangInstanceIdentifier.of(ROOT), createContainerBuilder().build());
331 modificationTree.merge(YangInstanceIdentifier.of(ROOT).node(MY_LIST), createMapBuilder().build());
332 modificationTree.merge(
333 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
334 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
335 createEmptyMapEntryBuilder("1").build());
336 modificationTree.merge(
337 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
338 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
339 createMapEntry("1", "common-value"));
342 modificationTree.ready();
343 inMemoryDataTree.validate(modificationTree);
344 final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
345 inMemoryDataTree.commit(prepare);
346 fail("Should fail due to missing mandatory leaf.");
347 } catch (final IllegalArgumentException e) {
349 "Node (foo?revision=2016-07-28)my-list[{(foo?revision=2016-07-28)list-id=1}] is missing mandatory "
350 + "descendant /(foo?revision=2016-07-28)mandatory-leaf", e.getMessage());
355 public void validMapEntryMultiCommitMergeTest() throws ReactorException, DataValidationFailedException {
356 final InMemoryDataTree inMemoryDataTree = emptyDataTree(schemaContext);
357 final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
359 modificationTree.write(YangInstanceIdentifier.of(ROOT), createContainerBuilder().build());
360 modificationTree.merge(YangInstanceIdentifier.of(ROOT).node(MY_LIST), createMapBuilder().build());
361 modificationTree.merge(
362 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
363 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
364 createEmptyMapEntryBuilder("1").build());
365 modificationTree.merge(
366 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
367 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
368 createMapEntryM("1", "mandatory-value"));
370 modificationTree.ready();
371 inMemoryDataTree.validate(modificationTree);
372 final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
373 inMemoryDataTree.commit(prepare);
375 final InMemoryDataTreeModification modificationTree2 = inMemoryDataTree.takeSnapshot().newModification();
376 modificationTree2.merge(
377 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
378 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
379 createMapEntry("1", "common-value"));
380 modificationTree2.ready();
381 inMemoryDataTree.validate(modificationTree2);
382 final DataTreeCandidate prepare2 = inMemoryDataTree.prepare(modificationTree2);
383 inMemoryDataTree.commit(prepare2);
387 public void invalidMapEntryMultiCommitMergeTest() throws ReactorException, DataValidationFailedException {
388 final InMemoryDataTree inMemoryDataTree = emptyDataTree(schemaContext);
389 final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
391 modificationTree.write(YangInstanceIdentifier.of(ROOT), createContainerBuilder().build());
392 modificationTree.merge(YangInstanceIdentifier.of(ROOT).node(MY_LIST), createMapBuilder().build());
393 modificationTree.merge(
394 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
395 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
396 createEmptyMapEntryBuilder("1").build());
397 modificationTree.merge(
398 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
399 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
400 createMapEntryM("1", "mandatory-value"));
402 modificationTree.ready();
403 inMemoryDataTree.validate(modificationTree);
404 final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
405 inMemoryDataTree.commit(prepare);
407 final InMemoryDataTreeModification modificationTree2 = inMemoryDataTree.takeSnapshot().newModification();
408 modificationTree2.write(
409 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
410 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
411 createMapEntry("1", "common-value"));
412 modificationTree2.merge(
413 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
414 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
415 createMapEntryM("1", "mandatory-value"));
416 modificationTree2.merge(
417 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
418 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "2"))),
419 createMapEntry("2", "common-value"));
421 modificationTree2.ready();
422 inMemoryDataTree.validate(modificationTree2);
423 final DataTreeCandidate prepare2 = inMemoryDataTree.prepare(modificationTree2);
424 inMemoryDataTree.commit(prepare2);
425 fail("Should fail due to missing mandatory leaf.");
426 } catch (final IllegalArgumentException e) {
428 "Node (foo?revision=2016-07-28)my-list[{(foo?revision=2016-07-28)list-id=2}] is missing mandatory "
429 + "descendant /(foo?revision=2016-07-28)mandatory-leaf", e.getMessage());
435 * This test consists of two transactions (i.e. data tree modifications) on
436 * empty data tree. The first one writes mandatory data and second one
437 * writes common data without any mandatory data.
439 public void validMapEntryMultiCommitMergeTest2() throws ReactorException, DataValidationFailedException {
440 final InMemoryDataTree inMemoryDataTree = emptyDataTree(schemaContext);
441 final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
442 final InMemoryDataTreeModification modificationTree2 = inMemoryDataTree.takeSnapshot().newModification();
444 modificationTree.write(YangInstanceIdentifier.of(ROOT), createContainerBuilder().build());
445 modificationTree.merge(YangInstanceIdentifier.of(ROOT).node(MY_LIST), createMapBuilder().build());
446 modificationTree.merge(
447 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
448 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
449 createEmptyMapEntryBuilder("1").build());
450 modificationTree.merge(
451 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
452 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
453 createMapEntryM("1", "mandatory-value"));
455 modificationTree.ready();
456 inMemoryDataTree.validate(modificationTree);
457 final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
458 inMemoryDataTree.commit(prepare);
460 modificationTree2.merge(
461 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
462 .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, "1"))),
463 createMapEntry("1", "common-value"));
464 modificationTree2.ready();
465 inMemoryDataTree.validate(modificationTree2);
466 final DataTreeCandidate prepare2 = inMemoryDataTree.prepare(modificationTree2);
467 inMemoryDataTree.commit(prepare2);