use of org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot in project yangtools by opendaylight.
the class ListConstraintsValidation method minMaxLeafListPass.
@Test
public void minMaxLeafListPass() throws DataValidationFailedException {
final DataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
final NodeWithValue<Object> barPath = new NodeWithValue<>(MIN_MAX_LIST_QNAME, "bar");
final NodeWithValue<Object> gooPath = new NodeWithValue<>(MIN_MAX_LIST_QNAME, "goo");
final LeafSetEntryNode<Object> barLeafSetEntry = ImmutableLeafSetEntryNodeBuilder.create().withNodeIdentifier(barPath).withValue("bar").build();
final LeafSetEntryNode<Object> gooLeafSetEntry = ImmutableLeafSetEntryNodeBuilder.create().withNodeIdentifier(gooPath).withValue("goo").build();
final LeafSetNode<Object> fooLeafSetNode = ImmutableLeafSetNodeBuilder.create().withNodeIdentifier(new NodeIdentifier(MIN_MAX_LEAF_LIST_QNAME)).withChildValue("foo").build();
modificationTree.write(MIN_MAX_LEAF_LIST_PATH, fooLeafSetNode);
modificationTree.write(MIN_MAX_LEAF_LIST_PATH.node(barPath), barLeafSetEntry);
modificationTree.merge(MIN_MAX_LEAF_LIST_PATH.node(gooPath), gooLeafSetEntry);
modificationTree.delete(MIN_MAX_LEAF_LIST_PATH.node(gooPath));
modificationTree.ready();
inMemoryDataTree.validate(modificationTree);
final DataTreeCandidate prepare1 = inMemoryDataTree.prepare(modificationTree);
inMemoryDataTree.commit(prepare1);
final DataTreeSnapshot snapshotAfterCommit = inMemoryDataTree.takeSnapshot();
final Optional<NormalizedNode> masterContainer = snapshotAfterCommit.readNode(MASTER_CONTAINER_PATH);
assertTrue(masterContainer.isPresent());
final NormalizedNodeContainer<?> leafList = (NormalizedNodeContainer<?>) ((DistinctNodeContainer) masterContainer.get()).childByArg(new NodeIdentifier(MIN_MAX_LEAF_LIST_QNAME));
assertNotNull(leafList);
assertEquals(2, leafList.size());
}
use of org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot in project yangtools by opendaylight.
the class ConcurrentTreeModificationTest method deleteWriteFooBar2ndLevelEmptyContainerTest.
@Test
public void deleteWriteFooBar2ndLevelEmptyContainerTest() throws DataValidationFailedException {
final DataTreeModification initialDataTreeModification = inMemoryDataTree.takeSnapshot().newModification();
initialDataTreeModification.write(TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
initialDataTreeModification.write(TestModel.OUTER_LIST_PATH, mapNodeBuilder(TestModel.OUTER_LIST_QNAME).build());
initialDataTreeModification.ready();
inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
final DataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
modificationTree1.delete(TestModel.TEST_PATH);
modificationTree2.write(OUTER_LIST_2_PATH, BAR_NODE);
modificationTree1.ready();
modificationTree2.ready();
inMemoryDataTree.validate(modificationTree1);
final DataTreeCandidate prepare1 = inMemoryDataTree.prepare(modificationTree1);
inMemoryDataTree.commit(prepare1);
try {
inMemoryDataTree.validate(modificationTree2);
final DataTreeCandidate prepare2 = inMemoryDataTree.prepare(modificationTree2);
inMemoryDataTree.commit(prepare2);
fail("Exception should have been thrown");
} catch (final ConflictingModificationAppliedException e) {
LOG.debug("Exception was thrown because path no longer exist in tree", e);
}
final DataTreeSnapshot snapshotAfterCommits = inMemoryDataTree.takeSnapshot();
assertFalse(snapshotAfterCommits.readNode(TestModel.TEST_PATH).isPresent());
}
use of org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot in project yangtools by opendaylight.
the class ConcurrentTreeModificationTest method writeWriteFooBar1stLevelEmptyContainerTest.
@Test
public void writeWriteFooBar1stLevelEmptyContainerTest() throws DataValidationFailedException {
final DataTreeModification initialDataTreeModification = inMemoryDataTree.takeSnapshot().newModification();
initialDataTreeModification.write(TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
initialDataTreeModification.ready();
inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
final DataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
modificationTree1.write(TestModel.TEST_PATH, createFooTestContainerNode());
modificationTree2.write(TestModel.TEST_PATH, createBarTestContainerNode());
modificationTree1.ready();
modificationTree2.ready();
inMemoryDataTree.validate(modificationTree1);
final DataTreeCandidate prepare1 = inMemoryDataTree.prepare(modificationTree1);
inMemoryDataTree.commit(prepare1);
try {
inMemoryDataTree.validate(modificationTree2);
fail("Exception should have been thrown.");
final DataTreeCandidate prepare2 = inMemoryDataTree.prepare(modificationTree2);
inMemoryDataTree.commit(prepare2);
} catch (final ConflictingModificationAppliedException ex) {
LOG.debug("ConflictingModificationAppliedException was thrown as expected", ex);
}
final DataTreeSnapshot snapshotAfterCommits = inMemoryDataTree.takeSnapshot();
assertPresentAndType(snapshotAfterCommits.readNode(OUTER_LIST_1_PATH), MapEntryNode.class);
assertFalse(snapshotAfterCommits.readNode(OUTER_LIST_2_PATH).isPresent());
}
use of org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot in project yangtools by opendaylight.
the class ConcurrentTreeModificationTest method deleteMergeFooBar2ndLevelEmptyContainerTest.
@Test
public void deleteMergeFooBar2ndLevelEmptyContainerTest() throws DataValidationFailedException {
final DataTreeModification initialDataTreeModification = inMemoryDataTree.takeSnapshot().newModification();
initialDataTreeModification.write(TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
initialDataTreeModification.write(TestModel.OUTER_LIST_PATH, mapNodeBuilder(TestModel.OUTER_LIST_QNAME).build());
initialDataTreeModification.ready();
inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
final DataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
modificationTree1.delete(TestModel.TEST_PATH);
modificationTree2.merge(OUTER_LIST_2_PATH, BAR_NODE);
modificationTree1.ready();
modificationTree2.ready();
inMemoryDataTree.validate(modificationTree1);
final DataTreeCandidate prepare1 = inMemoryDataTree.prepare(modificationTree1);
inMemoryDataTree.commit(prepare1);
try {
inMemoryDataTree.validate(modificationTree2);
final DataTreeCandidate prepare2 = inMemoryDataTree.prepare(modificationTree2);
inMemoryDataTree.commit(prepare2);
fail("Exception should have been thrown");
} catch (final ConflictingModificationAppliedException e) {
LOG.debug("Exception was thrown because path no longer exist in tree", e);
}
final DataTreeSnapshot snapshotAfterCommits = inMemoryDataTree.takeSnapshot();
assertFalse(snapshotAfterCommits.readNode(TestModel.TEST_PATH).isPresent());
}
use of org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot in project yangtools by opendaylight.
the class ConcurrentTreeModificationTest method mergeMergeFooBar2ndLevelEmptyContainerTest.
@Test
public void mergeMergeFooBar2ndLevelEmptyContainerTest() throws DataValidationFailedException {
final DataTreeModification initialDataTreeModification = inMemoryDataTree.takeSnapshot().newModification();
initialDataTreeModification.write(TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
initialDataTreeModification.write(TestModel.OUTER_LIST_PATH, mapNodeBuilder(TestModel.OUTER_LIST_QNAME).build());
initialDataTreeModification.ready();
inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
final DataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
modificationTree1.merge(OUTER_LIST_1_PATH, FOO_NODE);
modificationTree2.merge(OUTER_LIST_2_PATH, BAR_NODE);
modificationTree1.ready();
modificationTree2.ready();
inMemoryDataTree.validate(modificationTree1);
final DataTreeCandidate prepare1 = inMemoryDataTree.prepare(modificationTree1);
inMemoryDataTree.commit(prepare1);
inMemoryDataTree.validate(modificationTree2);
final DataTreeCandidate prepare2 = inMemoryDataTree.prepare(modificationTree2);
inMemoryDataTree.commit(prepare2);
final DataTreeSnapshot snapshotAfterCommits = inMemoryDataTree.takeSnapshot();
assertPresentAndType(snapshotAfterCommits.readNode(OUTER_LIST_1_PATH), MapEntryNode.class);
assertPresentAndType(snapshotAfterCommits.readNode(OUTER_LIST_2_PATH), MapEntryNode.class);
}
Aggregations