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.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;
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;
30 class ControllerStmtParserTest extends AbstractYangTest {
31 private static EffectiveModelContext CONTEXT;
35 CONTEXT = assertEffectiveModelDir("/sal-broker-impl");
39 public void salDomBrokerImplModuleTest() {
40 final var module = CONTEXT.findModule("opendaylight-sal-dom-broker-impl", Revision.of("2013-10-28"))
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());
55 final var unknownSchemaNodes = containerNode.asEffectiveStatement()
56 .findFirstEffectiveSubstatement(UsesEffectiveStatement.class).orElseThrow()
57 .findFirstEffectiveSubstatement(RefineEffectiveStatement.class).orElseThrow()
58 .getDeclared().declaredSubstatements(UnrecognizedStatement.class);
61 final var unknownSchemaNode = unknownSchemaNodes.iterator().next();
62 assertEquals("sal:dom-async-data-broker", unknownSchemaNode.argument());
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"))
76 final DataSchemaNode dataNode = configModule.getDataChildByName(QName.create(configModule.getQNameModule(),
78 final ContainerSchemaNode moduleContainer = assertInstanceOf(ContainerSchemaNode.class, dataNode);
80 final DataSchemaNode dataChildList = moduleContainer
81 .getDataChildByName(QName.create(configModule.getQNameModule(), "module"));
82 final ListSchemaNode listModule = assertInstanceOf(ListSchemaNode.class, dataChildList);
84 final DataSchemaNode dataChildChoice = listModule
85 .getDataChildByName(QName.create(configModule.getQNameModule(), "configuration"));
86 final ChoiceSchemaNode confChoice = assertInstanceOf(ChoiceSchemaNode.class, dataChildChoice);
88 final CaseSchemaNode caseNodeByName = confChoice.findCaseNodes("dom-broker-impl").iterator().next();
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);
95 final DataSchemaNode leaf = containerNode.getDataChildByName(QName.create(module.getQNameModule(), "type"));
96 assertEquals(0, leaf.getUnknownSchemaNodes().size());
98 final CaseSchemaNode domInmemoryDataBroker = confChoice.findCaseNodes("dom-inmemory-data-broker").iterator()
101 assertNotNull(domInmemoryDataBroker);
102 final DataSchemaNode schemaService = domInmemoryDataBroker
103 .getDataChildByName(QName.create(module.getQNameModule(), "schema-service"));
104 final ContainerSchemaNode schemaServiceContainer = assertInstanceOf(ContainerSchemaNode.class, schemaService);
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",
110 assertEquals(groupingQName, uses.getSourceGrouping().getQName());
111 assertEquals(0, getChildNodeSizeWithoutUses(schemaServiceContainer));
113 final var type = schemaServiceContainer.getDataChildByName(QName.create(module.getQNameModule(), "type"));
114 assertEquals(0, type.getUnknownSchemaNodes().size());
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());
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());
129 private static int getChildNodeSizeWithoutUses(final DataNodeContainer csn) {
131 for (final DataSchemaNode dsn : csn.getChildNodes()) {
132 if (!dsn.isAddedByUses()) {