c500b43cb8941864b0ebdf1b643300fde80efe04
[yangtools.git] / yang / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / openconfigver / OpenconfigVersionComplexTest.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.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12
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;
23
24 public class OpenconfigVersionComplexTest {
25     private static final YangParserConfiguration SEMVER = YangParserConfiguration.builder()
26         .importResolutionMode(ImportResolutionMode.OPENCONFIG_SEMVER)
27         .build();
28
29     @Test
30     public void complexTest1() throws Exception {
31         final SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/complex/complex-1",
32             SEMVER);
33         verifySchemaContextTest1(context);
34     }
35
36     @Test
37     public void complexTest1Yang1_1() throws Exception {
38         final SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/complex/complex-1-rfc7950",
39             SEMVER);
40         verifySchemaContextTest1(context);
41     }
42
43     private static void verifySchemaContextTest1(final SchemaContext context) {
44         assertNotNull(context);
45
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"))
48                 .iterator().next();
49
50         // check module versions
51         assertEquals(SemVer.valueOf("1.3.95"), semVer.getSemanticVersion().get());
52         assertEquals(SemVer.valueOf("1.50.2"), foo.getSemanticVersion().get());
53
54         final Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
55         assertEquals(SemVer.valueOf("1.2.6"), bar.getSemanticVersion().get());
56
57         final Module foobar = StmtTestUtils.findImportedModule(context, bar, "foobar");
58         assertEquals(SemVer.valueOf("2.26.465"), foobar.getSemanticVersion().get());
59
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));
65
66         assertNotNull("This component should be present", context.findDataTreeChild(
67             QName.create(bar.getQNameModule(), "should-present")).orElse(null));
68
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")));
74
75         assertEquals("This component should not be present", Optional.empty(), context.findDataTreeChild(
76             QName.create(bar.getQNameModule(), "should-not-be-present")));
77     }
78
79     @Test
80     public void complexTest2() throws Exception {
81         final SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/complex/complex-2", SEMVER);
82         verifySchemaContextTest2(context);
83     }
84
85     @Test
86     public void complexTest2Yang1_1() throws Exception {
87         final SchemaContext context = StmtTestUtils.parseYangSources("/openconfig-version/complex/complex-2-rfc7950",
88             SEMVER);
89         verifySchemaContextTest2(context);
90     }
91
92     private static void verifySchemaContextTest2(final SchemaContext context) {
93         assertNotNull(context);
94
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"))
97                 .iterator().next();
98
99         // check module versions
100         assertEquals(SemVer.valueOf("2.5.50"), semVer.getSemanticVersion().get());
101         assertEquals(SemVer.valueOf("2.32.2"), foo.getSemanticVersion().get());
102
103         final Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
104         assertEquals(SemVer.valueOf("4.9.8"), bar.getSemanticVersion().get());
105
106         final Module foobar = StmtTestUtils.findImportedModule(context, bar, "foobar");
107         assertEquals(SemVer.valueOf("7.13.99"), foobar.getSemanticVersion().get());
108
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));
114
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));
119
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")));
129
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));
134
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")));
138     }
139 }