2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.stmt;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertTrue;
15 import java.util.List;
17 import org.junit.Test;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.common.QNameModule;
20 import org.opendaylight.yangtools.yang.common.Revision;
21 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
22 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
23 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
26 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
28 import org.opendaylight.yangtools.yang.model.api.Module;
29 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
30 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
31 import org.opendaylight.yangtools.yang.model.api.UsesNode;
33 public class ControllerStmtParserTest {
36 public void test() throws Exception {
37 final SchemaContext context = StmtTestUtils.parseYangSources("/sal-broker-impl");
38 assertNotNull(context);
40 salDomBrokerImplModuleTest(context);
41 configModuleTest(context);
44 private static void salDomBrokerImplModuleTest(final SchemaContext context) {
45 final Module module = context.findModule("opendaylight-sal-dom-broker-impl",
46 Revision.valueOf("2013-10-28")).get();
48 final Set<AugmentationSchema> augmentations = module.getAugmentations();
49 boolean checked = false;
50 for (final AugmentationSchema augmentationSchema : augmentations) {
51 final DataSchemaNode dataNode = augmentationSchema
52 .getDataChildByName(QName.create(module.getQNameModule(), "dom-broker-impl"));
53 if (dataNode instanceof ChoiceCaseNode) {
54 final ChoiceCaseNode caseNode = (ChoiceCaseNode) dataNode;
55 final DataSchemaNode dataNode2 = caseNode
56 .getDataChildByName(QName.create(module.getQNameModule(), "async-data-broker"));
57 if (dataNode2 instanceof ContainerSchemaNode) {
58 final ContainerSchemaNode containerNode = (ContainerSchemaNode) dataNode2;
59 final DataSchemaNode leaf = containerNode
60 .getDataChildByName(QName.create(module.getQNameModule(), "type"));
61 final List<UnknownSchemaNode> unknownSchemaNodes = leaf.getUnknownSchemaNodes();
62 assertEquals(1, unknownSchemaNodes.size());
64 final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.get(0);
65 assertEquals("dom-async-data-broker", unknownSchemaNode.getQName().getLocalName());
66 assertEquals(unknownSchemaNode.getQName(), unknownSchemaNode.getPath().getLastComponent());
75 private static void configModuleTest(final SchemaContext context) {
76 final Module configModule = context.findModule("config", Revision.valueOf("2013-04-05")).get();
77 final Module module = context.findModule("opendaylight-sal-dom-broker-impl",
78 Revision.valueOf("2013-10-28")).get();
80 final DataSchemaNode dataNode = configModule.getDataChildByName(QName.create(configModule.getQNameModule(),
82 assertTrue(dataNode instanceof ContainerSchemaNode);
84 final ContainerSchemaNode moduleContainer = (ContainerSchemaNode) dataNode;
85 final DataSchemaNode dataChildList = moduleContainer
86 .getDataChildByName(QName.create(configModule.getQNameModule(), "module"));
88 assertTrue(dataChildList instanceof ListSchemaNode);
90 final ListSchemaNode listModule = (ListSchemaNode) dataChildList;
91 final DataSchemaNode dataChildChoice = listModule
92 .getDataChildByName(QName.create(configModule.getQNameModule(), "configuration"));
94 assertTrue(dataChildChoice instanceof ChoiceSchemaNode);
96 final ChoiceSchemaNode confChoice = (ChoiceSchemaNode) dataChildChoice;
97 final ChoiceCaseNode caseNodeByName = confChoice.getCaseNodeByName("dom-broker-impl");
99 assertNotNull(caseNodeByName);
100 final DataSchemaNode dataNode2 = caseNodeByName
101 .getDataChildByName(QName.create(module.getQNameModule(), "async-data-broker"));
102 assertTrue(dataNode2 instanceof ContainerSchemaNode);
104 final ContainerSchemaNode containerNode = (ContainerSchemaNode) dataNode2;
105 final DataSchemaNode leaf = containerNode.getDataChildByName(QName.create(module.getQNameModule(), "type"));
106 final List<UnknownSchemaNode> unknownSchemaNodes = leaf.getUnknownSchemaNodes();
108 assertEquals(1, unknownSchemaNodes.size());
110 final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.get(0);
112 assertEquals(unknownSchemaNode.getQName(), unknownSchemaNode.getPath().getLastComponent());
113 assertEquals("dom-async-data-broker", unknownSchemaNode.getQName().getLocalName());
115 final ChoiceCaseNode domInmemoryDataBroker = confChoice.getCaseNodeByName("dom-inmemory-data-broker");
117 assertNotNull(domInmemoryDataBroker);
118 final DataSchemaNode schemaService = domInmemoryDataBroker
119 .getDataChildByName(QName.create(module.getQNameModule(), "schema-service"));
120 assertTrue(schemaService instanceof ContainerSchemaNode);
122 final ContainerSchemaNode schemaServiceContainer = (ContainerSchemaNode) schemaService;
124 assertEquals(1, schemaServiceContainer.getUses().size());
125 final UsesNode uses = schemaServiceContainer.getUses().iterator().next();
126 final QName groupingQName = QName.create("urn:opendaylight:params:xml:ns:yang:controller:config", "2013-04-05",
128 final QName usesGroupingPathLastComponent = uses.getGroupingPath().getLastComponent();
129 assertEquals(groupingQName, usesGroupingPathLastComponent);
130 assertEquals(0, getChildNodeSizeWithoutUses(schemaServiceContainer));
132 final DataSchemaNode type = schemaServiceContainer.getDataChildByName(QName.create(module.getQNameModule(),
134 final List<UnknownSchemaNode> typeUnknownSchemaNodes = type.getUnknownSchemaNodes();
135 assertEquals(1, typeUnknownSchemaNodes.size());
137 final UnknownSchemaNode typeUnknownSchemaNode = typeUnknownSchemaNodes.get(0);
138 final QNameModule qNameModule = QNameModule.create(
139 URI.create("urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom"), Revision.valueOf("2013-10-28"));
140 final QName qName = QName.create(qNameModule, "schema-service");
142 assertEquals(qName, typeUnknownSchemaNode.getQName());
143 assertEquals(typeUnknownSchemaNode.getQName(), typeUnknownSchemaNode
144 .getPath().getLastComponent());
147 private static int getChildNodeSizeWithoutUses(final DataNodeContainer csn) {
149 for (final DataSchemaNode dsn : csn.getChildNodes()) {
150 if (!dsn.isAddedByUses()) {