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.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
13 import java.util.Optional;
14 import org.junit.Test;
15 import org.opendaylight.yangtools.concepts.SemVer;
16 import org.opendaylight.yangtools.yang.common.QName;
17 import org.opendaylight.yangtools.yang.common.XMLNamespace;
18 import org.opendaylight.yangtools.yang.model.api.Module;
19 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
20 import org.opendaylight.yangtools.yang.parser.api.ImportResolutionMode;
21 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
22 import org.opendaylight.yangtools.yang.stmt.StmtTestUtils;
24 public class OpenconfigVersionComplexTest {
25 private static final YangParserConfiguration SEMVER = YangParserConfiguration.builder()
26 .importResolutionMode(ImportResolutionMode.OPENCONFIG_SEMVER)
30 public void complexTest1() throws Exception {
31 final SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/complex/complex-1",
33 verifySchemaContextTest1(context);
37 public void complexTest1Yang1_1() throws Exception {
38 final SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/complex/complex-1-rfc7950",
40 verifySchemaContextTest1(context);
43 private static void verifySchemaContextTest1(final SchemaContext context) {
44 assertNotNull(context);
46 final Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
47 final Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
50 // check module versions
51 assertEquals(SemVer.valueOf("1.3.95"), semVer.getSemanticVersion().get());
52 assertEquals(SemVer.valueOf("1.50.2"), foo.getSemanticVersion().get());
54 final Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
55 assertEquals(SemVer.valueOf("1.2.6"), bar.getSemanticVersion().get());
57 final Module foobar = StmtTestUtils.findImportedModule(context, bar, "foobar");
58 assertEquals(SemVer.valueOf("2.26.465"), foobar.getSemanticVersion().get());
60 // check imported components
61 assertNotNull("This component should be present", context.findDataTreeChild(
62 QName.create(bar.getQNameModule(), "root"),
63 QName.create(bar.getQNameModule(), "test-container"),
64 QName.create(bar.getQNameModule(), "number")).orElse(null));
66 assertNotNull("This component should be present", context.findDataTreeChild(
67 QName.create(bar.getQNameModule(), "should-present")).orElse(null));
69 // check not imported components
70 assertEquals("This component should not be present", Optional.empty(), context.findDataTreeChild(
71 QName.create(bar.getQNameModule(), "root"),
72 QName.create(bar.getQNameModule(), "test-container"),
73 QName.create(bar.getQNameModule(), "oldnumber")));
75 assertEquals("This component should not be present", Optional.empty(), context.findDataTreeChild(
76 QName.create(bar.getQNameModule(), "should-not-be-present")));
80 public void complexTest2() throws Exception {
81 final SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/complex/complex-2", SEMVER);
82 verifySchemaContextTest2(context);
86 public void complexTest2Yang1_1() throws Exception {
87 final SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/complex/complex-2-rfc7950",
89 verifySchemaContextTest2(context);
92 private static void verifySchemaContextTest2(final SchemaContext context) {
93 assertNotNull(context);
95 final Module foo = context.findModules(XMLNamespace.of("foo")).iterator().next();
96 final Module semVer = context.findModules(XMLNamespace.of("http://openconfig.net/yang/openconfig-ext"))
99 // check module versions
100 assertEquals(SemVer.valueOf("2.5.50"), semVer.getSemanticVersion().get());
101 assertEquals(SemVer.valueOf("2.32.2"), foo.getSemanticVersion().get());
103 final Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
104 assertEquals(SemVer.valueOf("4.9.8"), bar.getSemanticVersion().get());
106 final Module foobar = StmtTestUtils.findImportedModule(context, bar, "foobar");
107 assertEquals(SemVer.valueOf("7.13.99"), foobar.getSemanticVersion().get());
109 // check used augmentations
110 assertNotNull("This component should be present", context.findDataTreeChild(
111 QName.create(foobar.getQNameModule(), "root"),
112 QName.create(foobar.getQNameModule(), "test-container"),
113 QName.create(bar.getQNameModule(), "should-present-leaf-1")).orElse(null));
115 assertNotNull("This component should be present", context.findDataTreeChild(
116 QName.create(foobar.getQNameModule(), "root"),
117 QName.create(foobar.getQNameModule(), "test-container"),
118 QName.create(bar.getQNameModule(), "should-present-leaf-2")).orElse(null));
120 // check not used augmentations
121 assertEquals("This component should not be present", Optional.empty(), context.findDataTreeChild(
122 QName.create(foobar.getQNameModule(), "root"),
123 QName.create(foobar.getQNameModule(), "test-container"),
124 QName.create(bar.getQNameModule(), "should-not-be-present-leaf-1")));
125 assertEquals("This component should not be present", Optional.empty(), context.findDataTreeChild(
126 QName.create(foobar.getQNameModule(), "root"),
127 QName.create(foobar.getQNameModule(), "test-container"),
128 QName.create(bar.getQNameModule(), "should-not-be-present-leaf-2")));
130 // check if correct foobar module was included
131 assertNotNull("This component should be present", context.findDataTreeChild(
132 QName.create(foobar.getQNameModule(), "root"),
133 QName.create(foobar.getQNameModule(), "included-correct-mark")).orElse(null));
135 assertEquals("This component should not be present", Optional.empty(), context.findDataTreeChild(
136 QName.create(foobar.getQNameModule(), "root"),
137 QName.create(foobar.getQNameModule(), "included-not-correct-mark")));