diff options
45 files changed, 1620 insertions, 283 deletions
diff --git a/cps-application/pom.xml b/cps-application/pom.xml index fa4b5ef4ad..64921f633b 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 @@ </build> </profile> <profile> - <id>xnf-docker</id> + <id>ncmp-docker</id> <activation> <activeByDefault>false</activeByDefault> </activation> <properties> - <image.name>cps-nf-proxy</image.name> + <image.name>cps-ncmp</image.name> </properties> <dependencies> <dependency> <groupId>${project.groupId}</groupId> - <artifactId>cps-nf-proxy-rest</artifactId> + <artifactId>cps-ncmp-rest</artifactId> + <version>${project.version}</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> @@ -214,13 +216,13 @@ </build> </profile> <profile> - <id>cps-xnf-docker</id> + <id>cps-ncmp-docker</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> - <image.name>cps-and-nf-proxy</image.name> + <image.name>cps-and-ncmp</image.name> </properties> <dependencies> @@ -230,7 +232,8 @@ </dependency> <dependency> <groupId>${project.groupId}</groupId> - <artifactId>cps-nf-proxy-rest</artifactId> + <artifactId>cps-ncmp-rest</artifactId> + <version>${project.version}</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> diff --git a/docker-compose/application.yml b/cps-application/src/main/resources/application.yml index be4b688cf3..d9b9e7c38d 100644 --- a/docker-compose/application.yml +++ b/cps-application/src/main/resources/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/cps-bom/pom.xml b/cps-bom/pom.xml index ebd18d9d71..12961b8fd2 100644 --- a/cps-bom/pom.xml +++ b/cps-bom/pom.xml @@ -1,4 +1,22 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + 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. + ============LICENSE_END========================================================= +--> + <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> @@ -44,12 +62,12 @@ </dependency> <dependency> <groupId>${project.groupId}</groupId> - <artifactId>cps-nf-proxy-service</artifactId> + <artifactId>cps-ncmp-service</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> - <artifactId>cps-nf-proxy-rest</artifactId> + <artifactId>cps-ncmp-rest</artifactId> <version>${project.version}</version> </dependency> <dependency> diff --git a/cps-nf-proxy-rest/docs/openapi/components.yaml b/cps-ncmp-rest/docs/openapi/components.yaml index af95723cb7..69c37ad7a7 100644 --- a/cps-nf-proxy-rest/docs/openapi/components.yaml +++ b/cps-ncmp-rest/docs/openapi/components.yaml @@ -1,3 +1,20 @@ +# ============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: @@ -23,7 +40,7 @@ components: 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 + 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 diff --git a/cps-nf-proxy-rest/docs/openapi/xnfProxy.yml b/cps-ncmp-rest/docs/openapi/ncmproxy.yml index 141e472582..2a70d70a6d 100644 --- a/cps-nf-proxy-rest/docs/openapi/xnfProxy.yml +++ b/cps-ncmp-rest/docs/openapi/ncmproxy.yml @@ -1,8 +1,25 @@ +# ============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: - - nf-proxy + - network-cm-proxy summary: Get a node given a cm Handle and xpath operationId: getNodeByCmHandleAndXpath parameters: @@ -27,7 +44,7 @@ nodesByCmHandleAndCpsPath: get: description: Query nodes for the given cps path and cm Handle tags: - - nf-proxy + - network-cm-proxy summary: Query data nodes operationId: queryNodesByCmHandleAndCpsPath parameters: @@ -50,7 +67,7 @@ nodesByCmHandleAndXpath: patch: description: Update node leaves for the given cps path and cm Handle tags: - - nf-proxy + - network-cm-proxy summary: Update node leaves operationId: updateNodeLeaves parameters: @@ -77,7 +94,7 @@ nodesByCmHandleAndXpath: put: description: Replace a node with descendants for the given cps path and cm Handle tags: - - nf-proxy + - network-cm-proxy summary: Replace a node with descendants operationId: replaceNode parameters: diff --git a/cps-ncmp-rest/docs/openapi/openapi.yml b/cps-ncmp-rest/docs/openapi/openapi.yml new file mode 100755 index 0000000000..7575022f83 --- /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 0000000000..3abeb7d1f1 --- /dev/null +++ b/cps-ncmp-rest/pom.xml @@ -0,0 +1,136 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + 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. + ============LICENSE_END========================================================= +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> +<modelVersion>4.0.0</modelVersion> +<parent> + <groupId>org.onap.cps</groupId> + <artifactId>cps-parent</artifactId> + <version>1.1.0-SNAPSHOT</version> + <relativePath>../cps-parent/pom.xml</relativePath> +</parent> + +<artifactId>cps-ncmp-rest</artifactId> + +<properties> + <minimum-coverage>0.0</minimum-coverage> +</properties> + +<dependencies> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>cps-ncmp-service</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + <exclusions> + <exclusion> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-tomcat</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-jetty</artifactId> + </dependency> + <dependency> + <groupId>io.swagger.core.v3</groupId> + <artifactId>swagger-annotations</artifactId> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-boot-starter</artifactId> + </dependency> + <dependency> + <groupId>io.swagger</groupId> + <artifactId>swagger-annotations</artifactId> + </dependency> + <!-- T E S T D E P E N D E N C I E S --> + <dependency> + <groupId>org.codehaus.groovy</groupId> + <artifactId>groovy</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.spockframework</groupId> + <artifactId>spock-core</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.spockframework</groupId> + <artifactId>spock-spring</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>cglib</groupId> + <artifactId>cglib-nodep</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + <scope>test</scope> + <exclusions> + <exclusion> + <groupId>org.junit.vintage</groupId> + <artifactId>junit-vintage-engine</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> + </dependency> +</dependencies> + +<build> + <plugins> + <!-- Swagger code generation. --> + <plugin> + <groupId>io.swagger.codegen.v3</groupId> + <artifactId>swagger-codegen-maven-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>generate</goal> + </goals> + <configuration> + <inputSpec>${project.basedir}/docs/openapi/openapi.yml</inputSpec> + <invokerPackage>org.onap.cps.ncmp.rest.controller</invokerPackage> + <modelPackage>org.onap.cps.ncmp.rest.model</modelPackage> + <apiPackage>org.onap.cps.ncmp.rest.api</apiPackage> + <language>spring</language> + <generateSupportingFiles>false</generateSupportingFiles> + <configOptions> + <sourceFolder>src/gen/java</sourceFolder> + <dateLibrary>java11</dateLibrary> + <interfaceOnly>true</interfaceOnly> + <useTags>true</useTags> + </configOptions> + </configuration> + </execution> + </executions> + </plugin> + </plugins> +</build> +</project> diff --git a/cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/config/NfProxyConfig.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/config/NetworkCmProxyConfig.java index defe0f19c8..300765d425 100644 --- a/cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/config/NfProxyConfig.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/config/NetworkCmProxyConfig.java @@ -1,6 +1,7 @@ /*- * ============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. @@ -18,7 +19,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.nfproxy.config; +package org.onap.cps.ncmp.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -28,15 +29,15 @@ import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; @Configuration -public class NfProxyConfig { +public class NetworkCmProxyConfig { /** * Swagger-ui configuration. */ - @Bean("nf-proxy-docket") + @Bean("ncmp-docket") public Docket api() { return new Docket(DocumentationType.OAS_30) - .groupName("nf-proxy-docket") + .groupName("ncmp-docket") .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) diff --git a/cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/rest/controller/NfProxyController.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java index 680ca127b8..acbbdd9399 100644 --- a/cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/rest/controller/NfProxyController.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java @@ -19,14 +19,14 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.nfproxy.rest.controller; +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.nfproxy.api.NfProxyDataService; -import org.onap.cps.nfproxy.rest.api.NfProxyApi; +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; @@ -38,14 +38,14 @@ import org.springframework.web.bind.annotation.RestController; @RestController -@RequestMapping("${rest.api.xnf-base-path}") -public class NfProxyController implements NfProxyApi { +@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 NfProxyDataService nfProxyDataService; + private NetworkCmProxyDataService networkCmProxyDataService; @Override public ResponseEntity<Object> getNodeByCmHandleAndXpath(final String cmHandle, @Valid final String xpath, @@ -55,7 +55,7 @@ public class NfProxyController implements NfProxyApi { } final FetchDescendantsOption fetchDescendantsOption = Boolean.TRUE.equals(includeDescendants) ? FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS : FetchDescendantsOption.OMIT_DESCENDANTS; - final DataNode dataNode = nfProxyDataService.getDataNode(cmHandle, xpath, fetchDescendantsOption); + final DataNode dataNode = networkCmProxyDataService.getDataNode(cmHandle, xpath, fetchDescendantsOption); return new ResponseEntity<>(DataMapUtils.toDataMap(dataNode), HttpStatus.OK); } @@ -65,21 +65,21 @@ public class NfProxyController implements NfProxyApi { final FetchDescendantsOption fetchDescendantsOption = Boolean.TRUE.equals(includeDescendants) ? FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS : FetchDescendantsOption.OMIT_DESCENDANTS; final Collection<DataNode> dataNodes = - nfProxyDataService.queryDataNodes(cmHandle, cpsPath, fetchDescendantsOption); + networkCmProxyDataService.queryDataNodes(cmHandle, cpsPath, fetchDescendantsOption); return new ResponseEntity<>(GSON.toJson(dataNodes), HttpStatus.OK); } @Override public ResponseEntity<Object> replaceNode(@Valid final String jsonData, final String cmHandle, @Valid final String parentNodeXpath) { - nfProxyDataService.replaceNodeTree(cmHandle, parentNodeXpath, jsonData); + networkCmProxyDataService.replaceNodeTree(cmHandle, parentNodeXpath, jsonData); return new ResponseEntity<>(HttpStatus.OK); } @Override public ResponseEntity<Object> updateNodeLeaves(@Valid final String jsonData, final String cmHandle, @Valid final String parentNodeXpath) { - nfProxyDataService.updateNodeLeaves(cmHandle, parentNodeXpath, jsonData); + networkCmProxyDataService.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-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandler.java index ac35e9a1f0..bb922e781b 100755 --- a/cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/rest/exceptions/NfProxyRestExceptionHandler.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandler.java @@ -17,13 +17,13 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.nfproxy.rest.exceptions; +package org.onap.cps.ncmp.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.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; @@ -35,8 +35,8 @@ import org.springframework.web.bind.annotation.RestControllerAdvice; */ @Slf4j @NoArgsConstructor(access = AccessLevel.PRIVATE) -@RestControllerAdvice(assignableTypes = {NfProxyController.class}) -public class NfProxyRestExceptionHandler { +@RestControllerAdvice(assignableTypes = {NetworkCmProxyController.class}) +public class NetworkCmProxyRestExceptionHandler { private static final String CHECK_LOGS_FOR_DETAILS = "Check logs for details."; diff --git a/cps-nf-proxy-rest/src/main/resources/openapi-configuration.json b/cps-ncmp-rest/src/main/resources/openapi-configuration.json index efc2f9778a..5736c3d9b7 100644 --- a/cps-nf-proxy-rest/src/main/resources/openapi-configuration.json +++ b/cps-ncmp-rest/src/main/resources/openapi-configuration.json @@ -1,12 +1,12 @@ { "resourcePackages": [ - "org.onap.cps.nfproxy.rest.controller" + "org.onap.cps.ncmp.rest.controller" ], "prettyPrint": true, "cacheTTL": 0, "openAPI": { "info": { - "title": "ONAP Open API v3 CPS xNF Proxy Spec", + "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" diff --git a/cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/config/NfProxyConfigSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/config/NetworkCmProxyConfigSpec.groovy index da021218d2..4b0e2561e5 100644 --- a/cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/config/NfProxyConfigSpec.groovy +++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/config/NetworkCmProxyConfigSpec.groovy @@ -1,6 +1,7 @@ /* * ============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. @@ -17,16 +18,16 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.nfproxy.config +package org.onap.cps.ncmp.config import spock.lang.Specification import springfox.documentation.spring.web.plugins.Docket -class NfProxyConfigSpec extends Specification { - def objectUnderTest = new NfProxyConfig() +class NetworkCmProxyConfigSpec extends Specification { + def objectUnderTest = new NetworkCmProxyConfig() - def 'NfProxy configuration has a Docket API.'() { - expect: 'the NfProxy configuration has a Docket API' + def 'NetworkCmProxy configuration has a Docket API.'() { + expect: 'the NetworkCmProxy 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-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy index a81411caf0..aa9fa86d1d 100644 --- a/cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/rest/controller/NfProxyControllerSpec.groovy +++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy @@ -19,11 +19,11 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.nfproxy.rest.controller +package org.onap.cps.ncmp.rest.controller import com.google.gson.Gson -import org.onap.cps.nfproxy.api.NfProxyDataService +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 @@ -40,15 +40,15 @@ import static org.onap.cps.spi.FetchDescendantsOption.OMIT_DESCENDANTS import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.* @WebMvcTest -class NfProxyControllerSpec extends Specification { +class NetworkCmProxyControllerSpec extends Specification { @Autowired MockMvc mvc @SpringBean - NfProxyDataService mockNfProxyDataService = Mock() + NetworkCmProxyDataService mockNetworkCmProxyDataService = Mock() - @Value('${rest.api.xnf-base-path}') + @Value('${rest.api.ncmp-base-path}') def basePath def dataNodeBaseEndpoint @@ -65,7 +65,7 @@ class NfProxyControllerSpec extends Specification { 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] + 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' @@ -97,7 +97,7 @@ class NfProxyControllerSpec extends Specification { .param('xpath', xpath) ).andReturn().response then: 'the service method is invoked once with expected parameters' - 1 * mockNfProxyDataService.updateNodeLeaves(cmHandle, xpath, jsonData) + 1 * mockNetworkCmProxyDataService.updateNodeLeaves(cmHandle, xpath, jsonData) and: 'response status indicates success' response.status == HttpStatus.OK.value() } @@ -115,7 +115,7 @@ class NfProxyControllerSpec extends Specification { .param('xpath', xpath) ).andReturn().response then: 'the service method is invoked once with expected parameters' - 1 * mockNfProxyDataService.replaceNodeTree(cmHandle, xpath, jsonData) + 1 * mockNetworkCmProxyDataService.replaceNodeTree(cmHandle, xpath, jsonData) and: 'response status indicates success' response.status == HttpStatus.OK.value() } @@ -124,7 +124,7 @@ class NfProxyControllerSpec extends Specification { 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 + 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' diff --git a/cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/rest/exceptions/NfProxyRestExceptionHandlerSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy index 73b57c5f9b..8153eeb70b 100644 --- a/cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/rest/exceptions/NfProxyRestExceptionHandlerSpec.groovy +++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy @@ -1,6 +1,7 @@ /* * ============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. @@ -17,10 +18,10 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.nfproxy.rest.exceptions +package org.onap.cps.ncmp.rest.exceptions import groovy.json.JsonSlurper -import org.onap.cps.nfproxy.api.NfProxyDataService +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 @@ -35,15 +36,15 @@ import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get @WebMvcTest -class NfProxyRestExceptionHandlerSpec extends Specification { +class NetworkCmProxyRestExceptionHandlerSpec extends Specification { @Autowired MockMvc mvc @SpringBean - NfProxyDataService mockNfProxyDataService = Mock() + NetworkCmProxyDataService mockNetworkCmProxyDataService = Mock() - @Value('${rest.api.xnf-base-path}') + @Value('${rest.api.ncmp-base-path}') def basePath def dataNodeBaseEndpoint @@ -77,7 +78,7 @@ class NfProxyRestExceptionHandlerSpec extends Specification { } def setupTestException(exception) { - mockNfProxyDataService.getDataNode(cmHandle, xpath, FetchDescendantsOption.OMIT_DESCENDANTS) >> + mockNetworkCmProxyDataService.getDataNode(cmHandle, xpath, FetchDescendantsOption.OMIT_DESCENDANTS) >> { throw exception} } diff --git a/cps-nf-proxy-rest/src/test/java/org/onap/cps/TestApplication.java b/cps-ncmp-rest/src/test/java/org/onap/cps/TestApplication.java index 5e0e3679ee..5e0e3679ee 100644 --- a/cps-nf-proxy-rest/src/test/java/org/onap/cps/TestApplication.java +++ b/cps-ncmp-rest/src/test/java/org/onap/cps/TestApplication.java 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 0000000000..14ccf0691f --- /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 0000000000..ddb78d3848 --- /dev/null +++ b/cps-ncmp-service/pom.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + 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. + ============LICENSE_END========================================================= +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<modelVersion>4.0.0</modelVersion> +<parent> + <groupId>org.onap.cps</groupId> + <artifactId>cps-parent</artifactId> + <version>1.1.0-SNAPSHOT</version> + <relativePath>../cps-parent/pom.xml</relativePath> +</parent> + +<artifactId>cps-ncmp-service</artifactId> + +<properties> + <minimum-coverage>0.0</minimum-coverage> +</properties> + +<dependencies> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-validation</artifactId> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>cps-service</artifactId> + </dependency> + <dependency> + <groupId>org.spockframework</groupId> + <artifactId>spock-core</artifactId> + <scope>test</scope> + </dependency> +</dependencies> +</project>
\ 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-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java index cde1801dae..158f20ef93 100644 --- a/cps-nf-proxy-service/src/main/java/org/onap/cps/nfproxy/api/NfProxyDataService.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.nfproxy.api; +package org.onap.cps.ncmp.api; import java.util.Collection; import org.checkerframework.checker.nullness.qual.NonNull; @@ -28,13 +28,13 @@ import org.onap.cps.spi.model.DataNode; /* * Datastore interface for handling CPS data. */ -public interface NfProxyDataService { +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 NF-Proxy + * 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 @@ -47,7 +47,7 @@ public interface NfProxyDataService { * 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 + * 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 @@ -60,7 +60,7 @@ public interface NfProxyDataService { * 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 + * by managed Network CM Proxy * @param parentNodeXpath xpath to parent node * @param jsonData json data */ @@ -70,7 +70,7 @@ public interface NfProxyDataService { * 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 + * by managed Network CM Proxy * @param parentNodeXpath xpath to parent node * @param jsonData json data */ diff --git a/cps-nf-proxy-service/src/main/java/org/onap/cps/nfproxy/api/impl/NfProxyDataServiceImpl.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java index cff92fea69..9e013145da 100755 --- a/cps-nf-proxy-service/src/main/java/org/onap/cps/nfproxy/api/impl/NfProxyDataServiceImpl.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java @@ -18,19 +18,19 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.nfproxy.api.impl; +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.nfproxy.api.NfProxyDataService; +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 NfProxyDataServiceImpl implements NfProxyDataService { +public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService { private static final String NF_PROXY_DATASPACE_NAME = "NFP-Operational"; diff --git a/cps-nf-proxy-service/src/test/groovy/org/onap/cps/api/impl/NfProxyDataServiceImplSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/api/impl/NetworkCmProxyDataServiceImplSpec.groovy index 24549aec83..49028becd7 100644 --- a/cps-nf-proxy-service/src/test/groovy/org/onap/cps/api/impl/NfProxyDataServiceImplSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/api/impl/NetworkCmProxyDataServiceImplSpec.groovy @@ -21,12 +21,12 @@ 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.ncmp.api.impl.NetworkCmProxyDataServiceImpl import org.onap.cps.spi.FetchDescendantsOption import spock.lang.Specification -class NfProxyDataServiceImplSpec extends Specification { - def objectUnderTest = new NfProxyDataServiceImpl() +class NetworkCmProxyDataServiceImplSpec extends Specification { + def objectUnderTest = new NetworkCmProxyDataServiceImpl() def mockcpsDataService = Mock(CpsDataService) def mockcpsQueryService = Mock(CpsQueryService) 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 a6d0949f23..0000000000 --- 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/pom.xml b/cps-nf-proxy-rest/pom.xml deleted file mode 100755 index 1add0a0749..0000000000 --- a/cps-nf-proxy-rest/pom.xml +++ /dev/null @@ -1,113 +0,0 @@ -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.onap.cps</groupId> - <artifactId>cps-parent</artifactId> - <version>1.1.0-SNAPSHOT</version> - <relativePath>../cps-parent/pom.xml</relativePath> - </parent> - - <artifactId>cps-nf-proxy-rest</artifactId> - - <properties> - <minimum-coverage>0.0</minimum-coverage> - </properties> - - <dependencies> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>cps-nf-proxy-service</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - <exclusions> - <exclusion> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-tomcat</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-jetty</artifactId> - </dependency> - <dependency> - <groupId>io.swagger.core.v3</groupId> - <artifactId>swagger-annotations</artifactId> - </dependency> - <dependency> - <groupId>io.springfox</groupId> - <artifactId>springfox-boot-starter</artifactId> - </dependency> - <dependency> - <groupId>io.swagger</groupId> - <artifactId>swagger-annotations</artifactId> - </dependency> - <!-- T E S T D E P E N D E N C I E S --> - <dependency> - <groupId>org.codehaus.groovy</groupId> - <artifactId>groovy</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.spockframework</groupId> - <artifactId>spock-core</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.spockframework</groupId> - <artifactId>spock-spring</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>cglib</groupId> - <artifactId>cglib-nodep</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <scope>test</scope> - <exclusions> - <exclusion> - <groupId>org.junit.vintage</groupId> - <artifactId>junit-vintage-engine</artifactId> - </exclusion> - </exclusions> - </dependency> - </dependencies> - - <build> - <plugins> - <!-- Swagger code generation. --> - <plugin> - <groupId>io.swagger.codegen.v3</groupId> - <artifactId>swagger-codegen-maven-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>generate</goal> - </goals> - <configuration> - <inputSpec>${project.basedir}/docs/openapi/openapi.yml</inputSpec> - <invokerPackage>org.onap.cps.nfproxy.rest.controller</invokerPackage> - <modelPackage>org.onap.cps.nfproxy.rest.model</modelPackage> - <apiPackage>org.onap.cps.nfproxy.rest.api</apiPackage> - <language>spring</language> - <generateSupportingFiles>false</generateSupportingFiles> - <configOptions> - <sourceFolder>src/gen/java</sourceFolder> - <dateLibrary>java11</dateLibrary> - <interfaceOnly>true</interfaceOnly> - <useTags>true</useTags> - </configOptions> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> -</project> 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 fed1559b8b..0000000000 --- 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 38e79f7e70..0000000000 --- a/cps-nf-proxy-service/pom.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.onap.cps</groupId> - <artifactId>cps-parent</artifactId> - <version>1.1.0-SNAPSHOT</version> - <relativePath>../cps-parent/pom.xml</relativePath> - </parent> - - <artifactId>cps-nf-proxy-service</artifactId> - - <properties> - <minimum-coverage>0.0</minimum-coverage> - </properties> - - <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>cps-service</artifactId> - </dependency> - <dependency> - <groupId>org.spockframework</groupId> - <artifactId>spock-core</artifactId> - <scope>test</scope> - </dependency> - </dependencies> -</project>
\ No newline at end of file diff --git a/cps-parent/pom.xml b/cps-parent/pom.xml index 6536cc8788..b76cd2dbc9 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 </sonar.coverage.jacoco.xmlReportPaths> diff --git a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java index 1b8f1968bc..edc56e4229 100755 --- a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java +++ b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. All rights reserved. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. + * Modifications 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. @@ -21,8 +22,10 @@ package org.onap.cps.spi.impl; +import com.google.common.collect.ImmutableSet; import java.util.Collection; import java.util.stream.Collectors; +import javax.transaction.Transactional; import org.onap.cps.spi.CpsAdminPersistenceService; import org.onap.cps.spi.entities.AnchorEntity; import org.onap.cps.spi.entities.DataspaceEntity; @@ -31,6 +34,7 @@ import org.onap.cps.spi.exceptions.AlreadyDefinedException; import org.onap.cps.spi.model.Anchor; import org.onap.cps.spi.repository.AnchorRepository; import org.onap.cps.spi.repository.DataspaceRepository; +import org.onap.cps.spi.repository.FragmentRepository; import org.onap.cps.spi.repository.SchemaSetRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; @@ -48,6 +52,9 @@ public class CpsAdminPersistenceServiceImpl implements CpsAdminPersistenceServic @Autowired private SchemaSetRepository schemaSetRepository; + @Autowired + private FragmentRepository fragmentRepository; + @Override public void createDataspace(final String dataspaceName) { try { @@ -83,10 +90,20 @@ public class CpsAdminPersistenceServiceImpl implements CpsAdminPersistenceServic @Override public Anchor getAnchor(final String dataspaceName, final String anchorName) { + return toAnchor(getAnchorEntity(dataspaceName, anchorName)); + } + + @Transactional + @Override + public void deleteAnchor(final String dataspaceName, final String anchorName) { + final AnchorEntity anchorEntity = getAnchorEntity(dataspaceName, anchorName); + fragmentRepository.deleteByAnchorIn(ImmutableSet.of(anchorEntity)); + anchorRepository.delete(anchorEntity); + } + + private AnchorEntity getAnchorEntity(final String dataspaceName, final String anchorName) { final DataspaceEntity dataspaceEntity = dataspaceRepository.getByName(dataspaceName); - final AnchorEntity anchorEntity = - anchorRepository.getByDataspaceAndName(dataspaceEntity, anchorName); - return toAnchor(anchorEntity); + return anchorRepository.getByDataspaceAndName(dataspaceEntity, anchorName); } private static Anchor toAnchor(final AnchorEntity anchorEntity) { diff --git a/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsAdminPersistenceServiceSpec.groovy b/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsAdminPersistenceServiceSpec.groovy index 7ab099dd4c..0d75d3fed3 100644 --- a/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsAdminPersistenceServiceSpec.groovy +++ b/cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsAdminPersistenceServiceSpec.groovy @@ -1,6 +1,7 @@ /* * ============LICENSE_START======================================================= * Copyright (C) 2021 Nordix Foundation + * Modifications 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. @@ -36,6 +37,8 @@ class CpsAdminPersistenceServiceSpec extends CpsPersistenceSpecBase { static final String SET_DATA = '/data/anchor.sql' static final String EMPTY_DATASPACE_NAME = 'DATASPACE-002' + static final Integer DELETED_ANCHOR_ID = 3001 + static final Long DELETED_FRAGMENT_ID = 4001 @Sql(CLEAR_DATA) def 'Create and retrieve a new dataspace.'() { @@ -77,10 +80,10 @@ class CpsAdminPersistenceServiceSpec extends CpsPersistenceSpecBase { then: 'an #expectedException is thrown' thrown(expectedException) where: 'the following data is used' - scenario | dataspaceName | schemaSetName | anchorName || expectedException - 'dataspace does not exist' | 'unknown' | 'not-relevant' | 'not-relevant' || DataspaceNotFoundException - 'schema set does not exist' | DATASPACE_NAME | 'unknown' | 'not-relevant' || SchemaSetNotFoundException - 'anchor already exists' | DATASPACE_NAME | SCHEMA_SET_NAME1 | ANCHOR_NAME1 || AlreadyDefinedException + scenario | dataspaceName | schemaSetName | anchorName || expectedException + 'dataspace does not exist' | 'unknown' | 'not-relevant' | 'not-relevant' || DataspaceNotFoundException + 'schema set does not exist' | DATASPACE_NAME | 'unknown' | 'not-relevant' || SchemaSetNotFoundException + 'anchor already exists' | DATASPACE_NAME | SCHEMA_SET_NAME1 | ANCHOR_NAME1 || AlreadyDefinedException } @Unroll @@ -91,9 +94,9 @@ class CpsAdminPersistenceServiceSpec extends CpsPersistenceSpecBase { then: 'an #expectedException is thrown' thrown(expectedException) where: 'the following data is used' - scenario | dataspaceName | anchorName || expectedException - 'dataspace does not exist' | 'unknown' | 'not-relevant' || DataspaceNotFoundException - 'anchor does not exists' | DATASPACE_NAME | 'unknown' || AnchorNotFoundException + scenario | dataspaceName | anchorName || expectedException + 'dataspace does not exist' | 'unknown' | 'not-relevant' || DataspaceNotFoundException + 'anchor does not exists' | DATASPACE_NAME | 'unknown' || AnchorNotFoundException } @Unroll @@ -118,4 +121,26 @@ class CpsAdminPersistenceServiceSpec extends CpsPersistenceSpecBase { then: 'an DataspaceNotFoundException is thrown' thrown(DataspaceNotFoundException) } + + @Sql([CLEAR_DATA, SET_DATA]) + def 'Delete anchor'() { + when: 'delete anchor action is invoked' + objectUnderTest.deleteAnchor(DATASPACE_NAME, ANCHOR_NAME1) + then: 'anchor and associated data fragment are deleted' + assert anchorRepository.findById(DELETED_ANCHOR_ID).isEmpty() + assert fragmentRepository.findById(DELETED_FRAGMENT_ID).isEmpty() + } + + @Unroll + @Sql([CLEAR_DATA, SET_DATA]) + def 'delete anchor error scenario: #scenario'(){ + when: 'delete anchor attempt is performed' + objectUnderTest.deleteAnchor(dataspaceName, anchorName) + then: 'an #expectedException is thrown' + thrown(expectedException) + where: 'the following data is used' + scenario | dataspaceName | anchorName || expectedException + 'dataspace does not exist' | 'unknown' | 'not-relevant' || DataspaceNotFoundException + 'anchor does not exists' | DATASPACE_NAME | 'unknown' || AnchorNotFoundException + } } diff --git a/cps-ri/src/test/resources/data/anchor.sql b/cps-ri/src/test/resources/data/anchor.sql index 1d9b4b1ecb..a7d3e67154 100644 --- a/cps-ri/src/test/resources/data/anchor.sql +++ b/cps-ri/src/test/resources/data/anchor.sql @@ -6,4 +6,7 @@ INSERT INTO SCHEMA_SET (ID, NAME, DATASPACE_ID) VALUES INSERT INTO ANCHOR (ID, NAME, DATASPACE_ID, SCHEMA_SET_ID) VALUES (3001, 'ANCHOR-001', 1001, 2001), - (3002, 'ANCHOR-002', 1001, 2002);
\ No newline at end of file + (3002, 'ANCHOR-002', 1001, 2002); + +INSERT INTO FRAGMENT (ID, DATASPACE_ID, ANCHOR_ID, PARENT_ID, XPATH, ATTRIBUTES) VALUES + (4001, 1001, 3001, null, '/xpath', '{}');
\ No newline at end of file diff --git a/cps-service/src/main/java/org/onap/cps/api/CpsAdminService.java b/cps-service/src/main/java/org/onap/cps/api/CpsAdminService.java index 0379ac21d6..1e4c9c7354 100755 --- a/cps-service/src/main/java/org/onap/cps/api/CpsAdminService.java +++ b/cps-service/src/main/java/org/onap/cps/api/CpsAdminService.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. + * Modifications 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. @@ -62,9 +63,17 @@ public interface CpsAdminService { * Get an anchor in the given dataspace using the anchor name. * * @param dataspaceName dataspace name - * @param anchorName anchor name + * @param anchorName anchor name * @return an anchor */ @NonNull Anchor getAnchor(@NonNull String dataspaceName, @NonNull String anchorName); + + /** + * Delete anchor by name in given dataspace. + * + * @param dataspaceName dataspace name + * @param anchorName anchor name + */ + void deleteAnchor(@NonNull String dataspaceName, @NonNull String anchorName); } diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsAdminServiceImpl.java b/cps-service/src/main/java/org/onap/cps/api/impl/CpsAdminServiceImpl.java index 09550f1936..25185731b3 100755 --- a/cps-service/src/main/java/org/onap/cps/api/impl/CpsAdminServiceImpl.java +++ b/cps-service/src/main/java/org/onap/cps/api/impl/CpsAdminServiceImpl.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. + * Modifications 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. @@ -52,4 +53,9 @@ public class CpsAdminServiceImpl implements CpsAdminService { public Anchor getAnchor(final String dataspaceName, final String anchorName) { return cpsAdminPersistenceService.getAnchor(dataspaceName, anchorName); } + + @Override + public void deleteAnchor(final String dataspaceName, final String anchorName) { + cpsAdminPersistenceService.deleteAnchor(dataspaceName, anchorName); + } }
\ No newline at end of file diff --git a/cps-service/src/main/java/org/onap/cps/spi/CpsAdminPersistenceService.java b/cps-service/src/main/java/org/onap/cps/spi/CpsAdminPersistenceService.java index f47af5f976..35e07f83ba 100755 --- a/cps-service/src/main/java/org/onap/cps/spi/CpsAdminPersistenceService.java +++ b/cps-service/src/main/java/org/onap/cps/spi/CpsAdminPersistenceService.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. All rights reserved. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. + * Modifications 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. @@ -67,4 +68,12 @@ public interface CpsAdminPersistenceService { */ @NonNull Anchor getAnchor(@NonNull String dataspaceName, @NonNull String anchorName); + + /** + * Delete anchor by name in given dataspace. + * + * @param dataspaceName dataspace name + * @param anchorName anchor name + */ + void deleteAnchor(@NonNull String dataspaceName, @NonNull String anchorName); }
\ No newline at end of file diff --git a/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java b/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java index ea0626c2b2..cf79ad7e0b 100644 --- a/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java +++ b/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java @@ -30,6 +30,7 @@ import java.util.Set; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.onap.cps.utils.YangUtils; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; @@ -150,8 +151,10 @@ public class DataNodeBuilder { } private static void addYangContainer(final DataNode currentDataNode, final DataContainerNode<?> dataContainerNode) { - final DataNode dataContainerDataNode = createAndAddChildDataNode(currentDataNode, - YangUtils.buildXpath(dataContainerNode.getIdentifier())); + final DataNode dataContainerDataNode = + (dataContainerNode.getIdentifier() instanceof YangInstanceIdentifier.AugmentationIdentifier) + ? currentDataNode + : createAndAddChildDataNode(currentDataNode, YangUtils.buildXpath(dataContainerNode.getIdentifier())); final Collection<DataContainerChild<?, ?>> normalizedChildNodes = dataContainerNode.getValue(); for (final NormalizedNode<?, ?> normalizedNode : normalizedChildNodes) { addDataNodeFromNormalizedNode(dataContainerDataNode, normalizedNode); diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsAdminServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsAdminServiceImplSpec.groovy index 6631a20136..b1fc4dc7d1 100755 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsAdminServiceImplSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsAdminServiceImplSpec.groovy @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. + * Modifications 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. @@ -61,4 +62,11 @@ class CpsAdminServiceImplSpec extends Specification { expect: 'the anchor provided by persistence service is returned as result' objectUnderTest.getAnchor('someDataspace','someAnchor') == anchor } + + def 'Delete anchor.'() { + when: 'delete anchor is invoked' + objectUnderTest.deleteAnchor('someDataspace','someAnchor') + then: 'associated persistence service method is invoked with same parameters' + 1 * mockCpsAdminPersistenceService.deleteAnchor('someDataspace','someAnchor') + } } diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy index a24bd0af5c..a09166df19 100755 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy @@ -52,7 +52,11 @@ class E2ENetworkSliceSpec extends Specification { def 'E2E model can be parsed by CPS.'() {
given: 'Valid yang resource as name-to-content map'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('e2e/basic/ietf-inet-types.yang','e2e/basic/ietf-yang-types.yang','e2e/basic/ran-network2020-08-06.yang')
+ def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(
+ 'ietf/ietf-inet-types@2013-07-15.yang',
+ 'ietf/ietf-yang-types@2013-07-15.yang',
+ 'e2e/basic/ran-network2020-08-06.yang'
+ )
when: 'Create schema set method is invoked'
cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)
then: 'Parameters are validated and processing is delegated to persistence service'
@@ -144,8 +148,8 @@ class E2ENetworkSliceSpec extends Specification { def 'E2E RAN Schema Model.'(){
given: 'yang resources'
def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(
- 'e2e/basic/ietf-inet-types.yang',
- 'e2e/basic/ietf-yang-types.yang',
+ 'ietf/ietf-inet-types@2013-07-15.yang',
+ 'ietf/ietf-yang-types@2013-07-15.yang',
'e2e/basic/cps-ran-schema-model@2021-01-28.yang'
)
and : 'json data'
diff --git a/cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy index dca648b04c..901e0b60ce 100644 --- a/cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy @@ -35,6 +35,15 @@ class DataNodeBuilderSpec extends Specification { '/test-tree/branch[@name=\'Right\']/nest': [name: 'Big', birds: ['Owl', 'Raven', 'Crow']] ] + String[] networkTopologyModelRfc8345 = [ + 'ietf/ietf-yang-types@2013-07-15.yang', + 'ietf/ietf-network-topology-state@2018-02-26.yang', + 'ietf/ietf-network-topology@2018-02-26.yang', + 'ietf/ietf-network-state@2018-02-26.yang', + 'ietf/ietf-network@2018-02-26.yang', + 'ietf/ietf-inet-types@2013-07-15.yang' + ] + def 'Converting NormalizedNode (tree) to a DataNode (tree).'() { given: 'the schema context for expected model' def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('test-tree.yang') @@ -74,6 +83,55 @@ class DataNodeBuilderSpec extends Specification { mappedResult.keySet() .containsAll(['/test-tree/branch[@name=\'Branch\']', '/test-tree/branch[@name=\'Branch\']/nest']) } + def 'Converting NormalizedNode (tree) to a DataNode (tree) -- augmentation case.'() { + given: 'a schema context for expected model' + def yangResourceNameToContent = TestUtils.getYangResourcesAsMap(networkTopologyModelRfc8345) + def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) getSchemaContext() + and: 'the json data parsed into normalized node object' + def jsonData = TestUtils.getResourceFileContent('ietf/data/ietf-network-topology-sample-rfc8345.json') + def normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext) + when: 'the normalized node is converted to a data node ' + def result = new DataNodeBuilder().withNormalizedNodeTree(normalizedNode).build() + def mappedResult = TestUtils.getFlattenMapByXpath(result) + then: 'all expected data nodes are populated' + mappedResult.size() == 32 + println(mappedResult.keySet().sort()) + and: 'xpaths for augmentation nodes (link and termination-point nodes) were built correctly' + mappedResult.keySet().containsAll([ + "/networks/network[@network-id='otn-hc']/link[@link-id='D1,1-2-1,D2,2-1-1']", + "/networks/network[@network-id='otn-hc']/link[@link-id='D1,1-3-1,D3,3-1-1']", + "/networks/network[@network-id='otn-hc']/link[@link-id='D2,2-1-1,D1,1-2-1']", + "/networks/network[@network-id='otn-hc']/link[@link-id='D2,2-3-1,D3,3-2-1']", + "/networks/network[@network-id='otn-hc']/link[@link-id='D3,3-1-1,D1,1-3-1']", + "/networks/network[@network-id='otn-hc']/link[@link-id='D3,3-2-1,D2,2-3-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D1']/termination-point[@tp-id='1-0-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D1']/termination-point[@tp-id='1-2-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D1']/termination-point[@tp-id='1-3-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D2']/termination-point[@tp-id='2-0-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D2']/termination-point[@tp-id='2-1-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D2']/termination-point[@tp-id='2-3-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D3']/termination-point[@tp-id='3-1-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D3']/termination-point[@tp-id='3-2-1']" + ]) + } + + def 'Converting NormalizedNode (tree) to a DataNode (tree) for known parent node -- augmentation case.'() { + given: 'a schema context for expected model' + def yangResourceNameToContent = TestUtils.getYangResourcesAsMap(networkTopologyModelRfc8345) + def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) getSchemaContext() + and: 'parent node xpath referencing augmentation node within a model' + def parentNodeXpath = "/networks/network[@network-id='otn-hc']/link[@link-id='D1,1-2-1,D2,2-1-1']" + and: 'the json data fragment parsed into normalized node object for given parent node xpath' + def jsonData = '{"source": {"source-node": "D1", "source-tp": "1-2-1"}}' + def normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext, parentNodeXpath) + when: 'the normalized node is converted to a data node with given parent node xpath' + def result = new DataNodeBuilder().withNormalizedNodeTree(normalizedNode) + .withParentNodeXpath(parentNodeXpath).build() + then: 'the resulting data node represents a child of augmentation node' + assert result.xpath == "/networks/network[@network-id='otn-hc']/link[@link-id='D1,1-2-1,D2,2-1-1']/source" + assert result.leaves['source-node'] == 'D1' + assert result.leaves['source-tp'] == '1-2-1' + } def static assertLeavesMaps(actualLeavesMap, expectedLeavesMap) { expectedLeavesMap.each { key, value -> @@ -88,5 +146,4 @@ class DataNodeBuilderSpec extends Specification { } } } - } diff --git a/cps-service/src/test/resources/ietf/data/ietf-network-topology-sample-rfc8345.json b/cps-service/src/test/resources/ietf/data/ietf-network-topology-sample-rfc8345.json new file mode 100644 index 0000000000..8f2ee022cb --- /dev/null +++ b/cps-service/src/test/resources/ietf/data/ietf-network-topology-sample-rfc8345.json @@ -0,0 +1,120 @@ +{ + "ietf-network:networks": { + "network": [ + { + "network-types": { + }, + "network-id": "otn-hc", + "node": [ + { + "node-id": "D1", + "termination-point": [ + { + "tp-id": "1-0-1" + }, + { + "tp-id": "1-2-1" + }, + { + "tp-id": "1-3-1" + } + ] + }, + { + "node-id": "D2", + "termination-point": [ + { + "tp-id": "2-0-1" + }, + { + "tp-id": "2-1-1" + }, + { + "tp-id": "2-3-1" + } + ] + }, + { + "node-id": "D3", + "termination-point": [ + { + "tp-id": "3-1-1" + }, + { + "tp-id": "3-2-1" + } + ] + } + ], + "ietf-network-topology:link": [ + { + "link-id": "D1,1-2-1,D2,2-1-1", + "source": { + "source-node": "D1", + "source-tp": "1-2-1" + }, + "destination": { + "dest-node": "D2", + "dest-tp": "2-1-1" + } + }, + { + "link-id": "D2,2-1-1,D1,1-2-1", + "source": { + "source-node": "D2", + "source-tp": "2-1-1" + }, + "destination": { + "dest-node": "D1", + "dest-tp": "1-2-1" + } + }, + { + "link-id": "D1,1-3-1,D3,3-1-1", + "source": { + "source-node": "D1", + "source-tp": "1-3-1" + }, + "destination": { + "dest-node": "D3", + "dest-tp": "3-1-1" + } + }, + { + "link-id": "D3,3-1-1,D1,1-3-1", + "source": { + "source-node": "D3", + "source-tp": "3-1-1" + }, + "destination": { + "dest-node": "D1", + "dest-tp": "1-3-1" + } + }, + { + "link-id": "D2,2-3-1,D3,3-2-1", + "source": { + "source-node": "D2", + "source-tp": "2-3-1" + }, + "destination": { + "dest-node": "D3", + "dest-tp": "3-2-1" + } + }, + { + "link-id": "D3,3-2-1,D2,2-3-1", + "source": { + "source-node": "D3", + "source-tp": "3-2-1" + }, + "destination": { + "dest-node": "D2", + "dest-tp": "2-3-1" + } + } + ] + } + ] + } + } diff --git a/cps-service/src/test/resources/e2e/basic/ietf-inet-types.yang b/cps-service/src/test/resources/ietf/ietf-inet-types@2013-07-15.yang index 2f14270dec..eacefb6363 100755..100644 --- a/cps-service/src/test/resources/e2e/basic/ietf-inet-types.yang +++ b/cps-service/src/test/resources/ietf/ietf-inet-types@2013-07-15.yang @@ -328,6 +328,7 @@ module ietf-inet-types { + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)' + '(/.+)'; } + description "The ipv6-prefix type represents an IPv6 address prefix. The prefix length is given by the number following the @@ -353,11 +354,11 @@ module ietf-inet-types { typedef domain-name { type string { - length "1..253"; pattern '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*' + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)' + '|\.'; + length "1..253"; } description "The domain-name type represents a DNS domain name. The diff --git a/cps-service/src/test/resources/ietf/ietf-network-state@2018-02-26.yang b/cps-service/src/test/resources/ietf/ietf-network-state@2018-02-26.yang new file mode 100644 index 0000000000..9a6893da20 --- /dev/null +++ b/cps-service/src/test/resources/ietf/ietf-network-state@2018-02-26.yang @@ -0,0 +1,176 @@ +module ietf-network-state { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-network-state"; + prefix nw-s; + + import ietf-network { + prefix nw; + reference + "RFC 8345: A YANG Data Model for Network Topologies"; + } + + organization + "IETF I2RS (Interface to the Routing System) Working Group"; + + contact + "WG Web: <https://datatracker.ietf.org/wg/i2rs/> + WG List: <mailto:i2rs@ietf.org> + + Editor: Alexander Clemm + <mailto:ludwig@clemm.org> + + Editor: Jan Medved + <mailto:jmedved@cisco.com> + + Editor: Robert Varga + <mailto:robert.varga@pantheon.tech> + + Editor: Nitin Bahadur + <mailto:nitin_bahadur@yahoo.com> + Editor: Hariharan Ananthakrishnan + <mailto:hari@packetdesign.com> + + Editor: Xufeng Liu + <mailto:xufeng.liu.ietf@gmail.com>"; + + description + "This module defines a common base data model for a collection + of nodes in a network. Node definitions are further used + in network topologies and inventories. It represents + information that either (1) is learned and automatically + populated or (2) results from applying network information + that has been configured per the 'ietf-network' data model, + mirroring the corresponding data nodes in this data model. + + The data model mirrors 'ietf-network' but contains only + read-only state data. The data model is not needed when the + underlying implementation infrastructure supports the Network + Management Datastore Architecture (NMDA). + + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 8345; + see the RFC itself for full legal notices."; + + revision 2018-02-26 { + description + "Initial revision."; + reference + "RFC 8345: A YANG Data Model for Network Topologies"; + } + + grouping network-ref { + description + "Contains the information necessary to reference a network -- + for example, an underlay network."; + leaf network-ref { + type leafref { + path "/nw-s:networks/nw-s:network/nw-s:network-id"; + require-instance false; + } + description + "Used to reference a network -- for example, an underlay + network."; + } + } + + grouping node-ref { + description + "Contains the information necessary to reference a node."; + leaf node-ref { + type leafref { + path "/nw-s:networks/nw-s:network[nw-s:network-id=current()"+ + "/../network-ref]/nw-s:node/nw-s:node-id"; + require-instance false; + } + description + "Used to reference a node. + Nodes are identified relative to the network that + contains them."; + } + uses network-ref; + } + + container networks { + config false; + description + "Serves as a top-level container for a list of networks."; + list network { + key "network-id"; + description + "Describes a network. + A network typically contains an inventory of nodes, + topological information (augmented through the + network-topology data model), and layering information."; + container network-types { + description + "Serves as an augmentation target. + The network type is indicated through corresponding + presence containers augmented into this container."; + } + leaf network-id { + type nw:network-id; + description + "Identifies a network."; + } + list supporting-network { + key "network-ref"; + description + "An underlay network, used to represent layered network + topologies."; + leaf network-ref { + type leafref { + path "/nw-s:networks/nw-s:network/nw-s:network-id"; + require-instance false; + } + description + "References the underlay network."; + } + } + + list node { + key "node-id"; + description + "The inventory of nodes of this network."; + leaf node-id { + type nw:node-id; + description + "Uniquely identifies a node within the containing + network."; + } + list supporting-node { + key "network-ref node-ref"; + description + "Represents another node that is in an underlay network + and that supports this node. Used to represent layering + structure."; + leaf network-ref { + type leafref { + path "../../../nw-s:supporting-network/nw-s:network-ref"; + require-instance false; + } + description + "References the underlay network of which the + underlay node is a part."; + } + leaf node-ref { + type leafref { + path "/nw-s:networks/nw-s:network/nw-s:node/nw-s:node-id"; + require-instance false; + } + description + "References the underlay node itself."; + } + } + } + } + } +} diff --git a/cps-service/src/test/resources/ietf/ietf-network-topology-state@2018-02-26.yang b/cps-service/src/test/resources/ietf/ietf-network-topology-state@2018-02-26.yang new file mode 100644 index 0000000000..1c1ba1b2e5 --- /dev/null +++ b/cps-service/src/test/resources/ietf/ietf-network-topology-state@2018-02-26.yang @@ -0,0 +1,273 @@ +module ietf-network-topology-state { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-network-topology-state"; + prefix nt-s; + + import ietf-network-state { + prefix nw-s; + reference + "RFC 8345: A YANG Data Model for Network Topologies"; + } + import ietf-network-topology { + prefix nt; + reference + "RFC 8345: A YANG Data Model for Network Topologies"; + } + + organization + "IETF I2RS (Interface to the Routing System) Working Group"; + + contact + "WG Web: <https://datatracker.ietf.org/wg/i2rs/> + WG List: <mailto:i2rs@ietf.org> + + Editor: Alexander Clemm + <mailto:ludwig@clemm.org> + + Editor: Jan Medved + <mailto:jmedved@cisco.com> + + Editor: Robert Varga + <mailto:robert.varga@pantheon.tech> + + Editor: Nitin Bahadur + <mailto:nitin_bahadur@yahoo.com> + + Editor: Hariharan Ananthakrishnan + <mailto:hari@packetdesign.com> + + Editor: Xufeng Liu + <mailto:xufeng.liu.ietf@gmail.com>"; + + description + "This module defines a common base data model for network + topology state, representing topology that either (1) is learned + or (2) results from applying topology that has been configured + per the 'ietf-network-topology' data model, mirroring the + corresponding data nodes in this data model. It augments the + base network state data model with links to connect nodes, as + well as termination points to terminate links on nodes. + + The data model mirrors 'ietf-network-topology' but contains only + read-only state data. The data model is not needed when the + underlying implementation infrastructure supports the Network + Management Datastore Architecture (NMDA). + + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 8345; + see the RFC itself for full legal notices."; + + revision 2018-02-26 { + description + "Initial revision."; + reference + "RFC 8345: A YANG Data Model for Network Topologies"; + } + + grouping link-ref { + description + "References a link in a specific network. Although this + grouping is not used in this module, it is defined here for + the convenience of augmenting modules."; + leaf link-ref { + type leafref { + path "/nw-s:networks/nw-s:network[nw-s:network-id=current()"+ + "/../network-ref]/nt-s:link/nt-s:link-id"; + require-instance false; + } + description + "A type for an absolute reference to a link instance. + (This type should not be used for relative references. + In such a case, a relative path should be used instead.)"; + } + uses nw-s:network-ref; + } + + grouping tp-ref { + description + "References a termination point in a specific node. Although + this grouping is not used in this module, it is defined here + for the convenience of augmenting modules."; + leaf tp-ref { + type leafref { + path "/nw-s:networks/nw-s:network[nw-s:network-id=current()"+ + "/../network-ref]/nw-s:node[nw-s:node-id=current()/../"+ + "node-ref]/nt-s:termination-point/nt-s:tp-id"; + require-instance false; + } + description + "A type for an absolute reference to a termination point. + (This type should not be used for relative references. + In such a case, a relative path should be used instead.)"; + } + uses nw-s:node-ref; + } + + augment "/nw-s:networks/nw-s:network" { + description + "Add links to the network data model."; + list link { + key "link-id"; + description + "A network link connects a local (source) node and + a remote (destination) node via a set of the respective + node's termination points. It is possible to have several + links between the same source and destination nodes. + Likewise, a link could potentially be re-homed between + termination points. Therefore, in order to ensure that we + would always know to distinguish between links, every link + is identified by a dedicated link identifier. Note that a + link models a point-to-point link, not a multipoint link."; + container source { + description + "This container holds the logical source of a particular + link."; + leaf source-node { + type leafref { + path "../../../nw-s:node/nw-s:node-id"; + require-instance false; + } + description + "Source node identifier. Must be in the same topology."; + } + leaf source-tp { + type leafref { + path "../../../nw-s:node[nw-s:node-id=current()/../"+ + "source-node]/termination-point/tp-id"; + require-instance false; + } + description + "This termination point is located within the source node + and terminates the link."; + } + } + container destination { + description + "This container holds the logical destination of a + particular link."; + leaf dest-node { + type leafref { + path "../../../nw-s:node/nw-s:node-id"; + require-instance false; + } + description + "Destination node identifier. Must be in the same + network."; + } + + leaf dest-tp { + type leafref { + path "../../../nw-s:node[nw-s:node-id=current()/../"+ + "dest-node]/termination-point/tp-id"; + require-instance false; + } + description + "This termination point is located within the + destination node and terminates the link."; + } + } + leaf link-id { + type nt:link-id; + description + "The identifier of a link in the topology. + A link is specific to a topology to which it belongs."; + } + list supporting-link { + key "network-ref link-ref"; + description + "Identifies the link or links on which this link depends."; + leaf network-ref { + type leafref { + path "../../../nw-s:supporting-network/nw-s:network-ref"; + require-instance false; + } + description + "This leaf identifies in which underlay topology + the supporting link is present."; + } + leaf link-ref { + type leafref { + path "/nw-s:networks/nw-s:network[nw-s:network-id="+ + "current()/../network-ref]/link/link-id"; + require-instance false; + } + description + "This leaf identifies a link that is a part + of this link's underlay. Reference loops in which + a link identifies itself as its underlay, either + directly or transitively, are not allowed."; + } + } + } + } + + augment "/nw-s:networks/nw-s:network/nw-s:node" { + description + "Augments termination points that terminate links. + Termination points can ultimately be mapped to interfaces."; + list termination-point { + key "tp-id"; + description + "A termination point can terminate a link. + Depending on the type of topology, a termination point + could, for example, refer to a port or an interface."; + leaf tp-id { + type nt:tp-id; + description + "Termination point identifier."; + } + list supporting-termination-point { + key "network-ref node-ref tp-ref"; + description + "This list identifies any termination points on which a + given termination point depends or onto which it maps. + Those termination points will themselves be contained + in a supporting node. This dependency information can be + inferred from the dependencies between links. Therefore, + this item is not separately configurable. Hence, no + corresponding constraint needs to be articulated. + The corresponding information is simply provided by the + implementing system."; + leaf network-ref { + type leafref { + path "../../../nw-s:supporting-node/nw-s:network-ref"; + require-instance false; + } + description + "This leaf identifies in which topology the + supporting termination point is present."; + } + leaf node-ref { + type leafref { + path "../../../nw-s:supporting-node/nw-s:node-ref"; + require-instance false; + } + description + "This leaf identifies in which node the supporting + termination point is present."; + } + + leaf tp-ref { + type leafref { + path "/nw-s:networks/nw-s:network[nw-s:network-id="+ + "current()/../network-ref]/nw-s:node[nw-s:node-id="+ + "current()/../node-ref]/termination-point/tp-id"; + require-instance false; + } + description + "Reference to the underlay node (the underlay node must + be in a different topology)."; + } + } + } + } +} diff --git a/cps-service/src/test/resources/ietf/ietf-network-topology@2018-02-26.yang b/cps-service/src/test/resources/ietf/ietf-network-topology@2018-02-26.yang new file mode 100644 index 0000000000..1ec944d791 --- /dev/null +++ b/cps-service/src/test/resources/ietf/ietf-network-topology@2018-02-26.yang @@ -0,0 +1,294 @@ +module ietf-network-topology { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-network-topology"; + prefix nt; + + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-network { + prefix nw; + reference + "RFC 8345: A YANG Data Model for Network Topologies"; + } + + organization + "IETF I2RS (Interface to the Routing System) Working Group"; + + contact + "WG Web: <https://datatracker.ietf.org/wg/i2rs/> + WG List: <mailto:i2rs@ietf.org> + + Editor: Alexander Clemm + <mailto:ludwig@clemm.org> + + Editor: Jan Medved + <mailto:jmedved@cisco.com> + + Editor: Robert Varga + <mailto:robert.varga@pantheon.tech> + + Editor: Nitin Bahadur + <mailto:nitin_bahadur@yahoo.com> + + Editor: Hariharan Ananthakrishnan + <mailto:hari@packetdesign.com> + + Editor: Xufeng Liu + <mailto:xufeng.liu.ietf@gmail.com>"; + + description + "This module defines a common base model for a network topology, + augmenting the base network data model with links to connect + nodes, as well as termination points to terminate links + on nodes. + + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 8345; + see the RFC itself for full legal notices."; + + revision 2018-02-26 { + description + "Initial revision."; + reference + "RFC 8345: A YANG Data Model for Network Topologies"; + } + + typedef link-id { + type inet:uri; + description + "An identifier for a link in a topology. The precise + structure of the link-id will be up to the implementation. + The identifier SHOULD be chosen such that the same link in a + real network topology will always be identified through the + same identifier, even if the data model is instantiated in + separate datastores. An implementation MAY choose to capture + semantics in the identifier -- for example, to indicate the + type of link and/or the type of topology of which the link is + a part."; + } + + typedef tp-id { + type inet:uri; + description + "An identifier for termination points on a node. The precise + structure of the tp-id will be up to the implementation. + The identifier SHOULD be chosen such that the same termination + point in a real network topology will always be identified + through the same identifier, even if the data model is + instantiated in separate datastores. An implementation MAY + choose to capture semantics in the identifier -- for example, + to indicate the type of termination point and/or the type of + node that contains the termination point."; + } + + grouping link-ref { + description + "This grouping can be used to reference a link in a specific + network. Although it is not used in this module, it is + defined here for the convenience of augmenting modules."; + leaf link-ref { + type leafref { + path "/nw:networks/nw:network[nw:network-id=current()/../"+ + "network-ref]/nt:link/nt:link-id"; + require-instance false; + } + description + "A type for an absolute reference to a link instance. + (This type should not be used for relative references. + In such a case, a relative path should be used instead.)"; + } + uses nw:network-ref; + } + + grouping tp-ref { + description + "This grouping can be used to reference a termination point + in a specific node. Although it is not used in this module, + it is defined here for the convenience of augmenting + modules."; + leaf tp-ref { + type leafref { + path "/nw:networks/nw:network[nw:network-id=current()/../"+ + "network-ref]/nw:node[nw:node-id=current()/../"+ + "node-ref]/nt:termination-point/nt:tp-id"; + require-instance false; + } + description + "A type for an absolute reference to a termination point. + (This type should not be used for relative references. + In such a case, a relative path should be used instead.)"; + } + uses nw:node-ref; + } + + augment "/nw:networks/nw:network" { + description + "Add links to the network data model."; + list link { + key "link-id"; + description + "A network link connects a local (source) node and + a remote (destination) node via a set of the respective + node's termination points. It is possible to have several + links between the same source and destination nodes. + Likewise, a link could potentially be re-homed between + termination points. Therefore, in order to ensure that we + would always know to distinguish between links, every link + is identified by a dedicated link identifier. Note that a + link models a point-to-point link, not a multipoint link."; + leaf link-id { + type link-id; + description + "The identifier of a link in the topology. + A link is specific to a topology to which it belongs."; + } + container source { + description + "This container holds the logical source of a particular + link."; + leaf source-node { + type leafref { + path "../../../nw:node/nw:node-id"; + require-instance false; + } + description + "Source node identifier. Must be in the same topology."; + } + leaf source-tp { + type leafref { + path "../../../nw:node[nw:node-id=current()/../"+ + "source-node]/termination-point/tp-id"; + require-instance false; + } + description + "This termination point is located within the source node + and terminates the link."; + } + } + + container destination { + description + "This container holds the logical destination of a + particular link."; + leaf dest-node { + type leafref { + path "../../../nw:node/nw:node-id"; + require-instance false; + } + description + "Destination node identifier. Must be in the same + network."; + } + leaf dest-tp { + type leafref { + path "../../../nw:node[nw:node-id=current()/../"+ + "dest-node]/termination-point/tp-id"; + require-instance false; + } + description + "This termination point is located within the + destination node and terminates the link."; + } + } + list supporting-link { + key "network-ref link-ref"; + description + "Identifies the link or links on which this link depends."; + leaf network-ref { + type leafref { + path "../../../nw:supporting-network/nw:network-ref"; + require-instance false; + } + description + "This leaf identifies in which underlay topology + the supporting link is present."; + } + + leaf link-ref { + type leafref { + path "/nw:networks/nw:network[nw:network-id=current()/"+ + "../network-ref]/link/link-id"; + require-instance false; + } + description + "This leaf identifies a link that is a part + of this link's underlay. Reference loops in which + a link identifies itself as its underlay, either + directly or transitively, are not allowed."; + } + } + } + } + augment "/nw:networks/nw:network/nw:node" { + description + "Augments termination points that terminate links. + Termination points can ultimately be mapped to interfaces."; + list termination-point { + key "tp-id"; + description + "A termination point can terminate a link. + Depending on the type of topology, a termination point + could, for example, refer to a port or an interface."; + leaf tp-id { + type tp-id; + description + "Termination point identifier."; + } + list supporting-termination-point { + key "network-ref node-ref tp-ref"; + description + "This list identifies any termination points on which a + given termination point depends or onto which it maps. + Those termination points will themselves be contained + in a supporting node. This dependency information can be + inferred from the dependencies between links. Therefore, + this item is not separately configurable. Hence, no + corresponding constraint needs to be articulated. + The corresponding information is simply provided by the + implementing system."; + + leaf network-ref { + type leafref { + path "../../../nw:supporting-node/nw:network-ref"; + require-instance false; + } + description + "This leaf identifies in which topology the + supporting termination point is present."; + } + leaf node-ref { + type leafref { + path "../../../nw:supporting-node/nw:node-ref"; + require-instance false; + } + description + "This leaf identifies in which node the supporting + termination point is present."; + } + leaf tp-ref { + type leafref { + path "/nw:networks/nw:network[nw:network-id=current()/"+ + "../network-ref]/nw:node[nw:node-id=current()/../"+ + "node-ref]/termination-point/tp-id"; + require-instance false; + } + description + "Reference to the underlay node (the underlay node must + be in a different topology)."; + } + } + } + } +} diff --git a/cps-service/src/test/resources/ietf/ietf-network@2018-02-26.yang b/cps-service/src/test/resources/ietf/ietf-network@2018-02-26.yang new file mode 100644 index 0000000000..6a03d7e416 --- /dev/null +++ b/cps-service/src/test/resources/ietf/ietf-network@2018-02-26.yang @@ -0,0 +1,192 @@ +module ietf-network { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; + prefix nw; + + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + + organization + "IETF I2RS (Interface to the Routing System) Working Group"; + + contact + "WG Web: <https://datatracker.ietf.org/wg/i2rs/> + WG List: <mailto:i2rs@ietf.org> + + Editor: Alexander Clemm + <mailto:ludwig@clemm.org> + + Editor: Jan Medved + <mailto:jmedved@cisco.com> + + Editor: Robert Varga + <mailto:robert.varga@pantheon.tech> + + Editor: Nitin Bahadur + <mailto:nitin_bahadur@yahoo.com> + + Editor: Hariharan Ananthakrishnan + <mailto:hari@packetdesign.com> + + Editor: Xufeng Liu + <mailto:xufeng.liu.ietf@gmail.com>"; + description + "This module defines a common base data model for a collection + of nodes in a network. Node definitions are further used + in network topologies and inventories. + + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 8345; + see the RFC itself for full legal notices."; + + revision 2018-02-26 { + description + "Initial revision."; + reference + "RFC 8345: A YANG Data Model for Network Topologies"; + } + + typedef node-id { + type inet:uri; + description + "Identifier for a node. The precise structure of the node-id + will be up to the implementation. For example, some + implementations MAY pick a URI that includes the network-id + as part of the path. The identifier SHOULD be chosen + such that the same node in a real network topology will + always be identified through the same identifier, even if + the data model is instantiated in separate datastores. An + implementation MAY choose to capture semantics in the + identifier -- for example, to indicate the type of node."; + } + + typedef network-id { + type inet:uri; + description + "Identifier for a network. The precise structure of the + network-id will be up to the implementation. The identifier + SHOULD be chosen such that the same network will always be + identified through the same identifier, even if the data model + is instantiated in separate datastores. An implementation MAY + choose to capture semantics in the identifier -- for example, + to indicate the type of network."; + } + + grouping network-ref { + description + "Contains the information necessary to reference a network -- + for example, an underlay network."; + leaf network-ref { + type leafref { + path "/nw:networks/nw:network/nw:network-id"; + require-instance false; + } + description + "Used to reference a network -- for example, an underlay + network."; + } + } + + grouping node-ref { + description + "Contains the information necessary to reference a node."; + leaf node-ref { + type leafref { + path "/nw:networks/nw:network[nw:network-id=current()/../"+ + "network-ref]/nw:node/nw:node-id"; + require-instance false; + } + description + "Used to reference a node. + Nodes are identified relative to the network that + contains them."; + } + uses network-ref; + } + + container networks { + description + "Serves as a top-level container for a list of networks."; + list network { + key "network-id"; + description + "Describes a network. + A network typically contains an inventory of nodes, + topological information (augmented through the + network-topology data model), and layering information."; + leaf network-id { + type network-id; + description + "Identifies a network."; + } + container network-types { + description + "Serves as an augmentation target. + The network type is indicated through corresponding + presence containers augmented into this container."; + } + list supporting-network { + key "network-ref"; + description + "An underlay network, used to represent layered network + topologies."; + leaf network-ref { + type leafref { + path "/nw:networks/nw:network/nw:network-id"; + require-instance false; + } + description + "References the underlay network."; + } + } + + list node { + key "node-id"; + description + "The inventory of nodes of this network."; + leaf node-id { + type node-id; + description + "Uniquely identifies a node within the containing + network."; + } + list supporting-node { + key "network-ref node-ref"; + description + "Represents another node that is in an underlay network + and that supports this node. Used to represent layering + structure."; + leaf network-ref { + type leafref { + path "../../../nw:supporting-network/nw:network-ref"; + require-instance false; + } + description + "References the underlay network of which the + underlay node is a part."; + } + leaf node-ref { + type leafref { + path "/nw:networks/nw:network/nw:node/nw:node-id"; + require-instance false; + } + description + "References the underlay node itself."; + } + } + } + } + } +} diff --git a/cps-service/src/test/resources/e2e/basic/ietf-yang-types.yang b/cps-service/src/test/resources/ietf/ietf-yang-types@2013-07-15.yang index 371a091d14..ee58fa3ab0 100755..100644 --- a/cps-service/src/test/resources/e2e/basic/ietf-yang-types.yang +++ b/cps-service/src/test/resources/ietf/ietf-yang-types@2013-07-15.yang @@ -151,9 +151,6 @@ module ietf-yang-types { "The zero-based-counter64 type represents a counter64 that has the defined 'initial' value zero. - - - A schema node of this type will be set to zero (0) on creation and will thereafter increase monotonically until it reaches a maximum value of 2^64-1 (18446744073709551615 decimal), @@ -391,9 +388,6 @@ module ietf-yang-types { pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?'; } - - - description "Represents media- or physical-level addresses represented as a sequence octets, each octet represented by two hexadecimal diff --git a/docker-compose/README.md b/docker-compose/README.md index 0a38283535..3e9cd63169 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 `<docker-profile>` being one of `cps-docker`, `xnf-docker` or `cps-xnf-docker`): + (with `<docker-profile>` being one of `cps-docker`, `ncmp-docker` or `cps-ncmp-docker`): ```bash mvn clean install -P<docker-profile> -Dnexus.repository= @@ -29,12 +29,12 @@ mvn clean install -P<docker-profile> -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 -VERSION=x.y.z-SNAPSHOT DB_HOST=dbpostgresql DB_USERNAME=cps DB_PASSWORD=cps docker-compose up -d +VERSION=x.y.z-SNAPSHOT DB_USERNAME=cps DB_PASSWORD=cps docker-compose up -d ``` ## Running or debugging Java built code @@ -56,8 +56,7 @@ Following command starts the application using JAR file: ```bash DB_HOST=localhost DB_USERNAME=cps DB_PASSWORD=cps \ - java -classpath cps-application/target/cps-application-x.y.z-SNAPSHOT.jar:docker-compose \ - org.springframework.boot.loader.JarLauncher + java -jar cps-application/target/cps-application-x.y.z-SNAPSHOT.jar ``` ### Running from IntelliJ IDE @@ -66,7 +65,6 @@ Here are the steps to run or debug the application from Intellij: 1. Enable the desired maven profile form Maven Tool Window 2. Run a configuration from `Run -> Edit configurations` with following settings: - * `Working directory`: docker-compose folder, e.g. `$ProjectFileDir$/docker-compose` * `Environment variables`: `DB_HOST=localhost;DB_USERNAME=cps;DB_PASSWORD=cps` ## Accessing services diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index a2241bcc23..0cd49512a9 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,15 +49,13 @@ services: # depends_on: # - dbpostgresql - cps-and-nf-proxy: - container_name: cps-and-nf-proxy - image: cps-and-nf-proxy:${VERSION} - volumes: - - "./application.yml:/app/resources/application.yml" + cps-and-ncmp: + container_name: cps-and-ncmp + image: cps-and-ncmp:${VERSION} ports: - "8883:8080" environment: - DB_HOST: ${DB_HOST} + DB_HOST: dbpostgresql DB_USERNAME: ${DB_USERNAME} DB_PASSWORD: ${DB_PASSWORD} restart: unless-stopped @@ -71,4 +70,4 @@ services: environment: POSTGRES_DB: cpsdb POSTGRES_USER: ${DB_USERNAME} - POSTGRES_PASSWORD: ${DB_PASSWORD}
\ No newline at end of file + POSTGRES_PASSWORD: ${DB_PASSWORD} @@ -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 @@ <module>cps-parent</module>
<module>cps-service</module>
<module>cps-rest</module>
- <module>cps-nf-proxy-service</module>
- <module>cps-nf-proxy-rest</module>
+ <module>cps-ncmp-service</module>
+ <module>cps-ncmp-rest</module>
<module>cps-ri</module>
<module>checkstyle</module>
<module>spotbugs</module>
|