Deprecate simple DataTreeFactory.create()
[yangtools.git] / parser / 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.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
12 import static org.junit.jupiter.api.Assertions.assertNotNull;
13 import static org.junit.jupiter.api.Assertions.assertTrue;
14
15 import org.junit.jupiter.api.BeforeEach;
16 import org.junit.jupiter.api.Test;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.common.Revision;
19 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
20 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
23 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
25 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.stmt.RefineEffectiveStatement;
27 import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement;
28 import org.opendaylight.yangtools.yang.model.api.stmt.UsesEffectiveStatement;
29
30 class ControllerStmtParserTest extends AbstractYangTest {
31     private static EffectiveModelContext CONTEXT;
32
33     @BeforeEach
34     void before() {
35         CONTEXT = assertEffectiveModelDir("/sal-broker-impl");
36     }
37
38     @Test
39     public void salDomBrokerImplModuleTest() {
40         final var module = CONTEXT.findModule("opendaylight-sal-dom-broker-impl", Revision.of("2013-10-28"))
41             .orElseThrow();
42
43         boolean checked = false;
44         for (var augmentationSchema : module.getAugmentations()) {
45             final var dataNode = augmentationSchema.dataChildByName(
46                 QName.create(module.getQNameModule(), "dom-broker-impl"));
47             if (dataNode instanceof CaseSchemaNode caseNode) {
48                 final DataSchemaNode dataNode2 = caseNode.dataChildByName(
49                     QName.create(module.getQNameModule(), "async-data-broker"));
50                 if (dataNode2 instanceof ContainerSchemaNode containerNode) {
51                     final DataSchemaNode leaf = containerNode
52                         .getDataChildByName(QName.create(module.getQNameModule(), "type"));
53                     assertEquals(0, leaf.getUnknownSchemaNodes().size());
54
55                     final var unknownSchemaNodes = containerNode.asEffectiveStatement()
56                             .findFirstEffectiveSubstatement(UsesEffectiveStatement.class).orElseThrow()
57                             .findFirstEffectiveSubstatement(RefineEffectiveStatement.class).orElseThrow()
58                             .getDeclared().declaredSubstatements(UnrecognizedStatement.class);
59
60
61                     final var unknownSchemaNode = unknownSchemaNodes.iterator().next();
62                     assertEquals("sal:dom-async-data-broker", unknownSchemaNode.argument());
63                     checked = true;
64                 }
65             }
66         }
67         assertTrue(checked);
68     }
69
70     @Test
71     public void configModuleTest() {
72         final var configModule = CONTEXT.findModule("config", Revision.of("2013-04-05")).orElseThrow();
73         final var module = CONTEXT.findModule("opendaylight-sal-dom-broker-impl", Revision.of("2013-10-28"))
74             .orElseThrow();
75
76         final DataSchemaNode dataNode = configModule.getDataChildByName(QName.create(configModule.getQNameModule(),
77             "modules"));
78         final ContainerSchemaNode moduleContainer = assertInstanceOf(ContainerSchemaNode.class, dataNode);
79
80         final DataSchemaNode dataChildList = moduleContainer
81             .getDataChildByName(QName.create(configModule.getQNameModule(), "module"));
82         final ListSchemaNode listModule = assertInstanceOf(ListSchemaNode.class, dataChildList);
83
84         final DataSchemaNode dataChildChoice = listModule
85             .getDataChildByName(QName.create(configModule.getQNameModule(), "configuration"));
86         final ChoiceSchemaNode confChoice = assertInstanceOf(ChoiceSchemaNode.class, dataChildChoice);
87
88         final CaseSchemaNode caseNodeByName = confChoice.findCaseNodes("dom-broker-impl").iterator().next();
89
90         assertNotNull(caseNodeByName);
91         final DataSchemaNode dataNode2 = caseNodeByName
92             .getDataChildByName(QName.create(module.getQNameModule(), "async-data-broker"));
93         final ContainerSchemaNode containerNode = assertInstanceOf(ContainerSchemaNode.class, dataNode2);
94
95         final DataSchemaNode leaf = containerNode.getDataChildByName(QName.create(module.getQNameModule(), "type"));
96         assertEquals(0, leaf.getUnknownSchemaNodes().size());
97
98         final CaseSchemaNode domInmemoryDataBroker = confChoice.findCaseNodes("dom-inmemory-data-broker").iterator()
99             .next();
100
101         assertNotNull(domInmemoryDataBroker);
102         final DataSchemaNode schemaService = domInmemoryDataBroker
103             .getDataChildByName(QName.create(module.getQNameModule(), "schema-service"));
104         final ContainerSchemaNode schemaServiceContainer = assertInstanceOf(ContainerSchemaNode.class, schemaService);
105
106         assertEquals(1, schemaServiceContainer.getUses().size());
107         final var uses = schemaServiceContainer.getUses().iterator().next();
108         final QName groupingQName = QName.create("urn:opendaylight:params:xml:ns:yang:controller:config", "2013-04-05",
109             "service-ref");
110         assertEquals(groupingQName, uses.getSourceGrouping().getQName());
111         assertEquals(0, getChildNodeSizeWithoutUses(schemaServiceContainer));
112
113         final var type = schemaServiceContainer.getDataChildByName(QName.create(module.getQNameModule(), "type"));
114         assertEquals(0, type.getUnknownSchemaNodes().size());
115
116         final var typeUnknownSchemaNodes = schemaServiceContainer.asEffectiveStatement()
117                 .findFirstEffectiveSubstatement(UsesEffectiveStatement.class).orElseThrow()
118                 .findFirstEffectiveSubstatement(RefineEffectiveStatement.class).orElseThrow()
119                 .getDeclared().declaredSubstatements(UnrecognizedStatement.class);
120         assertEquals(1, typeUnknownSchemaNodes.size());
121
122
123         final var typeUnknownSchemaNode = typeUnknownSchemaNodes.iterator().next();
124         assertEquals("sal:schema-service", typeUnknownSchemaNode.argument());
125         assertEquals(QName.create(groupingQName, "required-identity"),
126             typeUnknownSchemaNode.statementDefinition().getStatementName());
127     }
128
129     private static int getChildNodeSizeWithoutUses(final DataNodeContainer csn) {
130         int result = 0;
131         for (final DataSchemaNode dsn : csn.getChildNodes()) {
132             if (!dsn.isAddedByUses()) {
133                 result++;
134             }
135         }
136         return result;
137     }
138 }