2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2024 Ericsson
4 * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
21 package org.oran.smo.yangtools.parser.model.statements.oran.test;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertTrue;
28 import java.util.Arrays;
30 import org.junit.Test;
32 import org.oran.smo.yangtools.parser.findings.ParserFindingType;
33 import org.oran.smo.yangtools.parser.model.statements.AbstractStatement.StatementArgumentType;
34 import org.oran.smo.yangtools.parser.model.statements.ExtensionStatement.MaxCardinality;
35 import org.oran.smo.yangtools.parser.model.statements.oran.CORAN;
36 import org.oran.smo.yangtools.parser.model.statements.oran.YOranSmoTeivASide;
37 import org.oran.smo.yangtools.parser.model.statements.oran.YOranSmoTeivBSide;
38 import org.oran.smo.yangtools.parser.model.statements.oran.YOranSmoTeivBiDirectionalTopologyRelationship;
39 import org.oran.smo.yangtools.parser.model.statements.oran.YOranSmoTeivLabel;
40 import org.oran.smo.yangtools.parser.model.statements.yang.YContainer;
41 import org.oran.smo.yangtools.parser.model.statements.yang.YLeaf;
42 import org.oran.smo.yangtools.parser.model.statements.yang.YLeafList;
43 import org.oran.smo.yangtools.parser.model.statements.yang.YList;
44 import org.oran.smo.yangtools.parser.model.statements.yang.YModule;
45 import org.oran.smo.yangtools.parser.testutils.YangTestCommon;
47 public class OranSmoTeivExtensionsTest extends YangTestCommon {
49 protected static final String SMO_TIES_COMMON_YANG_EXT = "src/test/resources/_orig-modules/o-ran-smo-teiv-common-yang-extensions@2023-12-12.yang";
50 protected static final String SMO_TIES_COMMON_YANG_TYPES = "src/test/resources/_orig-modules/o-ran-smo-teiv-common-yang-types@2023-12-12.yang";
53 public void test_oran_extensions() {
55 parseAbsoluteImplementsYangModels(Arrays.asList(
56 "src/test/resources/model-statements-oran/oran-smo-teiv-extension-test.yang", SMO_TIES_COMMON_YANG_EXT,
57 SMO_TIES_COMMON_YANG_TYPES));
59 final YModule module = getModule("oran-smo-teiv-extension-test");
60 assertTrue(module != null);
62 final YOranSmoTeivLabel label0 = module.getRevisions().get(0).getChild(
63 CORAN.ORAN_SMO_TEIV_COMMON_YANG_EXTENSIONS__LABEL);
64 final YOranSmoTeivLabel label1 = module.getRevisions().get(1).getChild(
65 CORAN.ORAN_SMO_TEIV_COMMON_YANG_EXTENSIONS__LABEL);
67 assertNotNull(label0);
68 assertNotNull(label1);
70 assertEquals("2.3.4", label0.getLabel());
71 assertEquals(2, label0.getVersion());
72 assertEquals(3, label0.getRelease());
73 assertEquals(4, label0.getCorrection());
75 assertEquals("06.34.12345", label1.getLabel());
76 assertEquals(6, label1.getVersion());
77 assertEquals(34, label1.getRelease());
78 assertEquals(12345, label1.getCorrection());
80 final YOranSmoTeivBiDirectionalTopologyRelationship rel1 = getChild(module,
81 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-1");
83 assertNoFindingsOnStatement(rel1);
85 assertEquals("o-ran-smo-teiv-common-yang-extensions", rel1.getStatementModuleAndName().getModuleName());
86 assertEquals("biDirectionalTopologyRelationship", rel1.getStatementModuleAndName().getStatementName());
87 assertFalse(rel1.getStatementModuleAndName().isYangCoreStatement());
88 assertTrue(rel1.getStatementModuleAndName().isExtensionStatement());
89 assertEquals(StatementArgumentType.NAME, rel1.getArgumentType());
90 assertEquals(MaxCardinality.MULTIPLE, rel1.getMaxCardinalityUnderParent());
91 assertEquals("relationship-1", rel1.getRelationshipName());
93 final YLeaf leafAside = getLeaf(rel1, "leaf-a-side");
94 assertNotNull(leafAside);
95 assertNoFindingsOnStatement(leafAside);
96 final YOranSmoTeivASide aSide = getChild(leafAside, "or-teiv-ext:aSide");
98 assertNoFindingsOnStatement(aSide);
100 assertEquals("o-ran-smo-teiv-common-yang-extensions", aSide.getStatementModuleAndName().getModuleName());
101 assertEquals("aSide", aSide.getStatementModuleAndName().getStatementName());
102 assertFalse(aSide.getStatementModuleAndName().isYangCoreStatement());
103 assertTrue(aSide.getStatementModuleAndName().isExtensionStatement());
104 assertEquals(StatementArgumentType.NAME, aSide.getArgumentType());
105 assertEquals(MaxCardinality.ONE, aSide.getMaxCardinalityUnderParent());
106 assertEquals("role-a-side", aSide.getTeivTypeName());
108 final YLeafList leafBside = getLeafList(rel1, "leaf-b-side");
109 assertNotNull(leafBside);
110 assertNoFindingsOnStatement(leafBside);
111 final YOranSmoTeivBSide bSide = getChild(leafBside, "or-teiv-ext:bSide");
112 assertNotNull(bSide);
113 assertNoFindingsOnStatement(bSide);
115 assertEquals("o-ran-smo-teiv-common-yang-extensions", bSide.getStatementModuleAndName().getModuleName());
116 assertEquals("bSide", bSide.getStatementModuleAndName().getStatementName());
117 assertFalse(bSide.getStatementModuleAndName().isYangCoreStatement());
118 assertTrue(bSide.getStatementModuleAndName().isExtensionStatement());
119 assertEquals(StatementArgumentType.NAME, bSide.getArgumentType());
120 assertEquals(MaxCardinality.ONE, bSide.getMaxCardinalityUnderParent());
121 assertEquals("role-b-side", bSide.getTeivTypeName());
123 final YLeaf idLeaf = getLeaf(rel1, "id");
124 assertNotNull(idLeaf);
125 final YLeaf leafProp = getLeaf(rel1, "leaf-prop");
126 assertNotNull(leafProp);
127 final YLeafList leafListProp = getLeafList(rel1, "leaf-list-prop");
128 assertNotNull(leafListProp);
129 assertNotNull(getChild(rel1, "key"));
131 // - - - - error cases - - - - -
133 final YOranSmoTeivBiDirectionalTopologyRelationship rel2 = getChild(module,
134 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-2");
136 assertStatementHasFindingOfType(rel2, ParserFindingType.P025_INVALID_EXTENSION.toString());
138 final YOranSmoTeivBiDirectionalTopologyRelationship rel3 = getChild(module,
139 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-3");
141 assertStatementHasFindingOfType(rel3, ParserFindingType.P025_INVALID_EXTENSION.toString());
143 final YOranSmoTeivBiDirectionalTopologyRelationship rel4 = getChild(module,
144 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-4");
146 assertStatementHasFindingOfType(rel4, ParserFindingType.P025_INVALID_EXTENSION.toString());
148 final YOranSmoTeivBiDirectionalTopologyRelationship rel5 = getChild(module,
149 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-5");
151 assertStatementHasFindingOfType(rel5, ParserFindingType.P025_INVALID_EXTENSION.toString());
153 final YOranSmoTeivBiDirectionalTopologyRelationship rel6 = getChild(module,
154 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-6");
156 assertStatementHasFindingOfType(rel6, ParserFindingType.P025_INVALID_EXTENSION.toString());
158 final YContainer cont1 = getContainer(module, "cont1");
159 final YOranSmoTeivBiDirectionalTopologyRelationship rel7 = getChild(cont1,
160 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-7");
162 assertStatementHasFindingOfType(rel7, ParserFindingType.P025_INVALID_EXTENSION.toString());
164 final YOranSmoTeivBiDirectionalTopologyRelationship rel8 = getChild(module,
165 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-8");
167 assertStatementHasFindingOfType(rel8, ParserFindingType.P025_INVALID_EXTENSION.toString());
168 final YContainer cont2 = getContainer(rel8, "cont2");
169 final YOranSmoTeivASide cont2aSide = getChild(cont2, "or-teiv-ext:aSide");
170 assertStatementHasFindingOfType(cont2aSide, ParserFindingType.P025_INVALID_EXTENSION.toString());
171 final YList list2 = getList(rel8, "list2");
172 final YOranSmoTeivBSide list2bSide = getChild(list2, "or-teiv-ext:bSide");
173 assertStatementHasFindingOfType(list2bSide, ParserFindingType.P025_INVALID_EXTENSION.toString());