aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cps-ncmp-rest/docs/openapi/components.yaml4
-rwxr-xr-xcps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java15
-rw-r--r--cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DmiPluginRegistration.java2
-rw-r--r--cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy19
4 files changed, 32 insertions, 8 deletions
diff --git a/cps-ncmp-rest/docs/openapi/components.yaml b/cps-ncmp-rest/docs/openapi/components.yaml
index 704721742..ca1c6ab79 100644
--- a/cps-ncmp-rest/docs/openapi/components.yaml
+++ b/cps-ncmp-rest/docs/openapi/components.yaml
@@ -44,6 +44,10 @@ components:
type: array
items:
$ref: '#/components/schemas/RestCmHandle'
+ removedCmHandles:
+ type: array
+ items:
+ type: string
RestCmHandle:
required:
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java
index 1ea95d3e6..ca5fa8e08 100755
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java
@@ -42,6 +42,7 @@ import org.onap.cps.ncmp.api.models.GenericRequestBody;
import org.onap.cps.ncmp.api.models.PersistenceCmHandle;
import org.onap.cps.ncmp.api.models.PersistenceCmHandlesList;
import org.onap.cps.spi.FetchDescendantsOption;
+import org.onap.cps.spi.exceptions.DataNodeNotFoundException;
import org.onap.cps.spi.exceptions.DataValidationException;
import org.onap.cps.spi.model.DataNode;
import org.springframework.http.HttpStatus;
@@ -131,6 +132,9 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
if (dmiPluginRegistration.getUpdatedCmHandles() != null) {
parseAndUpdateCmHandlesInDmiRegistration(dmiPluginRegistration);
}
+ if (dmiPluginRegistration.getRemovedCmHandles() != null) {
+ parseAndRemoveCmHandlesInDmiRegistration(dmiPluginRegistration);
+ }
}
private void parseAndCreateCmHandlesInDmiRegistration(final DmiPluginRegistration dmiPluginRegistration) {
@@ -173,6 +177,17 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
}
}
+ private void parseAndRemoveCmHandlesInDmiRegistration(final DmiPluginRegistration dmiPluginRegistration) {
+ for (final String cmHandle: dmiPluginRegistration.getRemovedCmHandles()) {
+ try {
+ cpsDataService.deleteListNodeData(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR,
+ "/dmi-registry/cm-handles[@id='" + cmHandle + "']");
+ } catch (final DataNodeNotFoundException e) {
+ log.warn("Datanode {} not deleted message {}", cmHandle, e.getMessage());
+ }
+ }
+ }
+
@Override
public Object getResourceDataOperationalForCmHandle(final @NotNull String cmHandle,
final @NotNull String resourceIdentifier,
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DmiPluginRegistration.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DmiPluginRegistration.java
index fcf9e92d0..f5a0d7954 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DmiPluginRegistration.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DmiPluginRegistration.java
@@ -41,6 +41,6 @@ public class DmiPluginRegistration {
private List<CmHandle> updatedCmHandles;
- private List<CmHandle> deletedCmHandles;
+ private List<String> removedCmHandles;
}
diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy
index f356ce66c..c6c955fba 100644
--- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy
+++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy
@@ -40,6 +40,8 @@ class NetworkCmProxyDataServiceImplSpec extends Specification {
@Shared
def persistenceCmHandle = new CmHandle()
+ @Shared
+ def cmHandlesArray = ['cmHandle001']
def mockCpsDataService = Mock(CpsDataService)
def mockCpsQueryService = Mock(CpsQueryService)
@@ -110,25 +112,28 @@ class NetworkCmProxyDataServiceImplSpec extends Specification {
def 'Register or re-register a DMI Plugin with #scenario cm handles.'() {
given: 'a registration '
- def dmiRegistryAnchor = 'ncmp-dmi-registry'
def dmiPluginRegistration = new DmiPluginRegistration()
dmiPluginRegistration.dmiPlugin = 'my-server'
persistenceCmHandle.cmHandleID = '123'
persistenceCmHandle.cmHandleProperties = [name1: 'value1', name2: 'value2']
dmiPluginRegistration.createdCmHandles = createdCmHandles
dmiPluginRegistration.updatedCmHandles = updatedCmHandles
+ dmiPluginRegistration.removedCmHandles = removedCmHandles
def expectedJsonData = '{"cm-handles":[{"id":"123","dmi-service-name":"my-server","additional-properties":[{"name":"name1","value":"value1"},{"name":"name2","value":"value2"}]}]}'
when: 'registration is updated'
objectUnderTest.updateDmiPluginRegistration(dmiPluginRegistration)
then: 'the CPS save list node data is invoked with the expected parameters'
expectedCallsToSaveNode * mockCpsDataService.saveListNodeData('NCMP-Admin', 'ncmp-dmi-registry', '/dmi-registry', expectedJsonData)
- and: 'update Node and Child Data Nodes is invoked with correct parameter'
- expectedCallsToUpdateNode * mockCpsDataService.updateNodeLeavesAndExistingDescendantLeaves('NCMP-Admin', dmiRegistryAnchor, '/dmi-registry', expectedJsonData)
+ and: 'update Node and Child Data Nodes is invoked with correct parameters'
+ expectedCallsToUpdateNode * mockCpsDataService.updateNodeLeavesAndExistingDescendantLeaves('NCMP-Admin', 'ncmp-dmi-registry', '/dmi-registry', expectedJsonData)
+ and : 'delete list data node is invoked with the correct parameters'
+ expectedCallsToDeleteListDataNode * mockCpsDataService.deleteListNodeData('NCMP-Admin', 'ncmp-dmi-registry', "/dmi-registry/cm-handles[@id='cmHandle001']")
where:
- scenario | createdCmHandles | updatedCmHandles || expectedCallsToSaveNode | expectedCallsToUpdateNode
- 'create' | [persistenceCmHandle ] | [] || 1 | 0
- 'update' | [] | [persistenceCmHandle ] || 0 | 1
- 'create and update' | [persistenceCmHandle ] | [persistenceCmHandle ] || 1 | 1
+ scenario | createdCmHandles | updatedCmHandles | removedCmHandles || expectedCallsToSaveNode | expectedCallsToUpdateNode | expectedCallsToDeleteListDataNode
+ 'create' | [persistenceCmHandle ] | [] | [] || 1 | 0 | 0
+ 'update' | [] | [persistenceCmHandle ] | [] || 0 | 1 | 0
+ 'delete' | [] | [] | cmHandlesArray || 0 | 0 | 1
+ 'create, update and delete' | [persistenceCmHandle ] | [persistenceCmHandle ] | cmHandlesArray || 1 | 1 | 1
}
def 'Get resource data for pass-through operational from dmi.'() {