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 public class OpenconfigVersionTest {
33 private static final YangParserConfiguration SEMVER = YangParserConfiguration.builder()
34 .importResolutionMode(ImportResolutionMode.OPENCONFIG_SEMVER)
38 public void basicTest() throws Exception {
39 SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/basic", SEMVER);
40 assertNotNull(context);
42 Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
43 Module bar = context.findModules(XMLNamespace.of("bar")).iterator().next();
44 Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
47 assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
48 assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
49 assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
53 public void basicTest2() throws Exception {
54 SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/basic-2", SEMVER);
55 assertNotNull(context);
57 Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
58 Module bar = context.findModules(XMLNamespace.of("bar")).iterator().next();
59 Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
62 assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
63 assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
64 assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
68 public void basicTest3() throws Exception {
69 SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/basic-3", SEMVER);
70 assertNotNull(context);
72 Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
73 Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
76 assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
77 assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
81 public void basicImportTest1() throws Exception {
82 SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/basic-import-1", SEMVER);
83 assertNotNull(context);
85 Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
86 Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
89 assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
90 assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
91 Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
92 assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
96 public void multipleModulesTest() throws Exception {
97 SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/multiple-modules", SEMVER);
98 assertNotNull(context);
100 Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
101 Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
104 assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
105 assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
106 Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
107 assertEquals(SemVer.valueOf("0.10.4"), bar.getSemanticVersion().get());
111 public void basicImportErrTest1() throws Exception {
112 ReactorException ex = assertThrows(ReactorException.class,
113 () -> StmtTestUtils.parseYangSources("/openconfig-version/basic-import-invalid-1", SEMVER));
114 assertThat(ex.getCause().getCause().getMessage(),
115 startsWith("Unable to find module compatible with requested import [bar(0.1.2)]."));
119 public void basicImportErrTest2() throws Exception {
120 ReactorException ex = assertThrows(ReactorException.class,
121 () -> StmtTestUtils.parseYangSources("/openconfig-version/basic-import-invalid-2", SEMVER));
122 assertThat(ex.getCause().getCause().getMessage(),
123 startsWith("Unable to find module compatible with requested import [bar(0.1.2)]."));
127 public void nodeTest() throws Exception {
128 SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/node-test", SEMVER);
129 assertNotNull(context);
131 Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
132 Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
135 assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
136 assertEquals(SemVer.valueOf("2016.1.1"), foo.getSemanticVersion().get());
137 Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
138 assertEquals(SemVer.valueOf("2016.4.6"), bar.getSemanticVersion().get());
140 QName root = QName.create("foo", "2016-01-01", "foo-root");
141 QName container20160404 = QName.create("foo", "2016-01-01", "con20160404");
142 SchemaNode findDataSchemaNode = context.findDataTreeChild(root, container20160404).orElseThrow();
143 assertThat(findDataSchemaNode, instanceOf(ContainerSchemaNode.class));
145 QName container20160405 = QName.create("foo", "2016-01-01", "con20160405");
146 findDataSchemaNode = context.findDataTreeChild(root, container20160405).orElseThrow();
147 assertThat(findDataSchemaNode, instanceOf(ContainerSchemaNode.class));
149 QName container20160406 = QName.create("foo", "2016-01-01", "con20160406");
150 findDataSchemaNode = context.findDataTreeChild(root, container20160406).orElseThrow();
151 assertThat(findDataSchemaNode, instanceOf(ContainerSchemaNode.class));
153 QName container20170406 = QName.create("foo", "2016-01-01", "con20170406");
154 final Optional<DataSchemaNode> dataTreeChild = context.findDataTreeChild(root, container20170406);
155 assertEquals(Optional.empty(), dataTreeChild);