Fixed bug in parsing augments defined under uses: target node did not get reference to its augmentations.
Added test.
Change-Id: I4e7e32a6f2eb960d9e6727043e6b4dc4ba26429b
Signed-off-by: Martin Vitez <mvitez@cisco.com>
import org.opendaylight.yangtools.yang.model.api.*;
import org.opendaylight.yangtools.yang.model.parser.api.YangModelParser;
import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder;
+import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationTargetBuilder;
import org.opendaylight.yangtools.yang.parser.builder.api.Builder;
import org.opendaylight.yangtools.yang.parser.builder.api.DataNodeContainerBuilder;
import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;
targetNode = findSchemaNode(augment.getTargetPath().getPath(), (SchemaNodeBuilder) parentNode);
}
- fillAugmentTarget(augment, targetNode);
- augment.setResolved(true);
- return true;
+ if (targetNode instanceof AugmentationTargetBuilder) {
+ fillAugmentTarget(augment, targetNode);
+ ((AugmentationTargetBuilder) targetNode).addAugmentation(augment);
+ augment.setResolved(true);
+ return true;
+ } else {
+ throw new YangParseException(module.getName(), augment.getLine(),
+ "Failed to resolve augment in uses. Invalid augment target: " + targetNode);
+ }
}
/**
import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
import org.opendaylight.yangtools.yang.model.api.ChoiceNode;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
assertEquals(1, destroyChildren.size());
}
+ @Test
+ public void testAugmentInUsesResolving() throws Exception {
+ modules = TestUtils.loadModules(getClass().getResource("/augment-test/augment-in-uses").toURI());
+ assertEquals(1, modules.size());
+
+ Module test = modules.iterator().next();
+ DataNodeContainer links = (DataNodeContainer) test.getDataChildByName("links");
+ DataNodeContainer link = (DataNodeContainer) links.getDataChildByName("link");
+ DataNodeContainer nodes = (DataNodeContainer) link.getDataChildByName("nodes");
+ ContainerSchemaNode node = (ContainerSchemaNode) nodes.getDataChildByName("node");
+ Set<AugmentationSchema> augments = node.getAvailableAugmentations();
+ assertEquals(1, augments.size());
+ assertEquals(1, node.getChildNodes().size());
+ LeafSchemaNode id = (LeafSchemaNode) node.getDataChildByName("id");
+ assertTrue(id.isAugmenting());
+ }
+
}
--- /dev/null
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+module foo {
+ yang-version 1;
+ namespace "urn:yang.foo";
+ prefix "f";
+
+ revision "2014-03-10" {
+ }
+
+ container links {
+ container link {
+ uses g1 {
+ augment nodes/node {
+ leaf id {
+ type string;
+ }
+ }
+ }
+ }
+ }
+
+ grouping g1 {
+ list nodes {
+ container node {
+ }
+ }
+ }
+
+}