From: emaclee Date: Tue, 30 Sep 2025 10:42:02 +0000 (+0100) Subject: Update DMI plugin with new subscription schemas X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=17f704b50cd449e51772e6679ccd275e09e0effd;p=cps%2Fncmp-dmi-plugin.git Update DMI plugin with new subscription schemas - update imported packages to align with new subscription schemas in CPS - upgrade to CPS latest version in pom file (from 3.7.0 to 3.7.1) Issue-ID: CPS-2723 Change-Id: I6d0b6eb674b86fb3fe53cd4508fde85e8dbeff23 Signed-off-by: emaclee --- diff --git a/dmi-service/src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiInEventConsumer.java b/dmi-service/src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiInEventConsumer.java index 9df74504..4bec4d25 100644 --- a/dmi-service/src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiInEventConsumer.java +++ b/dmi-service/src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiInEventConsumer.java @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2024 Nordix Foundation + * Copyright (C) 2024-2025 OpenInfra Foundation Europe. 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. @@ -25,9 +25,9 @@ import lombok.RequiredArgsConstructor; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.onap.cps.ncmp.dmi.notifications.cmsubscription.model.CmNotificationSubscriptionStatus; import org.onap.cps.ncmp.dmi.notifications.mapper.CloudEventMapper; -import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.dmi_to_ncmp.Data; -import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.dmi_to_ncmp.DmiOutEvent; -import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.ncmp_to_dmi.DmiInEvent; +import org.onap.cps.ncmp.impl.datajobs.subscription.dmi_to_ncmp.Data; +import org.onap.cps.ncmp.impl.datajobs.subscription.dmi_to_ncmp.DataJobSubscriptionDmiOutEvent; +import org.onap.cps.ncmp.impl.datajobs.subscription.ncmp_to_dmi.DataJobSubscriptionDmiInEvent; import org.springframework.beans.factory.annotation.Value; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; @@ -53,10 +53,10 @@ public class DmiInEventConsumer { containerFactory = "cloudEventConcurrentKafkaListenerContainerFactory") public void consumeDmiInEvent( final ConsumerRecord dmiInCloudEvent) { - final DmiInEvent cmNotificationSubscriptionDmiInEvent = + final DataJobSubscriptionDmiInEvent dataJobSubscriptionDmiInEvent = CloudEventMapper.toTargetEvent(dmiInCloudEvent.value(), - DmiInEvent.class); - if (cmNotificationSubscriptionDmiInEvent != null) { + DataJobSubscriptionDmiInEvent.class); + if (dataJobSubscriptionDmiInEvent != null) { final String subscriptionId = dmiInCloudEvent.value().getId(); final String subscriptionType = dmiInCloudEvent.value().getType(); final String correlationId = String.valueOf(dmiInCloudEvent.value() @@ -84,8 +84,8 @@ public class DmiInEventConsumer { final String eventKey, final String subscriptionType, final String correlationId, final CmNotificationSubscriptionStatus cmNotificationSubscriptionStatus) { - final DmiOutEvent cmNotificationSubscriptionDmiOutEvent = - new DmiOutEvent(); + final DataJobSubscriptionDmiOutEvent dataJobSubscriptionDmiOutEvent = + new DataJobSubscriptionDmiOutEvent(); final Data dmiOutEventData = new Data(); if (cmNotificationSubscriptionStatus.equals(CmNotificationSubscriptionStatus.ACCEPTED)) { @@ -95,10 +95,10 @@ public class DmiInEventConsumer { dmiOutEventData.setStatusCode("104"); dmiOutEventData.setStatusMessage("REJECTED"); } - cmNotificationSubscriptionDmiOutEvent.setData(dmiOutEventData); + dataJobSubscriptionDmiOutEvent.setData(dmiOutEventData); cloudEventKafkaTemplate.send(dmoOutEventTopic, eventKey, - DmiOutEventToCloudEventMapper.toCloudEvent(cmNotificationSubscriptionDmiOutEvent, + DmiOutEventToCloudEventMapper.toCloudEvent(dataJobSubscriptionDmiOutEvent, subscriptionType, dmiName, correlationId)); } diff --git a/dmi-service/src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiOutEventToCloudEventMapper.java b/dmi-service/src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiOutEventToCloudEventMapper.java index fd42c400..fa8f004d 100644 --- a/dmi-service/src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiOutEventToCloudEventMapper.java +++ b/dmi-service/src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiOutEventToCloudEventMapper.java @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2024 Nordix Foundation + * Copyright (C) 2024-2025 OpenInfra Foundation Europe. 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. @@ -28,7 +28,7 @@ import java.util.UUID; import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.onap.cps.ncmp.dmi.exception.CloudEventConstructionException; -import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.dmi_to_ncmp.DmiOutEvent; +import org.onap.cps.ncmp.impl.datajobs.subscription.dmi_to_ncmp.DataJobSubscriptionDmiOutEvent; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class DmiOutEventToCloudEventMapper { @@ -38,13 +38,13 @@ public class DmiOutEventToCloudEventMapper { /** * Maps SubscriptionEventResponse to a CloudEvent. * - * @param dmiOutEvent object. - * @param subscriptionType String of subscription type. - * @param dmiName String of dmiName. - * @param correlationId String of correlationId. + * @param dataJobSubscriptionDmiOutEvent event object. + * @param subscriptionType String of subscription type. + * @param dmiName String of dmiName. + * @param correlationId String of correlationId. * @return CloudEvent built. */ - public static CloudEvent toCloudEvent(final DmiOutEvent dmiOutEvent, + public static CloudEvent toCloudEvent(final DataJobSubscriptionDmiOutEvent dataJobSubscriptionDmiOutEvent, final String subscriptionType, final String dmiName, final String correlationId) { try { @@ -52,7 +52,7 @@ public class DmiOutEventToCloudEventMapper { .withType(subscriptionType) .withDataSchema(URI.create("urn:cps:org.onap.ncmp.dmi.cm.subscription:1.0.0")) .withExtension("correlationid", correlationId) - .withData(objectMapper.writeValueAsBytes(dmiOutEvent)).build(); + .withData(objectMapper.writeValueAsBytes(dataJobSubscriptionDmiOutEvent)).build(); } catch (final Exception ex) { throw new CloudEventConstructionException("The Cloud Event could not be constructed", "Invalid object passed", ex); diff --git a/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiInEventConsumerSpec.groovy b/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiInEventConsumerSpec.groovy index 52fa3794..de53286e 100644 --- a/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiInEventConsumerSpec.groovy +++ b/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiInEventConsumerSpec.groovy @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2024 Nordix Foundation + * Copyright (C) 2024-2025 OpenInfra Foundation Europe. 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. @@ -32,9 +32,9 @@ import org.onap.cps.ncmp.dmi.TestUtils import org.onap.cps.ncmp.dmi.api.kafka.MessagingBaseSpec import org.onap.cps.ncmp.dmi.notifications.cmsubscription.model.CmNotificationSubscriptionStatus import org.onap.cps.ncmp.dmi.notifications.mapper.CloudEventMapper -import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.dmi_to_ncmp.Data -import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.dmi_to_ncmp.DmiOutEvent -import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.ncmp_to_dmi.DmiInEvent +import org.onap.cps.ncmp.impl.datajobs.subscription.dmi_to_ncmp.Data +import org.onap.cps.ncmp.impl.datajobs.subscription.dmi_to_ncmp.DataJobSubscriptionDmiOutEvent +import org.onap.cps.ncmp.impl.datajobs.subscription.ncmp_to_dmi.DataJobSubscriptionDmiInEvent import org.slf4j.LoggerFactory import org.spockframework.spring.SpringBean import org.springframework.test.annotation.DirtiesContext @@ -74,7 +74,7 @@ class DmiInEventConsumerSpec extends MessagingBaseSpec { def correlationId = 'test-subscriptionId#test-ncmp-dmi' def cmSubscriptionDmiOutEventData = new Data(statusCode: subscriptionStatusCode, statusMessage: subscriptionStatusMessage) def subscriptionEventResponse = - new DmiOutEvent().withData(cmSubscriptionDmiOutEventData) + new DataJobSubscriptionDmiOutEvent().withData(cmSubscriptionDmiOutEventData) and: 'consumer has a subscription' kafkaConsumer.subscribe([testTopic] as List) when: 'an event is published' @@ -102,11 +102,11 @@ class DmiInEventConsumerSpec extends MessagingBaseSpec { def eventKey = UUID.randomUUID().toString() def timestamp = new Timestamp(1679521929511) def jsonData = TestUtils.getResourceFileContent('cmNotificationSubscriptionCreationEvent.json') - def subscriptionEvent = objectMapper.readValue(jsonData, DmiInEvent.class) + def subscriptionEvent = objectMapper.readValue(jsonData, DataJobSubscriptionDmiInEvent.class) objectUnderTest.dmoOutEventTopic = testTopic def cloudEvent = CloudEventBuilder.v1().withId(UUID.randomUUID().toString()).withSource(URI.create('test-ncmp-dmi')) .withType(subscriptionType) - .withDataSchema(URI.create("urn:cps:" + DmiInEvent.class.getName() + ":1.0.0")) + .withDataSchema(URI.create("urn:cps:" + DataJobSubscriptionDmiInEvent.class.getName() + ":1.0.0")) .withExtension("correlationid", eventKey) .withTime(OffsetDateTime.ofInstant(timestamp.toInstant(), ZoneId.of("UTC"))) .withData(objectMapper.writeValueAsBytes(subscriptionEvent)).build() diff --git a/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiOutEventToCloudEventMapperSpec.groovy b/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiOutEventToCloudEventMapperSpec.groovy index 95ac93f0..4b2b59fc 100644 --- a/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiOutEventToCloudEventMapperSpec.groovy +++ b/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiOutEventToCloudEventMapperSpec.groovy @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2024 Nordix Foundation + * Copyright (C) 2024-2025 OpenInfra Foundation Europe. 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. @@ -23,8 +23,8 @@ 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.impl.cmnotificationsubscription_1_0_0.dmi_to_ncmp.Data -import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.dmi_to_ncmp.DmiOutEvent +import org.onap.cps.ncmp.impl.datajobs.subscription.dmi_to_ncmp.Data +import org.onap.cps.ncmp.impl.datajobs.subscription.dmi_to_ncmp.DataJobSubscriptionDmiOutEvent import org.spockframework.spring.SpringBean import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest @@ -44,25 +44,25 @@ class DmiOutEventToCloudEventMapperSpec extends Specification { def dmiName = 'test-ncmp-dmi' def correlationId = 'subscription1#test-ncmp-dmi' def cmSubscriptionDmiOutEventData = new Data(statusCode: "1", statusMessage: "accepted") - def cmSubscriptionDmiOutEvent = - new DmiOutEvent().withData(cmSubscriptionDmiOutEventData) + def dataJobSubscriptionDmiOutEvent = + new DataJobSubscriptionDmiOutEvent().withData(cmSubscriptionDmiOutEventData) when: 'a Cm Subscription DMI Out Event is converted' - def result = objectUnderTest.toCloudEvent(cmSubscriptionDmiOutEvent, "subscriptionCreatedStatus", dmiName, correlationId) + def result = objectUnderTest.toCloudEvent(dataJobSubscriptionDmiOutEvent, "subscriptionCreatedStatus", dmiName, correlationId) 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:" + DmiOutEvent.class.getName() + ":1.0.0")) + .withDataSchema(URI.create("urn:cps:" + DataJobSubscriptionDmiOutEvent.class.getName() + ":1.0.0")) .withExtension("correlationid", correlationId) - .withData(objectMapper.writeValueAsBytes(cmSubscriptionDmiOutEvent)).build() + .withData(objectMapper.writeValueAsBytes(dataJobSubscriptionDmiOutEvent)).build() assert expectedCloudEvent.data == result.data } def 'Map the Cloud Event to data of the subscription event with null parameters causes an exception'() { given: 'an empty subscription response event and event key' def correlationId = 'subscription1#test-ncmp-dmi' - def dmiOutEvent = new DmiOutEvent() + def dataJobSubscriptionDmiOutEvent = new DataJobSubscriptionDmiOutEvent() when: 'the cm subscription dmi out Event map to data of cloud event' - objectUnderTest.toCloudEvent(dmiOutEvent, "subscriptionCreatedStatus", null , correlationId) + objectUnderTest.toCloudEvent(dataJobSubscriptionDmiOutEvent, "subscriptionCreatedStatus", null , correlationId) then: 'a run time exception is thrown' thrown(CloudEventConstructionException) } diff --git a/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/mapper/CloudEventMapperSpec.groovy b/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/mapper/CloudEventMapperSpec.groovy index 7393b669..5836b280 100644 --- a/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/mapper/CloudEventMapperSpec.groovy +++ b/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/mapper/CloudEventMapperSpec.groovy @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================== - * Copyright (c) 2024 Nordix Foundation. + * Copyright (c) 2024-2025 OpenInfra Foundation Europe. 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. @@ -22,7 +22,7 @@ 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.impl.cmnotificationsubscription_1_0_0.client_to_ncmp.NcmpInEvent +import org.onap.cps.ncmp.impl.datajobs.subscription.client_to_ncmp.DataJobSubscriptionOperationInEvent import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import spock.lang.Specification @@ -37,13 +37,13 @@ class CloudEventMapperSpec extends Specification { expect: 'Events mapped correctly' assert mappedCloudEvent == (CloudEventMapper.toTargetEvent(testCloudEvent(), targetClass) != null) where: 'below are the scenarios' - scenario | targetClass || mappedCloudEvent - 'valid concrete type' | NcmpInEvent.class || true - 'invalid concrete type' | ArrayList.class || false + scenario | targetClass || mappedCloudEvent + 'valid concrete type' | DataJobSubscriptionOperationInEvent.class|| true + 'invalid concrete type' | ArrayList.class || false } def testCloudEvent() { - return CloudEventBuilder.v1().withData(objectMapper.writeValueAsBytes(new NcmpInEvent())) + return CloudEventBuilder.v1().withData(objectMapper.writeValueAsBytes(new DataJobSubscriptionOperationInEvent())) .withId("cmhandle1") .withSource(URI.create('test-source')) .withDataSchema(URI.create('test')) diff --git a/dmi-service/src/test/resources/cmNotificationSubscriptionCreationEvent.json b/dmi-service/src/test/resources/cmNotificationSubscriptionCreationEvent.json index 7f8adb39..9c708ac7 100644 --- a/dmi-service/src/test/resources/cmNotificationSubscriptionCreationEvent.json +++ b/dmi-service/src/test/resources/cmNotificationSubscriptionCreationEvent.json @@ -21,23 +21,16 @@ } } ], - "predicates": [ - { - "targetFilter": [ - "CMHandle1", - "CMHandle2", - "CMHandle3" + "productionJobDefinition": { + "targetSelector": { + "dataNodeSelector": "/parent[id=\"1\"] \n/parent[id=\"3\"]/child\n/parent[id=\"4\"]" + }, + "dataSelector": { + "notificationTypes": [ + "" ], - "scopeFilter": { - "datastore": "ncmp-datastore:passthrough-running", - "xpathFilter": [ - "//_3gpp-nr-nrm-gnbdufunction:GNBDUFunction/_3gpp-nr-nrm-nrcelldu:NRCellDU/", - "//_3gpp-nr-nrm-gnbcuupfunction:GNBCUUPFunction//", - "//_3gpp-nr-nrm-gnbcucpfunction:GNBCUCPFunction/_3gpp-nr-nrm-nrcelldu:NRCellCU//", - "//_3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier//" - ] - } + "notificationFilter": "" } - ] + } } } \ No newline at end of file diff --git a/pom.xml b/pom.xml index ef70778d..dfc74881 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ org.onap.cps - 3.7.0 + 3.7.1 yyyyMMdd'T'HHmmss'Z'