aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkissand <andras.zoltan.kiss@est.tech>2022-06-02 16:26:23 +0200
committerkissand <andras.zoltan.kiss@est.tech>2022-06-09 15:26:38 +0200
commit2beebc64abb031ee98578ad2431ec2c0ca521567 (patch)
treed4238976ea4a4349ac4c8a599d14f4d59eb89ba9
parent1410509e33142c0c79ff0e111c63abc47f5936d3 (diff)
Handle errors during cm handle search
Issue-ID: CPS-1067 Change-Id: Iadc3413a29f9a455e658ec5bcaffc4881b7f7684 Signed-off-by: kissand <andras.zoltan.kiss@est.tech>
-rwxr-xr-xcps-ncmp-rest/docs/openapi/ncmp.yml4
-rw-r--r--cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy8
-rwxr-xr-xcps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java12
-rw-r--r--cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsAdminPersistenceServiceSpec.groovy25
-rwxr-xr-xcps-service/src/main/java/org/onap/cps/spi/CpsAdminPersistenceService.java2
5 files changed, 25 insertions, 26 deletions
diff --git a/cps-ncmp-rest/docs/openapi/ncmp.yml b/cps-ncmp-rest/docs/openapi/ncmp.yml
index 7a894f5196..3259032f28 100755
--- a/cps-ncmp-rest/docs/openapi/ncmp.yml
+++ b/cps-ncmp-rest/docs/openapi/ncmp.yml
@@ -248,7 +248,7 @@ fetchModuleReferencesByCmHandle:
searchCmHandles:
post:
- description: Execute cm handle query search, to be included in the result a cm-handle must fulfill ALL the conditions listed here
+ description: Execute cm handle query search, to be included in the result a cm-handle must fulfill ALL the conditions listed here, if one of the given module names does not exists, return with an empty collection.
tags:
- network-cm-proxy
summary: Execute cm handle search using the available conditions
@@ -321,7 +321,7 @@ getCmHandlePropertiesById:
searchCmHandleIds:
post:
- description: Execute cm handle query search, to be included in the result a cm-handle must fulfill ALL the conditions listed here
+ description: Execute cm handle query search, to be included in the result a cm-handle must fulfill ALL the conditions listed here, if one of the given module names does not exists, return with an empty collection.
tags:
- network-cm-proxy
summary: Execute cm handle query upon a given set of query parameters
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 cc183a3b0c..84e73b2f07 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
@@ -245,21 +245,21 @@ class NetworkCmProxyDataServiceImplSpec extends Specification {
'some-cm-handle-id')
}
- def 'Execute cm handle id search'(){
+ def 'Execute cm handle id search'() {
given: 'valid CmHandleQueryApiParameters input'
def cmHandleQueryApiParameters = new CmHandleQueryApiParameters()
def conditionApiProperties = new ConditionApiProperties()
conditionApiProperties.conditionName = 'hasAllModules'
- conditionApiProperties.conditionParameters = [[moduleName:'module-name-1']]
+ conditionApiProperties.conditionParameters = [[moduleName: 'module-name-1']]
cmHandleQueryApiParameters.cmHandleQueryParameters = [conditionApiProperties]
and: 'valid CmHandleQueryParameters input'
def cmHandleQueryParameters = new CmHandleQueryParameters()
def conditionProperties = new ConditionProperties()
conditionProperties.conditionName = 'hasAllModules'
- conditionProperties.conditionParameters = [[moduleName:'module-name-1']]
+ conditionProperties.conditionParameters = [[moduleName: 'module-name-1']]
cmHandleQueryParameters.cmHandleQueryParameters = [conditionProperties]
and: 'query cm handle method return with a data node list'
- mockCpsCmHandlerQueryService.queryCmHandles(cmHandleQueryParameters) >> [ new DataNode(leaves: [id:'cm-handle-id-1'] )]
+ mockCpsCmHandlerQueryService.queryCmHandles(cmHandleQueryParameters) >> [new DataNode(leaves: [id: 'cm-handle-id-1'])]
when: 'execute cm handle search is called'
def result = objectUnderTest.executeCmHandleIdSearch(cmHandleQueryApiParameters)
then: 'result is the same collection as returned by the CPS Data Service'
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java
index 047ec9976f..20a39f98e3 100755
--- a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java
@@ -23,10 +23,12 @@
package org.onap.cps.spi.impl;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import javax.transaction.Transactional;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.onap.cps.spi.CpsAdminPersistenceService;
import org.onap.cps.spi.entities.AnchorEntity;
import org.onap.cps.spi.entities.DataspaceEntity;
@@ -34,6 +36,7 @@ import org.onap.cps.spi.entities.SchemaSetEntity;
import org.onap.cps.spi.entities.YangResourceModuleReference;
import org.onap.cps.spi.exceptions.AlreadyDefinedException;
import org.onap.cps.spi.exceptions.DataspaceInUseException;
+import org.onap.cps.spi.exceptions.DataspaceNotFoundException;
import org.onap.cps.spi.exceptions.ModuleNamesNotFoundException;
import org.onap.cps.spi.model.Anchor;
import org.onap.cps.spi.repository.AnchorRepository;
@@ -43,6 +46,7 @@ import org.onap.cps.spi.repository.YangResourceRepository;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Component;
+@Slf4j
@Component
@RequiredArgsConstructor
public class CpsAdminPersistenceServiceImpl implements CpsAdminPersistenceService {
@@ -113,7 +117,13 @@ public class CpsAdminPersistenceServiceImpl implements CpsAdminPersistenceServic
@Override
public Collection<Anchor> queryAnchors(final String dataspaceName, final Collection<String> inputModuleNames) {
- validateDataspaceAndModuleNames(dataspaceName, inputModuleNames);
+ try {
+ validateDataspaceAndModuleNames(dataspaceName, inputModuleNames);
+ } catch (DataspaceNotFoundException | ModuleNamesNotFoundException e) {
+ log.info("Module search encountered unknown dataspace or modulename, treating this as nothing found");
+ return Collections.emptySet();
+ }
+
final DataspaceEntity dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
final Collection<AnchorEntity> anchorEntities = anchorRepository
.getAnchorsByDataspaceIdAndModuleNames(dataspaceEntity.getId(), inputModuleNames, inputModuleNames.size());
diff --git a/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsAdminPersistenceServiceSpec.groovy b/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsAdminPersistenceServiceSpec.groovy
index ee478b825b..e037350038 100644
--- a/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsAdminPersistenceServiceSpec.groovy
+++ b/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsAdminPersistenceServiceSpec.groovy
@@ -174,28 +174,17 @@ class CpsAdminPersistenceServiceSpec extends CpsPersistenceSpecBase {
@Sql([CLEAR_DATA, SAMPLE_DATA_FOR_ANCHORS_WITH_MODULES])
def 'Query anchors that have #scenario.'() {
when: 'all anchor are retrieved for the given dataspace name and module names'
- def anchors = objectUnderTest.queryAnchors('dataspace-1', inputModuleNames)
+ def anchors = objectUnderTest.queryAnchors(inputDataspaceName, inputModuleNames)
then: 'the expected anchors are returned'
anchors.size() == expectedAnchors.size()
anchors.containsAll(expectedAnchors)
where: 'the following data is used'
- scenario | inputModuleNames || expectedAnchors
- 'one module' | ['module-name-1'] || [buildAnchor('anchor-2', 'dataspace-1', 'schema-set-2'), buildAnchor('anchor-1', 'dataspace-1', 'schema-set-1')]
- 'two modules' | ['module-name-1', 'module-name-2'] || [buildAnchor('anchor-2', 'dataspace-1', 'schema-set-2'), buildAnchor('anchor-1', 'dataspace-1', 'schema-set-1')]
- 'no anchors for all three modules' | ['module-name-1', 'module-name-2', 'module-name-3'] || []
- }
-
- @Sql([CLEAR_DATA, SAMPLE_DATA_FOR_ANCHORS_WITH_MODULES])
- def 'Query all anchors for an #scenario.'() {
- when: 'attempt to query anchors'
- objectUnderTest.queryAnchors(dataspaceName, moduleNames)
- then: 'the correct exception is thrown with the relevant details'
- def thrownException = thrown(expectedException)
- thrownException.details.contains(expectedMessageDetails)
- where: 'the following data is used'
- scenario | dataspaceName | moduleNames || expectedException | expectedMessageDetails | messageDoesNotContain
- 'unknown dataspace' | 'db-does-not-exist' | ['does-not-matter'] || DataspaceNotFoundException | 'db-does-not-exist' | 'does-not-matter'
- 'unknown module and known module' | 'dataspace-1' | ['module-name-1', 'module-does-not-exist'] || ModuleNamesNotFoundException | 'module-does-not-exist' | 'module-name-1'
+ scenario | inputDataspaceName | inputModuleNames || expectedAnchors
+ 'one module' | 'dataspace-1' | ['module-name-1'] || [buildAnchor('anchor-2', 'dataspace-1', 'schema-set-2'), buildAnchor('anchor-1', 'dataspace-1', 'schema-set-1')]
+ 'two modules' | 'dataspace-1' | ['module-name-1', 'module-name-2'] || [buildAnchor('anchor-2', 'dataspace-1', 'schema-set-2'), buildAnchor('anchor-1', 'dataspace-1', 'schema-set-1')]
+ 'no anchors for all three modules' | 'dataspace-1' | ['module-name-1', 'module-name-2', 'module-name-3'] || []
+ 'unknown dataspace' | 'db-does-not-exist' | ['does-not-matter'] || []
+ 'unknown module and known module' | 'dataspace-1' | ['module-name-1', 'module-does-not-exist'] || []
}
def buildAnchor(def anchorName, def dataspaceName, def SchemaSetName) {
diff --git a/cps-service/src/main/java/org/onap/cps/spi/CpsAdminPersistenceService.java b/cps-service/src/main/java/org/onap/cps/spi/CpsAdminPersistenceService.java
index b0d28ea5fc..db2d2b2d49 100755
--- a/cps-service/src/main/java/org/onap/cps/spi/CpsAdminPersistenceService.java
+++ b/cps-service/src/main/java/org/onap/cps/spi/CpsAdminPersistenceService.java
@@ -74,7 +74,7 @@ public interface CpsAdminPersistenceService {
/**
* Query anchor names for the given module names in the provided dataspace.
- *
+ * If dataspace or one of the given module names does not exists, return with an empty collection.
*
* @param dataspaceName dataspace name
* @param moduleNames a collection of module names