From: akshay.khairnar@t-systems.com Date: Tue, 2 Dec 2025 06:47:29 +0000 (+0100) Subject: Upgrade AAI model-loader to Springboot 3.1 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=HEAD;p=aai%2Fmodel-loader.git Upgrade AAI model-loader to Springboot 3.1 - Upgrade SpringBoot version to 3.1 - Testcase fixes Issue-ID: AAI-4209 Change-Id: If170f61770a5984161dba680f57c1a3e9402d744 Signed-off-by: akshay.khairnar@t-systems.com --- diff --git a/pom.xml b/pom.xml index 96050a9..eb73e7b 100644 --- a/pom.xml +++ b/pom.xml @@ -55,12 +55,13 @@ + 5.0.0 17 org.onap.aai.modelloader.service.ModelLoaderApplication https://nexus.onap.org ${basedir}/target - 2.7.18 - 2021.0.8 + 3.1.12 + 2023.0.6 2.9.13 1.10.0 1.27.0 @@ -68,7 +69,7 @@ 2.10.1 1.13.0 2.0.0 - 1.2.11 + 1.4.14 0.39.0 1.0.0 @@ -206,6 +207,10 @@ org.springframework.boot spring-boot-starter-jetty + + org.eclipse.jetty + jetty-server + org.springframework.boot spring-boot-starter-web @@ -320,12 +325,16 @@ ${apache.commons-text.version} - org.springframework.cloud - spring-cloud-starter-sleuth + org.apache.httpcomponents.client5 + httpclient5 - org.springframework.cloud - spring-cloud-sleuth-zipkin + io.micrometer + micrometer-tracing-bridge-brave + + + io.zipkin.reporter2 + zipkin-reporter-brave com.fasterxml.jackson.dataformat diff --git a/src/main/java/org/onap/aai/modelloader/config/DistributionClientStartupConfig.java b/src/main/java/org/onap/aai/modelloader/config/DistributionClientStartupConfig.java index fa8d11b..5832d0d 100644 --- a/src/main/java/org/onap/aai/modelloader/config/DistributionClientStartupConfig.java +++ b/src/main/java/org/onap/aai/modelloader/config/DistributionClientStartupConfig.java @@ -23,7 +23,7 @@ import java.util.Date; import java.util.Timer; import java.util.TimerTask; -import javax.annotation.PreDestroy; +import jakarta.annotation.PreDestroy; import org.onap.aai.cl.api.Logger; import org.onap.aai.cl.eelf.LoggerFactory; diff --git a/src/main/java/org/onap/aai/modelloader/entity/catalog/VnfCatalogArtifactHandler.java b/src/main/java/org/onap/aai/modelloader/entity/catalog/VnfCatalogArtifactHandler.java index 3567b48..edc4d71 100644 --- a/src/main/java/org/onap/aai/modelloader/entity/catalog/VnfCatalogArtifactHandler.java +++ b/src/main/java/org/onap/aai/modelloader/entity/catalog/VnfCatalogArtifactHandler.java @@ -33,7 +33,7 @@ import java.util.UUID; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.commons.text.StringEscapeUtils; -import org.apache.http.client.utils.URIBuilder; +import org.apache.hc.core5.net.URIBuilder; import org.onap.aai.cl.api.Logger; import org.onap.aai.cl.eelf.LoggerFactory; import org.onap.aai.modelloader.config.AaiProperties; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 23dde63..4cb8391 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -14,13 +14,11 @@ server.port=9500 spring.application.name=model-loader -spring.sleuth.enabled=false +management.tracing.enabled=false spring.zipkin.baseUrl=http://jaeger-collector.istio-system:9411 spring.sleuth.messaging.jms.enabled=false -spring.sleuth.trace-id128=true -spring.sleuth.sampler.probability=1.0 -spring.sleuth.propagation.type=w3c,b3 -spring.sleuth.supports-join=false +management.tracing.sampling.probability=1.0 +management.tracing.propagation.type=w3c,b3 spring.sleuth.web.skip-pattern=/aai/util.* server.tomcat.threads.max=200 @@ -29,6 +27,8 @@ server.tomcat.threads.min-spare=25 # Spring Boot logging logging.config=${logback.configurationFile} +# Logging pattern containing traceId and spanId; no longer provided through Sleuth by default +logging.pattern.level="%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]" management.endpoints.web.exposure.include=* diff --git a/src/test/java/org/onap/aai/modelloader/notification/CompDoneStatusMessageBuilderTest.java b/src/test/java/org/onap/aai/modelloader/notification/CompDoneStatusMessageBuilderTest.java index 22d9038..00e57bc 100644 --- a/src/test/java/org/onap/aai/modelloader/notification/CompDoneStatusMessageBuilderTest.java +++ b/src/test/java/org/onap/aai/modelloader/notification/CompDoneStatusMessageBuilderTest.java @@ -27,7 +27,8 @@ import org.onap.sdc.utils.DistributionStatusEnum; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; - import static org.mockito.Mockito.*; + import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest @@ -101,4 +102,4 @@ assertNull(statusMsg.getConsumerID()); assertEquals(DistributionStatusEnum.DEPLOY_OK, statusMsg.getStatus()); } -} \ No newline at end of file +} diff --git a/src/test/java/org/onap/aai/modelloader/notification/DistributionStatusMessageBuilderTest.java b/src/test/java/org/onap/aai/modelloader/notification/DistributionStatusMessageBuilderTest.java index 93456b7..4e8e3a2 100644 --- a/src/test/java/org/onap/aai/modelloader/notification/DistributionStatusMessageBuilderTest.java +++ b/src/test/java/org/onap/aai/modelloader/notification/DistributionStatusMessageBuilderTest.java @@ -25,7 +25,8 @@ import org.onap.sdc.api.consumer.IConfiguration; import org.onap.sdc.api.consumer.IDistributionStatusMessage; import org.onap.sdc.api.notification.IArtifactInfo; import org.onap.sdc.api.notification.INotificationData; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import org.onap.sdc.utils.DistributionStatusEnum; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; diff --git a/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java b/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java index 30008af..48a45c5 100644 --- a/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java +++ b/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java @@ -31,7 +31,7 @@ import java.nio.file.Path; import java.util.Base64; import java.util.List; -import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.onap.aai.babel.service.data.BabelArtifact; import org.onap.aai.babel.service.data.BabelRequest; @@ -60,15 +60,18 @@ public class TestBabelServiceClient { @Value("${wiremock.server.port}") private int wiremockPort; - @Autowired BabelServiceClient client; + @Autowired + private BabelServiceClient client; - @BeforeAll - public static void setup() throws JsonProcessingException { + @BeforeEach + public void setup() throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); List artifacts = List.of( new BabelArtifact("art1", null, ""), new BabelArtifact("art2", null, ""), - new BabelArtifact("art3", null, "")); + new BabelArtifact("art3", null, "") + ); + WireMock.stubFor( WireMock.post(WireMock.urlEqualTo("/services/babel-service/v1/app/generateArtifacts")) .withHeader("X-TransactionId", WireMock.equalTo("Test-Transaction-ID-BabelClient")) @@ -79,22 +82,24 @@ public class TestBabelServiceClient { .willReturn( WireMock.aResponse() .withHeader("Content-Type", "application/json") - .withBody(objectMapper.writeValueAsString(artifacts)))); + .withBody(objectMapper.writeValueAsString(artifacts)) + ) + ); } @Test public void testRestClient() throws BabelServiceClientException, IOException, URISyntaxException { BabelRequest babelRequest = new BabelRequest(); babelRequest.setArtifactName("service-Vscpass-Test"); - babelRequest.setCsar(Base64.getEncoder().encodeToString(readBytesFromFile("compressedArtifacts/service-VscpaasTest-csar.csar"))); + babelRequest.setCsar(Base64.getEncoder().encodeToString( + readBytesFromFile("compressedArtifacts/service-VscpaasTest-csar.csar") + )); babelRequest.setArtifactVersion("1.0"); - List result = - client.postArtifact(babelRequest, "Test-Transaction-ID-BabelClient"); + List result = client.postArtifact(babelRequest, "Test-Transaction-ID-BabelClient"); assertThat(result.size(), is(equalTo(3))); } - private byte[] readBytesFromFile(String resourceFile) throws IOException, URISyntaxException { return Files.readAllBytes(Path.of(ClassLoader.getSystemResource(resourceFile).toURI())); } diff --git a/src/test/java/org/onap/aai/modelloader/restclient/TracingTest.java b/src/test/java/org/onap/aai/modelloader/restclient/TracingTest.java index 3bfceb5..e35dcc6 100644 --- a/src/test/java/org/onap/aai/modelloader/restclient/TracingTest.java +++ b/src/test/java/org/onap/aai/modelloader/restclient/TracingTest.java @@ -30,34 +30,39 @@ import org.springframework.web.client.RestTemplate; import com.github.tomakehurst.wiremock.client.WireMock; @SpringBootTest(properties = { - "spring.sleuth.enabled=true", - "spring.zipkin.baseUrl=http://localhost:${wiremock.server.port}" + "spring.sleuth.enabled=true", + "spring.zipkin.base-url=http://localhost:${wiremock.server.port}", + "spring.main.allow-bean-definition-overriding=true", + "spring.security.enabled=false" }) @AutoConfigureWireMock(port = 0) public class TracingTest { - @Value("${wiremock.server.port}") - private int wiremockPort; - - @Autowired RestTemplate restTemplate; - - @Test - public void thatArtifactsCanBePushed() { - WireMock.stubFor( - WireMock.post(WireMock.urlEqualTo("/api/v2/spans")) - .willReturn( - WireMock.aResponse() - .withStatus(HttpStatus.OK.value()))); - - WireMock.stubFor( - WireMock.get(WireMock.urlEqualTo("/")) - .withHeader("X-B3-TraceId", WireMock.matching(".*")) - .willReturn( - WireMock.aResponse() - .withStatus(HttpStatus.OK.value()))); - - - String response = restTemplate.getForObject("http://localhost:" + wiremockPort + "/", String.class); - } - + @Value("${wiremock.server.port}") + private int wiremockPort; + + @Autowired + private RestTemplate restTemplate; + + @Test + public void thatArtifactsCanBePushed() { + // Stub Zipkin POST /api/v2/spans + WireMock.stubFor( + WireMock.post(WireMock.urlEqualTo("/api/v2/spans")) + .willReturn(WireMock.aResponse() + .withStatus(HttpStatus.OK.value())) + ); + + // Stub GET / + WireMock.stubFor( + WireMock.get(WireMock.urlEqualTo("/")) + .willReturn(WireMock.aResponse() + .withStatus(HttpStatus.OK.value()) + .withBody("ok")) + ); + + // Call the WireMock GET endpoint + String response = restTemplate.getForObject( + "http://localhost:" + wiremockPort + "/", String.class); + } } diff --git a/src/test/java/org/onap/aai/modelloader/service/TestSdcConnectionJob.java b/src/test/java/org/onap/aai/modelloader/service/TestSdcConnectionJob.java index ac9d7ad..6156554 100644 --- a/src/test/java/org/onap/aai/modelloader/service/TestSdcConnectionJob.java +++ b/src/test/java/org/onap/aai/modelloader/service/TestSdcConnectionJob.java @@ -22,7 +22,8 @@ package org.onap.aai.modelloader.service; import static org.mockito.Mockito.*; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.*; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.onap.aai.cl.api.Logger; import org.onap.aai.cl.eelf.LoggerFactory; import org.onap.aai.modelloader.config.ModelLoaderConfig; diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties index a91a723..cf4bcdf 100644 --- a/src/test/resources/application.properties +++ b/src/test/resources/application.properties @@ -1,9 +1,11 @@ CONFIG_HOME=src/test/resources +# Logging pattern containing traceId and spanId; no longer provided through Sleuth by default +logging.pattern.level="%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]" spring.kafka.consumer.auto-offset-reset=earliest spring.kafka.consumer.group-id=aai spring.kafka.consumer.client-id=aai-model-loader topics.distribution.notification=SDC-DISTR-NOTIF-TOPIC-AUTO -spring.sleuth.enabled=false +management.tracing.enabled=false ml.distribution.connection.enabled=false # avoid having the distribution client running in the background (requires active kafka) ml.babel.generate-artifacts-url=/services/babel-service/v1/app/generateArtifacts