Deprecate getSemanticVersion() for removal
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / openconfigver / OpenconfigVersionTest.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.openconfigver;
9
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;
16
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;
31
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)
36         .build();
37
38     @Test
39     public void basicTest() throws Exception {
40         SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/basic", SEMVER);
41         assertNotNull(context);
42
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"))
46             .iterator().next();
47
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());
51     }
52
53     @Test
54     public void basicTest2() throws Exception {
55         SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/basic-2", SEMVER);
56         assertNotNull(context);
57
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"))
61             .iterator().next();
62
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());
66     }
67
68     @Test
69     public void basicTest3() throws Exception {
70         SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/basic-3", SEMVER);
71         assertNotNull(context);
72
73         Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
74         Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
75             .iterator().next();
76
77         assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
78         assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
79     }
80
81     @Test
82     public void basicImportTest1() throws Exception {
83         SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/basic-import-1", SEMVER);
84         assertNotNull(context);
85
86         Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
87         Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
88             .iterator().next();
89
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());
94     }
95
96     @Test
97     public void multipleModulesTest() throws Exception {
98         SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/multiple-modules", SEMVER);
99         assertNotNull(context);
100
101         Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
102         Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
103             .iterator().next();
104
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());
109     }
110
111     @Test
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)]."));
117     }
118
119     @Test
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)]."));
125     }
126
127     @Test
128     public void nodeTest() throws Exception {
129         SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/node-test", SEMVER);
130         assertNotNull(context);
131
132         Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
133         Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
134             .iterator().next();
135
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());
140
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));
145
146         QName container20160405 = QName.create("foo", "2016-01-01", "con20160405");
147         findDataSchemaNode = context.findDataTreeChild(root, container20160405).orElseThrow();
148         assertThat(findDataSchemaNode, instanceOf(ContainerSchemaNode.class));
149
150         QName container20160406 = QName.create("foo", "2016-01-01", "con20160406");
151         findDataSchemaNode = context.findDataTreeChild(root, container20160406).orElseThrow();
152         assertThat(findDataSchemaNode, instanceOf(ContainerSchemaNode.class));
153
154         QName container20170406 = QName.create("foo", "2016-01-01", "con20170406");
155         final Optional<DataSchemaNode> dataTreeChild = context.findDataTreeChild(root, container20170406);
156         assertEquals(Optional.empty(), dataTreeChild);
157     }
158 }