Remove IetfYangSmiv2Namespace
[yangtools.git] / yang / rfc6643-parser-support / src / test / java / org / opendaylight / yangtools / rfc6643 / parser / IetfYangSmiv2ExtensionPluginTest.java
1 /*
2  * Copyright (c) 2017, 2020 PANTHEON.tech, s.r.o. 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.rfc6643.parser;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertTrue;
12
13 import java.io.IOException;
14 import org.junit.AfterClass;
15 import org.junit.BeforeClass;
16 import org.junit.Test;
17 import org.opendaylight.yangtools.rfc6643.model.api.AliasSchemaNode;
18 import org.opendaylight.yangtools.rfc6643.model.api.DefValSchemaNode;
19 import org.opendaylight.yangtools.rfc6643.model.api.ImpliedSchemaNode;
20 import org.opendaylight.yangtools.rfc6643.model.api.MaxAccessSchemaNode;
21 import org.opendaylight.yangtools.rfc6643.model.api.ObjectIdentifier;
22 import org.opendaylight.yangtools.rfc6643.model.api.OidSchemaNode;
23 import org.opendaylight.yangtools.rfc6643.model.api.SubIdSchemaNode;
24 import org.opendaylight.yangtools.yang.common.QName;
25 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
28 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
29 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
30 import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
31 import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
32 import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors;
33 import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource;
34 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
35 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
36 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
37
38 public class IetfYangSmiv2ExtensionPluginTest {
39     private static final String NS = "urn:opendaylight:yang:extension:third-party";
40     private static final String REV = "2016-06-09";
41
42     private static CrossSourceStatementReactor reactor;
43
44     @BeforeClass
45     public static void createReactor() {
46         reactor = RFC7950Reactors.defaultReactorBuilder()
47                 .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, DisplayHintStatementSupport.getInstance())
48                 .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, MaxAccessStatementSupport.getInstance())
49                 .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, DefValStatementSupport.getInstance())
50                 .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, ImpliedStatementSupport.getInstance())
51                 .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AliasStatementSupport.getInstance())
52                 .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, OidStatementSupport.getInstance())
53                 .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, SubIdStatementSupport.getInstance())
54                 .build();
55     }
56
57     @AfterClass
58     public static void freeReactor() {
59         reactor = null;
60     }
61
62     @Test
63     public void testExtensions() throws ReactorException, YangSyntaxErrorException, IOException {
64         SchemaContext schema = createSchema();
65
66         assertTrue(schema.getUnknownSchemaNodes().size() == 1);
67         AliasSchemaNode aliasExtEffectStmt = (AliasSchemaNode) schema.getUnknownSchemaNodes().iterator().next();
68         assertEquals(aliasExtEffectStmt.getArgument(), "ifXTable");
69         assertTrue(aliasExtEffectStmt.getUnknownSchemaNodes().size() == 1);
70         OidSchemaNode oidExtEffectStmt = (OidSchemaNode) aliasExtEffectStmt.getUnknownSchemaNodes().iterator().next();
71         assertEquals(oidExtEffectStmt.getArgument().toString(), "1.3.6.1.2.1.31.1.1");
72
73         final DataSchemaNode dataChildByName = schema.getDataChildByName(QName.create(NS, REV, "root"));
74         assertTrue(dataChildByName instanceof ContainerSchemaNode);
75         final ContainerSchemaNode root = (ContainerSchemaNode) dataChildByName;
76         assertTrue(root.getUnknownSchemaNodes().size() == 1);
77         OidSchemaNode oid = (OidSchemaNode) root.getUnknownSchemaNodes().iterator().next();
78         assertEquals(oid.getArgument().toString(), "1");
79
80         ListSchemaNode ifStackEntry = (ListSchemaNode) root.getDataChildByName(QName.create(NS, REV, "ifStackEntry"));
81         assertTrue(ifStackEntry.getUnknownSchemaNodes().size() == 2);
82         ifStackEntry.getUnknownSchemaNodes().forEach(unknownSchemaNode -> {
83             if (unknownSchemaNode instanceof OidSchemaNode) {
84                 assertEquals(((OidSchemaNode) unknownSchemaNode).getArgument().toString(),
85                         ObjectIdentifier.forString("1.1").toString());
86             } else if (unknownSchemaNode instanceof ImpliedSchemaNode) {
87                 assertEquals(((ImpliedSchemaNode) unknownSchemaNode).getArgument(), "ifStackHigherLayer");
88             }
89         });
90
91         LeafSchemaNode ifStackHigherLayer = (LeafSchemaNode)
92                 ifStackEntry.getDataChildByName(QName.create(NS, REV, "ifStackHigherLayer"));
93
94         ifStackHigherLayer.getUnknownSchemaNodes().forEach(unknownSchemaNode -> {
95             if (unknownSchemaNode instanceof MaxAccessSchemaNode) {
96                 final MaxAccessSchemaNode maxAccess = (MaxAccessSchemaNode) unknownSchemaNode;
97                 assertEquals(maxAccess.getArgument(), "not-accessible");
98             }
99         });
100
101         LeafSchemaNode testNumberLeaf = (LeafSchemaNode)
102                 ifStackEntry.getDataChildByName(QName.create(NS, REV, "test-number"));
103         assertTrue(testNumberLeaf.getUnknownSchemaNodes().size() == 3);
104         testNumberLeaf.getUnknownSchemaNodes().forEach(unknownSchemaNode -> {
105             if (unknownSchemaNode instanceof SubIdSchemaNode) {
106                 assertEquals(((SubIdSchemaNode) unknownSchemaNode).getArgument(), 2);
107             } else if (unknownSchemaNode instanceof DefValSchemaNode) {
108                 assertEquals(((DefValSchemaNode) unknownSchemaNode).getArgument(), "0");
109             }
110         });
111     }
112
113     private static SchemaContext createSchema() throws ReactorException, YangSyntaxErrorException, IOException {
114         return reactor.newBuild()
115                 .addSources(
116                     YangStatementStreamSource.create(YangTextSchemaSource.forResource(
117                         IetfYangSmiv2ExtensionPluginTest.class, "/foo.yang")),
118                     YangStatementStreamSource.create(YangTextSchemaSource.forResource(
119                         IetfYangSmiv2ExtensionPluginTest.class, "/ietf-yang-smiv2.yang")))
120                 .buildEffective();
121     }
122 }