import javax.annotation.Nonnull;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
+import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
AbstractEffectiveDocumentedDataNodeContainer<QName, NotificationStatement> implements NotificationDefinition {
private final QName qname;
private final SchemaPath path;
+ private final ConstraintDefinition constraints;
private final Set<AugmentationSchema> augmentations;
private final List<UnknownSchemaNode> unknownNodes;
this.qname = ctx.getStatementArgument();
this.path = ctx.getSchemaPath().get();
+ this.constraints = EffectiveConstraintDefinitionImpl.forParent(this);
+
// initSubstatementCollections
Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
return path;
}
+ @Override
+ public ConstraintDefinition getConstraints() {
+ return constraints;
+ }
+
@Override
public Set<AugmentationSchema> getAvailableAugmentations() {
return augmentations;
--- /dev/null
+/*
+ * Copyright (c) 2016 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
+ */
+
+package org.opendaylight.yangtools.yang.parser.stmt.rfc7950;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.FileNotFoundException;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+import java.util.Date;
+import java.util.Set;
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
+import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.MustDefinition;
+import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
+import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
+import org.opendaylight.yangtools.yang.stmt.StmtTestUtils;
+
+public class Bug6871Test {
+
+ @Test
+ public void testValidYang11Model() throws ReactorException, FileNotFoundException, URISyntaxException,
+ ParseException {
+ final SchemaContext schemaContext = StmtTestUtils.parseYangSource("/rfc7950/bug6871/foo.yang");
+ assertNotNull(schemaContext);
+
+ final Date revision = SimpleDateFormatUtil.getRevisionFormat().parse("2016-12-14");
+
+ final Module foo = schemaContext.findModuleByName("foo", revision);
+ assertNotNull(foo);
+
+ final Set<NotificationDefinition> notifications = foo.getNotifications();
+ assertEquals(1, notifications.size());
+ final NotificationDefinition myNotification = notifications.iterator().next();
+ Set<MustDefinition> mustConstraints = myNotification.getConstraints().getMustConstraints();
+ assertEquals(2, mustConstraints.size());
+
+ final Set<RpcDefinition> rpcs = foo.getRpcs();
+ assertEquals(1, rpcs.size());
+ final RpcDefinition myRpc = rpcs.iterator().next();
+
+ final ContainerSchemaNode input = myRpc.getInput();
+ assertNotNull(input);
+ mustConstraints = input.getConstraints().getMustConstraints();
+ assertEquals(2, mustConstraints.size());
+
+ final ContainerSchemaNode output = myRpc.getOutput();
+ assertNotNull(output);
+ mustConstraints = output.getConstraints().getMustConstraints();
+ assertEquals(2, mustConstraints.size());
+ }
+
+ @Test
+ public void testInvalidYang10Model() throws FileNotFoundException, URISyntaxException {
+ assertException("/rfc7950/bug6871/foo10.yang", "MUST is not valid for NOTIFICATION");
+ assertException("/rfc7950/bug6871/bar10.yang", "MUST is not valid for INPUT");
+ assertException("/rfc7950/bug6871/baz10.yang", "MUST is not valid for OUTPUT");
+ }
+
+ private static void assertException(final String sourcePath, final String exceptionMessage)
+ throws FileNotFoundException, URISyntaxException {
+ try {
+ StmtTestUtils.parseYangSource(sourcePath);
+ fail("Test should fail due to invalid Yang 1.0");
+ } catch (final ReactorException ex) {
+ assertTrue(ex.getCause().getMessage().startsWith(exceptionMessage));
+ }
+ }
+}