aboutsummaryrefslogtreecommitdiffstats
path: root/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiModelOperationsSpec.groovy
diff options
context:
space:
mode:
Diffstat (limited to 'cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiModelOperationsSpec.groovy')
-rw-r--r--cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiModelOperationsSpec.groovy101
1 files changed, 84 insertions, 17 deletions
diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiModelOperationsSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiModelOperationsSpec.groovy
index d9d12711f..335bc062c 100644
--- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiModelOperationsSpec.groovy
+++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiModelOperationsSpec.groovy
@@ -41,8 +41,41 @@ class DmiModelOperationsSpec extends DmiOperationsBaseSpec {
@Autowired
DmiModelOperations objectUnderTest
- def 'Module references for a persistence cm handle #scenario.'() {
- given: 'a persistence cm handle for #cmHandleId'
+ def 'Retrieving module references.'() {
+ given: 'a persistence cm handle'
+ mockPersistenceCmHandleRetrieval([])
+ and: 'a positive response from dmi service when it is called with the expected parameters'
+ def moduleReferencesAsLisOfMaps = [[moduleName:'mod1',revision:'A'],[moduleName:'mod2',revision:'X']]
+ def responseFromDmi = new ResponseEntity([schemas:moduleReferencesAsLisOfMaps], HttpStatus.OK)
+ mockDmiRestClient.postOperationWithJsonData("${dmiServiceName}/dmi/v1/ch/${cmHandleId}/modules",
+ '{"cmHandleProperties":{}}', [:]) >> responseFromDmi
+ when: 'get module references is called'
+ def result = objectUnderTest.getModuleReferences(persistenceCmHandle)
+ then: 'the result consists of expected module references'
+ assert result == [new ModuleReference(moduleName:'mod1',revision:'A'), new ModuleReference(moduleName:'mod2',revision:'X')]
+ }
+
+ def 'Retrieving module references edge case: #scenario.'() {
+ given: 'a persistence cm handle'
+ mockPersistenceCmHandleRetrieval([])
+ and: 'any response from dmi service when it is called with the expected parameters'
+ // TODO (toine): production code ignores any error code from DMI, this should be improved in future
+ def responseFromDmi = new ResponseEntity(bodyAsMap, HttpStatus.NO_CONTENT)
+ mockDmiRestClient.postOperationWithJsonData(*_) >> responseFromDmi
+ when: 'get module references is called'
+ def result = objectUnderTest.getModuleReferences(persistenceCmHandle)
+ then: 'the result is empty'
+ assert result == []
+ where: 'the dmi response body has the following content'
+ scenario | bodyAsMap
+ 'no modules' | [schemas:[]]
+ 'modules null' | [schemas:null]
+ 'no schema' | [something:'else']
+ 'no body' | null
+ }
+
+ def 'Retrieving module references, additional property handling: #scenario.'() {
+ given: 'a persistence cm handle'
mockPersistenceCmHandleRetrieval(additionalPropertiesObject)
and: 'a positive response from dmi service when it is called with tha expected parameters'
def responseFromDmi = new ResponseEntity<String>(HttpStatus.OK)
@@ -51,35 +84,69 @@ class DmiModelOperationsSpec extends DmiOperationsBaseSpec {
when: 'a get module references is called'
def result = objectUnderTest.getModuleReferences(persistenceCmHandle)
then: 'the result is the response from dmi service'
- assert result == responseFromDmi
- where:
+ assert result == []
+ where: 'the following additional properties are used'
scenario | additionalPropertiesObject || expectedAdditionalPropertiesInRequest
'with properties' | [sampleAdditionalProperty] || '{"prop1":"val1"}'
- 'with null properties' | null || "{}"
- 'without properties' | [] || "{}"
+ 'with null properties' | null || '{}'
+ 'without properties' | [] || '{}'
}
- def 'New yang resources from dmi using persistence cm handle #scenario.'() {
- given: 'a persistence cm handle for #cmHandleId'
- mockPersistenceCmHandleRetrieval(additionalPropertiesObject)
+ def 'Retrieving yang resources.'() {
+ given: 'a persistence cm handle'
+ mockPersistenceCmHandleRetrieval([])
and: 'a positive response from dmi service when it is called with tha expected parameters'
- def responseFromDmi = new ResponseEntity<String>(HttpStatus.OK)
+ def responseFromDmi = new ResponseEntity([[moduleName: 'mod1', revision: 'A', yangSource: 'some yang source'],
+ [moduleName: 'mod2', revision: 'C', yangSource: 'other yang source']], HttpStatus.OK)
+ def expectedModuleReferencesInRequest = '{"name":"mod1","revision":"A"},{"name":"mod2","revision":"X"}'
+ mockDmiRestClient.postOperationWithJsonData("${dmiServiceName}/dmi/v1/ch/${cmHandleId}/moduleResources",
+ '{"data":{"modules":[' + expectedModuleReferencesInRequest + ']},"cmHandleProperties":{}}', [:]) >> responseFromDmi
+ when: 'get new yang resources from dmi service'
+ def result = objectUnderTest.getNewYangResourcesFromDmi(persistenceCmHandle, newModuleReferences)
+ then: 'the result has the 2 expected yang (re)sources (order is not guaranteed)'
+ assert result.size() == 2
+ assert result.get('mod1') == 'some yang source'
+ assert result.get('mod2') == 'other yang source'
+ }
+
+ def 'Retrieving yang resources, edge case: scenario.'() {
+ given: 'a persistence cm handle'
+ mockPersistenceCmHandleRetrieval([])
+ and: 'a positive response from dmi service when it is called with tha expected parameters'
+ // TODO (toine): production code ignores any error code from DMI, this should be improved in future
+ def responseFromDmi = new ResponseEntity(responseFromDmiBody, HttpStatus.NO_CONTENT)
+ mockDmiRestClient.postOperationWithJsonData(*_) >> responseFromDmi
+ when: 'get new yang resources from dmi service'
+ def result = objectUnderTest.getNewYangResourcesFromDmi(persistenceCmHandle, newModuleReferences)
+ then: 'the result is empty'
+ assert result == [:]
+ where: 'the dmi response body has the following content'
+ scenario | responseFromDmiBody
+ 'empty array' | []
+ 'null array' | null
+ }
+
+ def 'Retrieving yang resources, additional property handling #scenario.'() {
+ given: 'a persistence cm handle'
+ mockPersistenceCmHandleRetrieval(additionalPropertiesObject)
+ and: 'a positive response from dmi service when it is called with the expected parameters'
+ def responseFromDmi = new ResponseEntity<>([[moduleName: 'mod1', revision: 'A', yangSource: 'some yang source']], HttpStatus.OK)
mockDmiRestClient.postOperationWithJsonData("${dmiServiceName}/dmi/v1/ch/${cmHandleId}/moduleResources",
'{"data":{"modules":[' + expectedModuleReferencesInRequest + ']},"cmHandleProperties":'+expectedAdditionalPropertiesInRequest+'}',
[:]) >> responseFromDmi
when: 'get new yang resources from dmi service'
def result = objectUnderTest.getNewYangResourcesFromDmi(persistenceCmHandle, unknownModuleReferences)
then: 'the result is the response from dmi service'
- assert result == responseFromDmi
- where:
+ assert result == [mod1:'some yang source']
+ where: 'the following additional properties are used'
scenario | additionalPropertiesObject | unknownModuleReferences || expectedAdditionalPropertiesInRequest | expectedModuleReferencesInRequest
'with module references and properties' | [sampleAdditionalProperty] | newModuleReferences || '{"prop1":"val1"}' | '{"name":"mod1","revision":"A"},{"name":"mod2","revision":"X"}'
'without module references' | [sampleAdditionalProperty] | [] || '{"prop1":"val1"}' | ''
'without properties' | [] | newModuleReferences || '{}' | '{"name":"mod1","revision":"A"},{"name":"mod2","revision":"X"}'
}
- def 'New yang resources from dmi with additional properties null'() {
- given: 'a persistence cm handle for #cmHandleId'
+ def 'Retrieving yang resources from dmi with additional properties null.'() {
+ given: 'a persistence cm handle'
mockPersistenceCmHandleRetrieval(null)
when: 'a get new yang resources from dmi is called'
objectUnderTest.getNewYangResourcesFromDmi(persistenceCmHandle, [])
@@ -87,8 +154,8 @@ class DmiModelOperationsSpec extends DmiOperationsBaseSpec {
thrown(NullPointerException)
}
- def 'Json Processing Exception'() {
- given: 'a persistence cm handle for #cmHandleId'
+ def 'Retrieving module references with Json processing exception.'() {
+ given: 'a persistence cm handle'
mockPersistenceCmHandleRetrieval([])
and: 'a Json processing exception occurs'
spyObjectMapper.writeValueAsString(_) >> {throw (new JsonProcessingException(''))}
@@ -97,7 +164,7 @@ class DmiModelOperationsSpec extends DmiOperationsBaseSpec {
then: 'an ncmp exception is thrown'
def exceptionThrown = thrown(NcmpException)
and: 'the message indicates a parsing error'
- exceptionThrown.message.toLowerCase().contains("parsing error")
+ exceptionThrown.message.toLowerCase().contains('parsing error')
}
}