import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.opendaylight.yangtools.yang.data.impl.schema.Builders.choiceBuilder;
-import static org.opendaylight.yangtools.yang.data.impl.schema.Builders.containerBuilder;
-import static org.opendaylight.yangtools.yang.data.impl.schema.Builders.leafBuilder;
-import static org.opendaylight.yangtools.yang.data.impl.schema.Builders.leafSetBuilder;
-import static org.opendaylight.yangtools.yang.data.impl.schema.Builders.mapBuilder;
-import static org.opendaylight.yangtools.yang.data.impl.schema.Builders.mapEntryBuilder;
-import static org.opendaylight.yangtools.yang.data.tree.impl.ListConstraintsValidation.assertTooFewElements;
-import static org.opendaylight.yangtools.yang.data.tree.impl.ListConstraintsValidation.assertTooManyElements;
import com.google.common.collect.ImmutableMap;
import org.junit.jupiter.api.AfterAll;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
+import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes;
import org.opendaylight.yangtools.yang.data.tree.api.DataTree;
import org.opendaylight.yangtools.yang.data.tree.api.DataTreeConfiguration;
import org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification;
private static final NodeIdentifier OBJECT_LIST = new NodeIdentifier(OBJECT);
private static final NodeIdentifierWithPredicates OBJECT_ITEM = NodeIdentifierWithPredicates.of(OBJECT,
ImmutableMap.of(OBJECT_ID, "1"));
- private static final LeafNode<?> OBJECT_ID_LEAF = leafBuilder().withNodeIdentifier(new NodeIdentifier(OBJECT_ID))
- .withValue("1").build();
+ private static final LeafNode<?> OBJECT_ID_LEAF = ImmutableNodes.leafNode(OBJECT_ID, "1");
private static final NodeIdentifier ATTRIBUTES = new NodeIdentifier(QName.create(MODULE, "attributes"));
private static final QName NESTED = QName.create(MODULE, "nested");
@Test
void testNoAttributes() {
final var mod = dataTree.takeSnapshot().newModification();
- mod.write(YangInstanceIdentifier.of(BOX), containerBuilder().withNodeIdentifier(BOX)
- .withChild(mapBuilder().withNodeIdentifier(OBJECT_LIST)
- .addChild(mapEntryBuilder().withNodeIdentifier(OBJECT_ITEM)
+ mod.write(YangInstanceIdentifier.of(BOX), ImmutableNodes.newContainerBuilder()
+ .withNodeIdentifier(BOX)
+ .withChild(ImmutableNodes.newSystemMapBuilder()
+ .withNodeIdentifier(OBJECT_LIST)
+ .addChild(ImmutableNodes.newMapEntryBuilder()
+ .withNodeIdentifier(OBJECT_ITEM)
.withChild(OBJECT_ID_LEAF)
.build())
.build())
.build());
- final IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, mod::ready);
+ final var ex = assertThrows(IllegalArgumentException.class, mod::ready);
// FIXME: This is actually mandatory leaf enforcer kicking in: attributes have to be present. This is
// most probably not what we want.
assertEquals("Node (yt776)object[{(yt776)object-id=1}] is missing mandatory descendant /(yt776)attributes",
@Test
void testEmptyAttributes() throws DataValidationFailedException {
- final var mod = write(containerBuilder().withNodeIdentifier(BOX)
- .withChild(mapBuilder().withNodeIdentifier(OBJECT_LIST)
- .addChild(mapEntryBuilder().withNodeIdentifier(OBJECT_ITEM)
+ final var mod = write(ImmutableNodes.newContainerBuilder()
+ .withNodeIdentifier(BOX)
+ .withChild(ImmutableNodes.newSystemMapBuilder()
+ .withNodeIdentifier(OBJECT_LIST)
+ .addChild(ImmutableNodes.newMapEntryBuilder()
+ .withNodeIdentifier(OBJECT_ITEM)
.withChild(OBJECT_ID_LEAF)
- .withChild(leafSetBuilder().withNodeIdentifier(ATTRIBUTES).build())
+ .withChild(ImmutableNodes.newSystemLeafSetBuilder().withNodeIdentifier(ATTRIBUTES).build())
.build())
.build())
.build());
final var ex = assertThrows(MinMaxElementsValidationFailedException.class, mod::ready);
assertEquals("(yt776)attributes does not have enough elements (0), needs at least 1", ex.getMessage());
- assertTooFewElements(ex);
+ ListConstraintsValidation.assertTooFewElements(ex);
}
@Test
void testOneAttribute() throws DataValidationFailedException {
- writeAndCommit(containerBuilder().withNodeIdentifier(BOX)
- .withChild(mapBuilder().withNodeIdentifier(OBJECT_LIST)
- .addChild(mapEntryBuilder().withNodeIdentifier(OBJECT_ITEM)
+ writeAndCommit(ImmutableNodes.newContainerBuilder()
+ .withNodeIdentifier(BOX)
+ .withChild(ImmutableNodes.newSystemMapBuilder()
+ .withNodeIdentifier(OBJECT_LIST)
+ .addChild(ImmutableNodes.newMapEntryBuilder()
+ .withNodeIdentifier(OBJECT_ITEM)
.withChild(OBJECT_ID_LEAF)
- .withChild(leafSetBuilder().withNodeIdentifier(ATTRIBUTES)
+ .withChild(ImmutableNodes.newSystemLeafSetBuilder()
+ .withNodeIdentifier(ATTRIBUTES)
.withChildValue("object1")
.build())
.build())
@Test
void testTwoAttributes() throws DataValidationFailedException {
- writeAndCommit(containerBuilder().withNodeIdentifier(BOX)
- .withChild(mapBuilder().withNodeIdentifier(OBJECT_LIST)
- .addChild(mapEntryBuilder().withNodeIdentifier(OBJECT_ITEM)
+ writeAndCommit(ImmutableNodes.newContainerBuilder()
+ .withNodeIdentifier(BOX)
+ .withChild(ImmutableNodes.newSystemMapBuilder()
+ .withNodeIdentifier(OBJECT_LIST)
+ .addChild(ImmutableNodes.newMapEntryBuilder()
+ .withNodeIdentifier(OBJECT_ITEM)
.withChild(OBJECT_ID_LEAF)
- .withChild(leafSetBuilder().withNodeIdentifier(ATTRIBUTES)
+ .withChild(ImmutableNodes.newSystemLeafSetBuilder()
+ .withNodeIdentifier(ATTRIBUTES)
.withChildValue("object1")
.withChildValue("object2")
.build())
@Test
void testThreeAttributes() throws DataValidationFailedException {
- final var mod = write(containerBuilder().withNodeIdentifier(BOX)
- .withChild(mapBuilder().withNodeIdentifier(OBJECT_LIST)
- .addChild(mapEntryBuilder().withNodeIdentifier(OBJECT_ITEM)
+ final var mod = write(ImmutableNodes.newContainerBuilder()
+ .withNodeIdentifier(BOX)
+ .withChild(ImmutableNodes.newSystemMapBuilder()
+ .withNodeIdentifier(OBJECT_LIST)
+ .addChild(ImmutableNodes.newMapEntryBuilder()
+ .withNodeIdentifier(OBJECT_ITEM)
.withChild(OBJECT_ID_LEAF)
- .withChild(leafSetBuilder().withNodeIdentifier(ATTRIBUTES)
+ .withChild(ImmutableNodes.newSystemLeafSetBuilder()
+ .withNodeIdentifier(ATTRIBUTES)
.withChildValue("object1")
.withChildValue("object2")
.withChildValue("object3")
final var ex = assertThrows(MinMaxElementsValidationFailedException.class, mod::ready);
assertEquals("(yt776)attributes has too many elements (3), can have at most 2", ex.getMessage());
- assertTooManyElements(ex);
+ ListConstraintsValidation.assertTooManyElements(ex);
}
@Test
void testEmptyAndMergeOne() throws DataValidationFailedException {
final var mod = dataTree.takeSnapshot().newModification();
- mod.write(YangInstanceIdentifier.of(BOX), containerBuilder().withNodeIdentifier(BOX)
- .withChild(mapBuilder().withNodeIdentifier(OBJECT_LIST)
- .addChild(mapEntryBuilder().withNodeIdentifier(OBJECT_ITEM)
+ mod.write(YangInstanceIdentifier.of(BOX), ImmutableNodes.newContainerBuilder()
+ .withNodeIdentifier(BOX)
+ .withChild(ImmutableNodes.newSystemMapBuilder()
+ .withNodeIdentifier(OBJECT_LIST)
+ .addChild(ImmutableNodes.newMapEntryBuilder()
+ .withNodeIdentifier(OBJECT_ITEM)
.withChild(OBJECT_ID_LEAF)
.build())
.build())
.build());
- mod.merge(YangInstanceIdentifier.of(BOX), containerBuilder().withNodeIdentifier(BOX)
- .withChild(mapBuilder().withNodeIdentifier(OBJECT_LIST)
- .addChild(mapEntryBuilder().withNodeIdentifier(OBJECT_ITEM)
+ mod.merge(YangInstanceIdentifier.of(BOX), ImmutableNodes.newContainerBuilder()
+ .withNodeIdentifier(BOX)
+ .withChild(ImmutableNodes.newSystemMapBuilder()
+ .withNodeIdentifier(OBJECT_LIST)
+ .addChild(ImmutableNodes.newMapEntryBuilder()
+ .withNodeIdentifier(OBJECT_ITEM)
.withChild(OBJECT_ID_LEAF)
- .withChild(leafSetBuilder().withNodeIdentifier(ATTRIBUTES)
+ .withChild(ImmutableNodes.newSystemLeafSetBuilder()
+ .withNodeIdentifier(ATTRIBUTES)
.withChildValue("object1")
.build())
.build())
@Test
void testEmptyAndMergeOneWithListTouched() throws DataValidationFailedException {
final var mod = dataTree.takeSnapshot().newModification();
- mod.write(YangInstanceIdentifier.of(BOX), containerBuilder().withNodeIdentifier(BOX)
- .withChild(mapBuilder().withNodeIdentifier(OBJECT_LIST)
- .addChild(mapEntryBuilder().withNodeIdentifier(OBJECT_ITEM)
+ mod.write(YangInstanceIdentifier.of(BOX), ImmutableNodes.newContainerBuilder()
+ .withNodeIdentifier(BOX)
+ .withChild(ImmutableNodes.newSystemMapBuilder()
+ .withNodeIdentifier(OBJECT_LIST)
+ .addChild(ImmutableNodes.newMapEntryBuilder()
+ .withNodeIdentifier(OBJECT_ITEM)
.withChild(OBJECT_ID_LEAF)
.build())
.build())
.build());
- mod.merge(YangInstanceIdentifier.of(BOX), containerBuilder().withNodeIdentifier(BOX)
- .withChild(mapBuilder().withNodeIdentifier(OBJECT_LIST)
- .addChild(mapEntryBuilder().withNodeIdentifier(OBJECT_ITEM)
+ mod.merge(YangInstanceIdentifier.of(BOX), ImmutableNodes.newContainerBuilder()
+ .withNodeIdentifier(BOX)
+ .withChild(ImmutableNodes.newSystemMapBuilder()
+ .withNodeIdentifier(OBJECT_LIST)
+ .addChild(ImmutableNodes.newMapEntryBuilder()
+ .withNodeIdentifier(OBJECT_ITEM)
.withChild(OBJECT_ID_LEAF)
- .withChild(leafSetBuilder().withNodeIdentifier(ATTRIBUTES)
+ .withChild(ImmutableNodes.newSystemLeafSetBuilder()
+ .withNodeIdentifier(ATTRIBUTES)
.withChildValue("object1")
.build())
.build())
void testDisappearInChoice() throws DataValidationFailedException {
var mod = dataTree.takeSnapshot().newModification();
// Initialize choice with list
- mod.write(YangInstanceIdentifier.of(BOX), containerBuilder()
+ mod.write(YangInstanceIdentifier.of(BOX), ImmutableNodes.newContainerBuilder()
.withNodeIdentifier(BOX)
- .withChild(choiceBuilder().withNodeIdentifier(ANY_OF)
- .withChild(mapBuilder().withNodeIdentifier(SOME_LIST_ID)
- .withChild(mapEntryBuilder()
+ .withChild(ImmutableNodes.newChoiceBuilder()
+ .withNodeIdentifier(ANY_OF)
+ .withChild(ImmutableNodes.newSystemMapBuilder()
+ .withNodeIdentifier(SOME_LIST_ID)
+ .withChild(ImmutableNodes.newMapEntryBuilder()
.withNodeIdentifier(SOME_LIST_ITEM)
- .withChild(leafBuilder().withNodeIdentifier(SOME_LEAF_ID).withValue("foo").build())
+ .withChild(ImmutableNodes.leafNode(SOME_LEAF_ID, "foo"))
.build())
.build())
.build())
// Now delete the single item, causing the list to fizzle, while creating the alterinative case
mod = dataTree.takeSnapshot().newModification();
mod.delete(YangInstanceIdentifier.of(BOX, ANY_OF, SOME_LIST_ID, SOME_LIST_ITEM));
- mod.write(YangInstanceIdentifier.of(BOX, ANY_OF, SOME_LEAF_ID),
- leafBuilder().withNodeIdentifier(SOME_LEAF_ID).withValue("foo").build());
+ mod.write(YangInstanceIdentifier.of(BOX, ANY_OF, SOME_LEAF_ID), ImmutableNodes.leafNode(SOME_LEAF_ID, "foo"));
commit(mod);
}