diff options
Diffstat (limited to 'msasimulator')
35 files changed, 2004 insertions, 0 deletions
diff --git a/msasimulator/.classpath b/msasimulator/.classpath new file mode 100644 index 0000000..5bd7d18 --- /dev/null +++ b/msasimulator/.classpath @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/classes" path="src/main/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="lib" path="C:/Users/MKALEEM/Downloads/lombok-1.18.12.jar"/>
+ <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/msasimulator/.gitignore b/msasimulator/.gitignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/msasimulator/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/msasimulator/.project b/msasimulator/.project new file mode 100644 index 0000000..6661c2f --- /dev/null +++ b/msasimulator/.project @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>msasimulator</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ </natures>
+</projectDescription>
diff --git a/msasimulator/.settings/org.eclipse.core.resources.prefs b/msasimulator/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..04cfa2c --- /dev/null +++ b/msasimulator/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding//src/test/resources=UTF-8
+encoding/<project>=UTF-8
diff --git a/msasimulator/.settings/org.eclipse.jdt.core.prefs b/msasimulator/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..d59e09c --- /dev/null +++ b/msasimulator/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/msasimulator/.settings/org.eclipse.m2e.core.prefs b/msasimulator/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..14b697b --- /dev/null +++ b/msasimulator/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/msasimulator/Dockerfile b/msasimulator/Dockerfile new file mode 100644 index 0000000..6f66773 --- /dev/null +++ b/msasimulator/Dockerfile @@ -0,0 +1,9 @@ +FROM java:openjdk-8 +ARG VERSION=${version} +ARG JAR_FILE=target/msasimulator-${VERSION}.jar +COPY ${JAR_FILE} app.jar +COPY json-files/* /opt/onap/msasimulator/templates/ +ADD entrypoint.sh . +RUN chmod +x entrypoint.sh +EXPOSE 8082 +ENTRYPOINT ["./entrypoint.sh"] diff --git a/msasimulator/README.md b/msasimulator/README.md new file mode 100644 index 0000000..dd5b3aa --- /dev/null +++ b/msasimulator/README.md @@ -0,0 +1,98 @@ +##MSA Controller Simulator Project. + +The simulator is a simple spring boot application which acts as the MSA controller for the MDONS use case + +##The API'S are as follows: + +1.Create Service : /cxf/openroadm/openroadm-services/create +2.Delete Service : /cxf/openroadm/openroadm-services/delete +3.Get Topology : /cxf/openroadm/v2/networks/otn-topology + +## +Sample create request: + +{ + "common-id":"123456", + "connection-type":"service", + "service-name":"svc-Customer1-orange-001_MDONS_OTN_MSA", + "sdnc-request-header":{ + "request-id":"fd532fb8-fb9a-477b-b0a9-f8f33ba79f23", + "rpc-action":"service-create", + "notification-url":"http://167.254.204.118:8090/receiver/services", + "request-system-id":"SDN-MLC" + }, + "service-a-end":{ + "service-rate":10, + "service-format":"Ethernet", + "clli":"OWB-AEND", + "node-id":"OWBSPDRNE15", + "optic-type":"gray", + "ethernet-encoding":"10GBASE-R", + "mapping-mode":"GFP-F", + "tx-direction":{ + "port":{ + "port-device-name":"router-1", + "port-name":"R1" + } + }, + "rx-direction":{ + "port":{ + "port-device-name":"router-1", + "port-name":"R1" + } + } + }, + "service-z-end":{ + "service-rate":10, + "service-format":"Ethernet", + "node-id":"OWBSPDRNE16", + "clli":"OWB-ZEND", + "optic-type":"gray", + "ethernet-encoding":"10GBASE-R", + "mapping-mode":"GFP-F", + "tx-direction":{ + "port":{ + "port-device-name":"router-2", + "port-name":"R2" + } + }, + "rx-direction":{ + "port":{ + "port-device-name":"router-2", + "port-name":"R2" + } + } + }, + "service-layer":"otn" +} + +##Sample delete request + + +{ + "sdnc-request-header":{ + "request-id":"fd532fb8-fb9a-477b-b0a9-f8f33ba79f23", + "rpc-action":"service-create", + "notification-url":"http://167.254.204.118:8090/receiver/services", + "request-system-id":"SDN-MLC" + }, + "service-delete-req-info":{ + "tail-retention": "no", + "service-name": "no" + } +} + +##To bring up locally along with the other instances go to the main directory dc-simluator +Execute docker-compose up + + +##To compile and build +mvn clean install + + +##To build docker image +mvn package -P docker + + + + diff --git a/msasimulator/entrypoint.sh b/msasimulator/entrypoint.sh new file mode 100644 index 0000000..dfa956a --- /dev/null +++ b/msasimulator/entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +java -jar app.jar org.onap.msasimulator.Application + diff --git a/msasimulator/json-files/msa-topology.json b/msasimulator/json-files/msa-topology.json new file mode 100644 index 0000000..7519d93 --- /dev/null +++ b/msasimulator/json-files/msa-topology.json @@ -0,0 +1,130 @@ +{ + "network-id": "otn-topology", + "ietf-network-topology:link": [ + { + "link-id": "NodeA-XPDR1#XPDR1-NETWORK1##NodeB-XPDR1#XPDR1-NETWORK2", + "org-openroadm-network-topology:administrative-state": "outOfService", + "org-openroadm-otn-network-topology:link-type": "OTN-LINK", + "destination": { + "dest-node": "NodeB-XPDR1", + "dest-tp": "XPDR1-NETWORK2" + }, + "source": { + "source-node": "NodeA-XPDR1", + "source-tp": "XPDR1-NETWORK1" + } + } + ], + "supporting-network": [ + { + "network-ref": "openroadm-topology" + } + ], + "network-types": {}, + "node": [ + { + "supporting-node": [ + { + "network-ref": "openroadm-topology", + "node-ref": "NodeA-XPDR1" + } + ], + "node-id": "NodeA-XPDR1", + "ietf-network-topology:termination-point": [ + { + "org-openroadm-otn-network-topology:tp-type": "XPONDER-CLIENT", + "org-openroadm-otn-network-topology:eqpt-srg-id": 1, + "tp-id": "XPDR1-CLIENT1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "tp-ref": "XPDR1-CLIENT1", + "node-ref": "NodeA-XPDR1" + } + ] + }, + { + "org-openroadm-otn-network-topology:tp-type": "XPONDER-CLIENT", + "org-openroadm-otn-network-topology:eqpt-srg-id": 1, + "tp-id": "XPDR1-CLIENT2", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "tp-ref": "XPDR1-CLIENT2", + "node-ref": "NodeA-XPDR1" + }, + { + "org-openroadm-otn-network-topology:tp-type": "XPONDER-NETWORK", + "org-openroadm-otn-network-topology:eqpt-srg-id": 1, + "tp-id": "XPDR1-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "tp-ref": "XPDR1-NETWORK1", + "node-ref": "NodeA-XPDR1" + } + ] + } + ] + } + ], + "org-openroadm-network:node-status": "PLANNED", + "org-openroadm-otn-network-topology:node-type": "SWITCH", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 1 + } + }, + { + "supporting-node": [ + { + "network-ref": "openroadm-topology", + "node-ref": "NodeB-XPDR1" + } + ], + "node-id": "NodeB-XPDR1", + "ietf-network-topology:termination-point": [ + { + "org-openroadm-otn-network-topology:tp-type": "XPONDER-CLIENT", + "org-openroadm-otn-network-topology:eqpt-srg-id": 1, + "tp-id": "XPDR1-CLIENT1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "tp-ref": "XPDR1-CLIENT1", + "node-ref": "NodeA-XPDR1" + } + ] + }, + { + "org-openroadm-otn-network-topology:tp-type": "XPONDER-CLIENT", + "org-openroadm-otn-network-topology:eqpt-srg-id": 1, + "tp-id": "XPDR1-CLIENT2", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "tp-ref": "XPDR1-CLIENT2", + "node-ref": "NodeA-XPDR1" + }, + { + "org-openroadm-otn-network-topology:tp-type": "XPONDER-NETWORK", + "org-openroadm-otn-network-topology:eqpt-srg-id": 1, + "tp-id": "XPDR1-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "tp-ref": "XPDR1-NETWORK1", + "node-ref": "NodeA-XPDR1" + } + ] + } + ] + } + ], + "org-openroadm-network:node-status": "PLANNED", + "org-openroadm-otn-network-topology:node-type": "SWITCH", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 1 + } + } + ] +} diff --git a/msasimulator/pom.xml b/msasimulator/pom.xml new file mode 100644 index 0000000..803977a --- /dev/null +++ b/msasimulator/pom.xml @@ -0,0 +1,306 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- ============LICENSE_START======================================================= + MSA-Simulator ================================================================================ + Copyright (C) 2020 Fujitsu Limited. All rights reserved. ================================================================================ + 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:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="http://maven.apache.org/POM/4.0.0" + 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.integration.simulators.dc-simulator</groupId> + <artifactId>integration-dc-simulator</artifactId> + <version>1.0.0-SNAPSHOT</version> + </parent> + <!--parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> + <version>2.1.5.RELEASE</version> </parent --> + + + <artifactId>msasimulator</artifactId> + <version>1.0.0-SNAPSHOT</version> + + <name>msasimulator</name> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.source>1.8</maven.compiler.source> + <maven.compiler.target>1.8</maven.compiler.target> + <maven.build.timestamp.format>yyyyMMdd'T'HHmmss</maven.build.timestamp.format> + + <simulator.main.class>org.onap.msasimulator.Application</simulator.main.class> + <docker.image.tag>latest</docker.image.tag> + <junit.jupiter.version>5.1.0</junit.jupiter.version> + <junit.vintage.version>5.1.0</junit.vintage.version> + <spring.boot.version>2.1.5.RELEASE</spring.boot.version> + <docker.image.name>onap/${project.artifactId}</docker.image.name> + + <dependency.directory.name>libs</dependency.directory.name> + <dependency.directory.location>${project.build.directory}/${dependency.directory.name} + </dependency.directory.location> + + <onap.nexus.dockerregistry.daily>nexus3.onap.org:10003</onap.nexus.dockerregistry.daily> + <onap.nexus.url>http://nexus3.onap.org</onap.nexus.url> + </properties> + + <dependencies> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + <version>${spring.boot.version}</version> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-mongodb</artifactId> + <version>${spring.boot.version}</version> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-actuator</artifactId> + <version>${spring.boot.version}</version> + </dependency> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-config-client</artifactId> + <version>2.1.4.RELEASE</version> + </dependency> + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-classic</artifactId> + </dependency> + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-core</artifactId> + <version>1.2.3</version> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>1.7.25</version> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <version>2.6</version> + </dependency> + <dependency> + <groupId>org.json</groupId> + <artifactId>json</artifactId> + <version>20180130</version> + </dependency> + <dependency> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> + <version>2.8.2</version> + </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpclient</artifactId> + </dependency> + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + </dependency> + <dependency> + <groupId>commons-cli</groupId> + <artifactId>commons-cli</artifactId> + <version>1.4</version> + </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + <version>3.7</version> + </dependency> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>1.18.2</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jdk8</artifactId> + <version>2.9.7</version> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jsr310</artifactId> + <version>2.9.7</version> + </dependency> + <dependency> + <groupId>io.vavr</groupId> + <artifactId>vavr-match</artifactId> + <version>0.9.2</version> + </dependency> + <dependency> + <groupId>io.vavr</groupId> + <artifactId>vavr</artifactId> + <version>0.9.2</version> + </dependency> + + + <!--dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> + <version>${junit.jupiter.version}</version> <scope>test</scope> </dependency> + <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-migrationsupport</artifactId> + <version>${junit.jupiter.version}</version> <scope>test</scope> </dependency --> + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <version>3.9.1</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <version>2.23.4</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.12</version> + <scope>test</scope> + </dependency> + + <!--dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito</artifactId> + <version>1.6.4</version> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> + <artifactId>powermock-module-junit4</artifactId> <version>1.6.4</version> + <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> + <artifactId>spring-test</artifactId> <version>5.0.4.RELEASE</version> <scope>test</scope> + </dependency --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + <version>${spring.boot.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.quartz-scheduler</groupId> + <artifactId>quartz</artifactId> + <version>2.2.1</version> + </dependency> + <dependency> + <groupId>org.quartz-scheduler</groupId> + <artifactId>quartz-jobs</artifactId> + <version>2.2.1</version> + </dependency> + </dependencies> + <build> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + <version>2.1.5.RELEASE</version> + <configuration> + <mainClass>org.onap.msasimulator.Application</mainClass> + </configuration> + <executions> + <execution> + <goals> + <goal>repackage</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <!-- Build an executable JAR --> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <version>3.1.0</version> + <configuration> + <archive> + <manifest> + <mainClass>org.onap.msasimulator.Application</mainClass> + </manifest> + </archive> + </configuration> + </plugin> + + + </plugins> + </build> + + <profiles> + <profile> + <id>docker</id> + <activation> + <activeByDefault>false</activeByDefault> + </activation> + <properties> + <os.detected.name>linux</os.detected.name> + <os.detected.arch>x86_64</os.detected.arch> + <os.detected.classifier>${os.detected.name}-${os.detected.arch}</os.detected.classifier> + </properties> + <build> + <plugins> + <plugin> + <groupId>io.fabric8</groupId> + <artifactId>docker-maven-plugin</artifactId> + <version>${docker-maven-plugin.version}</version> + <executions> + <execution> + <id>docker-build-image</id> + <phase>package</phase> + <goals> + <goal>build</goal> + </goals> + </execution> + <execution> + <id>docker-push-image</id> + <phase>deploy</phase> + <goals> + <goal>push</goal> + </goals> + </execution> + </executions> + <configuration> + <skipPush>${skipDockerPush}</skipPush> + <verbose>true</verbose> + <imagePullPolicy>IfNotPresent</imagePullPolicy> + <images> + <image> + <alias>${project.artifactId}</alias> + <name>${onap.nexus.dockerregistry.daily}/${docker.image.name}</name> + <registry>${onap.nexus.dockerregistry.daily}</registry> + <build> + <dockerFileDir>${project.basedir}</dockerFileDir> + <tags> + <tag>${project.version}-STAGE-${maven.build.timestamp}Z</tag> + </tags> + </build> + </image> + </images> + </configuration> + </plugin> + </plugins> + </build> + </profile> + </profiles> + + + <distributionManagement> + <repository> + <id>ecomp-releases</id> + <name>Integration simulators Release Repository</name> + <url>${nexusproxy}${releaseNexusPath}</url> + </repository> + <snapshotRepository> + <id>ecomp-snapshots</id> + <name>Integration simulators Snapshot Repository</name> + <url>${nexusproxy}${snapshotNexusPath}</url> + </snapshotRepository> + <site> + <id>ecomp-site</id> + <url>dav:${nexusproxy}${sitePath}</url> + </site> + </distributionManagement> + +</project> diff --git a/msasimulator/src/main/java/org/onap/msasimulator/Application.java b/msasimulator/src/main/java/org/onap/msasimulator/Application.java new file mode 100644 index 0000000..01a593d --- /dev/null +++ b/msasimulator/src/main/java/org/onap/msasimulator/Application.java @@ -0,0 +1,36 @@ +/* + * ============LICENSE_START======================================================= + * MSA-SIMULATOR + * ================================================================================ + * Copyright (C) 2020 Fujitsu Limited. All rights reserved. + * ================================================================================ + * 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========================================================= + */ + +package org.onap.msasimulator; + +import java.util.Arrays; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ApplicationContext; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/msasimulator/src/main/java/org/onap/msasimulator/controller/MsaController.java b/msasimulator/src/main/java/org/onap/msasimulator/controller/MsaController.java new file mode 100644 index 0000000..dab79a9 --- /dev/null +++ b/msasimulator/src/main/java/org/onap/msasimulator/controller/MsaController.java @@ -0,0 +1,71 @@ +/* + * ============LICENSE_START======================================================= + * MSA-SIMULATOR + * ================================================================================ + * Copyright (C) 2020 Fujitsu Limited. All rights reserved. + * ================================================================================ + * 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========================================================= + */ + +package org.onap.msasimulator.controller; + +import javax.validation.Valid; + +import org.onap.msasimulator.model.MsaServiceCreateRequest; +import org.onap.msasimulator.model.MsaServiceDeleteRequest; +import org.onap.msasimulator.model.MsaServiceResponse; +import org.onap.msasimulator.service.MsaService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class MsaController { + + @Autowired + MsaService msaService; + + @RequestMapping("/") + public String index() { + return "Test successful"; + } + + @PostMapping("/cxf/openroadm/openroadm-services/create") + public ResponseEntity<?> createService(@Valid @RequestBody MsaServiceCreateRequest request) { + + MsaServiceResponse response = msaService.processMsaService(request); + return new ResponseEntity<>(response, HttpStatus.OK); + + } + + @DeleteMapping("/cxf/openroadm/openroadm-services/delete") + public ResponseEntity<?> deleteService(@Valid @RequestBody MsaServiceDeleteRequest request) { + MsaServiceResponse response = msaService.processMsaServiceDelete(request); + return new ResponseEntity<>(response, HttpStatus.OK); + + } + + @GetMapping("/cxf/openroadm/v2/networks/otn-topology") + public String getMsaTopology() { + + return msaService.getTopology(); + + } +} diff --git a/msasimulator/src/main/java/org/onap/msasimulator/model/ConfigurationResponseCommon.java b/msasimulator/src/main/java/org/onap/msasimulator/model/ConfigurationResponseCommon.java new file mode 100644 index 0000000..377a51f --- /dev/null +++ b/msasimulator/src/main/java/org/onap/msasimulator/model/ConfigurationResponseCommon.java @@ -0,0 +1,51 @@ +/*
+ * ============LICENSE_START=======================================================
+ * MSA-SIMULATOR
+ * ================================================================================
+ * Copyright (C) 2020 Fujitsu Limited. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.msasimulator.model;
+
+import javax.validation.constraints.NotNull;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ConfigurationResponseCommon {
+ @NotNull
+ @JsonProperty(value = "response-code")
+ private String responseCode;
+
+ @NotNull
+ @JsonProperty(value = "ack-final-indicator")
+ private String ackFinalIndicator;
+
+ @NotNull
+ @JsonProperty(value = "response-message")
+ private String responseMessage;
+
+ @NotNull
+ @JsonProperty(value = "request-id")
+ private String requestId;
+
+}
diff --git a/msasimulator/src/main/java/org/onap/msasimulator/model/DirectionDetails.java b/msasimulator/src/main/java/org/onap/msasimulator/model/DirectionDetails.java new file mode 100644 index 0000000..847a344 --- /dev/null +++ b/msasimulator/src/main/java/org/onap/msasimulator/model/DirectionDetails.java @@ -0,0 +1,38 @@ +/*
+ * ============LICENSE_START=======================================================
+ * MSA-SIMULATOR
+ * ================================================================================
+ * Copyright (C) 2020 Fujitsu Limited. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ */
+package org.onap.msasimulator.model;
+
+import javax.validation.constraints.NotNull;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DirectionDetails {
+ @NotNull
+ @JsonProperty(value = "port")
+ private Port port;
+
+}
diff --git a/msasimulator/src/main/java/org/onap/msasimulator/model/Link.java b/msasimulator/src/main/java/org/onap/msasimulator/model/Link.java new file mode 100644 index 0000000..9644228 --- /dev/null +++ b/msasimulator/src/main/java/org/onap/msasimulator/model/Link.java @@ -0,0 +1,36 @@ +/* + * ============LICENSE_START======================================================= + * MSA-SIMULATOR + * ================================================================================ + * Copyright (C) 2020 Fujitsu Limited. All rights reserved. + * ================================================================================ + * 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========================================================= + */ + +package org.onap.msasimulator.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Link { + + private String aend; + + private String zend; + +} diff --git a/msasimulator/src/main/java/org/onap/msasimulator/model/MsaServiceCreateRequest.java b/msasimulator/src/main/java/org/onap/msasimulator/model/MsaServiceCreateRequest.java new file mode 100644 index 0000000..63bd552 --- /dev/null +++ b/msasimulator/src/main/java/org/onap/msasimulator/model/MsaServiceCreateRequest.java @@ -0,0 +1,64 @@ +/*
+ * ============LICENSE_START=======================================================
+ * MSA-SIMULATOR
+ * ================================================================================
+ * Copyright (C) 2020 Fujitsu Limited. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.msasimulator.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MsaServiceCreateRequest {
+
+ @NotNull
+ @JsonProperty(value = "service-layer")
+ private String serviceLayer;
+
+ @NotNull
+ @JsonProperty(value = "service-name")
+ private String serviceName;
+
+ @NotNull
+ @JsonProperty(value = "service-a-end")
+ private ServiceEndPoint serviceAEend;
+
+ @NotNull
+ @JsonProperty(value = "common-id")
+ private String commonId;
+
+ @NotNull
+ @JsonProperty(value = "sdnc-request-header")
+ private SdncRequestHeader sdncRequestHeader;
+
+ @NotNull
+ @JsonProperty(value = "service-z-end")
+ private ServiceEndPoint serviceZEnd;
+
+ @NotNull
+ @JsonProperty(value = "connection-type")
+ private String connectionType;
+
+}
diff --git a/msasimulator/src/main/java/org/onap/msasimulator/model/MsaServiceDeleteRequest.java b/msasimulator/src/main/java/org/onap/msasimulator/model/MsaServiceDeleteRequest.java new file mode 100644 index 0000000..e295c81 --- /dev/null +++ b/msasimulator/src/main/java/org/onap/msasimulator/model/MsaServiceDeleteRequest.java @@ -0,0 +1,44 @@ +/*
+ * ============LICENSE_START=======================================================
+ * MSA-SIMULATOR
+ * ================================================================================
+ * Copyright (C) 2020 Fujitsu Limited. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.msasimulator.model;
+
+import javax.validation.constraints.NotNull;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MsaServiceDeleteRequest {
+
+ @NotNull
+ @JsonProperty(value = "sdnc-request-header")
+ private SdncRequestHeader sdncRequestHeader;
+
+ @NotNull
+ @JsonProperty(value = "service-delete-req-info")
+ private ServiceDeleteInfo serviceDeletReqInfo;
+
+}
diff --git a/msasimulator/src/main/java/org/onap/msasimulator/model/MsaServiceResponse.java b/msasimulator/src/main/java/org/onap/msasimulator/model/MsaServiceResponse.java new file mode 100644 index 0000000..83549fc --- /dev/null +++ b/msasimulator/src/main/java/org/onap/msasimulator/model/MsaServiceResponse.java @@ -0,0 +1,40 @@ +/*
+ * ============LICENSE_START=======================================================
+ * MSA-SIMULATOR
+ * ================================================================================
+ * Copyright (C) 2020 Fujitsu Limited. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.msasimulator.model;
+
+import javax.validation.constraints.NotNull;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MsaServiceResponse {
+
+ @NotNull
+ @JsonProperty(value = "configuration-response-common")
+ private ConfigurationResponseCommon configurationResponseCommon;
+
+}
diff --git a/msasimulator/src/main/java/org/onap/msasimulator/model/Port.java b/msasimulator/src/main/java/org/onap/msasimulator/model/Port.java new file mode 100644 index 0000000..041835b --- /dev/null +++ b/msasimulator/src/main/java/org/onap/msasimulator/model/Port.java @@ -0,0 +1,44 @@ +/*
+ * ============LICENSE_START=======================================================
+ * MSA-SIMULATOR
+ * ================================================================================
+ * Copyright (C) 2020 Fujitsu Limited. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.msasimulator.model;
+
+import javax.validation.constraints.NotNull;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Port {
+
+ @NotNull
+ @JsonProperty(value = "port-device-name")
+ private String portDeviceName;
+
+ @NotNull
+ @JsonProperty(value = "port-name")
+ private String portName;
+
+}
diff --git a/msasimulator/src/main/java/org/onap/msasimulator/model/SdncRequestHeader.java b/msasimulator/src/main/java/org/onap/msasimulator/model/SdncRequestHeader.java new file mode 100644 index 0000000..bddfded --- /dev/null +++ b/msasimulator/src/main/java/org/onap/msasimulator/model/SdncRequestHeader.java @@ -0,0 +1,51 @@ +/*
+ * ============LICENSE_START=======================================================
+ * MSA-SIMULATOR
+ * ================================================================================
+ * Copyright (C) 2020 Fujitsu Limited. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.msasimulator.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SdncRequestHeader {
+ @NotNull
+ @JsonProperty(value = "notification-url")
+ private String notificationUrl;
+
+ @NotNull
+ @JsonProperty(value = "request-system-id")
+ private String requestSystemId;
+
+ @NotNull
+ @JsonProperty(value = "request-id")
+ private String requestId;
+
+ @NotNull
+ @JsonProperty(value = "rpc-action")
+ private String rpcAction;
+
+}
diff --git a/msasimulator/src/main/java/org/onap/msasimulator/model/ServiceDeleteInfo.java b/msasimulator/src/main/java/org/onap/msasimulator/model/ServiceDeleteInfo.java new file mode 100644 index 0000000..7da5af2 --- /dev/null +++ b/msasimulator/src/main/java/org/onap/msasimulator/model/ServiceDeleteInfo.java @@ -0,0 +1,44 @@ +/*
+ * ============LICENSE_START=======================================================
+ * MSA-SIMULATOR
+ * ================================================================================
+ * Copyright (C) 2020 Fujitsu Limited. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.msasimulator.model;
+
+import javax.validation.constraints.NotNull;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ServiceDeleteInfo {
+
+ @NotNull
+ @JsonProperty(value = "service-name")
+ private String serviceName;
+
+ @NotNull
+ @JsonProperty(value = "tail-retention")
+ private String tailRetention;
+
+}
diff --git a/msasimulator/src/main/java/org/onap/msasimulator/model/ServiceEndPoint.java b/msasimulator/src/main/java/org/onap/msasimulator/model/ServiceEndPoint.java new file mode 100644 index 0000000..ab05f99 --- /dev/null +++ b/msasimulator/src/main/java/org/onap/msasimulator/model/ServiceEndPoint.java @@ -0,0 +1,71 @@ +/*
+ * ============LICENSE_START=======================================================
+ * MSA-SIMULATOR
+ * ================================================================================
+ * Copyright (C) 2020 Fujitsu Limited. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.msasimulator.model;
+
+import javax.validation.constraints.NotNull;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ServiceEndPoint {
+ @NotNull
+ @JsonProperty(value = "rx-direction")
+ private DirectionDetails rxDirection;
+
+ @NotNull
+ @JsonProperty(value = "service-format")
+ private String serviceFormat;
+
+ @NotNull
+ @JsonProperty(value = "node-id")
+ private String nodeId;
+
+ @NotNull
+ @JsonProperty(value = "mapping-mode")
+ private String mappingMode;
+
+ @NotNull
+ @JsonProperty(value = "optic-type")
+ private String opticType;
+
+ @NotNull
+ @JsonProperty(value = "clli")
+ private String clli;
+
+ @NotNull
+ @JsonProperty(value = "service-rate")
+ private String serviceRate;
+
+ @NotNull
+ @JsonProperty(value = "tx-direction")
+ private DirectionDetails txDirection;
+
+ @NotNull
+ @JsonProperty(value = "ethernet-encoding")
+ private String ethernetEncoding;
+
+}
diff --git a/msasimulator/src/main/java/org/onap/msasimulator/service/MsaService.java b/msasimulator/src/main/java/org/onap/msasimulator/service/MsaService.java new file mode 100644 index 0000000..2091d61 --- /dev/null +++ b/msasimulator/src/main/java/org/onap/msasimulator/service/MsaService.java @@ -0,0 +1,117 @@ +/* + * ============LICENSE_START======================================================= + * MSA-SIMULATOR + * ================================================================================ + * Copyright (C) 2020 Fujitsu Limited. All rights reserved. + * ================================================================================ + * 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========================================================= + */ + +package org.onap.msasimulator.service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.PostConstruct; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.onap.msasimulator.model.ConfigurationResponseCommon; +import org.onap.msasimulator.model.Link; +import org.onap.msasimulator.model.MsaServiceCreateRequest; +import org.onap.msasimulator.model.MsaServiceDeleteRequest; +import org.onap.msasimulator.model.MsaServiceResponse; +import org.onap.msasimulator.utils.Utils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lombok.Getter; + +@Service +public class MsaService { + + private static Logger log = LoggerFactory.getLogger(MsaService.class); + + @Getter + private String topology = ""; + + private List<Link> linkList = new ArrayList<>(); + + private List<String> serviceIdList = new ArrayList<>(); + + @Autowired + Utils utils; + + @PostConstruct + public void init() throws IOException { + topology = utils.readFromFile("/opt/onap/msasimulator/templates/msa-topology.json"); + log.debug("Inside init method of MsaService classc {}", topology); + JSONObject topo = new JSONObject(topology); + JSONArray topolinks = topo.getJSONArray("ietf-network-topology:link"); + for (Object topolink : topolinks) { + if (topolink instanceof JSONObject) { + JSONObject obj = (JSONObject) topolink; + Link link = new Link(obj.getJSONObject("source").getString("source-node").split("-")[0], + obj.getJSONObject("destination").getString("dest-node").split("-")[0]); + linkList.add(link); + + } + + } + log.debug("Link list {}", linkList); + + } + + public MsaServiceResponse processMsaService(MsaServiceCreateRequest request) { + String aend = request.getServiceAEend().getNodeId(); + String zend = request.getServiceZEnd().getNodeId(); + String requestId = request.getSdncRequestHeader().getRequestId(); + Link link = new Link(aend, zend); + if (linkList.contains(link)) { + serviceIdList.add(requestId); + return formServiceResponse(requestId, "200", "Service creation was successful"); + } else { + return formServiceResponse(requestId, "410", "Link not available , Service creation failed"); + + } + + } + + private MsaServiceResponse formServiceResponse(String requestId, String responseCode, String responseMessage) { + MsaServiceResponse response = new MsaServiceResponse(); + ConfigurationResponseCommon configuration = new ConfigurationResponseCommon(); + configuration.setRequestId(requestId); + configuration.setResponseCode(responseCode); + configuration.setResponseMessage(responseMessage); + configuration.setAckFinalIndicator("Y"); + response.setConfigurationResponseCommon(configuration); + return response; + + } + + public MsaServiceResponse processMsaServiceDelete(MsaServiceDeleteRequest request) { + String requestId = request.getSdncRequestHeader().getRequestId(); + if (serviceIdList.contains(requestId)) { + serviceIdList.remove(requestId); + return formServiceResponse(requestId, "200", "Service deletion success"); + } else { + return formServiceResponse(requestId, "410", "Service does not exist"); + } + + } + +} diff --git a/msasimulator/src/main/java/org/onap/msasimulator/utils/Utils.java b/msasimulator/src/main/java/org/onap/msasimulator/utils/Utils.java new file mode 100644 index 0000000..2f0d924 --- /dev/null +++ b/msasimulator/src/main/java/org/onap/msasimulator/utils/Utils.java @@ -0,0 +1,63 @@ +/*
+ * ============LICENSE_START=======================================================
+ * MSA-SIMULATOR
+ * ================================================================================
+ * Copyright (C) 2020 Fujitsu Limited. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.msasimulator.utils;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.nio.file.Files;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ResourceUtils;
+
+@Component
+public class Utils {
+
+ public void readFileclasspath() throws IOException {
+ File file = ResourceUtils.getFile("classpath:config/sample.txt");
+
+ // File is found
+ System.out.println("File Found : " + file.exists());
+
+ // Read File Content
+ String content = new String(Files.readAllBytes(file.toPath()));
+ System.out.println(content);
+ }
+
+ public String readFromFile(String file) {
+ String content = "";
+ try {
+
+ BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
+ content = bufferedReader.readLine();
+ String temp;
+ while ((temp = bufferedReader.readLine()) != null) {
+ content = content.concat(temp);
+ }
+ content = content.trim();
+ bufferedReader.close();
+ } catch (Exception e) {
+ content = null;
+ }
+ return content;
+ }
+
+}
diff --git a/msasimulator/src/main/resources/application.properties b/msasimulator/src/main/resources/application.properties new file mode 100644 index 0000000..3cf12af --- /dev/null +++ b/msasimulator/src/main/resources/application.properties @@ -0,0 +1 @@ +server.port=8082 diff --git a/msasimulator/src/main/resources/logback.xml b/msasimulator/src/main/resources/logback.xml new file mode 100644 index 0000000..726b326 --- /dev/null +++ b/msasimulator/src/main/resources/logback.xml @@ -0,0 +1,28 @@ +<configuration> + <appender name="FILE-THREAD" class="ch.qos.logback.classic.sift.SiftingAppender"> + <discriminator> + <key>logFileName</key> + <defaultValue>msasim</defaultValue> + </discriminator> + + <sift> + <appender name="file-${logFileName}" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <file>/var/log/onap/msasimulator/${logFileName}.log</file> + <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> + <fileNamePattern>${logFileName}.%i.log.zip</fileNamePattern> + <minIndex>1</minIndex> + <maxIndex>5</maxIndex> + </rollingPolicy> + <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> + <maxFileSize>5MB</maxFileSize> + </triggeringPolicy> + <encoder> + <pattern>%d{dd-MM-yyyy HH:mm:ss.SSS} %magenta([%thread]) %highlight(%-5level) %logger{36}.%M - %msg%n</pattern> + </encoder> + </appender> + </sift> + </appender> + <root level="debug"> + <appender-ref ref="FILE-THREAD" /> + </root> +</configuration> diff --git a/msasimulator/src/test/java/org/onap/msasimulator/Config.java b/msasimulator/src/test/java/org/onap/msasimulator/Config.java new file mode 100644 index 0000000..f39016a --- /dev/null +++ b/msasimulator/src/test/java/org/onap/msasimulator/Config.java @@ -0,0 +1,62 @@ +/* + * ============LICENSE_START======================================================= + * MSA-SIMULATOR + * ================================================================================ + * Copyright (C) 2020 Fujitsu Limited. All rights reserved. + * ================================================================================ + * 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========================================================= + */ + +package org.onap.msasimulator; + +import org.onap.msasimulator.utils.Utils; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import org.springframework.util.FileCopyUtils; +import org.springframework.context.annotation.Bean; +import org.mockito.Mockito; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +@Configuration +public class Config { + + @Bean + public Utils utils() { + Utils utils = Mockito.mock(Utils.class); + String topology = readFileclasspath("topology.json"); + when(utils.readFromFile("/opt/onap/msasimulator/templates/msa-topology.json")).thenReturn(topology); + + return utils; + } + + public static String readFileclasspath(String filename) { + String data = ""; + Resource resource = new ClassPathResource(filename); + InputStream inputStream; + try { + inputStream = resource.getInputStream(); + byte[] bdata = FileCopyUtils.copyToByteArray(inputStream); + data = new String(bdata, StandardCharsets.UTF_8); + return data; + } catch (IOException e) { + return data; + } + } + +} diff --git a/msasimulator/src/test/java/org/onap/msasimulator/TestUtils.java b/msasimulator/src/test/java/org/onap/msasimulator/TestUtils.java new file mode 100644 index 0000000..6b9c546 --- /dev/null +++ b/msasimulator/src/test/java/org/onap/msasimulator/TestUtils.java @@ -0,0 +1,47 @@ +/*
+ * ============LICENSE_START=======================================================
+ * MSA-SIMULATOR
+ * ================================================================================
+ * Copyright (C) 2020 Fujitsu Limited. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.msasimulator;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.util.FileCopyUtils;
+
+public class TestUtils {
+
+ public static String readFileclasspath(String filename) {
+ String data = "";
+ Resource resource = new ClassPathResource(filename);
+ InputStream inputStream;
+ try {
+ inputStream = resource.getInputStream();
+ byte[] bdata = FileCopyUtils.copyToByteArray(inputStream);
+ data = new String(bdata, StandardCharsets.UTF_8);
+ return data;
+ } catch (IOException e) {
+ return data;
+ }
+ }
+
+}
diff --git a/msasimulator/src/test/java/org/onap/msasimulator/controller/TestMsaController.java b/msasimulator/src/test/java/org/onap/msasimulator/controller/TestMsaController.java new file mode 100644 index 0000000..5515556 --- /dev/null +++ b/msasimulator/src/test/java/org/onap/msasimulator/controller/TestMsaController.java @@ -0,0 +1,110 @@ +/* + * ============LICENSE_START======================================================= + * MSA-SIMULATOR + * ================================================================================ + * Copyright (C) 2020 Fujitsu Limited. All rights reserved. + * ================================================================================ + * 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========================================================= + */ + +package org.onap.msasimulator.controller; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.onap.msasimulator.Application; +import org.onap.msasimulator.Config; +import org.onap.msasimulator.TestUtils; +import org.onap.msasimulator.model.MsaServiceCreateRequest; +import org.onap.msasimulator.model.MsaServiceResponse; +import org.onap.msasimulator.service.MsaService; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +@RunWith(SpringRunner.class) +@SpringBootTest( + properties = "spring.main.allow-bean-definition-overriding=true", + classes = {Application.class, Config.class}, + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +public class TestMsaController { + + @InjectMocks + MsaController msaController; + + @Mock + MsaService msaService; + + private MockMvc mvc; + + private ObjectMapper mapper; + + @Before + public void beforeEach() { + + MockitoAnnotations.initMocks(this); + + mvc = MockMvcBuilders.standaloneSetup(msaController).build(); + mapper = new ObjectMapper(); + + } + + @Test + public void testTopology() throws Exception { + String topology = TestUtils.readFileclasspath("topology.json"); + String uri = "/cxf/openroadm/v2/networks/otn-topology"; + when(msaService.getTopology()).thenReturn(topology); + MvcResult mvcResult = mvc.perform(get(uri).accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + assertEquals(content, topology); + } + + @Test + public void testServiceCreateEndpoint() throws Exception { + String serviceCreaterequest = TestUtils.readFileclasspath("service-create-success.json"); + MsaServiceCreateRequest request = mapper.readValue(serviceCreaterequest, MsaServiceCreateRequest.class); + String response = "{\n" + " \"configuration-response-common\":{\n" + " \"request-id\":\"123456\",\n" + + " \"response-code\":\"200\",\n" + + " \"response-message\":\"Service creation was successful\",\n" + + " \"ack-final-indicator\":\"Y\"\n" + " }\n" + "}"; + MsaServiceResponse expectedResponse = mapper.readValue(response, MsaServiceResponse.class); + String uri = "/cxf/openroadm/openroadm-services/create"; + when(msaService.processMsaService(request)).thenReturn(expectedResponse); + MvcResult mvcResult = mvc.perform(post(uri).content(serviceCreaterequest) + .contentType(MediaType.APPLICATION_JSON_VALUE).accept(MediaType.APPLICATION_JSON_VALUE)).andReturn(); + + int status = mvcResult.getResponse().getStatus(); + assertEquals(200, status); + String content = mvcResult.getResponse().getContentAsString(); + MsaServiceResponse actualResponse = mapper.readValue(content, MsaServiceResponse.class); + assertEquals(actualResponse, expectedResponse); + } + +} diff --git a/msasimulator/src/test/java/org/onap/msasimulator/service/MsaServiceTest.java b/msasimulator/src/test/java/org/onap/msasimulator/service/MsaServiceTest.java new file mode 100644 index 0000000..bc9a5ba --- /dev/null +++ b/msasimulator/src/test/java/org/onap/msasimulator/service/MsaServiceTest.java @@ -0,0 +1,113 @@ +/* + * ============LICENSE_START======================================================= + * MSA-SIMULATOR + * ================================================================================ + * Copyright (C) 2020 Fujitsu Limited. All rights reserved. + * ================================================================================ + * 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========================================================= + */ + +package org.onap.msasimulator.service; + +import static org.junit.Assert.assertEquals; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.IOException; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.onap.msasimulator.Application; +import org.onap.msasimulator.Config; +import org.onap.msasimulator.TestUtils; +import org.onap.msasimulator.model.MsaServiceCreateRequest; +import org.onap.msasimulator.model.MsaServiceDeleteRequest; +import org.onap.msasimulator.model.MsaServiceResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest( + properties = "spring.main.allow-bean-definition-overriding=true", + classes = {Application.class, Config.class}, + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) + +public class MsaServiceTest { + + @Autowired + MsaService msaService; + + @Autowired + ObjectMapper objectMapper; + + @Before + public void setUp() { + + MockitoAnnotations.initMocks(this); + + } + + @Test + public void testGetTopology() { + String topology = TestUtils.readFileclasspath("topology.json"); + assertEquals(topology, msaService.getTopology()); + } + + @Test + public void testServiceCreateFail() throws JsonParseException, JsonMappingException, IOException { + String requestJson = TestUtils.readFileclasspath("service-create-failure.json"); + MsaServiceCreateRequest request = objectMapper.readValue(requestJson, MsaServiceCreateRequest.class); + String response = "{\n" + " \"configuration-response-common\":{\n" + " \"request-id\":\"123456\",\n" + + " \"response-code\":\"410\",\n" + + " \"response-message\":\"Link not available , Service creation failed\",\n" + + " \"ack-final-indicator\":\"Y\"\n" + " }\n" + "}"; + MsaServiceResponse expectedResponse = objectMapper.readValue(response, MsaServiceResponse.class); + + MsaServiceResponse actualResponse = msaService.processMsaService(request); + assertEquals(expectedResponse, actualResponse); + } + + @Test + public void testServiceCreatSuccessl() throws JsonParseException, JsonMappingException, IOException { + String requestJson = TestUtils.readFileclasspath("service-create-success.json"); + MsaServiceCreateRequest request = objectMapper.readValue(requestJson, MsaServiceCreateRequest.class); + String response = "{\n" + " \"configuration-response-common\":{\n" + " \"request-id\":\"123456\",\n" + + " \"response-code\":\"200\",\n" + + " \"response-message\":\"Service creation was successful\",\n" + + " \"ack-final-indicator\":\"Y\"\n" + " }\n" + "}"; + MsaServiceResponse expectedResponse = objectMapper.readValue(response, MsaServiceResponse.class); + + MsaServiceResponse actualResponse = msaService.processMsaService(request); + assertEquals(expectedResponse, actualResponse); + } + + @Test + public void testServiceDelete() throws JsonParseException, JsonMappingException, IOException { + String requestJson = TestUtils.readFileclasspath("service-delete-request.json"); + MsaServiceDeleteRequest request = objectMapper.readValue(requestJson, MsaServiceDeleteRequest.class); + String response = "{\n" + " \"configuration-response-common\":{\n" + " \"request-id\":\"123456\",\n" + + " \"response-code\":\"200\",\n" + " \"response-message\":\"Service deletion success\",\n" + + " \"ack-final-indicator\":\"Y\"\n" + " }\n" + "}"; + MsaServiceResponse expectedResponse = objectMapper.readValue(response, MsaServiceResponse.class); + + MsaServiceResponse actualResponse = msaService.processMsaServiceDelete(request); + assertEquals(expectedResponse, actualResponse); + } + +} diff --git a/msasimulator/src/test/resources/service-create-failure.json b/msasimulator/src/test/resources/service-create-failure.json new file mode 100644 index 0000000..c008a6f --- /dev/null +++ b/msasimulator/src/test/resources/service-create-failure.json @@ -0,0 +1,54 @@ +{ + "common-id": "1234567", + "connection-type": "service", + "service-name": "svc-Customer1-orange-001_MDONS_OTN_MSA", + "sdnc-request-header": { + "request-id": "123456", + "rpc-action": "service-create", + "notification-url": "http://167.254.204.118:8090/receiver/services", + "request-system-id": "SDN-MLC" + }, + "service-a-end": { + "service-rate": 10, + "service-format": "Ethernet", + "clli": "OWB-AEND", + "node-id": "OWBSPDRNE15", + "optic-type": "gray", + "ethernet-encoding": "10GBASE-R", + "mapping-mode": "GFP-F", + "tx-direction": { + "port": { + "port-device-name": "router-1", + "port-name": "R1" + } + }, + "rx-direction": { + "port": { + "port-device-name": "router-1", + "port-name": "R1" + } + } + }, + "service-z-end": { + "service-rate": 10, + "service-format": "Ethernet", + "node-id": "OWBSPDRNE16", + "clli": "OWB-ZEND", + "optic-type": "gray", + "ethernet-encoding": "10GBASE-R", + "mapping-mode": "GFP-F", + "tx-direction": { + "port": { + "port-device-name": "router-2", + "port-name": "R2" + } + }, + "rx-direction": { + "port": { + "port-device-name": "router-2", + "port-name": "R2" + } + } + }, + "service-layer": "otn" +} diff --git a/msasimulator/src/test/resources/service-create-success.json b/msasimulator/src/test/resources/service-create-success.json new file mode 100644 index 0000000..2edae54 --- /dev/null +++ b/msasimulator/src/test/resources/service-create-success.json @@ -0,0 +1,54 @@ +{ + "common-id": "1234567", + "connection-type": "service", + "service-name": "customer", + "sdnc-request-header": { + "request-id": "123456", + "rpc-action": "service-create", + "notification-url": "http://167.254.204.118:8090/receiver/services", + "request-system-id": "SDN-MLC" + }, + "service-a-end": { + "service-rate": 10, + "service-format": "Ethernet", + "clli": "OWB-AEND", + "node-id": "NodeA", + "optic-type": "gray", + "ethernet-encoding": "10GBASE-R", + "mapping-mode": "GFP-F", + "tx-direction": { + "port": { + "port-device-name": "router-1", + "port-name": "R1" + } + }, + "rx-direction": { + "port": { + "port-device-name": "router-1", + "port-name": "R1" + } + } + }, + "service-z-end": { + "service-rate": 10, + "service-format": "Ethernet", + "node-id": "NodeB", + "clli": "OWB-ZEND", + "optic-type": "gray", + "ethernet-encoding": "10GBASE-R", + "mapping-mode": "GFP-F", + "tx-direction": { + "port": { + "port-device-name": "router-2", + "port-name": "R2" + } + }, + "rx-direction": { + "port": { + "port-device-name": "router-2", + "port-name": "R2" + } + } + }, + "service-layer": "otn" +} diff --git a/msasimulator/src/test/resources/service-delete-request.json b/msasimulator/src/test/resources/service-delete-request.json new file mode 100644 index 0000000..06ed4e9 --- /dev/null +++ b/msasimulator/src/test/resources/service-delete-request.json @@ -0,0 +1,12 @@ +{ + "sdnc-request-header": { + "request-id": "123456", + "rpc-action": "service-delete", + "notification-url": "http://167.254.204.118:8090/receiver/services", + "request-system-id": "SDN-MLC" + }, + "service-delete-req-info": { + "tail-retention": "no", + "service-name": "new" + } +} diff --git a/msasimulator/src/test/resources/topology.json b/msasimulator/src/test/resources/topology.json new file mode 100644 index 0000000..7519d93 --- /dev/null +++ b/msasimulator/src/test/resources/topology.json @@ -0,0 +1,130 @@ +{ + "network-id": "otn-topology", + "ietf-network-topology:link": [ + { + "link-id": "NodeA-XPDR1#XPDR1-NETWORK1##NodeB-XPDR1#XPDR1-NETWORK2", + "org-openroadm-network-topology:administrative-state": "outOfService", + "org-openroadm-otn-network-topology:link-type": "OTN-LINK", + "destination": { + "dest-node": "NodeB-XPDR1", + "dest-tp": "XPDR1-NETWORK2" + }, + "source": { + "source-node": "NodeA-XPDR1", + "source-tp": "XPDR1-NETWORK1" + } + } + ], + "supporting-network": [ + { + "network-ref": "openroadm-topology" + } + ], + "network-types": {}, + "node": [ + { + "supporting-node": [ + { + "network-ref": "openroadm-topology", + "node-ref": "NodeA-XPDR1" + } + ], + "node-id": "NodeA-XPDR1", + "ietf-network-topology:termination-point": [ + { + "org-openroadm-otn-network-topology:tp-type": "XPONDER-CLIENT", + "org-openroadm-otn-network-topology:eqpt-srg-id": 1, + "tp-id": "XPDR1-CLIENT1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "tp-ref": "XPDR1-CLIENT1", + "node-ref": "NodeA-XPDR1" + } + ] + }, + { + "org-openroadm-otn-network-topology:tp-type": "XPONDER-CLIENT", + "org-openroadm-otn-network-topology:eqpt-srg-id": 1, + "tp-id": "XPDR1-CLIENT2", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "tp-ref": "XPDR1-CLIENT2", + "node-ref": "NodeA-XPDR1" + }, + { + "org-openroadm-otn-network-topology:tp-type": "XPONDER-NETWORK", + "org-openroadm-otn-network-topology:eqpt-srg-id": 1, + "tp-id": "XPDR1-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "tp-ref": "XPDR1-NETWORK1", + "node-ref": "NodeA-XPDR1" + } + ] + } + ] + } + ], + "org-openroadm-network:node-status": "PLANNED", + "org-openroadm-otn-network-topology:node-type": "SWITCH", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 1 + } + }, + { + "supporting-node": [ + { + "network-ref": "openroadm-topology", + "node-ref": "NodeB-XPDR1" + } + ], + "node-id": "NodeB-XPDR1", + "ietf-network-topology:termination-point": [ + { + "org-openroadm-otn-network-topology:tp-type": "XPONDER-CLIENT", + "org-openroadm-otn-network-topology:eqpt-srg-id": 1, + "tp-id": "XPDR1-CLIENT1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "tp-ref": "XPDR1-CLIENT1", + "node-ref": "NodeA-XPDR1" + } + ] + }, + { + "org-openroadm-otn-network-topology:tp-type": "XPONDER-CLIENT", + "org-openroadm-otn-network-topology:eqpt-srg-id": 1, + "tp-id": "XPDR1-CLIENT2", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "tp-ref": "XPDR1-CLIENT2", + "node-ref": "NodeA-XPDR1" + }, + { + "org-openroadm-otn-network-topology:tp-type": "XPONDER-NETWORK", + "org-openroadm-otn-network-topology:eqpt-srg-id": 1, + "tp-id": "XPDR1-NETWORK1", + "supporting-termination-point": [ + { + "network-ref": "openroadm-topology", + "tp-ref": "XPDR1-NETWORK1", + "node-ref": "NodeA-XPDR1" + } + ] + } + ] + } + ], + "org-openroadm-network:node-status": "PLANNED", + "org-openroadm-otn-network-topology:node-type": "SWITCH", + "org-openroadm-otn-network-topology:xpdr-attributes": { + "xpdr-number": 1 + } + } + ] +} |