summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xcps-application/pom.xml15
-rw-r--r--cps-application/src/main/resources/application.yml (renamed from docker-compose/application.yml)19
-rw-r--r--cps-bom/pom.xml22
-rw-r--r--cps-ncmp-rest/docs/openapi/components.yaml (renamed from cps-nf-proxy-rest/docs/openapi/components.yaml)19
-rw-r--r--cps-ncmp-rest/docs/openapi/ncmproxy.yml (renamed from cps-nf-proxy-rest/docs/openapi/xnfProxy.yml)25
-rwxr-xr-xcps-ncmp-rest/docs/openapi/openapi.yml33
-rw-r--r--cps-ncmp-rest/pom.xml136
-rw-r--r--cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/config/NetworkCmProxyConfig.java (renamed from cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/config/NfProxyConfig.java)9
-rw-r--r--cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java (renamed from cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/rest/controller/NfProxyController.java)20
-rwxr-xr-xcps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandler.java (renamed from cps-nf-proxy-rest/src/main/java/org/onap/cps/nfproxy/rest/exceptions/NfProxyRestExceptionHandler.java)10
-rw-r--r--cps-ncmp-rest/src/main/resources/openapi-configuration.json (renamed from cps-nf-proxy-rest/src/main/resources/openapi-configuration.json)4
-rw-r--r--cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/config/NetworkCmProxyConfigSpec.groovy (renamed from cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/config/NfProxyConfigSpec.groovy)11
-rw-r--r--cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy (renamed from cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/rest/controller/NfProxyControllerSpec.groovy)18
-rw-r--r--cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy (renamed from cps-nf-proxy-rest/src/test/groovy/org/onap/cps/nfproxy/rest/exceptions/NfProxyRestExceptionHandlerSpec.groovy)13
-rw-r--r--cps-ncmp-rest/src/test/java/org/onap/cps/TestApplication.java (renamed from cps-nf-proxy-rest/src/test/java/org/onap/cps/TestApplication.java)0
-rw-r--r--cps-ncmp-rest/src/test/resources/application.yml21
-rw-r--r--cps-ncmp-service/pom.xml51
-rw-r--r--cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java (renamed from cps-nf-proxy-service/src/main/java/org/onap/cps/nfproxy/api/NfProxyDataService.java)12
-rwxr-xr-xcps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java (renamed from cps-nf-proxy-service/src/main/java/org/onap/cps/nfproxy/api/impl/NfProxyDataServiceImpl.java)6
-rw-r--r--cps-ncmp-service/src/test/groovy/org/onap/cps/api/impl/NetworkCmProxyDataServiceImplSpec.groovy (renamed from cps-nf-proxy-service/src/test/groovy/org/onap/cps/api/impl/NfProxyDataServiceImplSpec.groovy)6
-rwxr-xr-xcps-nf-proxy-rest/docs/openapi/openapi.yml16
-rwxr-xr-xcps-nf-proxy-rest/pom.xml113
-rw-r--r--cps-nf-proxy-rest/src/test/resources/application.yml5
-rw-r--r--cps-nf-proxy-service/pom.xml34
-rwxr-xr-xcps-parent/pom.xml4
-rwxr-xr-xcps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java23
-rw-r--r--cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsAdminPersistenceServiceSpec.groovy39
-rw-r--r--cps-ri/src/test/resources/data/anchor.sql5
-rwxr-xr-xcps-service/src/main/java/org/onap/cps/api/CpsAdminService.java11
-rwxr-xr-xcps-service/src/main/java/org/onap/cps/api/impl/CpsAdminServiceImpl.java6
-rwxr-xr-xcps-service/src/main/java/org/onap/cps/spi/CpsAdminPersistenceService.java9
-rw-r--r--cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java7
-rwxr-xr-xcps-service/src/test/groovy/org/onap/cps/api/impl/CpsAdminServiceImplSpec.groovy8
-rwxr-xr-xcps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy10
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy59
-rw-r--r--cps-service/src/test/resources/ietf/data/ietf-network-topology-sample-rfc8345.json120
-rw-r--r--[-rwxr-xr-x]cps-service/src/test/resources/ietf/ietf-inet-types@2013-07-15.yang (renamed from cps-service/src/test/resources/e2e/basic/ietf-inet-types.yang)3
-rw-r--r--cps-service/src/test/resources/ietf/ietf-network-state@2018-02-26.yang176
-rw-r--r--cps-service/src/test/resources/ietf/ietf-network-topology-state@2018-02-26.yang273
-rw-r--r--cps-service/src/test/resources/ietf/ietf-network-topology@2018-02-26.yang294
-rw-r--r--cps-service/src/test/resources/ietf/ietf-network@2018-02-26.yang192
-rw-r--r--[-rwxr-xr-x]cps-service/src/test/resources/ietf/ietf-yang-types@2013-07-15.yang (renamed from cps-service/src/test/resources/e2e/basic/ietf-yang-types.yang)6
-rw-r--r--docker-compose/README.md16
-rw-r--r--docker-compose/docker-compose.yml19
-rw-r--r--pom.xml5
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}
diff --git a/pom.xml b/pom.xml
index 9fd9bba1cb..f196cba618 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,6 +2,7 @@
============LICENSE_START=======================================================
Copyright (c) 2020 Linux Foundation.
Modifications Copyright (C) 2021 Bell Canada.
+ Modification Copyright (C) 2021 Nordix Foundation
================================================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -51,8 +52,8 @@
<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>