Remove old subscription code and other fixes 84/137484/7
authormpriyank <priyank.maheshwari@est.tech>
Wed, 6 Mar 2024 12:52:47 +0000 (12:52 +0000)
committerPriyank Maheshwari <priyank.maheshwari@est.tech>
Wed, 6 Mar 2024 15:25:00 +0000 (15:25 +0000)
- removed old subscription related dummy code.
- updated cps version to 3.4.6 to use the latest released version
- added six dependency for the RTD fix
- Removing the CloudEventMapper for now. Can be brought back when
  somebody uses it
- added missing test for InvalidDatastoreException which was failing on
  coverage check locally

Issue-ID: CPS-2149
Change-Id: I60e9036398fea82bb0162ab5524a1cc45dedb611
Signed-off-by: mpriyank <priyank.maheshwari@est.tech>
pom.xml
src/main/java/org/onap/cps/ncmp/dmi/exception/CloudEventConstructionException.java [deleted file]
src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/CmSubscriptionDmiInEventConsumer.java [deleted file]
src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/CmSubscriptionDmiOutEventToCloudEventMapper.java [deleted file]
src/main/java/org/onap/cps/ncmp/dmi/notifications/mapper/CloudEventMapper.java [deleted file]
src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/CmSubscriptionDmiInEventConsumerSpec.groovy [deleted file]
src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/CmSubscriptionDmiOutEventToCloudEventMapperSpec.groovy [deleted file]
src/test/groovy/org/onap/cps/ncmp/dmi/notifications/mapper/CloudEventMapperSpec.groovy [deleted file]
src/test/groovy/org/onap/cps/ncmp/dmi/rest/controller/DmiRestControllerSpec.groovy

diff --git a/pom.xml b/pom.xml
index 736fe79..1a21805 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -40,7 +40,7 @@
     <properties>
         <app>org.onap.cps.ncmp.dmi.Application</app>
         <base.image>${docker.pull.registry}/onap/integration-java17:12.0.0</base.image>
-        <cps.version>3.3.9</cps.version>
+        <cps.version>3.4.6</cps.version>
         <image.tag>${project.version}-${maven.build.timestamp}</image.tag>
         <jacoco.minimum.coverage>0.98</jacoco.minimum.coverage>
         <maven.build.timestamp.format>yyyyMMdd'T'HHmmss'Z'</maven.build.timestamp.format>
