2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2024 Ericsson
4 * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
21 package org.oran.smo.teiv.exposure.spi.impl;
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;
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;
39 import javax.sql.DataSource;
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;
54 import com.fasterxml.jackson.databind.ObjectMapper;
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;
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:";
81 private SchemaHandler schemaHandler;
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();
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();
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"));
122 Assertions.assertEquals(response, underTest.getTopology(SchemaRegistry.getEntityTypeByName("GNBDUFunction"),
123 "5A548EA9D166341776CA0695837E55D8"));
124 Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getTopology(SchemaRegistry.getEntityTypeByName(
125 "GNBDUFunction"), "-1"));
128 responseData.clear();
129 attributesMap.clear();
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);
142 Assertions.assertEquals(response, underTest.getTopology(SchemaRegistry.getEntityTypeByName("AntennaCapability"),
143 "5835F77BE9D4E102316BD59195F6370B"));
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();
155 paginationDTO1.setTotalSize(3);
156 response.putAll(new PaginationMetaData().getObjectList(paginationDTO1));
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();
162 mapsList.add(Map.of("o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU", List.of(generateResponse(
163 "D3215E08570BE58339C7463626B50E37", "B480427E8A0C0B8D994E437784BB382F",
164 REL_ID_PREFIX + "R05CRFVGdW5jdGlvbjpEMzIxNUUwODU3MEJFNTgzMzlDNzQ2MzYyNkI1MEUzNzpQUk9WSURFUzpOUkNlbGxEVTpCNDgwNDI3RThBMEMwQjhEOTk0RTQzNzc4NEJCMzgyRg=="))));
166 mapsList.add(Map.of("o-ran-smo-teiv-ran:SECTOR_GROUPS_NRCELLDU", List.of(generateResponse(
167 "F5128C172A70C4FCD4739650B06DE9E2", "B480427E8A0C0B8D994E437784BB382F",
168 REL_ID_PREFIX + "U2VjdG9yOkY1MTI4QzE3MkE3MEM0RkNENDczOTY1MEIwNkRFOUUyOkdST1VQUzpOUkNlbGxEVTpCNDgwNDI3RThBMEMwQjhEOTk0RTQzNzc4NEJCMzgyRg=="))));
170 mapsList.add(Map.of("o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER", List.of(generateResponse(
171 "B480427E8A0C0B8D994E437784BB382F", "E49D942C16E0364E1E0788138916D70C",
172 REL_ID_PREFIX + "TlJDZWxsRFU6QjQ4MDQyN0U4QTBDMEI4RDk5NEU0Mzc3ODRCQjM4MkY6VVNFUzpOUlNlY3RvckNhcnJpZXI6RTQ5RDk0MkMxNkUwMzY0RTFFMDc4ODEzODkxNkQ3MEM="))));
174 response.put(ITEMS, mapsList);
176 verifyResponse(response, underTest.getAllRelationships(SchemaRegistry.getEntityTypeByName("NRCellDU"),
177 SchemaRegistry.getRelationTypesByEntityName("NRCellDU"), "B480427E8A0C0B8D994E437784BB382F",
180 Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getAllRelationships(SchemaRegistry
181 .getEntityTypeByName("NRCellDU"), SchemaRegistry.getRelationTypesByEntityName("NRCellDU"), "NON_EXISTING",
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));
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();
199 List<Map<String, List<Object>>> mapsList = new ArrayList<>();
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="))));
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="))));
209 response.put(ITEMS, mapsList);
211 verifyResponse(response, underTest.getAllRelationships(SchemaRegistry.getEntityTypeByName("GNBCUUPFunction"),
212 SchemaRegistry.getRelationTypesByEntityName("GNBCUUPFunction"), "BFEEAC2CE60273CB0A78319CC201A7FE",
215 Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getAllRelationships(SchemaRegistry
216 .getEntityTypeByName("GNBCUUPFunction"), SchemaRegistry.getRelationTypesByEntityName("GNBCUUPFunction"),
217 "NON_EXISTING", paginationDTO2));
221 void testGetAllRelationshipsManyToMany_filteredByRelationship() {
222 List<Map<String, List<Object>>> mapsList = new ArrayList<>();
223 Map<String, Object> response = new HashMap<>();
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"));
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="))));
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));
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));
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));
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"));
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));
275 RelationType relSameEntity = SchemaRegistry.getRelationTypeByName("ANTENNAMODULE_REALISED_BY_ANTENNAMODULE");
276 EntityType entity = SchemaRegistry.getEntityTypeByName("AntennaModule");
278 Assertions.assertNotNull(relSameEntity);
279 Assertions.assertNotNull(entity);
281 verifyResponse(response, underTest.getAllRelationships(entity, List.of(relSameEntity),
282 "278A05C67D47D117C2DC5BDF5E00AE70", paginationDTO1));
284 Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getAllRelationships(entity, List.of(
285 relSameEntity), "NON_EXISTING", paginationDTO1));
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)));
295 Assertions.assertEquals(relationshipOneToMany, underTest.getRelationshipWithSpecifiedId(idOneToMany, SchemaRegistry
296 .getRelationTypeByName("GNBDUFUNCTION_PROVIDES_NRCELLDU")));
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)));
303 Assertions.assertEquals(relationshipManyToOne, underTest.getRelationshipWithSpecifiedId(idManyToOne, SchemaRegistry
304 .getRelationTypeByName("NODECLUSTER_LOCATED_AT_CLOUDSITE")));
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)));
312 Assertions.assertEquals(relationshipManyToMany, underTest.getRelationshipWithSpecifiedId(idManyToMany,
313 SchemaRegistry.getRelationTypeByName("GNBDUFUNCTION_REALISED_BY_CLOUDNATIVEAPPLICATION")));
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)));
321 Assertions.assertEquals(relationshipConnectingSameEntity, underTest.getRelationshipWithSpecifiedId(
322 idConnectingSameEntity, SchemaRegistry.getRelationTypeByName("ANTENNAMODULE_REALISED_BY_ANTENNAMODULE")));
324 Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getRelationshipWithSpecifiedId("NOT_EXISTING",
325 SchemaRegistry.getRelationTypeByName("GNBDUFUNCTION_PROVIDES_NRCELLDU")));
329 void testGetRelationshipsByType() {
330 Map<String, Object> oneToManyResult = new HashMap<>();
331 Map<String, Object> manyToOneResult = new HashMap<>();
332 Map<String, Object> manyToManyResult = new HashMap<>();
334 Map<String, Object> oneToManyQueryMap = new HashMap<>();
335 oneToManyQueryMap.put("query", Map.of("scopeFilter", "/attributes[@cellLocalId=2]"));
336 oneToManyResult.putAll(oneToManyQueryMap);
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==")))));
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));
348 Map<String, Object> manyToOneQueryMap = new HashMap<>();
349 manyToOneQueryMap.put("query", Map.of("scopeFilter", "/id[@id=\"719BD5C7CD8A939D76A83DA95DA45C01\"]"));
350 manyToOneResult.putAll(manyToOneQueryMap);
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=")))));
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));
362 Map<String, Object> manyToManyQueryMap = new HashMap<>();
363 manyToManyQueryMap.put("query", Map.of("scopeFilter",
364 "/CloudNativeApplication/id[@id=\"C549905CF3CC890CE5746C5E10ACF00D\"]"));
365 manyToManyResult.putAll(manyToManyQueryMap);
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")))));
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));
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");
382 verifyResponse(oneToManyResult, underTest.getRelationshipsByType(oneToMany, "/attributes[@cellLocalId=2]",
383 PaginationDTO.builder().offset(0).limit(5).addQueryParameters("scopeFilter", "/attributes[@cellLocalId=2]")
386 verifyResponse(manyToOneResult, underTest.getRelationshipsByType(manyToOne,
387 "/id[@id=\"719BD5C7CD8A939D76A83DA95DA45C01\"]", PaginationDTO.builder().offset(0).limit(5)
388 .addQueryParameters("scopeFilter", "/id[@id=\"719BD5C7CD8A939D76A83DA95DA45C01\"]").build()));
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()));
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(
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()));
408 void testGetRelationshipsByType_relConnectingSameEntity() {
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();
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));
422 Map<String, Object> queryMapOneScope = new HashMap<>();
423 queryMapOneScope.put("query", Map.of("scopeFilter", "/AntennaModule/id[@id=\"279A05C67D47D117C2DC5BDF5E00AE70\"]"));
424 resultOneScopeFilter.putAll(queryMapOneScope);
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)))));
430 verifyResponse(resultOneScopeFilter, underTest.getRelationshipsByType(relationshipConnectingSameEntity,
431 "/AntennaModule/id[@id=\"279A05C67D47D117C2DC5BDF5E00AE70\"]", PaginationDTO.builder().offset(0).limit(5)
432 .addQueryParameters("scopeFilter", "/AntennaModule/id[@id=\"279A05C67D47D117C2DC5BDF5E00AE70\"]")
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);
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)))));
444 PaginationDTO paginationDTO2 = PaginationDTO.builder().offset(0).limit(5).addQueryParameters("scopeFilter",
445 "/AntennaModule/id[@id=\"278A05C67D47D117C2DC5BDF5E00AE70\"] | /AntennaModule/id[@id=\"279A05C67D47D117C2DC5BDF5E00AE70\"]")
447 paginationDTO2.setTotalSize(1);
448 resultTwoScopeFilter.putAll(metadataRelConnectingSameEntity.getObjectList(paginationDTO2));
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\"]")
459 void testGetTopologyByType() {
460 Map<String, Object> result = new HashMap<>();
461 Map<String, Object> queryMap = new HashMap<>();
463 queryMap.put("query", Map.of("targetFilter", "/attributes(fdn)", "scopeFilter",
464 "/attributes[contains(@fdn, \"13\")] | /id[@id='5A3085C3400C3096E2ED2321452766B1']"));
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));
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")))));
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']")
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()));
492 void testGetEntitiesByDomain() {
493 Map<String, Object> reference1 = new HashMap<>();
494 Map<String, Object> query = new HashMap<>();
496 query.put("targetFilter", "/attributes(azimuth)");
497 query.put("scopeFilter", "/attributes[@azimuth=3]");
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);
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]",
513 Map<String, Object> reference2 = new HashMap<>();
514 Map<String, Object> query2 = new HashMap<>();
516 query2.put("targetFilter", "/id");
517 query2.put("scopeFilter", "/id[contains(@id,\"F1407\")]");
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\")]")
523 paginationDTO2.setTotalSize(1);
524 pmd2.getObjectList(paginationDTO2);
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\")]")
530 paginationDTO3.setTotalSize(1);
531 reference2.putAll(pmd2.getObjectList(paginationDTO3));
533 reference2.put("items", List.of(Map.of("o-ran-smo-teiv-ran:Sector", List.of(Map.of("id",
534 "2F445AA5744FA3D230FD6838531F1407")))));
536 verifyResponse(reference2, underTest.getEntitiesByDomain("RAN", "/id", "/id[contains(@id,\"F1407\")]",
539 Map<String, Object> reference3 = new HashMap<>();
540 Map<String, Object> query3 = new HashMap<>();
542 query3.put("targetFilter", "/GNBDUFunction/attributes/fdn");
543 query3.put("scopeFilter", "/GNBDUFunction/attributes[contains(@fdn,\"GNBDUFunction=10\")]");
545 PaginationMetaData pmd3 = new PaginationMetaData();
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));
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"))))));
558 verifyResponse(reference3, underTest.getEntitiesByDomain("RAN", "/GNBDUFunction/attributes/fdn",
559 "/GNBDUFunction/attributes[contains(@fdn,\"GNBDUFunction=10\")]", paginationDTO4));
561 Object result = underTest.getEntitiesByDomain("OAM_TO_RAN", "/id", "", PaginationDTO.builder().offset(0).limit(500)
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"));
567 Assertions.assertTrue(((Map) ((List) ((HashMap) result).get("items")).get(0)).containsKey(
568 "o-ran-smo-teiv-ran:GNBDUFunction"));
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(
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);
589 Assertions.assertEquals(response, underTest.getTopology(SchemaRegistry.getEntityTypeByName(
590 "GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"), "5A548EA9D166341776CA0695837E55D8"));
591 Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getTopology(SchemaRegistry.getEntityTypeByName(
592 "GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"), "-1"));
596 void testGetAllRelationshipsWithLongNames_manyToOne_oneToMany_manyToMany() {
597 Map<String, Object> response = new HashMap<>();
598 List<Map<String, List<Object>>> mapsList = new ArrayList<>();
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")
605 paginationDTO.setTotalSize(6);
606 response.putAll(new PaginationMetaData().getObjectList(paginationDTO));
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"))));
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=="))));
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"))));
626 response.put(ITEMS, mapsList);
628 verifyResponse(response, underTest.getAllRelationships(SchemaRegistry.getEntityTypeByName(
629 "GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"), SchemaRegistry
630 .getRelationTypesByEntityName("GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"),
631 "4CFF136200A2DE36205A13559C55DB2A", paginationDTO));
633 Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getAllRelationships(SchemaRegistry
634 .getEntityTypeByName("GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"), SchemaRegistry
635 .getRelationTypesByEntityName("GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"),
636 "NON_EXISTING", paginationDTO));
640 void testGetAllRelationshipsWithLongNames_filteredByRelationship() {
641 List<Map<String, List<Object>>> mapsList = new ArrayList<>();
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")
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));
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")
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));
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")
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));
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")
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));
723 Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getAllRelationships(SchemaRegistry
724 .getEntityTypeByName("GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"), List.of(
725 SchemaRegistry.getRelationTypeByName(
726 "GNBDUFUNCTIONNNNNNNNN_REALISED_BY_CLOUDNATIVEAPPLICATIONNNNNNNNN")), "NON_EXISTING",
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)));
738 Assertions.assertEquals(relationshipOneToOne, underTest.getRelationshipWithSpecifiedId(idOneToOne, SchemaRegistry
739 .getRelationTypeByName("MANAGEDELEMENTTTTTTTTTTT_DEPLOYED_AS_CLOUDNATIVESYSTEMMMMMMMMMMM")));
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)));
747 Assertions.assertEquals(relationshipOneToMany, underTest.getRelationshipWithSpecifiedId(idOneToMany, SchemaRegistry
748 .getRelationTypeByName("GNBDUFUNCTIONNNNNNNNNNNNNNUUU_PROVIDES_NRCELLDUUUUUUUUUUUUUUUUUU")));
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)));
756 Assertions.assertEquals(relationshipManyToOne, underTest.getRelationshipWithSpecifiedId(idManyToOne, SchemaRegistry
757 .getRelationTypeByName("CLOUDNATIVEAPPLICATIONNNNNNNNNNN_DEPLOYED_ON_NAMESPACEEEEEEEEEEE")));
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)));
765 Assertions.assertEquals(relationshipManyToMany, underTest.getRelationshipWithSpecifiedId(idManyToMany,
766 SchemaRegistry.getRelationTypeByName("GNBDUFUNCTIONNNNNNNNN_REALISED_BY_CLOUDNATIVEAPPLICATIONNNNNNNNN")));
768 Assertions.assertThrowsExactly(TiesException.class, () -> underTest.getRelationshipWithSpecifiedId("NOT_EXISTING",
769 SchemaRegistry.getRelationTypeByName("GNBDUFUNCTIONNNNNNNNNNNNNNUUU_PROVIDES_NRCELLDUUUUUUUUUUUUUUUUUU")));
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<>();
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));
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));
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));
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\"]")
816 paginationDTO4.setTotalSize(1);
817 manyToManyResult.putAll(metadataManyToMany.getObjectList(paginationDTO4));
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");
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\"]",
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()));
850 void testGetRelationshipsByTypeWithLongNames_relConnectingSameEntity() {
851 Map<String, Object> sameEntityOneToOneResult = new HashMap<>();
852 Map<String, Object> sameEntityOneToManyResult = new HashMap<>();
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));
866 verifyResponse(sameEntityOneToOneResult, underTest.getRelationshipsByType(relSameEntityOneToOne, null, PaginationDTO
867 .builder().offset(0).limit(5).build()));
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));
881 verifyResponse(sameEntityOneToManyResult, underTest.getRelationshipsByType(relSameEntityOneToMany, null,
882 PaginationDTO.builder().offset(0).limit(5).build()));
886 void testGetTopologyByTypeWithLongNames() {
887 Map<String, Object> result = new HashMap<>();
888 Map<String, Object> queryMap = new HashMap<>();
890 queryMap.put("query", Map.of("targetFilter",
891 "/attributes(fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)", "scopeFilter",
892 "/attributes[contains(@fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn, \"13\")] | /id[@id='5A3085C3400C3096E2ED2321452766B1']"));
894 result.putAll(queryMap);
896 PaginationDTO paginationDTO = PaginationDTO.builder().basePath("/domains/RAN/entities/GNBDUFunction").offset(0)
897 .limit(2).addQueryParameters("targetFilter",
898 "/attributes(fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)").addQueryParameters(
900 "/attributes[contains(@fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn, \"13\")] | /id[@id='5A3085C3400C3096E2ED2321452766B1']")
902 paginationDTO.setTotalSize(2);
903 result.putAll(new PaginationMetaData().getObjectList(paginationDTO));
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")))));
914 verifyResponse(result, underTest.getTopologyByType(
915 "GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
916 "/attributes(fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)",
917 "/attributes[contains(@fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn, \"13\")] | /id[@id='5A3085C3400C3096E2ED2321452766B1']",
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()));
927 void testGetEntitiesByDomainWithLongNames() {
928 Map<String, Object> reference1 = new HashMap<>();
929 Map<String, String> query = new LinkedHashMap<>();
931 query.put("scopeFilter", "/attributes[@cellLocalIdddddddddddddddddddddddddddddddddddddddddddddddddddddd=3]");
932 query.put("targetFilter", "/attributes(cellLocalIdddddddddddddddddddddddddddddddddddddddddddddddddddddd)");
934 PaginationMetaData pmd1 = new PaginationMetaData();
935 PaginationDTO paginationDTO = PaginationDTO.builder().basePath("/domains/EQUIPMENT_TO_RAN").offset(0).limit(5)
937 paginationDTO.setQueryParameters(query);
938 paginationDTO.setTotalSize(1);
939 reference1.putAll(pmd1.getObjectList(paginationDTO));
941 reference1.put("query", query);
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"))))));
948 Map<String, Object> reference2 = new HashMap<>();
949 Map<String, Object> query2 = new HashMap<>();
951 query2.put("targetFilter", "/id");
952 query2.put("scopeFilter", "/id[contains(@id,\"EA403A\")]");
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));
961 reference2.put("query", query2);
963 reference2.put("items", List.of(Map.of(
964 "o-ran-smo-teiv-ran:NRCellDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU", List.of(Map.of("id",
965 "F26F279E91D0941DB4F646E707EA403A")))));
967 verifyResponse(reference2, underTest.getEntitiesByDomain("EQUIPMENT_TO_RAN", "/id", "/id[contains(@id,\"EA403A\")]",
970 Map<String, Object> reference3 = new HashMap<>();
971 Map<String, Object> query3 = new HashMap<>();
973 query3.put("targetFilter",
974 "/GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/attributes/fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn");
975 query3.put("scopeFilter",
976 "/GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/attributes[contains(@fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn,\"GNBDUFunction=10\")]");
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\")]")
985 paginationDTO3.setTotalSize(1);
986 reference1.putAll(pmd3.getObjectList(paginationDTO3));
988 reference3.put("query", query3);
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"))))));
996 verifyResponse(reference3, underTest.getEntitiesByDomain("RAN",
997 "/GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/attributes/fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
998 "/GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/attributes[contains(@fdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn,\"GNBDUFunction=10\")]",
1001 Object result = underTest.getEntitiesByDomain("OAM_TO_RAN", "/id", "", PaginationDTO.builder().offset(0).limit(500)
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"));
1007 Assertions.assertTrue(((Map) ((List) ((HashMap) result).get("items")).get(0)).containsKey(
1008 "o-ran-smo-teiv-ran:GNBDUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"));
1012 void testAvailableClassifiers() {
1013 Assertions.assertEquals(Set.of("gnbdu-function-model:Rural", "gnbcucp-gnbcuup-model:Weekend"), underTest
1014 .loadClassifiers());
1018 void testAvailableDecorators() {
1019 Assertions.assertEquals(Map.of("gnbdu-function-model:location", DataType.PRIMITIVE,
1020 "gnbcucp-gnbcuup-model:metadata", DataType.CONTAINER), underTest.loadDecorators());
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")) {
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"));
1038 Assertions.assertEquals(expected, new HashSet<>((List) underTest.getSchemas("RAN_OAM_TO_CLOUD", PaginationDTO
1039 .builder().offset(0).limit(15).build()).get("items")));
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.*")) {
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"));
1057 Assertions.assertEquals(expected, new HashSet<>((List) underTest.getSchemas("RAN_.*O.*", PaginationDTO.builder()
1058 .offset(0).limit(15).build()).get("items")));
1062 void testGetSchema() {
1063 StoredSchema expected = null;
1064 for (StoredSchema schema : getSchemasList()) {
1065 if (schema.getName().equals("o-ran-smo-teiv-oam")) {
1071 StoredSchema actual = underTest.getSchema("o-ran-smo-teiv-oam");
1072 Assertions.assertTrue(actual.getContent().contains("o-ran-smo-teiv-oam"));
1074 actual.setContent("yang model o-ran-smo-teiv-oam {}");
1075 Assertions.assertEquals(expected, actual);
1077 Assertions.assertNull(underTest.getSchema("o-ran-smo-teiv-invalid"));
1081 void testSchemaCRUD() {
1082 Assertions.assertNull(underTest.getSchema("newSchema"));
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");
1093 underTest.postSchema("newSchema", "new-namespace", "NEW_DOMAIN", new ArrayList<>(), "yang content {} \n\n \t\t\t;",
1096 Assertions.assertEquals(expected, underTest.getSchema("newSchema"));
1098 underTest.setSchemaToDeleting("newSchema");
1100 expected.setStatus("DELETING");
1101 Assertions.assertEquals(expected, underTest.getSchema("newSchema"));
1103 underTest.deleteSchema("newSchema");
1105 Assertions.assertNull(underTest.getSchema("newSchema"));
1108 private List<StoredSchema> getSchemasList() {
1109 final List<StoredSchema> schemas = new ArrayList<>();
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");
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");
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");
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");
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");
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 {}");
1151 StoredSchema yangTypes = new StoredSchema();
1152 yangTypes.setName("o-ran-smo-teiv-common-yang-types");
1153 yangTypes.setRevision("2023-07-04");
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");
1160 StoredSchema gnbcucpGnbcuupModel = new StoredSchema();
1161 gnbcucpGnbcuupModel.setName("gnbcucp-gnbcuup-model");
1163 StoredSchema yangExtensions = new StoredSchema();
1164 yangExtensions.setName("o-ran-smo-teiv-common-yang-extensions");
1165 yangExtensions.setRevision("2023-07-04");
1167 StoredSchema ranLogical = new StoredSchema();
1168 ranLogical.setName("o-ran-smo-teiv-ran");
1169 ranLogical.setDomain("RAN");
1170 ranLogical.setRevision("2023-11-03");
1172 StoredSchema gnbduFunctionModel = new StoredSchema();
1173 gnbduFunctionModel.setName("gnbdu-function-model");
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);