Upgrade AAI model-loader to Springboot 3.1 86/142486/1 master
authorakshay.khairnar@t-systems.com <akshay.khairnar@t-systems.com>
Tue, 2 Dec 2025 06:47:29 +0000 (07:47 +0100)
committerakshay.khairnar@t-systems.com <akshay.khairnar@t-systems.com>
Tue, 2 Dec 2025 06:48:23 +0000 (07:48 +0100)
- Upgrade SpringBoot version to 3.1
- Testcase fixes

Issue-ID: AAI-4209
Change-Id: If170f61770a5984161dba680f57c1a3e9402d744
Signed-off-by: akshay.khairnar@t-systems.com <akshay.khairnar@t-systems.com>
pom.xml
src/main/java/org/onap/aai/modelloader/config/DistributionClientStartupConfig.java
src/main/java/org/onap/aai/modelloader/entity/catalog/VnfCatalogArtifactHandler.java
src/main/resources/application.properties
src/test/java/org/onap/aai/modelloader/notification/CompDoneStatusMessageBuilderTest.java
src/test/java/org/onap/aai/modelloader/notification/DistributionStatusMessageBuilderTest.java
src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java
src/test/java/org/onap/aai/modelloader/restclient/TracingTest.java
src/test/java/org/onap/aai/modelloader/service/TestSdcConnectionJob.java
src/test/resources/application.properties

diff --git a/pom.xml b/pom.xml
index 96050a9..eb73e7b 100644 (file)
--- a/pom.xml
+++ b/pom.xml
        </dependencyManagement>
 
        <properties>
+               <jakarta-servlet.version>5.0.0</jakarta-servlet.version>
                <maven.compiler.release>17</maven.compiler.release>
                <start-class>org.onap.aai.modelloader.service.ModelLoaderApplication</start-class>
                <nexusproxy>https://nexus.onap.org</nexusproxy>
                <docker.location>${basedir}/target</docker.location>
-               <spring-boot.version>2.7.18</spring-boot.version>
-               <spring-cloud.version>2021.0.8</spring-cloud.version>
+               <spring-boot.version>3.1.12</spring-boot.version>
+               <spring-cloud.version>2023.0.6</spring-cloud.version>
                <spring-kafka.version>2.9.13</spring-kafka.version>
                <apache.commons-text.version>1.10.0</apache.commons-text.version>
                <commons-compress.version>1.27.0</commons-compress.version>
@@ -68,7 +69,7 @@
                <gson.version>2.10.1</gson.version>
                <babel.version>1.13.0</babel.version>
                <sdc-distribution-client.version>2.0.0</sdc-distribution-client.version>
-               <logback.version>1.2.11</logback.version>
+               <logback.version>1.4.14</logback.version>
                <!-- docker related properties -->
                <docker.fabric.version>0.39.0</docker.fabric.version>
                <aai.docker.version>1.0.0</aai.docker.version>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-jetty</artifactId>
                </dependency>
+               <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-server</artifactId>
+        </dependency>
                <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-web</artifactId>
                        <version>${apache.commons-text.version}</version>
                </dependency>
                <dependency>
-                       <groupId>org.springframework.cloud</groupId>
-                       <artifactId>spring-cloud-starter-sleuth</artifactId>
+                       <groupId>org.apache.httpcomponents.client5</groupId>
+                       <artifactId>httpclient5</artifactId>
                </dependency>
                <dependency>
-                               <groupId>org.springframework.cloud</groupId>
-                               <artifactId>spring-cloud-sleuth-zipkin</artifactId>
+                       <groupId>io.micrometer</groupId>
+                       <artifactId>micrometer-tracing-bridge-brave</artifactId>
+               </dependency>
+               <dependency>
+                               <groupId>io.zipkin.reporter2</groupId>
+                               <artifactId>zipkin-reporter-brave</artifactId>
                </dependency>
                <dependency>
                        <groupId>com.fasterxml.jackson.dataformat</groupId>
index fa8d11b..5832d0d 100644 (file)
@@ -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;
index 3567b48..edc4d71 100644 (file)
@@ -33,7 +33,7 @@ import java.util.UUID;
 import javax.xml.parsers.DocumentBuilder;\r
 import javax.xml.parsers.DocumentBuilderFactory;\r
 import org.apache.commons.text.StringEscapeUtils;\r
-import org.apache.http.client.utils.URIBuilder;\r
+import org.apache.hc.core5.net.URIBuilder;\r
 import org.onap.aai.cl.api.Logger;\r
 import org.onap.aai.cl.eelf.LoggerFactory;\r
 import org.onap.aai.modelloader.config.AaiProperties;\r
index 23dde63..4cb8391 100644 (file)
@@ -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=*
 
index 22d9038..00e57bc 100644 (file)
@@ -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
          assertNull(statusMsg.getConsumerID());
          assertEquals(DistributionStatusEnum.DEPLOY_OK, statusMsg.getStatus());
      }
-}
\ No newline at end of file
+}
index 93456b7..4e8e3a2 100644 (file)
@@ -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;
index 30008af..48a45c5 100644 (file)
@@ -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<BabelArtifact> 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<BabelArtifact> result =
-                client.postArtifact(babelRequest, "Test-Transaction-ID-BabelClient");
+        List<BabelArtifact> 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()));
     }
index 3bfceb5..e35dcc6 100644 (file)
@@ -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);
+    }
 }
index ac9d7ad..6156554 100644 (file)
@@ -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;
index a91a723..cf4bcdf 100644 (file)
@@ -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