diff --git a/src/main/java/org/onap/cps/ncmp/dmi/exception/CloudEventConstructionException.java b/src/main/java/org/onap/cps/ncmp/dmi/exception/CloudEventConstructionException.java
deleted file mode 100644 (file)
index 0069aab..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2023 Nordix Foundation
- *  ================================================================================
- *  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.
- *
- *  SPDX-License-Identifier: Apache-2.0
- *  ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.ncmp.dmi.exception;
-
-public class CloudEventConstructionException extends DmiException {
-
-    private static final long serialVersionUID = 7747941311132087621L;
-
-    /**
-     * Constructor.
-     *
-     * @param message the error message
-     * @param details the error details
-     * @param cause   the error cause
-     */
-    public CloudEventConstructionException(final String message, final String details, final Throwable cause) {
-        super(message, details, cause);
-    }
-}
diff --git a/src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/CmSubscriptionDmiInEventConsumer.java b/src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/CmSubscriptionDmiInEventConsumer.java
deleted file mode 100644 (file)
index 5765280..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2023 Nordix Foundation
- *  ================================================================================
- *  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.
- *
- *  SPDX-License-Identifier: Apache-2.0
- *  ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.ncmp.dmi.notifications.cmsubscription;
-
-import io.cloudevents.CloudEvent;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import lombok.RequiredArgsConstructor;
-import org.apache.kafka.clients.consumer.ConsumerRecord;
-import org.onap.cps.ncmp.dmi.notifications.mapper.CloudEventMapper;
-import org.onap.cps.ncmp.events.cmsubscription1_0_0.dmi_to_ncmp.CmSubscriptionDmiOutEvent;
-import org.onap.cps.ncmp.events.cmsubscription1_0_0.dmi_to_ncmp.Data;
-import org.onap.cps.ncmp.events.cmsubscription1_0_0.dmi_to_ncmp.SubscriptionStatus;
-import org.onap.cps.ncmp.events.cmsubscription1_0_0.ncmp_to_dmi.CmHandle;
-import org.onap.cps.ncmp.events.cmsubscription1_0_0.ncmp_to_dmi.CmSubscriptionDmiInEvent;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.kafka.annotation.KafkaListener;
-import org.springframework.kafka.core.KafkaTemplate;
-import org.springframework.stereotype.Service;
-
-@Service
-@RequiredArgsConstructor
-public class CmSubscriptionDmiInEventConsumer {
-
-    @Value("${app.dmi.avc.subscription-response-topic}")
-    private String cmAvcSubscriptionResponseTopic;
-    @Value("${dmi.service.name}")
-    private String dmiName;
-    private final KafkaTemplate<String, CloudEvent> cloudEventKafkaTemplate;
-
-    /**
-     * Consume the specified event.
-     *
-     * @param cmSubscriptionDmiInCloudEvent the event to be consumed
-     */
-    @KafkaListener(topics = "${app.dmi.avc.subscription-topic}",
-            containerFactory = "cloudEventConcurrentKafkaListenerContainerFactory")
-    public void consumeCmSubscriptionDmiInEvent(
-            final ConsumerRecord<String, CloudEvent> cmSubscriptionDmiInCloudEvent) {
-        final CmSubscriptionDmiInEvent cmSubscriptionDmiInEvent =
-                CloudEventMapper.toTargetEvent(cmSubscriptionDmiInCloudEvent.value(), CmSubscriptionDmiInEvent.class);
-        if (cmSubscriptionDmiInEvent != null) {
-            final String eventKey = cmSubscriptionDmiInCloudEvent.value().getId();
-            final String subscriptionType = cmSubscriptionDmiInCloudEvent.value().getType();
-            if ("subscriptionCreated".equals(subscriptionType)) {
-                sendCmSubscriptionDmiOutEvent(eventKey, "subscriptionCreatedStatus",
-                        formCmSubscriptionDmiOutEvent(cmSubscriptionDmiInEvent));
-            } else if ("subscriptionDeleted".equals(subscriptionType)) {
-                sendCmSubscriptionDmiOutEvent(eventKey, "subscriptionDeletedStatus",
-                        formCmSubscriptionDmiOutEvent(cmSubscriptionDmiInEvent));
-            }
-        }
-    }
-
-    /**
-     * Sends message to the configured topic.
-     *
-     * @param eventKey                  is the kafka message key
-     * @param subscriptionType          is the type of subscription action
-     * @param cmSubscriptionDmiOutEvent is the payload of the kafka message
-     */
-    public void sendCmSubscriptionDmiOutEvent(final String eventKey, final String subscriptionType,
-            final CmSubscriptionDmiOutEvent cmSubscriptionDmiOutEvent) {
-        cloudEventKafkaTemplate.send(cmAvcSubscriptionResponseTopic, eventKey,
-                CmSubscriptionDmiOutEventToCloudEventMapper.toCloudEvent(cmSubscriptionDmiOutEvent, subscriptionType,
-                        dmiName));
-    }
-
-    private CmSubscriptionDmiOutEvent formCmSubscriptionDmiOutEvent(
-            final CmSubscriptionDmiInEvent cmSubscriptionDmiInEvent) {
-        final CmSubscriptionDmiOutEvent cmSubscriptionDmiOutEvent = new CmSubscriptionDmiOutEvent();
-        final Data cmSubscriptionDmiOutEventData = new Data();
-        cmSubscriptionDmiOutEventData.setClientId(cmSubscriptionDmiInEvent.getData().getSubscription().getClientID());
-        cmSubscriptionDmiOutEventData.setSubscriptionName(
-                cmSubscriptionDmiInEvent.getData().getSubscription().getName());
-        cmSubscriptionDmiOutEventData.setDmiName(dmiName);
-
-        final List<CmHandle> cmHandles = cmSubscriptionDmiInEvent.getData().getPredicates().getTargets();
-        cmSubscriptionDmiOutEventData.setSubscriptionStatus(populateSubscriptionStatus(extractCmHandleIds(cmHandles)));
-        cmSubscriptionDmiOutEvent.setData(cmSubscriptionDmiOutEventData);
-        return cmSubscriptionDmiOutEvent;
-    }
-
-    private Set<String> extractCmHandleIds(final List<CmHandle> cmHandles) {
-        final Set<String> cmHandleIds = new HashSet<>();
-
-        for (final CmHandle cmHandle : cmHandles) {
-            cmHandleIds.add(cmHandle.getId());
-        }
-        return cmHandleIds;
-    }
-
-    private List<SubscriptionStatus> populateSubscriptionStatus(final Set<String> cmHandleIds) {
-        final List<SubscriptionStatus> subscriptionStatuses = new ArrayList<>();
-        for (final String cmHandleId : cmHandleIds) {
-            final SubscriptionStatus status = new SubscriptionStatus();
-            status.setId(cmHandleId);
-            status.setStatus(SubscriptionStatus.Status.ACCEPTED);
-            subscriptionStatuses.add(status);
-        }
-        return subscriptionStatuses;
-    }
-
-}
diff --git a/src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/CmSubscriptionDmiOutEventToCloudEventMapper.java b/src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/CmSubscriptionDmiOutEventToCloudEventMapper.java
deleted file mode 100644 (file)
index 00fd1b6..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2023 Nordix Foundation
- *  ================================================================================
- *  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.
- *
- *  SPDX-License-Identifier: Apache-2.0
- *  ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.ncmp.dmi.notifications.cmsubscription;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import io.cloudevents.CloudEvent;
-import io.cloudevents.core.builder.CloudEventBuilder;
-import java.net.URI;
-import java.util.UUID;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.onap.cps.ncmp.dmi.exception.CloudEventConstructionException;
-import org.onap.cps.ncmp.events.cmsubscription1_0_0.dmi_to_ncmp.CmSubscriptionDmiOutEvent;
-
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class CmSubscriptionDmiOutEventToCloudEventMapper {
-
-    private static final ObjectMapper objectMapper = new ObjectMapper();
-
-    /**
-     * Maps SubscriptionEventResponse to a CloudEvent.
-     *
-     * @param cmSubscriptionDmiOutEvent object.
-     * @param subscriptionType          String of subscription type.
-     * @param dmiName                   String of dmiName.
-     * @return CloudEvent built.
-     */
-    public static CloudEvent toCloudEvent(final CmSubscriptionDmiOutEvent cmSubscriptionDmiOutEvent,
-            final String subscriptionType, final String dmiName) {
-        try {
-            return CloudEventBuilder.v1().withId(UUID.randomUUID().toString()).withSource(URI.create(dmiName))
-                    .withType(subscriptionType)
-                    .withDataSchema(URI.create("urn:cps:" + CmSubscriptionDmiOutEvent.class.getName() + ":1.0.0"))
-                    .withExtension("correlationid", cmSubscriptionDmiOutEvent.getData().getClientId() + ":"
-                                                            + cmSubscriptionDmiOutEvent.getData().getSubscriptionName())
-                    .withData(objectMapper.writeValueAsBytes(cmSubscriptionDmiOutEvent)).build();
-        } catch (final Exception ex) {
-            throw new CloudEventConstructionException("The Cloud Event could not be constructed",
-                    "Invalid object to serialize or required headers is missing", ex);
-        }
-    }
-
-
-}
diff --git a/src/main/java/org/onap/cps/ncmp/dmi/notifications/mapper/CloudEventMapper.java b/src/main/java/org/onap/cps/ncmp/dmi/notifications/mapper/CloudEventMapper.java
deleted file mode 100644 (file)
index edf875e..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (c) 2023 Nordix Foundation.
- * ================================================================================
- * 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.ncmp.dmi.notifications.mapper;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import io.cloudevents.CloudEvent;
-import io.cloudevents.core.CloudEventUtils;
-import io.cloudevents.core.data.PojoCloudEventData;
-import io.cloudevents.jackson.PojoCloudEventDataMapper;
-import io.cloudevents.rw.CloudEventRWException;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class CloudEventMapper {
-
-    private static final ObjectMapper objectMapper = new ObjectMapper();
-
-    /**
-     * Generic method to map cloud event data to target event class object.
-     *
-     * @param cloudEvent       input cloud event
-     * @param targetEventClass target event class
-     * @param <T>              target event class type
-     * @return mapped target event
-     */
-    public static <T> T toTargetEvent(final CloudEvent cloudEvent, final Class<T> targetEventClass) {
-        PojoCloudEventData<T> mappedCloudEvent = null;
-
-        try {
-            mappedCloudEvent =
-                    CloudEventUtils.mapData(cloudEvent, PojoCloudEventDataMapper.from(objectMapper, targetEventClass));
-
-        } catch (final CloudEventRWException cloudEventRwException) {
-            log.error("Unable to map cloud event to target event class type : {} with cause : {}", targetEventClass,
-                    cloudEventRwException.getMessage());
-        }
-
-        return mappedCloudEvent == null ? null : mappedCloudEvent.getValue();
-    }
-
-}
diff --git a/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/CmSubscriptionDmiInEventConsumerSpec.groovy b/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/CmSubscriptionDmiInEventConsumerSpec.groovy
deleted file mode 100644 (file)
index bf15f00..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2023 Nordix Foundation
- *  ================================================================================
- *  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.
- *
- *  SPDX-License-Identifier: Apache-2.0
- *  ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.ncmp.dmi.notifications.cmsubscription
-
-import com.fasterxml.jackson.databind.ObjectMapper
-import io.cloudevents.CloudEvent
-import io.cloudevents.core.builder.CloudEventBuilder
-import org.apache.kafka.clients.consumer.ConsumerRecord
-import org.onap.cps.ncmp.dmi.TestUtils
-import org.onap.cps.ncmp.dmi.api.kafka.MessagingBaseSpec
-import org.onap.cps.ncmp.events.cmsubscription1_0_0.dmi_to_ncmp.CmSubscriptionDmiOutEvent
-import org.onap.cps.ncmp.events.cmsubscription1_0_0.dmi_to_ncmp.Data
-import org.onap.cps.ncmp.events.cmsubscription1_0_0.dmi_to_ncmp.SubscriptionStatus
-import org.onap.cps.ncmp.events.cmsubscription1_0_0.ncmp_to_dmi.CmHandle
-import org.onap.cps.ncmp.events.cmsubscription1_0_0.ncmp_to_dmi.CmSubscriptionDmiInEvent
-import org.spockframework.spring.SpringBean
-import org.springframework.boot.test.context.SpringBootTest
-import org.springframework.test.annotation.DirtiesContext
-import org.testcontainers.spock.Testcontainers
-
-import java.sql.Timestamp
-import java.time.Duration
-import java.time.OffsetDateTime
-import java.time.ZoneId
-
-@SpringBootTest(classes = [CmSubscriptionDmiInEventConsumer])
-@Testcontainers
-@DirtiesContext
-class CmSubscriptionDmiInEventConsumerSpec extends MessagingBaseSpec {
-
-    def objectMapper = new ObjectMapper()
-    def testTopic = 'dmi-ncmp-cm-avc-subscription'
-
-    @SpringBean
-    CmSubscriptionDmiInEventConsumer objectUnderTest = new CmSubscriptionDmiInEventConsumer(cloudEventKafkaTemplate)
-
-    def 'Sends subscription cloud event response successfully.'() {
-        given: 'an subscription event response'
-            objectUnderTest.dmiName = 'test-ncmp-dmi'
-            objectUnderTest.cmAvcSubscriptionResponseTopic = testTopic
-            def responseStatus = SubscriptionStatus.Status.ACCEPTED
-            def subscriptionStatuses = [new SubscriptionStatus(id: 'CmHandle1', status: responseStatus),
-                                        new SubscriptionStatus(id: 'CmHandle2', status: responseStatus)]
-            def cmSubscriptionDmiOutEventData = new Data(subscriptionName: 'cm-subscription-001',
-                clientId: 'SCO-9989752', dmiName: 'ncmp-dmi-plugin', subscriptionStatus: subscriptionStatuses)
-            def subscriptionEventResponse =
-                new CmSubscriptionDmiOutEvent().withData(cmSubscriptionDmiOutEventData)
-        and: 'consumer has a subscription'
-            kafkaConsumer.subscribe([testTopic] as List<String>)
-        when: 'an event is published'
-            def eventKey = UUID.randomUUID().toString()
-            objectUnderTest.sendCmSubscriptionDmiOutEvent(eventKey, "subscriptionCreatedStatus", subscriptionEventResponse)
-        and: 'topic is polled'
-            def records = kafkaConsumer.poll(Duration.ofMillis(1500))
-        then: 'poll returns one record'
-            assert records.size() == 1
-            def record = records.iterator().next()
-        and: 'the record value matches the expected event value'
-            def expectedValue = objectMapper.writeValueAsString(subscriptionEventResponse)
-            assert expectedValue == record.value
-            assert eventKey == record.key
-    }
-
-    def 'Consume valid message.'() {
-        given: 'an event'
-            objectUnderTest.dmiName = 'test-ncmp-dmi'
-            def eventKey = UUID.randomUUID().toString()
-            def timestamp = new Timestamp(1679521929511)
-            def jsonData = TestUtils.getResourceFileContent('avcSubscriptionCreationEvent.json')
-            def subscriptionEvent = objectMapper.readValue(jsonData, CmSubscriptionDmiInEvent.class)
-            objectUnderTest.cmAvcSubscriptionResponseTopic = testTopic
-            def cloudEvent = CloudEventBuilder.v1().withId(UUID.randomUUID().toString()).withSource(URI.create('test-ncmp-dmi'))
-                .withType(subscriptionType)
-                .withDataSchema(URI.create("urn:cps:" + CmSubscriptionDmiInEvent.class.getName() + ":1.0.0"))
-                .withExtension("correlationid", eventKey)
-                .withTime(OffsetDateTime.ofInstant(timestamp.toInstant(), ZoneId.of("UTC")))
-                .withData(objectMapper.writeValueAsBytes(subscriptionEvent)).build()
-            def testEventSent = new ConsumerRecord<String, CloudEvent>('topic-name', 0, 0, eventKey, cloudEvent)
-        when: 'the valid event is consumed'
-            objectUnderTest.consumeCmSubscriptionDmiInEvent(testEventSent)
-        then: 'no exception is thrown'
-            noExceptionThrown()
-        where: 'given #senario'
-            scenario                    | subscriptionType
-            'Subscription Create Event' | "subscriptionCreated"
-            'Subscription Delete Event' | "subscriptionDeleted"
-    }
-
-    def 'Consume invalid message.'() {
-        given: 'an invalid event type'
-            objectUnderTest.dmiName = 'test-ncmp-dmi'
-            def eventKey = UUID.randomUUID().toString()
-            def timestamp = new Timestamp(1679521929511)
-            objectUnderTest.cmAvcSubscriptionResponseTopic = testTopic
-            def cloudEvent = CloudEventBuilder.v1().withId(UUID.randomUUID().toString()).withSource(URI.create('test-ncmp-dmi'))
-                .withType("subscriptionCreated")
-                .withDataSchema(URI.create("urn:cps:" + CmSubscriptionDmiOutEvent.class.getName() + ":1.0.0"))
-                .withTime(OffsetDateTime.ofInstant(timestamp.toInstant(), ZoneId.of("UTC")))
-                .withExtension("correlationid", eventKey).build()
-            def testEventSent = new ConsumerRecord<String, CloudEvent>('topic-name', 0, 0, eventKey, cloudEvent)
-        when: 'the invalid event is consumed'
-            objectUnderTest.consumeCmSubscriptionDmiInEvent(testEventSent)
-        then: 'no exception is thrown and event is logged'
-            noExceptionThrown()
-    }
-
-    def 'Form a SubscriptionEventResponse from a SubscriptionEvent.'() {
-        given: 'a SubscriptionEvent'
-            def jsonData = TestUtils.getResourceFileContent('avcSubscriptionCreationEvent.json')
-            def subscriptionEvent = objectMapper.readValue(jsonData, CmSubscriptionDmiInEvent.class)
-        when: 'a SubscriptionResponseEvent is formed'
-            def result = objectUnderTest.formCmSubscriptionDmiOutEvent(subscriptionEvent)
-        then: 'Confirm SubscriptionEventResponse was formed as expected'
-            assert result.data.clientId == "SCO-9989752"
-            assert result.data.subscriptionName == "cm-subscription-001"
-    }
-
-    def 'Extract cm handle ids from cm handle successfully.'() {
-        given: 'a list of cm handles'
-            def cmHandleIds =
-                [new CmHandle(id: 'CmHandle1', additionalProperties: ['prop-x': 'prop-valuex']),
-                 new CmHandle(id: 'CmHandle2', additionalProperties: ['prop-y': 'prop-valuey'])]
-        when: 'extract the cm handle ids'
-            def result = objectUnderTest.extractCmHandleIds(cmHandleIds)
-        then: 'cm handle ids are extracted as expected'
-            def expectedCmHandleIds = ['CmHandle1', 'CmHandle2'] as Set
-            assert expectedCmHandleIds == result
-    }
-
-    def 'Populate cm handle id to subscriptionStatus successfully.'() {
-        given: 'a set of cm handle id'
-            def cmHandleIds = ['CmHandle1', 'CmHandle2'] as Set
-            def responseStatus = SubscriptionStatus.Status.ACCEPTED
-        when: 'populate cm handle id to subscriptionStatus'
-            def result = objectUnderTest.populateSubscriptionStatus(cmHandleIds).status
-        then: 'cm handle id to subscriptionStatus populated as expected'
-            def expectedStatus = [responseStatus, responseStatus]
-            expectedStatus == result
-    }
-}
\ No newline at end of file
diff --git a/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/CmSubscriptionDmiOutEventToCloudEventMapperSpec.groovy b/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/CmSubscriptionDmiOutEventToCloudEventMapperSpec.groovy
deleted file mode 100644 (file)
index 4d0363c..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2023 Nordix Foundation
- *  ================================================================================
- *  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.
- *
- *  SPDX-License-Identifier: Apache-2.0
- *  ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.ncmp.dmi.notifications.cmsubscription
-
-import com.fasterxml.jackson.databind.ObjectMapper
-import io.cloudevents.core.builder.CloudEventBuilder
-import org.onap.cps.ncmp.dmi.exception.CloudEventConstructionException
-import org.onap.cps.ncmp.events.cmsubscription1_0_0.dmi_to_ncmp.CmSubscriptionDmiOutEvent
-import org.onap.cps.ncmp.events.cmsubscription1_0_0.dmi_to_ncmp.Data
-import org.onap.cps.ncmp.events.cmsubscription1_0_0.dmi_to_ncmp.SubscriptionStatus
-import org.spockframework.spring.SpringBean
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.boot.test.context.SpringBootTest
-import spock.lang.Specification
-
-@SpringBootTest(classes = [ObjectMapper])
-class CmSubscriptionDmiOutEventToCloudEventMapperSpec extends Specification {
-
-    @Autowired
-    def objectMapper = new ObjectMapper()
-
-    @SpringBean
-    CmSubscriptionDmiOutEventToCloudEventMapper objectUnderTest = new CmSubscriptionDmiOutEventToCloudEventMapper()
-
-    def 'Convert a Cm Subscription DMI Out Event to CloudEvent successfully.'() {
-        given: 'a Cm Subscription DMI Out Event and an event key'
-            def dmiName = 'test-ncmp-dmi'
-            def responseStatus = SubscriptionStatus.Status.ACCEPTED
-            def subscriptionStatuses = [new SubscriptionStatus(id: 'CmHandle1', status: responseStatus),
-                                        new SubscriptionStatus(id: 'CmHandle2', status: responseStatus)]
-            def cmSubscriptionDmiOutEventData = new Data(subscriptionName: 'cm-subscription-001',
-                clientId: 'SCO-9989752', dmiName: 'ncmp-dmi-plugin', subscriptionStatus: subscriptionStatuses)
-            def cmSubscriptionDmiOutEvent =
-                new CmSubscriptionDmiOutEvent().withData(cmSubscriptionDmiOutEventData)
-        when: 'a Cm Subscription DMI Out Event is converted'
-            def result = objectUnderTest.toCloudEvent(cmSubscriptionDmiOutEvent, "subscriptionCreatedStatus", dmiName)
-        then: 'Cm Subscription DMI Out Event is converted as expected'
-            def expectedCloudEvent = CloudEventBuilder.v1().withId(UUID.randomUUID().toString()).withSource(URI.create('test-ncmp-dmi'))
-                .withType("subscriptionCreated")
-                .withDataSchema(URI.create("urn:cps:" + CmSubscriptionDmiOutEvent.class.getName() + ":1.0.0"))
-                .withExtension("correlationid", cmSubscriptionDmiOutEvent.getData().getClientId() + ":" + cmSubscriptionDmiOutEvent.getData().getSubscriptionName())
-                .withData(objectMapper.writeValueAsBytes(cmSubscriptionDmiOutEvent)).build()
-            assert expectedCloudEvent.data == result.data
-    }
-
-    def 'Map the Cloud Event to data of the subscription event with incorrect content causes an exception'() {
-        given: 'an empty subscription response event and event key'
-            def dmiName = 'test-ncmp-dmi'
-            def cmSubscriptionDmiOutEvent = new CmSubscriptionDmiOutEvent()
-        when: 'the cm subscription dmi out Event map to data of cloud event'
-            objectUnderTest.toCloudEvent(cmSubscriptionDmiOutEvent, "subscriptionCreatedStatus", dmiName)
-        then: 'a run time exception is thrown'
-            thrown(CloudEventConstructionException)
-    }
-}
\ No newline at end of file
diff --git a/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/mapper/CloudEventMapperSpec.groovy b/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/mapper/CloudEventMapperSpec.groovy
deleted file mode 100644 (file)
index 4e1a748..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * ============LICENSE_START========================================================
- * Copyright (c) 2023 Nordix Foundation.
- *  ================================================================================
- *  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.
- *
- *  SPDX-License-Identifier: Apache-2.0
- *  ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.ncmp.dmi.notifications.mapper
-
-import com.fasterxml.jackson.databind.ObjectMapper
-import io.cloudevents.core.builder.CloudEventBuilder
-import org.onap.cps.ncmp.events.cmsubscription1_0_0.client_to_ncmp.CmSubscriptionNcmpInEvent
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.boot.test.context.SpringBootTest
-import spock.lang.Specification
-
-@SpringBootTest(classes = [ObjectMapper])
-class CloudEventMapperSpec extends Specification {
-
-    @Autowired
-    ObjectMapper objectMapper
-
-    def 'Cloud event to Target event type when it is #scenario'() {
-        expect: 'Events mapped correctly'
-            assert mappedCloudEvent == (CloudEventMapper.toTargetEvent(testCloudEvent(), targetClass) != null)
-        where: 'below are the scenarios'
-            scenario                | targetClass                     || mappedCloudEvent
-            'valid concrete type'   | CmSubscriptionNcmpInEvent.class || true
-            'invalid concrete type' | ArrayList.class                 || false
-    }
-
-    def testCloudEvent() {
-        return CloudEventBuilder.v1().withData(objectMapper.writeValueAsBytes(new CmSubscriptionNcmpInEvent()))
-            .withId("cmhandle1")
-            .withSource(URI.create('test-source'))
-            .withDataSchema(URI.create('test'))
-            .withType('org.onap.cm.events.cm-subscription')
-            .build()
-    }
-}
-
index 8ce9735..7b2570b 100644 (file)
 
 package org.onap.cps.ncmp.dmi.rest.controller
 
