4aeec95bfce116817720f741dac12d47d6679b06
[smo/teiv.git] /
1 /*
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
9  *
10  *        http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  *  SPDX-License-Identifier: Apache-2.0
19  *  ============LICENSE_END=========================================================
20  */
21 package org.oran.smo.yangtools.parser.model.statements.oran.test;
22
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;
27
28 import java.util.Arrays;
29
30 import org.junit.Test;
31
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;
46
47 public class OranSmoTeivExtensionsTest extends YangTestCommon {
48
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";
51
52     @Test
53     public void test_oran_extensions() {
54
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));
58
59         final YModule module = getModule("oran-smo-teiv-extension-test");
60         assertTrue(module != null);
61
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);
66
67         assertNotNull(label0);
68         assertNotNull(label1);
69
70         assertEquals("2.3.4", label0.getLabel());
71         assertEquals(2, label0.getVersion());
72         assertEquals(3, label0.getRelease());
73         assertEquals(4, label0.getCorrection());
74
75         assertEquals("06.34.12345", label1.getLabel());
76         assertEquals(6, label1.getVersion());
77         assertEquals(34, label1.getRelease());
78         assertEquals(12345, label1.getCorrection());
79
80         final YOranSmoTeivBiDirectionalTopologyRelationship rel1 = getChild(module,
81                 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-1");
82         assertNotNull(rel1);
83         assertNoFindingsOnStatement(rel1);
84
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());
92
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");
97         assertNotNull(aSide);
98         assertNoFindingsOnStatement(aSide);
99
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());
107
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);
114
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());
122
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"));
130
131         // - - - - error cases - - - - -
132
133         final YOranSmoTeivBiDirectionalTopologyRelationship rel2 = getChild(module,
134                 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-2");
135         assertNotNull(rel2);
136         assertStatementHasFindingOfType(rel2, ParserFindingType.P025_INVALID_EXTENSION.toString());
137
138         final YOranSmoTeivBiDirectionalTopologyRelationship rel3 = getChild(module,
139                 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-3");
140         assertNotNull(rel3);
141         assertStatementHasFindingOfType(rel3, ParserFindingType.P025_INVALID_EXTENSION.toString());
142
143         final YOranSmoTeivBiDirectionalTopologyRelationship rel4 = getChild(module,
144                 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-4");
145         assertNotNull(rel4);
146         assertStatementHasFindingOfType(rel4, ParserFindingType.P025_INVALID_EXTENSION.toString());
147
148         final YOranSmoTeivBiDirectionalTopologyRelationship rel5 = getChild(module,
149                 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-5");
150         assertNotNull(rel5);
151         assertStatementHasFindingOfType(rel5, ParserFindingType.P025_INVALID_EXTENSION.toString());
152
153         final YOranSmoTeivBiDirectionalTopologyRelationship rel6 = getChild(module,
154                 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-6");
155         assertNotNull(rel6);
156         assertStatementHasFindingOfType(rel6, ParserFindingType.P025_INVALID_EXTENSION.toString());
157
158         final YContainer cont1 = getContainer(module, "cont1");
159         final YOranSmoTeivBiDirectionalTopologyRelationship rel7 = getChild(cont1,
160                 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-7");
161         assertNotNull(rel7);
162         assertStatementHasFindingOfType(rel7, ParserFindingType.P025_INVALID_EXTENSION.toString());
163
164         final YOranSmoTeivBiDirectionalTopologyRelationship rel8 = getChild(module,
165                 "or-teiv-ext:biDirectionalTopologyRelationship", "relationship-8");
166         assertNotNull(rel8);
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());
174     }
175 }