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.net.URISyntaxException;
16 import java.text.ParseException;
17 import java.util.List;
19 import org.junit.Test;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.common.QNameModule;
22 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
23 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
24 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
27 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
28 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
29 import org.opendaylight.yangtools.yang.model.api.Module;
30 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
31 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
32 import org.opendaylight.yangtools.yang.model.api.UsesNode;
34 public class ControllerStmtParserTest {
37 public void test() throws Exception {
38 final SchemaContext context = StmtTestUtils.parseYangSources("/sal-broker-impl");
39 assertNotNull(context);
41 salDomBrokerImplModuleTest(context);
42 configModuleTest(context);
45 private static void salDomBrokerImplModuleTest(final SchemaContext context)
46 throws ParseException {
47 final Module module = context.findModule("opendaylight-sal-dom-broker-impl",
48 QName.parseRevision("2013-10-28")).get();
50 final Set<AugmentationSchema> augmentations = module.getAugmentations();
51 boolean checked = false;
52 for (final AugmentationSchema augmentationSchema : augmentations) {
53 final DataSchemaNode dataNode = augmentationSchema
54 .getDataChildByName(QName.create(module.getQNameModule(), "dom-broker-impl"));
55 if (dataNode instanceof ChoiceCaseNode) {
56 final ChoiceCaseNode caseNode = (ChoiceCaseNode) dataNode;
57 final DataSchemaNode dataNode2 = caseNode
58 .getDataChildByName(QName.create(module.getQNameModule(), "async-data-broker"));
59 if (dataNode2 instanceof ContainerSchemaNode) {
60 final ContainerSchemaNode containerNode = (ContainerSchemaNode) dataNode2;
61 final DataSchemaNode leaf = containerNode
62 .getDataChildByName(QName.create(module.getQNameModule(), "type"));
63 final List<UnknownSchemaNode> unknownSchemaNodes = leaf.getUnknownSchemaNodes();
64 assertEquals(1, unknownSchemaNodes.size());
66 final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.get(0);
67 assertEquals("dom-async-data-broker", unknownSchemaNode.getQName().getLocalName());
68 assertEquals(unknownSchemaNode.getQName(), unknownSchemaNode.getPath().getLastComponent());
77 private static void configModuleTest(final SchemaContext context) throws ParseException,
79 final Module configModule = context.findModule("config", QName.parseRevision("2013-04-05")).get();
80 final Module module = context.findModule("opendaylight-sal-dom-broker-impl",
81 QName.parseRevision("2013-10-28")).get();
83 final DataSchemaNode dataNode = configModule.getDataChildByName(QName.create(configModule.getQNameModule(),
85 assertTrue(dataNode instanceof ContainerSchemaNode);
87 final ContainerSchemaNode moduleContainer = (ContainerSchemaNode) dataNode;
88 final DataSchemaNode dataChildList = moduleContainer
89 .getDataChildByName(QName.create(configModule.getQNameModule(), "module"));
91 assertTrue(dataChildList instanceof ListSchemaNode);
93 final ListSchemaNode listModule = (ListSchemaNode) dataChildList;
94 final DataSchemaNode dataChildChoice = listModule
95 .getDataChildByName(QName.create(configModule.getQNameModule(), "configuration"));
97 assertTrue(dataChildChoice instanceof ChoiceSchemaNode);
99 final ChoiceSchemaNode confChoice = (ChoiceSchemaNode) dataChildChoice;
100 final ChoiceCaseNode caseNodeByName = confChoice.getCaseNodeByName("dom-broker-impl");
102 assertNotNull(caseNodeByName);
103 final DataSchemaNode dataNode2 = caseNodeByName
104 .getDataChildByName(QName.create(module.getQNameModule(), "async-data-broker"));
105 assertTrue(dataNode2 instanceof ContainerSchemaNode);
107 final ContainerSchemaNode containerNode = (ContainerSchemaNode) dataNode2;
108 final DataSchemaNode leaf = containerNode.getDataChildByName(QName.create(module.getQNameModule(), "type"));
109 final List<UnknownSchemaNode> unknownSchemaNodes = leaf.getUnknownSchemaNodes();
111 assertEquals(1, unknownSchemaNodes.size());
113 final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.get(0);
115 assertEquals(unknownSchemaNode.getQName(), unknownSchemaNode.getPath().getLastComponent());
116 assertEquals("dom-async-data-broker", unknownSchemaNode.getQName().getLocalName());
118 final ChoiceCaseNode domInmemoryDataBroker = confChoice.getCaseNodeByName("dom-inmemory-data-broker");
120 assertNotNull(domInmemoryDataBroker);
121 final DataSchemaNode schemaService = domInmemoryDataBroker
122 .getDataChildByName(QName.create(module.getQNameModule(), "schema-service"));
123 assertTrue(schemaService instanceof ContainerSchemaNode);
125 final ContainerSchemaNode schemaServiceContainer = (ContainerSchemaNode) schemaService;
127 assertEquals(1, schemaServiceContainer.getUses().size());
128 final UsesNode uses = schemaServiceContainer.getUses().iterator().next();
129 final QName groupingQName = QName.create("urn:opendaylight:params:xml:ns:yang:controller:config", "2013-04-05",
131 final QName usesGroupingPathLastComponent = uses.getGroupingPath().getLastComponent();
132 assertEquals(groupingQName, usesGroupingPathLastComponent);
133 assertEquals(0, getChildNodeSizeWithoutUses(schemaServiceContainer));
135 final DataSchemaNode type = schemaServiceContainer.getDataChildByName(QName.create(module.getQNameModule(),
137 final List<UnknownSchemaNode> typeUnknownSchemaNodes = type.getUnknownSchemaNodes();
138 assertEquals(1, typeUnknownSchemaNodes.size());
140 final UnknownSchemaNode typeUnknownSchemaNode = typeUnknownSchemaNodes.get(0);
141 final QNameModule qNameModule = QNameModule
142 .create(new URI("urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom"),
143 QName.parseRevision("2013-10-28"));
144 final QName qName = QName.create(qNameModule, "schema-service");
146 assertEquals(qName, typeUnknownSchemaNode.getQName());
147 assertEquals(typeUnknownSchemaNode.getQName(), typeUnknownSchemaNode
148 .getPath().getLastComponent());
151 private static int getChildNodeSizeWithoutUses(final DataNodeContainer csn) {
153 for (final DataSchemaNode dsn : csn.getChildNodes()) {
154 if (!dsn.isAddedByUses()) {