aboutsummaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--.gitignore1
-rw-r--r--.project17
-rw-r--r--.settings/org.eclipse.core.resources.prefs2
-rw-r--r--.settings/org.eclipse.m2e.core.prefs4
-rw-r--r--README.md21
-rw-r--r--checkstyle-suppressions.xml46
-rw-r--r--docker-compose.yml25
-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
-rw-r--r--pom.xml106
-rw-r--r--tapisimulator/.classpath36
-rw-r--r--tapisimulator/.gitignore1
-rw-r--r--tapisimulator/.project23
-rw-r--r--tapisimulator/.settings/org.eclipse.core.resources.prefs6
-rw-r--r--tapisimulator/.settings/org.eclipse.jdt.core.prefs5
-rw-r--r--tapisimulator/.settings/org.eclipse.m2e.core.prefs4
-rw-r--r--tapisimulator/Dockerfile9
-rw-r--r--tapisimulator/README.md87
-rw-r--r--tapisimulator/entrypoint.sh3
-rw-r--r--tapisimulator/json-files/tapi1-siplist.json244
-rw-r--r--tapisimulator/json-files/tapi1-topology.json506
-rw-r--r--tapisimulator/json-files/tapi2-siplist.json244
-rw-r--r--tapisimulator/json-files/tapi2-topology.json506
-rw-r--r--tapisimulator/pom.xml315
-rw-r--r--tapisimulator/src/main/java/org/onap/tapisimulator/Application.java33
-rw-r--r--tapisimulator/src/main/java/org/onap/tapisimulator/controller/TapiController.java73
-rw-r--r--tapisimulator/src/main/java/org/onap/tapisimulator/model/Name.java39
-rw-r--r--tapisimulator/src/main/java/org/onap/tapisimulator/model/Sip.java49
-rw-r--r--tapisimulator/src/main/java/org/onap/tapisimulator/model/SipList.java36
-rw-r--r--tapisimulator/src/main/java/org/onap/tapisimulator/service/TapiService.java156
-rw-r--r--tapisimulator/src/main/java/org/onap/tapisimulator/utils/Utils.java64
-rw-r--r--tapisimulator/src/main/resources/application.properties0
-rw-r--r--tapisimulator/src/main/resources/logback.xml28
-rw-r--r--tapisimulator/src/test/java/org/onap/tapisimulator/Config.java44
-rw-r--r--tapisimulator/src/test/java/org/onap/tapisimulator/TestUtils.java47
-rw-r--r--tapisimulator/src/test/java/org/onap/tapisimulator/controller/TestTapiController.java103
-rw-r--r--tapisimulator/src/test/resources/service-create-tapi.json54
-rw-r--r--tapisimulator/src/test/resources/siplist.json52
-rw-r--r--tapisimulator/src/test/resources/tapi-topology.json135
72 files changed, 5128 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 33defe4..a459221 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
.tox/
+/target/
diff --git a/.project b/.project
new file mode 100644
index 0000000..c205478
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>integration-dc-simulator</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ </natures>
+</projectDescription>
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..4824b80
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..14b697b
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..a1904c0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,21 @@
+## DC SIMULATOR
+
+Project consists of two submodules:
+1. msasimulator
+2. tapisimulator
+
+Detailed information about submodules can be found in ```README.md``` in their directories.
+
+## Project building
+```
+mvn clean package
+```
+## Building Docker images
+```
+mvn clean package -P docker -DskipTests=true
+
+## To bring up two instances of TAPI and one instance of MSA
+The configurations are present in docker-compose.yml. Execute the following
+docker-compose up
+
+## To bring it up in the onap cluster chart configurations are present in charts folder
diff --git a/checkstyle-suppressions.xml b/checkstyle-suppressions.xml
new file mode 100644
index 0000000..69ee088
--- /dev/null
+++ b/checkstyle-suppressions.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+<!--
+ ============LICENSE_START=======================================================
+ 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=========================================================
+ -->
+
+
+<!DOCTYPE suppressions PUBLIC
+ "-//Checkstyle//DTD SuppressionFilter Configuration 1.0//EN"
+ "https://checkstyle.org/dtds/suppressions_1_0.dtd">
+
+<suppressions>
+ <suppress checks=".*" files="\.java" lines="1-20"
+ />
+ <suppress checks=".*" files="\.properties"
+ />
+ <suppress checks="javadoc" files="\.java"
+ />
+ <suppress checks="LineLength" files="\.java"
+ />
+ <suppress checks="HiddenField" files="\.java"
+ />
+ <suppress checks="FinalClass" files="\.java"
+ />
+ <suppress checks="FinalParameters" files="\.java"
+ />
+ <suppress checks="AvoidInlineConditionals" files="\.java"
+ />
+ <suppress checks="DesignForExtension" files="\.java"
+ />
+</suppressions>
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..36f3cc2
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,25 @@
+version: '3'
+
+services:
+
+ msa:
+ image: nexus3.onap.org:10003/onap/tapisimulator
+ restart: always
+ environment:
+ Controller: MSA
+ ports:
+ - "8082:8082"
+
+ tap1:
+ image: nexus3.onap.org:10003/onap/tapisimulator
+ restart: always
+ ports:
+ - 8081:8080
+ environment:
+ Controller: TAPI1
+
+ tapi2:
+ image: nexus3.onap.org:10003/onap/tapisimulator
+ ports:
+ - "8083:8080"
+ restart: on-failure
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
+ }
+ }
+ ]
+}
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..94c7212
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ============LICENSE_START=======================================================
+ 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="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <packaging>pom</packaging>
+
+ <parent>
+ <groupId>org.onap.oparent</groupId>
+ <artifactId>oparent</artifactId>
+ <version>2.1.0</version>
+ </parent>
+
+ <groupId>org.onap.integration.simulators.dc-simulator</groupId>
+ <artifactId>integration-dc-simulator</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <modules>
+ <module>msasimulator</module>
+ <module>tapisimulator</module>
+ </modules>
+ <properties>
+ <nexusproxy>https://nexus.onap.org</nexusproxy>
+ <snapshotNexusPath>/content/repositories/snapshots/</snapshotNexusPath>
+ <releaseNexusPath>/content/repositories/releases/</releaseNexusPath>
+ <stagingNexusPath>/content/repositories/staging/</stagingNexusPath>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <maven.compiler.source>1.8</maven.compiler.source>
+ <maven.compiler.target>1.8</maven.compiler.target>
+ <docker-maven-plugin.version>0.31.0</docker-maven-plugin.version>
+ <skipDockerPush>true</skipDockerPush>
+ <sonar.coverage.jacoco.xmlReportPaths>${project.reporting.outputDirectory}/jacoco-ut/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-dependencies</artifactId>
+ <version>2.1.5.RELEASE</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <version>2.1.5.RELEASE</version>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <version>2.17</version>
+ <configuration>
+ <suppressionsLocation>checkstyle-suppressions.xml</suppressionsLocation>
+ <suppressionsFileExpression>checkstyle.suppressions.file</suppressionsFileExpression>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>io.fabric8</groupId>
+ <artifactId>docker-maven-plugin</artifactId>
+ <version>0.31.0</version>
+ </plugin>
+ </plugins>
+ </build>
+
+
+ <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/tapisimulator/.classpath b/tapisimulator/.classpath
new file mode 100644
index 0000000..ede0663
--- /dev/null
+++ b/tapisimulator/.classpath
@@ -0,0 +1,36 @@
+<?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 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/tapisimulator/.gitignore b/tapisimulator/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/tapisimulator/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/tapisimulator/.project b/tapisimulator/.project
new file mode 100644
index 0000000..85317af
--- /dev/null
+++ b/tapisimulator/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tapisimulator</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/tapisimulator/.settings/org.eclipse.core.resources.prefs b/tapisimulator/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..04cfa2c
--- /dev/null
+++ b/tapisimulator/.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/tapisimulator/.settings/org.eclipse.jdt.core.prefs b/tapisimulator/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..d59e09c
--- /dev/null
+++ b/tapisimulator/.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/tapisimulator/.settings/org.eclipse.m2e.core.prefs b/tapisimulator/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..14b697b
--- /dev/null
+++ b/tapisimulator/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/tapisimulator/Dockerfile b/tapisimulator/Dockerfile
new file mode 100644
index 0000000..d6246f2
--- /dev/null
+++ b/tapisimulator/Dockerfile
@@ -0,0 +1,9 @@
+FROM java:openjdk-8
+ARG VERSION=${version}
+ARG JAR_FILE=target/tapisimulator-${VERSION}.jar
+COPY ${JAR_FILE} app.jar
+COPY json-files/* /opt/onap/tapisimulator/templates/
+ADD entrypoint.sh .
+RUN chmod +x entrypoint.sh
+EXPOSE 8080
+ENTRYPOINT ["./entrypoint.sh"]
diff --git a/tapisimulator/README.md b/tapisimulator/README.md
new file mode 100644
index 0000000..85735a2
--- /dev/null
+++ b/tapisimulator/README.md
@@ -0,0 +1,87 @@
+TAPI Controller Simulator Project.
+
+The simulator is a simple spring boot application which acts as the TAPI controller for the MDONS use case
+
+The API'S are as follows:
+
+TAPI
+1.Service interface points GET: /cxf/tapi/v2/connectivities/service-interface-points/{connection-point}
+2.Create Service POST: /cxf/tapi/v2/connectivities/create-service/{service-name}
+3.Delete Service: DELETE /cxf/tapi/v2/connectivities/delete-service/{service-name}
+4.Get Service: GET /cxf/tapi/v2/connectivities/get-service/{service-name}
+5.Get Topology : GET /cxf/tapi/v2/connectivities/topology
+
+##Sample create request
+
+{
+ "create-connectivity-service-input-list":[
+ {
+ "end-point":[
+ {
+ "local-id": "/OTN/FW950074SDN-12/ODU0:1-2-2",
+
+ "layer-protocol-name":"ODU",
+ "connection-end-point":[
+ {
+ "topology-uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f",
+ "node-edge-point-uuid": "5d90ffed-8240-337b-82cf-3a550c2e12da",
+ "node-uuid": "492c08a7-6664-382b-8153-e8eed147b5b3",
+ "connection-end-point-uuid": "a8855567-8699-3703-8d54-b4ec2da694b9"
+ }
+ ],
+ "service-interface-point":{
+ "service-interface-point-uuid":"a8855567-8699-3703-8d54-b4ec2da694b9"
+ },
+ "protection-role":"WORK"
+ },
+ { "local-id": "/OTN/FW950074SDN-15/ODU2:2-3-14-1",
+ "layer-protocol-name":"ODU",
+ "connection-end-point":[
+ {
+ "topology-uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f",
+ "node-edge-point-uuid": "c4b07e05-871a-3811-881d-13983e3e28e0",
+ "node-uuid": "9373a6b7-8d29-35bb-a5c9-dd823da138ae",
+ "connection-end-point-uuid": "139c16e7-c13b-3f86-853e-1655afc2f167"
+ }
+ ],
+ "service-interface-point":{
+ "service-interface-point-uuid":"139c16e7-c13b-3f86-853e-1655afc2f167"
+ },
+ "protection-role":"WORK"
+ }
+ ],
+ "layer-protocol-name":"ODU",
+ "connectivity-constraint":{
+ "service-type":"POINT_TO_POINT_CONNECTIVITY"
+ },
+ "routing-constraint":{
+ "route-objective-function":"MIN_WORK_ROUTE_COST"
+ },
+ "topology-constraint":[
+
+ ],
+ "name":[
+ {
+ "value-name":"service-name",
+ "value":"demo-nni"
+ }
+ ]
+ }
+ ]
+}
+
+##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/tapisimulator/entrypoint.sh b/tapisimulator/entrypoint.sh
new file mode 100644
index 0000000..655ff42
--- /dev/null
+++ b/tapisimulator/entrypoint.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+java -jar app.jar
diff --git a/tapisimulator/json-files/tapi1-siplist.json b/tapisimulator/json-files/tapi1-siplist.json
new file mode 100644
index 0000000..0521489
--- /dev/null
+++ b/tapisimulator/json-files/tapi1-siplist.json
@@ -0,0 +1,244 @@
+{
+ "sip": [
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "68d7ae41-9303-3d70-b9d0-a2d72d8cd9bb",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node1"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-1"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "faeda58e-839b-11ea-bc55-0242ac130003",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node2"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-2"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "b33552e2-839f-11ea-bc55-0242ac130003",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node1"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-3"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "da92a2ac-83a1-11ea-bc55-0242ac130003",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node2"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-4"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "ea9d25c8-83a1-11ea-bc55-0242ac130003",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node1"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-5"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "f0dc392e-83a1-11ea-bc55-0242ac130003",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node2"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-6"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "fbebc622-83a1-11ea-bc55-0242ac130003",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node1"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-7"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "0def1734-83a2-11ea-bc55-0242ac130003",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node2"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-8"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "16a77ace-83a2-11ea-bc55-0242ac130003",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node1"
+ },
+ {
+ "value-name": "name",
+ "value": "1-2-1"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "1f6fd6ce-83a2-11ea-bc55-0242ac130003",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node2"
+ },
+ {
+ "value-name": "name",
+ "value": "1-2-2"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+}
diff --git a/tapisimulator/json-files/tapi1-topology.json b/tapisimulator/json-files/tapi1-topology.json
new file mode 100644
index 0000000..8ecba8c
--- /dev/null
+++ b/tapisimulator/json-files/tapi1-topology.json
@@ -0,0 +1,506 @@
+{
+ "topology": [
+ {
+ "uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f",
+ "link": [
+ {
+ "uuid": "f93f61ae-b021-3e51-bcf0-226059ccc265",
+ "cost-characteristic": [
+ {
+ "cost-name": "measured-latency",
+ "cost-value": "0"
+ },
+ {
+ "cost-name": "cost",
+ "cost-value": "200"
+ }
+ ],
+ "node-edge-point": [
+ {
+ "node-edge-point-uuid": "1ba61734-83a2-11ea-bc55-0242ac130fea9",
+ "node-uuid": "4df3b55a-bb8b-334d-9f82-284d1f728da2",
+ "topology-uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f"
+ },
+ {
+ "node-edge-point-uuid": "78d7ae41-9303-3d70-b9d0-a2d72d8cd9aa",
+ "node-uuid": "5ec3b55a-bb8b-334d-9f82-284d1f728bc6",
+ "topology-uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f"
+ }
+ ],
+ "direction": "UNIDIRECTIONAL",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "operational-state": "ENABLED",
+ "layer-protocol-name": [
+ "ODU"
+ ]
+ }
+ ],
+ "layer-protocol-name": [
+ "ODU"
+ ],
+ "node": [
+ {
+ "encap-topology": {
+ "topology-uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f"
+ },
+ "uuid": "5ec3b55a-bb8b-334d-9f82-284d1f728bc6",
+ "node-edge-point": [
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "68d7ae41-9303-3d70-b9d0-a2d72d8cd9bb",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-1"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "78d7ae41-9303-3d70-b9d0-a2d72d8cd9aa",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node1"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-1"
+ },
+ {
+ "value-name": "rate",
+ "value": "10GE"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "b33552e2-839f-11ea-bc55-0242ac130003",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-3"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "c43552e2-839f-11ea-bc55-0242ac130065",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node1"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-3"
+ },
+ {
+ "value-name": "rate",
+ "value": "OC192"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "ea9d25c8-83a1-11ea-bc55-0242ac130003",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-5"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "129d25c8-83a1-11ea-bc55-0242ac130896",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node1"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-5"
+ },
+ {
+ "value-name": "rate",
+ "value": "OTU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "fbebc622-83a1-11ea-bc55-0242ac130003",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-7"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "536abc622-83a1-2596-bc55-0242ac139625",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node1"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-7"
+ },
+ {
+ "value-name": "rate",
+ "value": "10GE"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "16a77ace-83a2-11ea-bc55-0242ac130003",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-2-1"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "366abc622-83a1-2596-bc55-0242ac139adc8",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node1"
+ },
+ {
+ "value-name": "name",
+ "value": "1-2-1"
+ },
+ {
+ "value-name": "rate",
+ "value": "OTU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ],
+ "layer-protocol-name": [
+ "ODU"
+ ],
+ "name": [
+ {
+ "value-name": "name",
+ "value": "Node1"
+ }
+ ]
+ },
+ {
+ "encap-topology": {
+ "topology-uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f"
+ },
+ "uuid": "4df3b55a-bb8b-334d-9f82-284d1f728da2",
+ "node-edge-point": [
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "faeda58e-839b-11ea-bc55-0242ac130003",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "bfcda58e-839b-11ea-bc55-0242ac130569",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node2"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-2"
+ },
+ {
+ "value-name": "rate",
+ "value": "10GE"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "da92a2ac-83a1-11ea-bc55-0242ac130003",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-4"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "ca42a2ac-83a1-11ea-bc55-0242ac130003",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node2"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-4"
+ },
+ {
+ "value-name": "rate",
+ "value": "OC192"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "f0dc392e-83a1-11ea-bc55-0242ac130003",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-6"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "12dc392e-83a1-11ea-bc55-0242ac1300cba",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node2"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-6"
+ },
+ {
+ "value-name": "rate",
+ "value": "OTU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "0def1734-83a2-11ea-bc55-0242ac130003",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-8"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "1ba61734-83a2-11ea-bc55-0242ac130fea9",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node2"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-8"
+ },
+ {
+ "value-name": "rate",
+ "value": "10GE"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "1f6fd6ce-83a2-11ea-bc55-0242ac130003",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-2-2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "9f6fd6ce-83a2-11ea-bc55-0242ac1300896",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node2"
+ },
+ {
+ "value-name": "name",
+ "value": "1-2-2"
+ },
+ {
+ "value-name": "rate",
+ "value": "OTU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ],
+ "layer-protocol-name": [
+ "ODU"
+ ],
+ "name": [
+ {
+ "value-name": "name",
+ "value": "Node2"
+ }
+ ]
+ }
+ ],
+ "name": [
+ {
+ "value-name": "name",
+ "value": "OTN"
+ }
+ ]
+ }
+ ]
+}
diff --git a/tapisimulator/json-files/tapi2-siplist.json b/tapisimulator/json-files/tapi2-siplist.json
new file mode 100644
index 0000000..31ff2b6
--- /dev/null
+++ b/tapisimulator/json-files/tapi2-siplist.json
@@ -0,0 +1,244 @@
+{
+ "sip": [
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "c2814cd7-ea49-4ae1-af19-d4beb3629d1d",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node3"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-1"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "82392841-141f-4951-933d-acd3d62c8883",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node3"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-2"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "d0d6f882-6bd6-4ef2-bf28-7748e21a7126",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node3"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-3"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "a6cc8687-ccb4-4a6f-82bb-404674e824c0",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node3"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-4"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "d5c91b35-f3b4-4fca-8713-ce843309a4e8",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node3"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-5"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "9b443fea-22c2-4b6a-9679-ebc5685b19cc",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node4"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-6"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "2a824296-ad21-4ee4-acb5-8ed9ffabbb22",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node4"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-7"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "5e399f6c-32cb-4b31-ad91-ec91a8935378",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node4"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-8"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "4ff1ac3f-77fa-423a-acb7-b908c682be52",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node4"
+ },
+ {
+ "value-name": "name",
+ "value": "1-2-1"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "cbb7716c-864c-4db8-9dce-31ae0ce13cdc",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node4"
+ },
+ {
+ "value-name": "name",
+ "value": "1-2-2"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+}
diff --git a/tapisimulator/json-files/tapi2-topology.json b/tapisimulator/json-files/tapi2-topology.json
new file mode 100644
index 0000000..53466c0
--- /dev/null
+++ b/tapisimulator/json-files/tapi2-topology.json
@@ -0,0 +1,506 @@
+{
+ "topology": [
+ {
+ "uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f",
+ "link": [
+ {
+ "uuid": "b3ed13ec-ce2c-4195-b521-a92ce730e851",
+ "cost-characteristic": [
+ {
+ "cost-name": "measured-latency",
+ "cost-value": "0"
+ },
+ {
+ "cost-name": "cost",
+ "cost-value": "200"
+ }
+ ],
+ "node-edge-point": [
+ {
+ "node-edge-point-uuid": "dd13ea51-eb2d-4a42-af3d-d3d17336a820",
+ "node-uuid": "3a39735a-e5f0-4c74-a29d-cc278c02d4d3",
+ "topology-uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f"
+ },
+ {
+ "node-edge-point-uuid": "4ef204af-3c54-418e-b9e6-aa01e567135a",
+ "node-uuid": "2539bad0-5add-4406-8ca6-5ae38b50869a",
+ "topology-uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f"
+ }
+ ],
+ "direction": "UNIDIRECTIONAL",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "operational-state": "ENABLED",
+ "layer-protocol-name": [
+ "ODU"
+ ]
+ }
+ ],
+ "layer-protocol-name": [
+ "ODU"
+ ],
+ "node": [
+ {
+ "encap-topology": {
+ "topology-uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f"
+ },
+ "uuid": "2539bad0-5add-4406-8ca6-5ae38b50869a",
+ "node-edge-point": [
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "c2814cd7-ea49-4ae1-af19-d4beb3629d1d",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-1"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "4ef204af-3c54-418e-b9e6-aa01e567135a",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node3"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-1"
+ },
+ {
+ "value-name": "rate",
+ "value": "10GE"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "82392841-141f-4951-933d-acd3d62c8883",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "1ca8b70d-0a0b-481a-b3e0-0bcac0903d44",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node3"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-2"
+ },
+ {
+ "value-name": "rate",
+ "value": "OC192"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "d0d6f882-6bd6-4ef2-bf28-7748e21a7126",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-3"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "8b183457-c9be-4e8b-89ac-fd916c7ea9d9",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node3"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-3"
+ },
+ {
+ "value-name": "rate",
+ "value": "OTU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "a6cc8687-ccb4-4a6f-82bb-404674e824c0",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-4"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "81aca7b6-2073-4bf5-ace9-48bcc911f5df",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node3"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-4"
+ },
+ {
+ "value-name": "rate",
+ "value": "10GE"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "d5c91b35-f3b4-4fca-8713-ce843309a4e8",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-5"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "ee5a8f50-c54e-42a2-bbe9-09ab93cfb1d1",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node3"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-5"
+ },
+ {
+ "value-name": "rate",
+ "value": "OTU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ],
+ "layer-protocol-name": [
+ "ODU"
+ ],
+ "name": [
+ {
+ "value-name": "name",
+ "value": "Node3"
+ }
+ ]
+ },
+ {
+ "encap-topology": {
+ "topology-uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f"
+ },
+ "uuid": "3a39735a-e5f0-4c74-a29d-cc278c02d4d3",
+ "node-edge-point": [
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "9b443fea-22c2-4b6a-9679-ebc5685b19cc",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-6"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "d8be03a2-bcb1-4f67-a5b6-e55338d2ef0e",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node4"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-6"
+ },
+ {
+ "value-name": "rate",
+ "value": "10GE"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "2a824296-ad21-4ee4-acb5-8ed9ffabbb22",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-7"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "23be8019-a2c5-45c1-8a6d-547987354a95",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node4"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-7"
+ },
+ {
+ "value-name": "rate",
+ "value": "OC192"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "5e399f6c-32cb-4b31-ad91-ec91a8935378",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-8"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "dd13ea51-eb2d-4a42-af3d-d3d17336a820",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node4"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-8"
+ },
+ {
+ "value-name": "rate",
+ "value": "OTU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "4ff1ac3f-77fa-423a-acb7-b908c682be52",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-2-1"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "1bd434f4-6f9e-4c69-b865-c76cbafdf791",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node4"
+ },
+ {
+ "value-name": "name",
+ "value": "1-2-1"
+ },
+ {
+ "value-name": "rate",
+ "value": "10GE"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "cbb7716c-864c-4db8-9dce-31ae0ce13cdc",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-2-2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "e45c5a34-59a5-4e7d-9aca-fc8d09e60ec0",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node4"
+ },
+ {
+ "value-name": "name",
+ "value": "1-2-2"
+ },
+ {
+ "value-name": "rate",
+ "value": "OTU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ],
+ "layer-protocol-name": [
+ "ODU"
+ ],
+ "name": [
+ {
+ "value-name": "name",
+ "value": "Node4"
+ }
+ ]
+ }
+ ],
+ "name": [
+ {
+ "value-name": "name",
+ "value": "OTN"
+ }
+ ]
+ }
+ ]
+}
diff --git a/tapisimulator/pom.xml b/tapisimulator/pom.xml
new file mode 100644
index 0000000..a8825a0
--- /dev/null
+++ b/tapisimulator/pom.xml
@@ -0,0 +1,315 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- ============LICENSE_START=======================================================
+ tapi-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>tapisimulator</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+
+ <name>tapisimulator</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.tapisimulator.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.tapisimulator.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.tapisimulator.Application</mainClass>
+ </manifest>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <environmentVariables>
+ <Controller>TAPI1</Controller>
+ </environmentVariables>
+ </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/tapisimulator/src/main/java/org/onap/tapisimulator/Application.java b/tapisimulator/src/main/java/org/onap/tapisimulator/Application.java
new file mode 100644
index 0000000..fede151
--- /dev/null
+++ b/tapisimulator/src/main/java/org/onap/tapisimulator/Application.java
@@ -0,0 +1,33 @@
+/*
+ * ============LICENSE_START=======================================================
+ * TAPI-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.tapisimulator;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git a/tapisimulator/src/main/java/org/onap/tapisimulator/controller/TapiController.java b/tapisimulator/src/main/java/org/onap/tapisimulator/controller/TapiController.java
new file mode 100644
index 0000000..4b246ef
--- /dev/null
+++ b/tapisimulator/src/main/java/org/onap/tapisimulator/controller/TapiController.java
@@ -0,0 +1,73 @@
+/*
+ * ============LICENSE_START=======================================================
+ * TAPI-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.tapisimulator.controller;
+
+import org.onap.tapisimulator.model.SipList;
+import org.onap.tapisimulator.service.TapiService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class TapiController {
+
+ @Autowired
+ TapiService tapiService;
+
+ @GetMapping("/cxf/tapi/v2/connectivities/service-interface-points/{connection-point}")
+ public SipList getTapiServiceInterfacePoint(@PathVariable("connection-point") String cep) {
+
+ return tapiService.getServiceInterfacePoints(cep);
+
+ }
+
+ @PostMapping("/cxf/tapi/v2/connectivities/create-service/{service-name}")
+ public String createTapiService(@PathVariable("service-name") String name, @RequestBody String requestbody) {
+ tapiService.processService(requestbody);
+ return "Service created Successfully";
+ }
+
+ @GetMapping("/cxf/tapi/v2/connectivities/get-service/{service-name}")
+ public String getTapiService(@PathVariable("service-name") String name) {
+
+ return tapiService.returnService(name);
+
+ }
+
+ @DeleteMapping("/cxf/tapi/v2/connectivities/delete-service/{service-name}")
+ public String deleteTapiService(@PathVariable("service-name") String name) {
+ tapiService.processDeleteService(name);
+ return "Service deleted successfully";
+
+ }
+
+ @GetMapping("/cxf/tapi/v2/connectivities/topology")
+ public String getTapiTopology() {
+
+ return tapiService.getTopology();
+
+ }
+
+}
diff --git a/tapisimulator/src/main/java/org/onap/tapisimulator/model/Name.java b/tapisimulator/src/main/java/org/onap/tapisimulator/model/Name.java
new file mode 100644
index 0000000..e5a6441
--- /dev/null
+++ b/tapisimulator/src/main/java/org/onap/tapisimulator/model/Name.java
@@ -0,0 +1,39 @@
+/*
+ * ============LICENSE_START=======================================================
+ * TAPI-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.tapisimulator.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Name {
+
+ @JsonProperty(value = "value-name")
+ private String valueName;
+
+ private String value;
+
+}
diff --git a/tapisimulator/src/main/java/org/onap/tapisimulator/model/Sip.java b/tapisimulator/src/main/java/org/onap/tapisimulator/model/Sip.java
new file mode 100644
index 0000000..fb39855
--- /dev/null
+++ b/tapisimulator/src/main/java/org/onap/tapisimulator/model/Sip.java
@@ -0,0 +1,49 @@
+/*
+ * ============LICENSE_START=======================================================
+ * TAPI-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.tapisimulator.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.List;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Sip {
+
+ @JsonProperty(value = "administrative-state")
+ private String administrativeState;
+
+ @JsonProperty(value = "lifecycle-state")
+ private String lifecycleState;
+
+ @JsonProperty(value = "layer-protocol-name")
+ private String layerProtocolName;
+
+ private List<Name> name;
+
+ private String uuid;
+
+}
diff --git a/tapisimulator/src/main/java/org/onap/tapisimulator/model/SipList.java b/tapisimulator/src/main/java/org/onap/tapisimulator/model/SipList.java
new file mode 100644
index 0000000..3a75be9
--- /dev/null
+++ b/tapisimulator/src/main/java/org/onap/tapisimulator/model/SipList.java
@@ -0,0 +1,36 @@
+/*
+ * ============LICENSE_START=======================================================
+ * TAPI-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.tapisimulator.model;
+
+import java.util.List;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SipList {
+
+ private List<Sip> sip;
+
+}
diff --git a/tapisimulator/src/main/java/org/onap/tapisimulator/service/TapiService.java b/tapisimulator/src/main/java/org/onap/tapisimulator/service/TapiService.java
new file mode 100644
index 0000000..49b5689
--- /dev/null
+++ b/tapisimulator/src/main/java/org/onap/tapisimulator/service/TapiService.java
@@ -0,0 +1,156 @@
+/*
+ * ============LICENSE_START=======================================================
+ * TAPI-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.tapisimulator.service;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+import javax.annotation.PostConstruct;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.onap.tapisimulator.model.Sip;
+import org.onap.tapisimulator.model.SipList;
+import org.onap.tapisimulator.utils.Utils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class TapiService {
+
+ private static Logger log = LoggerFactory.getLogger(TapiService.class);
+
+ private volatile Map<String, String> serviceMap = new HashMap<>();
+
+ @Autowired
+ ObjectMapper mapper;
+
+ @Autowired
+ Utils utils;
+
+ private SipList siplist = null;
+
+ private List<Sip> sip = null;
+
+ private String topology;
+
+ @PostConstruct
+ public void init() throws IOException {
+ String domainController = System.getenv("Controller");
+ String servicePoints = "";
+ if (domainController.equals("TAPI1")) {
+ servicePoints = utils.readFromFile("/opt/onap/tapisimulator/templates/tapi1-siplist.json");
+ topology = utils.readFromFile("/opt/onap/tapisimulator/templates/tapi1-topology.json");
+ siplist = mapper.readValue(servicePoints, SipList.class);
+ sip = siplist.getSip();
+ log.debug("Inside init method of TapiService class");
+ } else if (domainController.equals("TAPI2")) {
+ servicePoints = utils.readFromFile("/opt/onap/tapisimulator/templates/tapi2-siplist.json");
+ topology = utils.readFromFile("/opt/onap/tapisimulator/templates/tapi2-topology.json");
+ siplist = mapper.readValue(servicePoints, SipList.class);
+ sip = siplist.getSip();
+ log.debug("Inside init method of TapiService class");
+ }
+
+ }
+
+ public SipList getServiceInterfacePoints(String connectionPoint) {
+
+ List<Sip> curSip = sip.stream().filter(c -> c.getUuid().equals(connectionPoint)).collect(Collectors.toList());
+
+ SipList newSip = new SipList();
+ newSip.setSip(curSip);
+ return newSip;
+ }
+
+ public Map<String, String> getServiceMap() {
+ return serviceMap;
+ }
+
+ public void setServiceMap(String key, String value) {
+ serviceMap.put(key, value);
+ }
+
+ public void processService(String request) {
+ JSONObject json = new JSONObject(request);
+ JSONArray conectivityList = json.getJSONArray("create-connectivity-service-input-list");
+ JSONObject connec = conectivityList.getJSONObject(0);
+ JSONArray eplist = connec.getJSONArray("end-point");
+ JSONArray name = connec.getJSONArray("name");
+ String serviceName = name.getJSONObject(0).getString("value");
+
+ createSErviceMap(eplist, serviceName, name);
+
+ }
+
+ public String returnService(String name) {
+
+ return serviceMap.get(name);
+
+ }
+
+ public String processDeleteService(String name) {
+
+ return serviceMap.remove(name);
+
+ }
+
+ public String getTopology() {
+
+ return topology;
+
+ }
+
+ private void createSErviceMap(JSONArray eplist, String serviceName, JSONArray name) {
+ JSONObject serviceEntry = new JSONObject();
+ serviceEntry.put("end-point", eplist);
+ serviceEntry.put("topology-constraint", new JSONArray());
+ serviceEntry.put("routing-constraint", new JSONObject());
+ serviceEntry.put("connectivity-constraint", new JSONObject());
+ serviceEntry.put("uuid", UUID.randomUUID().toString());
+ serviceEntry.put("layer-protocol-name", "ODU");
+ serviceEntry.put("direction", "BIDIRECTIONAL");
+ serviceEntry.put("administrative-state", "UNLOCKED");
+ serviceEntry.put("operational-state", "ENABLED");
+ JSONArray connection = new JSONArray();
+ JSONObject connectionObject = new JSONObject();
+ connectionObject.put("connection-uuid", UUID.randomUUID().toString());
+ connection.put(0, connectionObject);
+ serviceEntry.put("connection", connection);
+ serviceEntry.put("name", name);
+
+ JSONObject service = new JSONObject();
+ JSONArray serviceList = new JSONArray();
+ serviceList.put(0, serviceEntry);
+ service.put("service", serviceList);
+
+ serviceMap.put(serviceName, service.toString());
+ }
+
+}
diff --git a/tapisimulator/src/main/java/org/onap/tapisimulator/utils/Utils.java b/tapisimulator/src/main/java/org/onap/tapisimulator/utils/Utils.java
new file mode 100644
index 0000000..8d2ac4d
--- /dev/null
+++ b/tapisimulator/src/main/java/org/onap/tapisimulator/utils/Utils.java
@@ -0,0 +1,64 @@
+/*
+ * ============LICENSE_START=======================================================
+ * TAPI-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.tapisimulator.utils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+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/tapisimulator/src/main/resources/application.properties b/tapisimulator/src/main/resources/application.properties
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tapisimulator/src/main/resources/application.properties
diff --git a/tapisimulator/src/main/resources/logback.xml b/tapisimulator/src/main/resources/logback.xml
new file mode 100644
index 0000000..10f7ccf
--- /dev/null
+++ b/tapisimulator/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>dcasim</defaultValue>
+ </discriminator>
+
+ <sift>
+ <appender name="file-${logFileName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>/var/log/onap/dcasimulator/${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/tapisimulator/src/test/java/org/onap/tapisimulator/Config.java b/tapisimulator/src/test/java/org/onap/tapisimulator/Config.java
new file mode 100644
index 0000000..3ea4d5e
--- /dev/null
+++ b/tapisimulator/src/test/java/org/onap/tapisimulator/Config.java
@@ -0,0 +1,44 @@
+/*
+ * ============LICENSE_START=======================================================
+ * TAPI-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.tapisimulator;
+
+import static org.mockito.Mockito.when;
+
+import org.mockito.Mockito;
+import org.onap.tapisimulator.utils.Utils;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class Config {
+
+ @Bean
+ public Utils utils() {
+ Utils utils = Mockito.mock(Utils.class);
+ String topology = TestUtils.readFileclasspath("tapi-topology.json");
+ String sipList = TestUtils.readFileclasspath("siplist.json");
+ when(utils.readFromFile("/opt/onap/tapisimulator/templates/tapi1-topology.json")).thenReturn(topology);
+ when(utils.readFromFile("/opt/onap/tapisimulator/templates/tapi1-siplist.json")).thenReturn(sipList);
+
+ return utils;
+ }
+
+}
diff --git a/tapisimulator/src/test/java/org/onap/tapisimulator/TestUtils.java b/tapisimulator/src/test/java/org/onap/tapisimulator/TestUtils.java
new file mode 100644
index 0000000..102d2b3
--- /dev/null
+++ b/tapisimulator/src/test/java/org/onap/tapisimulator/TestUtils.java
@@ -0,0 +1,47 @@
+/*
+ * ============LICENSE_START=======================================================
+ * TAPI-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.tapisimulator;
+
+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/tapisimulator/src/test/java/org/onap/tapisimulator/controller/TestTapiController.java b/tapisimulator/src/test/java/org/onap/tapisimulator/controller/TestTapiController.java
new file mode 100644
index 0000000..9b4c2f3
--- /dev/null
+++ b/tapisimulator/src/test/java/org/onap/tapisimulator/controller/TestTapiController.java
@@ -0,0 +1,103 @@
+/*
+ * ============LICENSE_START=======================================================
+ * TAPI-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.tapisimulator.controller;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoAnnotations;
+import org.onap.tapisimulator.Application;
+import org.onap.tapisimulator.Config;
+import org.onap.tapisimulator.TestUtils;
+import org.onap.tapisimulator.service.TapiService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+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 TestTapiController {
+ @LocalServerPort
+ private int port;
+
+ @Autowired
+ TapiService tapiService;
+
+ @Autowired
+ TestRestTemplate restTemplate;
+
+ @Before
+ public void beforeEach() {
+
+ MockitoAnnotations.initMocks(this);
+ }
+
+ @Test
+ public void testTopology() throws Exception {
+ String topology = TestUtils.readFileclasspath("tapi-topology.json");
+ String uri = "http://localhost:" + port + "/cxf/tapi/v2/connectivities/topology";
+ ResponseEntity<String> response = this.restTemplate.getForEntity(uri, String.class);
+
+ HttpStatus status = response.getStatusCode();
+ assertEquals(status, HttpStatus.OK);
+ String content = response.getBody();
+ assertEquals(content, topology);
+ }
+
+ @Test
+ public void testServiceCreateTapi() throws Exception {
+ String serviceCreaterequest = TestUtils.readFileclasspath("service-create-tapi.json");
+ String expectedResponse = "Service created Successfully";
+ String name = "test";
+ String uri = "http://localhost:" + port + "/cxf/tapi/v2/connectivities/create-service/" + name;
+ ResponseEntity<String> response = this.restTemplate.postForEntity(uri, serviceCreaterequest, String.class);
+ HttpStatus status = response.getStatusCode();
+ assertEquals(HttpStatus.OK, status);
+ String content = response.getBody();
+ assertEquals(content, expectedResponse);
+ }
+
+ @Test
+ public void deleteTapiServiceTest() {
+ String expectedResponse = "Service deleted successfully";
+ String name = "test";
+ String uri = "http://localhost:" + port + "/cxf/tapi/v2/connectivities/delete-service/" + name;
+ HttpEntity<String> entity = new HttpEntity<>("");
+ ResponseEntity<String> response = this.restTemplate.exchange(uri, HttpMethod.DELETE, entity, String.class);
+ HttpStatus status = response.getStatusCode();
+ assertEquals(HttpStatus.OK, status);
+ String content = response.getBody();
+ assertEquals(content, expectedResponse);
+
+ }
+
+}
diff --git a/tapisimulator/src/test/resources/service-create-tapi.json b/tapisimulator/src/test/resources/service-create-tapi.json
new file mode 100644
index 0000000..ec03cef
--- /dev/null
+++ b/tapisimulator/src/test/resources/service-create-tapi.json
@@ -0,0 +1,54 @@
+{
+ "create-connectivity-service-input-list": [
+ {
+ "end-point": [
+ {
+ "local-id": "/OTN/Node2-456/ODU2:1-1-1",
+ "layer-protocol-name": "ODU",
+ "connection-end-point": [
+ {
+ "topology-uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f",
+ "node-edge-point-uuid": "456789",
+ "node-uuid": "Node2-456",
+ "connection-end-point-uuid": "efghi"
+ }
+ ],
+ "service-interface-point": {
+ "service-interface-point-uuid": "efghi"
+ },
+ "protection-role": "WORK"
+ },
+ {
+ "local-id": "/OTN/Node1-123/ODU2:1-1-1",
+ "layer-protocol-name": "ODU",
+ "connection-end-point": [
+ {
+ "topology-uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f",
+ "node-edge-point-uuid": "123456",
+ "node-uuid": "Node1-123",
+ "connection-end-point-uuid": "abcde"
+ }
+ ],
+ "service-interface-point": {
+ "service-interface-point-uuid": "abcde"
+ },
+ "protection-role": "WORK"
+ }
+ ],
+ "layer-protocol-name": "ODU",
+ "connectivity-constraint": {
+ "service-type": "POINT_TO_POINT_CONNECTIVITY"
+ },
+ "routing-constraint": {
+ "route-objective-function": "MIN_WORK_ROUTE_COST"
+ },
+ "topology-constraint": [],
+ "name": [
+ {
+ "value-name": "service-name",
+ "value": "test"
+ }
+ ]
+ }
+ ]
+}
diff --git a/tapisimulator/src/test/resources/siplist.json b/tapisimulator/src/test/resources/siplist.json
new file mode 100644
index 0000000..dc5d673
--- /dev/null
+++ b/tapisimulator/src/test/resources/siplist.json
@@ -0,0 +1,52 @@
+{
+ "sip": [
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "abcde",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node1"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-1"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ },
+ {
+ "layer-protocol-name": "ODU",
+ "uuid": "efghi",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node2"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-1"
+ },
+ {
+ "value-name": "rate",
+ "value": "ODU2"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+}
diff --git a/tapisimulator/src/test/resources/tapi-topology.json b/tapisimulator/src/test/resources/tapi-topology.json
new file mode 100644
index 0000000..f4278dc
--- /dev/null
+++ b/tapisimulator/src/test/resources/tapi-topology.json
@@ -0,0 +1,135 @@
+{
+ "topology": [
+ {
+ "uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f",
+ "link": [],
+ "layer-protocol-name": [],
+ "node": [
+ {
+ "encap-topology": {
+ "topology-uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f"
+ },
+ "uuid": "Node1-123",
+ "node-edge-point": [
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "abcde",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-1"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "123456",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node1"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-1"
+ },
+ {
+ "value-name": "rate",
+ "value": "10GE"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ],
+ "layer-protocol-name": [
+ "ODU"
+ ],
+ "name": [
+ {
+ "value-name": "name",
+ "value": "Node1"
+ }
+ ]
+ },
+ {
+ "encap-topology": {
+ "topology-uuid": "754a91dc-dcd1-3530-8e95-a4880c298a1f"
+ },
+ "uuid": "Node2-456",
+ "node-edge-point": [
+ {
+ "tapi-connectivity:cep-list": {
+ "connection-end-point": [
+ {
+ "uuid": "efghi",
+ "name": [
+ {
+ "value-name": "name",
+ "value": "1-1-1"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ]
+ },
+ "link-port-direction": "BIDIRECTIONAL",
+ "layer-protocol-name": "ODU",
+ "uuid": "456789",
+ "administrative-state": "UNLOCKED",
+ "lifecycle-state": "INSTALLED",
+ "name": [
+ {
+ "value-name": "tid",
+ "value": "Node2"
+ },
+ {
+ "value-name": "name",
+ "value": "1-1-1"
+ },
+ {
+ "value-name": "rate",
+ "value": "10GE"
+ },
+ {
+ "value-name": "direction",
+ "value": "BI"
+ }
+ ]
+ }
+ ],
+ "layer-protocol-name": [
+ "ODU"
+ ],
+ "name": [
+ {
+ "value-name": "name",
+ "value": "Node2"
+ }
+ ]
+ }
+ ],
+ "name": [
+ {
+ "value-name": "name",
+ "value": "OTN"
+ }
+ ]
+ }
+ ]
+}