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.openconfigver;
10 import static org.hamcrest.CoreMatchers.instanceOf;
11 import static org.hamcrest.CoreMatchers.startsWith;
12 import static org.hamcrest.MatcherAssert.assertThat;
13 import static org.junit.Assert.assertEquals;
14 import static org.junit.Assert.assertNotNull;
15 import static org.junit.Assert.assertThrows;
17 import java.util.Optional;
18 import org.junit.Test;
19 import org.opendaylight.yangtools.concepts.SemVer;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.common.XMLNamespace;
22 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.Module;
25 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
26 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
27 import org.opendaylight.yangtools.yang.parser.api.ImportResolutionMode;
28 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
29 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
30 import org.opendaylight.yangtools.yang.stmt.StmtTestUtils;
32 @Deprecated(since = "8.0.4", forRemoval = true)
33 public class OpenconfigVersionTest {
34 private static final YangParserConfiguration SEMVER = YangParserConfiguration.builder()
35 .importResolutionMode(ImportResolutionMode.OPENCONFIG_SEMVER)
39 public void basicTest() throws Exception {
40 SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/basic", SEMVER);
41 assertNotNull(context);
43 Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
44 Module bar = context.findModules(XMLNamespace.of("bar")).iterator().next();
45 Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
48 assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
49 assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
50 assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
54 public void basicTest2() throws Exception {
55 SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/basic-2", SEMVER);
56 assertNotNull(context);
58 Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
59 Module bar = context.findModules(XMLNamespace.of("bar")).iterator().next();
60 Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
63 assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
64 assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
65 assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
69 public void basicTest3() throws Exception {
70 SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/basic-3", SEMVER);
71 assertNotNull(context);
73 Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
74 Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
77 assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
78 assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
82 public void basicImportTest1() throws Exception {
83 SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/basic-import-1", SEMVER);
84 assertNotNull(context);
86 Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
87 Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
90 assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
91 assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
92 Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
93 assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
97 public void multipleModulesTest() throws Exception {
98 SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/multiple-modules", SEMVER);
99 assertNotNull(context);
101 Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
102 Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
105 assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
106 assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
107 Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
108 assertEquals(SemVer.valueOf("0.10.4"), bar.getSemanticVersion().get());
112 public void basicImportErrTest1() {
113 ReactorException ex = assertThrows(ReactorException.class,
114 () -> StmtTestUtils.parseYangSources("/openconfig-version/basic-import-invalid-1", SEMVER));
115 assertThat(ex.getCause().getMessage(),
116 startsWith("Unable to find module compatible with requested import [bar(0.1.2)]."));
120 public void basicImportErrTest2() {
121 ReactorException ex = assertThrows(ReactorException.class,
122 () -> StmtTestUtils.parseYangSources("/openconfig-version/basic-import-invalid-2", SEMVER));
123 assertThat(ex.getCause().getMessage(),
124 startsWith("Unable to find module compatible with requested import [bar(0.1.2)]."));
128 public void nodeTest() throws Exception {
129 SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/node-test", SEMVER);
130 assertNotNull(context);
132 Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
133 Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
136 assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
137 assertEquals(SemVer.valueOf("2016.1.1"), foo.getSemanticVersion().get());
138 Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
139 assertEquals(SemVer.valueOf("2016.4.6"), bar.getSemanticVersion().get());
141 QName root = QName.create("foo", "2016-01-01", "foo-root");
142 QName container20160404 = QName.create("foo", "2016-01-01", "con20160404");
143 SchemaNode findDataSchemaNode = context.findDataTreeChild(root, container20160404).orElseThrow();
144 assertThat(findDataSchemaNode, instanceOf(ContainerSchemaNode.class));
146 QName container20160405 = QName.create("foo", "2016-01-01", "con20160405");
147 findDataSchemaNode = context.findDataTreeChild(root, container20160405).orElseThrow();
148 assertThat(findDataSchemaNode, instanceOf(ContainerSchemaNode.class));
150 QName container20160406 = QName.create("foo", "2016-01-01", "con20160406");
151 findDataSchemaNode = context.findDataTreeChild(root, container20160406).orElseThrow();
152 assertThat(findDataSchemaNode, instanceOf(ContainerSchemaNode.class));
154 QName container20170406 = QName.create("foo", "2016-01-01", "con20170406");
155 final Optional<DataSchemaNode> dataTreeChild = context.findDataTreeChild(root, container20170406);
156 assertEquals(Optional.empty(), dataTreeChild);