Delete anchor and schema set when a registration is removed 54/126154/2
authorniamhcore <niamh.core@est.tech>
Wed, 8 Dec 2021 14:19:02 +0000 (14:19 +0000)
committerniamhcore <niamh.core@est.tech>
Wed, 8 Dec 2021 15:32:10 +0000 (15:32 +0000)
Issue-ID: CPS-783
Signed-off-by: niamhcore <niamh.core@est.tech>
Change-Id: I9644949e00c4de900b2609c1e70744ae5a243582

cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplRegistrationSpec.groovy
docs/release-notes.rst

index 363dbc2..faa2efe 100755 (executable)
@@ -24,6 +24,7 @@
 package org.onap.cps.ncmp.api.impl;
 
 import static org.onap.cps.ncmp.api.impl.operations.DmiRequestBody.OperationEnum;
+import static org.onap.cps.spi.CascadeDeleteAllowed.CASCADE_DELETE_ALLOWED;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -289,13 +290,15 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
     }
 
     protected void syncModulesAndCreateAnchor(final PersistenceCmHandle persistenceCmHandle) {
-        fetchAndSyncModules(persistenceCmHandle);
+        syncAndCreateSchemaSet(persistenceCmHandle);
         createAnchor(persistenceCmHandle);
     }
 
     private void parseAndRemoveCmHandlesInDmiRegistration(final DmiPluginRegistration dmiPluginRegistration) {
         for (final String cmHandle : dmiPluginRegistration.getRemovedCmHandles()) {
             try {
+                cpsModuleService.deleteSchemaSet(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, cmHandle,
+                    CASCADE_DELETE_ALLOWED);
                 cpsDataService.deleteListOrListElement(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR,
                     "/dmi-registry/cm-handles[@id='" + cmHandle + "']", NO_TIMESTAMP);
             } catch (final DataNodeNotFoundException e) {
@@ -304,7 +307,7 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
         }
     }
 
-    private void fetchAndSyncModules(final PersistenceCmHandle persistenceCmHandle) {
+    private void syncAndCreateSchemaSet(final PersistenceCmHandle persistenceCmHandle) {
 
         final List<ModuleReference> moduleReferencesFromCmHandle =
             toModuleReferences(dmiModelOperations.getModuleReferences(persistenceCmHandle));
index 86c01b4..4108454 100644 (file)
@@ -23,6 +23,7 @@ package org.onap.cps.ncmp.api.impl
 import com.fasterxml.jackson.core.JsonProcessingException
 import com.fasterxml.jackson.databind.ObjectMapper
 import org.onap.cps.api.CpsDataService
+import org.onap.cps.api.CpsModuleService
 import org.onap.cps.ncmp.api.impl.exception.NcmpException
 import org.onap.cps.ncmp.api.models.CmHandle
 import org.onap.cps.ncmp.api.models.DmiPluginRegistration
@@ -31,6 +32,8 @@ import org.onap.cps.spi.exceptions.DataValidationException
 import spock.lang.Shared
 import spock.lang.Specification
 
+import static org.onap.cps.spi.CascadeDeleteAllowed.CASCADE_DELETE_ALLOWED
+
 class NetworkCmProxyDataServiceImplRegistrationSpec extends Specification {
 
     @Shared
@@ -40,6 +43,7 @@ class NetworkCmProxyDataServiceImplRegistrationSpec extends Specification {
     def cmHandlesArray = ['cmHandle001']
 
     def mockCpsDataService = Mock(CpsDataService)
+    def mockCpsModuleService = Mock(CpsModuleService)
     def spyObjectMapper = Spy(ObjectMapper)
 
     def noTimestamp = null
@@ -62,16 +66,18 @@ class NetworkCmProxyDataServiceImplRegistrationSpec extends Specification {
         and: 'update node and child data nodes is invoked with correct parameters'
             expectedCallsToUpdateNode * mockCpsDataService.updateNodeLeavesAndExistingDescendantLeaves('NCMP-Admin',
                     'ncmp-dmi-registry', '/dmi-registry', expectedJsonData, noTimestamp)
-        and : 'delete list or list element is invoked with the correct parameters'
-            expectedCallsToDeleteListElement * mockCpsDataService.deleteListOrListElement('NCMP-Admin',
+        and: 'delete schema set is invoked with the correct parameters'
+            expectedCallsToDeleteSchemaSetAndListElement * mockCpsModuleService.deleteSchemaSet('NFP-Operational', 'cmHandle001', CASCADE_DELETE_ALLOWED)
+        and: 'delete list or list element is invoked with the correct parameters'
+            expectedCallsToDeleteSchemaSetAndListElement * mockCpsDataService.deleteListOrListElement('NCMP-Admin',
                     'ncmp-dmi-registry', "/dmi-registry/cm-handles[@id='cmHandle001']", noTimestamp)
         where:
-            scenario                        | createdCmHandles      | updatedCmHandles      | removedCmHandles || expectedCallsToSaveNode   | expectedCallsToUpdateNode | expectedCallsToDeleteListElement
-            '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
-            'no valid data'                 | null                  | null                  |  null            || 0                         | 0                         | 0
+            scenario                    | createdCmHandles      | updatedCmHandles      | removedCmHandles || expectedCallsToSaveNode | expectedCallsToUpdateNode | expectedCallsToDeleteSchemaSetAndListElement
+            '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
+            'no valid data'             | null                  | null                  | null             || 0                       | 0                         | 0
     }
 
     def 'Register a DMI Plugin for the given cm-handle(s) without additional properties.'() {
@@ -159,7 +165,7 @@ class NetworkCmProxyDataServiceImplRegistrationSpec extends Specification {
     }
 
     def getObjectUnderTestWithModelSyncDisabled() {
-        def objectUnderTest = Spy(new NetworkCmProxyDataServiceImpl(null, null, null,
+        def objectUnderTest = Spy(new NetworkCmProxyDataServiceImpl(null, null, mockCpsModuleService,
                 mockCpsDataService, null, null, spyObjectMapper))
         objectUnderTest.syncModulesAndCreateAnchor(*_) >> null
         return objectUnderTest
index 1339d15..84f4c88 100755 (executable)
@@ -35,6 +35,7 @@ Bug Fixes
 
    - `CPS-762 <https://jira.onap.org/browse/CPS-762>`_ Query cm handles for module names returns incorrect cm handle identifiers
    - `CPS-788 <https://jira.onap.org/browse/CPS-788>`_ Yang Resource formatting is incorrect
+   - `CPS-783 <https://jira.onap.org/browse/CPS-783>`_ Remove cm handle does not completely remove all cm handle information
 
 Known Limitations, Issues and Workarounds
 -----------------------------------------