From 28bb1c5cb3b106ddc2b91da8b5f9d4db731b2faf Mon Sep 17 00:00:00 2001 From: Dimitrios Giannopoulos Date: Thu, 13 Jun 2024 13:01:12 +0000 Subject: [PATCH 01/10] feat: version 1.0.0 --- Dockerfile | 4 ++-- pom.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index c5f3989..e7a7b05 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM ibm-semeru-runtimes:open-17.0.7_7-jdk # RUN mkdir /opt/shareclasses RUN mkdir -p /opt/openslice/lib/ -COPY target/org.etsi.osl.tmf.api-1.0.0-SNAPSHOT-exec.jar /opt/openslice/lib/ -CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses", "-jar", "/opt/openslice/lib/org.etsi.osl.tmf.api-1.0.0-SNAPSHOT-exec.jar"] +COPY target/org.etsi.osl.tmf.api-1.0.0-exec.jar /opt/openslice/lib/ +CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses", "-jar", "/opt/openslice/lib/org.etsi.osl.tmf.api-1.0.0-exec.jar"] EXPOSE 13082 \ No newline at end of file diff --git a/pom.xml b/pom.xml index e7b37d7..850b120 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.etsi.osl org.etsi.osl.main - 1.0.0-SNAPSHOT + 1.0.0 ../org.etsi.osl.main -- GitLab From 973248399d8f33f0062b2c0e3e6b5275a08733e8 Mon Sep 17 00:00:00 2001 From: Dimitrios Giannopoulos Date: Fri, 14 Jun 2024 11:45:38 +0000 Subject: [PATCH 02/10] fix: add protected run --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8ea78d6..6b853e7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -13,7 +13,7 @@ include: - ci-templates/default.yml - ci-templates/build.yml rules: - - if: '$CI_COMMIT_REF_NAME == "develop"' + - if: '$CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_PROTECTED' - project: osl/code/org.etsi.osl.main ref: develop @@ -21,7 +21,7 @@ include: - ci-templates/default.yml - ci-templates/build_unprotected.yml rules: - - if: '$CI_COMMIT_REF_NAME != "main" && $CI_COMMIT_REF_NAME != "develop"' + - if: '$CI_COMMIT_REF_NAME != "main" && $CI_COMMIT_REF_NAME != "develop" && !$CI_COMMIT_REF_PROTECTED' maven_build: extends: .maven_build -- GitLab From 1228d56d4561f77d60f1bc0c12630f56190f0a39 Mon Sep 17 00:00:00 2001 From: Dimitrios Giannopoulos Date: Fri, 14 Jun 2024 13:04:35 +0000 Subject: [PATCH 03/10] fix: side branch references main's side branch --- .gitlab-ci.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6b853e7..bb7d754 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -13,7 +13,15 @@ include: - ci-templates/default.yml - ci-templates/build.yml rules: - - if: '$CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_PROTECTED' + - if: '$CI_COMMIT_REF_NAME == "develop"' + + - project: osl/code/org.etsi.osl.main + ref: $CI_COMMIT_REF_NAME + file: + - ci-templates/default.yml + - ci-templates/build.yml + rules: + - if: '$CI_COMMIT_REF_PROTECTED && $CI_COMMIT_REF_NAME != "main" && $CI_COMMIT_REF_NAME != "develop"' - project: osl/code/org.etsi.osl.main ref: develop -- GitLab From 963b589dd350423780f0f27f43b11d17034303c6 Mon Sep 17 00:00:00 2001 From: Christos Tranoris Date: Fri, 28 Jun 2024 00:07:28 +0300 Subject: [PATCH 04/10] fix for https://labs.etsi.org/rep/osl/code/org.etsi.osl.tmf.api/-/issues/42 --- .../ServiceSpecificationRepoService.java | 2 +- .../etsi/osl/tmf/util/PrimitivesParser.java | 29 +++++++++++++++---- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/etsi/osl/tmf/scm633/reposervices/ServiceSpecificationRepoService.java b/src/main/java/org/etsi/osl/tmf/scm633/reposervices/ServiceSpecificationRepoService.java index 9fd5474..3ebca01 100644 --- a/src/main/java/org/etsi/osl/tmf/scm633/reposervices/ServiceSpecificationRepoService.java +++ b/src/main/java/org/etsi/osl/tmf/scm633/reposervices/ServiceSpecificationRepoService.java @@ -1144,7 +1144,7 @@ public class ServiceSpecificationRepoService { return null; } - logger.error("nsdid returned: " + nsd.getName()); + logger.debug("nsdid returned: " + nsd.getName()); List newRfservices = new ArrayList<>(); diff --git a/src/main/java/org/etsi/osl/tmf/util/PrimitivesParser.java b/src/main/java/org/etsi/osl/tmf/util/PrimitivesParser.java index 64557ad..645b2db 100644 --- a/src/main/java/org/etsi/osl/tmf/util/PrimitivesParser.java +++ b/src/main/java/org/etsi/osl/tmf/util/PrimitivesParser.java @@ -34,6 +34,7 @@ import org.yaml.snakeyaml.Yaml; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; @@ -107,10 +108,20 @@ public class PrimitivesParser { public static JSONObject processNSD(NetworkServiceDescriptor nsd) { // Parse the NSD descriptor from string to YAML Yaml yaml = new Yaml(); - Map yamlMap = yaml.load(nsd.getDescriptor()); - - // Parse the NSD descriptor from YAML to JSONObject - JSONObject nsdJson = new JSONObject(yamlMap); + JSONObject nsdJson; + + Object obj = yaml.load(nsd.getDescriptor()); + + if ( obj instanceof ArrayList) { + // Parse the NSD descriptor from YAML to JSONObject + nsdJson = new JSONObject( (ArrayList)obj ); + + }else { + Map yamlMap = ( Map ) obj; + // Parse the NSD descriptor from YAML to JSONObject + nsdJson = new JSONObject(yamlMap); + } + return nsdJson; } @@ -164,8 +175,14 @@ public class PrimitivesParser { // Attach the empty array to the JSONObject under the key "vnfs" vnfs.put("vnfs", vnfsArray); - - JSONArray nsdArray = nsdJson.getJSONObject("nsd").getJSONArray("nsd"); + JSONArray nsdArray = null; + if ( nsdJson.has("nsd") ) { + nsdArray = nsdJson.getJSONObject("nsd").getJSONArray("nsd"); + } else { + nsdArray = new JSONArray(); + nsdArray.put(nsdJson); + } + // Assuming that there might be multiple 'nsd' entries, iterate over them processNSDEntries(nsdArray, vnfsArray); -- GitLab From 78d32db86856fe40cc4001fcb21afabeed58d6a8 Mon Sep 17 00:00:00 2001 From: Christos Tranoris Date: Fri, 28 Jun 2024 14:13:09 +0300 Subject: [PATCH 05/10] fix for https://labs.etsi.org/rep/osl/code/org.etsi.osl.tmf.api/-/issues/42 --- src/main/java/org/etsi/osl/tmf/util/PrimitivesParser.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/etsi/osl/tmf/util/PrimitivesParser.java b/src/main/java/org/etsi/osl/tmf/util/PrimitivesParser.java index 645b2db..ca5a5da 100644 --- a/src/main/java/org/etsi/osl/tmf/util/PrimitivesParser.java +++ b/src/main/java/org/etsi/osl/tmf/util/PrimitivesParser.java @@ -146,7 +146,10 @@ public class PrimitivesParser { if (descriptor.trim().startsWith("[")) { // It's JSON vnfdJson = new JSONObject(descriptor.substring(1, descriptor.length() - 1)); - } else { + } else if (descriptor.trim().startsWith("{")) { + // It's JSON + vnfdJson = new JSONObject(descriptor); + } else{ // It's YAML Yaml yaml = new Yaml(); Map yamlMap = yaml.load(descriptor); -- GitLab From 36cea0de10bcc70d32714c42857ca824c01cd342 Mon Sep 17 00:00:00 2001 From: Christos Tranoris Date: Wed, 19 Jun 2024 00:06:56 +0300 Subject: [PATCH 06/10] fix for #40 (cherry picked from commit 888ca64b097e3f302586344d8b86259c2336b455) --- .../ServiceSpecificationRepoService.java | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/src/main/java/org/etsi/osl/tmf/scm633/reposervices/ServiceSpecificationRepoService.java b/src/main/java/org/etsi/osl/tmf/scm633/reposervices/ServiceSpecificationRepoService.java index 3ebca01..f2a5172 100644 --- a/src/main/java/org/etsi/osl/tmf/scm633/reposervices/ServiceSpecificationRepoService.java +++ b/src/main/java/org/etsi/osl/tmf/scm633/reposervices/ServiceSpecificationRepoService.java @@ -622,7 +622,7 @@ public class ServiceSpecificationRepoService { * Also, * we will add by default all the characteristics of this rSpec to the related bundle parent service */ - //serviceSpec = copyCharacteristicsOfResourceSpecId( ar.getId(), serviceSpec); + serviceSpec = copyCharacteristicsOfResourceSpecId( ar.getId(), serviceSpec); } } @@ -699,24 +699,24 @@ public class ServiceSpecificationRepoService { return targetServiceSpec; } -// private ServiceSpecification copyCharacteristicsOfResourceSpecId(String sourceResourceSpecid, ServiceSpecification targetServiceSpec) { -// -// ResourceSpecification rSpec = resourceSpecRepoService.findByUuid( sourceResourceSpecid ); -// -// if ( rSpec != null ) { -// for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) { -// ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar ); -// //serviceSpecCharacteristicItem.setName( rSpec.getName() + "::" +sourceChar.getName() ); -// serviceSpecCharacteristicItem.setName( sourceChar.getName() ); -// -// if ( targetServiceSpec.findSpecCharacteristicByName( serviceSpecCharacteristicItem.getName() ) == null ) { -// targetServiceSpec.getServiceSpecCharacteristic().add( serviceSpecCharacteristicItem ); -// } -// } -// } -// -// return targetServiceSpec; -// } + private ServiceSpecification copyCharacteristicsOfResourceSpecId(String sourceResourceSpecid, ServiceSpecification targetServiceSpec) { + + ResourceSpecification rSpec = resourceSpecRepoService.findByUuid( sourceResourceSpecid ); + + if ( rSpec != null ) { + for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) { + ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar ); + //serviceSpecCharacteristicItem.setName( rSpec.getName() + "::" +sourceChar.getName() ); + serviceSpecCharacteristicItem.setName( sourceChar.getName() ); + + if ( targetServiceSpec.findSpecCharacteristicByName( serviceSpecCharacteristicItem.getName() ) == null ) { + targetServiceSpec.getServiceSpecCharacteristic().add( serviceSpecCharacteristicItem ); + } + } + } + + return targetServiceSpec; + } public ServiceSpecification cloneServiceSpecification(String uuid) { ServiceSpecification source = this.findByUuid(uuid); @@ -1422,11 +1422,11 @@ public class ServiceSpecificationRepoService { -// for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) { -// ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar ); + for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) { + ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar ); // serviceSpecCharacteristicItem.setName( rSpec.getName() + "::" +sourceChar.getName() ); -// serviceSpec.addServiceSpecCharacteristicItem(serviceSpecCharacteristicItem ); -// } + serviceSpec.addServiceSpecCharacteristicItem(serviceSpecCharacteristicItem ); + } ResourceSpecificationRef resourceSpecRef = new ResourceSpecificationRef(); @@ -1439,25 +1439,25 @@ public class ServiceSpecificationRepoService { return serviceSpec; } -// private ServiceSpecCharacteristic copyResourceCharacteristic( ResourceSpecificationCharacteristic sourceChar ) { -// -// ServiceSpecCharacteristic serviceSpecCharacteristicItem = new ServiceSpecCharacteristic(); -// serviceSpecCharacteristicItem.setDescription( sourceChar.getDescription()); -// serviceSpecCharacteristicItem.valueType( sourceChar.getValueType() ); -// serviceSpecCharacteristicItem.configurable(sourceChar.isConfigurable()); -// serviceSpecCharacteristicItem.setMinCardinality( sourceChar.getMinCardinality() ); -// serviceSpecCharacteristicItem.setMaxCardinality( sourceChar.getMaxCardinality() ); -// serviceSpecCharacteristicItem.setValidFor( sourceChar.getValidFor() ); -// for (ResourceSpecificationCharacteristicValue cv : sourceChar.getResourceSpecCharacteristicValue()) { -// ServiceSpecCharacteristicValue serviceSpecCharacteristicValueItem = new ServiceSpecCharacteristicValue(); -// serviceSpecCharacteristicValueItem.setValue( new Any( cv.getValue().getValue(), cv.getValue().getAlias())); -// serviceSpecCharacteristicValueItem.isDefault( cv.isIsDefault() ); -// serviceSpecCharacteristicValueItem.setUnitOfMeasure( cv.getUnitOfMeasure() ); -// serviceSpecCharacteristicItem.addServiceSpecCharacteristicValueItem(serviceSpecCharacteristicValueItem ); -// } -// return serviceSpecCharacteristicItem; -// } -// + private ServiceSpecCharacteristic copyResourceCharacteristic( ResourceSpecificationCharacteristic sourceChar ) { + + ServiceSpecCharacteristic serviceSpecCharacteristicItem = new ServiceSpecCharacteristic(); + serviceSpecCharacteristicItem.setDescription( sourceChar.getDescription()); + serviceSpecCharacteristicItem.valueType( sourceChar.getValueType() ); + serviceSpecCharacteristicItem.configurable(sourceChar.isConfigurable()); + serviceSpecCharacteristicItem.setMinCardinality( sourceChar.getMinCardinality() ); + serviceSpecCharacteristicItem.setMaxCardinality( sourceChar.getMaxCardinality() ); + serviceSpecCharacteristicItem.setValidFor( sourceChar.getValidFor() ); + for (ResourceSpecificationCharacteristicValue cv : sourceChar.getResourceSpecCharacteristicValue()) { + ServiceSpecCharacteristicValue serviceSpecCharacteristicValueItem = new ServiceSpecCharacteristicValue(); + serviceSpecCharacteristicValueItem.setValue( new Any( cv.getValue().getValue(), cv.getValue().getAlias())); + serviceSpecCharacteristicValueItem.isDefault( cv.isIsDefault() ); + serviceSpecCharacteristicValueItem.setUnitOfMeasure( cv.getUnitOfMeasure() ); + serviceSpecCharacteristicItem.addServiceSpecCharacteristicValueItem(serviceSpecCharacteristicValueItem ); + } + return serviceSpecCharacteristicItem; + } + -- GitLab From 00c03c32717f496efaf000a1473b0a4b754e14d7 Mon Sep 17 00:00:00 2001 From: Christos Tranoris Date: Wed, 19 Jun 2024 01:13:52 +0300 Subject: [PATCH 07/10] fix tests (cherry picked from commit f34a9b647ebadd28d9bda9ce81fca3720cd83bfc) --- pom.xml | 5 ----- .../etsi/osl/services/api/ServiceCatalogIntegrationTest.java | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 850b120..681a724 100644 --- a/pom.xml +++ b/pom.xml @@ -75,11 +75,6 @@ pom import - - org.json - json - 20210307 - diff --git a/src/test/java/org/etsi/osl/services/api/ServiceCatalogIntegrationTest.java b/src/test/java/org/etsi/osl/services/api/ServiceCatalogIntegrationTest.java index 6a865af..511e46c 100644 --- a/src/test/java/org/etsi/osl/services/api/ServiceCatalogIntegrationTest.java +++ b/src/test/java/org/etsi/osl/services/api/ServiceCatalogIntegrationTest.java @@ -855,7 +855,7 @@ public class ServiceCatalogIntegrationTest { * */ - assertThat( clonedSpec.getServiceSpecCharacteristic().size() ).isEqualTo( 70 ); + assertThat( clonedSpec.getServiceSpecCharacteristic().size() ).isEqualTo( 71 ); String responseSpecClonedVINNI2 = mvc.perform(MockMvcRequestBuilders.get("/serviceCatalogManagement/v4/serviceSpecification/cloneVINNI?serviceName=aVINNIService") -- GitLab From b0227b3532baff1980783267a8d19ed005eb89eb Mon Sep 17 00:00:00 2001 From: Christos Tranoris Date: Wed, 19 Jun 2024 12:16:59 +0300 Subject: [PATCH 08/10] fixes to run tests in ide also. related to #41 (cherry picked from commit 113bab7c99a2dc6600e4f6633423cec1f793cd1b) --- pom.xml | 7 +++++++ .../osl/services/api/ResourceCatalogIntegrationTest.java | 3 ++- .../osl/services/api/ServiceInventoryIntegrationTest.java | 3 ++- .../osl/services/api/sim638/ServiceApiControllerTest.java | 3 ++- .../scm633/ServiceSpecificationRepoServiceTest.java | 3 ++- 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 681a724..885c306 100644 --- a/pom.xml +++ b/pom.xml @@ -261,6 +261,13 @@ org.springframework.boot spring-boot-starter-test test + + + com.vaadin.external.google + android-json + + + org.springframework.security diff --git a/src/test/java/org/etsi/osl/services/api/ResourceCatalogIntegrationTest.java b/src/test/java/org/etsi/osl/services/api/ResourceCatalogIntegrationTest.java index 926f88a..02aa8e0 100644 --- a/src/test/java/org/etsi/osl/services/api/ResourceCatalogIntegrationTest.java +++ b/src/test/java/org/etsi/osl/services/api/ResourceCatalogIntegrationTest.java @@ -76,6 +76,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; @@ -95,7 +96,7 @@ import net.minidev.json.JSONObject; @RunWith(SpringRunner.class) @Transactional @SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.MOCK , classes = OpenAPISpringBoot.class) -//@AutoConfigureTestDatabase //this automatically uses h2 +@AutoConfigureTestDatabase //this automatically uses h2 @AutoConfigureMockMvc @ActiveProfiles("testing") //@TestPropertySource( diff --git a/src/test/java/org/etsi/osl/services/api/ServiceInventoryIntegrationTest.java b/src/test/java/org/etsi/osl/services/api/ServiceInventoryIntegrationTest.java index d31dd72..16ad168 100644 --- a/src/test/java/org/etsi/osl/services/api/ServiceInventoryIntegrationTest.java +++ b/src/test/java/org/etsi/osl/services/api/ServiceInventoryIntegrationTest.java @@ -66,6 +66,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; @@ -83,7 +84,7 @@ import org.springframework.web.context.WebApplicationContext; @RunWith(SpringRunner.class) @Transactional @SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.MOCK , classes = OpenAPISpringBoot.class) -//@AutoConfigureTestDatabase //this automatically uses h2 +@AutoConfigureTestDatabase //this automatically uses h2 @AutoConfigureMockMvc @ActiveProfiles("testing") //@TestPropertySource( diff --git a/src/test/java/org/etsi/osl/services/api/sim638/ServiceApiControllerTest.java b/src/test/java/org/etsi/osl/services/api/sim638/ServiceApiControllerTest.java index afdebd6..5c59431 100644 --- a/src/test/java/org/etsi/osl/services/api/sim638/ServiceApiControllerTest.java +++ b/src/test/java/org/etsi/osl/services/api/sim638/ServiceApiControllerTest.java @@ -17,6 +17,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpStatus; @@ -51,7 +52,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @RunWith(SpringRunner.class) @Transactional @SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.MOCK , classes = OpenAPISpringBoot.class) -//@AutoConfigureTestDatabase //this automatically uses h2 +@AutoConfigureTestDatabase //this automatically uses h2 @AutoConfigureMockMvc @ActiveProfiles("testing") //@TestPropertySource( diff --git a/src/test/java/org/etsi/osl/services/reposervices/scm633/ServiceSpecificationRepoServiceTest.java b/src/test/java/org/etsi/osl/services/reposervices/scm633/ServiceSpecificationRepoServiceTest.java index a3ea0b3..c5e3082 100644 --- a/src/test/java/org/etsi/osl/services/reposervices/scm633/ServiceSpecificationRepoServiceTest.java +++ b/src/test/java/org/etsi/osl/services/reposervices/scm633/ServiceSpecificationRepoServiceTest.java @@ -446,7 +446,8 @@ public class ServiceSpecificationRepoServiceTest { alias = v.getAlias(); assertEquals("PrimitivesList", serviceSpecCharacteristic.getName()); - assertEquals("{\"vnfs\":[{\"config-primitive\":[{\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}],\"name\":\"run-touch-command\"}],\"id\":\"vnf1\",\"vdu-configs\":[{\"config-primitive\":[{\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}],\"name\":\"run-touch-command\"}],\"id\":\"vdu1\"},{\"config-primitive\":[{\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}],\"name\":\"run-touch-command\"}],\"id\":\"vdu2\"}]},{\"config-primitive\":[{\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}],\"name\":\"run-touch-command\"}],\"id\":\"vnf2\",\"vdu-configs\":[{\"config-primitive\":[{\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}],\"name\":\"run-touch-command\"}],\"id\":\"vdu1\"},{\"config-primitive\":[{\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}],\"name\":\"run-touch-command\"}],\"id\":\"vdu2\"}]}]}", value); +// assertEquals("{\"vnfs\":[{\"config-primitive\":[{\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}],\"name\":\"run-touch-command\"}],\"id\":\"vnf1\",\"vdu-configs\":[{\"config-primitive\":[{\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}],\"name\":\"run-touch-command\"}],\"id\":\"vdu1\"},{\"config-primitive\":[{\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}],\"name\":\"run-touch-command\"}],\"id\":\"vdu2\"}]},{\"config-primitive\":[{\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}],\"name\":\"run-touch-command\"}],\"id\":\"vnf2\",\"vdu-configs\":[{\"config-primitive\":[{\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}],\"name\":\"run-touch-command\"}],\"id\":\"vdu1\"},{\"config-primitive\":[{\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}],\"name\":\"run-touch-command\"}],\"id\":\"vdu2\"}]}]}", value); + assertEquals("{\"vnfs\":[{\"config-primitive\":[{\"name\":\"run-touch-command\",\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}]}],\"id\":\"vnf1\",\"vdu-configs\":[{\"config-primitive\":[{\"name\":\"run-touch-command\",\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}]}],\"id\":\"vdu1\"},{\"config-primitive\":[{\"name\":\"run-touch-command\",\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}]}],\"id\":\"vdu2\"}]},{\"config-primitive\":[{\"name\":\"run-touch-command\",\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}]}],\"id\":\"vnf2\",\"vdu-configs\":[{\"config-primitive\":[{\"name\":\"run-touch-command\",\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}]}],\"id\":\"vdu1\"},{\"config-primitive\":[{\"name\":\"run-touch-command\",\"parameter\":[{\"name\":\"filename\",\"data-type\":\"STRING\"}]}],\"id\":\"vdu2\"}]}]}", value); assertEquals("", alias); -- GitLab From d6db063ea3b3db21c3625290c9aebb917b8758c5 Mon Sep 17 00:00:00 2001 From: Christos Tranoris Date: Wed, 19 Jun 2024 14:37:26 +0300 Subject: [PATCH 09/10] adding debug messages (cherry picked from commit 7a4c6636512a077a9e2597be2eda82e9edc495b4) --- .../sim638/service/ServiceRepoService.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java b/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java index 6b65eb6..d38b8ad 100644 --- a/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java +++ b/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java @@ -1117,9 +1117,9 @@ public class ServiceRepoService { @Transactional - public void resourceCreatedEvent(@Valid ResourceCreateNotification resNotif) { - logger.debug("resourceCreatedEvent"); - Resource res = resNotif.getEvent().getEvent().getResource(); + public void resourceCreatedEvent(@Valid ResourceCreateNotification resNotif) { + Resource res = resNotif.getEvent().getEvent().getResource(); + logger.debug("resourceCreatedEvent for: " + res.getName()); updateServiceFromresourceChange(res); } @@ -1127,8 +1127,8 @@ public class ServiceRepoService { @Transactional public void resourceStateChangedEvent(@Valid ResourceStateChangeNotification resNotif) { - logger.debug("resourceStateChangedEvent"); Resource res = resNotif.getEvent().getEvent().getResource(); + logger.debug("resourceStateChangedEvent for: " + res.getName()); updateServiceFromresourceChange(res); } @@ -1173,10 +1173,18 @@ public class ServiceRepoService { } private void updateResourceFromKubernetesLabel(Resource res) { + logger.debug("updateResourceFromKubernetesLabel for: " + res.getName()); + if (res.getResourceCharacteristicByName("org.etsi.osl.serviceId") != null) { + + + logger.debug("org.etsi.osl.serviceId found "); String serviceId = res.getResourceCharacteristicByName("org.etsi.osl.serviceId").getValue().getValue(); + logger.debug("rserviceId: " + serviceId); + Service aService = findByUuid( serviceId ); if ( aService !=null ) { + logger.debug("aService found "); Boolean resourceFoundInSupportedResourcesOfService = false; for (ResourceRef as : aService.getSupportingResource()) { if ( as.getId().equals( res.getId() )) { @@ -1184,7 +1192,8 @@ public class ServiceRepoService { break; } } - + + logger.debug("resourceFoundInSupportedResourcesOfService= " + resourceFoundInSupportedResourcesOfService); if ( !resourceFoundInSupportedResourcesOfService ) { ServiceUpdate supd = new ServiceUpdate(); -- GitLab From f5c66ab89939bd0fc1a991b6b86b587224e0b817 Mon Sep 17 00:00:00 2001 From: Christos Tranoris Date: Fri, 12 Jul 2024 00:48:44 +0300 Subject: [PATCH 10/10] fix for org.springframework.orm.ObjectOptimisticLockingFailureException --- .../sim638/api/ServiceApiRouteBuilder.java | 45 +++++++- .../sim638/service/ServiceRepoService.java | 103 +++++++++++------- 2 files changed, 103 insertions(+), 45 deletions(-) diff --git a/src/main/java/org/etsi/osl/tmf/sim638/api/ServiceApiRouteBuilder.java b/src/main/java/org/etsi/osl/tmf/sim638/api/ServiceApiRouteBuilder.java index 55e38b6..93afc97 100644 --- a/src/main/java/org/etsi/osl/tmf/sim638/api/ServiceApiRouteBuilder.java +++ b/src/main/java/org/etsi/osl/tmf/sim638/api/ServiceApiRouteBuilder.java @@ -20,12 +20,15 @@ package org.etsi.osl.tmf.sim638.api; import java.io.IOException; - +import java.util.Date; +import java.util.Map; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; - +import org.apache.camel.Exchange; import org.apache.camel.LoggingLevel; +import org.apache.camel.Processor; import org.apache.camel.ProducerTemplate; +import org.apache.camel.RuntimeCamelException; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.model.dataformat.JsonLibrary; import org.apache.commons.logging.Log; @@ -44,6 +47,11 @@ import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import org.etsi.osl.model.nfv.DeploymentDescriptor; +import org.etsi.osl.model.nfv.ExperimentMetadata; +import org.etsi.osl.model.nfv.Product; +import org.etsi.osl.model.nfv.ValidationJob; +import org.etsi.osl.model.nfv.ValidationStatus; +import org.etsi.osl.model.nfv.VxFMetadata; @Configuration //@RefreshScope @@ -111,6 +119,9 @@ public class ServiceApiRouteBuilder extends RouteBuilder { @Override public void configure() throws Exception { + + + from( CATALOG_ADD_SERVICE ) .log(LoggingLevel.INFO, log, CATALOG_ADD_SERVICE + " message received and will be processed for service inventory!") .to("log:DEBUG?showBody=true&showHeaders=true") @@ -188,8 +199,7 @@ public class ServiceApiRouteBuilder extends RouteBuilder { .unmarshal().json( JsonLibrary.Jackson, DeploymentDescriptor.class, true) .bean( serviceRepoService, "nfvCatalogNSResourceChanged(${body})"); - - + from( EVENT_RESOURCE_STATE_CHANGED ) .log(LoggingLevel.INFO, log, EVENT_RESOURCE_STATE_CHANGED + " message received and will be processed for service inventory!") @@ -199,6 +209,13 @@ public class ServiceApiRouteBuilder extends RouteBuilder { from( EVENT_RESOURCE_CREATE ) + .errorHandler(deadLetterChannel("direct:retriesDeadLetters") + .maximumRedeliveries(5) + .redeliveryDelay(1000).useOriginalMessage() + .logExhausted(true) + .logHandled(true) + .retriesExhaustedLogLevel(LoggingLevel.ERROR) + .retryAttemptedLogLevel(LoggingLevel.ERROR)) .log(LoggingLevel.INFO, log, EVENT_RESOURCE_CREATE + " message received and will be processed for service inventory!") .to("log:DEBUG?showBody=true&showHeaders=true") .unmarshal().json( JsonLibrary.Jackson, ResourceCreateNotification.class, true) @@ -208,15 +225,33 @@ public class ServiceApiRouteBuilder extends RouteBuilder { from( EVENT_RESOURCE_ATTRIBUTE_VALUE_CHANGED ) + .errorHandler(deadLetterChannel("direct:retriesDeadLetters") + .maximumRedeliveries(5) + .redeliveryDelay(1000).useOriginalMessage() + .logExhausted(true) + .logHandled(true) + .retriesExhaustedLogLevel(LoggingLevel.ERROR) + .retryAttemptedLogLevel(LoggingLevel.ERROR)) + .log(LoggingLevel.INFO, log, EVENT_RESOURCE_ATTRIBUTE_VALUE_CHANGED + " message received and will be processed for service inventory!") .to("log:DEBUG?showBody=true&showHeaders=true") .unmarshal().json( JsonLibrary.Jackson, ResourceAttributeValueChangeNotification.class, true) .bean( serviceRepoService, "resourceAttrChangedEvent(${body})"); + + /** + * dead Letter Queue msgs if everything fails to connect + */ + from("direct:retriesDeadLetters") + //.setBody() + //.body(String.class) + //.process( ErroneousValidationProcessor ) + .to("log:DEBUG?showBody=true&showHeaders=true") + .to("stream:out"); } - + static String toJsonString(Object object) throws IOException { ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); diff --git a/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java b/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java index d38b8ad..eaf0609 100644 --- a/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java +++ b/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java @@ -818,6 +818,7 @@ public class ServiceRepoService { // this.updateService( parentServiceId, servUpd, false, null, childService); // } + @Transactional public String getServiceEagerAsString(String id) throws JsonProcessingException { Service s = this.getServiceEager(id); ObjectMapper mapper = new ObjectMapper(); @@ -837,7 +838,8 @@ public class ServiceRepoService { return res; } - + + @Transactional public Service getServiceEager(String id) { if ( id == null || id.equals("")) { return null; @@ -904,6 +906,7 @@ public class ServiceRepoService { /** * @return */ + @Transactional public List findAllServiceActionQueueItems() { return (List) this.serviceActionQueueRepo.findFirst10ByOrderByInsertedDate(); @@ -934,6 +937,7 @@ public class ServiceRepoService { * @param id * @return */ + @Transactional public Void deleteServiceActionQueueItemByUuid(String id) { Optional optso = this.serviceActionQueueRepo.findByUuid(id); @@ -1077,40 +1081,46 @@ public class ServiceRepoService { @Transactional public void resourceAttrChangedEvent(@Valid ResourceAttributeValueChangeNotification resNotif) { + try { + + logger.debug("ResourceAttributeValueChangeNotification"); + Resource res = resNotif.getEvent().getEvent().getResource(); + logger.info("Will update services related to this resource with id = " + res.getId() ); + + var aservices = findServicesHavingThisSupportingResourceID( res.getId() ); + + for (Service as : aservices) { + + Service aService = findByUuid(as.getId()); + + //if ( aService.getState().equals( ServiceStateType.ACTIVE ) ) { + + + ServiceUpdate supd = new ServiceUpdate(); + + //copy characteristics from resource to service + + for (org.etsi.osl.tmf.ri639.model.Characteristic rChar : res.getResourceCharacteristic()) { + Characteristic cNew = new Characteristic(); + cNew.setName( rChar.getName()); + cNew.value( new Any( rChar.getValue() )); + supd.addServiceCharacteristicItem( cNew ); + } + + + Note n = new Note(); + n.setText("Supporting Resource Attribute Changed with id: " + res.getId()); + n.setAuthor( "SIM638-API" ); + n.setDate( OffsetDateTime.now(ZoneOffset.UTC).toString() ); + supd.addNoteItem( n ); + + this.updateService( aService.getId(), supd , true, null, null); //update the service + //} + } - logger.debug("ResourceAttributeValueChangeNotification"); - Resource res = resNotif.getEvent().getEvent().getResource(); - logger.info("Will update services related to this resource with id = " + res.getId() ); - - var aservices = findServicesHavingThisSupportingResourceID( res.getId() ); - - for (Service as : aservices) { - - Service aService = findByUuid(as.getId()); - - //if ( aService.getState().equals( ServiceStateType.ACTIVE ) ) { - - ServiceUpdate supd = new ServiceUpdate(); - - //copy characteristics from resource to service - - for (org.etsi.osl.tmf.ri639.model.Characteristic rChar : res.getResourceCharacteristic()) { - Characteristic cNew = new Characteristic(); - cNew.setName( rChar.getName()); - cNew.value( new Any( rChar.getValue() )); - supd.addServiceCharacteristicItem( cNew ); - } - - - Note n = new Note(); - n.setText("Supporting Resource Attribute Changed with id: " + res.getId()); - n.setAuthor( "SIM638-API" ); - n.setDate( OffsetDateTime.now(ZoneOffset.UTC).toString() ); - supd.addNoteItem( n ); - - this.updateService( aService.getId(), supd , true, null, null); //update the service - //} + }catch (Exception e) { + e.printStackTrace(); } } @@ -1118,20 +1128,32 @@ public class ServiceRepoService { @Transactional public void resourceCreatedEvent(@Valid ResourceCreateNotification resNotif) { - Resource res = resNotif.getEvent().getEvent().getResource(); - logger.debug("resourceCreatedEvent for: " + res.getName()); - updateServiceFromresourceChange(res); + try { + Resource res = resNotif.getEvent().getEvent().getResource(); + logger.debug("resourceCreatedEvent for: " + res.getName()); + updateServiceFromresourceChange(res); + }catch (Exception e) { + e.printStackTrace(); + } + } @Transactional public void resourceStateChangedEvent(@Valid ResourceStateChangeNotification resNotif) { + try { + + Resource res = resNotif.getEvent().getEvent().getResource(); + logger.debug("resourceStateChangedEvent for: " + res.getName()); + updateServiceFromresourceChange(res); - Resource res = resNotif.getEvent().getEvent().getResource(); - logger.debug("resourceStateChangedEvent for: " + res.getName()); - updateServiceFromresourceChange(res); + }catch (Exception e) { + e.printStackTrace(); + } + } - + + @Transactional private void updateServiceFromresourceChange(Resource res) { logger.info("Will update services related to this resource with id = " + res.getId() ); @@ -1172,6 +1194,7 @@ public class ServiceRepoService { } + @Transactional private void updateResourceFromKubernetesLabel(Resource res) { logger.debug("updateResourceFromKubernetesLabel for: " + res.getName()); -- GitLab