summaryrefslogtreecommitdiffstats
path: root/cps-ncmp-rest/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'cps-ncmp-rest/src/test')
-rw-r--r--cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryControllerSpec.groovy64
-rw-r--r--cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/RestInputMapperSpec.groovy64
-rw-r--r--cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy10
-rw-r--r--cps-ncmp-rest/src/test/resources/dmi-registration.json14
-rw-r--r--cps-ncmp-rest/src/test/resources/dmi_registration_all_singing_and_dancing.json43
-rw-r--r--cps-ncmp-rest/src/test/resources/dmi_registration_combined_valid.json8
-rw-r--r--cps-ncmp-rest/src/test/resources/dmi_registration_updates_only.json12
-rw-r--r--cps-ncmp-rest/src/test/resources/dmi_registration_without_properties.json10
8 files changed, 171 insertions, 54 deletions
diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryControllerSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryControllerSpec.groovy
index 3c603ed425..079554a22d 100644
--- a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryControllerSpec.groovy
+++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryControllerSpec.groovy
@@ -24,8 +24,9 @@ package org.onap.cps.ncmp.rest.controller
import com.fasterxml.jackson.databind.ObjectMapper
import org.onap.cps.TestUtils
import org.onap.cps.ncmp.api.NetworkCmProxyDataService
-import org.onap.cps.ncmp.api.models.CmHandle
import org.onap.cps.ncmp.api.models.DmiPluginRegistration
+import org.onap.cps.ncmp.rest.model.RestDmiPluginRegistration
+import org.onap.cps.utils.JsonObjectMapper
import org.spockframework.spring.SpringBean
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Value
@@ -47,46 +48,51 @@ class NetworkCmProxyInventoryControllerSpec extends Specification {
@SpringBean
NetworkCmProxyDataService mockNetworkCmProxyDataService = Mock()
+ @SpringBean
+ RestInputMapper restInputMapper = Mock()
+
+ DmiPluginRegistration mockDmiPluginRegistration = Mock()
+
+ JsonObjectMapper jsonObjectMapper = new JsonObjectMapper(new ObjectMapper())
+
@Value('${rest.api.ncmp-inventory-base-path}/v1')
def ncmpBasePathV1
- def 'Register CM Handle Event' () {
- given: 'jsonData'
- def jsonData = TestUtils.getResourceFileContent('dmi-registration.json')
- when: 'post request is performed'
+ def 'Dmi plugin registration #scenario' () {
+ given: 'a dmi plugin registration with #scenario'
+ def jsonData = TestUtils.getResourceFileContent(dmiRegistrationJson)
+ and: 'the expected rest input as an object'
+ def expectedRestDmiPluginRegistration = jsonObjectMapper.convertJsonString(jsonData, RestDmiPluginRegistration)
+ and: 'the converter returns a dmi registration (only for the expected input object)'
+ restInputMapper.toDmiPluginRegistration(expectedRestDmiPluginRegistration) >> mockDmiPluginRegistration
+ when: 'post request is performed & registration is called with correct DMI plugin information'
def response = mvc.perform(
post("$ncmpBasePathV1/ch")
- .contentType(MediaType.APPLICATION_JSON)
- .content(jsonData)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(jsonData)
).andReturn().response
- then: 'the cm handles are registered with the service'
- 1 * mockNetworkCmProxyDataService.updateDmiRegistrationAndSyncModule(_)
- and: 'response status is No Content'
- response.status == HttpStatus.NO_CONTENT.value()
+ then: 'the converted object is forwarded to the registration service'
+ 1 * mockNetworkCmProxyDataService.updateDmiRegistrationAndSyncModule(mockDmiPluginRegistration)
+ and: 'response status is no content'
+ response.status == HttpStatus.NO_CONTENT.value()
+ where: 'the following registration json is used'
+ scenario | dmiRegistrationJson
+ 'multiple services, added, updated and removed cm handles and many properties' | 'dmi_registration_all_singing_and_dancing.json'
+ 'updated cm handle with updated/new and removed properties' | 'dmi_registration_updates_only.json'
+ 'without any properties' | 'dmi_registration_without_properties.json'
}
- def 'Dmi plugin registration with #scenario' () {
- given: 'jsonData, cmHandle, & DmiPluginRegistration'
- def jsonData = TestUtils.getResourceFileContent('dmi_registration_combined_valid.json' )
- def cmHandle = new CmHandle(cmHandleID : 'example-name')
- def expectedDmiPluginRegistration = new DmiPluginRegistration(
- dmiPlugin: 'service1',
- dmiDataPlugin: '',
- dmiModelPlugin: '',
- createdCmHandles: [cmHandle])
+ def 'Dmi plugin registration with invalid json' () {
+ given: 'a dmi plugin registration with #scenario'
+ def jsonDataWithUndefinedDataLabel = '{"notAdmiPlugin":""}'
when: 'post request is performed & registration is called with correct DMI plugin information'
def response = mvc.perform(
post("$ncmpBasePathV1/ch")
.contentType(MediaType.APPLICATION_JSON)
- .content(jsonData)
+ .content(jsonDataWithUndefinedDataLabel)
).andReturn().response
- then: 'no NcmpException is thrown & updateDmiRegistrationAndSyncModule is called with correct parameters'
- 1 * mockNetworkCmProxyDataService.updateDmiRegistrationAndSyncModule({
- it.getDmiPlugin() == expectedDmiPluginRegistration.getDmiPlugin()
- it.getDmiDataPlugin() == expectedDmiPluginRegistration.getDmiDataPlugin()
- it.getDmiModelPlugin() == expectedDmiPluginRegistration.getDmiModelPlugin()
- it.getCreatedCmHandles().get(0).getCmHandleID() == expectedDmiPluginRegistration.getCreatedCmHandles().get(0).getCmHandleID()
- })
+ then: 'response status is bad request'
+ response.status == HttpStatus.BAD_REQUEST.value()
}
-}
+}
diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/RestInputMapperSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/RestInputMapperSpec.groovy
new file mode 100644
index 0000000000..c48a8ed360
--- /dev/null
+++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/RestInputMapperSpec.groovy
@@ -0,0 +1,64 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2022 Nordix Foundation
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.cps.ncmp.rest.controller
+
+import org.mapstruct.factory.Mappers
+import org.onap.cps.ncmp.rest.model.RestCmHandle
+import org.onap.cps.ncmp.rest.model.RestDmiPluginRegistration
+import spock.lang.Specification
+
+class RestInputMapperSpec extends Specification {
+
+ def objectUnderTest = Mappers.getMapper(RestInputMapper.class)
+
+ def 'Convert a created REST CM Handle Input to an NCMP Service CM Handle with #scenario'() {
+ given: 'a rest cm handle input'
+ def inputRestCmHandle = new RestCmHandle(cmHandle : 'example-id', cmHandleProperties: dmiProperties,
+ publicCmHandleProperties: publicProperties)
+ def restDmiPluginRegistration = new RestDmiPluginRegistration(
+ createdCmHandles: [inputRestCmHandle])
+ when: 'to plugin dmi registration is called'
+ def result = objectUnderTest.toDmiPluginRegistration(restDmiPluginRegistration)
+ then: 'the result returns the correct number of cm handles'
+ result.createdCmHandles.size() == 1
+ and: 'the converted cm handle has the same id'
+ result.createdCmHandles[0].cmHandleID == 'example-id'
+ and: '(empty) properties are converted correctly'
+ result.createdCmHandles[0].dmiProperties == expectedDmiProperties
+ result.createdCmHandles[0].publicProperties == expectedPublicProperties
+ where: 'the following parameters are used'
+ scenario | dmiProperties | publicProperties || expectedDmiProperties | expectedPublicProperties
+ 'dmi and public properties' | ['Property-Example': 'example property'] | ['Public-Property-Example': 'public example property'] || ['Property-Example': 'example property'] | ['Public-Property-Example': 'public example property']
+ 'no properties' | null | null || [:] | [:]
+ }
+
+ def 'Handling empty dmi registration'() {
+ given: 'a rest cm handle input without any cm handles'
+ def restDmiPluginRegistration = new RestDmiPluginRegistration()
+ when: 'to plugin dmi registration is called'
+ def result = objectUnderTest.toDmiPluginRegistration(restDmiPluginRegistration)
+ then: 'unspecified lists remain as empty lists'
+ assert result.createdCmHandles == []
+ assert result.updatedCmHandles == []
+ assert result.removedCmHandles == []
+ }
+
+}
diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy
index 35544d9411..306f546f32 100644
--- a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy
+++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy
@@ -27,6 +27,7 @@ import org.onap.cps.TestUtils
import org.onap.cps.ncmp.api.NetworkCmProxyDataService
import org.onap.cps.ncmp.api.impl.exception.DmiRequestException
import org.onap.cps.ncmp.api.impl.exception.ServerNcmpException
+import org.onap.cps.ncmp.rest.controller.RestInputMapper
import org.onap.cps.spi.exceptions.CpsException
import org.onap.cps.spi.exceptions.DataValidationException
import org.onap.cps.utils.JsonObjectMapper
@@ -61,6 +62,9 @@ class NetworkCmProxyRestExceptionHandlerSpec extends Specification {
@SpringBean
JsonObjectMapper jsonObjectMapper = Stub()
+ @SpringBean
+ RestInputMapper restInputMapper = Mock()
+
@Value('${rest.api.ncmp-base-path}')
def basePathNcmp
@@ -105,17 +109,17 @@ class NetworkCmProxyRestExceptionHandlerSpec extends Specification {
}
def setupTestException(exception, apiType) {
- if (NCMP.equals(apiType)) {
+ if (NCMP == apiType) {
mockNetworkCmProxyDataService.getYangResourcesModuleReferences(*_) >> { throw exception }
}
mockNetworkCmProxyDataService.updateDmiRegistrationAndSyncModule(*_) >> { throw exception }
}
def performTestRequest(apiType) {
- if (NCMP.equals(apiType)) {
+ if (NCMP == apiType) {
return mvc.perform(get("$dataNodeBaseEndpointNcmp/ch/testCmHandle/modules")).andReturn().response
}
- def jsonData = TestUtils.getResourceFileContent('dmi-registration.json')
+ def jsonData = TestUtils.getResourceFileContent('dmi_registration_all_singing_and_dancing.json')
return mvc.perform(post("$dataNodeBaseEndpointNcmpInventory/ch").contentType(MediaType.APPLICATION_JSON).content(jsonData)).andReturn().response
}
diff --git a/cps-ncmp-rest/src/test/resources/dmi-registration.json b/cps-ncmp-rest/src/test/resources/dmi-registration.json
deleted file mode 100644
index 4f27e11843..0000000000
--- a/cps-ncmp-rest/src/test/resources/dmi-registration.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "dmiPlugin": "onap-dmi-plugin",
- "createdCmHandles": [
- {
- "cmHandle": "example-name",
- "cmHandleProperties": {
- "subSystemId" : "system-001"
- },
- "publicCmHandleProperties": {
- "area" : "south"
- }
- }
- ]
-} \ No newline at end of file
diff --git a/cps-ncmp-rest/src/test/resources/dmi_registration_all_singing_and_dancing.json b/cps-ncmp-rest/src/test/resources/dmi_registration_all_singing_and_dancing.json
new file mode 100644
index 0000000000..fd8b56b02d
--- /dev/null
+++ b/cps-ncmp-rest/src/test/resources/dmi_registration_all_singing_and_dancing.json
@@ -0,0 +1,43 @@
+{
+ "dmiDataPlugin":"service2",
+ "dmiModelPlugin":"service3",
+ "createdCmHandles":[
+ {
+ "cmHandle":"ch1(new)",
+ "cmHandleProperties":{
+ "dmiProp1":"ch1-dmi1",
+ "dmiProp2":"ch1-dmi2"
+ },
+ "publicCmHandleProperties":{
+ "pubProp1":"ch1-pub1",
+ "pubProp2":"ch1-pub2"
+ }
+ },
+ {
+ "cmHandle":"ch2(new)",
+ "cmHandleProperties":{
+ "dmiProp1":"ch2-dmi1",
+ "dmiProp2":"ch2-dmi2"
+ },
+ "publicCmHandleProperties":{
+ "pubProp1":"ch2-pub1",
+ "pubProp2":"ch2-pub2"
+ }
+ }
+ ],
+ "updatedCmHandles":[
+ {
+ "cmHandle":"ch3(upd)",
+ "cmHandleProperties":{
+ "dmiProp1":"ch3-dmi1"
+ },
+ "publicCmHandleProperties":{
+ "pubProp2":"ch3-pub1"
+ }
+ }
+ ],
+ "removedCmHandles":[
+ "ch4",
+ "ch5"
+ ]
+}
diff --git a/cps-ncmp-rest/src/test/resources/dmi_registration_combined_valid.json b/cps-ncmp-rest/src/test/resources/dmi_registration_combined_valid.json
deleted file mode 100644
index bded4f215c..0000000000
--- a/cps-ncmp-rest/src/test/resources/dmi_registration_combined_valid.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "dmiPlugin": "service1",
- "dmiDataPlugin": "",
- "dmiModelPlugin": "",
- "createdCmHandles": [{
- "cmHandle": "example-name"
- }]
-} \ No newline at end of file
diff --git a/cps-ncmp-rest/src/test/resources/dmi_registration_updates_only.json b/cps-ncmp-rest/src/test/resources/dmi_registration_updates_only.json
new file mode 100644
index 0000000000..58a1a9836b
--- /dev/null
+++ b/cps-ncmp-rest/src/test/resources/dmi_registration_updates_only.json
@@ -0,0 +1,12 @@
+{
+ "dmiPlugin": "service1",
+ "updatedCmHandles":[
+ {
+ "cmHandle":"ch3(upd)",
+ "cmHandleProperties":{
+ "dmiProp1":"ch3-dmi1",
+ "dmiProp2":null
+ }
+ }
+ ]
+}
diff --git a/cps-ncmp-rest/src/test/resources/dmi_registration_without_properties.json b/cps-ncmp-rest/src/test/resources/dmi_registration_without_properties.json
new file mode 100644
index 0000000000..395c098d21
--- /dev/null
+++ b/cps-ncmp-rest/src/test/resources/dmi_registration_without_properties.json
@@ -0,0 +1,10 @@
+{
+ "dmiPlugin":"",
+ "dmiDataPlugin":"service2",
+ "dmiModelPlugin":"service3",
+ "createdCmHandles":[
+ {
+ "cmHandle": "ch1(new)"
+ }
+ ]
+}