-
 import org.onap.cps.ncmp.dmi.TestUtils
 import org.onap.cps.ncmp.dmi.config.WebSecurityConfig
 import org.onap.cps.ncmp.dmi.exception.DmiException
 import org.onap.cps.ncmp.dmi.exception.ModuleResourceNotFoundException
 import org.onap.cps.ncmp.dmi.exception.ModulesNotFoundException
-import org.onap.cps.ncmp.dmi.model.ModuleSetSchemasInner
-import org.onap.cps.ncmp.dmi.notifications.async.AsyncTaskExecutor
-import org.onap.cps.ncmp.dmi.notifications.async.DmiAsyncRequestResponseEventProducer
-
-import org.onap.cps.ncmp.dmi.service.model.ModuleReference
 import org.onap.cps.ncmp.dmi.model.ModuleSet
+import org.onap.cps.ncmp.dmi.model.ModuleSetSchemasInner
 import org.onap.cps.ncmp.dmi.model.YangResource
 import org.onap.cps.ncmp.dmi.model.YangResources
+import org.onap.cps.ncmp.dmi.notifications.async.AsyncTaskExecutor
+import org.onap.cps.ncmp.dmi.notifications.async.DmiAsyncRequestResponseEventProducer
 import org.onap.cps.ncmp.dmi.service.DmiService
