/*
* 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.stmt;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.opendaylight.yangtools.yang.stmt.StmtTestUtils.sourceForResource;
import com.google.common.collect.ImmutableSet;
import java.util.Optional;
import java.util.Set;
import org.junit.Test;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
public class IfFeatureResolutionTest {
private static final StatementStreamSource FOO_MODULE = sourceForResource("/if-feature-resolution-test/foo.yang");
private static final StatementStreamSource BAR_MODULE = sourceForResource("/if-feature-resolution-test/bar.yang");
@Test
public void testSomeFeaturesSupported() throws ReactorException {
final Set<QName> supportedFeatures = ImmutableSet.of(
QName.create("foo-namespace", "1970-01-01", "test-feature-1"),
QName.create("foo-namespace", "1970-01-01", "test-feature-2"),
QName.create("foo-namespace", "1970-01-01", "test-feature-3"),
QName.create("bar-namespace", "1970-01-01", "imp-feature"));
final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(
Optional.of(supportedFeatures));
reactor.addSources(FOO_MODULE, BAR_MODULE);
final SchemaContext schemaContext = reactor.buildEffective();
assertNotNull(schemaContext);
final Module testModule = schemaContext.findModuleByName("foo", null);
assertNotNull(testModule);
assertEquals(9, testModule.getChildNodes().size());
final ContainerSchemaNode testContainerA = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-a"));
assertNull(testContainerA);
final ContainerSchemaNode testContainerB = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-b"));
assertNotNull(testContainerB);
final LeafSchemaNode testLeafB = (LeafSchemaNode) testContainerB.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-leaf-b"));
assertNotNull(testLeafB);
final ContainerSchemaNode testContainerC = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-c"));
assertNotNull(testContainerC);
final LeafSchemaNode testLeafC = (LeafSchemaNode) testContainerC.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-leaf-c"));
assertNotNull(testLeafC);
final ContainerSchemaNode testContainerD = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-d"));
assertNull(testContainerD);
final ContainerSchemaNode testContainerE = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-e"));
assertNotNull(testContainerE);
final ContainerSchemaNode testSubContainerE = (ContainerSchemaNode) testContainerE.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-subcontainer-e"));
assertNotNull(testSubContainerE);
final LeafSchemaNode testLeafE = (LeafSchemaNode) testSubContainerE.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-leaf-e"));
assertNull(testLeafE);
final ContainerSchemaNode testContainerF = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-f"));
assertNotNull(testContainerF);
final ContainerSchemaNode testSubContainerF = (ContainerSchemaNode) testContainerF.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-subcontainer-f"));
assertNull(testSubContainerF);
final ContainerSchemaNode testContainerG = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-g"));
assertNotNull(testContainerG);
assertEquals(1, testContainerG.getAvailableAugmentations().size());
final LeafSchemaNode testLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-leaf-g"));
assertNotNull(testLeafG);
final LeafSchemaNode augmentingTestLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
QName.create(testModule.getQNameModule(), "augmenting-test-leaf-g"));
assertNull(augmentingTestLeafG);
final AnyXmlSchemaNode augmentingTestAnyxmlG = (AnyXmlSchemaNode) testContainerG.getDataChildByName(
QName.create(testModule.getQNameModule(), "augmenting-test-anyxml-g"));
assertNotNull(augmentingTestAnyxmlG);
final ContainerSchemaNode testContainerH = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-h"));
assertNotNull(testContainerH);
assertEquals(0, testContainerH.getChildNodes().size());
assertEquals(0, testContainerH.getUses().size());
final ContainerSchemaNode testContainerI = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-i"));
assertNotNull(testContainerI);
assertEquals(1, testContainerI.getUses().size());
ContainerSchemaNode testGroupingSubContainer = (ContainerSchemaNode) testContainerI.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
assertNotNull(testGroupingSubContainer);
final LeafSchemaNode testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
assertNull(testGroupingLeaf);
final ContainerSchemaNode testContainerJ = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-j"));
assertNotNull(testContainerJ);
final LeafSchemaNode testLeafJ = (LeafSchemaNode) testContainerJ.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-leaf-j"));
assertNotNull(testLeafJ);
final ContainerSchemaNode testContainerK = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-k"));
assertNotNull(testContainerK);
assertEquals(1, testContainerK.getUses().size());
testGroupingSubContainer = (ContainerSchemaNode) testContainerK.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
assertNotNull(testGroupingSubContainer);
assertEquals(1, testGroupingSubContainer.getAvailableAugmentations().size());
final LeafSchemaNode augmentingTestGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf"));
assertNotNull(augmentingTestGroupingLeaf);
final LeafSchemaNode augmentingTestGroupingLeaf2 = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf-2"));
assertNull(augmentingTestGroupingLeaf2);
}
@Test
public void testAllFeaturesSupported() throws ReactorException {
final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
reactor.addSources(FOO_MODULE, BAR_MODULE);
final SchemaContext schemaContext = reactor.buildEffective();
assertNotNull(schemaContext);
final Module testModule = schemaContext.findModuleByName("foo", null);
assertNotNull(testModule);
assertEquals(11, testModule.getChildNodes().size());
final ContainerSchemaNode testContainerA = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-a"));
assertNotNull(testContainerA);
final LeafSchemaNode testLeafA = (LeafSchemaNode) testContainerA.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-leaf-a"));
assertNotNull(testLeafA);
final ContainerSchemaNode testContainerB = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-b"));
assertNotNull(testContainerB);
final LeafSchemaNode testLeafB = (LeafSchemaNode) testContainerB.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-leaf-b"));
assertNotNull(testLeafB);
final ContainerSchemaNode testContainerC = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-c"));
assertNotNull(testContainerC);
final LeafSchemaNode testLeafC = (LeafSchemaNode) testContainerC.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-leaf-c"));
assertNotNull(testLeafC);
final ContainerSchemaNode testContainerD = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-d"));
assertNotNull(testContainerD);
final LeafSchemaNode testLeafD = (LeafSchemaNode) testContainerD.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-leaf-d"));
assertNotNull(testLeafD);
final ContainerSchemaNode testContainerE = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-e"));
assertNotNull(testContainerE);
final ContainerSchemaNode testSubContainerE = (ContainerSchemaNode) testContainerE.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-subcontainer-e"));
assertNotNull(testSubContainerE);
final LeafSchemaNode testLeafE = (LeafSchemaNode) testSubContainerE.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-leaf-e"));
assertNotNull(testLeafE);
final ContainerSchemaNode testContainerF = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-f"));
assertNotNull(testContainerF);
final ContainerSchemaNode testSubContainerF = (ContainerSchemaNode) testContainerF.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-subcontainer-f"));
assertNotNull(testSubContainerF);
final ContainerSchemaNode testSubSubContainerF = (ContainerSchemaNode) testSubContainerF.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-subsubcontainer-f"));
assertNotNull(testSubSubContainerF);
final LeafSchemaNode testLeafF = (LeafSchemaNode) testSubSubContainerF.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-leaf-f"));
assertNotNull(testLeafF);
final ContainerSchemaNode testContainerG = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-g"));
assertNotNull(testContainerG);
assertEquals(2, testContainerG.getAvailableAugmentations().size());
final LeafSchemaNode testLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-leaf-g"));
assertNotNull(testLeafG);
final LeafSchemaNode augmentingTestLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
QName.create(testModule.getQNameModule(), "augmenting-test-leaf-g"));
assertNotNull(augmentingTestLeafG);
final AnyXmlSchemaNode augmentingTestAnyxmlG = (AnyXmlSchemaNode) testContainerG.getDataChildByName(
QName.create(testModule.getQNameModule(), "augmenting-test-anyxml-g"));
assertNotNull(augmentingTestAnyxmlG);
final ContainerSchemaNode testContainerH = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-h"));
assertNotNull(testContainerH);
assertEquals(1, testContainerH.getUses().size());
ContainerSchemaNode testGroupingSubContainer = (ContainerSchemaNode) testContainerH.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
assertNotNull(testGroupingSubContainer);
LeafSchemaNode testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
assertNotNull(testGroupingLeaf);
final ContainerSchemaNode testContainerI = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-i"));
assertNotNull(testContainerI);
assertEquals(1, testContainerI.getUses().size());
testGroupingSubContainer = (ContainerSchemaNode) testContainerI.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
assertNotNull(testGroupingSubContainer);
testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
assertNotNull(testGroupingLeaf);
final ContainerSchemaNode testContainerJ = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-j"));
assertNotNull(testContainerJ);
final LeafSchemaNode testLeafJ = (LeafSchemaNode) testContainerJ.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-leaf-j"));
assertNotNull(testLeafJ);
final ContainerSchemaNode testContainerK = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-k"));
assertNotNull(testContainerK);
assertEquals(1, testContainerK.getUses().size());
testGroupingSubContainer = (ContainerSchemaNode) testContainerK.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
assertNotNull(testGroupingSubContainer);
assertEquals(1, testGroupingSubContainer.getAvailableAugmentations().size());
final LeafSchemaNode augmentingTestGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf"));
assertNotNull(augmentingTestGroupingLeaf);
final LeafSchemaNode augmentingTestGroupingLeaf2 = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf-2"));
assertNotNull(augmentingTestGroupingLeaf2);
testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
assertNotNull(testGroupingLeaf);
}
@Test
public void testNoFeaturesSupported() throws ReactorException {
final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(
Optional.of(ImmutableSet.of()));
reactor.addSources(FOO_MODULE, BAR_MODULE);
final SchemaContext schemaContext = reactor.buildEffective();
assertNotNull(schemaContext);
final Module testModule = schemaContext.findModuleByName("foo", null);
assertNotNull(testModule);
assertEquals(6, testModule.getChildNodes().size());
final ContainerSchemaNode testContainerE = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-e"));
assertNotNull(testContainerE);
final ContainerSchemaNode testSubContainerE = (ContainerSchemaNode) testContainerE.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-subcontainer-e"));
assertNotNull(testSubContainerE);
final LeafSchemaNode testLeafE = (LeafSchemaNode) testSubContainerE.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-leaf-e"));
assertNull(testLeafE);
final ContainerSchemaNode testContainerF = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-f"));
assertNotNull(testContainerF);
final ContainerSchemaNode testSubContainerF = (ContainerSchemaNode) testContainerF.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-subcontainer-f"));
assertNull(testSubContainerF);
final ContainerSchemaNode testContainerG = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-g"));
assertNotNull(testContainerG);
assertEquals(1, testContainerG.getAvailableAugmentations().size());
final LeafSchemaNode testLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-leaf-g"));
assertNotNull(testLeafG);
final LeafSchemaNode augmentingTestLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
QName.create(testModule.getQNameModule(), "augmenting-test-leaf-g"));
assertNull(augmentingTestLeafG);
final AnyXmlSchemaNode augmentingTestAnyxmlG = (AnyXmlSchemaNode) testContainerG.getDataChildByName(
QName.create(testModule.getQNameModule(), "augmenting-test-anyxml-g"));
assertNotNull(augmentingTestAnyxmlG);
final ContainerSchemaNode testContainerH = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-h"));
assertNotNull(testContainerH);
assertEquals(0, testContainerH.getChildNodes().size());
assertEquals(0, testContainerH.getUses().size());
final ContainerSchemaNode testContainerI = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-i"));
assertNotNull(testContainerI);
assertEquals(1, testContainerI.getUses().size());
ContainerSchemaNode testGroupingSubContainer = (ContainerSchemaNode) testContainerI.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
assertNotNull(testGroupingSubContainer);
LeafSchemaNode testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
assertNull(testGroupingLeaf);
final ContainerSchemaNode testContainerK = (ContainerSchemaNode) testModule.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-container-k"));
assertNotNull(testContainerK);
assertEquals(1, testContainerK.getUses().size());
testGroupingSubContainer = (ContainerSchemaNode) testContainerK.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
assertNotNull(testGroupingSubContainer);
assertEquals(1, testGroupingSubContainer.getAvailableAugmentations().size());
final LeafSchemaNode augmentingTestGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf"));
assertNull(augmentingTestGroupingLeaf);
final LeafSchemaNode augmentingTestGroupingLeaf2 = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf-2"));
assertNull(augmentingTestGroupingLeaf2);
testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
assertNull(testGroupingLeaf);
}
}