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.Collection;
16 import org.junit.Test;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.common.QNameModule;
19 import org.opendaylight.yangtools.yang.common.Revision;
20 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
25 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.Module;
28 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
29 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
30 import org.opendaylight.yangtools.yang.model.api.UsesNode;
32 public class ControllerStmtParserTest {
35 public void test() throws Exception {
36 final SchemaContext context = StmtTestUtils.parseYangSources("/sal-broker-impl");
37 assertNotNull(context);
39 salDomBrokerImplModuleTest(context);
40 configModuleTest(context);
43 private static void salDomBrokerImplModuleTest(final SchemaContext context) {
44 final Module module = context.findModule("opendaylight-sal-dom-broker-impl", Revision.of("2013-10-28")).get();
46 boolean checked = false;
47 for (final AugmentationSchemaNode augmentationSchema : module.getAugmentations()) {
48 final DataSchemaNode dataNode = augmentationSchema.dataChildByName(
49 QName.create(module.getQNameModule(), "dom-broker-impl"));
50 if (dataNode instanceof CaseSchemaNode) {
51 final CaseSchemaNode caseNode = (CaseSchemaNode) dataNode;
52 final DataSchemaNode dataNode2 = caseNode.dataChildByName(
53 QName.create(module.getQNameModule(), "async-data-broker"));
54 if (dataNode2 instanceof ContainerSchemaNode) {
55 final ContainerSchemaNode containerNode = (ContainerSchemaNode) dataNode2;
56 final DataSchemaNode leaf = containerNode
57 .getDataChildByName(QName.create(module.getQNameModule(), "type"));
58 final Collection<? extends UnknownSchemaNode> unknownSchemaNodes = leaf.getUnknownSchemaNodes();
59 assertEquals(1, unknownSchemaNodes.size());
61 final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.iterator().next();
62 assertEquals("dom-async-data-broker", unknownSchemaNode.getQName().getLocalName());
63 assertEquals(unknownSchemaNode.getQName(), unknownSchemaNode.getPath().getLastComponent());
72 private static void configModuleTest(final SchemaContext context) {
73 final Module configModule = context.findModule("config", Revision.of("2013-04-05")).get();
74 final Module module = context.findModule("opendaylight-sal-dom-broker-impl", Revision.of("2013-10-28")).get();
76 final DataSchemaNode dataNode = configModule.getDataChildByName(QName.create(configModule.getQNameModule(),
78 assertTrue(dataNode instanceof ContainerSchemaNode);
80 final ContainerSchemaNode moduleContainer = (ContainerSchemaNode) dataNode;
81 final DataSchemaNode dataChildList = moduleContainer
82 .getDataChildByName(QName.create(configModule.getQNameModule(), "module"));
84 assertTrue(dataChildList instanceof ListSchemaNode);
86 final ListSchemaNode listModule = (ListSchemaNode) dataChildList;
87 final DataSchemaNode dataChildChoice = listModule
88 .getDataChildByName(QName.create(configModule.getQNameModule(), "configuration"));
90 assertTrue(dataChildChoice instanceof ChoiceSchemaNode);
92 final ChoiceSchemaNode confChoice = (ChoiceSchemaNode) dataChildChoice;
93 final CaseSchemaNode caseNodeByName = confChoice.findCaseNodes("dom-broker-impl").iterator().next();
95 assertNotNull(caseNodeByName);
96 final DataSchemaNode dataNode2 = caseNodeByName
97 .getDataChildByName(QName.create(module.getQNameModule(), "async-data-broker"));
98 assertTrue(dataNode2 instanceof ContainerSchemaNode);
100 final ContainerSchemaNode containerNode = (ContainerSchemaNode) dataNode2;
101 final DataSchemaNode leaf = containerNode.getDataChildByName(QName.create(module.getQNameModule(), "type"));
102 final Collection<? extends UnknownSchemaNode> unknownSchemaNodes = leaf.getUnknownSchemaNodes();
104 assertEquals(1, unknownSchemaNodes.size());
106 final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.iterator().next();
108 assertEquals(unknownSchemaNode.getQName(), unknownSchemaNode.getPath().getLastComponent());
109 assertEquals("dom-async-data-broker", unknownSchemaNode.getQName().getLocalName());
111 final CaseSchemaNode domInmemoryDataBroker = confChoice.findCaseNodes("dom-inmemory-data-broker").iterator()
114 assertNotNull(domInmemoryDataBroker);
115 final DataSchemaNode schemaService = domInmemoryDataBroker
116 .getDataChildByName(QName.create(module.getQNameModule(), "schema-service"));
117 assertTrue(schemaService instanceof ContainerSchemaNode);
119 final ContainerSchemaNode schemaServiceContainer = (ContainerSchemaNode) schemaService;
121 assertEquals(1, schemaServiceContainer.getUses().size());
122 final UsesNode uses = schemaServiceContainer.getUses().iterator().next();
123 final QName groupingQName = QName.create("urn:opendaylight:params:xml:ns:yang:controller:config", "2013-04-05",
125 assertEquals(groupingQName, uses.getSourceGrouping().getQName());
126 assertEquals(0, getChildNodeSizeWithoutUses(schemaServiceContainer));
128 final DataSchemaNode type = schemaServiceContainer.getDataChildByName(QName.create(module.getQNameModule(),
130 final Collection<? extends UnknownSchemaNode> typeUnknownSchemaNodes = type.getUnknownSchemaNodes();
131 assertEquals(1, typeUnknownSchemaNodes.size());
133 final UnknownSchemaNode typeUnknownSchemaNode = typeUnknownSchemaNodes.iterator().next();
134 final QNameModule qNameModule = QNameModule.create(
135 URI.create("urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom"), Revision.of("2013-10-28"));
136 final QName qName = QName.create(qNameModule, "schema-service");
138 assertEquals(qName, typeUnknownSchemaNode.getQName());
139 assertEquals(typeUnknownSchemaNode.getQName(), typeUnknownSchemaNode
140 .getPath().getLastComponent());
143 private static int getChildNodeSizeWithoutUses(final DataNodeContainer csn) {
145 for (final DataSchemaNode dsn : csn.getChildNodes()) {
146 if (!dsn.isAddedByUses()) {