From 34a94b92edd0c359291445735eb3d7e974deea1f Mon Sep 17 00:00:00 2001 From: tragait Date: Tue, 30 Mar 2021 12:02:27 +0100 Subject: rename nf-proxy to network-cm-proxy This commit renames two modules cps-nf-proxy-rest and cps-nf-proxy-service to cps-ncmp-rest, cps-ncmp-service. Docker image names are also changed respectively. Swagger auto generated api files are also modified. Signed-off-by: tragait Issue-ID: CPS-315 Change-Id: Ic2a2f8c4bafe8cffa3c83ccb52499720aaba1415 --- cps-application/pom.xml | 15 ++- cps-bom/pom.xml | 22 +++- cps-ncmp-rest/docs/openapi/components.yaml | 124 ++++++++++++++++++ cps-ncmp-rest/docs/openapi/ncmproxy.yml | 119 ++++++++++++++++++ cps-ncmp-rest/docs/openapi/openapi.yml | 33 +++++ cps-ncmp-rest/pom.xml | 136 ++++++++++++++++++++ .../onap/cps/ncmp/config/NetworkCmProxyConfig.java | 47 +++++++ .../rest/controller/NetworkCmProxyController.java | 85 +++++++++++++ .../NetworkCmProxyRestExceptionHandler.java | 71 +++++++++++ .../src/main/resources/openapi-configuration.json | 28 +++++ .../ncmp/config/NetworkCmProxyConfigSpec.groovy | 33 +++++ .../controller/NetworkCmProxyControllerSpec.groovy | 138 +++++++++++++++++++++ .../NetworkCmProxyRestExceptionHandlerSpec.groovy | 98 +++++++++++++++ .../test/java/org/onap/cps/TestApplication.java | 30 +++++ cps-ncmp-rest/src/test/resources/application.yml | 21 ++++ cps-ncmp-service/pom.xml | 51 ++++++++ .../cps/ncmp/api/NetworkCmProxyDataService.java | 79 ++++++++++++ .../api/impl/NetworkCmProxyDataServiceImpl.java | 64 ++++++++++ .../impl/NetworkCmProxyDataServiceImplSpec.groovy | 71 +++++++++++ cps-nf-proxy-rest/docs/openapi/components.yaml | 107 ---------------- cps-nf-proxy-rest/docs/openapi/openapi.yml | 16 --- cps-nf-proxy-rest/docs/openapi/xnfProxy.yml | 102 --------------- cps-nf-proxy-rest/pom.xml | 113 ----------------- .../org/onap/cps/nfproxy/config/NfProxyConfig.java | 46 ------- .../nfproxy/rest/controller/NfProxyController.java | 85 ------------- .../exceptions/NfProxyRestExceptionHandler.java | 71 ----------- .../src/main/resources/openapi-configuration.json | 28 ----- .../cps/nfproxy/config/NfProxyConfigSpec.groovy | 32 ----- .../rest/controller/NfProxyControllerSpec.groovy | 138 --------------------- .../NfProxyRestExceptionHandlerSpec.groovy | 97 --------------- .../test/java/org/onap/cps/TestApplication.java | 30 ----- .../src/test/resources/application.yml | 5 - cps-nf-proxy-service/pom.xml | 34 ----- .../onap/cps/nfproxy/api/NfProxyDataService.java | 79 ------------ .../nfproxy/api/impl/NfProxyDataServiceImpl.java | 64 ---------- .../cps/api/impl/NfProxyDataServiceImplSpec.groovy | 71 ----------- cps-parent/pom.xml | 4 +- docker-compose/README.md | 10 +- docker-compose/application.yml | 19 ++- docker-compose/docker-compose.yml | 15 +-- pom.xml | 5 +- 41 files changed, 1293 insertions(+), 1143 deletions(-) create mode 100644 cps-ncmp-rest/docs/openapi/components.yaml create mode 100644 cps-ncmp-rest/docs/openapi/ncmproxy.yml create mode 100755 cps-ncmp-rest/docs/openapi/openapi.yml create mode 100644 cps-ncmp-rest/pom.xml create mode 100644 cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/config/NetworkCmProxyConfig.java create mode 100644 cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java create mode 100755 cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandler.java create mode 100644 cps-ncmp-rest/src/main/resources/openapi-configuration.json create mode 100644 cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/config/NetworkCmProxyConfigSpec.groovy create mode 100644 cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy create mode 100644 cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy create mode 100644 cps-ncmp-rest/src/test/java/org/onap/cps/TestApplication.java create mode 100644 cps-ncmp-rest/src/test/resources/application.yml create mode 100644 cps-ncmp-service/pom.xml create mode 100644 cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java create mode 100755 cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java create mode 100644 cps-ncmp-service/src/test/groovy/org/onap/cps/api/impl/NetworkCmProxyDataServiceImplSpec.groovy delete mode 100644 cps-nf-proxy-rest/docs/openapi/components.yaml delete mode 100755 cps-nf-proxy-rest/docs/openapi/openapi.yml delete mode 100644 cps-nf-proxy-rest/docs/openapi/xnfProxy.yml delete mode 100755 cps-nf-proxy-rest/pom.xml delete mode 100644 cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/config/NfProxyConfig.java delete mode 100644 cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/rest/controller/NfProxyController.java delete mode 100755 cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/rest/exceptions/NfProxyRestExceptionHandler.java delete mode 100644 cps-nf-proxy-rest/src/main/resources/openapi-configuration.json delete mode 100644 cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/config/NfProxyConfigSpec.groovy delete mode 100644 cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/rest/controller/NfProxyControllerSpec.groovy delete mode 100644 cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/rest/exceptions/NfProxyRestExceptionHandlerSpec.groovy delete mode 100644 cps-nf-proxy-rest/src/test/java/org/onap/cps/TestApplication.java delete mode 100644 cps-nf-proxy-rest/src/test/resources/application.yml delete mode 100644 cps-nf-proxy-service/pom.xml delete mode 100644 cps-nf-proxy-service/src/main/java/org/onap/cps/nfproxy/api/NfProxyDataService.java delete mode 100755 cps-nf-proxy-service/src/main/java/org/onap/cps/nfproxy/api/impl/NfProxyDataServiceImpl.java delete mode 100644 cps-nf-proxy-service/src/test/groovy/org/onap/cps/api/impl/NfProxyDataServiceImplSpec.groovy diff --git a/cps-application/pom.xml b/cps-application/pom.xml index fa4b5ef4a..64921f633 100755 --- a/cps-application/pom.xml +++ b/cps-application/pom.xml @@ -3,6 +3,7 @@ ============LICENSE_START======================================================= Copyright (c) 2021 Pantheon.tech. Modifications Copyright (C) 2021 Bell Canada. + Modification Copyright (C) 2021 Nordix Foundation ================================================================================ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -185,19 +186,20 @@ - xnf-docker + ncmp-docker false - cps-nf-proxy + cps-ncmp ${project.groupId} - cps-nf-proxy-rest + cps-ncmp-rest + ${project.version} ${project.groupId} @@ -214,13 +216,13 @@ - cps-xnf-docker + cps-ncmp-docker true - cps-and-nf-proxy + cps-and-ncmp @@ -230,7 +232,8 @@ ${project.groupId} - cps-nf-proxy-rest + cps-ncmp-rest + ${project.version} ${project.groupId} diff --git a/cps-bom/pom.xml b/cps-bom/pom.xml index ebd18d9d7..12961b8fd 100644 --- a/cps-bom/pom.xml +++ b/cps-bom/pom.xml @@ -1,4 +1,22 @@ + + @@ -44,12 +62,12 @@ ${project.groupId} - cps-nf-proxy-service + cps-ncmp-service ${project.version} ${project.groupId} - cps-nf-proxy-rest + cps-ncmp-rest ${project.version} diff --git a/cps-ncmp-rest/docs/openapi/components.yaml b/cps-ncmp-rest/docs/openapi/components.yaml new file mode 100644 index 000000000..69c37ad7a --- /dev/null +++ b/cps-ncmp-rest/docs/openapi/components.yaml @@ -0,0 +1,124 @@ +# ============LICENSE_START======================================================= +# Modification (C) 2021 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========================================================= + +components: + schemas: + ErrorMessage: + type: object + title: Error + properties: + status: + type: string + message: + type: string + details: + type: string + MultipartFile: + required: + - file + properties: + multipartFile: + type: string + description: multipartFile + format: binary + + parameters: + cmHandleInPath: + name: cm-handle + in: path + description: The identifier for a network function, network element, subnetwork or any other cm object by managed Network CM Proxy + required: true + schema: + type: string + xpathInQuery: + name: xpath + in: query + description: xpath + required: false + schema: + type: string + default: / + includeDescendantsOptionInQuery: + name: include-descendants + in: query + description: include-descendants + required: false + schema: + type: boolean + default: false + cpsPathInQuery: + name: cps-path + in: query + description: cps-path + required: false + schema: + type: string + default: / + + + responses: + NotFound: + description: The specified resource was not found + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + Unauthorized: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + Forbidden: + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + BadRequest: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + Conflict: + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + NotImplemented: + description: The given path has not been implemented + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + Ok: + description: OK + content: + application/json: + schema: + type: object + Created: + description: Created + content: + text/plain: + schema: + type: string + NoContent: + description: No Content + content: {} diff --git a/cps-ncmp-rest/docs/openapi/ncmproxy.yml b/cps-ncmp-rest/docs/openapi/ncmproxy.yml new file mode 100644 index 000000000..2a70d70a6 --- /dev/null +++ b/cps-ncmp-rest/docs/openapi/ncmproxy.yml @@ -0,0 +1,119 @@ +# ============LICENSE_START======================================================= +# Modification (C) 2021 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========================================================= + +nodeByCmHandleAndXpath: + get: + description: Get a node with an option to retrieve all the children for a given cm Handle + tags: + - network-cm-proxy + summary: Get a node given a cm Handle and xpath + operationId: getNodeByCmHandleAndXpath + parameters: + - $ref: 'components.yaml#/components/parameters/cmHandleInPath' + - $ref: 'components.yaml#/components/parameters/xpathInQuery' + - $ref: 'components.yaml#/components/parameters/includeDescendantsOptionInQuery' + responses: + 200: + $ref: 'components.yaml#/components/responses/Ok' + 400: + $ref: 'components.yaml#/components/responses/BadRequest' + 401: + $ref: 'components.yaml#/components/responses/Unauthorized' + 403: + $ref: 'components.yaml#/components/responses/Forbidden' + 404: + $ref: 'components.yaml#/components/responses/NotFound' + 501: + $ref: 'components.yaml#/components/responses/NotImplemented' + +nodesByCmHandleAndCpsPath: + get: + description: Query nodes for the given cps path and cm Handle + tags: + - network-cm-proxy + summary: Query data nodes + operationId: queryNodesByCmHandleAndCpsPath + parameters: + - $ref: 'components.yaml#/components/parameters/cmHandleInPath' + - $ref: 'components.yaml#/components/parameters/cpsPathInQuery' + - $ref: 'components.yaml#/components/parameters/includeDescendantsOptionInQuery' + responses: + 200: + $ref: 'components.yaml#/components/responses/Ok' + 400: + $ref: 'components.yaml#/components/responses/BadRequest' + 401: + $ref: 'components.yaml#/components/responses/Unauthorized' + 403: + $ref: 'components.yaml#/components/responses/Forbidden' + 404: + $ref: 'components.yaml#/components/responses/NotFound' + +nodesByCmHandleAndXpath: + patch: + description: Update node leaves for the given cps path and cm Handle + tags: + - network-cm-proxy + summary: Update node leaves + operationId: updateNodeLeaves + parameters: + - $ref: 'components.yaml#/components/parameters/cmHandleInPath' + - $ref: 'components.yaml#/components/parameters/xpathInQuery' + requestBody: + required: true + content: + application/json: + schema: + type: string + responses: + 200: + $ref: 'components.yaml#/components/responses/Ok' + 400: + $ref: 'components.yaml#/components/responses/BadRequest' + 401: + $ref: 'components.yaml#/components/responses/Unauthorized' + 403: + $ref: 'components.yaml#/components/responses/Forbidden' + 404: + $ref: 'components.yaml#/components/responses/NotFound' + + put: + description: Replace a node with descendants for the given cps path and cm Handle + tags: + - network-cm-proxy + summary: Replace a node with descendants + operationId: replaceNode + parameters: + - $ref: 'components.yaml#/components/parameters/cmHandleInPath' + - $ref: 'components.yaml#/components/parameters/xpathInQuery' + requestBody: + required: true + content: + application/json: + schema: + type: string + responses: + 200: + $ref: 'components.yaml#/components/responses/Ok' + 400: + $ref: 'components.yaml#/components/responses/BadRequest' + 401: + $ref: 'components.yaml#/components/responses/Unauthorized' + 403: + $ref: 'components.yaml#/components/responses/Forbidden' + 404: + $ref: 'components.yaml#/components/responses/NotFound' \ No newline at end of file diff --git a/cps-ncmp-rest/docs/openapi/openapi.yml b/cps-ncmp-rest/docs/openapi/openapi.yml new file mode 100755 index 000000000..7575022f8 --- /dev/null +++ b/cps-ncmp-rest/docs/openapi/openapi.yml @@ -0,0 +1,33 @@ +# ============LICENSE_START======================================================= +# Modification (C) 2021 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========================================================= + +openapi: 3.0.1 +info: + title: NCMP to CPS Proxy API + description: NCMP to CPS Proxy API + version: "1.0" +servers: + - url: //localhost:8088/ +paths: + /v1/cm-handles/{cm-handle}/node: + $ref: 'ncmproxy.yml#/nodeByCmHandleAndXpath' + + /v1/cm-handles/{cm-handle}/nodes/query: + $ref: 'ncmproxy.yml#/nodesByCmHandleAndCpsPath' + + /v1/cm-handles/{cm-handle}/nodes: + $ref: 'ncmproxy.yml#/nodesByCmHandleAndXpath' \ No newline at end of file diff --git a/cps-ncmp-rest/pom.xml b/cps-ncmp-rest/pom.xml new file mode 100644 index 000000000..3abeb7d1f --- /dev/null +++ b/cps-ncmp-rest/pom.xml @@ -0,0 +1,136 @@ + + + +4.0.0 + + org.onap.cps + cps-parent + 1.1.0-SNAPSHOT + ../cps-parent/pom.xml + + +cps-ncmp-rest + + + 0.0 + + + + + ${project.groupId} + cps-ncmp-service + ${project.version} + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + org.springframework.boot + spring-boot-starter-jetty + + + io.swagger.core.v3 + swagger-annotations + + + io.springfox + springfox-boot-starter + + + io.swagger + swagger-annotations + + + + org.codehaus.groovy + groovy + test + + + org.spockframework + spock-core + test + + + org.spockframework + spock-spring + test + + + cglib + cglib-nodep + test + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + com.google.code.gson + gson + + + + + + + + io.swagger.codegen.v3 + swagger-codegen-maven-plugin + + + + generate + + + ${project.basedir}/docs/openapi/openapi.yml + org.onap.cps.ncmp.rest.controller + org.onap.cps.ncmp.rest.model + org.onap.cps.ncmp.rest.api + spring + false + + src/gen/java + java11 + true + true + + + + + + + + diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/config/NetworkCmProxyConfig.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/config/NetworkCmProxyConfig.java new file mode 100644 index 000000000..300765d42 --- /dev/null +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/config/NetworkCmProxyConfig.java @@ -0,0 +1,47 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Pantheon.tech + * Modifications (C) 2021 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.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; + +@Configuration +public class NetworkCmProxyConfig { + + /** + * Swagger-ui configuration. + */ + @Bean("ncmp-docket") + public Docket api() { + return new Docket(DocumentationType.OAS_30) + .groupName("ncmp-docket") + .select() + .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.any()) + .build(); + } + +} \ No newline at end of file diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java new file mode 100644 index 000000000..acbbdd939 --- /dev/null +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java @@ -0,0 +1,85 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Pantheon.tech + * Modifications (C) 2021 Nordix Foundation + * Modification Copyright (C) 2021 highstreet technologies GmbH + * ================================================================================ + * 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 com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import java.util.Collection; +import javax.validation.Valid; +import org.onap.cps.ncmp.api.NetworkCmProxyDataService; +import org.onap.cps.ncmp.rest.api.NetworkCmProxyApi; +import org.onap.cps.spi.FetchDescendantsOption; +import org.onap.cps.spi.model.DataNode; +import org.onap.cps.utils.DataMapUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +@RestController +@RequestMapping("${rest.api.ncmp-base-path}") +public class NetworkCmProxyController implements NetworkCmProxyApi { + + private static final Gson GSON = new GsonBuilder().create(); + private static final String XPATH_ROOT = "/"; + + @Autowired + private NetworkCmProxyDataService networkCmProxyDataService; + + @Override + public ResponseEntity getNodeByCmHandleAndXpath(final String cmHandle, @Valid final String xpath, + @Valid final Boolean includeDescendants) { + if (XPATH_ROOT.equals(xpath)) { + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + } + final FetchDescendantsOption fetchDescendantsOption = Boolean.TRUE.equals(includeDescendants) + ? FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS : FetchDescendantsOption.OMIT_DESCENDANTS; + final DataNode dataNode = networkCmProxyDataService.getDataNode(cmHandle, xpath, fetchDescendantsOption); + return new ResponseEntity<>(DataMapUtils.toDataMap(dataNode), HttpStatus.OK); + } + + @Override + public ResponseEntity queryNodesByCmHandleAndCpsPath(final String cmHandle, @Valid final String cpsPath, + @Valid final Boolean includeDescendants) { + final FetchDescendantsOption fetchDescendantsOption = Boolean.TRUE.equals(includeDescendants) + ? FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS : FetchDescendantsOption.OMIT_DESCENDANTS; + final Collection dataNodes = + networkCmProxyDataService.queryDataNodes(cmHandle, cpsPath, fetchDescendantsOption); + return new ResponseEntity<>(GSON.toJson(dataNodes), HttpStatus.OK); + } + + @Override + public ResponseEntity replaceNode(@Valid final String jsonData, final String cmHandle, + @Valid final String parentNodeXpath) { + networkCmProxyDataService.replaceNodeTree(cmHandle, parentNodeXpath, jsonData); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Override + public ResponseEntity updateNodeLeaves(@Valid final String jsonData, final String cmHandle, + @Valid final String parentNodeXpath) { + networkCmProxyDataService.updateNodeLeaves(cmHandle, parentNodeXpath, jsonData); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandler.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandler.java new file mode 100755 index 000000000..bb922e781 --- /dev/null +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandler.java @@ -0,0 +1,71 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Pantheon.tech + * ================================================================================ + * 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.exceptions; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.onap.cps.ncmp.rest.controller.NetworkCmProxyController; +import org.onap.cps.ncmp.rest.model.ErrorMessage; +import org.onap.cps.spi.exceptions.CpsException; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * Exception handler with error message return. + */ +@Slf4j +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@RestControllerAdvice(assignableTypes = {NetworkCmProxyController.class}) +public class NetworkCmProxyRestExceptionHandler { + + private static final String CHECK_LOGS_FOR_DETAILS = "Check logs for details."; + + /** + * Default exception handler. + * + * @param exception the exception to handle + * @return response with response code 500. + */ + @ExceptionHandler + public static ResponseEntity handleInternalServerErrorExceptions( + final Exception exception) { + return buildErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR, exception); + } + + @ExceptionHandler({CpsException.class}) + public static ResponseEntity handleAnyOtherCpsExceptions(final CpsException exception) { + return buildErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR, exception); + } + + private static ResponseEntity buildErrorResponse(final HttpStatus status, final Exception exception) { + if (exception.getCause() != null || !(exception instanceof CpsException)) { + log.error("Exception occurred", exception); + } + final ErrorMessage errorMessage = new ErrorMessage(); + errorMessage.setStatus(status.toString()); + errorMessage.setMessage(exception.getMessage()); + errorMessage.setDetails(exception instanceof CpsException ? ((CpsException) exception).getDetails() : + CHECK_LOGS_FOR_DETAILS); + return new ResponseEntity<>(errorMessage, status); + } +} diff --git a/cps-ncmp-rest/src/main/resources/openapi-configuration.json b/cps-ncmp-rest/src/main/resources/openapi-configuration.json new file mode 100644 index 000000000..5736c3d9b --- /dev/null +++ b/cps-ncmp-rest/src/main/resources/openapi-configuration.json @@ -0,0 +1,28 @@ +{ + "resourcePackages": [ + "org.onap.cps.ncmp.rest.controller" + ], + "prettyPrint": true, + "cacheTTL": 0, + "openAPI": { + "info": { + "title": "ONAP Open API v3 CPS Network CM Proxy Spec", + "description": "The API Description may be multiline, and GitHub Flavored Markdown, GFM syntax, can be used for rich text representation.", + "x-logo": { + "url": "logo.png" + }, + "contact": { + "name": "ONAP", + "url": "https://onap.readthedocs.io", + "email": "onap-discuss@lists.onap.org" + }, + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0" + }, + "version": "1.2.34", + "x-planned-retirement-date": "202207", + "x-component": "Modeling" + } + } +} diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/config/NetworkCmProxyConfigSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/config/NetworkCmProxyConfigSpec.groovy new file mode 100644 index 000000000..4b0e2561e --- /dev/null +++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/config/NetworkCmProxyConfigSpec.groovy @@ -0,0 +1,33 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 highstreet technologies GmbH + * Modification Copyright (C) 2021 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.config + +import spock.lang.Specification +import springfox.documentation.spring.web.plugins.Docket + +class NetworkCmProxyConfigSpec extends Specification { + def objectUnderTest = new NetworkCmProxyConfig() + + def 'NetworkCmProxy configuration has a Docket API.'() { + expect: 'the NetworkCmProxy configuration has a Docket API' + objectUnderTest.api() instanceof Docket + } +} diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy new file mode 100644 index 000000000..aa9fa86d1 --- /dev/null +++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy @@ -0,0 +1,138 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Pantheon.tech + * Modification Copyright (C) 2021 highstreet technologies GmbH + * Modification Copyright (C) 2021 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 com.google.gson.Gson +import org.onap.cps.ncmp.api.NetworkCmProxyDataService +import org.onap.cps.spi.model.DataNodeBuilder +import org.spockframework.spring.SpringBean +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.beans.factory.annotation.Value +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest +import org.springframework.http.HttpStatus +import org.springframework.http.MediaType +import org.springframework.test.web.servlet.MockMvc +import spock.lang.Specification +import spock.lang.Unroll + +import static org.onap.cps.spi.FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS +import static org.onap.cps.spi.FetchDescendantsOption.OMIT_DESCENDANTS +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.* + +@WebMvcTest +class NetworkCmProxyControllerSpec extends Specification { + + @Autowired + MockMvc mvc + + @SpringBean + NetworkCmProxyDataService mockNetworkCmProxyDataService = Mock() + + @Value('${rest.api.ncmp-base-path}') + def basePath + + def dataNodeBaseEndpoint + + def setup() { + dataNodeBaseEndpoint = "$basePath/v1" + } + + def cmHandle = 'some handle' + def xpath = 'some xpath' + + @Unroll + def 'Query data node by cps path for the given cm handle with #scenario.'() { + given: 'service method returns a list containing a data node' + def dataNode = new DataNodeBuilder().withXpath('/xpath').build() + def cpsPath = 'some cps-path' + mockNetworkCmProxyDataService.queryDataNodes(cmHandle, cpsPath, expectedCpsDataServiceOption) >> [dataNode] + and: 'the query endpoint' + def dataNodeEndpoint = "$dataNodeBaseEndpoint/cm-handles/$cmHandle/nodes/query" + when: 'query data nodes API is invoked' + def response = mvc.perform(get(dataNodeEndpoint) + .param('cps-path', cpsPath) + .param('include-descendants', includeDescendantsOption)) + .andReturn().response + then: 'the response contains the the datanode in json format' + response.status == HttpStatus.OK.value() + def expectedJsonContent = new Gson().toJson(dataNode) + response.getContentAsString().contains(expectedJsonContent) + where: 'the following options for include descendants are provided in the request' + scenario | includeDescendantsOption || expectedCpsDataServiceOption + 'no descendants by default'| '' || OMIT_DESCENDANTS + 'no descendant explicitly' | 'false' || OMIT_DESCENDANTS + 'descendants' | 'true' || INCLUDE_ALL_DESCENDANTS + } + + def 'Update data node leaves.'() { + given: 'json data' + def jsonData = 'json data' + and: 'the query endpoint' + def endpoint = "$dataNodeBaseEndpoint/cm-handles/$cmHandle/nodes" + when: 'patch request is performed' + def response = mvc.perform( + patch(endpoint) + .contentType(MediaType.APPLICATION_JSON) + .content(jsonData) + .param('xpath', xpath) + ).andReturn().response + then: 'the service method is invoked once with expected parameters' + 1 * mockNetworkCmProxyDataService.updateNodeLeaves(cmHandle, xpath, jsonData) + and: 'response status indicates success' + response.status == HttpStatus.OK.value() + } + + def 'Replace data node tree.'() { + given: 'json data' + def jsonData = 'json data' + and: 'the query endpoint' + def endpoint = "$dataNodeBaseEndpoint/cm-handles/$cmHandle/nodes" + when: 'put request is performed' + def response = mvc.perform( + put(endpoint) + .contentType(MediaType.APPLICATION_JSON) + .content(jsonData) + .param('xpath', xpath) + ).andReturn().response + then: 'the service method is invoked once with expected parameters' + 1 * mockNetworkCmProxyDataService.replaceNodeTree(cmHandle, xpath, jsonData) + and: 'response status indicates success' + response.status == HttpStatus.OK.value() + } + + def 'Get data node.'() { + given: 'the service returns a data node' + def xpath = 'some xpath' + def dataNode = new DataNodeBuilder().withXpath(xpath).withLeaves(["leaf": "value"]).build() + mockNetworkCmProxyDataService.getDataNode(cmHandle, xpath, OMIT_DESCENDANTS) >> dataNode + and: 'the query endpoint' + def endpoint = "$dataNodeBaseEndpoint/cm-handles/$cmHandle/node" + when: 'get request is performed through REST API' + def response = mvc.perform(get(endpoint).param('xpath', xpath)).andReturn().response + then: 'a success response is returned' + response.status == HttpStatus.OK.value() + and: 'response contains expected leaf and value' + response.contentAsString.contains('"leaf":"value"') + } +} + 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 new file mode 100644 index 000000000..8153eeb70 --- /dev/null +++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy @@ -0,0 +1,98 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 highstreet technologies GmbH + * Modification Copyright (C) 2021 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.exceptions + +import groovy.json.JsonSlurper +import org.onap.cps.ncmp.api.NetworkCmProxyDataService +import org.onap.cps.spi.FetchDescendantsOption +import org.onap.cps.spi.exceptions.CpsException +import org.spockframework.spring.SpringBean +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.beans.factory.annotation.Value +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest +import org.springframework.test.web.servlet.MockMvc +import spock.lang.Shared +import spock.lang.Specification + +import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get + +@WebMvcTest +class NetworkCmProxyRestExceptionHandlerSpec extends Specification { + + @Autowired + MockMvc mvc + + @SpringBean + NetworkCmProxyDataService mockNetworkCmProxyDataService = Mock() + + @Value('${rest.api.ncmp-base-path}') + def basePath + + def dataNodeBaseEndpoint + + @Shared + def errorMessage = 'some error message' + @Shared + def errorDetails = 'some error details' + + def cmHandle = 'some handle' + def xpath = 'some xpath' + + def setup() { + dataNodeBaseEndpoint = "$basePath/v1" + } + + def 'Get request with runtime exception returns HTTP Status Internal Server Error.'() { + when: 'runtime exception is thrown by the service' + setupTestException(new IllegalStateException(errorMessage)) + def response = performTestRequest() + then: 'an HTTP Internal Server Error response is returned with correct message and details' + assertTestResponse(response, INTERNAL_SERVER_ERROR, errorMessage, null) + } + + def 'Get request with generic CPS exception returns HTTP Status Internal Server Error.'() { + when: 'generic CPS exception is thrown by the service' + setupTestException(new CpsException(errorMessage, errorDetails)) + def response = performTestRequest() + then: 'an HTTP Internal Server Error response is returned with correct message and details' + assertTestResponse(response, INTERNAL_SERVER_ERROR, errorMessage, errorDetails) + } + + def setupTestException(exception) { + mockNetworkCmProxyDataService.getDataNode(cmHandle, xpath, FetchDescendantsOption.OMIT_DESCENDANTS) >> + { throw exception} + } + + def performTestRequest() { + return mvc.perform(get("$dataNodeBaseEndpoint/cm-handles/$cmHandle/node").param('xpath', xpath)) + .andReturn().response + } + + static void assertTestResponse(response, expectedStatus,expectedErrorMessage, + expectedErrorDetails) { + assert response.status == expectedStatus.value() + def content = new JsonSlurper().parseText(response.contentAsString) + assert content['status'] == expectedStatus.toString() + assert content['message'] == expectedErrorMessage + assert expectedErrorDetails == null || content['details'] == expectedErrorDetails + } +} diff --git a/cps-ncmp-rest/src/test/java/org/onap/cps/TestApplication.java b/cps-ncmp-rest/src/test/java/org/onap/cps/TestApplication.java new file mode 100644 index 000000000..5e0e3679e --- /dev/null +++ b/cps-ncmp-rest/src/test/java/org/onap/cps/TestApplication.java @@ -0,0 +1,30 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2020 Pantheon.tech + * ================================================================================ + * 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; + +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * The @SpringBootApplication annotated class is required in order to run tests + * marked with @SpringBootTest annotation. + */ +@SpringBootApplication +public class TestApplication { +} diff --git a/cps-ncmp-rest/src/test/resources/application.yml b/cps-ncmp-rest/src/test/resources/application.yml new file mode 100644 index 000000000..14ccf0691 --- /dev/null +++ b/cps-ncmp-rest/src/test/resources/application.yml @@ -0,0 +1,21 @@ +# ============LICENSE_START======================================================= +# Copyright (C) 2021 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========================================================= + +rest: + api: + ncmp-base-path: /cps-ncmp/api +spring: \ No newline at end of file diff --git a/cps-ncmp-service/pom.xml b/cps-ncmp-service/pom.xml new file mode 100644 index 000000000..ddb78d384 --- /dev/null +++ b/cps-ncmp-service/pom.xml @@ -0,0 +1,51 @@ + + + +4.0.0 + + org.onap.cps + cps-parent + 1.1.0-SNAPSHOT + ../cps-parent/pom.xml + + +cps-ncmp-service + + + 0.0 + + + + + org.springframework.boot + spring-boot-starter-validation + + + ${project.groupId} + cps-service + + + org.spockframework + spock-core + test + + + \ No newline at end of file diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java new file mode 100644 index 000000000..158f20ef9 --- /dev/null +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java @@ -0,0 +1,79 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 highstreet technologies GmbH + * Copyright (C) 2021 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.api; + +import java.util.Collection; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.onap.cps.spi.FetchDescendantsOption; +import org.onap.cps.spi.model.DataNode; + +/* + * Datastore interface for handling CPS data. + */ +public interface NetworkCmProxyDataService { + + /** + * Retrieves datanode by XPath for a given cm handle. + * + * @param cmHandle The identifier for a network function, network element, subnetwork or any other cm + * object by managed Network CM Proxy + * @param xpath xpath + * @param fetchDescendantsOption defines the scope of data to fetch: either single node or all the descendant nodes + * (recursively) as well + * @return data node object + */ + DataNode getDataNode(@NonNull String cmHandle, @NonNull String xpath, + @NonNull FetchDescendantsOption fetchDescendantsOption); + + /** + * Get datanodes for the given cm handle by cps path. + * + * @param cmHandle The identifier for a network function, network element, subnetwork or any other cm + * object by managed Network CM Proxy + * @param cpsPath cps path + * @param fetchDescendantsOption defines whether the descendants of the node(s) found by the query should be + * included in the output + * @return a collection of datanodes + */ + Collection queryDataNodes(@NonNull String cmHandle, @NonNull String cpsPath, + @NonNull FetchDescendantsOption fetchDescendantsOption); + + /** + * Updates data node for given cm handle using xpath to parent node. + * + * @param cmHandle The identifier for a network function, network element, subnetwork or any other cm object + * by managed Network CM Proxy + * @param parentNodeXpath xpath to parent node + * @param jsonData json data + */ + void updateNodeLeaves(@NonNull String cmHandle, @NonNull String parentNodeXpath, @NonNull String jsonData); + + /** + * Replaces existing data node content including descendants. + * + * @param cmHandle The identifier for a network function, network element, subnetwork or any other cm object + * by managed Network CM Proxy + * @param parentNodeXpath xpath to parent node + * @param jsonData json data + */ + void replaceNodeTree(@NonNull String cmHandle, @NonNull String parentNodeXpath, @NonNull String jsonData); + +} 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 new file mode 100755 index 000000000..9e013145d --- /dev/null +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java @@ -0,0 +1,64 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 highstreet technologies GmbH + * Copyright (C) 2021 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.api.impl; + +import java.util.Collection; +import org.onap.cps.api.CpsDataService; +import org.onap.cps.api.CpsQueryService; +import org.onap.cps.ncmp.api.NetworkCmProxyDataService; +import org.onap.cps.spi.FetchDescendantsOption; +import org.onap.cps.spi.model.DataNode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService { + + private static final String NF_PROXY_DATASPACE_NAME = "NFP-Operational"; + + @Autowired + private CpsDataService cpsDataService; + + @Autowired + private CpsQueryService cpsQueryService; + + @Override + public DataNode getDataNode(final String cmHandle, final String xpath, + final FetchDescendantsOption fetchDescendantsOption) { + return cpsDataService.getDataNode(NF_PROXY_DATASPACE_NAME, cmHandle, xpath, fetchDescendantsOption); + } + + @Override + public Collection queryDataNodes(final String cmHandle, final String cpsPath, + final FetchDescendantsOption fetchDescendantsOption) { + return cpsQueryService.queryDataNodes(NF_PROXY_DATASPACE_NAME, cmHandle, cpsPath, fetchDescendantsOption); + } + + @Override + public void updateNodeLeaves(final String cmHandle, final String parentNodeXpath, final String jsonData) { + cpsDataService.updateNodeLeaves(NF_PROXY_DATASPACE_NAME, cmHandle, parentNodeXpath, jsonData); + } + + @Override + public void replaceNodeTree(final String cmHandle, final String parentNodeXpath, final String jsonData) { + cpsDataService.replaceNodeTree(NF_PROXY_DATASPACE_NAME, cmHandle, parentNodeXpath, jsonData); + } +} diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/api/impl/NetworkCmProxyDataServiceImplSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/api/impl/NetworkCmProxyDataServiceImplSpec.groovy new file mode 100644 index 000000000..49028becd --- /dev/null +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/api/impl/NetworkCmProxyDataServiceImplSpec.groovy @@ -0,0 +1,71 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 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.api.impl + +import org.onap.cps.api.CpsDataService +import org.onap.cps.api.CpsQueryService +import org.onap.cps.ncmp.api.impl.NetworkCmProxyDataServiceImpl +import org.onap.cps.spi.FetchDescendantsOption +import spock.lang.Specification + +class NetworkCmProxyDataServiceImplSpec extends Specification { + def objectUnderTest = new NetworkCmProxyDataServiceImpl() + def mockcpsDataService = Mock(CpsDataService) + def mockcpsQueryService = Mock(CpsQueryService) + + def setup() { + objectUnderTest.cpsDataService = mockcpsDataService + objectUnderTest.cpsQueryService = mockcpsQueryService + } + + def cmHandle = 'some handle' + def expectedDataspaceName = 'NFP-Operational' + + def 'Query data nodes by cps path with #fetchDescendantsOption.'() { + given: 'a cm Handle and a cps path' + def cpsPath = '/cps-path' + when: 'queryDataNodes is invoked' + objectUnderTest.queryDataNodes(cmHandle, cpsPath, fetchDescendantsOption) + then: 'the persistence service is called once with the correct parameters' + 1 * mockcpsQueryService.queryDataNodes(expectedDataspaceName, cmHandle, cpsPath, fetchDescendantsOption) + where: 'all fetch descendants options are supported' + fetchDescendantsOption << FetchDescendantsOption.values() + } + + def 'Update data node leaves.'() { + given: 'a cm Handle and a cps path' + def xpath = '/xpath' + def jsonData = 'some json' + when: 'updateNodeLeaves is invoked' + objectUnderTest.updateNodeLeaves(cmHandle, xpath, jsonData) + then: 'the persistence service is called once with the correct parameters' + 1 * mockcpsDataService.updateNodeLeaves(expectedDataspaceName, cmHandle, xpath, jsonData) + } + + def 'Replace data node tree.'() { + given: 'a cm Handle and a cps path' + def xpath = '/xpath' + def jsonData = 'some json' + when: 'replaceNodeTree is invoked' + objectUnderTest.replaceNodeTree(cmHandle, xpath, jsonData) + then: 'the persistence service is called once with the correct parameters' + 1 * mockcpsDataService.replaceNodeTree(expectedDataspaceName, cmHandle, xpath, jsonData) + } +} diff --git a/cps-nf-proxy-rest/docs/openapi/components.yaml b/cps-nf-proxy-rest/docs/openapi/components.yaml deleted file mode 100644 index af95723cb..000000000 --- a/cps-nf-proxy-rest/docs/openapi/components.yaml +++ /dev/null @@ -1,107 +0,0 @@ -components: - schemas: - ErrorMessage: - type: object - title: Error - properties: - status: - type: string - message: - type: string - details: - type: string - MultipartFile: - required: - - file - properties: - multipartFile: - type: string - description: multipartFile - format: binary - - parameters: - cmHandleInPath: - name: cm-handle - in: path - description: The identifier for a network function, network element, subnetwork or any other cm object by managed NF-Proxy - required: true - schema: - type: string - xpathInQuery: - name: xpath - in: query - description: xpath - required: false - schema: - type: string - default: / - includeDescendantsOptionInQuery: - name: include-descendants - in: query - description: include-descendants - required: false - schema: - type: boolean - default: false - cpsPathInQuery: - name: cps-path - in: query - description: cps-path - required: false - schema: - type: string - default: / - - - responses: - NotFound: - description: The specified resource was not found - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - Unauthorized: - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - Forbidden: - description: Forbidden - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - BadRequest: - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - Conflict: - description: Conflict - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - NotImplemented: - description: The given path has not been implemented - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - Ok: - description: OK - content: - application/json: - schema: - type: object - Created: - description: Created - content: - text/plain: - schema: - type: string - NoContent: - description: No Content - content: {} diff --git a/cps-nf-proxy-rest/docs/openapi/openapi.yml b/cps-nf-proxy-rest/docs/openapi/openapi.yml deleted file mode 100755 index a6d0949f2..000000000 --- a/cps-nf-proxy-rest/docs/openapi/openapi.yml +++ /dev/null @@ -1,16 +0,0 @@ -openapi: 3.0.1 -info: - title: xNF to CPS Proxy API - description: xNF to CPS Proxy API - version: "1.0" -servers: - - url: //localhost:8088/ -paths: - /v1/cm-handles/{cm-handle}/node: - $ref: 'xnfProxy.yml#/nodeByCmHandleAndXpath' - - /v1/cm-handles/{cm-handle}/nodes/query: - $ref: 'xnfProxy.yml#/nodesByCmHandleAndCpsPath' - - /v1/cm-handles/{cm-handle}/nodes: - $ref: 'xnfProxy.yml#/nodesByCmHandleAndXpath' \ No newline at end of file diff --git a/cps-nf-proxy-rest/docs/openapi/xnfProxy.yml b/cps-nf-proxy-rest/docs/openapi/xnfProxy.yml deleted file mode 100644 index 141e47258..000000000 --- a/cps-nf-proxy-rest/docs/openapi/xnfProxy.yml +++ /dev/null @@ -1,102 +0,0 @@ -nodeByCmHandleAndXpath: - get: - description: Get a node with an option to retrieve all the children for a given cm Handle - tags: - - nf-proxy - summary: Get a node given a cm Handle and xpath - operationId: getNodeByCmHandleAndXpath - parameters: - - $ref: 'components.yaml#/components/parameters/cmHandleInPath' - - $ref: 'components.yaml#/components/parameters/xpathInQuery' - - $ref: 'components.yaml#/components/parameters/includeDescendantsOptionInQuery' - responses: - 200: - $ref: 'components.yaml#/components/responses/Ok' - 400: - $ref: 'components.yaml#/components/responses/BadRequest' - 401: - $ref: 'components.yaml#/components/responses/Unauthorized' - 403: - $ref: 'components.yaml#/components/responses/Forbidden' - 404: - $ref: 'components.yaml#/components/responses/NotFound' - 501: - $ref: 'components.yaml#/components/responses/NotImplemented' - -nodesByCmHandleAndCpsPath: - get: - description: Query nodes for the given cps path and cm Handle - tags: - - nf-proxy - summary: Query data nodes - operationId: queryNodesByCmHandleAndCpsPath - parameters: - - $ref: 'components.yaml#/components/parameters/cmHandleInPath' - - $ref: 'components.yaml#/components/parameters/cpsPathInQuery' - - $ref: 'components.yaml#/components/parameters/includeDescendantsOptionInQuery' - responses: - 200: - $ref: 'components.yaml#/components/responses/Ok' - 400: - $ref: 'components.yaml#/components/responses/BadRequest' - 401: - $ref: 'components.yaml#/components/responses/Unauthorized' - 403: - $ref: 'components.yaml#/components/responses/Forbidden' - 404: - $ref: 'components.yaml#/components/responses/NotFound' - -nodesByCmHandleAndXpath: - patch: - description: Update node leaves for the given cps path and cm Handle - tags: - - nf-proxy - summary: Update node leaves - operationId: updateNodeLeaves - parameters: - - $ref: 'components.yaml#/components/parameters/cmHandleInPath' - - $ref: 'components.yaml#/components/parameters/xpathInQuery' - requestBody: - required: true - content: - application/json: - schema: - type: string - responses: - 200: - $ref: 'components.yaml#/components/responses/Ok' - 400: - $ref: 'components.yaml#/components/responses/BadRequest' - 401: - $ref: 'components.yaml#/components/responses/Unauthorized' - 403: - $ref: 'components.yaml#/components/responses/Forbidden' - 404: - $ref: 'components.yaml#/components/responses/NotFound' - - put: - description: Replace a node with descendants for the given cps path and cm Handle - tags: - - nf-proxy - summary: Replace a node with descendants - operationId: replaceNode - parameters: - - $ref: 'components.yaml#/components/parameters/cmHandleInPath' - - $ref: 'components.yaml#/components/parameters/xpathInQuery' - requestBody: - required: true - content: - application/json: - schema: - type: string - responses: - 200: - $ref: 'components.yaml#/components/responses/Ok' - 400: - $ref: 'components.yaml#/components/responses/BadRequest' - 401: - $ref: 'components.yaml#/components/responses/Unauthorized' - 403: - $ref: 'components.yaml#/components/responses/Forbidden' - 404: - $ref: 'components.yaml#/components/responses/NotFound' \ No newline at end of file diff --git a/cps-nf-proxy-rest/pom.xml b/cps-nf-proxy-rest/pom.xml deleted file mode 100755 index 1add0a074..000000000 --- a/cps-nf-proxy-rest/pom.xml +++ /dev/null @@ -1,113 +0,0 @@ - - 4.0.0 - - org.onap.cps - cps-parent - 1.1.0-SNAPSHOT - ../cps-parent/pom.xml - - - cps-nf-proxy-rest - - - 0.0 - - - - - ${project.groupId} - cps-nf-proxy-service - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.springframework.boot - spring-boot-starter-jetty - - - io.swagger.core.v3 - swagger-annotations - - - io.springfox - springfox-boot-starter - - - io.swagger - swagger-annotations - - - - org.codehaus.groovy - groovy - test - - - org.spockframework - spock-core - test - - - org.spockframework - spock-spring - test - - - cglib - cglib-nodep - test - - - org.springframework.boot - spring-boot-starter-test - test - - - org.junit.vintage - junit-vintage-engine - - - - - - - - - - io.swagger.codegen.v3 - swagger-codegen-maven-plugin - - - - generate - - - ${project.basedir}/docs/openapi/openapi.yml - org.onap.cps.nfproxy.rest.controller - org.onap.cps.nfproxy.rest.model - org.onap.cps.nfproxy.rest.api - spring - false - - src/gen/java - java11 - true - true - - - - - - - - diff --git a/cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/config/NfProxyConfig.java b/cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/config/NfProxyConfig.java deleted file mode 100644 index defe0f19c..000000000 --- a/cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/config/NfProxyConfig.java +++ /dev/null @@ -1,46 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2021 Pantheon.tech - * ================================================================================ - * 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.nfproxy.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; - -@Configuration -public class NfProxyConfig { - - /** - * Swagger-ui configuration. - */ - @Bean("nf-proxy-docket") - public Docket api() { - return new Docket(DocumentationType.OAS_30) - .groupName("nf-proxy-docket") - .select() - .apis(RequestHandlerSelectors.any()) - .paths(PathSelectors.any()) - .build(); - } - -} \ No newline at end of file diff --git a/cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/rest/controller/NfProxyController.java b/cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/rest/controller/NfProxyController.java deleted file mode 100644 index 680ca127b..000000000 --- a/cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/rest/controller/NfProxyController.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2021 Pantheon.tech - * Modifications (C) 2021 Nordix Foundation - * Modification Copyright (C) 2021 highstreet technologies GmbH - * ================================================================================ - * 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.nfproxy.rest.controller; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import java.util.Collection; -import javax.validation.Valid; -import org.onap.cps.nfproxy.api.NfProxyDataService; -import org.onap.cps.nfproxy.rest.api.NfProxyApi; -import org.onap.cps.spi.FetchDescendantsOption; -import org.onap.cps.spi.model.DataNode; -import org.onap.cps.utils.DataMapUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - - -@RestController -@RequestMapping("${rest.api.xnf-base-path}") -public class NfProxyController implements NfProxyApi { - - private static final Gson GSON = new GsonBuilder().create(); - private static final String XPATH_ROOT = "/"; - - @Autowired - private NfProxyDataService nfProxyDataService; - - @Override - public ResponseEntity getNodeByCmHandleAndXpath(final String cmHandle, @Valid final String xpath, - @Valid final Boolean includeDescendants) { - if (XPATH_ROOT.equals(xpath)) { - return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); - } - final FetchDescendantsOption fetchDescendantsOption = Boolean.TRUE.equals(includeDescendants) - ? FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS : FetchDescendantsOption.OMIT_DESCENDANTS; - final DataNode dataNode = nfProxyDataService.getDataNode(cmHandle, xpath, fetchDescendantsOption); - return new ResponseEntity<>(DataMapUtils.toDataMap(dataNode), HttpStatus.OK); - } - - @Override - public ResponseEntity queryNodesByCmHandleAndCpsPath(final String cmHandle, @Valid final String cpsPath, - @Valid final Boolean includeDescendants) { - final FetchDescendantsOption fetchDescendantsOption = Boolean.TRUE.equals(includeDescendants) - ? FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS : FetchDescendantsOption.OMIT_DESCENDANTS; - final Collection dataNodes = - nfProxyDataService.queryDataNodes(cmHandle, cpsPath, fetchDescendantsOption); - return new ResponseEntity<>(GSON.toJson(dataNodes), HttpStatus.OK); - } - - @Override - public ResponseEntity replaceNode(@Valid final String jsonData, final String cmHandle, - @Valid final String parentNodeXpath) { - nfProxyDataService.replaceNodeTree(cmHandle, parentNodeXpath, jsonData); - return new ResponseEntity<>(HttpStatus.OK); - } - - @Override - public ResponseEntity updateNodeLeaves(@Valid final String jsonData, final String cmHandle, - @Valid final String parentNodeXpath) { - nfProxyDataService.updateNodeLeaves(cmHandle, parentNodeXpath, jsonData); - return new ResponseEntity<>(HttpStatus.OK); - } -} diff --git a/cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/rest/exceptions/NfProxyRestExceptionHandler.java b/cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/rest/exceptions/NfProxyRestExceptionHandler.java deleted file mode 100755 index ac35e9a1f..000000000 --- a/cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/rest/exceptions/NfProxyRestExceptionHandler.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2021 Pantheon.tech - * ================================================================================ - * 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.nfproxy.rest.exceptions; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.onap.cps.nfproxy.rest.controller.NfProxyController; -import org.onap.cps.nfproxy.rest.model.ErrorMessage; -import org.onap.cps.spi.exceptions.CpsException; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestControllerAdvice; - -/** - * Exception handler with error message return. - */ -@Slf4j -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@RestControllerAdvice(assignableTypes = {NfProxyController.class}) -public class NfProxyRestExceptionHandler { - - private static final String CHECK_LOGS_FOR_DETAILS = "Check logs for details."; - - /** - * Default exception handler. - * - * @param exception the exception to handle - * @return response with response code 500. - */ - @ExceptionHandler - public static ResponseEntity handleInternalServerErrorExceptions( - final Exception exception) { - return buildErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR, exception); - } - - @ExceptionHandler({CpsException.class}) - public static ResponseEntity handleAnyOtherCpsExceptions(final CpsException exception) { - return buildErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR, exception); - } - - private static ResponseEntity buildErrorResponse(final HttpStatus status, final Exception exception) { - if (exception.getCause() != null || !(exception instanceof CpsException)) { - log.error("Exception occurred", exception); - } - final ErrorMessage errorMessage = new ErrorMessage(); - errorMessage.setStatus(status.toString()); - errorMessage.setMessage(exception.getMessage()); - errorMessage.setDetails(exception instanceof CpsException ? ((CpsException) exception).getDetails() : - CHECK_LOGS_FOR_DETAILS); - return new ResponseEntity<>(errorMessage, status); - } -} diff --git a/cps-nf-proxy-rest/src/main/resources/openapi-configuration.json b/cps-nf-proxy-rest/src/main/resources/openapi-configuration.json deleted file mode 100644 index efc2f9778..000000000 --- a/cps-nf-proxy-rest/src/main/resources/openapi-configuration.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "resourcePackages": [ - "org.onap.cps.nfproxy.rest.controller" - ], - "prettyPrint": true, - "cacheTTL": 0, - "openAPI": { - "info": { - "title": "ONAP Open API v3 CPS xNF Proxy Spec", - "description": "The API Description may be multiline, and GitHub Flavored Markdown, GFM syntax, can be used for rich text representation.", - "x-logo": { - "url": "logo.png" - }, - "contact": { - "name": "ONAP", - "url": "https://onap.readthedocs.io", - "email": "onap-discuss@lists.onap.org" - }, - "license": { - "name": "Apache 2.0", - "url": "http://www.apache.org/licenses/LICENSE-2.0" - }, - "version": "1.2.34", - "x-planned-retirement-date": "202207", - "x-component": "Modeling" - } - } -} diff --git a/cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/config/NfProxyConfigSpec.groovy b/cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/config/NfProxyConfigSpec.groovy deleted file mode 100644 index da021218d..000000000 --- a/cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/config/NfProxyConfigSpec.groovy +++ /dev/null @@ -1,32 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2021 highstreet technologies GmbH - * ================================================================================ - * 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.nfproxy.config - -import spock.lang.Specification -import springfox.documentation.spring.web.plugins.Docket - -class NfProxyConfigSpec extends Specification { - def objectUnderTest = new NfProxyConfig() - - def 'NfProxy configuration has a Docket API.'() { - expect: 'the NfProxy configuration has a Docket API' - objectUnderTest.api() instanceof Docket - } -} diff --git a/cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/rest/controller/NfProxyControllerSpec.groovy b/cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/rest/controller/NfProxyControllerSpec.groovy deleted file mode 100644 index a81411caf..000000000 --- a/cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/rest/controller/NfProxyControllerSpec.groovy +++ /dev/null @@ -1,138 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2021 Pantheon.tech - * Modification Copyright (C) 2021 highstreet technologies GmbH - * Modification Copyright (C) 2021 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.nfproxy.rest.controller - - -import com.google.gson.Gson -import org.onap.cps.nfproxy.api.NfProxyDataService -import org.onap.cps.spi.model.DataNodeBuilder -import org.spockframework.spring.SpringBean -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.beans.factory.annotation.Value -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest -import org.springframework.http.HttpStatus -import org.springframework.http.MediaType -import org.springframework.test.web.servlet.MockMvc -import spock.lang.Specification -import spock.lang.Unroll - -import static org.onap.cps.spi.FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS -import static org.onap.cps.spi.FetchDescendantsOption.OMIT_DESCENDANTS -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.* - -@WebMvcTest -class NfProxyControllerSpec extends Specification { - - @Autowired - MockMvc mvc - - @SpringBean - NfProxyDataService mockNfProxyDataService = Mock() - - @Value('${rest.api.xnf-base-path}') - def basePath - - def dataNodeBaseEndpoint - - def setup() { - dataNodeBaseEndpoint = "$basePath/v1" - } - - def cmHandle = 'some handle' - def xpath = 'some xpath' - - @Unroll - def 'Query data node by cps path for the given cm handle with #scenario.'() { - given: 'service method returns a list containing a data node' - def dataNode = new DataNodeBuilder().withXpath('/xpath').build() - def cpsPath = 'some cps-path' - mockNfProxyDataService.queryDataNodes(cmHandle, cpsPath, expectedCpsDataServiceOption) >> [dataNode] - and: 'the query endpoint' - def dataNodeEndpoint = "$dataNodeBaseEndpoint/cm-handles/$cmHandle/nodes/query" - when: 'query data nodes API is invoked' - def response = mvc.perform(get(dataNodeEndpoint) - .param('cps-path', cpsPath) - .param('include-descendants', includeDescendantsOption)) - .andReturn().response - then: 'the response contains the the datanode in json format' - response.status == HttpStatus.OK.value() - def expectedJsonContent = new Gson().toJson(dataNode) - response.getContentAsString().contains(expectedJsonContent) - where: 'the following options for include descendants are provided in the request' - scenario | includeDescendantsOption || expectedCpsDataServiceOption - 'no descendants by default'| '' || OMIT_DESCENDANTS - 'no descendant explicitly' | 'false' || OMIT_DESCENDANTS - 'descendants' | 'true' || INCLUDE_ALL_DESCENDANTS - } - - def 'Update data node leaves.'() { - given: 'json data' - def jsonData = 'json data' - and: 'the query endpoint' - def endpoint = "$dataNodeBaseEndpoint/cm-handles/$cmHandle/nodes" - when: 'patch request is performed' - def response = mvc.perform( - patch(endpoint) - .contentType(MediaType.APPLICATION_JSON) - .content(jsonData) - .param('xpath', xpath) - ).andReturn().response - then: 'the service method is invoked once with expected parameters' - 1 * mockNfProxyDataService.updateNodeLeaves(cmHandle, xpath, jsonData) - and: 'response status indicates success' - response.status == HttpStatus.OK.value() - } - - def 'Replace data node tree.'() { - given: 'json data' - def jsonData = 'json data' - and: 'the query endpoint' - def endpoint = "$dataNodeBaseEndpoint/cm-handles/$cmHandle/nodes" - when: 'put request is performed' - def response = mvc.perform( - put(endpoint) - .contentType(MediaType.APPLICATION_JSON) - .content(jsonData) - .param('xpath', xpath) - ).andReturn().response - then: 'the service method is invoked once with expected parameters' - 1 * mockNfProxyDataService.replaceNodeTree(cmHandle, xpath, jsonData) - and: 'response status indicates success' - response.status == HttpStatus.OK.value() - } - - def 'Get data node.'() { - given: 'the service returns a data node' - def xpath = 'some xpath' - def dataNode = new DataNodeBuilder().withXpath(xpath).withLeaves(["leaf": "value"]).build() - mockNfProxyDataService.getDataNode(cmHandle, xpath, OMIT_DESCENDANTS) >> dataNode - and: 'the query endpoint' - def endpoint = "$dataNodeBaseEndpoint/cm-handles/$cmHandle/node" - when: 'get request is performed through REST API' - def response = mvc.perform(get(endpoint).param('xpath', xpath)).andReturn().response - then: 'a success response is returned' - response.status == HttpStatus.OK.value() - and: 'response contains expected leaf and value' - response.contentAsString.contains('"leaf":"value"') - } -} - diff --git a/cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/rest/exceptions/NfProxyRestExceptionHandlerSpec.groovy b/cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/rest/exceptions/NfProxyRestExceptionHandlerSpec.groovy deleted file mode 100644 index 73b57c5f9..000000000 --- a/cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/rest/exceptions/NfProxyRestExceptionHandlerSpec.groovy +++ /dev/null @@ -1,97 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2021 highstreet technologies GmbH - * ================================================================================ - * 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.nfproxy.rest.exceptions - -import groovy.json.JsonSlurper -import org.onap.cps.nfproxy.api.NfProxyDataService -import org.onap.cps.spi.FetchDescendantsOption -import org.onap.cps.spi.exceptions.CpsException -import org.spockframework.spring.SpringBean -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.beans.factory.annotation.Value -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest -import org.springframework.test.web.servlet.MockMvc -import spock.lang.Shared -import spock.lang.Specification - -import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get - -@WebMvcTest -class NfProxyRestExceptionHandlerSpec extends Specification { - - @Autowired - MockMvc mvc - - @SpringBean - NfProxyDataService mockNfProxyDataService = Mock() - - @Value('${rest.api.xnf-base-path}') - def basePath - - def dataNodeBaseEndpoint - - @Shared - def errorMessage = 'some error message' - @Shared - def errorDetails = 'some error details' - - def cmHandle = 'some handle' - def xpath = 'some xpath' - - def setup() { - dataNodeBaseEndpoint = "$basePath/v1" - } - - def 'Get request with runtime exception returns HTTP Status Internal Server Error.'() { - when: 'runtime exception is thrown by the service' - setupTestException(new IllegalStateException(errorMessage)) - def response = performTestRequest() - then: 'an HTTP Internal Server Error response is returned with correct message and details' - assertTestResponse(response, INTERNAL_SERVER_ERROR, errorMessage, null) - } - - def 'Get request with generic CPS exception returns HTTP Status Internal Server Error.'() { - when: 'generic CPS exception is thrown by the service' - setupTestException(new CpsException(errorMessage, errorDetails)) - def response = performTestRequest() - then: 'an HTTP Internal Server Error response is returned with correct message and details' - assertTestResponse(response, INTERNAL_SERVER_ERROR, errorMessage, errorDetails) - } - - def setupTestException(exception) { - mockNfProxyDataService.getDataNode(cmHandle, xpath, FetchDescendantsOption.OMIT_DESCENDANTS) >> - { throw exception} - } - - def performTestRequest() { - return mvc.perform(get("$dataNodeBaseEndpoint/cm-handles/$cmHandle/node").param('xpath', xpath)) - .andReturn().response - } - - static void assertTestResponse(response, expectedStatus,expectedErrorMessage, - expectedErrorDetails) { - assert response.status == expectedStatus.value() - def content = new JsonSlurper().parseText(response.contentAsString) - assert content['status'] == expectedStatus.toString() - assert content['message'] == expectedErrorMessage - assert expectedErrorDetails == null || content['details'] == expectedErrorDetails - } -} diff --git a/cps-nf-proxy-rest/src/test/java/org/onap/cps/TestApplication.java b/cps-nf-proxy-rest/src/test/java/org/onap/cps/TestApplication.java deleted file mode 100644 index 5e0e3679e..000000000 --- a/cps-nf-proxy-rest/src/test/java/org/onap/cps/TestApplication.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2020 Pantheon.tech - * ================================================================================ - * 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; - -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * The @SpringBootApplication annotated class is required in order to run tests - * marked with @SpringBootTest annotation. - */ -@SpringBootApplication -public class TestApplication { -} diff --git a/cps-nf-proxy-rest/src/test/resources/application.yml b/cps-nf-proxy-rest/src/test/resources/application.yml deleted file mode 100644 index fed1559b8..000000000 --- a/cps-nf-proxy-rest/src/test/resources/application.yml +++ /dev/null @@ -1,5 +0,0 @@ - -rest: - api: - xnf-base-path: /xnf-proxy/api -spring: diff --git a/cps-nf-proxy-service/pom.xml b/cps-nf-proxy-service/pom.xml deleted file mode 100644 index 38e79f7e7..000000000 --- a/cps-nf-proxy-service/pom.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - 4.0.0 - - org.onap.cps - cps-parent - 1.1.0-SNAPSHOT - ../cps-parent/pom.xml - - - cps-nf-proxy-service - - - 0.0 - - - - - org.springframework.boot - spring-boot-starter-validation - - - ${project.groupId} - cps-service - - - org.spockframework - spock-core - test - - - \ No newline at end of file diff --git a/cps-nf-proxy-service/src/main/java/org/onap/cps/nfproxy/api/NfProxyDataService.java b/cps-nf-proxy-service/src/main/java/org/onap/cps/nfproxy/api/NfProxyDataService.java deleted file mode 100644 index cde1801da..000000000 --- a/cps-nf-proxy-service/src/main/java/org/onap/cps/nfproxy/api/NfProxyDataService.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2021 highstreet technologies GmbH - * Copyright (C) 2021 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.nfproxy.api; - -import java.util.Collection; -import org.checkerframework.checker.nullness.qual.NonNull; -import org.onap.cps.spi.FetchDescendantsOption; -import org.onap.cps.spi.model.DataNode; - -/* - * Datastore interface for handling CPS data. - */ -public interface NfProxyDataService { - - /** - * Retrieves datanode by XPath for a given cm handle. - * - * @param cmHandle The identifier for a network function, network element, subnetwork or any other cm - * object by managed NF-Proxy - * @param xpath xpath - * @param fetchDescendantsOption defines the scope of data to fetch: either single node or all the descendant nodes - * (recursively) as well - * @return data node object - */ - DataNode getDataNode(@NonNull String cmHandle, @NonNull String xpath, - @NonNull FetchDescendantsOption fetchDescendantsOption); - - /** - * Get datanodes for the given cm handle by cps path. - * - * @param cmHandle The identifier for a network function, network element, subnetwork or any other cm - * object by managed NF-Proxy - * @param cpsPath cps path - * @param fetchDescendantsOption defines whether the descendants of the node(s) found by the query should be - * included in the output - * @return a collection of datanodes - */ - Collection queryDataNodes(@NonNull String cmHandle, @NonNull String cpsPath, - @NonNull FetchDescendantsOption fetchDescendantsOption); - - /** - * Updates data node for given cm handle using xpath to parent node. - * - * @param cmHandle The identifier for a network function, network element, subnetwork or any other cm object - * by managed NF-Proxy - * @param parentNodeXpath xpath to parent node - * @param jsonData json data - */ - void updateNodeLeaves(@NonNull String cmHandle, @NonNull String parentNodeXpath, @NonNull String jsonData); - - /** - * Replaces existing data node content including descendants. - * - * @param cmHandle The identifier for a network function, network element, subnetwork or any other cm object - * by managed NF-Proxy - * @param parentNodeXpath xpath to parent node - * @param jsonData json data - */ - void replaceNodeTree(@NonNull String cmHandle, @NonNull String parentNodeXpath, @NonNull String jsonData); - -} diff --git a/cps-nf-proxy-service/src/main/java/org/onap/cps/nfproxy/api/impl/NfProxyDataServiceImpl.java b/cps-nf-proxy-service/src/main/java/org/onap/cps/nfproxy/api/impl/NfProxyDataServiceImpl.java deleted file mode 100755 index cff92fea6..000000000 --- a/cps-nf-proxy-service/src/main/java/org/onap/cps/nfproxy/api/impl/NfProxyDataServiceImpl.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2021 highstreet technologies GmbH - * Copyright (C) 2021 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.nfproxy.api.impl; - -import java.util.Collection; -import org.onap.cps.api.CpsDataService; -import org.onap.cps.api.CpsQueryService; -import org.onap.cps.nfproxy.api.NfProxyDataService; -import org.onap.cps.spi.FetchDescendantsOption; -import org.onap.cps.spi.model.DataNode; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class NfProxyDataServiceImpl implements NfProxyDataService { - - private static final String NF_PROXY_DATASPACE_NAME = "NFP-Operational"; - - @Autowired - private CpsDataService cpsDataService; - - @Autowired - private CpsQueryService cpsQueryService; - - @Override - public DataNode getDataNode(final String cmHandle, final String xpath, - final FetchDescendantsOption fetchDescendantsOption) { - return cpsDataService.getDataNode(NF_PROXY_DATASPACE_NAME, cmHandle, xpath, fetchDescendantsOption); - } - - @Override - public Collection queryDataNodes(final String cmHandle, final String cpsPath, - final FetchDescendantsOption fetchDescendantsOption) { - return cpsQueryService.queryDataNodes(NF_PROXY_DATASPACE_NAME, cmHandle, cpsPath, fetchDescendantsOption); - } - - @Override - public void updateNodeLeaves(final String cmHandle, final String parentNodeXpath, final String jsonData) { - cpsDataService.updateNodeLeaves(NF_PROXY_DATASPACE_NAME, cmHandle, parentNodeXpath, jsonData); - } - - @Override - public void replaceNodeTree(final String cmHandle, final String parentNodeXpath, final String jsonData) { - cpsDataService.replaceNodeTree(NF_PROXY_DATASPACE_NAME, cmHandle, parentNodeXpath, jsonData); - } -} diff --git a/cps-nf-proxy-service/src/test/groovy/org/onap/cps/api/impl/NfProxyDataServiceImplSpec.groovy b/cps-nf-proxy-service/src/test/groovy/org/onap/cps/api/impl/NfProxyDataServiceImplSpec.groovy deleted file mode 100644 index 24549aec8..000000000 --- a/cps-nf-proxy-service/src/test/groovy/org/onap/cps/api/impl/NfProxyDataServiceImplSpec.groovy +++ /dev/null @@ -1,71 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2021 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.api.impl - -import org.onap.cps.api.CpsDataService -import org.onap.cps.api.CpsQueryService -import org.onap.cps.nfproxy.api.impl.NfProxyDataServiceImpl -import org.onap.cps.spi.FetchDescendantsOption -import spock.lang.Specification - -class NfProxyDataServiceImplSpec extends Specification { - def objectUnderTest = new NfProxyDataServiceImpl() - def mockcpsDataService = Mock(CpsDataService) - def mockcpsQueryService = Mock(CpsQueryService) - - def setup() { - objectUnderTest.cpsDataService = mockcpsDataService - objectUnderTest.cpsQueryService = mockcpsQueryService - } - - def cmHandle = 'some handle' - def expectedDataspaceName = 'NFP-Operational' - - def 'Query data nodes by cps path with #fetchDescendantsOption.'() { - given: 'a cm Handle and a cps path' - def cpsPath = '/cps-path' - when: 'queryDataNodes is invoked' - objectUnderTest.queryDataNodes(cmHandle, cpsPath, fetchDescendantsOption) - then: 'the persistence service is called once with the correct parameters' - 1 * mockcpsQueryService.queryDataNodes(expectedDataspaceName, cmHandle, cpsPath, fetchDescendantsOption) - where: 'all fetch descendants options are supported' - fetchDescendantsOption << FetchDescendantsOption.values() - } - - def 'Update data node leaves.'() { - given: 'a cm Handle and a cps path' - def xpath = '/xpath' - def jsonData = 'some json' - when: 'updateNodeLeaves is invoked' - objectUnderTest.updateNodeLeaves(cmHandle, xpath, jsonData) - then: 'the persistence service is called once with the correct parameters' - 1 * mockcpsDataService.updateNodeLeaves(expectedDataspaceName, cmHandle, xpath, jsonData) - } - - def 'Replace data node tree.'() { - given: 'a cm Handle and a cps path' - def xpath = '/xpath' - def jsonData = 'some json' - when: 'replaceNodeTree is invoked' - objectUnderTest.replaceNodeTree(cmHandle, xpath, jsonData) - then: 'the persistence service is called once with the correct parameters' - 1 * mockcpsDataService.replaceNodeTree(expectedDataspaceName, cmHandle, xpath, jsonData) - } -} diff --git a/cps-parent/pom.xml b/cps-parent/pom.xml index 6536cc878..b76cd2dbc 100755 --- a/cps-parent/pom.xml +++ b/cps-parent/pom.xml @@ -60,8 +60,8 @@ ../cps-service/target/site/jacoco-aggregate/jacoco.xml, ../cps-rest/target/site/jacoco-ut/jacoco.xml, ../cps-rest/target/site/jacoco-aggregate/jacoco.xml, - ../cps-nf-proxy-rest/target/site/jacoco-ut/jacoco.xml, - ../cps-nf-proxy-rest/target/site/jacoco-aggregate/jacoco.xml, + ../cps-ncmp-rest/target/site/jacoco-ut/jacoco.xml, + ../cps-ncmp-rest/target/site/jacoco-aggregate/jacoco.xml, ../cps-application/target/site/jacoco-ut/jacoco.xml, ../cps-application/target/site/jacoco-aggregate/jacoco.xml diff --git a/docker-compose/README.md b/docker-compose/README.md index 0a3828353..e443bdf2e 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -6,7 +6,7 @@ Following command builds all Java components to `cps-application/target/cps-appl without generating any docker images: ```bash -mvn clean install -Pcps-docker -Pxnf-docker -Pcps-xnf-docker -Djib.skip +mvn clean install -Pcps-docker -Pncmp-docker -Pcps-ncmp-docker -Djib.skip ``` ## Building Java Archive and Docker images @@ -14,11 +14,11 @@ mvn clean install -Pcps-docker -Pxnf-docker -Pcps-xnf-docker -Djib.skip * Following command builds the JAR file and also generates the Docker image for all CPS components: ```bash -mvn clean install -Pcps-docker -Pxnf-docker -Pcps-xnf-docker -Dnexus.repository= +mvn clean install -Pcps-docker -Pncmp-docker -Pcps-ncmp-docker -Dnexus.repository= ``` * Following command builds the JAR file and generates the Docker image for specified CPS component: - (with `` being one of `cps-docker`, `xnf-docker` or `cps-xnf-docker`): + (with `` being one of `cps-docker`, `ncmp-docker` or `cps-ncmp-docker`): ```bash mvn clean install -P -Dnexus.repository= @@ -29,8 +29,8 @@ mvn clean install -P -Dnexus.repository= `docker-compose/docker-compose.yml` file is provided to be run with `docker-compose` tool and images previously built. It starts both Postgres database and CPS services. -1. Edit `docker-compose.yml` and uncomment desired service to be deployed, by default `cps-and-nf-proxy` - is enabled. You can comment it and uncomment `cps-standalone` or `nf-proxy-standalone`. +1. Edit `docker-compose.yml` and uncomment desired service to be deployed, by default `cps-and-ncmp` + is enabled. You can comment it and uncomment `cps-standalone` or `ncmp-standalone`. 2. Execute following command from `docker-compose` folder: ```bash diff --git a/docker-compose/application.yml b/docker-compose/application.yml index be4b688cf..d9b9e7c38 100644 --- a/docker-compose/application.yml +++ b/docker-compose/application.yml @@ -1,10 +1,27 @@ +# ============LICENSE_START======================================================= +# Modification (C) 2021 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========================================================= + server: port: 8080 rest: api: cps-base-path: /cps/api - xnf-base-path: /cps-nf-proxy/api + ncmp-base-path: /cps-ncmp/api spring: main: diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index a2241bcc2..4da74584c 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -1,6 +1,7 @@ # ============LICENSE_START======================================================= # Copyright (c) 2020 Pantheon.tech. # Modifications Copyright (C) 2021 Bell Canada. +# Modification (C) 2021 Nordix Foundation # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -33,9 +34,9 @@ services: # depends_on: # - dbpostgresql - #nf-proxy-standalone: - # container_name: cps-nf-proxy - # image: cps-nf-proxy:${VERSION} + #ncmp-standalone: + # container_name: cps-ncmp + # image: cps-ncmp:${VERSION} # volumes: # - "./application.yml:/app/resources/application.yml" # ports: @@ -48,9 +49,9 @@ services: # depends_on: # - dbpostgresql - cps-and-nf-proxy: - container_name: cps-and-nf-proxy - image: cps-and-nf-proxy:${VERSION} + cps-and-ncmp: + container_name: cps-and-ncmp + image: cps-and-ncmp:${VERSION} volumes: - "./application.yml:/app/resources/application.yml" ports: @@ -71,4 +72,4 @@ services: environment: POSTGRES_DB: cpsdb POSTGRES_USER: ${DB_USERNAME} - POSTGRES_PASSWORD: ${DB_PASSWORD} \ No newline at end of file + POSTGRES_PASSWORD: ${DB_PASSWORD} diff --git a/pom.xml b/pom.xml index 9fd9bba1c..f196cba61 100644 --- a/pom.xml +++ b/pom.xml @@ -2,6 +2,7 @@ ============LICENSE_START======================================================= Copyright (c) 2020 Linux Foundation. Modifications Copyright (C) 2021 Bell Canada. + Modification Copyright (C) 2021 Nordix Foundation ================================================================================ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -51,8 +52,8 @@ cps-parent cps-service cps-rest - cps-nf-proxy-service - cps-nf-proxy-rest + cps-ncmp-service + cps-ncmp-rest cps-ri checkstyle spotbugs -- cgit 1.2.3-korg