504974dc5316146845bc72492b24e2676f48debc
[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.teiv.exposure.spi.impl;
22
23 import static org.oran.smo.teiv.utils.ResponseGenerator.generateResponse;
24 import static org.oran.smo.teiv.utils.TiesConstants.ATTRIBUTES;
25 import static org.oran.smo.teiv.utils.TiesConstants.ITEMS;
26 import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA_SCHEMA;
27 import static org.oran.smo.teiv.utils.exposure.PaginationVerifierTestUtil.verifyResponse;
28 import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
29
30 import java.math.BigDecimal;
31 import java.util.ArrayList;
32 import java.util.Collections;
33 import java.util.HashMap;
34 import java.util.LinkedHashMap;
35 import java.util.List;
36 import java.util.Map;
37 import java.util.Set;
38
39 import javax.sql.DataSource;
40
41 import org.oran.smo.teiv.schema.DataType;
42 import org.jooq.DSLContext;
43 import org.jooq.SQLDialect;
44 import org.jooq.impl.DSL;
45 import org.junit.jupiter.api.Assertions;
46 import org.junit.jupiter.api.BeforeAll;
47 import org.junit.jupiter.api.BeforeEach;
48 import org.junit.jupiter.api.Test;
49 import org.springframework.boot.jdbc.DataSourceBuilder;
50 import org.springframework.boot.test.context.SpringBootTest;
51 import org.springframework.boot.test.mock.mockito.MockBean;
52 import org.springframework.context.annotation.Configuration;
53
54 import com.fasterxml.jackson.databind.ObjectMapper;
55
56 import org.oran.smo.teiv.db.TestPostgresqlContainer;
57 import org.oran.smo.teiv.exception.TiesException;
58 import org.oran.smo.teiv.exposure.spi.mapper.MapperUtility;
59 import org.oran.smo.teiv.exposure.spi.mapper.PaginationMetaData;
60 import org.oran.smo.teiv.exposure.utils.PaginationDTO;
61 import org.oran.smo.teiv.schema.EntityType;
62 import org.oran.smo.teiv.schema.PostgresSchemaLoader;
63 import org.oran.smo.teiv.schema.RelationType;
64 import org.oran.smo.teiv.schema.SchemaLoaderException;
65 import org.oran.smo.teiv.schema.SchemaRegistry;
66 import org.oran.smo.teiv.startup.SchemaHandler;
67 import org.oran.smo.teiv.utils.query.exception.TiesPathException;
68 import java.util.HashSet;
69
70 @Configuration
71 @SpringBootTest
72 class DataPersistenceServiceImplGETRequestsContainerizedTest {
73     public static TestPostgresqlContainer postgreSQLContainer = TestPostgresqlContainer.getInstance();
74     private static DataPersistanceServiceImpl underTest;
75     private static MapperUtility mapperUtility;
76     private static DSLContext dslContext;
77     private static DSLContext writeDataDslContext;
78     private static final String REL_ID_PREFIX = "urn:base64:";
79
80     @MockBean
81     private SchemaHandler schemaHandler;
82
83     @BeforeAll
84     public static void beforeAll() throws UnsupportedOperationException, SchemaLoaderException {
85         String url = postgreSQLContainer.getJdbcUrl();
86         DataSource ds = DataSourceBuilder.create().url(url).username("test").password("test").build();
87         dslContext = DSL.using(ds, SQLDialect.POSTGRES);
88         writeDataDslContext = DSL.using(ds, SQLDialect.POSTGRES);
89         mapperUtility = new MapperUtility();
90         underTest = new DataPersistanceServiceImpl(dslContext, writeDataDslContext, mapperUtility);
91         PostgresSchemaLoader postgresSchemaLoader = new PostgresSchemaLoader(dslContext, new ObjectMapper());
92         postgresSchemaLoader.loadSchemaRegistry();
93         TestPostgresqlContainer.loadSampleData();
94     }
95
96     @BeforeEach
97     public void deleteAll() {
98         writeDataDslContext.meta().filterSchemas(s -> s.getName().equals(TIES_DATA_SCHEMA)).getTables().forEach(
99                 t -> writeDataDslContext.truncate(t).cascade().execute());
100         TestPostgresqlContainer.loadSampleData();
101     }
102
103     @Test
104     void testGetTopology() {
105         Map<String, List<Object>> response = new HashMap<>();
106         Map<String, Object> responseData = new HashMap<>();
107         Map<String, Object> attributesMap = new HashMap<>();
108         response.put("o-ran-smo-teiv-ran:GNBDUFunction", List.of(responseData));
109         attributesMap.put("gNBDUId", null);
110         attributesMap.put("fdn",
111                 "SubNetwork=SolarSystem/SubNetwork=Earth/SubNetwork=Europe/SubNetwork=Hungary/GNBDUFunction=16");
112         attributesMap.put("dUpLMNId", Map.of("mcc", "456", "mnc", "82"));
113         attributesMap.put("gNBId", 16L);
114         attributesMap.put("gNBIdLength", 2L);
115         attributesMap.put("cmId", null);
116         responseData.put("attributes", attributesMap);
117         responseData.put("id", "5A548EA9D166341776CA0695837E55D8");
118         responseData.put("sourceIds", List.of(
119                 "urn:3gpp:dn:/SubNetwork=SolarSystem/SubNetwork=Earth/SubNetwork=Europe/SubNetwork=Hungary" + "/GNBDUFunction=16",
120                 "urn:cmHandle:/395221E080CCF0FD1924103B15873814"));
121
122         Assertions.assertEquals(response, underTest.getTopology(SchemaRegistry.getEntityTypeByName("GNBDUFunction"),
123                 "5A548EA9D166341776CA0695837E55D8"));
124         Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getTopology(SchemaRegistry.getEntityTypeByName(
125                 "GNBDUFunction"), "-1"));
126
127         response.clear();
128         responseData.clear();
129         attributesMap.clear();
130
131         response.put("o-ran-smo-teiv-ran:AntennaCapability", List.of(responseData));
132         attributesMap.put("fdn",
133                 "SubNetwork=SolarSystem/SubNetwork=Earth/SubNetwork=Europe/SubNetwork=Hungary/AntennaCapability=1");
134         attributesMap.put("eUtranFqBands", List.of("123", "4564", "789"));
135         attributesMap.put("geranFqBands", List.of("123", "456", "789"));
136         attributesMap.put("nRFqBands", List.of("123", "456", "789"));
137         attributesMap.put("cmId", null);
138         responseData.put("attributes", attributesMap);
139         responseData.put("id", "5835F77BE9D4E102316BD59195F6370B");
140         responseData.put("sourceIds", Collections.EMPTY_LIST);
141
142         Assertions.assertEquals(response, underTest.getTopology(SchemaRegistry.getEntityTypeByName("AntennaCapability"),
143                 "5835F77BE9D4E102316BD59195F6370B"));
144     }
145
146     @Test
147     void testGetAllRelationships_manyToOneAndOneToMany() {
148         List<Map<String, List<Object>>> mapsList = new ArrayList<>();
149         Map<String, Object> response = new HashMap<>();
150         PaginationDTO paginationDTO1 = PaginationDTO.builder().offset(0).limit(100).basePath(
151                 "/domains/RAN/entities/NRCellDU/B480427E8A0C0B8D994E437784BB382F/relationships").addPathParameters("eiid",
152                         "B480427E8A0C0B8D994E437784BB382F").addPathParameters("domain", "RAN").addPathParameters(
153                                 "entityType", "NRCellDU").build();
154
155         paginationDTO1.setTotalSize(3);
156         response.putAll(new PaginationMetaData().getObjectList(paginationDTO1));
157
158         PaginationDTO paginationDTO2 = PaginationDTO.builder().offset(0).limit(100).basePath(
159                 "/domains/RAN/entities/NRCellDU/NON_EXISTING/relationships").addPathParameters("eiid", "NON_EXISTING")
160                 .addPathParameters("domain", "RAN").addPathParameters("entityType", "NRCellDU").build();
161
162         mapsList.add(Map.of("o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU", List.of(generateResponse(
163                 "D3215E08570BE58339C7463626B50E37", "B480427E8A0C0B8D994E437784BB382F",
164                 REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjpEMzIxNUUwODU3MEJFNTgzMzlDNzQ2MzYyNkI1MEUzNzpQUk9WSURFUzpOUkNlbGxEVTpCNDgwNDI3RThBMEMwQjhEOTk0RTQzNzc4NEJCMzgyRg=="))));
165
166         mapsList.add(Map.of("o-ran-smo-teiv-ran:SECTOR_GROUPS_NRCELLDU", List.of(generateResponse(
167                 "F5128C172A70C4FCD4739650B06DE9E2", "B480427E8A0C0B8D994E437784BB382F",
168                 REL_ID_PREFIX + "U2VjdG9yOkY1MTI4QzE3MkE3MEM0RkNENDczOTY1MEIwNkRFOUUyOkdST1VQUzpOUkNlbGxEVTpCNDgwNDI3RThBMEMwQjhEOTk0RTQzNzc4NEJCMzgyRg=="))));
169
170         mapsList.add(Map.of("o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER", List.of(generateResponse(
171                 "B480427E8A0C0B8D994E437784BB382F", "E49D942C16E0364E1E0788138916D70C",
172                 REL_ID_PREFIX + "TlJDZWxsRFU6QjQ4MDQyN0U4QTBDMEI4RDk5NEU0Mzc3ODRCQjM4MkY6VVNFUzpOUlNlY3RvckNhcnJpZXI6RTQ5RDk0MkMxNkUwMzY0RTFFMDc4ODEzODkxNkQ3MEM="))));
173
174         response.put(ITEMS, mapsList);
175
176         verifyResponse(response, underTest.getAllRelationships(SchemaRegistry.getEntityTypeByName("NRCellDU"),
177                 SchemaRegistry.getRelationTypesByEntityName("NRCellDU"), "B480427E8A0C0B8D994E437784BB382F",
178                 paginationDTO1));
179
180         Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getAllRelationships(SchemaRegistry
181                 .getEntityTypeByName("NRCellDU"), SchemaRegistry.getRelationTypesByEntityName("NRCellDU"), "NON_EXISTING",
182                 paginationDTO2));
183     }
184
185     @Test
186     void testGetAllRelationships_manyToMany() {
187         Map<String, Object> response = new HashMap<>();
188         PaginationDTO paginationDTO1 = PaginationDTO.builder().offset(0).limit(100).basePath(
189                 "/domains/RAN/entities/GNBCUUPFunction/BFEEAC2CE60273CB0A78319CC201A7FE/relationships").addPathParameters(
190                         "eiid", "BFEEAC2CE60273CB0A78319CC201A7FE").addPathParameters("domain", "RAN").addPathParameters(
191                                 "entityType", "GNBCUUPFunction").build();
192         paginationDTO1.setTotalSize(2);
193         response.putAll(new PaginationMetaData().getObjectList(paginationDTO1));
194
195         PaginationDTO paginationDTO2 = PaginationDTO.builder().offset(0).limit(100).basePath(
196                 "/domains/RAN/entities/NRCellDU/NON_EXISTING/relationships").addPathParameters("eiid", "NON_EXISTING")
197                 .addPathParameters("domain", "RAN").addPathParameters("entityType", "NRCellDU").build();
198
199         List<Map<String, List<Object>>> mapsList = new ArrayList<>();
200
201         mapsList.add(Map.of("o-ran-smo-teiv-cloud-to-ran:GNBCUUPFUNCTION_REALISED_BY_CLOUDNATIVEAPPLICATION", List.of(
202                 generateResponse("BFEEAC2CE60273CB0A78319CC201A7FE", "AD42D90497E93D276215DF6D3B899E17",
203                         REL_ID_PREFIX + "R05CQ1VVUEZ1bmN0aW9uOkJGRUVBQzJDRTYwMjczQ0IwQTc4MzE5Q0MyMDFBN0ZFOlJFQUxJU0VEX0JZOkNsb3VkTmF0aXZlQXBwbGljYXRpb246QUQ0MkQ5MDQ5N0U5M0QyNzYyMTVERjZEM0I4OTlFMTc="))));
204
205         mapsList.add(Map.of("o-ran-smo-teiv-oam-to-ran:MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION", List.of(generateResponse(
206                 "E64371CD4D12ED0CED200DD3A7591784", "BFEEAC2CE60273CB0A78319CC201A7FE",
207                 REL_ID_PREFIX + "TWFuYWdlZEVsZW1lbnQ6RTY0MzcxQ0Q0RDEyRUQwQ0VEMjAwREQzQTc1OTE3ODQ6TUFOQUdFUzpHTkJDVVVQRnVuY3Rpb246QkZFRUFDMkNFNjAyNzNDQjBBNzgzMTlDQzIwMUE3RkU="))));
208
209         response.put(ITEMS, mapsList);
210
211         verifyResponse(response, underTest.getAllRelationships(SchemaRegistry.getEntityTypeByName("GNBCUUPFunction"),
212                 SchemaRegistry.getRelationTypesByEntityName("GNBCUUPFunction"), "BFEEAC2CE60273CB0A78319CC201A7FE",
213                 paginationDTO1));
214
215         Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getAllRelationships(SchemaRegistry
216                 .getEntityTypeByName("GNBCUUPFunction"), SchemaRegistry.getRelationTypesByEntityName("GNBCUUPFunction"),
217                 "NON_EXISTING", paginationDTO2));
218     }
219
220     @Test
221     void testGetAllRelationshipsManyToMany_filteredByRelationship() {
222         List<Map<String, List<Object>>> mapsList = new ArrayList<>();
223         Map<String, Object> response = new HashMap<>();
224
225         PaginationDTO paginationDTO1 = PaginationDTO.builder().offset(0).limit(100).basePath(
226                 "/domains/RAN/entities/GNBCUUPFunction/BFEEAC2CE60273CB0A78319CC201A7FE/relationships").addPathParameters(
227                         "eiid", "BFEEAC2CE60273CB0A78319CC201A7FE").addPathParameters("domain", "RAN").addPathParameters(
228                                 "entityType", "GNBCUUPFunction").build();
229         paginationDTO1.setTotalSize(1);
230         paginationDTO1.setQueryParameters(Map.of("relationshipType", "MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION"));
231
232         response.putAll(new PaginationMetaData().getObjectList(paginationDTO1));
233         mapsList.add(Map.of("o-ran-smo-teiv-oam-to-ran:MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION", List.of(generateResponse(
234                 "E64371CD4D12ED0CED200DD3A7591784", "BFEEAC2CE60273CB0A78319CC201A7FE",
235                 REL_ID_PREFIX + "TWFuYWdlZEVsZW1lbnQ6RTY0MzcxQ0Q0RDEyRUQwQ0VEMjAwREQzQTc1OTE3ODQ6TUFOQUdFUzpHTkJDVVVQRnVuY3Rpb246QkZFRUFDMkNFNjAyNzNDQjBBNzgzMTlDQzIwMUE3RkU="))));
236         mapsList.add(Map.of("o-ran-smo-teiv-cloud-to-ran:GNBCUUPFUNCTION_REALISED_BY_CLOUDNATIVEAPPLICATION", List.of(
237                 generateResponse("BFEEAC2CE60273CB0A78319CC201A7FE", "AD42D90497E93D276215DF6D3B899E17",
238                         REL_ID_PREFIX + "R05CQ1VVUEZ1bmN0aW9uOkJGRUVBQzJDRTYwMjczQ0IwQTc4MzE5Q0MyMDFBN0ZFOlJFQUxJU0VEX0JZOkNsb3VkTmF0aXZlQXBwbGljYXRpb246QUQ0MkQ5MDQ5N0U5M0QyNzYyMTVERjZEM0I4OTlFMTc="))));
239
240         response.put(ITEMS, List.of(mapsList.get(0)));
241         verifyResponse(response, underTest.getAllRelationships(SchemaRegistry.getEntityTypeByName("GNBCUUPFunction"), List
242                 .of(SchemaRegistry.getRelationTypeByName("MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION")),
243                 "BFEEAC2CE60273CB0A78319CC201A7FE", paginationDTO1));
244
245         response.replace(ITEMS, List.of(mapsList.get(0)), List.of(mapsList.get(1)));
246         paginationDTO1.setQueryParameters(Map.of("relationshipType", "GNBCUUPFUNCTION_REALISED_BY_CLOUDNATIVEAPPLICATION"));
247         response.putAll(new PaginationMetaData().getObjectList(paginationDTO1));
248         verifyResponse(response, underTest.getAllRelationships(SchemaRegistry.getEntityTypeByName("GNBCUUPFunction"), List
249                 .of(SchemaRegistry.getRelationTypeByName("GNBCUUPFUNCTION_REALISED_BY_CLOUDNATIVEAPPLICATION")),
250                 "BFEEAC2CE60273CB0A78319CC201A7FE", paginationDTO1));
251
252         paginationDTO1.setQueryParameters(Map.of("relationshipType", "NON_EXISTING"));
253         response.putAll(new PaginationMetaData().getObjectList(paginationDTO1));
254         Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getAllRelationships(SchemaRegistry
255                 .getEntityTypeByName("GNBCUUPFunction"), List.of(SchemaRegistry.getRelationTypeByName(
256                         "GNBCUUPFUNCTION_REALISED_BY_CLOUDNATIVEAPPLICATION")), "NON_EXISTING", paginationDTO1));
257     }
258
259     @Test
260     void testGetAllRelationshipsConnectingSameEntity_filteredByRelationship() {
261         String idConnectingSameEntity = REL_ID_PREFIX + "QW50ZW5uYU1vZHVsZToyNzhBMDVDNjdENDdEMTE3QzJEQzVCREY1RTAwQUU3MDpSRUFMSVNFRF9CWTpBbnRlbm5hTW9kdWxlOjI3OEEwNUM2N0Q0N0QxMTdDMkRDNUJERjVFMDBBRTcwCg==";
262         PaginationDTO paginationDTO1 = PaginationDTO.builder().offset(0).limit(100).basePath(
263                 "/domains/RAN_EQUIPMENT/entities/AntennaModule/278A05C67D47D117C2DC5BDF5E00AE70/relationships")
264                 .addPathParameters("eiid", "278A05C67D47D117C2DC5BDF5E00AE70").addPathParameters("domain", "RAN_EQUIPMENT")
265                 .addPathParameters("entityType", "AntennaModule").build();
266         paginationDTO1.setTotalSize(1);
267         paginationDTO1.setQueryParameters(Map.of("relationshipType", "ANTENNAMODULE_REALISED_BY_ANTENNAMODULE"));
268
269         Map<String, Object> response = new HashMap<>(new PaginationMetaData().getObjectList(paginationDTO1));
270         Map<String, List<Object>> mapsList = Map.of("o-ran-smo-teiv-equipment:ANTENNAMODULE_REALISED_BY_ANTENNAMODULE", List
271                 .of(generateResponse("278A05C67D47D117C2DC5BDF5E00AE70", "279A05C67D47D117C2DC5BDF5E00AE70",
272                         idConnectingSameEntity)));
273         response.put(ITEMS, List.of(mapsList));
274
275         RelationType relSameEntity = SchemaRegistry.getRelationTypeByName("ANTENNAMODULE_REALISED_BY_ANTENNAMODULE");
276         EntityType entity = SchemaRegistry.getEntityTypeByName("AntennaModule");
277
278         Assertions.assertNotNull(relSameEntity);
279         Assertions.assertNotNull(entity);
280
281         verifyResponse(response, underTest.getAllRelationships(entity, List.of(relSameEntity),
282                 "278A05C67D47D117C2DC5BDF5E00AE70", paginationDTO1));
283
284         Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getAllRelationships(entity, List.of(
285                 relSameEntity), "NON_EXISTING", paginationDTO1));
286     }
287
288     @Test
289     void testGetRelationshipWithSpecifiedId() {
290         String idOneToMany = REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjpEMzIxNUUwODU3MEJFNTgzMzlDNzQ2MzYyNkI1MEUzNzpQUk9WSURFUzpOUkNlbGxEVTo5OEMzQTQ1OTFBMzc3MThFMTMzMEYwMjk0RTIzQjYyQQ==";
291         Map<String, List<Object>> relationshipOneToMany = Map.of("o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU", List
292                 .of(generateResponse("D3215E08570BE58339C7463626B50E37", "98C3A4591A37718E1330F0294E23B62A", idOneToMany,
293                         Collections.EMPTY_LIST)));
294
295         Assertions.assertEquals(relationshipOneToMany, underTest.getRelationshipWithSpecifiedId(idOneToMany, SchemaRegistry
296                 .getRelationTypeByName("GNBDUFUNCTION_PROVIDES_NRCELLDU")));
297
298         String idManyToOne = REL_ID_PREFIX + "Tm9kZUNsdXN0ZXI6MDE1QzJEREJEN0FDNzIyQjM0RUQ2QTIwRURFRUI5QzM6TE9DQVRFRF9BVDpDbG91ZFNpdGU6MTZFRTE3QUU4OURGMTFCNjlFOTRCM0Y2ODI3QzJDMEU=";
299         Map<String, List<Object>> relationshipManyToOne = Map.of("o-ran-smo-teiv-cloud:NODECLUSTER_LOCATED_AT_CLOUDSITE",
300                 List.of(generateResponse("015C2DDBD7AC722B34ED6A20EDEEB9C3", "16EE17AE89DF11B69E94B3F6827C2C0E",
301                         idManyToOne, Collections.EMPTY_LIST)));
302
303         Assertions.assertEquals(relationshipManyToOne, underTest.getRelationshipWithSpecifiedId(idManyToOne, SchemaRegistry
304                 .getRelationTypeByName("NODECLUSTER_LOCATED_AT_CLOUDSITE")));
305
306         String idManyToMany = REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjo0Q0ZGMTM2MjAwQTJERTM2MjA1QTEzNTU5QzU1REIyQTpSRUFMSVNFRF9CWTpDbG91ZE5hdGl2ZUFwcGxpY2F0aW9uOkM1NDk5MDVDRjNDQzg5MENFNTc0NkM1RTEwQUNGMDBE";
307         Map<String, List<Object>> relationshipManyToMany = Map.of(
308                 "o-ran-smo-teiv-cloud-to-ran:GNBDUFUNCTION_REALISED_BY_CLOUDNATIVEAPPLICATION", List.of(generateResponse(
309                         "4CFF136200A2DE36205A13559C55DB2A", "C549905CF3CC890CE5746C5E10ACF00D", idManyToMany,
310                         Collections.EMPTY_LIST)));
311
312         Assertions.assertEquals(relationshipManyToMany, underTest.getRelationshipWithSpecifiedId(idManyToMany,
313                 SchemaRegistry.getRelationTypeByName("GNBDUFUNCTION_REALISED_BY_CLOUDNATIVEAPPLICATION")));
314
315         String idConnectingSameEntity = REL_ID_PREFIX + "QW50ZW5uYU1vZHVsZToyNzhBMDVDNjdENDdEMTE3QzJEQzVCREY1RTAwQUU3MDpSRUFMSVNFRF9CWTpBbnRlbm5hTW9kdWxlOjI3OEEwNUM2N0Q0N0QxMTdDMkRDNUJERjVFMDBBRTcwCg==";
316         Map<String, List<Object>> relationshipConnectingSameEntity = Map.of(
317                 "o-ran-smo-teiv-equipment:ANTENNAMODULE_REALISED_BY_ANTENNAMODULE", List.of(generateResponse(
318                         "278A05C67D47D117C2DC5BDF5E00AE70", "279A05C67D47D117C2DC5BDF5E00AE70", idConnectingSameEntity,
319                         Collections.EMPTY_LIST)));
320
321         Assertions.assertEquals(relationshipConnectingSameEntity, underTest.getRelationshipWithSpecifiedId(
322                 idConnectingSameEntity, SchemaRegistry.getRelationTypeByName("ANTENNAMODULE_REALISED_BY_ANTENNAMODULE")));
323
324         Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getRelationshipWithSpecifiedId("NOT_EXISTING",
325                 SchemaRegistry.getRelationTypeByName("GNBDUFUNCTION_PROVIDES_NRCELLDU")));
326     }
327
328     @Test
329     void testGetRelationshipsByType() {
330         Map<String, Object> oneToManyResult = new HashMap<>();
331         Map<String, Object> manyToOneResult = new HashMap<>();
332         Map<String, Object> manyToManyResult = new HashMap<>();
333
334         Map<String, Object> oneToManyQueryMap = new HashMap<>();
335         oneToManyQueryMap.put("query", Map.of("scopeFilter", "/attributes[@cellLocalId=2]"));
336         oneToManyResult.putAll(oneToManyQueryMap);
337
338         oneToManyResult.put("items", List.of(Map.of("o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU", List.of(
339                 generateResponse("D3215E08570BE58339C7463626B50E37", "F9546E82313AC1D5E690DCD7BE55606F",
340                         REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjpEMzIxNUUwODU3MEJFNTgzMzlDNzQ2MzYyNkI1MEUzNzpQUk9WSURFUzpOUkNlbGxEVTpGOTU0NkU4MjMxM0FDMUQ1RTY5MERDRDdCRTU1NjA2Rg==")))));
341
342         PaginationMetaData metadataOneToMany = new PaginationMetaData();
343         PaginationDTO paginationDTO1 = PaginationDTO.builder().offset(0).limit(5).addQueryParameters("scopeFilter",
344                 "/attributes[@cellLocalId=2]").build();
345         paginationDTO1.setTotalSize(1);
346         oneToManyResult.putAll(metadataOneToMany.getObjectList(paginationDTO1));
347
348         Map<String, Object> manyToOneQueryMap = new HashMap<>();
349         manyToOneQueryMap.put("query", Map.of("scopeFilter", "/id[@id=\"719BD5C7CD8A939D76A83DA95DA45C01\"]"));
350         manyToOneResult.putAll(manyToOneQueryMap);
351
352         manyToOneResult.put("items", List.of(Map.of("o-ran-smo-teiv-cloud:CLOUDNATIVEAPPLICATION_DEPLOYED_ON_NAMESPACE",
353                 List.of(generateResponse("719BD5C7CD8A939D76A83DA95DA45C01", "1C02E96B2AAE036C7AE404BC38C308E0",
354                         REL_ID_PREFIX + "Q2xvdWROYXRpdmVBcHBsaWNhdGlvbjo3MTlCRDVDN0NEOEE5MzlENzZBODNEQTk1REE0NUMwMTpERVBMT1lFRF9PTjpOYW1lc3BhY2U6MUMwMkU5NkIyQUFFMDM2QzdBRTQwNEJDMzhDMzA4RTA=")))));
355
356         PaginationMetaData metadataManyToOne = new PaginationMetaData();
357         PaginationDTO paginationDTO2 = PaginationDTO.builder().offset(0).limit(5).addQueryParameters("scopeFilter",
358                 "/id[@id=\"719BD5C7CD8A939D76A83DA95DA45C01\"]").build();
359         paginationDTO2.setTotalSize(1);
360         manyToOneResult.putAll(metadataManyToOne.getObjectList(paginationDTO2));
361
362         Map<String, Object> manyToManyQueryMap = new HashMap<>();
363         manyToManyQueryMap.put("query", Map.of("scopeFilter",
364                 "/CloudNativeApplication/id[@id=\"C549905CF3CC890CE5746C5E10ACF00D\"]"));
365         manyToManyResult.putAll(manyToManyQueryMap);
366
367         manyToManyResult.put("items", List.of(Map.of(
368                 "o-ran-smo-teiv-cloud-to-ran:GNBDUFUNCTION_REALISED_BY_CLOUDNATIVEAPPLICATION", List.of(generateResponse(
369                         "4CFF136200A2DE36205A13559C55DB2A", "C549905CF3CC890CE5746C5E10ACF00D",
370                         REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjo0Q0ZGMTM2MjAwQTJERTM2MjA1QTEzNTU5QzU1REIyQTpSRUFMSVNFRF9CWTpDbG91ZE5hdGl2ZUFwcGxpY2F0aW9uOkM1NDk5MDVDRjNDQzg5MENFNTc0NkM1RTEwQUNGMDBE")))));
371
372         PaginationMetaData metadataManyToMany = new PaginationMetaData();
373         PaginationDTO paginationDTO3 = PaginationDTO.builder().offset(0).limit(5).addQueryParameters("scopeFilter",
374                 "/CloudNativeApplication/id[@id=\"C549905CF3CC890CE5746C5E10ACF00D\"]").build();
375         paginationDTO3.setTotalSize(1);
376         manyToManyResult.putAll(metadataManyToMany.getObjectList(paginationDTO3));
377
378         RelationType oneToMany = SchemaRegistry.getRelationTypeByName("GNBDUFUNCTION_PROVIDES_NRCELLDU");
379         RelationType manyToOne = SchemaRegistry.getRelationTypeByName("CLOUDNATIVEAPPLICATION_DEPLOYED_ON_NAMESPACE");
380         RelationType manyToMany = SchemaRegistry.getRelationTypeByName("GNBDUFUNCTION_REALISED_BY_CLOUDNATIVEAPPLICATION");
381
382         verifyResponse(oneToManyResult, underTest.getRelationshipsByType(oneToMany, "/attributes[@cellLocalId=2]",
383                 PaginationDTO.builder().offset(0).limit(5).addQueryParameters("scopeFilter", "/attributes[@cellLocalId=2]")
384                         .build()));
385
386         verifyResponse(manyToOneResult, underTest.getRelationshipsByType(manyToOne,
387                 "/id[@id=\"719BD5C7CD8A939D76A83DA95DA45C01\"]", PaginationDTO.builder().offset(0).limit(5)
388                         .addQueryParameters("scopeFilter", "/id[@id=\"719BD5C7CD8A939D76A83DA95DA45C01\"]").build()));
389
390         verifyResponse(manyToManyResult, underTest.getRelationshipsByType(manyToMany,
391                 "/CloudNativeApplication/id[@id=\"C549905CF3CC890CE5746C5E10ACF00D\"]", PaginationDTO.builder().offset(0)
392                         .limit(5).addQueryParameters("scopeFilter",
393                                 "/CloudNativeApplication/id[@id=\"C549905CF3CC890CE5746C5E10ACF00D\"]").build()));
394
395         assertThatThrownBy(() -> underTest.getRelationshipsByType(oneToMany, "/attributes[@celllocalid=2]", PaginationDTO
396                 .builder().offset(0).limit(5).build())).isInstanceOf(TiesPathException.class).hasMessage("Grammar Error");
397         Assertions.assertDoesNotThrow(() -> underTest.getRelationshipsByType(oneToMany, null, PaginationDTO.builder()
398                 .offset(0).limit(5).build()));
399         Assertions.assertDoesNotThrow(() -> underTest.getRelationshipsByType(oneToMany,
400                 "/GNBDUFunction/attributes[contains (@fdn, \"GNBDUFunction=16\")]", PaginationDTO.builder().offset(0).limit(
401                         5).build()));
402         Assertions.assertDoesNotThrow(() -> underTest.getRelationshipsByType(manyToMany,
403                 "/CloudNativeApplication/attributes[@name=\"Example Cloud App/10\"] | /GNBDUFunction/id[@id=\"5A548EA9D166341776CA0695837E55D8\"]",
404                 PaginationDTO.builder().offset(0).limit(5).build()));
405     }
406
407     @Test
408     void testGetRelationshipsByType_relConnectingSameEntity() {
409
410         Map<String, Object> resultOneScopeFilter = new HashMap<>();
411         Map<String, Object> resultTwoScopeFilter = new HashMap<>();
412         RelationType relationshipConnectingSameEntity = SchemaRegistry.getRelationTypeByName(
413                 "ANTENNAMODULE_REALISED_BY_ANTENNAMODULE");
414         String idConnectingSameEntity = REL_ID_PREFIX + "QW50ZW5uYU1vZHVsZToyNzhBMDVDNjdENDdEMTE3QzJEQzVCREY1RTAwQUU3MDpSRUFMSVNFRF9CWTpBbnRlbm5hTW9kdWxlOjI3OEEwNUM2N0Q0N0QxMTdDMkRDNUJERjVFMDBBRTcwCg==";
415         PaginationMetaData metadataRelConnectingSameEntity = new PaginationMetaData();
416
417         PaginationDTO paginationDTO1 = PaginationDTO.builder().offset(0).limit(5).addQueryParameters("scopeFilter",
418                 "/AntennaModule/id[@id=\"279A05C67D47D117C2DC5BDF5E00AE70\"]").build();
419         paginationDTO1.setTotalSize(1);
420         resultOneScopeFilter.putAll(metadataRelConnectingSameEntity.getObjectList(paginationDTO1));
421
422         Map<String, Object> queryMapOneScope = new HashMap<>();
423         queryMapOneScope.put("query", Map.of("scopeFilter", "/AntennaModule/id[@id=\"279A05C67D47D117C2DC5BDF5E00AE70\"]"));
424         resultOneScopeFilter.putAll(queryMapOneScope);
425
426         resultOneScopeFilter.put("items", List.of(Map.of("o-ran-smo-teiv-equipment:ANTENNAMODULE_REALISED_BY_ANTENNAMODULE",
427                 List.of(generateResponse("278A05C67D47D117C2DC5BDF5E00AE70", "279A05C67D47D117C2DC5BDF5E00AE70",
428                         idConnectingSameEntity)))));
429
430         verifyResponse(resultOneScopeFilter, underTest.getRelationshipsByType(relationshipConnectingSameEntity,
431                 "/AntennaModule/id[@id=\"279A05C67D47D117C2DC5BDF5E00AE70\"]", PaginationDTO.builder().offset(0).limit(5)
432                         .addQueryParameters("scopeFilter", "/AntennaModule/id[@id=\"279A05C67D47D117C2DC5BDF5E00AE70\"]")
433                         .build()));
434
435         Map<String, Object> queryMapTwoScopes = new HashMap<>();
436         queryMapTwoScopes.put("query", Map.of("scopeFilter",
437                 "/AntennaModule/id[@id=\"278A05C67D47D117C2DC5BDF5E00AE70\"] | /AntennaModule/id[@id=\"279A05C67D47D117C2DC5BDF5E00AE70\"]"));
438         resultTwoScopeFilter.putAll(queryMapTwoScopes);
439
440         resultTwoScopeFilter.put("items", List.of(Map.of("o-ran-smo-teiv-equipment:ANTENNAMODULE_REALISED_BY_ANTENNAMODULE",
441                 List.of(generateResponse("278A05C67D47D117C2DC5BDF5E00AE70", "279A05C67D47D117C2DC5BDF5E00AE70",
442                         idConnectingSameEntity)))));
443
444         PaginationDTO paginationDTO2 = PaginationDTO.builder().offset(0).limit(5).addQueryParameters("scopeFilter",
445                 "/AntennaModule/id[@id=\"278A05C67D47D117C2DC5BDF5E00AE70\"] | /AntennaModule/id[@id=\"279A05C67D47D117C2DC5BDF5E00AE70\"]")
446                 .build();
447         paginationDTO2.setTotalSize(1);
448         resultTwoScopeFilter.putAll(metadataRelConnectingSameEntity.getObjectList(paginationDTO2));
449
450         verifyResponse(resultTwoScopeFilter, underTest.getRelationshipsByType(relationshipConnectingSameEntity,
451                 "/AntennaModule/id[@id=\"278A05C67D47D117C2DC5BDF5E00AE70\"]| /AntennaModule/id[@id=\"279A05C67D47D117C2DC5BDF5E00AE70\"]",
452                 PaginationDTO.builder().offset(0).limit(5).addQueryParameters("scopeFilter",
453                         "/AntennaModule/id[@id=\"278A05C67D47D117C2DC5BDF5E00AE70\"] | /AntennaModule/id[@id=\"279A05C67D47D117C2DC5BDF5E00AE70\"]")
454                         .build()));
455
456     }
457
458     @Test
459     void testGetTopologyByType() {
460         Map<String, Object> result = new HashMap<>();
461         Map<String, Object> queryMap = new HashMap<>();
462
463         queryMap.put("query", Map.of("targetFilter", "/attributes(fdn)", "scopeFilter",
464                 "/attributes[contains(@fdn, \"13\")] | /id[@id='5A3085C3400C3096E2ED2321452766B1']"));
465
466         result.putAll(queryMap);
467         PaginationDTO paginationDTO = PaginationDTO.builder().basePath("/domains/RAN/entities/GNBDUFunction").offset(0)
468                 .limit(2).addQueryParameters("targetFilter", "/attributes(fdn)").addQueryParameters("scopeFilter",
469                         "/attributes[contains(@fdn, \"13\")] | /id[@id='5A3085C3400C3096E2ED2321452766B1']").build();
470         paginationDTO.setTotalSize(2);
471         result.putAll(new PaginationMetaData().getObjectList(paginationDTO));
472
473         result.put("items", List.of(Map.of("o-ran-smo-teiv-ran:GNBDUFunction", List.of(Map.of(ATTRIBUTES, Map.of("fdn",
474                 "SubNetwork=SolarSystem/SubNetwork=Earth/SubNetwork=Europe/SubNetwork=Hungary/GNBDUFunction=13"), "id",
475                 "25E690E22BDA90B9C4FEE1F083CBA597"), Map.of(ATTRIBUTES, Map.of("fdn",
476                         "SubNetwork=SolarSystem/SubNetwork=Earth/SubNetwork=Europe/SubNetwork=Hungary/GNBDUFunction=14"),
477                         "id", "5A3085C3400C3096E2ED2321452766B1")))));
478
479         verifyResponse(result, underTest.getTopologyByType("GNBDUFunction", "/attributes(fdn)",
480                 "/attributes[contains(@fdn, \"13\")] | /id[@id='5A3085C3400C3096E2ED2321452766B1']", PaginationDTO.builder()
481                         .offset(0).limit(2).basePath("/domains/RAN/entities/GNBDUFunction").addQueryParameters(
482                                 "targetFilter", "/attributes(fdn)").addQueryParameters("scopeFilter",
483                                         "/attributes[contains(@fdn, \"13\")] | /id[@id='5A3085C3400C3096E2ED2321452766B1']")
484                         .build()));
485
486         Assertions.assertThrows(TiesPathException.class, () -> underTest.getTopologyByType("GNBDUFunction",
487                 "/attributes(fdn)", "/attributes[contains(@fdn, \"1000493\")] ; /attributes[@gNBId=4000259]", PaginationDTO
488                         .builder().offset(0).limit(2).build()));
489     }
490
491     @Test
492     void testGetEntitiesByDomain() {
493         Map<String, Object> reference1 = new HashMap<>();
494         Map<String, Object> query = new HashMap<>();
495
496         query.put("targetFilter", "/attributes(azimuth)");
497         query.put("scopeFilter", "/attributes[@azimuth=3]");
498
499         PaginationMetaData pmd1 = new PaginationMetaData();
500         PaginationDTO paginationDTO = PaginationDTO.builder().basePath("/domains/RAN").offset(0).limit(5)
501                 .addQueryParameters("targetFilter", "/attributes(azimuth)").addQueryParameters("scopeFilter",
502                         "/attributes[@azimuth=3]").build();
503         paginationDTO.setTotalSize(1);
504         reference1.putAll(pmd1.getObjectList(paginationDTO));
505         reference1.put("query", query);
506
507         BigDecimal azimuth = new BigDecimal(3);
508         reference1.put("items", List.of(Map.of("o-ran-smo-teiv-ran:Sector", List.of(Map.of("id",
509                 "ADB1BAAC878C0BEEFE3175C60F44BB1D", ATTRIBUTES, Map.of("azimuth", azimuth))))));
510         verifyResponse(reference1, underTest.getEntitiesByDomain("RAN", "/attributes(azimuth)", "/attributes[@azimuth=3]",
511                 paginationDTO));
512
513         Map<String, Object> reference2 = new HashMap<>();
514         Map<String, Object> query2 = new HashMap<>();
515
516         query2.put("targetFilter", "/id");
517         query2.put("scopeFilter", "/id[contains(@id,\"F1407\")]");
518
519         PaginationMetaData pmd2 = new PaginationMetaData();
520         PaginationDTO paginationDTO2 = PaginationDTO.builder().basePath("/domains/RAN").offset(0).limit(5)
521                 .addQueryParameters("targetFilter", "/id").addQueryParameters("scopeFilter", "/id[contains(@id,\"F1407\")]")
522                 .build();
523         paginationDTO2.setTotalSize(1);
524         pmd2.getObjectList(paginationDTO2);
525
526         reference2.put("query", query2);
527         PaginationDTO paginationDTO3 = PaginationDTO.builder().basePath("/domains/RAN").offset(0).limit(5)
528                 .addQueryParameters("targetFilter", "/id").addQueryParameters("scopeFilter", "/id[contains(@id,\"F1407\")]")
529                 .build();
530         paginationDTO3.setTotalSize(1);
531         reference2.putAll(pmd2.getObjectList(paginationDTO3));
532
533         reference2.put("items", List.of(Map.of("o-ran-smo-teiv-ran:Sector", List.of(Map.of("id",
534                 "2F445AA5744FA3D230FD6838531F1407")))));
535
536         verifyResponse(reference2, underTest.getEntitiesByDomain("RAN", "/id", "/id[contains(@id,\"F1407\")]",
537                 paginationDTO2));
538
539         Map<String, Object> reference3 = new HashMap<>();
540         Map<String, Object> query3 = new HashMap<>();
541
542         query3.put("targetFilter", "/GNBDUFunction/attributes/fdn");
543         query3.put("scopeFilter", "/GNBDUFunction/attributes[contains(@fdn,\"GNBDUFunction=10\")]");
544
545         PaginationMetaData pmd3 = new PaginationMetaData();
546
547         reference3.put("query", query3);
548         PaginationDTO paginationDTO4 = PaginationDTO.builder().basePath("/domains/RAN").offset(0).limit(5)
549                 .addQueryParameters("targetFilter", "/GNBDUFunction/attributes/fdn").addQueryParameters("scopeFilter",
550                         "/GNBDUFunction/attributes[contains(@fdn,\"GNBDUFunction=10\")]").build();
551         paginationDTO4.setTotalSize(1);
552         reference3.putAll(pmd3.getObjectList(paginationDTO4));
553
554         reference3.put("items", List.of(Map.of("o-ran-smo-teiv-ran:GNBDUFunction", List.of(Map.of("id",
555                 "1050570EBB1315E1AE7A9FD5E1400A00", ATTRIBUTES, Map.of("fdn",
556                         "SubNetwork=SolarSystem/SubNetwork=Earth/SubNetwork=Europe/SubNetwork=Hungary/GNBDUFunction=10"))))));
557
558         verifyResponse(reference3, underTest.getEntitiesByDomain("RAN", "/GNBDUFunction/attributes/fdn",
559                 "/GNBDUFunction/attributes[contains(@fdn,\"GNBDUFunction=10\")]", paginationDTO4));
560
561         Object result = underTest.getEntitiesByDomain("OAM_TO_RAN", "/id", "", PaginationDTO.builder().offset(0).limit(500)
562                 .build());
563         Assertions.assertEquals(10, ((Map) ((List) ((HashMap) result).get("items")).get(0)).size());
564         Assertions.assertTrue(((Map) ((List) ((HashMap) result).get("items")).get(0)).containsKey(
565                 "o-ran-smo-teiv-oam:ManagedElement"));
566
567         Assertions.assertTrue(((Map) ((List) ((HashMap) result).get("items")).get(0)).containsKey(
568                 "o-ran-smo-teiv-ran:GNBDUFunction"));
569     }
570
571     @Test
572     void testGetTopologyWithLongNames() {
573         Map<String, List<Object>> response = new HashMap<>();
574         Map<String, Object> responseData = new HashMap<>();
575         Map<String, Object> attributesMap = new HashMap<>();
576         response.put("o-ran-smo-teiv-ran:GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn", List.of(
577                 responseData));
578         attributesMap.put("gNBDUId", null);
579         attributesMap.put("fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
580                 "SubNetwork=SolarSystem/SubNetwork=Earth/SubNetwork=Europe/SubNetwork=Hungary/GNBDUFunction=16");
581         attributesMap.put("dUpLMNId", Map.of("mcc", "456", "mnc", "82"));
582         attributesMap.put("gNBId", 16L);
583         attributesMap.put("gNBIdLength", 2L);
584         attributesMap.put("cmId", null);
585         responseData.put("attributes", attributesMap);
586         responseData.put("id", "5A548EA9D166341776CA0695837E55D8");
587         responseData.put("sourceIds", Collections.EMPTY_LIST);
588
589         Assertions.assertEquals(response, underTest.getTopology(SchemaRegistry.getEntityTypeByName(
590                 "GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"), "5A548EA9D166341776CA0695837E55D8"));
591         Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getTopology(SchemaRegistry.getEntityTypeByName(
592                 "GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"), "-1"));
593     }
594
595     @Test
596     void testGetAllRelationshipsWithLongNames_manyToOne_oneToMany_manyToMany() {
597         Map<String, Object> response = new HashMap<>();
598         List<Map<String, List<Object>>> mapsList = new ArrayList<>();
599
600         PaginationDTO paginationDTO = PaginationDTO.builder().offset(0).limit(100).basePath(
601                 "/domains/RAN/entities/GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/4CFF136200A2DE36205A13559C55DB2A/relationships")
602                 .addPathParameters("eiid", "4CFF136200A2DE36205A13559C55DB2A").addPathParameters("domain", "RAN")
603                 .addPathParameters("entityType", "GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn")
604                 .build();
605         paginationDTO.setTotalSize(6);
606         response.putAll(new PaginationMetaData().getObjectList(paginationDTO));
607
608         mapsList.add(Map.of("o-ran-smo-teiv-oam-to-ran:MANAGEDELEMENTTTTTTTTTTTTTTT_MANAGES_GNBDUFUNCTIONNNNNNNNNNNNNNN",
609                 List.of(generateResponse("8D51EFC759166044DACBCA63C4EDFC51", "4CFF136200A2DE36205A13559C55DB2A",
610                         REL_ID_PREFIX + "TWFuYWdlZEVsZW1lbnQ6OEQ1MUVGQzc1OTE2NjA0NERBQ0JDQTYzQzRFREZDNTE6TUFOQUdFUzpHTkJEVUZ1bmN0aW9uOjRDRkYxMzYyMDBBMkRFMzYyMDVBMTM1NTlDNTVEQjJB"))));
611
612         mapsList.add(Map.of("o-ran-smo-teiv-ran:GNBDUFUNCTIONNNNNNNNNNNNNNUUU_PROVIDES_NRCELLDUUUUUUUUUUUUUUUUUU", List.of(
613                 generateResponse("4CFF136200A2DE36205A13559C55DB2A", "76E9F605D4F37330BF0B505E94F64F11",
614                         REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjo0Q0ZGMTM2MjAwQTJERTM2MjA1QTEzNTU5QzU1REIyQTpQUk9WSURFUzpOUkNlbGxEVTo3NkU5RjYwNUQ0RjM3MzMwQkYwQjUwNUU5NEY2NEYxMQ=="),
615                 generateResponse("4CFF136200A2DE36205A13559C55DB2A", "67A1BDA10B5AF43028D07C7BE5CB1AE2",
616                         REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjo0Q0ZGMTM2MjAwQTJERTM2MjA1QTEzNTU5QzU1REIyQTpQUk9WSURFUzpOUkNlbGxEVTo2N0ExQkRBMTBCNUFGNDMwMjhEMDdDN0JFNUNCMUFFMg=="),
617                 generateResponse("4CFF136200A2DE36205A13559C55DB2A", "B3B0A1939EFCA654A37005B6A7F24BD7",
618                         REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjo0Q0ZGMTM2MjAwQTJERTM2MjA1QTEzNTU5QzU1REIyQTpQUk9WSURFUzpOUkNlbGxEVTpCM0IwQTE5MzlFRkNBNjU0QTM3MDA1QjZBN0YyNEJENw=="),
619                 generateResponse("4CFF136200A2DE36205A13559C55DB2A", "F26F279E91D0941DB4F646E707EA403A",
620                         REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjo0Q0ZGMTM2MjAwQTJERTM2MjA1QTEzNTU5QzU1REIyQTpQUk9WSURFUzpOUkNlbGxEVTpGMjZGMjc5RTkxRDA5NDFEQjRGNjQ2RTcwN0VBNDAzQQ=="))));
621
622         mapsList.add(Map.of("o-ran-smo-teiv-cloud-to-ran:GNBDUFUNCTIONNNNNNNNN_REALISED_BY_CLOUDNATIVEAPPLICATIONNNNNNNNN",
623                 List.of(generateResponse("4CFF136200A2DE36205A13559C55DB2A", "C549905CF3CC890CE5746C5E10ACF00D",
624                         REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjo0Q0ZGMTM2MjAwQTJERTM2MjA1QTEzNTU5QzU1REIyQTpSRUFMSVNFRF9CWTpDbG91ZE5hdGl2ZUFwcGxpY2F0aW9uOkM1NDk5MDVDRjNDQzg5MENFNTc0NkM1RTEwQUNGMDBE"))));
625
626         response.put(ITEMS, mapsList);
627
628         verifyResponse(response, underTest.getAllRelationships(SchemaRegistry.getEntityTypeByName(
629                 "GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"), SchemaRegistry
630                         .getRelationTypesByEntityName("GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"),
631                 "4CFF136200A2DE36205A13559C55DB2A", paginationDTO));
632
633         Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getAllRelationships(SchemaRegistry
634                 .getEntityTypeByName("GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"), SchemaRegistry
635                         .getRelationTypesByEntityName("GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"),
636                 "NON_EXISTING", paginationDTO));
637     }
638
639     @Test
640     void testGetAllRelationshipsWithLongNames_filteredByRelationship() {
641         List<Map<String, List<Object>>> mapsList = new ArrayList<>();
642
643         //One_To_One
644         Map<String, Object> expectedResponse1 = new HashMap<>();
645         PaginationDTO paginationDTO1 = PaginationDTO.builder().offset(0).limit(100).basePath(
646                 "/domains/RAN_OAM/entities/ManagedElementtttttttttttttttttttttttttttttttttttttttttttttttttt/45EF31D8A1FD624D7276390A1215BFC3/relationships")
647                 .addPathParameters("eiid", "45EF31D8A1FD624D7276390A1215BFC3").addPathParameters("domain", "RAN")
648                 .addPathParameters("entityType", "ManagedElementtttttttttttttttttttttttttttttttttttttttttttttttttt")
649                 .build();
650         paginationDTO1.setTotalSize(1);
651         paginationDTO1.setQueryParameters(Map.of("relationshipType",
652                 "MANAGEDELEMENTTTTTTTTTTT_DEPLOYED_AS_CLOUDNATIVESYSTEMMMMMMMMMMM"));
653         expectedResponse1.putAll(new PaginationMetaData().getObjectList(paginationDTO1));
654         mapsList.add(Map.of("o-ran-smo-teiv-oam-to-cloud:MANAGEDELEMENTTTTTTTTTTT_DEPLOYED_AS_CLOUDNATIVESYSTEMMMMMMMMMMM",
655                 List.of(generateResponse("45EF31D8A1FD624D7276390A1215BFC3", "C4E311A55666726FD9FE25CA572AFAF9",
656                         REL_ID_PREFIX + "TWFuYWdlZEVsZW1lbnQ6NDVFRjMxRDhBMUZENjI0RDcyNzYzOTBBMTIxNUJGQzM6REVQTE9ZRURfQVM6Q2xvdWROYXRpdmVTeXN0ZW06QzRFMzExQTU1NjY2NzI2RkQ5RkUyNUNBNTcyQUZBRjk="))));
657         expectedResponse1.put(ITEMS, List.of(mapsList.get(0)));
658         verifyResponse(expectedResponse1, underTest.getAllRelationships(SchemaRegistry.getEntityTypeByName(
659                 "ManagedElementtttttttttttttttttttttttttttttttttttttttttttttttttt"), List.of(SchemaRegistry
660                         .getRelationTypeByName("MANAGEDELEMENTTTTTTTTTTT_DEPLOYED_AS_CLOUDNATIVESYSTEMMMMMMMMMMM")),
661                 "45EF31D8A1FD624D7276390A1215BFC3", paginationDTO1));
662
663         //One_To_Many
664         Map<String, Object> expectedResponse2 = new HashMap<>();
665         PaginationDTO paginationDTO2 = PaginationDTO.builder().offset(0).limit(100).basePath(
666                 "/domains/RAN/entities/GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/45EF31D8A1FD624D7276390A1215BFC3/relationships")
667                 .addPathParameters("eiid", "45EF31D8A1FD624D7276390A1215BFC3").addPathParameters("domain", "RAN")
668                 .addPathParameters("entityType", "GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn")
669                 .build();
670         paginationDTO2.setTotalSize(1);
671         paginationDTO2.setQueryParameters(Map.of("relationshipType",
672                 "MANAGEDELEMENTTTTTTTTTTTTTTT_MANAGES_GNBDUFUNCTIONNNNNNNNNNNNNNN"));
673         expectedResponse2.putAll(new PaginationMetaData().getObjectList(paginationDTO2));
674         mapsList.add(Map.of("o-ran-smo-teiv-oam-to-ran:MANAGEDELEMENTTTTTTTTTTTTTTT_MANAGES_GNBDUFUNCTIONNNNNNNNNNNNNNN",
675                 List.of(generateResponse("8D51EFC759166044DACBCA63C4EDFC51", "4CFF136200A2DE36205A13559C55DB2A",
676                         REL_ID_PREFIX + "TWFuYWdlZEVsZW1lbnQ6OEQ1MUVGQzc1OTE2NjA0NERBQ0JDQTYzQzRFREZDNTE6TUFOQUdFUzpHTkJEVUZ1bmN0aW9uOjRDRkYxMzYyMDBBMkRFMzYyMDVBMTM1NTlDNTVEQjJB"))));
677         expectedResponse2.put(ITEMS, List.of(mapsList.get(1)));
678         verifyResponse(expectedResponse2, underTest.getAllRelationships(SchemaRegistry.getEntityTypeByName(
679                 "GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"), List.of(SchemaRegistry
680                         .getRelationTypeByName("MANAGEDELEMENTTTTTTTTTTTTTTT_MANAGES_GNBDUFUNCTIONNNNNNNNNNNNNNN")),
681                 "4CFF136200A2DE36205A13559C55DB2A", paginationDTO2));
682
683         //Many_To_One
684         Map<String, Object> expectedResponse3 = new HashMap<>();
685         PaginationDTO paginationDTO3 = PaginationDTO.builder().offset(0).limit(100).basePath(
686                 "/domains/RAN_CLOUD/entities/Namespaceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee/719BD5C7CD8A939D76A83DA95DA45C01/relationships")
687                 .addPathParameters("eiid", "719BD5C7CD8A939D76A83DA95DA45C01").addPathParameters("domain", "RAN_CLOUD")
688                 .addPathParameters("entityType", "Namespaceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee")
689                 .build();
690         paginationDTO3.setTotalSize(1);
691         paginationDTO3.setQueryParameters(Map.of("relationshipType",
692                 "CLOUDNATIVEAPPLICATIONNNNNNNNNNN_DEPLOYED_ON_NAMESPACEEEEEEEEEEE"));
693         expectedResponse3.putAll(new PaginationMetaData().getObjectList(paginationDTO3));
694         mapsList.add(Map.of("o-ran-smo-teiv-cloud:CLOUDNATIVEAPPLICATIONNNNNNNNNNN_DEPLOYED_ON_NAMESPACEEEEEEEEEEE", List
695                 .of(generateResponse("719BD5C7CD8A939D76A83DA95DA45C01", "1C02E96B2AAE036C7AE404BC38C308E0",
696                         REL_ID_PREFIX + "Q2xvdWROYXRpdmVBcHBsaWNhdGlvbjo3MTlCRDVDN0NEOEE5MzlENzZBODNEQTk1REE0NUMwMTpERVBMT1lFRF9PTjpOYW1lc3BhY2U6MUMwMkU5NkIyQUFFMDM2QzdBRTQwNEJDMzhDMzA4RTA="))));
697         expectedResponse3.put(ITEMS, List.of(mapsList.get(2)));
698         verifyResponse(expectedResponse3, underTest.getAllRelationships(SchemaRegistry.getEntityTypeByName(
699                 "Namespaceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"), List.of(SchemaRegistry
700                         .getRelationTypeByName("CLOUDNATIVEAPPLICATIONNNNNNNNNNN_DEPLOYED_ON_NAMESPACEEEEEEEEEEE")),
701                 "1C02E96B2AAE036C7AE404BC38C308E0", paginationDTO3));
702
703         //Many_To_Many
704         Map<String, Object> expectedResponse4 = new HashMap<>();
705         PaginationDTO paginationDTO4 = PaginationDTO.builder().offset(0).limit(100).basePath(
706                 "/domains/RAN/entities/GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/4CFF136200A2DE36205A13559C55DB2A/relationships")
707                 .addPathParameters("eiid", "4CFF136200A2DE36205A13559C55DB2A").addPathParameters("domain", "CLOUD_TO_RAN")
708                 .addPathParameters("entityType", "GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn")
709                 .build();
710         paginationDTO4.setTotalSize(1);
711         paginationDTO4.setQueryParameters(Map.of("relationshipType",
712                 "GNBDUFUNCTIONNNNNNNNN_REALISED_BY_CLOUDNATIVEAPPLICATIONNNNNNNNN"));
713         expectedResponse4.putAll(new PaginationMetaData().getObjectList(paginationDTO4));
714         mapsList.add(Map.of("o-ran-smo-teiv-cloud-to-ran:GNBDUFUNCTIONNNNNNNNN_REALISED_BY_CLOUDNATIVEAPPLICATIONNNNNNNNN",
715                 List.of(generateResponse("4CFF136200A2DE36205A13559C55DB2A", "C549905CF3CC890CE5746C5E10ACF00D",
716                         REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjo0Q0ZGMTM2MjAwQTJERTM2MjA1QTEzNTU5QzU1REIyQTpSRUFMSVNFRF9CWTpDbG91ZE5hdGl2ZUFwcGxpY2F0aW9uOkM1NDk5MDVDRjNDQzg5MENFNTc0NkM1RTEwQUNGMDBE"))));
717         expectedResponse4.put(ITEMS, List.of(mapsList.get(3)));
718         verifyResponse(expectedResponse4, underTest.getAllRelationships(SchemaRegistry.getEntityTypeByName(
719                 "GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"), List.of(SchemaRegistry
720                         .getRelationTypeByName("GNBDUFUNCTIONNNNNNNNN_REALISED_BY_CLOUDNATIVEAPPLICATIONNNNNNNNN")),
721                 "4CFF136200A2DE36205A13559C55DB2A", paginationDTO4));
722
723         Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getAllRelationships(SchemaRegistry
724                 .getEntityTypeByName("GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"), List.of(
725                         SchemaRegistry.getRelationTypeByName(
726                                 "GNBDUFUNCTIONNNNNNNNN_REALISED_BY_CLOUDNATIVEAPPLICATIONNNNNNNNN")), "NON_EXISTING",
727                 paginationDTO4));
728     }
729
730     @Test
731     void testGetRelationshipWithSpecifiedIdWithLongNames() {
732         String idOneToOne = REL_ID_PREFIX + "TWFuYWdlZEVsZW1lbnQ6NDVFRjMxRDhBMUZENjI0RDcyNzYzOTBBMTIxNUJGQzM6REVQTE9ZRURfQVM6Q2xvdWROYXRpdmVTeXN0ZW06QzRFMzExQTU1NjY2NzI2RkQ5RkUyNUNBNTcyQUZBRjk=";
733         Map<String, List<Object>> relationshipOneToOne = Map.of(
734                 "o-ran-smo-teiv-oam-to-cloud:MANAGEDELEMENTTTTTTTTTTT_DEPLOYED_AS_CLOUDNATIVESYSTEMMMMMMMMMMM", List.of(
735                         generateResponse("45EF31D8A1FD624D7276390A1215BFC3", "C4E311A55666726FD9FE25CA572AFAF9", idOneToOne,
736                                 Collections.EMPTY_LIST)));
737
738         Assertions.assertEquals(relationshipOneToOne, underTest.getRelationshipWithSpecifiedId(idOneToOne, SchemaRegistry
739                 .getRelationTypeByName("MANAGEDELEMENTTTTTTTTTTT_DEPLOYED_AS_CLOUDNATIVESYSTEMMMMMMMMMMM")));
740
741         String idOneToMany = REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjpEMzIxNUUwODU3MEJFNTgzMzlDNzQ2MzYyNkI1MEUzNzpQUk9WSURFUzpOUkNlbGxEVTo5OEMzQTQ1OTFBMzc3MThFMTMzMEYwMjk0RTIzQjYyQQ==";
742         Map<String, List<Object>> relationshipOneToMany = Map.of(
743                 "o-ran-smo-teiv-ran:GNBDUFUNCTIONNNNNNNNNNNNNNUUU_PROVIDES_NRCELLDUUUUUUUUUUUUUUUUUU", List.of(
744                         generateResponse("D3215E08570BE58339C7463626B50E37", "98C3A4591A37718E1330F0294E23B62A",
745                                 idOneToMany, Collections.EMPTY_LIST)));
746
747         Assertions.assertEquals(relationshipOneToMany, underTest.getRelationshipWithSpecifiedId(idOneToMany, SchemaRegistry
748                 .getRelationTypeByName("GNBDUFUNCTIONNNNNNNNNNNNNNUUU_PROVIDES_NRCELLDUUUUUUUUUUUUUUUUUU")));
749
750         String idManyToOne = REL_ID_PREFIX + "Q2xvdWROYXRpdmVBcHBsaWNhdGlvbjo3MTlCRDVDN0NEOEE5MzlENzZBODNEQTk1REE0NUMwMTpERVBMT1lFRF9PTjpOYW1lc3BhY2U6MUMwMkU5NkIyQUFFMDM2QzdBRTQwNEJDMzhDMzA4RTA=";
751         Map<String, List<Object>> relationshipManyToOne = Map.of(
752                 "o-ran-smo-teiv-cloud:CLOUDNATIVEAPPLICATIONNNNNNNNNNN_DEPLOYED_ON_NAMESPACEEEEEEEEEEE", List.of(
753                         generateResponse("719BD5C7CD8A939D76A83DA95DA45C01", "1C02E96B2AAE036C7AE404BC38C308E0",
754                                 idManyToOne, Collections.EMPTY_LIST)));
755
756         Assertions.assertEquals(relationshipManyToOne, underTest.getRelationshipWithSpecifiedId(idManyToOne, SchemaRegistry
757                 .getRelationTypeByName("CLOUDNATIVEAPPLICATIONNNNNNNNNNN_DEPLOYED_ON_NAMESPACEEEEEEEEEEE")));
758
759         String idManyToMany = REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjo0Q0ZGMTM2MjAwQTJERTM2MjA1QTEzNTU5QzU1REIyQTpSRUFMSVNFRF9CWTpDbG91ZE5hdGl2ZUFwcGxpY2F0aW9uOkM1NDk5MDVDRjNDQzg5MENFNTc0NkM1RTEwQUNGMDBE";
760         Map<String, List<Object>> relationshipManyToMany = Map.of(
761                 "o-ran-smo-teiv-cloud-to-ran:GNBDUFUNCTIONNNNNNNNN_REALISED_BY_CLOUDNATIVEAPPLICATIONNNNNNNNN", List.of(
762                         generateResponse("4CFF136200A2DE36205A13559C55DB2A", "C549905CF3CC890CE5746C5E10ACF00D",
763                                 idManyToMany, Collections.EMPTY_LIST)));
764
765         Assertions.assertEquals(relationshipManyToMany, underTest.getRelationshipWithSpecifiedId(idManyToMany,
766                 SchemaRegistry.getRelationTypeByName("GNBDUFUNCTIONNNNNNNNN_REALISED_BY_CLOUDNATIVEAPPLICATIONNNNNNNNN")));
767
768         Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getRelationshipWithSpecifiedId("NOT_EXISTING",
769                 SchemaRegistry.getRelationTypeByName("GNBDUFUNCTIONNNNNNNNNNNNNNUUU_PROVIDES_NRCELLDUUUUUUUUUUUUUUUUUU")));
770     }
771
772     @Test
773     void testGetRelationshipsByTypeWithLongNames() {
774         Map<String, Object> oneToOneResult = new HashMap<>();
775         Map<String, Object> oneToManyResult = new HashMap<>();
776         Map<String, Object> manyToOneResult = new HashMap<>();
777         Map<String, Object> manyToManyResult = new HashMap<>();
778
779         oneToOneResult.put("items", List.of(Map.of(
780                 "o-ran-smo-teiv-oam-to-cloud:MANAGEDELEMENTTTTTTTTTTT_DEPLOYED_AS_CLOUDNATIVESYSTEMMMMMMMMMMM", List.of(
781                         generateResponse("45EF31D8A1FD624D7276390A1215BFC3", "C4E311A55666726FD9FE25CA572AFAF9",
782                                 REL_ID_PREFIX + "TWFuYWdlZEVsZW1lbnQ6NDVFRjMxRDhBMUZENjI0RDcyNzYzOTBBMTIxNUJGQzM6REVQTE9ZRURfQVM6Q2xvdWROYXRpdmVTeXN0ZW06QzRFMzExQTU1NjY2NzI2RkQ5RkUyNUNBNTcyQUZBRjk=")))));
783         PaginationMetaData metadataOneToOne = new PaginationMetaData();
784         PaginationDTO paginationDTO1 = PaginationDTO.builder().offset(0).limit(5).build();
785         paginationDTO1.setTotalSize(1);
786         oneToOneResult.putAll(metadataOneToOne.getObjectList(paginationDTO1));
787
788         oneToManyResult.put("items", List.of(Map.of(
789                 "o-ran-smo-teiv-ran:GNBDUFUNCTIONNNNNNNNNNNNNNUUU_PROVIDES_NRCELLDUUUUUUUUUUUUUUUUUU", List.of(
790                         generateResponse("D3215E08570BE58339C7463626B50E37", "F9546E82313AC1D5E690DCD7BE55606F",
791                                 REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjpEMzIxNUUwODU3MEJFNTgzMzlDNzQ2MzYyNkI1MEUzNzpQUk9WSURFUzpOUkNlbGxEVTpGOTU0NkU4MjMxM0FDMUQ1RTY5MERDRDdCRTU1NjA2Rg==")))));
792         PaginationMetaData metadataOneToMany = new PaginationMetaData();
793         PaginationDTO paginationDTO2 = PaginationDTO.builder().offset(0).limit(5).addQueryParameters("scopeFilter",
794                 "/attributes[@cellLocalIdddddddddddddddddddddddddddddddddddddddddddddddddddddd=2]").build();
795         paginationDTO2.setTotalSize(1);
796         oneToManyResult.putAll(metadataOneToMany.getObjectList(paginationDTO2));
797
798         manyToOneResult.put("items", List.of(Map.of(
799                 "o-ran-smo-teiv-cloud:CLOUDNATIVEAPPLICATIONNNNNNNNNNN_DEPLOYED_ON_NAMESPACEEEEEEEEEEE", List.of(
800                         generateResponse("719BD5C7CD8A939D76A83DA95DA45C01", "1C02E96B2AAE036C7AE404BC38C308E0",
801                                 REL_ID_PREFIX + "Q2xvdWROYXRpdmVBcHBsaWNhdGlvbjo3MTlCRDVDN0NEOEE5MzlENzZBODNEQTk1REE0NUMwMTpERVBMT1lFRF9PTjpOYW1lc3BhY2U6MUMwMkU5NkIyQUFFMDM2QzdBRTQwNEJDMzhDMzA4RTA=")))));
802         PaginationMetaData metadataManyToOne = new PaginationMetaData();
803         PaginationDTO paginationDTO3 = PaginationDTO.builder().offset(0).limit(5).addQueryParameters("scopeFilter",
804                 "/id[@id=\"719BD5C7CD8A939D76A83DA95DA45C01\"]").build();
805         paginationDTO3.setTotalSize(1);
806         manyToOneResult.putAll(metadataManyToOne.getObjectList(paginationDTO3));
807
808         manyToManyResult.put("items", List.of(Map.of(
809                 "o-ran-smo-teiv-cloud-to-ran:GNBDUFUNCTIONNNNNNNNN_REALISED_BY_CLOUDNATIVEAPPLICATIONNNNNNNNN", List.of(
810                         generateResponse("4CFF136200A2DE36205A13559C55DB2A", "C549905CF3CC890CE5746C5E10ACF00D",
811                                 REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjo0Q0ZGMTM2MjAwQTJERTM2MjA1QTEzNTU5QzU1REIyQTpSRUFMSVNFRF9CWTpDbG91ZE5hdGl2ZUFwcGxpY2F0aW9uOkM1NDk5MDVDRjNDQzg5MENFNTc0NkM1RTEwQUNGMDBE")))));
812         PaginationMetaData metadataManyToMany = new PaginationMetaData();
813         PaginationDTO paginationDTO4 = PaginationDTO.builder().offset(0).limit(5).addQueryParameters("scopeFilter",
814                 "/CloudNativeApplicationnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/id[@id=\"C549905CF3CC890CE5746C5E10ACF00D\"] | /GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/id[@id=\"4CFF136200A2DE36205A13559C55DB2A\"]")
815                 .build();
816         paginationDTO4.setTotalSize(1);
817         manyToManyResult.putAll(metadataManyToMany.getObjectList(paginationDTO4));
818
819         RelationType oneToOne = SchemaRegistry.getRelationTypeByName(
820                 "MANAGEDELEMENTTTTTTTTTTT_DEPLOYED_AS_CLOUDNATIVESYSTEMMMMMMMMMMM");
821         RelationType oneToMany = SchemaRegistry.getRelationTypeByName(
822                 "GNBDUFUNCTIONNNNNNNNNNNNNNUUU_PROVIDES_NRCELLDUUUUUUUUUUUUUUUUUU");
823         RelationType manyToOne = SchemaRegistry.getRelationTypeByName(
824                 "CLOUDNATIVEAPPLICATIONNNNNNNNNNN_DEPLOYED_ON_NAMESPACEEEEEEEEEEE");
825         RelationType manyToMany = SchemaRegistry.getRelationTypeByName(
826                 "GNBDUFUNCTIONNNNNNNNN_REALISED_BY_CLOUDNATIVEAPPLICATIONNNNNNNNN");
827
828         verifyResponse(oneToOneResult, underTest.getRelationshipsByType(oneToOne, null, paginationDTO1));
829         verifyResponse(oneToManyResult, underTest.getRelationshipsByType(oneToMany,
830                 "/attributes[@cellLocalIdddddddddddddddddddddddddddddddddddddddddddddddddddddd=2]", paginationDTO2));
831         verifyResponse(manyToOneResult, underTest.getRelationshipsByType(manyToOne,
832                 "/id[@id=\"719BD5C7CD8A939D76A83DA95DA45C01\"]", paginationDTO3));
833         verifyResponse(manyToManyResult, underTest.getRelationshipsByType(manyToMany,
834                 "/CloudNativeApplicationnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/id[@id=\"C549905CF3CC890CE5746C5E10ACF00D\"] | /GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/id[@id=\"4CFF136200A2DE36205A13559C55DB2A\"]",
835                 paginationDTO4));
836
837         assertThatThrownBy(() -> underTest.getRelationshipsByType(oneToMany, "/attributes[@celllocalid=2]", PaginationDTO
838                 .builder().offset(0).limit(5).build())).isInstanceOf(TiesPathException.class).hasMessage("Grammar Error");
839         Assertions.assertDoesNotThrow(() -> underTest.getRelationshipsByType(oneToMany, null, PaginationDTO.builder()
840                 .offset(0).limit(5).build()));
841         Assertions.assertDoesNotThrow(() -> underTest.getRelationshipsByType(oneToMany,
842                 "/GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/attributes[contains(@fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn, \"GNBDUFunction=16\")]",
843                 PaginationDTO.builder().offset(0).limit(5).build()));
844         Assertions.assertDoesNotThrow(() -> underTest.getRelationshipsByType(manyToMany,
845                 "/CloudNativeApplicationnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/attributes[@name=\"Example Cloud App/10\"] | /GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/id[@id=\"5A548EA9D166341776CA0695837E55D8\"]",
846                 PaginationDTO.builder().offset(0).limit(5).build()));
847     }
848
849     @Test
850     void testGetRelationshipsByTypeWithLongNames_relConnectingSameEntity() {
851         Map<String, Object> sameEntityOneToOneResult = new HashMap<>();
852         Map<String, Object> sameEntityOneToManyResult = new HashMap<>();
853
854         // Rel connectingSameEntity ONE_TO_ONE
855         RelationType relSameEntityOneToOne = SchemaRegistry.getRelationTypeByName(
856                 "ANTENNAMODULEEEEEEEEEEEE_DEPLOYED_ON_ANTENNAMODULEEEEEEEEEEEEEEE");
857         sameEntityOneToOneResult.put("items", List.of(Map.of(
858                 "o-ran-smo-teiv-equipment:ANTENNAMODULEEEEEEEEEEEE_DEPLOYED_ON_ANTENNAMODULEEEEEEEEEEEEEEE", List.of(
859                         generateResponse("478A05C67D47D117C2DC5BDF5E00AE70", "479A05C67D47D117C2DC5BDF5E00AE70",
860                                 REL_ID_PREFIX + "QW50ZW5uYU1vZHVsZTo0NzhBMDVDNjdENDdEMTE3QzJEQzVCREY1RTAwQUU3MDpERVBMT1lFRF9CWTpBbnRlbm5hTW9kdWxlOjQ3OUEwNUM2N0Q0N0QxMTdDMkRDNUJERjVFMDBBRTcwCg==")))));
861         PaginationMetaData metadataOneToMany = new PaginationMetaData();
862         PaginationDTO paginationDTO2 = PaginationDTO.builder().offset(0).limit(5).build();
863         paginationDTO2.setTotalSize(1);
864         sameEntityOneToOneResult.putAll(metadataOneToMany.getObjectList(paginationDTO2));
865
866         verifyResponse(sameEntityOneToOneResult, underTest.getRelationshipsByType(relSameEntityOneToOne, null, PaginationDTO
867                 .builder().offset(0).limit(5).build()));
868
869         // Rel connectingSameEntity ONE_TO_MANY
870         RelationType relSameEntityOneToMany = SchemaRegistry.getRelationTypeByName(
871                 "ANTENNAMODULEEEEEEEEEEEE_REALISED_BY_ANTENNAMODULEEEEEEEEEEEEEEE");
872         sameEntityOneToManyResult.put("items", List.of(Map.of(
873                 "o-ran-smo-teiv-equipment:ANTENNAMODULEEEEEEEEEEEE_REALISED_BY_ANTENNAMODULEEEEEEEEEEEEEEE", List.of(
874                         generateResponse("378A05C67D47D117C2DC5BDF5E00AE70", "379A05C67D47D117C2DC5BDF5E00AE70",
875                                 REL_ID_PREFIX + "QW50ZW5uYU1vZHVsZTozNzhBMDVDNjdENDdEMTE3QzJEQzVCREY1RTAwQUU3MDpSRUFMSVNFRF9CWTpBbnRlbm5hTW9kdWxlOjM3OUEwNUM2N0Q0N0QxMTdDMkRDNUJERjVFMDBBRTcwCg==")))));
876         PaginationMetaData metadataOneToOne = new PaginationMetaData();
877         PaginationDTO paginationDTO1 = PaginationDTO.builder().offset(0).limit(5).build();
878         paginationDTO1.setTotalSize(1);
879         sameEntityOneToManyResult.putAll(metadataOneToOne.getObjectList(paginationDTO1));
880
881         verifyResponse(sameEntityOneToManyResult, underTest.getRelationshipsByType(relSameEntityOneToMany, null,
882                 PaginationDTO.builder().offset(0).limit(5).build()));
883     }
884
885     @Test
886     void testGetTopologyByTypeWithLongNames() {
887         Map<String, Object> result = new HashMap<>();
888         Map<String, Object> queryMap = new HashMap<>();
889
890         queryMap.put("query", Map.of("targetFilter",
891                 "/attributes(fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)", "scopeFilter",
892                 "/attributes[contains(@fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn, \"13\")] | /id[@id='5A3085C3400C3096E2ED2321452766B1']"));
893
894         result.putAll(queryMap);
895
896         PaginationDTO paginationDTO = PaginationDTO.builder().basePath("/domains/RAN/entities/GNBDUFunction").offset(0)
897                 .limit(2).addQueryParameters("targetFilter",
898                         "/attributes(fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)").addQueryParameters(
899                                 "scopeFilter",
900                                 "/attributes[contains(@fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn, \"13\")] | /id[@id='5A3085C3400C3096E2ED2321452766B1']")
901                 .build();
902         paginationDTO.setTotalSize(2);
903         result.putAll(new PaginationMetaData().getObjectList(paginationDTO));
904
905         result.put("items", List.of(Map.of(
906                 "o-ran-smo-teiv-ran:GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn", List.of(Map.of(
907                         ATTRIBUTES, Map.of("fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
908                                 "SubNetwork=SolarSystem/SubNetwork=Earth/SubNetwork=Europe/SubNetwork=Hungary/GNBDUFunction=13"),
909                         "id", "25E690E22BDA90B9C4FEE1F083CBA597"), Map.of(ATTRIBUTES, Map.of(
910                                 "fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
911                                 "SubNetwork=SolarSystem/SubNetwork=Earth/SubNetwork=Europe/SubNetwork=Hungary/GNBDUFunction=14"),
912                                 "id", "5A3085C3400C3096E2ED2321452766B1")))));
913
914         verifyResponse(result, underTest.getTopologyByType(
915                 "GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
916                 "/attributes(fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)",
917                 "/attributes[contains(@fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn, \"13\")] | /id[@id='5A3085C3400C3096E2ED2321452766B1']",
918                 paginationDTO));
919         Assertions.assertThrows(TiesPathException.class, () -> underTest.getTopologyByType(
920                 "GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
921                 "/attributes(fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)",
922                 "/attributes[contains(@fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn, \"1000493\")] ; /attributes[@gNBId=4000259]",
923                 PaginationDTO.builder().offset(0).limit(2).build()));
924     }
925
926     @Test
927     void testGetEntitiesByDomainWithLongNames() {
928         Map<String, Object> reference1 = new HashMap<>();
929         Map<String, String> query = new LinkedHashMap<>();
930
931         query.put("scopeFilter", "/attributes[@cellLocalIdddddddddddddddddddddddddddddddddddddddddddddddddddddd=3]");
932         query.put("targetFilter", "/attributes(cellLocalIdddddddddddddddddddddddddddddddddddddddddddddddddddddd)");
933
934         PaginationMetaData pmd1 = new PaginationMetaData();
935         PaginationDTO paginationDTO = PaginationDTO.builder().basePath("/domains/EQUIPMENT_TO_RAN").offset(0).limit(5)
936                 .build();
937         paginationDTO.setQueryParameters(query);
938         paginationDTO.setTotalSize(1);
939         reference1.putAll(pmd1.getObjectList(paginationDTO));
940
941         reference1.put("query", query);
942
943         reference1.put("items", List.of(Map.of(
944                 "o-ran-smo-teiv-ran:NRCellDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU", List.of(Map.of("id",
945                         "B480427E8A0C0B8D994E437784BB382F", ATTRIBUTES, Map.of(
946                                 "cellLocalIdddddddddddddddddddddddddddddddddddddddddddddddddddddd", "3"))))));
947
948         Map<String, Object> reference2 = new HashMap<>();
949         Map<String, Object> query2 = new HashMap<>();
950
951         query2.put("targetFilter", "/id");
952         query2.put("scopeFilter", "/id[contains(@id,\"EA403A\")]");
953
954         PaginationMetaData pmd2 = new PaginationMetaData();
955         PaginationDTO paginationDTO2 = PaginationDTO.builder().basePath("/domains/EQUIPMENT_TO_RAN").offset(0).limit(5)
956                 .addQueryParameters("targetFilter", "/id").addQueryParameters("scopeFilter",
957                         "/id[contains(@id,\"EA403A\")]").build();
958         paginationDTO2.setTotalSize(1);
959         reference1.putAll(pmd2.getObjectList(paginationDTO2));
960
961         reference2.put("query", query2);
962
963         reference2.put("items", List.of(Map.of(
964                 "o-ran-smo-teiv-ran:NRCellDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU", List.of(Map.of("id",
965                         "F26F279E91D0941DB4F646E707EA403A")))));
966
967         verifyResponse(reference2, underTest.getEntitiesByDomain("EQUIPMENT_TO_RAN", "/id", "/id[contains(@id,\"EA403A\")]",
968                 paginationDTO2));
969
970         Map<String, Object> reference3 = new HashMap<>();
971         Map<String, Object> query3 = new HashMap<>();
972
973         query3.put("targetFilter",
974                 "/GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/attributes/fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn");
975         query3.put("scopeFilter",
976                 "/GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/attributes[contains(@fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn,\"GNBDUFunction=10\")]");
977
978         PaginationMetaData pmd3 = new PaginationMetaData();
979         PaginationDTO paginationDTO3 = PaginationDTO.builder().basePath("/domains/EQUIPMENT_TO_RAN").offset(0).limit(5)
980                 .addQueryParameters("targetFilter",
981                         "/GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/attributes/fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn")
982                 .addQueryParameters("scopeFilter",
983                         "/GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/attributes[contains(@fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn,\"GNBDUFunction=10\")]")
984                 .build();
985         paginationDTO3.setTotalSize(1);
986         reference1.putAll(pmd3.getObjectList(paginationDTO3));
987
988         reference3.put("query", query3);
989
990         reference3.put("items", List.of(Map.of(
991                 "o-ran-smo-teiv-ran:GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn", List.of(Map.of("id",
992                         "1050570EBB1315E1AE7A9FD5E1400A00", ATTRIBUTES, Map.of(
993                                 "fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
994                                 "SubNetwork=SolarSystem/SubNetwork=Earth/SubNetwork=Europe/SubNetwork=Hungary/GNBDUFunction=10"))))));
995
996         verifyResponse(reference3, underTest.getEntitiesByDomain("RAN",
997                 "/GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/attributes/fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
998                 "/GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/attributes[contains(@fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn,\"GNBDUFunction=10\")]",
999                 paginationDTO3));
1000
1001         Object result = underTest.getEntitiesByDomain("OAM_TO_RAN", "/id", "", PaginationDTO.builder().offset(0).limit(500)
1002                 .build());
1003         Assertions.assertEquals(10, ((Map) ((List) ((HashMap) result).get("items")).get(0)).size());
1004         Assertions.assertTrue(((Map) ((List) ((HashMap) result).get("items")).get(0)).containsKey(
1005                 "o-ran-smo-teiv-oam:ManagedElementtttttttttttttttttttttttttttttttttttttttttttttttttt"));
1006
1007         Assertions.assertTrue(((Map) ((List) ((HashMap) result).get("items")).get(0)).containsKey(
1008                 "o-ran-smo-teiv-ran:GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"));
1009     }
1010
1011     @Test
1012     void testAvailableClassifiers() {
1013         Assertions.assertEquals(Set.of("gnbdu-function-model:Rural", "gnbcucp-gnbcuup-model:Weekend"), underTest
1014                 .loadClassifiers());
1015     }
1016
1017     @Test
1018     void testAvailableDecorators() {
1019         Assertions.assertEquals(Map.of("gnbdu-function-model:location", DataType.PRIMITIVE,
1020                 "gnbcucp-gnbcuup-model:metadata", DataType.CONTAINER), underTest.loadDecorators());
1021     }
1022
1023     @Test
1024     void testGetSchemasByDomain() {
1025         Set<Map<String, Object>> expected = new HashSet<>();
1026         for (StoredSchema schema : getSchemasList()) {
1027             if (schema.getDomain() == null || !schema.getDomain().equals("RAN_OAM_TO_CLOUD")) {
1028                 continue;
1029             }
1030             Map<String, Object> exp = new HashMap<>();
1031             exp.put("domain", Collections.singletonList(schema.getDomain()));
1032             exp.put("name", schema.getName());
1033             exp.put("revision", schema.getRevision());
1034             exp.put("content", Collections.singletonMap("href", "/schemas/" + schema.getName() + "/content"));
1035             expected.add(exp);
1036         }
1037
1038         Assertions.assertEquals(expected, new HashSet<>((List) underTest.getSchemas("RAN_OAM_TO_CLOUD", PaginationDTO
1039                 .builder().offset(0).limit(15).build()).get("items")));
1040     }
1041
1042     @Test
1043     void testGetSchemasWithPartialDomain() {
1044         Set<Map<String, Object>> expected = new HashSet<>();
1045         for (StoredSchema schema : getSchemasList()) {
1046             if (schema.getDomain() == null || !schema.getDomain().matches("RAN_.*O.*")) {
1047                 continue;
1048             }
1049             Map<String, Object> exp = new HashMap<>();
1050             exp.put("domain", Collections.singletonList(schema.getDomain()));
1051             exp.put("name", schema.getName());
1052             exp.put("revision", schema.getRevision());
1053             exp.put("content", Collections.singletonMap("href", "/schemas/" + schema.getName() + "/content"));
1054             expected.add(exp);
1055         }
1056
1057         Assertions.assertEquals(expected, new HashSet<>((List) underTest.getSchemas("RAN_.*O.*", PaginationDTO.builder()
1058                 .offset(0).limit(15).build()).get("items")));
1059     }
1060
1061     @Test
1062     void testGetSchema() {
1063         StoredSchema expected = null;
1064         for (StoredSchema schema : getSchemasList()) {
1065             if (schema.getName().equals("o-ran-smo-teiv-oam")) {
1066                 expected = schema;
1067                 break;
1068             }
1069         }
1070
1071         StoredSchema actual = underTest.getSchema("o-ran-smo-teiv-oam");
1072         Assertions.assertTrue(actual.getContent().contains("o-ran-smo-teiv-oam"));
1073
1074         actual.setContent("yang model o-ran-smo-teiv-oam {}");
1075         Assertions.assertEquals(expected, actual);
1076
1077         Assertions.assertNull(underTest.getSchema("o-ran-smo-teiv-invalid"));
1078     }
1079
1080     @Test
1081     void testSchemaCRUD() {
1082         Assertions.assertNull(underTest.getSchema("newSchema"));
1083
1084         StoredSchema expected = new StoredSchema();
1085         expected.setName("newSchema");
1086         expected.setNamespace("new-namespace");
1087         expected.setDomain("NEW_DOMAIN");
1088         expected.setIncludedModules(new ArrayList<>());
1089         expected.setContent("yang content {} \n\n \t\t\t;");
1090         expected.setOwnerAppId("additional");
1091         expected.setStatus("IN_USAGE");
1092
1093         underTest.postSchema("newSchema", "new-namespace", "NEW_DOMAIN", new ArrayList<>(), "yang content {} \n\n \t\t\t;",
1094                 "additional");
1095
1096         Assertions.assertEquals(expected, underTest.getSchema("newSchema"));
1097
1098         underTest.setSchemaToDeleting("newSchema");
1099
1100         expected.setStatus("DELETING");
1101         Assertions.assertEquals(expected, underTest.getSchema("newSchema"));
1102
1103         underTest.deleteSchema("newSchema");
1104
1105         Assertions.assertNull(underTest.getSchema("newSchema"));
1106     }
1107
1108     private List<StoredSchema> getSchemasList() {
1109         final List<StoredSchema> schemas = new ArrayList<>();
1110
1111         StoredSchema ranLogicalToCloud = new StoredSchema();
1112         ranLogicalToCloud.setName("o-ran-smo-teiv-cloud-to-ran");
1113         ranLogicalToCloud.setNamespace("urn:o-ran:smo-teiv-cloud-to-ran");
1114         ranLogicalToCloud.setDomain("CLOUD_TO_RAN");
1115         ranLogicalToCloud.setRevision("2023-10-24");
1116
1117         StoredSchema ranEquipment = new StoredSchema();
1118         ranEquipment.setName("o-ran-smo-teiv-equipment");
1119         ranEquipment.setNamespace("urn:o-ran:smo-teiv-equipment");
1120         ranEquipment.setDomain("EQUIPMENT");
1121         ranEquipment.setRevision("2023-06-26");
1122
1123         StoredSchema ranOamToCloud = new StoredSchema();
1124         ranOamToCloud.setName("o-ran-smo-teiv-oam-to-cloud");
1125         ranOamToCloud.setNamespace("urn:o-ran:smo-teiv-oam-to-cloud");
1126         ranOamToCloud.setDomain("OAM_TO_CLOUD");
1127         ranOamToCloud.setRevision("2023-10-24");
1128
1129         StoredSchema ranOamToLogical = new StoredSchema();
1130         ranOamToLogical.setName("o-ran-smo-teiv-oam-to-ran");
1131         ranOamToLogical.setNamespace("urn:o-ran:smo-teiv-oam-to-ran");
1132         ranOamToLogical.setDomain("OAM_TO_RAN");
1133         ranOamToLogical.setRevision("2023-10-24");
1134
1135         StoredSchema ranCloud = new StoredSchema();
1136         ranCloud.setName("o-ran-smo-teiv-cloud");
1137         ranCloud.setNamespace("urn:o-ran:smo-teiv-cloud");
1138         ranCloud.setDomain("CLOUD");
1139         ranCloud.setRevision("2023-06-26");
1140
1141         StoredSchema ranOam = new StoredSchema();
1142         ranOam.setName("o-ran-smo-teiv-oam");
1143         ranOam.setNamespace("urn:o-ran:smo-teiv-oam");
1144         ranOam.setDomain("OAM");
1145         ranOam.setRevision("2024-05-02");
1146         ranOam.setIncludedModules(new ArrayList<>());
1147         ranOam.setOwnerAppId("BUILT_IN_MODULE");
1148         ranOam.setStatus("IN_USAGE");
1149         ranOam.setContent("yang model o-ran-smo-teiv-oam {}");
1150
1151         StoredSchema yangTypes = new StoredSchema();
1152         yangTypes.setName("o-ran-smo-teiv-common-yang-types");
1153         yangTypes.setRevision("2023-07-04");
1154
1155         StoredSchema ranLogicalToEquipment = new StoredSchema();
1156         ranLogicalToEquipment.setName("o-ran-smo-teiv-equipment-to-ran");
1157         ranLogicalToEquipment.setDomain("EQUIPMENT_TO_RAN");
1158         ranLogicalToEquipment.setRevision("2023-10-24");
1159
1160         StoredSchema gnbcucpGnbcuupModel = new StoredSchema();
1161         gnbcucpGnbcuupModel.setName("gnbcucp-gnbcuup-model");
1162
1163         StoredSchema yangExtensions = new StoredSchema();
1164         yangExtensions.setName("o-ran-smo-teiv-common-yang-extensions");
1165         yangExtensions.setRevision("2023-07-04");
1166
1167         StoredSchema ranLogical = new StoredSchema();
1168         ranLogical.setName("o-ran-smo-teiv-ran");
1169         ranLogical.setDomain("RAN");
1170         ranLogical.setRevision("2023-11-03");
1171
1172         StoredSchema gnbduFunctionModel = new StoredSchema();
1173         gnbduFunctionModel.setName("gnbdu-function-model");
1174
1175         schemas.add(ranLogicalToCloud);
1176         schemas.add(ranEquipment);
1177         schemas.add(ranOamToCloud);
1178         schemas.add(ranOamToLogical);
1179         schemas.add(ranCloud);
1180         schemas.add(ranOam);
1181         schemas.add(yangTypes);
1182         schemas.add(ranLogicalToEquipment);
1183         schemas.add(gnbcucpGnbcuupModel);
1184         schemas.add(yangExtensions);
1185         schemas.add(ranLogical);
1186         schemas.add(gnbduFunctionModel);
1187
1188         return schemas;
1189     }
1190 }