Search in sources :

Example 11 with DataTreeSnapshot

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());
}
Also used : DataTreeModification(org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification) DataTreeCandidate(org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate) NodeIdentifier(org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier) NormalizedNodeContainer(org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer) NodeWithValue(org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue) DataTreeSnapshot(org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot) NormalizedNode(org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode) Test(org.junit.Test)

Example 12 with DataTreeSnapshot

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());
}
Also used : DataTreeModification(org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification) DataTreeCandidate(org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate) ConflictingModificationAppliedException(org.opendaylight.yangtools.yang.data.tree.api.ConflictingModificationAppliedException) DataTreeSnapshot(org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot) Test(org.junit.Test)

Example 13 with DataTreeSnapshot

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());
}
Also used : DataTreeModification(org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification) DataTreeCandidate(org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate) ConflictingModificationAppliedException(org.opendaylight.yangtools.yang.data.tree.api.ConflictingModificationAppliedException) DataTreeSnapshot(org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot) Test(org.junit.Test)

Example 14 with DataTreeSnapshot

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());
}
Also used : DataTreeModification(org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification) DataTreeCandidate(org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate) ConflictingModificationAppliedException(org.opendaylight.yangtools.yang.data.tree.api.ConflictingModificationAppliedException) DataTreeSnapshot(org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot) Test(org.junit.Test)

Example 15 with DataTreeSnapshot

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);
}
Also used : DataTreeModification(org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification) DataTreeCandidate(org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate) DataTreeSnapshot(org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot) Test(org.junit.Test)

Aggregations

DataTreeSnapshot (org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot)41 DataTreeModification (org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification)36 Test (org.junit.Test)30 DataTreeCandidate (org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate)25 NormalizedNode (org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode)18 YangInstanceIdentifier (org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier)11 NodeIdentifier (org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier)11 ConflictingModificationAppliedException (org.opendaylight.yangtools.yang.data.tree.api.ConflictingModificationAppliedException)9 ContainerNode (org.opendaylight.yangtools.yang.data.api.schema.ContainerNode)5 MapEntryNode (org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode)4 UserMapNode (org.opendaylight.yangtools.yang.data.api.schema.UserMapNode)4 HashMap (java.util.HashMap)2 Before (org.junit.Before)2 DOMStoreReadTransaction (org.opendaylight.mdsal.dom.spi.store.DOMStoreReadTransaction)2 QName (org.opendaylight.yangtools.yang.common.QName)2 NodeIdentifierWithPredicates (org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates)2 NodeWithValue (org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue)2 MapNode (org.opendaylight.yangtools.yang.data.api.schema.MapNode)2 NormalizedNodeContainer (org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer)2 SystemMapNode (org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode)2