Migrate getDataChildByName() users
[yangtools.git] / yang / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / ControllerStmtParserTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.stmt;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertTrue;
13
14 import java.net.URI;
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;
31
32 public class ControllerStmtParserTest {
33
34     @Test
35     public void test() throws Exception {
36         final SchemaContext context = StmtTestUtils.parseYangSources("/sal-broker-impl");
37         assertNotNull(context);
38
39         salDomBrokerImplModuleTest(context);
40         configModuleTest(context);
41     }
42
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();
45
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());
60
61                     final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.iterator().next();
62                     assertEquals("dom-async-data-broker", unknownSchemaNode.getQName().getLocalName());
63                     assertEquals(unknownSchemaNode.getQName(), unknownSchemaNode.getPath().getLastComponent());
64
65                     checked = true;
66                 }
67             }
68         }
69         assertTrue(checked);
70     }
71
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();
75
76         final DataSchemaNode dataNode = configModule.getDataChildByName(QName.create(configModule.getQNameModule(),
77             "modules"));
78         assertTrue(dataNode instanceof ContainerSchemaNode);
79
80         final ContainerSchemaNode moduleContainer = (ContainerSchemaNode) dataNode;
81         final DataSchemaNode dataChildList = moduleContainer
82                 .getDataChildByName(QName.create(configModule.getQNameModule(), "module"));
83
84         assertTrue(dataChildList instanceof ListSchemaNode);
85
86         final ListSchemaNode listModule = (ListSchemaNode) dataChildList;
87         final DataSchemaNode dataChildChoice = listModule
88                 .getDataChildByName(QName.create(configModule.getQNameModule(), "configuration"));
89
90         assertTrue(dataChildChoice instanceof ChoiceSchemaNode);
91
92         final ChoiceSchemaNode confChoice = (ChoiceSchemaNode) dataChildChoice;
93         final CaseSchemaNode caseNodeByName = confChoice.findCaseNodes("dom-broker-impl").iterator().next();
94
95         assertNotNull(caseNodeByName);
96         final DataSchemaNode dataNode2 = caseNodeByName
97                 .getDataChildByName(QName.create(module.getQNameModule(), "async-data-broker"));
98         assertTrue(dataNode2 instanceof ContainerSchemaNode);
99
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();
103
104         assertEquals(1, unknownSchemaNodes.size());
105
106         final UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.iterator().next();
107
108         assertEquals(unknownSchemaNode.getQName(), unknownSchemaNode.getPath().getLastComponent());
109         assertEquals("dom-async-data-broker", unknownSchemaNode.getQName().getLocalName());
110
111         final CaseSchemaNode domInmemoryDataBroker = confChoice.findCaseNodes("dom-inmemory-data-broker").iterator()
112                 .next();
113
114         assertNotNull(domInmemoryDataBroker);
115         final DataSchemaNode schemaService = domInmemoryDataBroker
116                 .getDataChildByName(QName.create(module.getQNameModule(), "schema-service"));
117         assertTrue(schemaService instanceof ContainerSchemaNode);
118
119         final ContainerSchemaNode schemaServiceContainer = (ContainerSchemaNode) schemaService;
120
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",
124             "service-ref");
125         assertEquals(groupingQName, uses.getSourceGrouping().getQName());
126         assertEquals(0, getChildNodeSizeWithoutUses(schemaServiceContainer));
127
128         final DataSchemaNode type = schemaServiceContainer.getDataChildByName(QName.create(module.getQNameModule(),
129             "type"));
130         final Collection<? extends UnknownSchemaNode> typeUnknownSchemaNodes = type.getUnknownSchemaNodes();
131         assertEquals(1, typeUnknownSchemaNodes.size());
132
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");
137
138         assertEquals(qName, typeUnknownSchemaNode.getQName());
139         assertEquals(typeUnknownSchemaNode.getQName(), typeUnknownSchemaNode
140                 .getPath().getLastComponent());
141     }
142
143     private static int getChildNodeSizeWithoutUses(final DataNodeContainer csn) {
144         int result = 0;
145         for (final DataSchemaNode dsn : csn.getChildNodes()) {
146             if (!dsn.isAddedByUses()) {
147                 result++;
148             }
149         }
150         return result;
151     }
152 }