+import org.onap.cps.ncmp.dmi.service.model.ModuleReference
 import org.spockframework.spring.SpringBean
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.beans.factory.annotation.Value
@@ -48,16 +46,17 @@ import org.springframework.security.test.context.support.WithMockUser
 import org.springframework.test.web.servlet.MockMvc
 import spock.lang.Specification
 
+import static org.onap.cps.ncmp.dmi.model.DataAccessRequest.OperationEnum.CREATE
 import static org.onap.cps.ncmp.dmi.model.DataAccessRequest.OperationEnum.DELETE
 import static org.onap.cps.ncmp.dmi.model.DataAccessRequest.OperationEnum.PATCH
 import static org.onap.cps.ncmp.dmi.model.DataAccessRequest.OperationEnum.READ
-import static org.springframework.http.HttpStatus.BAD_REQUEST
-import static org.springframework.http.HttpStatus.NO_CONTENT
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post
-import static org.onap.cps.ncmp.dmi.model.DataAccessRequest.OperationEnum.CREATE
 import static org.onap.cps.ncmp.dmi.model.DataAccessRequest.OperationEnum.UPDATE
+import static org.springframework.http.HttpStatus.BAD_REQUEST
 import static org.springframework.http.HttpStatus.CREATED
+import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR
+import static org.springframework.http.HttpStatus.NO_CONTENT
 import static org.springframework.http.HttpStatus.OK
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post
 
 @Import(WebSecurityConfig)
 @WebMvcTest(DmiRestController.class)
@@ -224,6 +223,22 @@ class DmiRestControllerSpec extends Specification {
             0 * mockDmiService.getResourceData(*_)
     }
 
+    def 'Get resource data for invalid datastore'() {
+        given: 'Get resource data url'
+            def getResourceDataForCmHandleUrl = "${basePathV1}/ch/some-cmHandle/data/ds/dummy-datastore" +
+                "?resourceIdentifier=parent/child&options=(fields=myfields,depth=5)"
+        and: 'an invalid write request data for "create" operation'
+            def jsonData = '{"operation":"create"}'
+        when: 'the request is posted'
+            def response = mvc.perform(
+                post(getResourceDataForCmHandleUrl).contentType(MediaType.APPLICATION_JSON).content(jsonData)
+            ).andReturn().response
+        then: 'response status is internal server error'
+            response.status == INTERNAL_SERVER_ERROR.value()
+        and: 'response contains expected error message'
+            response.contentAsString.contains('dummy-datastore is an invalid datastore name')
+    }
+
     def 'data with #scenario operation using passthrough running.'() {
         given: 'write data for passthrough running url'
             def writeDataForPassthroughRunning = "${basePathV1}/ch/some-cmHandle/data/ds/ncmp-datastore:passthrough-running" +