aboutsummaryrefslogtreecommitdiffstats
path: root/msasimulator
diff options
context:
space:
mode:
authorMehreen Kaleem <mehreen.kaleem@us.fujitsu.com>2020-04-27 06:11:03 +0000
committerMehreen Kaleem <mehreen.kaleem@us.fujitsu.com>2020-04-27 08:51:12 +0000
commit4408ab05ba1ee07b70d717b7183d76bd718653e5 (patch)
treede48eddaf697b1e9be5bad989d9c72ba4819b498 /msasimulator
parente3a5e83ea1385a3fdf56173027ba37ca6d17887f (diff)
Added the base version of the controllers used
for the MDONS use case version(1.0.0SNAPSHOT) with test cases. Issue-ID: INT-1532 Change-Id: Ic51448e52722a5edef1ac07a978bb3fdaac07a5d Signed-off-by: Mehreen Kaleem <mehreen.kaleem@us.fujitsu.com>
Diffstat (limited to 'msasimulator')
-rw-r--r--msasimulator/.classpath37
-rw-r--r--msasimulator/.gitignore1
-rw-r--r--msasimulator/.project23
-rw-r--r--msasimulator/.settings/org.eclipse.core.resources.prefs6
-rw-r--r--msasimulator/.settings/org.eclipse.jdt.core.prefs5
-rw-r--r--msasimulator/.settings/org.eclipse.m2e.core.prefs4
-rw-r--r--msasimulator/Dockerfile9
-rw-r--r--msasimulator/README.md98
-rw-r--r--msasimulator/entrypoint.sh4
-rw-r--r--msasimulator/json-files/msa-topology.json130
-rw-r--r--msasimulator/pom.xml306
-rw-r--r--msasimulator/src/main/java/org/onap/msasimulator/Application.java36
-rw-r--r--msasimulator/src/main/java/org/onap/msasimulator/controller/MsaController.java71
-rw-r--r--msasimulator/src/main/java/org/onap/msasimulator/model/ConfigurationResponseCommon.java51
-rw-r--r--msasimulator/src/main/java/org/onap/msasimulator/model/DirectionDetails.java38
-rw-r--r--msasimulator/src/main/java/org/onap/msasimulator/model/Link.java36
-rw-r--r--msasimulator/src/main/java/org/onap/msasimulator/model/MsaServiceCreateRequest.java64
-rw-r--r--msasimulator/src/main/java/org/onap/msasimulator/model/MsaServiceDeleteRequest.java44
-rw-r--r--msasimulator/src/main/java/org/onap/msasimulator/model/MsaServiceResponse.java40
-rw-r--r--msasimulator/src/main/java/org/onap/msasimulator/model/Port.java44
-rw-r--r--msasimulator/src/main/java/org/onap/msasimulator/model/SdncRequestHeader.java51
-rw-r--r--msasimulator/src/main/java/org/onap/msasimulator/model/ServiceDeleteInfo.java44
-rw-r--r--msasimulator/src/main/java/org/onap/msasimulator/model/ServiceEndPoint.java71
-rw-r--r--msasimulator/src/main/java/org/onap/msasimulator/service/MsaService.java117
-rw-r--r--msasimulator/src/main/java/org/onap/msasimulator/utils/Utils.java63
-rw-r--r--msasimulator/src/main/resources/application.properties1
-rw-r--r--msasimulator/src/main/resources/logback.xml28
-rw-r--r--msasimulator/src/test/java/org/onap/msasimulator/Config.java62
-rw-r--r--msasimulator/src/test/java/org/onap/msasimulator/TestUtils.java47
-rw-r--r--msasimulator/src/test/java/org/onap/msasimulator/controller/TestMsaController.java110
-rw-r--r--msasimulator/src/test/java/org/onap/msasimulator/service/MsaServiceTest.java113
-rw-r--r--msasimulator/src/test/resources/service-create-failure.json54
-rw-r--r--msasimulator/src/test/resources/service-create-success.json54
-rw-r--r--msasimulator/src/test/resources/service-delete-request.json12
-rw-r--r--msasimulator/src/test/resources/topology.json130
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
+ }
+ }
+ ]
+}