aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/java/org/onap
diff options
context:
space:
mode:
authorFiete Ostkamp <Fiete.Ostkamp@telekom.de>2024-04-11 20:25:29 +0200
committerFiete Ostkamp <Fiete.Ostkamp@telekom.de>2024-04-17 12:09:41 +0200
commitdf2ad94ee9b641a4c2c19969816a6275f6d056e3 (patch)
treea6e54a66e9973ace00c0c88377dd3ef3a24aa747 /src/test/java/org/onap
parente820afb80b830453f667280d94f6e86279ad4f2c (diff)
Add model-loader integration tests1.13.6
- add integration tests that assert the external communication towards other services using Wiremock - remove tests that are asserting getters and setters of objects Issue-ID: AAI-3826 Change-Id: I1f627801869f40cb0eaa61b10148b41bd3b1bdb8 Signed-off-by: Fiete Ostkamp <Fiete.Ostkamp@telekom.de>
Diffstat (limited to 'src/test/java/org/onap')
-rw-r--r--src/test/java/org/onap/aai/modelloader/DistributionClientTestConfiguration.java81
-rw-r--r--src/test/java/org/onap/aai/modelloader/TestModelLoaderApplication.java44
-rw-r--r--src/test/java/org/onap/aai/modelloader/distribution/NotificationIntegrationTest.java14
-rw-r--r--src/test/java/org/onap/aai/modelloader/notification/ArtifactDownloadManagerTest.java107
-rw-r--r--src/test/java/org/onap/aai/modelloader/notification/ModelArtifactHandlerTest.java226
-rw-r--r--src/test/java/org/onap/aai/modelloader/notification/TestNotificationDataImpl.java83
-rw-r--r--src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java90
-rw-r--r--src/test/java/org/onap/aai/modelloader/restclient/TracingTest.java63
-rw-r--r--src/test/java/org/onap/aai/modelloader/service/TestArtifactInfoImpl.java123
9 files changed, 519 insertions, 312 deletions
diff --git a/src/test/java/org/onap/aai/modelloader/DistributionClientTestConfiguration.java b/src/test/java/org/onap/aai/modelloader/DistributionClientTestConfiguration.java
new file mode 100644
index 0000000..1eed62f
--- /dev/null
+++ b/src/test/java/org/onap/aai/modelloader/DistributionClientTestConfiguration.java
@@ -0,0 +1,81 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2024 Deutsche Telekom AG Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.aai.modelloader;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.matching;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Properties;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.event.ApplicationStartedEvent;
+import org.springframework.boot.test.context.TestConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Primary;
+import org.springframework.context.event.EventListener;
+
+@TestConfiguration
+public class DistributionClientTestConfiguration {
+
+ @Value("${CONFIG_HOME}")
+ private String configDir;
+
+ @Value("${wiremock.server.port}")
+ private int wiremockPort;
+
+ @Primary
+ @Bean(name = "testProperties")
+ public Properties configProperties() throws IOException {
+ // Load model loader system configuration
+ InputStream configInputStream = Files.newInputStream(Paths.get(configDir, "model-loader.properties"));
+ Properties configProperties = new Properties();
+ configProperties.load(configInputStream);
+
+ setOverrides(configProperties);
+
+ return configProperties;
+ }
+
+ private void setOverrides(Properties configProperties) {
+ configProperties.setProperty("ml.distribution.ASDC_ADDRESS", "localhost:" + wiremockPort);
+ configProperties.setProperty("ml.babel.BASE_URL", "http://localhost:" + wiremockPort);
+ }
+
+ @EventListener(ApplicationStartedEvent.class)
+ public void mockSdcInit() {
+ stubFor(get(urlEqualTo("/sdc/v1/artifactTypes"))
+ .withHeader("X-ECOMP-RequestID", matching(".+"))
+ .withHeader("X-ECOMP-InstanceID", equalTo("aai-ml-id-test"))
+ .willReturn(aResponse().withHeader("Content-Type", "application/json").withBodyFile("artifactTypes.json")));
+
+ stubFor(get(urlEqualTo("/sdc/v1/distributionKafkaData"))
+ .withHeader("X-ECOMP-RequestID", matching(".+"))
+ .withHeader("X-ECOMP-InstanceID", equalTo("aai-ml-id-test"))
+ .willReturn(aResponse().withHeader("Content-Type", "application/json").withBodyFile("kafkaBootstrap.json")));
+ }
+} \ No newline at end of file
diff --git a/src/test/java/org/onap/aai/modelloader/TestModelLoaderApplication.java b/src/test/java/org/onap/aai/modelloader/TestModelLoaderApplication.java
deleted file mode 100644
index cd39066..0000000
--- a/src/test/java/org/onap/aai/modelloader/TestModelLoaderApplication.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * Copyright © 2017-2018 European Software Marketing Ltd.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-package org.onap.aai.modelloader;
-
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import org.junit.jupiter.api.Test;
-
-/**
- * Tests for ModelLoaderApplication class.
- *
- */
-public class TestModelLoaderApplication {
-
- static {
- System.setProperty("CONFIG_HOME", "src/test/resources");
- }
-
- @Test
- public void testServiceStarts() {
- // The SDC Distribution Client is disabled.
- ModelLoaderApplication.main(new String[0]);
- assertTrue(true);
- }
-
-}
diff --git a/src/test/java/org/onap/aai/modelloader/distribution/NotificationIntegrationTest.java b/src/test/java/org/onap/aai/modelloader/distribution/NotificationIntegrationTest.java
index 2645871..abdefd4 100644
--- a/src/test/java/org/onap/aai/modelloader/distribution/NotificationIntegrationTest.java
+++ b/src/test/java/org/onap/aai/modelloader/distribution/NotificationIntegrationTest.java
@@ -26,6 +26,7 @@ import java.util.concurrent.TimeUnit;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import org.onap.aai.modelloader.notification.NotificationDataImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
@@ -35,25 +36,26 @@ import org.springframework.test.annotation.DirtiesContext;
@DirtiesContext
@SpringBootTest(properties = { "model-loader.sdc.connection.enabled=true"})
-@EmbeddedKafka(partitions = 1, brokerProperties = { "listeners=PLAINTEXT://localhost:9092", "port=9092" })
+@EmbeddedKafka(partitions = 1, ports = 9092, topics = {"${topics.distribution.notification}"})
public class NotificationIntegrationTest {
@Autowired EventCallbackAspect eventCallbackAspect;
@Autowired
- private KafkaTemplate<String, String> kafkaTemplate;
+ private KafkaTemplate<String, NotificationDataImpl> kafkaTemplate;
- @Value("${test.topic}")
+ @Value("${topics.distribution.notification}")
private String topic;
@Test
@Disabled("This test is not yet implemented")
public void thatActivateCallbackIsCalled()
throws Exception {
- String data = "Smth";
-
+ NotificationDataImpl notificationData = new NotificationDataImpl();
+ notificationData.setDistributionID("distributionID");
+
// TODO: send distribution event here
- kafkaTemplate.send(topic, data);
+ kafkaTemplate.send(topic, notificationData);
// TODO: mock distribution client requests to /sdc/v1/artifactTypes
// TODO: mock distribution client requests to /sdc/v1/distributionKafkaData
diff --git a/src/test/java/org/onap/aai/modelloader/notification/ArtifactDownloadManagerTest.java b/src/test/java/org/onap/aai/modelloader/notification/ArtifactDownloadManagerTest.java
new file mode 100644
index 0000000..0985790
--- /dev/null
+++ b/src/test/java/org/onap/aai/modelloader/notification/ArtifactDownloadManagerTest.java
@@ -0,0 +1,107 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2024 Deutsche Telekom AG Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.aai.modelloader.notification;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.matching;
+import static com.github.tomakehurst.wiremock.client.WireMock.matchingJsonPath;
+import static com.github.tomakehurst.wiremock.client.WireMock.post;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.http.entity.ContentType;
+import org.junit.jupiter.api.Test;
+import org.onap.aai.modelloader.DistributionClientTestConfiguration;
+import org.onap.aai.modelloader.entity.Artifact;
+import org.onap.aai.modelloader.entity.ArtifactType;
+import org.onap.aai.modelloader.service.ArtifactInfoImpl;
+import org.onap.sdc.api.notification.IArtifactInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
+import org.springframework.context.annotation.Import;
+import org.springframework.http.MediaType;
+import org.springframework.kafka.test.context.EmbeddedKafka;
+import org.springframework.test.annotation.DirtiesContext;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+@DirtiesContext
+@AutoConfigureWireMock(port = 0)
+@EmbeddedKafka(partitions = 1, ports = 9092, topics = {"${topics.distribution.notification}"})
+@SpringBootTest(properties = { "ml.distribution.connection.enabled=true" })
+@Import(DistributionClientTestConfiguration.class)
+public class ArtifactDownloadManagerTest {
+
+ @Autowired ArtifactDownloadManager artifactDownloadManager;
+
+ @Test
+ public void downloadArtifacts() throws JsonProcessingException {
+ NotificationDataImpl notificationData = new NotificationDataImpl();
+ notificationData.setDistributionID("distributionID");
+ notificationData.setServiceVersion("2.0");
+
+ stubFor(get(urlEqualTo("/sdc/v1/catalog/services/DemovlbCds/1.0/artifacts/service-TestSvc-csar.csar"))
+ .withHeader("Accept", equalTo(ContentType.APPLICATION_OCTET_STREAM.toString()))
+ .withHeader("X-ECOMP-RequestID", matching(".+"))
+ .withHeader("X-ECOMP-InstanceID", equalTo("aai-ml-id-test"))
+ .willReturn(aResponse()
+ .withHeader("Content-Type", MediaType.APPLICATION_OCTET_STREAM.toString())
+ .withBodyFile("service-TestSvc-csar.csar")));
+
+ stubFor(
+ post(urlEqualTo("/services/babel-service/v1/app/generateArtifacts"))
+ .withHeader("X-TransactionId", equalTo("distributionID"))
+ .withHeader("X-FromAppId", equalTo("ModelLoader"))
+ .withHeader("Content-Type", equalTo(MediaType.APPLICATION_JSON_VALUE))
+ .withRequestBody(matchingJsonPath("$.artifactName", equalTo("service-TestSvc-csar.csar")))
+ .withRequestBody(matchingJsonPath("$.artifactVersion", equalTo("2.0")))
+ .withRequestBody(matchingJsonPath("$.csar", matching(".*")))
+ .willReturn(
+ aResponse()
+ .withHeader("Content-Type", "application/json")
+ .withBodyFile("service-TestSvc-csar-babel-response.json")));
+
+ ArtifactInfoImpl artifactInfo = new ArtifactInfoImpl();
+ artifactInfo.setArtifactName("service-TestSvc-csar.csar");
+ artifactInfo.setArtifactVersion("1.0");
+ artifactInfo.setArtifactURL("/sdc/v1/catalog/services/DemovlbCds/1.0/artifacts/service-TestSvc-csar.csar");
+ artifactInfo.setArtifactType("TOSCA_CSAR");
+ artifactInfo.setArtifactChecksum("ZmI5NzQ1MWViZGFkMjRjZWEwNTQzY2U0OWQwYjlmYjQ=");
+ artifactInfo.setArtifactUUID("f6f907f1-3f45-4fb4-8cbe-15a4c6ee16db");
+ List<IArtifactInfo> artifacts = new ArrayList<>();
+ artifacts.add(artifactInfo);
+ List<Artifact> modelArtifacts = new ArrayList<>(); // processed artifacts will be written to this list
+ List<Artifact> catalogArtifacts = new ArrayList<>(); // processed artifacts will be written to this list
+ boolean result = artifactDownloadManager.downloadArtifacts(notificationData, artifacts, modelArtifacts, catalogArtifacts);
+
+ assertEquals(1, modelArtifacts.size());
+ assertEquals(ArtifactType.MODEL, modelArtifacts.get(0).getType());
+ assertTrue(result);
+ }
+
+}
diff --git a/src/test/java/org/onap/aai/modelloader/notification/ModelArtifactHandlerTest.java b/src/test/java/org/onap/aai/modelloader/notification/ModelArtifactHandlerTest.java
new file mode 100644
index 0000000..b1269ee
--- /dev/null
+++ b/src/test/java/org/onap/aai/modelloader/notification/ModelArtifactHandlerTest.java
@@ -0,0 +1,226 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2024 Deutsche Telekom AG Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.aai.modelloader.notification;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.verify;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.deleteRequestedFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
+import static com.github.tomakehurst.wiremock.client.WireMock.ok;
+
+import java.util.List;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.onap.aai.modelloader.config.ModelLoaderConfig;
+import org.onap.aai.modelloader.entity.Artifact;
+import org.onap.aai.modelloader.entity.model.ModelArtifact;
+import org.onap.aai.modelloader.entity.model.ModelArtifactHandler;
+import org.onap.aai.modelloader.restclient.AaiRestClient;
+import org.onap.aai.restclient.client.OperationResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.client.RestTemplate;
+import org.w3c.dom.Node;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.tomakehurst.wiremock.client.WireMock;
+
+import java.util.ArrayList;
+
+@SpringBootTest
+@AutoConfigureWireMock(port = 0)
+public class ModelArtifactHandlerTest {
+
+ @Value("${wiremock.server.port}")
+ private int wiremockPort;
+
+ final ObjectMapper objectMapper = new ObjectMapper();
+ @Mock
+ ModelLoaderConfig config;
+ @InjectMocks
+ ModelArtifactHandler modelArtifactHandler;
+
+ @Autowired
+ AaiRestClient restClient;
+
+ @BeforeEach
+ public void setUp() {
+ when(config.getAaiBaseUrl()).thenReturn("http://localhost:" + wiremockPort);
+ when(config.getAaiModelUrl(any())).thenReturn("/aai/v28/service-design-and-creation/models/model/");
+ }
+
+ @Test
+ public void thatArtifactsCanBeCreated() {
+ WireMock.stubFor(
+ WireMock.get(urlEqualTo("/aai/v28/service-design-and-creation/models/model/modelInvariantId"))
+ .withHeader("Accept", equalTo("application/xml"))
+ .withHeader("X-TransactionId", equalTo("someId"))
+ .withHeader("X-FromAppId", equalTo("ModelLoader"))
+ .willReturn(
+ WireMock.aResponse()
+ .withStatus(HttpStatus.NOT_FOUND.value())));
+
+ WireMock.stubFor(
+ WireMock.put(urlEqualTo("/aai/v28/service-design-and-creation/models/model/modelInvariantId"))
+ .withHeader("Content-Type", equalTo("application/xml"))
+ .withHeader("X-TransactionId", equalTo("someId"))
+ .withHeader("X-FromAppId", equalTo("ModelLoader"))
+ .willReturn(
+ WireMock.aResponse()
+ .withStatus(HttpStatus.CREATED.value())));
+
+ ModelArtifact modelArtifact = new ModelArtifact();
+ modelArtifact.setModelInvariantId("modelInvariantId");
+ List<Artifact> artifacts = List.of(modelArtifact);
+ List<Artifact> completedArtifacts = new ArrayList<>();
+
+ boolean result = modelArtifactHandler.pushArtifacts(artifacts,
+ "someId", completedArtifacts, restClient);
+ assertTrue(result);
+ WireMock.verify(
+ WireMock.putRequestedFor(urlEqualTo("/aai/v28/service-design-and-creation/models/model/modelInvariantId")));
+ }
+
+ @Test
+ public void thatArtifactsCanBeUpdated() {
+ // Checks if model exists in resources service
+ WireMock.stubFor(
+ WireMock.get(urlEqualTo("/aai/v28/service-design-and-creation/models/model/modelInvariantId"))
+ .withHeader("Accept", equalTo("application/xml"))
+ .withHeader("X-TransactionId", equalTo("distributionId"))
+ .withHeader("X-FromAppId", equalTo("ModelLoader"))
+ .willReturn(
+ WireMock.aResponse()
+ .withStatus(HttpStatus.OK.value())));
+
+ // Checks if specific version of model exists in aai-resources
+ WireMock.stubFor(
+ WireMock.get(urlEqualTo(
+ "/aai/v28/service-design-and-creation/models/model/modelInvariantId/model-vers/model-ver/modelVersionId"))
+ .withHeader("Accept", equalTo("application/xml"))
+ .withHeader("X-TransactionId", equalTo("distributionId"))
+ .withHeader("X-FromAppId", equalTo("ModelLoader"))
+ .willReturn(
+ WireMock.aResponse()
+ .withStatus(HttpStatus.NOT_FOUND.value())));
+
+ WireMock.stubFor(
+ WireMock.put(urlEqualTo(
+ "/aai/v28/service-design-and-creation/models/model/modelInvariantId/model-vers/model-ver/modelVersionId"))
+ .withHeader("Content-Type", equalTo("application/xml"))
+ .withHeader("X-TransactionId", equalTo("distributionId"))
+ .withHeader("X-FromAppId", equalTo("ModelLoader"))
+ .willReturn(
+ WireMock.aResponse()
+ .withStatus(HttpStatus.CREATED.value())));
+
+ ModelArtifact modelArtifact = new ModelArtifact();
+ modelArtifact.setModelInvariantId("modelInvariantId");
+ modelArtifact.setModelVerId("modelVersionId");
+ Node node = Mockito.mock(Node.class);
+ modelArtifact.setModelVer(node);
+ List<Artifact> artifacts = List.of(modelArtifact);
+ List<Artifact> completedArtifacts = new ArrayList<>();
+
+ boolean result = modelArtifactHandler.pushArtifacts(artifacts,
+ "distributionId", completedArtifacts, restClient);
+ verify(WireMock.putRequestedFor(urlEqualTo(
+ "/aai/v28/service-design-and-creation/models/model/modelInvariantId/model-vers/model-ver/modelVersionId")));
+ assertTrue(result);
+ }
+
+ @Test
+ public void thatModelCanBeRolledBack() {
+ stubFor(WireMock.get(urlEqualTo("/aai/v28/service-design-and-creation/models/model/3a40ab73-6694-4e75-bb6d-9a4a86ce35b3"))
+ .withHeader("X-FromAppId", equalTo("ModelLoader"))
+ .withHeader("X-TransactionId", equalTo("distributionId"))
+ .willReturn(aResponse()
+ .withBodyFile("modelResponse.xml")));
+
+ stubFor(WireMock.delete(urlEqualTo("/aai/v28/service-design-and-creation/models/model/3a40ab73-6694-4e75-bb6d-9a4a86ce35b3?resource-version=1710523260974"))
+ .withHeader("X-FromAppId", equalTo("ModelLoader"))
+ .withHeader("X-TransactionId", equalTo("distributionId"))
+ .willReturn(aResponse().withStatus(HttpStatus.OK.value())));
+
+ ModelArtifact modelArtifact = new ModelArtifact();
+ modelArtifact.setModelInvariantId("3a40ab73-6694-4e75-bb6d-9a4a86ce35b3");
+ modelArtifact.setModelVerId("modelVersionId");
+ Node node = Mockito.mock(Node.class);
+ modelArtifact.setModelVer(node);
+ List<Artifact> completedArtifacts = new ArrayList<>();
+ completedArtifacts.add(modelArtifact);
+
+ mockModelCreation(modelArtifact);
+
+ modelArtifactHandler.rollback(completedArtifacts, "distributionId", restClient);
+
+ verify(
+ deleteRequestedFor(
+ urlEqualTo("/aai/v28/service-design-and-creation/models/model/3a40ab73-6694-4e75-bb6d-9a4a86ce35b3?resource-version=1710523260974")));
+ }
+
+ /**
+ * To test the rollback of the full model, the ModelArtifact must have the
+ * firstVersionOfModel = true state.
+ * This flag is set during the model creation and thus needs to run before
+ * testing this particular aspect.
+ *
+ * @param modelArtifact
+ */
+ private void mockModelCreation(ModelArtifact modelArtifact) {
+ OperationResult createdResult = Mockito.mock(OperationResult.class);
+ when(createdResult.getResultCode()).thenReturn(HttpStatus.CREATED.value());
+ OperationResult notFoundResult = Mockito.mock(OperationResult.class);
+ when(notFoundResult.getResultCode()).thenReturn(HttpStatus.NOT_FOUND.value());
+ AaiRestClient aaiClient = Mockito.mock(AaiRestClient.class);
+ when(aaiClient.putResource(any(), any(), any(), any())).thenReturn(createdResult);
+ when(aaiClient.getResource(any(), any(), any())).thenReturn(notFoundResult);
+ modelArtifact.push(aaiClient, config, null, new ArrayList<>());
+ }
+
+ @Test
+ public void thatModelVersionCanBeRolledBack() {
+
+ // "http://localhost:10594/aai/v28/service-design-and-creation/models/model/modelInvariantId/model-vers/model-ver/modelVersionId"
+
+ ModelArtifact modelArtifact = new ModelArtifact();
+ modelArtifact.setModelInvariantId("modelInvariantId");
+ modelArtifact.setModelVerId("modelVersionId");
+ Node node = Mockito.mock(Node.class);
+ modelArtifact.setModelVer(node);
+ List<Artifact> completedArtifacts = new ArrayList<>();
+ completedArtifacts.add(modelArtifact);
+
+ modelArtifactHandler.rollback(completedArtifacts, "distributionId", restClient);
+
+ }
+} \ No newline at end of file
diff --git a/src/test/java/org/onap/aai/modelloader/notification/TestNotificationDataImpl.java b/src/test/java/org/onap/aai/modelloader/notification/TestNotificationDataImpl.java
deleted file mode 100644
index 4d6858a..0000000
--- a/src/test/java/org/onap/aai/modelloader/notification/TestNotificationDataImpl.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * Copyright © 2017-2018 European Software Marketing Ltd.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-package org.onap.aai.modelloader.notification;
-
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.MatcherAssert.assertThat;
-
-import org.junit.jupiter.api.Test;
-
-/**
- * Tests for NotificationDataImpl class
- *
- */
-public class TestNotificationDataImpl {
-
- @Test
- public void testGettersAndSetters() {
- NotificationDataImpl data = new NotificationDataImpl();
- String distributionId = "testid";
-
- data.setDistributionID(distributionId);
- assertThat(data.getDistributionID(), is(equalTo(distributionId)));
-
- // Getters return empty data
- assertThat(data.getArtifactMetadataByUUID(null), is(equalTo(null)));
- assertThat(data.getServiceDescription(), is(equalTo(null)));
- assertThat(data.getServiceInvariantUUID(), is(equalTo(null)));
- assertThat(data.getServiceName(), is(equalTo(null)));
- assertThat(data.getServiceUUID(), is(equalTo(null)));
- assertThat(data.getServiceVersion(), is(equalTo(null)));
- assertThat(data.getResources().size(), is(0));
- assertThat(data.getServiceArtifacts().size(), is(0));
-
- // Unsupported method!
- String context = "testcontext";
- data.setWorkloadContext(context);
- assertThat(data.getWorkloadContext(), is(equalTo(null)));
- }
-
-
- @Test
- public void testEquality() {
- NotificationDataImpl data = new NotificationDataImpl();
- assertThat(data, is(not(equalTo(null))));
- assertThat(data, is(not(equalTo("")))); // NOSONAR
- assertThat(data, is(equalTo(data)));
-
- NotificationDataImpl other = new NotificationDataImpl();
- assertThat(data, is(equalTo(other)));
- assertThat(data.hashCode(), is(equalTo(other.hashCode())));
-
- other.setDistributionID("");
- assertThat(data, is(not(equalTo(other))));
-
- data.setDistributionID("1234");
- assertThat(data, is(not(equalTo(other))));
-
- other.setDistributionID("1234");
- assertThat(data, is(equalTo(other)));
- assertThat(data.hashCode(), is(equalTo(other.hashCode())));
- }
-
-}
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 77e1594..169943c 100644
--- a/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java
+++ b/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java
@@ -20,68 +20,65 @@
*/
package org.onap.aai.modelloader.restclient;
-import static javax.servlet.http.HttpServletResponse.SC_OK;
-import static org.apache.commons.io.IOUtils.write;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import java.io.IOException;
import java.net.URISyntaxException;
-import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
-import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.eclipse.jetty.server.Handler;
-import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.handler.AbstractHandler;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.onap.aai.babel.service.data.BabelArtifact;
import org.onap.aai.modelloader.config.ModelLoaderConfig;
import org.onap.aai.modelloader.service.HttpsBabelServiceClientFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
-import com.google.gson.Gson;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.tomakehurst.wiremock.client.WireMock;
+import com.github.tomakehurst.wiremock.matching.EqualToPattern;
/**
* Local testing of the Babel service client.
*
*/
+@SpringBootTest
+@AutoConfigureWireMock(port = 0)
public class TestBabelServiceClient {
- private Server server;
- private String responseBody;
-
- @BeforeEach
- public void startJetty() throws Exception {
- List<BabelArtifact> response = new ArrayList<>();
- response.add(new BabelArtifact("", null, ""));
- response.add(new BabelArtifact("", null, ""));
- response.add(new BabelArtifact("", null, ""));
- responseBody = new Gson().toJson(response);
-
- server = new Server(0);
- server.setHandler(getMockHandler());
- server.start();
- }
+ @Value("${wiremock.server.port}")
+ private int wiremockPort;
- @AfterEach
- public void stopJetty() throws Exception {
- server.stop();
+ @BeforeAll
+ public static 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, ""));
+ WireMock.stubFor(
+ WireMock.post(WireMock.urlEqualTo("/generate"))
+ .withHeader("X-TransactionId", WireMock.equalTo("Test-Transaction-ID-BabelClient"))
+ .withHeader("X-FromAppId", WireMock.equalTo("ModelLoader"))
+ .withRequestBody(WireMock.matchingJsonPath("$.artifactName", WireMock.equalTo("service-Vscpass-Test")))
+ .withRequestBody(WireMock.matchingJsonPath("$.artifactVersion", WireMock.equalTo("1.0")))
+ .withRequestBody(WireMock.matchingJsonPath("$.csar", WireMock.matching(".*")))
+ .willReturn(
+ WireMock.aResponse()
+ .withHeader("Content-Type", "application/json")
+ .withBody(objectMapper.writeValueAsString(artifacts))));
}
@Test
public void testRestClient() throws BabelServiceClientException, IOException, URISyntaxException {
- String url = server.getURI().toString();
+ String url = "http://localhost:" + wiremockPort;
Properties configProperties = new Properties();
configProperties.put("ml.babel.KEYSTORE_PASSWORD", "OBF:1vn21ugu1saj1v9i1v941sar1ugw1vo0");
configProperties.put("ml.babel.KEYSTORE_FILE", "src/test/resources/auth/aai-client-dummy.p12");
@@ -89,7 +86,7 @@ public class TestBabelServiceClient {
// In a real deployment this would be a different file (to the client keystore)
configProperties.put("ml.babel.TRUSTSTORE_FILE", "src/test/resources/auth/aai-client-dummy.p12");
configProperties.put("ml.babel.BASE_URL", url);
- configProperties.put("ml.babel.GENERATE_ARTIFACTS_URL", "generate");
+ configProperties.put("ml.babel.GENERATE_ARTIFACTS_URL", "/generate");
configProperties.put("ml.aai.RESTCLIENT_CONNECT_TIMEOUT", "12000");
configProperties.put("ml.aai.RESTCLIENT_READ_TIMEOUT", "12000");
BabelServiceClient client =
@@ -102,11 +99,11 @@ public class TestBabelServiceClient {
@Test
public void testRestClientHttp() throws BabelServiceClientException, IOException, URISyntaxException {
- String url = server.getURI().toString();
+ String url = "http://localhost:" + wiremockPort;
Properties configProperties = new Properties();
configProperties.put("ml.babel.USE_HTTPS", "false");
configProperties.put("ml.babel.BASE_URL", url);
- configProperties.put("ml.babel.GENERATE_ARTIFACTS_URL", "generate");
+ configProperties.put("ml.babel.GENERATE_ARTIFACTS_URL", "/generate");
configProperties.put("ml.aai.RESTCLIENT_CONNECT_TIMEOUT", "3000");
configProperties.put("ml.aai.RESTCLIENT_READ_TIMEOUT", "3000");
BabelServiceClient client =
@@ -121,23 +118,4 @@ public class TestBabelServiceClient {
private byte[] readBytesFromFile(String resourceFile) throws IOException, URISyntaxException {
return Files.readAllBytes(Paths.get(ClassLoader.getSystemResource(resourceFile).toURI()));
}
-
- /**
- * Creates an {@link AbstractHandler handler} returning an arbitrary String as a response.
- *
- * @return never <code>null</code>.
- */
- private Handler getMockHandler() {
- Handler handler = new AbstractHandler() {
- @Override
- public void handle(String target, Request request, HttpServletRequest servletRequest,
- HttpServletResponse response) throws IOException, ServletException {
- response.setStatus(SC_OK);
- response.setContentType("text/xml;charset=utf-8");
- write(responseBody, response.getOutputStream(), Charset.defaultCharset());
- request.setHandled(true);
- }
- };
- return handler;
- }
}
diff --git a/src/test/java/org/onap/aai/modelloader/restclient/TracingTest.java b/src/test/java/org/onap/aai/modelloader/restclient/TracingTest.java
new file mode 100644
index 0000000..3bfceb5
--- /dev/null
+++ b/src/test/java/org/onap/aai/modelloader/restclient/TracingTest.java
@@ -0,0 +1,63 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2024 Deutsche Telekom AG Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.aai.modelloader.restclient;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
+import org.springframework.http.HttpStatus;
+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}"
+})
+@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);
+ }
+
+}
diff --git a/src/test/java/org/onap/aai/modelloader/service/TestArtifactInfoImpl.java b/src/test/java/org/onap/aai/modelloader/service/TestArtifactInfoImpl.java
deleted file mode 100644
index d1d46f0..0000000
--- a/src/test/java/org/onap/aai/modelloader/service/TestArtifactInfoImpl.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * Copyright © 2017-2018 European Software Marketing Ltd.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-package org.onap.aai.modelloader.service;
-
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.empty;
-
-import org.junit.jupiter.api.Test;
-
-/**
- * Tests for NotificationDataImpl class
- *
- */
-public class TestArtifactInfoImpl {
-
- @Test
- public void testGettersAndSetters() {
- ArtifactInfoImpl info = new ArtifactInfoImpl();
- String artifactName = "testname";
-
- info.setArtifactName(artifactName);
- assertThat(info.getArtifactName(), is(equalTo(artifactName)));
-
- String artifactType = "test-type";
- info.setArtifactType(artifactType);
- assertThat(info.getArtifactType(), is(equalTo(artifactType)));
-
- String artifactVersion = "v1";
- info.setArtifactVersion(artifactVersion);
- assertThat(info.getArtifactVersion(), is(equalTo(artifactVersion)));
-
- String artifactDescription = "test description";
- info.setArtifactDescription(artifactDescription);
- assertThat(info.getArtifactDescription(), is(equalTo(artifactDescription)));
-
- assertThat(info.getArtifactChecksum(), is(nullValue()));
- assertThat(info.getArtifactTimeout(), is(nullValue()));
- assertThat(info.getArtifactURL(), is(nullValue()));
- assertThat(info.getArtifactUUID(), is(nullValue()));
- assertThat(info.getGeneratedArtifact(), is(nullValue()));
- assertThat(info.getRelatedArtifacts(), is(empty()));
- }
-
-
- @Test
- public void testEquality() {
- ArtifactInfoImpl info = new ArtifactInfoImpl();
- assertThat(info, is(not(equalTo(null))));
- assertThat(info, is(not(equalTo("")))); // NOSONAR
- assertThat(info, is(equalTo(info)));
-
- ArtifactInfoImpl other = new ArtifactInfoImpl();
- assertThat(info, is(equalTo(other)));
- assertThat(info.hashCode(), is(equalTo(other.hashCode())));
-
- // Artifact Name
- other.setArtifactName("");
- assertThat(info, is(not(equalTo(other))));
-
- info.setArtifactName("1234");
- assertThat(info, is(not(equalTo(other))));
-
- other.setArtifactName("1234");
- assertThat(info, is(equalTo(other)));
- assertThat(info.hashCode(), is(equalTo(other.hashCode())));
-
- // Artifact Type
- other.setArtifactType("");
- assertThat(info, is(not(equalTo(other))));
-
- info.setArtifactType("type");
- assertThat(info, is(not(equalTo(other))));
-
- other.setArtifactType("type");
- assertThat(info, is(equalTo(other)));
- assertThat(info.hashCode(), is(equalTo(other.hashCode())));
-
- // Artifact Description
- other.setArtifactDescription("");
- assertThat(info, is(not(equalTo(other))));
-
- info.setArtifactDescription("type");
- assertThat(info, is(not(equalTo(other))));
-
- other.setArtifactDescription("type");
- assertThat(info, is(equalTo(other)));
- assertThat(info.hashCode(), is(equalTo(other.hashCode())));
-
- // Artifact Version
- other.setArtifactVersion("");
- assertThat(info, is(not(equalTo(other))));
-
- info.setArtifactVersion("v1");
- assertThat(info, is(not(equalTo(other))));
-
- other.setArtifactVersion("v1");
- assertThat(info, is(equalTo(other)));
- assertThat(info.hashCode(), is(equalTo(other.hashCode())));
- }
-
-}