2 * Copyright (c) 2015 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.test;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertTrue;
13 import java.io.FileNotFoundException;
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.common.SimpleDateFormatUtil;
23 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
24 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
25 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
28 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
29 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
30 import org.opendaylight.yangtools.yang.model.api.Module;
31 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
32 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
33 import org.opendaylight.yangtools.yang.model.api.UsesNode;
34 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
35 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
37 public class ControllerStmtParserTest {
40 public void test() throws SourceException, FileNotFoundException,
41 ReactorException, URISyntaxException, ParseException {
42 SchemaContext context = StmtTestUtils
43 .parseYangSources("/sal-broker-impl");
44 assertNotNull(context);
46 salDomBrokerImplModuleTest(context);
47 configModuleTest(context);
50 private static void salDomBrokerImplModuleTest(final SchemaContext context)
51 throws ParseException {
52 Module module = context.findModuleByName(
53 "opendaylight-sal-dom-broker-impl", SimpleDateFormatUtil
54 .getRevisionFormat().parse("2013-10-28"));
55 assertNotNull(module);
57 Set<AugmentationSchema> augmentations = module.getAugmentations();
58 boolean checked = false;
59 for (AugmentationSchema augmentationSchema : augmentations) {
60 DataSchemaNode dataNode = augmentationSchema
61 .getDataChildByName("dom-broker-impl");
62 if (dataNode instanceof ChoiceCaseNode) {
63 ChoiceCaseNode caseNode = (ChoiceCaseNode) dataNode;
64 DataSchemaNode dataNode2 = caseNode
65 .getDataChildByName("async-data-broker");
66 if (dataNode2 instanceof ContainerSchemaNode) {
67 ContainerSchemaNode containerNode = (ContainerSchemaNode) dataNode2;
68 DataSchemaNode leaf = containerNode
69 .getDataChildByName("type");
70 List<UnknownSchemaNode> unknownSchemaNodes = leaf
71 .getUnknownSchemaNodes();
72 assertEquals(1, unknownSchemaNodes.size());
74 UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes
76 assertEquals("dom-async-data-broker", unknownSchemaNode
77 .getQName().getLocalName());
78 assertEquals(unknownSchemaNode.getQName(),
79 unknownSchemaNode.getPath().getLastComponent());
88 private static void configModuleTest(final SchemaContext context) throws ParseException,
90 Module configModule = context.findModuleByName("config",
91 SimpleDateFormatUtil.getRevisionFormat().parse("2013-04-05"));
92 assertNotNull(configModule);
94 DataSchemaNode dataNode = configModule.getDataChildByName("modules");
95 assertTrue(dataNode instanceof ContainerSchemaNode);
97 ContainerSchemaNode moduleContainer = (ContainerSchemaNode) dataNode;
98 DataSchemaNode dataChildList = moduleContainer
99 .getDataChildByName("module");
101 assertTrue(dataChildList instanceof ListSchemaNode);
103 ListSchemaNode listModule = (ListSchemaNode) dataChildList;
104 DataSchemaNode dataChildChoice = listModule
105 .getDataChildByName("configuration");
107 assertTrue(dataChildChoice instanceof ChoiceSchemaNode);
109 ChoiceSchemaNode confChoice = (ChoiceSchemaNode) dataChildChoice;
110 ChoiceCaseNode caseNodeByName = confChoice
111 .getCaseNodeByName("dom-broker-impl");
113 assertNotNull(caseNodeByName);
114 DataSchemaNode dataNode2 = caseNodeByName
115 .getDataChildByName("async-data-broker");
116 assertTrue(dataNode2 instanceof ContainerSchemaNode);
118 ContainerSchemaNode containerNode = (ContainerSchemaNode) dataNode2;
119 DataSchemaNode leaf = containerNode.getDataChildByName("type");
120 List<UnknownSchemaNode> unknownSchemaNodes = leaf
121 .getUnknownSchemaNodes();
123 assertEquals(1, unknownSchemaNodes.size());
125 UnknownSchemaNode unknownSchemaNode = unknownSchemaNodes.get(0);
127 assertEquals(unknownSchemaNode.getQName(), unknownSchemaNode.getPath()
128 .getLastComponent());
129 assertEquals("dom-async-data-broker", unknownSchemaNode.getQName()
132 ChoiceCaseNode domInmemoryDataBroker = confChoice
133 .getCaseNodeByName("dom-inmemory-data-broker");
135 assertNotNull(domInmemoryDataBroker);
136 DataSchemaNode schemaService = domInmemoryDataBroker
137 .getDataChildByName("schema-service");
138 assertTrue(schemaService instanceof ContainerSchemaNode);
140 ContainerSchemaNode schemaServiceContainer = (ContainerSchemaNode) schemaService;
142 assertEquals(1, schemaServiceContainer.getUses().size());
143 UsesNode uses = schemaServiceContainer.getUses().iterator().next();
144 QName groupingQName = QName.create("urn:opendaylight:params:xml:ns:yang:controller:config","2013-04-05","service-ref");
145 QName usesGroupingPathLastComponent = uses.getGroupingPath().getLastComponent();
146 assertEquals(groupingQName, usesGroupingPathLastComponent);
147 assertEquals(0, getChildNodeSizeWithoutUses(schemaServiceContainer));
149 DataSchemaNode type = schemaServiceContainer.getDataChildByName("type");
150 List<UnknownSchemaNode> typeUnknownSchemaNodes = type
151 .getUnknownSchemaNodes();
153 assertEquals(1, typeUnknownSchemaNodes.size());
155 UnknownSchemaNode typeUnknownSchemaNode = typeUnknownSchemaNodes.get(0);
157 QNameModule qNameModule = QNameModule
159 "urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom"),
160 SimpleDateFormatUtil.getRevisionFormat().parse(
162 QName qName = QName.create(qNameModule, "schema-service");
164 assertEquals(qName, typeUnknownSchemaNode.getQName());
165 assertEquals(typeUnknownSchemaNode.getQName(), typeUnknownSchemaNode
166 .getPath().getLastComponent());
169 private static int getChildNodeSizeWithoutUses(final DataNodeContainer csn) {
171 for (DataSchemaNode dsn : csn.getChildNodes()) {
172 if (dsn.isAddedByUses() == false) {