diff --git a/test/mocks/pnfsimulator/config/config.json b/test/mocks/pnfsimulator/config/config.json
index b7eb1cc..ca28542 100644
--- a/test/mocks/pnfsimulator/config/config.json
+++ b/test/mocks/pnfsimulator/config/config.json
@@ -1,6 +1,6 @@
 {
   "simulatorParams": {
-    "vesServerUrl": "http://10.154.187.70:8080/eventListener/v5",
+    "vesServerUrl": "http://VES-HOST:VES-PORT/eventListener/v5",
     "testDuration": "10",
     "messageInterval": "1"
   },
diff --git a/test/mocks/pnfsimulator/docker-compose.dev.yml b/test/mocks/pnfsimulator/docker-compose.dev.yml
index c389eee..5112df0 100644
--- a/test/mocks/pnfsimulator/docker-compose.dev.yml
+++ b/test/mocks/pnfsimulator/docker-compose.dev.yml
@@ -3,11 +3,12 @@
 services:
   pnf-simulator:
     container_name: pnf-simulator
-    image: pnf-simulator:latest
+    image: onap/pnf-simulator:latest
     ports:
       - "5000:5000"
     volumes:
       - ./logs:/var/log
+      - ./json_schema:/json_schema
     env_file:
       - ./config/netconf.env
     depends_on:
@@ -21,4 +22,4 @@
     env_file:
       - ./config/netconf.env
     volumes:
-      - ./netconf:/netconf
+      - ./netconf:/netconf
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/docker-compose.yml b/test/mocks/pnfsimulator/docker-compose.yml
index af9494a..cfc0863 100644
--- a/test/mocks/pnfsimulator/docker-compose.yml
+++ b/test/mocks/pnfsimulator/docker-compose.yml
@@ -8,6 +8,7 @@
       - "5000:5000"
     volumes:
       - ./logs:/var/log
+      - ./json_schema:/json_schema
     env_file:
       - ./config/netconf.env
     depends_on:
@@ -21,4 +22,4 @@
     env_file:
       - ./config/netconf.env
     volumes:
-      - ./netconf:/netconf
+      - ./netconf:/netconf
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/json_schema/input_validator.json b/test/mocks/pnfsimulator/json_schema/input_validator.json
new file mode 100644
index 0000000..df4efb5
--- /dev/null
+++ b/test/mocks/pnfsimulator/json_schema/input_validator.json
@@ -0,0 +1,193 @@
+{
+  "$id": "http://example.com/example.json",
+  "type": "object",
+  "definitions": {},
+  "$schema": "http://json-schema.org/draft-07/schema#",
+  "properties": {
+    "simulatorParams": {
+      "$id": "/properties/simulatorParams",
+      "type": "object",
+      "properties": {
+        "vesServerUrl": {
+          "$id": "/properties/simulatorParams/properties/vesServerUrl",
+          "type": "string",
+          "title": "The Vesserverurl Schema ",
+          "default": "",
+          "examples": [
+            "http://10.154.187.70:8080/eventListener/v5"
+          ]
+        },
+        "testDuration": {
+          "$id": "/properties/simulatorParams/properties/testDuration",
+          "type": "string",
+          "title": "The Testduration Schema ",
+          "default": "",
+          "examples": [
+            "10"
+          ]
+        },
+        "messageInterval": {
+          "$id": "/properties/simulatorParams/properties/messageInterval",
+          "type": "string",
+          "title": "The Messageinterval Schema ",
+          "default": "",
+          "examples": [
+            "1"
+          ]
+        }
+      }
+    },
+    "messageParams": {
+      "$id": "/properties/messageParams",
+      "type": "object",
+      "properties": {
+        "pnfSerialNumber": {
+          "$id": "/properties/messageParams/properties/pnfSerialNumber",
+          "type": "string",
+          "title": "The Pnfserialnumber Schema ",
+          "default": "",
+          "examples": [
+            "val1"
+          ]
+        },
+        "pnfVendorName": {
+          "$id": "/properties/messageParams/properties/pnfVendorName",
+          "type": "string",
+          "title": "The Pnfvendorname Schema ",
+          "default": "",
+          "examples": [
+            "val2"
+          ]
+        },
+        "pnfOamIpv4Address": {
+          "$id": "/properties/messageParams/properties/pnfOamIpv4Address",
+          "type": "string",
+          "title": "The Pnfoamipv4address Schema ",
+          "default": "",
+          "examples": [
+            "val3"
+          ]
+        },
+        "pnfOamIpv6Address": {
+          "$id": "/properties/messageParams/properties/pnfOamIpv6Address",
+          "type": "string",
+          "title": "The Pnfoamipv6address Schema ",
+          "default": "",
+          "examples": [
+            "val4"
+          ]
+        },
+        "pnfFamily": {
+          "$id": "/properties/messageParams/properties/pnfFamily",
+          "type": "string",
+          "title": "The Pnffamily Schema ",
+          "default": "",
+          "examples": [
+            "val5"
+          ]
+        },
+        "pnfModelNumber": {
+          "$id": "/properties/messageParams/properties/pnfModelNumber",
+          "type": "string",
+          "title": "The Pnfmodelnumber Schema ",
+          "default": "",
+          "examples": [
+            "val6"
+          ]
+        },
+        "pnfSoftwareVersion": {
+          "$id": "/properties/messageParams/properties/pnfSoftwareVersion",
+          "type": "string",
+          "title": "The Pnfsoftwareversion Schema ",
+          "default": "",
+          "examples": [
+            "val7"
+          ]
+        },
+        "pnfType": {
+          "$id": "/properties/messageParams/properties/pnfType",
+          "type": "string",
+          "title": "The Pnftype Schema ",
+          "default": "",
+          "examples": [
+            "val8"
+          ]
+        },
+        "eventName": {
+          "$id": "/properties/messageParams/properties/eventName",
+          "type": "string",
+          "title": "The Eventname Schema ",
+          "default": "",
+          "examples": [
+            "val9"
+          ]
+        },
+        "nfNamingCode": {
+          "$id": "/properties/messageParams/properties/nfNamingCode",
+          "type": "string",
+          "title": "The Nfnamingcode Schema ",
+          "default": "",
+          "examples": [
+            "val10"
+          ]
+        },
+        "nfcNamingCode": {
+          "$id": "/properties/messageParams/properties/nfcNamingCode",
+          "type": "string",
+          "title": "The Nfcnamingcode Schema ",
+          "default": "",
+          "examples": [
+            "val11"
+          ]
+        },
+        "sourceName": {
+          "$id": "/properties/messageParams/properties/sourceName",
+          "type": "string",
+          "title": "The Sourcename Schema ",
+          "default": "",
+          "examples": [
+            "val12"
+          ]
+        },
+        "sourceId": {
+          "$id": "/properties/messageParams/properties/sourceId",
+          "type": "string",
+          "title": "The Sourceid Schema ",
+          "default": "",
+          "examples": [
+            "val13"
+          ]
+        },
+        "reportingEntityName": {
+          "$id": "/properties/messageParams/properties/reportingEntityName",
+          "type": "string",
+          "title": "The Reportingentityname Schema ",
+          "default": "",
+          "examples": [
+            "val14"
+          ]
+        }
+      },
+      "required": [
+        "pnfSerialNumber",
+        "pnfVendorName"
+      ],
+      "anyOf": [
+        {
+          "required": [
+            "pnfOamIpv4Address"
+          ]
+        },
+        {
+          "required": [
+            "pnfOamIpv6Address"
+          ]
+        }
+      ]
+    }
+  },
+  "required": [
+    "simulatorParams",
+    "messageParams"
+  ]
+}
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/json_schema/output_validator.json b/test/mocks/pnfsimulator/json_schema/output_validator.json
new file mode 100644
index 0000000..569bbce
--- /dev/null
+++ b/test/mocks/pnfsimulator/json_schema/output_validator.json
@@ -0,0 +1,286 @@
+{
+  "$id": "http://example.com/example.json",
+  "type": "object",
+  "definitions": {},
+  "$schema": "http://json-schema.org/draft-07/schema#",
+  "properties": {
+    "event": {
+      "$id": "/properties/event",
+      "type": "object",
+      "properties": {
+        "commonEventHeader": {
+          "$id": "/properties/event/properties/commonEventHeader",
+          "type": "object",
+          "properties": {
+            "sourceId": {
+              "$id": "/properties/event/properties/commonEventHeader/properties/sourceId",
+              "type": "string",
+              "title": "The Sourceid Schema ",
+              "default": "",
+              "examples": [
+                "<<SerialNumber>>"
+              ]
+            },
+            "startEpochMicrosec": {
+              "$id": "/properties/event/properties/commonEventHeader/properties/startEpochMicrosec",
+              "type": "integer",
+              "title": "The Startepochmicrosec Schema ",
+              "default": 0,
+              "examples": [
+                1519837825682
+              ]
+            },
+            "eventId": {
+              "$id": "/properties/event/properties/commonEventHeader/properties/eventId",
+              "type": "string",
+              "title": "The Eventid Schema ",
+              "default": "",
+              "examples": [
+                "<<SerialNumber>>-reg"
+              ]
+            },
+            "nfcNamingCode": {
+              "$id": "/properties/event/properties/commonEventHeader/properties/nfcNamingCode",
+              "type": "string",
+              "title": "The Nfcnamingcode Schema ",
+              "default": "",
+              "examples": [
+                "5DU"
+              ]
+            },
+            "internalHeaderFields": {
+              "$id": "/properties/event/properties/commonEventHeader/properties/internalHeaderFields",
+              "type": "object",
+              "properties": {
+                "collectorTimeStamp": {
+                  "$id": "/properties/event/properties/commonEventHeader/properties/internalHeaderFields/properties/collectorTimeStamp",
+                  "type": "string",
+                  "title": "The Collectortimestamp Schema ",
+                  "default": "",
+                  "examples": [
+                    "Fri, 04 27 2018 09:01:10 GMT"
+                  ]
+                }
+              }
+            },
+            "eventType": {
+              "$id": "/properties/event/properties/commonEventHeader/properties/eventType",
+              "type": "string",
+              "title": "The Eventtype Schema ",
+              "default": "",
+              "examples": [
+                "pnfRegistration"
+              ]
+            },
+            "priority": {
+              "$id": "/properties/event/properties/commonEventHeader/properties/priority",
+              "type": "string",
+              "title": "The Priority Schema ",
+              "default": "",
+              "examples": [
+                "Normal"
+              ]
+            },
+            "version": {
+              "$id": "/properties/event/properties/commonEventHeader/properties/version",
+              "type": "integer",
+              "title": "The Version Schema ",
+              "default": 0,
+              "examples": [
+                3
+              ]
+            },
+            "reportingEntityName": {
+              "$id": "/properties/event/properties/commonEventHeader/properties/reportingEntityName",
+              "type": "string",
+              "title": "The Reportingentityname Schema ",
+              "default": "",
+              "examples": [
+                "5GRAN_DU"
+              ]
+            },
+            "sequence": {
+              "$id": "/properties/event/properties/commonEventHeader/properties/sequence",
+              "type": "integer",
+              "title": "The Sequence Schema ",
+              "default": 0,
+              "examples": [
+                0
+              ]
+            },
+            "domain": {
+              "$id": "/properties/event/properties/commonEventHeader/properties/domain",
+              "type": "string",
+              "title": "The Domain Schema ",
+              "default": "",
+              "examples": [
+                "other"
+              ]
+            },
+            "lastEpochMicrosec": {
+              "$id": "/properties/event/properties/commonEventHeader/properties/lastEpochMicrosec",
+              "type": "integer",
+              "title": "The Lastepochmicrosec Schema ",
+              "default": 0,
+              "examples": [
+                1519837825682
+              ]
+            },
+            "eventName": {
+              "$id": "/properties/event/properties/commonEventHeader/properties/eventName",
+              "type": "string",
+              "title": "The Eventname Schema ",
+              "default": "",
+              "examples": [
+                "pnfRegistration_5GDU"
+              ]
+            },
+            "sourceName": {
+              "$id": "/properties/event/properties/commonEventHeader/properties/sourceName",
+              "type": "string",
+              "title": "The Sourcename Schema ",
+              "default": "",
+              "examples": [
+                "5GRAN_DU"
+              ]
+            },
+            "nfNamingCode": {
+              "$id": "/properties/event/properties/commonEventHeader/properties/nfNamingCode",
+              "type": "string",
+              "title": "The Nfnamingcode Schema ",
+              "default": "",
+              "examples": [
+                "5GRAN"
+              ]
+            }
+          }
+        },
+        "otherFields": {
+          "$id": "/properties/event/properties/otherFields",
+          "type": "object",
+          "properties": {
+            "pnfLastServiceDate": {
+              "$id": "/properties/event/properties/otherFields/properties/pnfLastServiceDate",
+              "type": "integer",
+              "title": "The Pnflastservicedate Schema ",
+              "default": 0,
+              "examples": [
+                1517206400
+              ]
+            },
+            "pnfOamIpv6Address": {
+              "$id": "/properties/event/properties/otherFields/properties/pnfOamIpv6Address",
+              "type": "string",
+              "title": "The Pnfoamipv6address Schema ",
+              "default": "",
+              "examples": [
+                "<<NONE>>"
+              ]
+            },
+            "pnfVendorName": {
+              "$id": "/properties/event/properties/otherFields/properties/pnfVendorName",
+              "type": "string",
+              "title": "The Pnfvendorname Schema ",
+              "default": "",
+              "examples": [
+                "Nokia"
+              ]
+            },
+            "pnfModelNumber": {
+              "$id": "/properties/event/properties/otherFields/properties/pnfModelNumber",
+              "type": "string",
+              "title": "The Pnfmodelnumber Schema ",
+              "default": "",
+              "examples": [
+                "AJ02"
+              ]
+            },
+            "pnfFamily": {
+              "$id": "/properties/event/properties/otherFields/properties/pnfFamily",
+              "type": "string",
+              "title": "The Pnffamily Schema ",
+              "default": "",
+              "examples": [
+                "BBU"
+              ]
+            },
+            "pnfType": {
+              "$id": "/properties/event/properties/otherFields/properties/pnfType",
+              "type": "string",
+              "title": "The Pnftype Schema ",
+              "default": "",
+              "examples": [
+                "AirScale"
+              ]
+            },
+            "otherFieldsVersion": {
+              "$id": "/properties/event/properties/otherFields/properties/otherFieldsVersion",
+              "type": "integer",
+              "title": "The Otherfieldsversion Schema ",
+              "default": 0,
+              "examples": [
+                1
+              ]
+            },
+            "pnfOamIpv4Address": {
+              "$id": "/properties/event/properties/otherFields/properties/pnfOamIpv4Address",
+              "type": "string",
+              "title": "The Pnfoamipv4address Schema ",
+              "default": "",
+              "examples": [
+                "10.16.123.234"
+              ]
+            },
+            "pnfSoftwareVersion": {
+              "$id": "/properties/event/properties/otherFields/properties/pnfSoftwareVersion",
+              "type": "string",
+              "title": "The Pnfsoftwareversion Schema ",
+              "default": "",
+              "examples": [
+                "v4.5.0.1"
+              ]
+            },
+            "pnfSerialNumber": {
+              "$id": "/properties/event/properties/otherFields/properties/pnfSerialNumber",
+              "type": "string",
+              "title": "The Pnfserialnumber Schema ",
+              "default": "",
+              "examples": [
+                "QTFCOC540002E"
+              ]
+            },
+            "pnfManufactureDate": {
+              "$id": "/properties/event/properties/otherFields/properties/pnfManufactureDate",
+              "type": "integer",
+              "title": "The Pnfmanufacturedate Schema ",
+              "default": 0,
+              "examples": [
+                1516406400
+              ]
+            }
+          },
+          "required": [
+            "pnfSerialNumber",
+            "pnfVendorName"
+          ],
+          "anyOf": [
+            {
+              "required": [
+                "pnfOamIpv4Address"
+              ]
+            },
+            {
+              "required": [
+                "pnfOamIpv6Address"
+              ]
+            }
+          ]
+        }
+      },
+      "required": [
+        "commonEventHeader",
+        "otherFields"
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/netconf/pnf-simulator.data.xml b/test/mocks/pnfsimulator/netconf/pnf-simulator.data.xml
index 83f80c4..9d648bb 100644
--- a/test/mocks/pnfsimulator/netconf/pnf-simulator.data.xml
+++ b/test/mocks/pnfsimulator/netconf/pnf-simulator.data.xml
@@ -1,4 +1,4 @@
 <config xmlns="http://nokia.com/pnf-simulator">
-	<testDuration>10</testDuration>
-	<messageInterval>1</messageInterval>
+  <itemValue1>42</itemValue1>
+  <itemValue2>35</itemValue2>
 </config>
diff --git a/test/mocks/pnfsimulator/netconf/pnf-simulator.yang b/test/mocks/pnfsimulator/netconf/pnf-simulator.yang
index dda6554..d7fc2f2 100644
--- a/test/mocks/pnfsimulator/netconf/pnf-simulator.yang
+++ b/test/mocks/pnfsimulator/netconf/pnf-simulator.yang
@@ -3,7 +3,7 @@
   prefix config;
   container config {
     config true;
-    leaf testDuration {type uint32;}
-    leaf messageInterval {type uint32;}
+    leaf itemValue1 {type uint32;}
+    leaf itemValue2 {type uint32;}
   }
 }
diff --git a/test/mocks/pnfsimulator/pom.xml b/test/mocks/pnfsimulator/pom.xml
index 0af1f6f..bd203bb 100644
--- a/test/mocks/pnfsimulator/pom.xml
+++ b/test/mocks/pnfsimulator/pom.xml
@@ -1,197 +1,377 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
+<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>
 
-    <groupId>org.onap.pnfsimulator</groupId>
-    <artifactId>pnf-simulator</artifactId>
-    <version>2.0.0-SNAPSHOT</version>
-    <name>pnf-simulator</name>
+  <groupId>org.onap.pnfsimulator</groupId>
+  <artifactId>pnf-simulator</artifactId>
+  <version>2.0.0-SNAPSHOT</version>
 
-    <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>
-        <simulator.main.class>org.onap.pnfsimulator.Main</simulator.main.class>
-        <docker.image.tag>latest</docker.image.tag>
-        <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>
-    </properties>
+  <name>pnf-simulator</name>
 
-    <dependencies>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter</artifactId>
-            <version>2.0.2.RELEASE</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter-logging</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-            <version>2.0.2.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-log4j2</artifactId>
-            <version>2.0.2.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-api</artifactId>
-            <version>2.11.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-core</artifactId>
-            <version>2.11.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-slf4j-impl</artifactId>
-            <version>2.11.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-jul</artifactId>
-            <version>2.11.0</version>
-            <scope>runtime</scope>
-        </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>org.apache.httpcomponents</groupId>
-            <artifactId>httpclient</artifactId>
-            <version>4.5.5</version>
-        </dependency>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-            <version>21.0</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-cli</groupId>
-            <artifactId>commons-cli</artifactId>
-            <version>1.4</version>
-        </dependency>
-        <dependency>
-            <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter-engine</artifactId>
-            <version>5.1.1</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.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-            <version>3.7</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>jnc</artifactId>
-            <version>1.0</version>
-        </dependency>
-    </dependencies>
+  <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>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>${maven.compiler.source}</source>
-                    <target>${maven.compiler.target}</target>
-                    <showWarnings>true</showWarnings>
-                    <showDeprecation>true</showDeprecation>
-                </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.19</version>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.junit.platform</groupId>
-                        <artifactId>junit-platform-surefire-provider</artifactId>
-                        <version>1.1.1</version>
-                    </dependency>
-                </dependencies>
-                <configuration>
-                    <detail>true</detail>
-                    <printSummary>true</printSummary>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <configuration>
-                    <outputDirectory>${dependency.directory.location}</outputDirectory>
-                    <includeScope>runtime</includeScope>
-                    <silent>true</silent>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>copy-external-dependencies</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>docker-maven-plugin</artifactId>
-                <version>1.0.0</version>
-                <configuration>
-                    <imageName>${onap.nexus.dockerregistry.daily}/onap/${project.artifactId}</imageName>
-                    <imageTags>latest</imageTags>
-                    <imageTags>${project.version}-latest</imageTags>
-                    <serverId>${onap.nexus.dockerregistry.daily}</serverId>
-                    <baseImage>openjdk:8-jdk-alpine</baseImage>
-                    <cmd>java -cp  ${dependency.directory.name}/*:${project.build.finalName}.jar ${simulator.main.class}</cmd>
-                    <resources>
-                        <resource>
-                            <targetPath>${dependency.directory.name}</targetPath>
-                            <directory>${dependency.directory.location}</directory>
-                        </resource>
-                        <resource>
-                            <targetPath>/</targetPath>
-                            <directory>${project.build.directory}</directory>
-                            <include>${project.build.finalName}.jar</include>
-                        </resource>
-                    </resources>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>build-image</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>build</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
+    <simulator.main.class>org.onap.pnfsimulator.Main</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>
+    <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>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter</artifactId>
+      <version>2.0.2.RELEASE</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.springframework.boot</groupId>
+          <artifactId>spring-boot-starter-logging</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-web</artifactId>
+      <version>2.0.2.RELEASE</version>
+    </dependency>
+    <dependency>
+      <groupId>ch.qos.logback</groupId>
+      <artifactId>logback-classic</artifactId>
+      <version>1.2.3</version>
+    </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>org.everit.json</groupId>
+      <artifactId>org.everit.json.schema</artifactId>
+      <version>1.3.0</version>
+    </dependency>
+    <dependency>
+      <groupId>com.github.fge</groupId>
+      <artifactId>json-schema-validator</artifactId>
+      <version>2.2.6</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>
+      <version>4.5.5</version>
+    </dependency>
+    <dependency>
+      <groupId>com.google.guava</groupId>
+      <artifactId>guava</artifactId>
+      <version>21.0</version>
+    </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.onosproject</groupId>
+      <artifactId>jnc</artifactId>
+      <version>1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.onosproject</groupId>
+      <artifactId>jnc</artifactId>
+      <version>1.0</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+      <version>${junit.jupiter.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-engine</artifactId>
+      <version>5.1.1</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.junit.vintage</groupId>
+      <artifactId>junit-vintage-engine</artifactId>
+      <version>${junit.vintage.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.apache.sshd</groupId>
+      <artifactId>sshd-core</artifactId>
+      <version>0.9.0</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <version>2.18.3</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>2.0.1.RELEASE</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>${maven.compiler.source}</source>
+          <target>${maven.compiler.target}</target>
+          <showWarnings>true</showWarnings>
+          <showDeprecation>true</showDeprecation>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>
+            <manifestEntries>
+              <Main-Class>${simulator.main.class}</Main-Class>
+              <Build-Time>${maven.build.timestamp}</Build-Time>
+            </manifestEntries>
+          </archive>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>pl.project13.maven</groupId>
+        <artifactId>git-commit-id-plugin</artifactId>
+        <version>2.2.4</version>
+        <executions>
+          <execution>
+            <id>get-commit-info</id>
+            <goals>
+              <goal>revision</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
+          <generateGitPropertiesFile>true</generateGitPropertiesFile>
+          <includeOnlyProperties>git.commit.id.abbrev</includeOnlyProperties>
+        </configuration>
+      </plugin>
+      <plugin>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <version>2.19</version>
+        <dependencies>
+          <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-surefire-provider</artifactId>
+            <version>1.1.1</version>
+          </dependency>
+        </dependencies>
+        <configuration>
+          <detail>true</detail>
+          <printSummary>true</printSummary>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <configuration>
+          <outputDirectory>${dependency.directory.location}</outputDirectory>
+          <includeScope>runtime</includeScope>
+          <silent>true</silent>
+        </configuration>
+        <executions>
+          <execution>
+            <id>copy-external-dependencies</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy-dependencies</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>com.spotify</groupId>
+        <artifactId>docker-maven-plugin</artifactId>
+        <version>1.0.0</version>
+        <configuration>
+          <serverId>${onap.nexus.dockerregistry.daily}</serverId>
+          <imageName>${docker.image.name}</imageName>
+          <imageTags>
+            <tag>latest</tag>
+          </imageTags>
+          <baseImage>openjdk:8-jre-alpine</baseImage>
+          <cmd>java -cp ${dependency.directory.name}/*:${project.build.finalName}.jar ${simulator.main.class}</cmd>
+          <resources>
+            <resource>
+              <targetPath>${dependency.directory.name}</targetPath>
+              <directory>${dependency.directory.location}</directory>
+            </resource>
+            <resource>
+              <targetPath>/</targetPath>
+              <directory>${project.build.directory}</directory>
+              <include>${project.build.finalName}.jar</include>
+            </resource>
+          </resources>
+        </configuration>
+        <executions>
+          <execution>
+            <id>build-image</id>
+            <phase>package</phase>
+            <goals>
+              <goal>build</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>tag-and-push-image-latest</id>
+            <phase>deploy</phase>
+            <goals>
+              <goal>tag</goal>
+            </goals>
+            <configuration>
+              <image>${docker.image.name}:latest</image>
+              <newName>${onap.nexus.dockerregistry.daily}/${docker.image.name}:latest</newName>
+              <pushImage>true</pushImage>
+            </configuration>
+          </execution>
+          <execution>
+            <id>tag-and-push-image-with-version</id>
+            <phase>deploy</phase>
+            <goals>
+              <goal>tag</goal>
+            </goals>
+            <configuration>
+              <image>${docker.image.name}:latest</image>
+              <newName>${onap.nexus.dockerregistry.daily}/${docker.image.name}:${project.version}</newName>
+              <pushImage>true</pushImage>
+            </configuration>
+          </execution>
+          <execution>
+            <id>tag-and-push-image-with-version-and-date</id>
+            <phase>deploy</phase>
+            <goals>
+              <goal>tag</goal>
+            </goals>
+            <configuration>
+              <image>${docker.image.name}:latest</image>
+              <newName>
+                ${onap.nexus.dockerregistry.daily}/${docker.image.name}:${project.version}-${maven.build.timestamp}
+              </newName>
+              <pushImage>true</pushImage>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.jacoco</groupId>
+        <artifactId>jacoco-maven-plugin</artifactId>
+        <configuration>
+          <excludes>
+            <exclude>org/onap/pnfsimulator/Main.class</exclude>
+          </excludes>
+        </configuration>
+        <executions>
+          <execution>
+            <id>default-prepare-agent</id>
+            <goals>
+              <goal>prepare-agent</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>report</id>
+            <phase>prepare-package</phase>
+            <goals>
+              <goal>report</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>check</id>
+            <goals>
+              <goal>check</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <rule>
+                  <element>CLASS</element>
+                  <limits>
+                    <limit>
+                      <value>COVEREDRATIO</value>
+                      <minimum>0.70</minimum>
+                    </limit>
+                    <limit>
+                      <counter>BRANCH</counter>
+                      <value>COVEREDRATIO</value>
+                      <minimum>0.75</minimum>
+                    </limit>
+                  </limits>
+                </rule>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/simulator.sh b/test/mocks/pnfsimulator/simulator.sh
index cf16e24..a1d7c0f 100755
--- a/test/mocks/pnfsimulator/simulator.sh
+++ b/test/mocks/pnfsimulator/simulator.sh
@@ -89,14 +89,14 @@
 function run_simulator(){
 cat << EndOfMessage
 Simulator response:
-$(curl -s -X POST -H "Content-Type: application/json" -d @config/config.json $SIMULATOR_START_URL | json_pp)
+$(curl -s -X POST -H "Content-Type: application/json" -H "X-ONAP-RequestID: 123" -H "X-InvocationID: 456" -d @config/config.json $SIMULATOR_START_URL)
 EndOfMessage
 }
 
 function stop_simulator(){
 cat << EndOfMessage
 Simulator response:
-$(curl -s -X POST $SIMULATOR_STOP_URL | json_pp)
+$(curl -s -X POST $SIMULATOR_STOP_URL)
 EndOfMessage
 }
 
@@ -114,7 +114,7 @@
 $(docker-compose -f $RUNNING_COMPOSE_CONFIG ps)
 
 Simulator response:
-$(curl -s -X GET $SIMULATOR_STATUS_URL | json_pp)
+$(curl -s -X GET $SIMULATOR_STATUS_URL)
 EndOfMessage
 }
 
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/Main.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/Main.java
index 0e9fe4d..9a4f55a 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/Main.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/Main.java
@@ -1,33 +1,29 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator;
 
+import org.onap.pnfsimulator.message.MessageProvider;
+import org.onap.pnfsimulator.simulator.validation.JSONValidator;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
 import org.springframework.scheduling.annotation.EnableAsync;
 
 @SpringBootApplication
 @EnableAsync
 public class Main {
+
     public static void main(String[] args) {
         SpringApplication.run(Main.class, args);
     }
+
+    @Bean
+    public MessageProvider messageProvider() {
+        return new MessageProvider();
+    }
+
+    @Bean
+    public JSONValidator jsonValidator() {
+        return new JSONValidator();
+    }
 }
+
+
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/logging/MDCVariables.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/logging/MDCVariables.java
new file mode 100644
index 0000000..ca65b55
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/logging/MDCVariables.java
@@ -0,0 +1,15 @@
+package org.onap.pnfsimulator.logging;
+
+public final class MDCVariables {
+
+    public static final String X_ONAP_REQUEST_ID = "X-ONAP-RequestID";
+    public static final String X_INVOCATION_ID = "X-InvocationID";
+    public static final String REQUEST_ID = "RequestID";
+    public static final String INVOCATION_ID = "InvocationID";
+    public static final String INSTANCE_UUID = "InstanceUUID";
+    public static final String RESPONSE_CODE = "ResponseCode";
+    public static final String SERVICE_NAME = "ServiceName";
+
+    private MDCVariables() {
+    }
+}
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/message/MessageConstants.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/message/MessageConstants.java
index 8e7c6fc..a0930a6 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/message/MessageConstants.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/message/MessageConstants.java
@@ -1,23 +1,3 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.message;
 
 public final class MessageConstants {
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/message/MessageProvider.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/message/MessageProvider.java
index 44ca966..b21eed4 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/message/MessageProvider.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/message/MessageProvider.java
@@ -1,27 +1,8 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.message;
 
 import static org.onap.pnfsimulator.message.MessageConstants.COMMON_EVENT_HEADER;
 import static org.onap.pnfsimulator.message.MessageConstants.DOMAIN;
+import static org.onap.pnfsimulator.message.MessageConstants.EVENT;
 import static org.onap.pnfsimulator.message.MessageConstants.EVENT_ID;
 import static org.onap.pnfsimulator.message.MessageConstants.EVENT_TYPE;
 import static org.onap.pnfsimulator.message.MessageConstants.INTERNAL_HEADER_FIELDS;
@@ -35,7 +16,6 @@
 import static org.onap.pnfsimulator.message.MessageConstants.SEQUENCE;
 import static org.onap.pnfsimulator.message.MessageConstants.START_EPOCH_MICROSEC;
 import static org.onap.pnfsimulator.message.MessageConstants.VERSION;
-import static org.onap.pnfsimulator.message.MessageConstants.EVENT;
 
 import java.util.Map;
 import java.util.UUID;
@@ -45,11 +25,11 @@
 
     public JSONObject createMessage(JSONObject params) {
 
-        if(params == null){
+        if (params == null) {
             throw new IllegalArgumentException("Params object cannot be null");
         }
 
-         Map<String, Object> paramsMap = params.toMap();
+        Map<String, Object> paramsMap = params.toMap();
         JSONObject root = new JSONObject();
         JSONObject commonEventHeader = generateConstantCommonEventHeader();
         JSONObject otherFields = generateConstantOtherFields();
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/NetconfConfigurationCheckingTask.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/NetconfConfigurationCheckingTask.java
index b4eda0a..edbb195 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/NetconfConfigurationCheckingTask.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/NetconfConfigurationCheckingTask.java
@@ -1,37 +1,17 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.netconfmonitor;
 
 import com.tailf.jnc.JNCException;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import java.io.IOException;
+import java.util.TimerTask;
 import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConfigurationCache;
 import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConfigurationReader;
 import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConfigurationWriter;
-
-import java.io.IOException;
-import java.util.TimerTask;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class NetconfConfigurationCheckingTask extends TimerTask {
-    private static final Logger LOGGER = LogManager.getLogger(NetconfConfigurationCheckingTask.class);
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(NetconfConfigurationCheckingTask.class);
 
     private final NetconfConfigurationReader reader;
     private final NetconfConfigurationWriter writer;
@@ -47,16 +27,15 @@
 
     @Override
     public void run() {
-        String currentConfiguration = "";
         try {
-            currentConfiguration = reader.read();
-        } catch (IOException|JNCException e) {
-            LOGGER.info("Error during configuration reading: {}", e.getMessage());
-        }
-        if (!currentConfiguration.equals(cache.getConfiguration())) {
-            LOGGER.info("Configuration has changed, new configuration:\n\n{}", currentConfiguration);
-            writer.writeToFile(currentConfiguration);
-            cache.update(currentConfiguration);
+            String currentConfiguration = reader.read();
+            if (!currentConfiguration.equals(cache.getConfiguration())) {
+                LOGGER.info("Configuration has changed, new configuration:\n\n{}", currentConfiguration);
+                writer.writeToFile(currentConfiguration);
+                cache.update(currentConfiguration);
+            }
+        } catch (IOException | JNCException e) {
+            LOGGER.warn("Error during configuration reading: {}", e.getMessage());
         }
     }
 }
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/NetconfMonitorService.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/NetconfMonitorService.java
index c4d6198..ab6925b 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/NetconfMonitorService.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/NetconfMonitorService.java
@@ -1,38 +1,20 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.netconfmonitor;
 
 import com.tailf.jnc.JNCException;
+import java.io.IOException;
+import java.util.Timer;
+import javax.annotation.PostConstruct;
 import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConfigurationCache;
 import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConfigurationReader;
 import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConfigurationWriter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.PostConstruct;
-import java.io.IOException;
-import java.util.Timer;
-
 @Service
 public class NetconfMonitorService {
+    private static final Logger LOGGER = LoggerFactory.getLogger(NetconfMonitorService.class);
     private static final long timePeriod = 1000L;
     private static final long startDelay = 0;
 
@@ -53,15 +35,19 @@
     }
 
     @PostConstruct
-    public void start() throws IOException, JNCException {
+    public void start() {
         setStartConfiguration();
-        NetconfConfigurationCheckingTask task =  new NetconfConfigurationCheckingTask(reader, writer, cache);
+        NetconfConfigurationCheckingTask task = new NetconfConfigurationCheckingTask(reader, writer, cache);
         timer.scheduleAtFixedRate(task, startDelay, timePeriod);
     }
 
-    private void setStartConfiguration() throws IOException, JNCException {
-        String configuration = reader.read();
-        writer.writeToFile(configuration);
-        cache.update(configuration);
+    private void setStartConfiguration() {
+        try {
+            String configuration = reader.read();
+            writer.writeToFile(configuration);
+            cache.update(configuration);
+        } catch (IOException | JNCException e) {
+            LOGGER.warn("Error during configuration reading: {}", e.getMessage());
+        }
     }
 }
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/NetconfMonitorServiceConfiguration.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/NetconfMonitorServiceConfiguration.java
index 82ea85a..be804a5 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/NetconfMonitorServiceConfiguration.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/NetconfMonitorServiceConfiguration.java
@@ -1,40 +1,25 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.netconfmonitor;
 
 import com.tailf.jnc.JNCException;
 import com.tailf.jnc.NetconfSession;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.onap.pnfsimulator.netconfmonitor.netconf.*;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
+import com.tailf.jnc.SSHConnection;
+import com.tailf.jnc.SSHSession;
 import java.io.IOException;
 import java.util.Map;
 import java.util.Timer;
+import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConfigurationCache;
+import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConfigurationReader;
+import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConfigurationWriter;
+import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConnectionParams;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
 
 @Configuration
 public class NetconfMonitorServiceConfiguration {
-    private static final Logger LOGGER = LogManager.getLogger(NetconfMonitorServiceConfiguration.class);
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(NetconfMonitorServiceConfiguration.class);
     private static final Map<String, String> enviroment = System.getenv();
 
     private static final String LOG_PATH = "/var/log";
@@ -44,7 +29,7 @@
     private static final String NETCONF_MODEL = "NETCONF_MODEL";
     private static final String NETCONF_MAIN_CONTAINER = "NETCONF_MAIN_CONTAINER";
 
-    private static final String DEFAULT_NETCONF_ADDRESS = "netopeer";
+    private static final String DEFAULT_NETCONF_ADDRESS = "localhost";
     private static final int DEFAULT_NETCONF_PORT = 830;
     private static final String DEFAULT_NETCONF_MODEL = "pnf-simulator";
     private static final String DEFAULT_NETCONF_MAIN_CONTAINER = "config";
@@ -64,12 +49,18 @@
 
     @Bean
     public NetconfConfigurationReader configurationReader() throws IOException, JNCException {
-        NetconfConnectionParams params = createConnectionParams();
+        NetconfConnectionParams params = resolveConnectionParams();
         LOGGER.info("Configuration params are : {}", params);
-        NetconfSession session = NetconfSessionFactory.create(params);
+        NetconfSession session = createNetconfSession(params);
         return new NetconfConfigurationReader(session, buildModelPath());
     }
 
+    NetconfSession createNetconfSession(NetconfConnectionParams params) throws IOException, JNCException {
+        SSHConnection sshConnection = new SSHConnection(params.address, params.port);
+        sshConnection.authenticateWithPassword(params.user, params.password);
+        return new NetconfSession( new SSHSession(sshConnection));
+    }
+
     @Bean
     public NetconfConfigurationWriter netconfConfigurationWriter() {
         return new NetconfConfigurationWriter(LOG_PATH);
@@ -77,22 +68,24 @@
 
     private String buildModelPath() {
         return String.format("/%s:%s",
-                enviroment.getOrDefault(NETCONF_MODEL, DEFAULT_NETCONF_MODEL),
-                enviroment.getOrDefault(NETCONF_MAIN_CONTAINER, DEFAULT_NETCONF_MAIN_CONTAINER));
+            enviroment.getOrDefault(NETCONF_MODEL, DEFAULT_NETCONF_MODEL),
+            enviroment.getOrDefault(NETCONF_MAIN_CONTAINER, DEFAULT_NETCONF_MAIN_CONTAINER));
     }
 
-    private NetconfConnectionParams createConnectionParams() {
+    NetconfConnectionParams resolveConnectionParams() {
         return new NetconfConnectionParams(
-                enviroment.getOrDefault(NETCONF_ADDRESS, DEFAULT_NETCONF_ADDRESS),
-                resolveNetconfPort(),
-                DEFAULT_NETCONF_USER,
-                DEFAULT_NETCONF_PASSWORD);
+            enviroment.getOrDefault(NETCONF_ADDRESS, DEFAULT_NETCONF_ADDRESS),
+            resolveNetconfPort(),
+            DEFAULT_NETCONF_USER,
+            DEFAULT_NETCONF_PASSWORD);
     }
 
     private int resolveNetconfPort() {
         try {
             return Integer.parseInt(enviroment.get(NETCONF_PORT));
         } catch (NumberFormatException e) {
+            LOGGER.warn("Invalid netconf port: {}. Default netconf port {} is set.", e.getMessage(),
+                DEFAULT_NETCONF_PORT);
             return DEFAULT_NETCONF_PORT;
         }
     }
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationCache.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationCache.java
index 8202346..852346d 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationCache.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationCache.java
@@ -1,26 +1,7 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.netconfmonitor.netconf;
 
 public class NetconfConfigurationCache {
+
     private String configuration = "";
 
     public String getConfiguration() {
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationReader.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationReader.java
index e897925..8bd1a57 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationReader.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationReader.java
@@ -1,31 +1,11 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.netconfmonitor.netconf;
 
 import com.tailf.jnc.JNCException;
 import com.tailf.jnc.NetconfSession;
-
 import java.io.IOException;
 
 public class NetconfConfigurationReader {
+
     private final NetconfSession session;
     private final String netconfModelPath;
 
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationWriter.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationWriter.java
index 4c3d53e..93934f0 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationWriter.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationWriter.java
@@ -1,37 +1,17 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.netconfmonitor.netconf;
 
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.io.BufferedWriter;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 import org.onap.pnfsimulator.rest.util.DateUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class NetconfConfigurationWriter {
-    private static final Logger LOGGER = LogManager.getLogger(NetconfConfigurationWriter.class);
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(NetconfConfigurationWriter.class);
     private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
     private String pathToLog;
 
@@ -45,7 +25,7 @@
             writer.write(configuration);
             LOGGER.info("Configuration wrote to file {}/{} ", pathToLog, fileName);
         } catch (IOException e) {
-            LOGGER.info("Failed to write configuration to file: {}", e.getMessage());
+            LOGGER.warn("Failed to write configuration to file: {}", e.getMessage());
         }
     }
 }
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConnectionParams.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConnectionParams.java
index 3130d2b..df95269 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConnectionParams.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConnectionParams.java
@@ -1,26 +1,7 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.netconfmonitor.netconf;
 
 public class NetconfConnectionParams {
+
     public final String address;
     public final int port;
     public final String user;
@@ -36,9 +17,9 @@
     @Override
     public String toString() {
         return String.format("NetconfConnectionParams{address=%s, port=%d, user=%s, password=%s}",
-                address,
-                port,
-                user,
-                password);
+            address,
+            port,
+            user,
+            password);
     }
 }
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfSessionFactory.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfSessionFactory.java
deleted file mode 100644
index 4f31af5..0000000
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfSessionFactory.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.netconfmonitor.netconf;
-
-import com.tailf.jnc.JNCException;
-import com.tailf.jnc.NetconfSession;
-import com.tailf.jnc.SSHConnection;
-import com.tailf.jnc.SSHSession;
-
-import java.io.IOException;
-
-public final class NetconfSessionFactory {
-    private NetconfSessionFactory() {}
-
-    public static NetconfSession create(NetconfConnectionParams params) throws IOException, JNCException {
-        SSHConnection sshConnection = new SSHConnection(params.address, params.port);
-        sshConnection.authenticateWithPassword(params.user, params.password);
-        SSHSession sshSession = new SSHSession(sshConnection);
-        return new NetconfSession(sshSession);
-    }
-}
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/rest/SimulatorController.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/rest/SimulatorController.java
index 46a63a2..fd4f7a9 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/rest/SimulatorController.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/rest/SimulatorController.java
@@ -1,49 +1,47 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.rest;
 
+import static org.onap.pnfsimulator.logging.MDCVariables.INSTANCE_UUID;
+import static org.onap.pnfsimulator.logging.MDCVariables.INVOCATION_ID;
+import static org.onap.pnfsimulator.logging.MDCVariables.REQUEST_ID;
+import static org.onap.pnfsimulator.logging.MDCVariables.RESPONSE_CODE;
+import static org.onap.pnfsimulator.logging.MDCVariables.SERVICE_NAME;
+import static org.onap.pnfsimulator.logging.MDCVariables.X_INVOCATION_ID;
+import static org.onap.pnfsimulator.logging.MDCVariables.X_ONAP_REQUEST_ID;
 import static org.onap.pnfsimulator.message.MessageConstants.SIMULATOR_PARAMS_CONTAINER;
 import static org.onap.pnfsimulator.rest.util.ResponseBuilder.MESSAGE;
 import static org.onap.pnfsimulator.rest.util.ResponseBuilder.REMAINING_TIME;
 import static org.onap.pnfsimulator.rest.util.ResponseBuilder.SIMULATOR_STATUS;
 import static org.onap.pnfsimulator.rest.util.ResponseBuilder.TIMESTAMP;
+import static org.springframework.http.HttpStatus.BAD_REQUEST;
+import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR;
+import static org.springframework.http.HttpStatus.OK;
 
+import java.io.IOException;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import com.github.fge.jsonschema.core.exceptions.ProcessingException;
+import java.util.UUID;
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.onap.pnfsimulator.message.MessageConstants;
-import org.onap.pnfsimulator.message.MessageProvider;
 import org.onap.pnfsimulator.rest.util.DateUtil;
 import org.onap.pnfsimulator.rest.util.ResponseBuilder;
 import org.onap.pnfsimulator.simulator.Simulator;
 import org.onap.pnfsimulator.simulator.SimulatorFactory;
+import org.onap.pnfsimulator.simulator.validation.JSONValidator;
 import org.onap.pnfsimulator.simulator.validation.ValidationException;
-import org.springframework.http.HttpStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
 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.RequestHeader;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -52,87 +50,104 @@
 @RequestMapping("/simulator")
 public class SimulatorController {
 
-    private static final Logger LOGGER = LogManager.getLogger(Simulator.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(Simulator.class);
     private static final DateFormat RESPONSE_DATE_FORMAT = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss,SSS");
-
+    private final Marker ENTRY = MarkerFactory.getMarker("ENTRY");
     private Simulator simulator;
 
+    private JSONValidator validator;
+    private SimulatorFactory factory;
+
+    @Autowired
+    public SimulatorController(JSONValidator validator, SimulatorFactory factory) {
+        this.validator = validator;
+        this.factory = factory;
+    }
 
     @PostMapping("start")
-    public ResponseEntity start(@RequestBody String message) {
+    public ResponseEntity start(@RequestHeader HttpHeaders headers, @RequestBody String message) {
+        MDC.put(REQUEST_ID, headers.getFirst(X_ONAP_REQUEST_ID));
+        MDC.put(INVOCATION_ID, headers.getFirst(X_INVOCATION_ID));
+        MDC.put(INSTANCE_UUID, UUID.randomUUID().toString());
+        MDC.put(SERVICE_NAME, "/simulator/start");
+        LOGGER.info(ENTRY,"Simulator starting");
 
-        if (simulator != null && simulator.isAlive()) {
+        if (isSimulatorRunning()) {
+            MDC.put(RESPONSE_CODE, BAD_REQUEST.toString());
             return ResponseBuilder
-                .status(HttpStatus.BAD_REQUEST.value())
+                .status(BAD_REQUEST)
                 .put(TIMESTAMP, DateUtil.getTimestamp(RESPONSE_DATE_FORMAT))
                 .put(MESSAGE, "Cannot start simulator since it's already running")
                 .build();
         }
 
         try {
+            validator.validate(message, "json_schema/input_validator.json");
+
             JSONObject root = new JSONObject(message);
             JSONObject simulatorParams = root.getJSONObject(SIMULATOR_PARAMS_CONTAINER);
             JSONObject messageParams = root.getJSONObject(MessageConstants.MESSAGE_PARAMS_CONTAINER);
 
-            simulator = SimulatorFactory
-                .usingMessageProvider(new MessageProvider())
-                .create(simulatorParams, messageParams);
-
+            simulator = factory.create(simulatorParams, messageParams);
             simulator.start();
 
-        } catch (JSONException e) {
-
-            LOGGER.error("Cannot start simulator, invalid json format: " + e.getMessage());
-            LOGGER.debug("Received json has invalid format:\n" + message);
+            MDC.put(RESPONSE_CODE, OK.toString());
             return ResponseBuilder
-                .status(HttpStatus.BAD_REQUEST.value())
+                .status(OK)
+                .put(TIMESTAMP, DateUtil.getTimestamp(RESPONSE_DATE_FORMAT))
+                .put(MESSAGE, "Simulator started")
+                .build();
+
+        } catch (JSONException e) {
+            MDC.put(RESPONSE_CODE, BAD_REQUEST.toString());
+            LOGGER.warn("Cannot start simulator, invalid json format: {}", e.getMessage());
+            LOGGER.debug("Received json has invalid format", e);
+            return ResponseBuilder
+                .status(BAD_REQUEST)
                 .put(TIMESTAMP, DateUtil.getTimestamp(RESPONSE_DATE_FORMAT))
                 .put(MESSAGE, "Cannot start simulator, invalid json format")
                 .build();
 
-        } catch (ValidationException e) {
-
-            LOGGER.error("Cannot start simulator - missing mandatory parameters");
+        } catch (ProcessingException | ValidationException | IOException e) {
+            MDC.put(RESPONSE_CODE, BAD_REQUEST.toString());
+            LOGGER.warn("Json validation failed: {}", e.getMessage());
             return ResponseBuilder
-                .status(HttpStatus.BAD_REQUEST.value())
+                .status(BAD_REQUEST)
                 .put(TIMESTAMP, DateUtil.getTimestamp(RESPONSE_DATE_FORMAT))
-                .put(MESSAGE, e.getMessage())
+                .put(MESSAGE, "Cannot start simulator - Json format is not compatible with schema definitions")
                 .build();
 
-        } catch (RuntimeException e) {
-
+        } catch (Exception e) {
+            MDC.put(RESPONSE_CODE, INTERNAL_SERVER_ERROR.toString());
             LOGGER.error("Cannot start simulator - unexpected exception", e);
             return ResponseBuilder
-                .status(HttpStatus.INTERNAL_SERVER_ERROR.value())
+                .status(INTERNAL_SERVER_ERROR)
                 .put(TIMESTAMP, DateUtil.getTimestamp(RESPONSE_DATE_FORMAT))
                 .put(MESSAGE, "Unexpected exception: " + e.getMessage())
                 .build();
         }
-
-        return ResponseBuilder
-            .status(HttpStatus.OK.value())
-            .put(TIMESTAMP, DateUtil.getTimestamp(RESPONSE_DATE_FORMAT))
-            .put(MESSAGE, "Simulator started")
-            .build();
+        finally {
+            MDC.clear();
+        }
     }
 
     @GetMapping("status")
     public ResponseEntity status() {
-
-        if (simulator != null && simulator.isAlive()) {
-
+        if (isSimulatorRunning()) {
             ResponseBuilder responseBuilder = ResponseBuilder
-                .status(HttpStatus.OK.value())
+                .status(OK)
                 .put(TIMESTAMP, DateUtil.getTimestamp(RESPONSE_DATE_FORMAT))
                 .put(SIMULATOR_STATUS, "RUNNING");
 
-            if (!simulator.isEndless()) {
-                responseBuilder.put(REMAINING_TIME, simulator.getRemainingTime());
-            }
-            return responseBuilder.build();
+            return !simulator.isEndless() ?
+                responseBuilder
+                    .put(REMAINING_TIME, simulator.getRemainingTime())
+                    .build() :
+                responseBuilder
+                    .build();
         } else {
             return ResponseBuilder
-                .status(HttpStatus.OK.value())
+                .status(OK)
                 .put(TIMESTAMP, DateUtil.getTimestamp(RESPONSE_DATE_FORMAT))
                 .put(SIMULATOR_STATUS, "NOT RUNNING")
                 .build();
@@ -141,22 +156,25 @@
 
     @PostMapping("stop")
     public ResponseEntity stop() {
-
-        if (simulator != null && simulator.isAlive()) {
+        if (isSimulatorRunning()) {
             simulator.interrupt();
 
             return ResponseBuilder
-                .status(HttpStatus.OK.value())
+                .status(OK)
                 .put(TIMESTAMP, DateUtil.getTimestamp(RESPONSE_DATE_FORMAT))
                 .put(MESSAGE, "Simulator successfully stopped")
                 .build();
         } else {
             return ResponseBuilder
-                .status(HttpStatus.BAD_REQUEST.value())
+                .status(BAD_REQUEST)
                 .put(TIMESTAMP, DateUtil.getTimestamp(RESPONSE_DATE_FORMAT))
                 .put(MESSAGE, "Cannot stop simulator, because it's not running")
                 .build();
         }
     }
+
+    private boolean isSimulatorRunning() {
+        return simulator != null && simulator.isAlive();
+    }
 }
 
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/rest/util/DateUtil.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/rest/util/DateUtil.java
index 73443d0..f48611c 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/rest/util/DateUtil.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/rest/util/DateUtil.java
@@ -1,23 +1,3 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.rest.util;
 
 import java.text.DateFormat;
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/rest/util/ResponseBuilder.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/rest/util/ResponseBuilder.java
index 31d22a7..25c040e 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/rest/util/ResponseBuilder.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/rest/util/ResponseBuilder.java
@@ -1,27 +1,8 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.rest.util;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
+import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 
 public class ResponseBuilder {
@@ -31,16 +12,16 @@
     public static final String SIMULATOR_STATUS = "simulatorStatus";
     public static final String REMAINING_TIME = "remainingTime";
 
-    private int statusCode;
+    private HttpStatus httpStatus;
     private Map<String, Object> body = new LinkedHashMap<>();
 
-    private ResponseBuilder(int statusCode) {
-        this.statusCode = statusCode;
+    private ResponseBuilder(HttpStatus httpStatus) {
+        this.httpStatus = httpStatus;
     }
 
-    public static ResponseBuilder status(int statusCode) {
+    public static ResponseBuilder status(HttpStatus httpStatus) {
 
-        return new ResponseBuilder(statusCode);
+        return new ResponseBuilder(httpStatus);
     }
 
     public ResponseBuilder put(String key, Object value) {
@@ -52,10 +33,10 @@
     public ResponseEntity build() {
 
         if (body.isEmpty()) {
-            return ResponseEntity.status(statusCode).build();
+            return ResponseEntity.status(httpStatus).build();
         }
 
-        return ResponseEntity.status(statusCode).body(body);
+        return ResponseEntity.status(httpStatus).body(body);
     }
 
 }
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/Simulator.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/Simulator.java
index 0c713e1..4051dcf 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/Simulator.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/Simulator.java
@@ -1,70 +1,62 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.simulator;
 
 import java.time.Duration;
 import java.time.Instant;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import java.util.Map;
 import org.json.JSONObject;
 import org.onap.pnfsimulator.simulator.client.HttpClientAdapter;
+import org.onap.pnfsimulator.simulator.client.HttpClientAdapterImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
 
 public class Simulator extends Thread {
 
-    private static final Logger LOGGER = LogManager.getLogger(Simulator.class);
-    private HttpClientAdapter clientProvider;
+    private static final Logger LOGGER = LoggerFactory.getLogger(Simulator.class);
+    private final Marker EXIT = MarkerFactory.getMarker("EXIT");
+    private Map<String,String> contextMap = MDC.getCopyOfContextMap();
+    private boolean isEndless;
+    private String vesUrl;
+    private HttpClientAdapter httpClient;
     private JSONObject messageBody;
-    private Instant endTime;
     private Duration duration;
     private Duration interval;
-    private final boolean isEndless;
+    private Instant endTime;
 
-    public Simulator(String vesServerUrl, JSONObject messageBody, Duration duration, Duration interval) {
-        this.messageBody = messageBody;
-        this.duration = duration;
-        this.interval = interval;
-        this.clientProvider = new HttpClientAdapter(vesServerUrl);
-        this.isEndless = duration.getSeconds() == 0;
+    private Simulator() {
+    }
+
+    public static Builder builder() {
+        return new Builder();
     }
 
     public void run() {
-        LOGGER.info("Simulation started - duration: " + getDuration() + ", interval: {}s", interval.getSeconds());
-
+        setMdcContextMap(contextMap);
+        LOGGER.info("Simulation started - duration: {}, interval: {}s", getDuration(), interval.getSeconds());
         endTime = Instant.now().plus(duration);
-        boolean isEndless = isEndless();
         while (isEndless || runningTimeNotExceeded()) {
             try {
-                LOGGER.debug("Message to be sent:\n" + messageBody.toString(4));
-                clientProvider.sendMsg(messageBody.toString());
+                LOGGER.debug("Message to be sent:\n" + getMessage());
+                httpClient.send(messageBody.toString(), vesUrl);
                 Thread.sleep(interval.toMillis());
             } catch (InterruptedException e) {
                 LOGGER.info("Simulation interrupted");
                 return;
             }
         }
-        LOGGER.info("Simulation finished");
+        LOGGER.info(EXIT, "Simulation finished");
+        MDC.clear();
     }
 
-    public boolean isEndless() {
-        return isEndless;
+    private void setMdcContextMap(Map<String,String> mdcContextMap) {
+        if(mdcContextMap != null)
+            MDC.setContextMap(mdcContextMap);
+    }
+
+    private String getMessage() {
+        return messageBody.toString(4);
     }
 
     private String getDuration() {
@@ -75,10 +67,65 @@
         return Instant.now().isBefore(endTime);
     }
 
-    public long getRemainingTime(){
+    public boolean isEndless() {
+        return isEndless;
+    }
+
+    public long getRemainingTime() {
         return Duration.between(Instant.now(), endTime).getSeconds();
     }
-    public String getMessage(){
-        return messageBody.toString(4);
+
+    public static class Builder {
+
+        private String vesUrl;
+        private HttpClientAdapter httpClient;
+        private JSONObject messageBody;
+        private Duration duration;
+        private Duration interval;
+
+        private Builder() {
+            this.vesUrl = "";
+            this.httpClient = new HttpClientAdapterImpl();
+            this.messageBody = new JSONObject();
+            this.duration = Duration.ZERO;
+            this.interval = Duration.ZERO;
+        }
+
+        public Builder withVesUrl(String vesUrl) {
+            this.vesUrl = vesUrl;
+            return this;
+        }
+
+        public Builder withCustomHttpClientAdapter(HttpClientAdapter httpClient) {
+            this.httpClient = httpClient;
+            return this;
+        }
+
+        public Builder withMessageBody(JSONObject messageBody) {
+            this.messageBody = messageBody;
+            return this;
+        }
+
+        public Builder withDuration(Duration duration) {
+            this.duration = duration;
+            return this;
+        }
+
+
+        public Builder withInterval(Duration interval) {
+            this.interval = interval;
+            return this;
+        }
+
+        public Simulator build() {
+            Simulator simulator = new Simulator();
+            simulator.vesUrl = this.vesUrl;
+            simulator.httpClient = this.httpClient;
+            simulator.messageBody = this.messageBody;
+            simulator.duration = this.duration;
+            simulator.interval = this.interval;
+            simulator.isEndless = duration.equals(Duration.ZERO);
+            return simulator;
+        }
     }
 }
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/SimulatorFactory.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/SimulatorFactory.java
index 7f1b0a8..443f154 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/SimulatorFactory.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/SimulatorFactory.java
@@ -1,57 +1,48 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.simulator;
 
-import static java.lang.Integer.*;
+import static java.lang.Integer.parseInt;
 import static org.onap.pnfsimulator.message.MessageConstants.MESSAGE_INTERVAL;
 import static org.onap.pnfsimulator.message.MessageConstants.TEST_DURATION;
 import static org.onap.pnfsimulator.message.MessageConstants.VES_SERVER_URL;
 
+import com.github.fge.jsonschema.core.exceptions.ProcessingException;
+import java.io.IOException;
 import java.time.Duration;
 import org.json.JSONObject;
 import org.onap.pnfsimulator.message.MessageProvider;
-import org.onap.pnfsimulator.simulator.validation.ParamsValidator;
+import org.onap.pnfsimulator.simulator.validation.JSONValidator;
 import org.onap.pnfsimulator.simulator.validation.ValidationException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
+@Service
 public class SimulatorFactory {
 
+    private static final String DEFAULT_OUTPUT_SCHEMA_PATH = "json_schema/output_validator.json";
+
     private MessageProvider messageProvider;
+    private JSONValidator validator;
 
-    public static SimulatorFactory usingMessageProvider(MessageProvider messageProvider) {
-        return new SimulatorFactory(messageProvider);
-    }
-
-    private SimulatorFactory(MessageProvider messageProvider) {
+    @Autowired
+    public SimulatorFactory(MessageProvider messageProvider, JSONValidator validator) {
         this.messageProvider = messageProvider;
+        this.validator = validator;
     }
 
-    public Simulator create(JSONObject simulatorParams, JSONObject messageParams) throws ValidationException {
-
-        ParamsValidator.forParams(simulatorParams, messageParams).validate();
-
+    public Simulator create(JSONObject simulatorParams, JSONObject messageParams)
+        throws ProcessingException, IOException, ValidationException {
         Duration duration = Duration.ofSeconds(parseInt(simulatorParams.getString(TEST_DURATION)));
         Duration interval = Duration.ofSeconds(parseInt(simulatorParams.getString(MESSAGE_INTERVAL)));
-        String vesServerUrl = simulatorParams.getString(VES_SERVER_URL);
+        String vesUrl = simulatorParams.getString(VES_SERVER_URL);
 
         JSONObject messageBody = messageProvider.createMessage(messageParams);
-        return new Simulator(vesServerUrl, messageBody, duration, interval);
+        validator.validate(messageBody.toString(), DEFAULT_OUTPUT_SCHEMA_PATH);
+
+        return Simulator.builder()
+            .withVesUrl(vesUrl)
+            .withDuration(duration)
+            .withInterval(interval)
+            .withMessageBody(messageBody)
+            .build();
     }
 }
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapter.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapter.java
index 35f0b68..020cb84 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapter.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapter.java
@@ -1,76 +1,6 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.simulator.client;
 
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+public interface HttpClientAdapter {
 
-public class HttpClientAdapter {
-
-    private static final Logger LOGGER = LogManager.getLogger(HttpClientAdapter.class);
-    private static final String CONTENT_TYPE = "Content-Type";
-    private static final String APPLICATION_JSON = "application/json";
-
-    private HttpClient client;
-    private String url;
-
-    public HttpClientAdapter(String url) {
-
-        RequestConfig config = RequestConfig.custom()
-            .setConnectTimeout(1000)
-            .setConnectionRequestTimeout(1000)
-            .setSocketTimeout(1000)
-            .build();
-
-        this.client = HttpClientBuilder
-            .create()
-            .setDefaultRequestConfig(config)
-            .build();
-
-        this.url = url;
-    }
-
-    public void sendMsg(String content) {
-        try {
-            HttpPost request = createRequest(content);
-            HttpResponse response = client.execute(request);
-            LOGGER.info("MESSAGE SENT, VES RESPONSE CODE: {}", response.getStatusLine());
-        } catch (IOException e) {
-            LOGGER.info("ERROR SENDING MESSAGE TO VES: {}", e.getMessage());
-        }
-    }
-
-    private HttpPost createRequest(String content) throws UnsupportedEncodingException {
-        StringEntity stringEntity = new StringEntity(content);
-        HttpPost request = new HttpPost(url);
-        request.addHeader(CONTENT_TYPE, APPLICATION_JSON);
-        request.setEntity(stringEntity);
-        return request;
-    }
+    void send(String content, String url);
 }
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapterImpl.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapterImpl.java
new file mode 100644
index 0000000..c38ac3e
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapterImpl.java
@@ -0,0 +1,67 @@
+package org.onap.pnfsimulator.simulator.client;
+
+import static org.onap.pnfsimulator.logging.MDCVariables.REQUEST_ID;
+import static org.onap.pnfsimulator.logging.MDCVariables.X_INVOCATION_ID;
+import static org.onap.pnfsimulator.logging.MDCVariables.X_ONAP_REQUEST_ID;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.UUID;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
+
+public class HttpClientAdapterImpl implements HttpClientAdapter {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientAdapterImpl.class);
+    private static final String CONTENT_TYPE = "Content-Type";
+    private static final String APPLICATION_JSON = "application/json";
+    private final Marker INVOKE = MarkerFactory.getMarker("INVOKE");
+    private static final RequestConfig CONFIG = RequestConfig.custom()
+        .setConnectTimeout(1000)
+        .setConnectionRequestTimeout(1000)
+        .setSocketTimeout(1000)
+        .build();
+
+    private HttpClient client;
+
+    public HttpClientAdapterImpl(HttpClient client) {
+        this.client = client;
+    }
+
+    public HttpClientAdapterImpl() {
+        this.client = HttpClientBuilder
+            .create()
+            .setDefaultRequestConfig(CONFIG)
+            .build();
+    }
+
+    @Override
+    public void send(String content, String url) {
+        try {
+            HttpPost request = createRequest(content, url);
+            HttpResponse response = client.execute(request);
+            LOGGER.info(INVOKE, "Message sent, ves response code: {}", response.getStatusLine());
+        } catch (IOException e) {
+            LOGGER.warn("Error sending message to ves: {}", e.getMessage());
+        }
+    }
+
+    private HttpPost createRequest(String content, String url) throws UnsupportedEncodingException {
+        HttpPost request = new HttpPost(url);
+        StringEntity stringEntity = new StringEntity(content);
+        request.addHeader(CONTENT_TYPE, APPLICATION_JSON);
+        request.addHeader(X_ONAP_REQUEST_ID, MDC.get(REQUEST_ID));
+        request.addHeader(X_INVOCATION_ID, UUID.randomUUID().toString());
+        request.setEntity(stringEntity);
+        return request;
+    }
+}
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/validation/JSONValidator.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/validation/JSONValidator.java
new file mode 100644
index 0000000..37fd71a
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/validation/JSONValidator.java
@@ -0,0 +1,46 @@
+package org.onap.pnfsimulator.simulator.validation;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.github.fge.jackson.JsonLoader;
+import com.github.fge.jsonschema.core.exceptions.ProcessingException;
+import com.github.fge.jsonschema.core.report.LogLevel;
+import com.github.fge.jsonschema.core.report.ProcessingMessage;
+import com.github.fge.jsonschema.core.report.ProcessingReport;
+import com.github.fge.jsonschema.main.JsonSchema;
+import com.github.fge.jsonschema.main.JsonSchemaFactory;
+import com.google.gson.JsonParser;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
+
+public class JSONValidator {
+
+    public void validate(String data, String jsonSchemaPath)
+        throws ValidationException, ProcessingException, IOException {
+        String jsonSchema = readJsonSchemaAsString(jsonSchemaPath);
+        JsonNode jsonData = JsonLoader.fromString(data);
+        ProcessingReport report = createJsonSchema(jsonSchema).validate(jsonData);
+
+        if (!report.isSuccess()) {
+            throw new ValidationException(constructValidationErrors(report));
+        }
+    }
+
+    private String readJsonSchemaAsString(String schemaPath) throws IOException {
+        try (FileReader reader = new FileReader(schemaPath)) {
+            return new JsonParser().parse(reader).toString();
+        }
+    }
+
+    private JsonSchema createJsonSchema(String schema) throws ProcessingException, IOException {
+        return JsonSchemaFactory.byDefault().getJsonSchema(JsonLoader.fromString(schema));
+    }
+
+    private String constructValidationErrors(ProcessingReport report) {
+        return StreamSupport.stream(report.spliterator(), false)
+            .filter(entry -> entry.getLogLevel() == LogLevel.ERROR)
+            .map(ProcessingMessage::getMessage)
+            .collect(Collectors.joining("\n"));
+    }
+}
diff --git a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/validation/ValidationException.java b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/validation/ValidationException.java
index 086997f..9855a78 100644
--- a/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/validation/ValidationException.java
+++ b/test/mocks/pnfsimulator/src/main/java/org/onap/pnfsimulator/simulator/validation/ValidationException.java
@@ -1,23 +1,3 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.simulator.validation;
 
 public class ValidationException extends Exception {
diff --git a/test/mocks/pnfsimulator/src/main/resources/logback.xml b/test/mocks/pnfsimulator/src/main/resources/logback.xml
new file mode 100644
index 0000000..de34b9a
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/main/resources/logback.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration complete="true" compact="true">
+
+  <Property name="outputFilename" value="pnfsimulator_output"/>
+  <Property name="log-path" value="/var/log/ONAP/pnfsimulator"/>
+  <Property name="archive" value="/var/log/ONAP/pnfsimulator/archive"/>
+  <property name="maxFileSize" value="50MB"/>
+  <property name="maxHistory" value="30"/>
+  <property name="totalSizeCap" value="10GB"/>
+
+  <appender name="Console" target="SYSTEM_OUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder>
+      <Pattern>%nopexception%logger
+        |%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX,UTC}
+        |%level
+        |%replace(%replace(%message){'\t','\\\\t'}){'\n','\\\\n'}
+        |%replace(%replace(%mdc){'\t','\\\\t'}){'\n','\\\\n'}
+        |%replace(%replace(%rootException){'\t','\\\\t'}){'\n','\\\\n'}
+        |%replace(%replace(%marker){'\t','\\\\t'}){'\n','\\\\n'}
+        |%thread
+        |%n</Pattern>
+    </encoder>
+  </appender>
+
+  <appender name="ROLLING-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+    <encoder>
+      <pattern>%nopexception%logger
+        |%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX,UTC}
+        |%level
+        |%replace(%replace(%message){'\t','\\\\t'}){'\n','\\\\n'}
+        |%replace(%replace(%mdc){'\t','\\\\t'}){'\n','\\\\n'}
+        |%replace(%replace(%rootException){'\t','\\\\t'}){'\n','\\\\n'}
+        |%replace(%replace(%marker){'\t','\\\\t'}){'\n','\\\\n'}
+        |%thread
+        |%n</pattern>
+    </encoder>
+    <File>${log-path}/${outputFilename}.log</File>
+    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+      <FileNamePattern>${archive}/${outputFilename}.%d{yyyy-MM-dd}.%i.log.zip</FileNamePattern>
+      <MaxFileSize>${maxFileSize}</MaxFileSize>
+      <MaxHistory>${maxHistory}</MaxHistory>
+      <TotalSizeCap>${totalSizeCap}</TotalSizeCap>
+    </rollingPolicy>
+  </appender>
+
+  <root level="info">
+    <appender-ref ref="Console" />
+    <appender-ref ref="ROLLING-FILE" />
+  </root>
+</Configuration>
diff --git a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/message/MessageProviderTest.java b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/message/MessageProviderTest.java
index 41df397..b08cc4c 100644
--- a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/message/MessageProviderTest.java
+++ b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/message/MessageProviderTest.java
@@ -1,23 +1,3 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.message;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -25,6 +5,7 @@
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.onap.pnfsimulator.message.MessageConstants.COMMON_EVENT_HEADER;
 import static org.onap.pnfsimulator.message.MessageConstants.DOMAIN;
+import static org.onap.pnfsimulator.message.MessageConstants.EVENT;
 import static org.onap.pnfsimulator.message.MessageConstants.EVENT_ID;
 import static org.onap.pnfsimulator.message.MessageConstants.EVENT_TYPE;
 import static org.onap.pnfsimulator.message.MessageConstants.INTERNAL_HEADER_FIELDS;
@@ -37,7 +18,6 @@
 import static org.onap.pnfsimulator.message.MessageConstants.SEQUENCE;
 import static org.onap.pnfsimulator.message.MessageConstants.START_EPOCH_MICROSEC;
 import static org.onap.pnfsimulator.message.MessageConstants.VERSION;
-import static org.onap.pnfsimulator.message.MessageConstants.EVENT;
 
 import java.util.UUID;
 import org.json.JSONObject;
diff --git a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/NetconfConfigurationCheckingTaskTest.java b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/NetconfConfigurationCheckingTaskTest.java
new file mode 100644
index 0000000..438c6a8
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/NetconfConfigurationCheckingTaskTest.java
@@ -0,0 +1,74 @@
+package org.onap.pnfsimulator.netconfmonitor;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import com.tailf.jnc.JNCException;
+import java.io.IOException;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConfigurationCache;
+import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConfigurationReader;
+import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConfigurationWriter;
+
+class NetconfConfigurationCheckingTaskTest {
+
+    private NetconfConfigurationCheckingTask checkingTask;
+
+    @Mock
+    private NetconfConfigurationReader reader;
+    @Mock
+    private NetconfConfigurationWriter writer;
+    @Mock
+    private NetconfConfigurationCache cache;
+
+    @BeforeEach
+    void setup() {
+        MockitoAnnotations.initMocks(this);
+        checkingTask = new NetconfConfigurationCheckingTask(reader, writer, cache);
+    }
+
+    @Test
+    void run_should_update_configuration_when_changed() throws IOException, JNCException {
+        String configuration = "newConfiguration";
+        when(reader.read()).thenReturn(configuration);
+        when(cache.getConfiguration()).thenReturn("oldConfiguration");
+
+        checkingTask.run();
+
+        verify(reader).read();
+        verify(cache).getConfiguration();
+        verify(writer).writeToFile(configuration);
+        verify(cache).update(configuration);
+    }
+
+    @Test
+    void run_should_not_update_configuration_when_same() throws IOException, JNCException {
+        String configuration = "configuration";
+        when(reader.read()).thenReturn(configuration);
+        when(cache.getConfiguration()).thenReturn("configuration");
+
+        checkingTask.run();
+
+        verify(reader).read();
+        verify(cache).getConfiguration();
+        verify(writer, never()).writeToFile(configuration);
+        verify(cache, never()).update(configuration);
+    }
+
+    @Test
+    void run_should_not_take_any_action_when_failed_to_read_configuration() throws IOException, JNCException {
+        when(reader.read()).thenThrow(new IOException());
+
+        checkingTask.run();
+
+        verify(reader).read();
+        verify(cache, never()).getConfiguration();
+        verify(writer, never()).writeToFile(any());
+        verify(cache, never()).update(any());
+    }
+}
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/NetconfMonitorServiceConfigurationTest.java b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/NetconfMonitorServiceConfigurationTest.java
new file mode 100644
index 0000000..3d3e3a8
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/NetconfMonitorServiceConfigurationTest.java
@@ -0,0 +1,52 @@
+package org.onap.pnfsimulator.netconfmonitor;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import com.tailf.jnc.JNCException;
+import com.tailf.jnc.NetconfSession;
+import java.io.IOException;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+
+class NetconfMonitorServiceConfigurationTest {
+
+    private NetconfMonitorServiceConfiguration configuration;
+
+    @Mock
+    private NetconfSession netconfSession;
+
+    @BeforeEach
+    void setup() {
+        netconfSession = mock(NetconfSession.class);
+        configuration = spy(new NetconfMonitorServiceConfiguration());
+    }
+
+    @Test
+    void readNetconfConfiguration() throws IOException, JNCException {
+        doReturn(netconfSession).when(configuration).createNetconfSession(any());
+
+        assertNotNull(configuration.configurationReader());
+        verify(configuration).createNetconfSession(any());
+    }
+
+    @Test
+    void configurationCacheIsNotNull() {
+        assertNotNull(configuration.configurationCache());
+    }
+
+    @Test
+    void netconfConfigurationWriterIsNotNull() {
+        assertNotNull(configuration.netconfConfigurationWriter());
+    }
+
+    @Test
+    void timerIsNotNull() {
+        assertNotNull(configuration.timer());
+    }
+}
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/NetconfMonitorServiceTest.java b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/NetconfMonitorServiceTest.java
new file mode 100644
index 0000000..3562fae
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/NetconfMonitorServiceTest.java
@@ -0,0 +1,53 @@
+package org.onap.pnfsimulator.netconfmonitor;
+
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyLong;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import com.tailf.jnc.JNCException;
+import java.io.IOException;
+import java.util.Timer;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConfigurationCache;
+import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConfigurationReader;
+import org.onap.pnfsimulator.netconfmonitor.netconf.NetconfConfigurationWriter;
+
+class NetconfMonitorServiceTest {
+
+    private NetconfMonitorService service;
+
+    @Mock
+    private Timer timer;
+    @Mock
+    private NetconfConfigurationReader reader;
+    @Mock
+    private NetconfConfigurationWriter writer;
+    @Mock
+    private NetconfConfigurationCache cache;
+
+    @BeforeEach
+    void setup() {
+        MockitoAnnotations.initMocks(this);
+        service = new NetconfMonitorService(timer, reader, writer, cache);
+    }
+
+    @Test
+    void startNetconfService() throws IOException, JNCException {
+        when(reader.read()).thenReturn("message");
+        doNothing().when(writer).writeToFile(anyString());
+        doNothing().when(cache).update(anyString());
+
+        service.start();
+
+        verify(cache, times(1)).update(anyString());
+        verify(writer, times(1)).writeToFile(anyString());
+        verify(timer, times(1)).scheduleAtFixedRate(any(), anyLong(), anyLong());
+    }
+}
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationCacheTest.java b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationCacheTest.java
new file mode 100644
index 0000000..ebfac01
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationCacheTest.java
@@ -0,0 +1,18 @@
+package org.onap.pnfsimulator.netconfmonitor.netconf;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+public class NetconfConfigurationCacheTest {
+
+    private static final String CONFIGURATION = "sampleConfiguration";
+
+    @Test
+    void changeConfigurationAfterUpdate() {
+        NetconfConfigurationCache configurationCache = new NetconfConfigurationCache();
+        configurationCache.update(CONFIGURATION);
+
+        assertEquals(CONFIGURATION, configurationCache.getConfiguration());
+    }
+}
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationReaderTest.java b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationReaderTest.java
new file mode 100644
index 0000000..451b0a6
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationReaderTest.java
@@ -0,0 +1,50 @@
+package org.onap.pnfsimulator.netconfmonitor.netconf;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import com.tailf.jnc.Element;
+import com.tailf.jnc.JNCException;
+import com.tailf.jnc.NetconfSession;
+import com.tailf.jnc.NodeSet;
+import java.io.IOException;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+class NetconfConfigurationReaderTest {
+
+    private static final String NETCONF_MODEL_PATH = "";
+    private static final String EXPECTED_STRING_XML = "<?xml version=\"1.0\"?>";
+    private NetconfConfigurationReader reader;
+
+    @Mock
+    private NetconfSession netconfSession;
+    @Mock
+    private NodeSet nodeSet;
+    @Mock
+    private Element element;
+
+    @BeforeEach
+    void setup() {
+        MockitoAnnotations.initMocks(this);
+        reader = new NetconfConfigurationReader(netconfSession, NETCONF_MODEL_PATH);
+    }
+
+    @Test
+    void properlyReadXML() throws IOException, JNCException {
+        when(netconfSession.getConfig(anyString())).thenReturn(nodeSet);
+        when(nodeSet.first()).thenReturn(element);
+        when(element.toXMLString()).thenReturn(EXPECTED_STRING_XML);
+
+        String result = reader.read();
+
+        verify(netconfSession).getConfig(anyString());
+        verify(nodeSet).first();
+        verify(element).toXMLString();
+        assertEquals(EXPECTED_STRING_XML, result);
+    }
+}
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationWriterTest.java b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationWriterTest.java
new file mode 100644
index 0000000..462be4b
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/netconfmonitor/netconf/NetconfConfigurationWriterTest.java
@@ -0,0 +1,47 @@
+package org.onap.pnfsimulator.netconfmonitor.netconf;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import org.apache.commons.io.FileUtils;
+import org.junit.Rule;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.migrationsupport.rules.EnableRuleMigrationSupport;
+import org.junit.rules.TemporaryFolder;
+
+@EnableRuleMigrationSupport
+class NetconfConfigurationWriterTest {
+
+    private static final String TEST_CONFIGURATION = "test-configuration";
+
+    @Rule
+    public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+    @Test
+    void writeToFile_should_write_sample_config_when_directory_exists() throws IOException {
+        File file = temporaryFolder.newFolder("temp");
+        NetconfConfigurationWriter configurationWriter = new NetconfConfigurationWriter(file.getPath());
+
+        configurationWriter.writeToFile(TEST_CONFIGURATION);
+
+        File[] files = file.listFiles();
+        assertEquals(1, files.length);
+
+        String content = FileUtils.readFileToString(files[0], "UTF-8");
+        assertEquals(TEST_CONFIGURATION, content);
+    }
+
+    @Test
+    void writeToFile_should_not_write_config_when_directory_doesnt_exist() {
+        String logFolderPath = "/not/existing/logs";
+        NetconfConfigurationWriter configurationWriter = new NetconfConfigurationWriter(logFolderPath);
+
+        configurationWriter.writeToFile(TEST_CONFIGURATION);
+
+        assertFalse(Files.exists(Paths.get(logFolderPath)));
+    }
+}
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/rest/SimulatorControllerTest.java b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/rest/SimulatorControllerTest.java
new file mode 100644
index 0000000..9a56bcc
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/rest/SimulatorControllerTest.java
@@ -0,0 +1,175 @@
+package org.onap.pnfsimulator.rest;
+
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+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 static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+import java.time.Duration;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.onap.pnfsimulator.simulator.Simulator;
+import org.onap.pnfsimulator.simulator.SimulatorFactory;
+import org.onap.pnfsimulator.simulator.client.HttpClientAdapter;
+import org.onap.pnfsimulator.simulator.validation.JSONValidator;
+import org.onap.pnfsimulator.simulator.validation.ValidationException;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+
+class SimulatorControllerTest {
+
+    private static final String START_URL = "/simulator/start";
+    private static final String STOP_URL = "/simulator/stop";
+    private static final String STATUS_URL = "/simulator/status";
+    private static final String JSON_MSG_EXPRESSION = "$.message";
+    private static final String JSON_STATUS_EXPRESSION = "$.simulatorStatus";
+    private static final String PROPER_JSON = "{\n" +
+        "  \"simulatorParams\": {\n" +
+        "    \"vesServerUrl\": \"http://10.154.187.70:8080/eventListener/v5\",\n" +
+        "    \"testDuration\": \"10\",\n" +
+        "    \"messageInterval\": \"1\"\n" +
+        "  },\n" +
+        "  \"messageParams\": {\n" +
+        "    \"pnfSerialNumber\": \"val1\",\n" +
+        "    \"pnfVendorName\": \"val2\",\n" +
+        "    \"pnfOamIpv4Address\": \"val3\",\n" +
+        "    \"pnfOamIpv6Address\": \"val4\",\n" +
+        "    \"pnfFamily\": \"val5\",\n" +
+        "    \"pnfModelNumber\": \"val6\",\n" +
+        "    \"pnfSoftwareVersion\": \"val7\",\n" +
+        "    \"pnfType\": \"val8\",\n" +
+        "    \"eventName\": \"val9\",\n" +
+        "    \"nfNamingCode\": \"val10\",\n" +
+        "    \"nfcNamingCode\": \"val11\",\n" +
+        "    \"sourceName\": \"val12\",\n" +
+        "    \"sourceId\": \"val13\",\n" +
+        "    \"reportingEntityName\": \"val14\"\n" +
+        "  }\n" +
+        "}";
+    private static final String WRONG_JSON = "{\n" +
+        "  \"mes\": {\n" +
+        "    \"vesServerUrl\": \"http://10.154.187.70:8080/eventListener/v5\",\n" +
+        "    \"testDuration\": \"10\",\n" +
+        "    \"messageInterval\": \"1\"\n" +
+        "  },\n" +
+        "  \"messageParams\": {\n" +
+        "    \"sourceName\": \"val12\",\n" +
+        "    \"sourceId\": \"val13\",\n" +
+        "    \"reportingEntityName\": \"val14\"\n" +
+        "  }\n" +
+        "}\n";
+
+    private MockMvc mockMvc;
+
+    @InjectMocks
+    private SimulatorController controller;
+
+    @Mock
+    private SimulatorFactory factory;
+    @Mock
+    private JSONValidator validator;
+
+    private Simulator simulator;
+
+    @BeforeEach
+    void setup() {
+        MockitoAnnotations.initMocks(this);
+        simulator = createEndlessSimulator();
+        mockMvc = MockMvcBuilders
+            .standaloneSetup(controller)
+            .build();
+    }
+
+    private Simulator createEndlessSimulator() {
+        return spy(Simulator.builder()
+            .withCustomHttpClientAdapter(mock(HttpClientAdapter.class))
+            .withInterval(Duration.ofMinutes(1))
+            .build());
+    }
+
+    @Test
+    void wrongJSONFormatOnStart() throws Exception {
+        when(factory.create(any(), any())).thenReturn(simulator);
+        doThrow(new ValidationException("")).when(validator).validate(anyString(), anyString());
+
+        mockMvc.perform(post("/simulator/start").content(WRONG_JSON))
+            .andExpect(status().isBadRequest())
+            .andExpect(jsonPath("$.message").value("Cannot start simulator - Json format " +
+                "is not compatible with schema definitions"));
+        verify(validator).validate(anyString(), anyString());
+    }
+
+    @Test
+    void startSimulatorProperly() throws Exception {
+        startSimulator();
+
+        verify(validator).validate(anyString(), anyString());
+        verify(factory).create(any(), any());
+        verify(simulator).start();
+    }
+
+    @Test
+    void notStartWhenAlreadyRunning() throws Exception {
+        startSimulator();
+
+        mockMvc
+            .perform(post(START_URL).content(PROPER_JSON))
+            .andExpect(status().isBadRequest())
+            .andExpect(jsonPath(JSON_MSG_EXPRESSION).value("Cannot start simulator since it's already running"));
+    }
+
+    @Test
+    void stopSimulatorWhenRunning() throws Exception {
+        startSimulator();
+
+        mockMvc
+            .perform(post(STOP_URL))
+            .andExpect(status().isOk())
+            .andExpect(jsonPath(JSON_MSG_EXPRESSION).value("Simulator successfully stopped"));
+    }
+
+    @Test
+    void getNotRunningMessageWhenOff() throws Exception {
+        mockMvc
+            .perform(post(STOP_URL))
+            .andExpect(status().isBadRequest())
+            .andExpect(jsonPath(JSON_MSG_EXPRESSION).value("Cannot stop simulator, because it's not running"));
+    }
+
+    @Test
+    void getRunningStatusWhenOn() throws Exception {
+        startSimulator();
+
+        mockMvc
+            .perform(get(STATUS_URL))
+            .andExpect(status().isOk())
+            .andExpect(jsonPath(JSON_STATUS_EXPRESSION).value("RUNNING"));
+    }
+
+    @Test
+    void getNotRunningStatusWhenOff() throws Exception {
+        mockMvc
+            .perform(get(STATUS_URL))
+            .andExpect(status().isOk())
+            .andExpect(jsonPath(JSON_STATUS_EXPRESSION).value("NOT RUNNING"));
+    }
+
+    private void startSimulator() throws Exception {
+        when(factory.create(any(), any())).thenReturn(simulator);
+
+        mockMvc
+            .perform(post(START_URL).content(PROPER_JSON))
+            .andExpect(status().isOk())
+            .andExpect(jsonPath(JSON_MSG_EXPRESSION).value("Simulator started"));
+    }
+}
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/rest/util/DateUtilTest.java b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/rest/util/DateUtilTest.java
new file mode 100644
index 0000000..6dc8449
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/rest/util/DateUtilTest.java
@@ -0,0 +1,18 @@
+package org.onap.pnfsimulator.rest.util;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import org.junit.jupiter.api.Test;
+
+class DateUtilTest {
+
+    @Test
+    void getFormattedDate() {
+        Calendar currentCalendar = Calendar.getInstance();
+        String expectedResult = String.valueOf(currentCalendar.get(Calendar.YEAR));
+
+        assertEquals(expectedResult, DateUtil.getTimestamp(new SimpleDateFormat("yyyy")));
+    }
+}
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/rest/util/ResponseBuilderTest.java b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/rest/util/ResponseBuilderTest.java
index a814734..8dc825c 100644
--- a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/rest/util/ResponseBuilderTest.java
+++ b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/rest/util/ResponseBuilderTest.java
@@ -1,59 +1,45 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.integration
- * ================================================================================
- * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.rest.util;
 
-import org.junit.jupiter.api.BeforeEach;
+import static org.junit.jupiter.api.Assertions.assertAll;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+import java.util.Map;
 import org.junit.jupiter.api.Test;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
-import java.util.Map;
-import static org.junit.jupiter.api.Assertions.*;
 
 public class ResponseBuilderTest {
 
-    private static final int SAMPLE_STATUS_CODE = 200;
-    private ResponseBuilder builder;
 
-    @BeforeEach
-    void setup() {
-        builder = ResponseBuilder.status(SAMPLE_STATUS_CODE);
-    }
+    private static final HttpStatus SAMPLE_STATUS = HttpStatus.OK;
 
     @Test
-    void checkResponseBodySize() {
-        builder.put("sample", "sample");
-        ResponseEntity responseEntity = builder.build();
-        Map<String, Object> body = (Map<String, Object>) responseEntity.getBody();
-
-        assertEquals(body.size(), 1);
-    }
-
-    @Test
-    void buildProperResponseEntity() {
-        ResponseEntity responseEntity = builder.build();
+    void response_should_have_empty_body_when_built_immediately() {
+        ResponseEntity responseEntity = ResponseBuilder.status(SAMPLE_STATUS).build();
 
         assertAll(
-            () -> assertEquals(responseEntity.getStatusCode(), HttpStatus.OK),
+            () -> assertEquals(responseEntity.getStatusCode(), SAMPLE_STATUS),
             () -> assertNull(responseEntity.getBody())
         );
     }
 
+    @Test
+    void builder_should_set_response_status_and_body() {
+        String key = "key";
+        String value = "value";
+        ResponseEntity response = ResponseBuilder
+            .status(SAMPLE_STATUS)
+            .put(key, value)
+            .build();
+
+        Map<String, Object> body = (Map<String, Object>) response.getBody();
+
+        assertAll(
+            () -> assertEquals(SAMPLE_STATUS, response.getStatusCode()),
+            () -> assertEquals(value, body.get(key))
+        );
+    }
+
+
 }
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/simulator/SimulatorFactoryTest.java b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/simulator/SimulatorFactoryTest.java
new file mode 100644
index 0000000..da4c97b
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/simulator/SimulatorFactoryTest.java
@@ -0,0 +1,60 @@
+package org.onap.pnfsimulator.simulator;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.onap.pnfsimulator.simulator.TestMessages.INVALID_MESSAGE_PARAMS_1;
+import static org.onap.pnfsimulator.simulator.TestMessages.INVALID_MESSAGE_PARAMS_2;
+import static org.onap.pnfsimulator.simulator.TestMessages.INVALID_MESSAGE_PARAMS_3;
+import static org.onap.pnfsimulator.simulator.TestMessages.INVALID_SIMULATOR_PARAMS;
+import static org.onap.pnfsimulator.simulator.TestMessages.VALID_MESSAGE_PARAMS;
+import static org.onap.pnfsimulator.simulator.TestMessages.VALID_SIMULATOR_PARAMS;
+
+import com.github.fge.jsonschema.core.exceptions.ProcessingException;
+import java.io.IOException;
+import org.json.JSONException;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.onap.pnfsimulator.message.MessageProvider;
+import org.onap.pnfsimulator.simulator.validation.JSONValidator;
+import org.onap.pnfsimulator.simulator.validation.ValidationException;
+
+class SimulatorFactoryTest {
+
+
+    private SimulatorFactory simulatorFactory;
+
+    @BeforeEach
+    void setUp() {
+        simulatorFactory = new SimulatorFactory(new MessageProvider(), new JSONValidator());
+    }
+
+    @Test
+    void should_successfully_create_simulator_given_valid_params_and_valid_output_message()
+        throws ValidationException, IOException, ProcessingException {
+        assertNotNull(simulatorFactory.create(VALID_SIMULATOR_PARAMS, VALID_MESSAGE_PARAMS));
+    }
+
+    @Test
+    void should_throw_given_invalid_params() {
+        assertThrows(
+            JSONException.class,
+            () -> simulatorFactory.create(INVALID_SIMULATOR_PARAMS, VALID_MESSAGE_PARAMS));
+    }
+
+    @Test
+    void should_throw_given_valid_params_and_invalid_output_message() {
+
+        assertThrows(
+            ValidationException.class,
+            () -> simulatorFactory.create(VALID_SIMULATOR_PARAMS, INVALID_MESSAGE_PARAMS_1));
+
+        assertThrows(
+            ValidationException.class,
+            () -> simulatorFactory.create(VALID_SIMULATOR_PARAMS, INVALID_MESSAGE_PARAMS_2));
+
+        assertThrows(
+            ValidationException.class,
+            () -> simulatorFactory.create(VALID_SIMULATOR_PARAMS, INVALID_MESSAGE_PARAMS_3));
+    }
+}
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/simulator/SimulatorTest.java b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/simulator/SimulatorTest.java
new file mode 100644
index 0000000..86baac7
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/simulator/SimulatorTest.java
@@ -0,0 +1,72 @@
+package org.onap.pnfsimulator.simulator;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTimeout;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.verify;
+
+import java.time.Duration;
+import org.json.JSONObject;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.function.Executable;
+import org.mockito.Mockito;
+import org.onap.pnfsimulator.simulator.client.HttpClientAdapter;
+
+class SimulatorTest {
+
+    private static final String TEST_VES_URL = "http://test-ves-url";
+
+    @Test
+    void builder_should_create_endless_simulator_when_duration_not_specified() {
+        Simulator simulator = Simulator
+            .builder()
+            .withDuration(Duration.ofSeconds(1))
+            .withVesUrl(TEST_VES_URL).build();
+
+        assertFalse(simulator.isEndless());
+
+        simulator = Simulator
+            .builder()
+            .withVesUrl(TEST_VES_URL).build();
+
+        assertTrue(simulator.isEndless());
+    }
+
+    @Test
+    void simulator_should_send_given_message() {
+
+        JSONObject messageBody = new JSONObject("{\"key\":\"val\"}");
+        HttpClientAdapter httpClientMock = Mockito.mock(HttpClientAdapter.class);
+
+        Simulator simulator = Simulator.builder()
+            .withDuration(Duration.ofMillis(100))
+            .withInterval(Duration.ofMillis(10))
+            .withMessageBody(messageBody)
+            .withCustomHttpClientAdapter(httpClientMock)
+            .withVesUrl(TEST_VES_URL).build();
+
+        simulator.start();
+
+        assertTimeout(Duration.ofMillis(150), (Executable) simulator::join);
+        verify(httpClientMock, atLeast(2)).send(messageBody.toString(), TEST_VES_URL);
+    }
+
+    @Test
+    void simulator_should_stop_when_interrupted() {
+
+        JSONObject messageBody = new JSONObject("{\"key\":\"val\"}");
+        HttpClientAdapter httpClientMock = Mockito.mock(HttpClientAdapter.class);
+
+        Simulator simulator = Simulator.builder()
+            .withInterval(Duration.ofSeconds(1))
+            .withMessageBody(messageBody)
+            .withCustomHttpClientAdapter(httpClientMock)
+            .withVesUrl(TEST_VES_URL).build();
+
+        simulator.start();
+        simulator.interrupt();
+
+        assertTimeout(Duration.ofSeconds(1), (Executable) simulator::join);
+    }
+}
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/simulator/TestMessages.java b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/simulator/TestMessages.java
new file mode 100644
index 0000000..26249ad
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/simulator/TestMessages.java
@@ -0,0 +1,91 @@
+package org.onap.pnfsimulator.simulator;
+
+import org.json.JSONObject;
+
+final class TestMessages {
+
+    static final JSONObject VALID_SIMULATOR_PARAMS = new JSONObject(
+        "{\n" +
+            "    \"vesServerUrl\": \"http://10.42.111.42:8080/eventListener/v5\",\n" +
+            "    \"testDuration\": \"10\",\n" +
+            "    \"messageInterval\": \"1\"\n" +
+            "}");
+
+
+    static final JSONObject VALID_MESSAGE_PARAMS = new JSONObject(
+        "{\n" +
+            "    \"pnfSerialNumber\": \"val1\",\n" +
+            "    \"pnfVendorName\": \"val2\",\n" +
+            "    \"pnfOamIpv4Address\": \"val3\",\n" +
+            "    \"pnfOamIpv6Address\": \"val4\",\n" +
+            "    \"pnfFamily\": \"val5\",\n" +
+            "    \"pnfModelNumber\": \"val6\",\n" +
+            "    \"pnfSoftwareVersion\": \"val7\",\n" +
+            "    \"pnfType\": \"val8\",\n" +
+            "    \"eventName\": \"val9\",\n" +
+            "    \"nfNamingCode\": \"val10\",\n" +
+            "    \"nfcNamingCode\": \"val11\",\n" +
+            "    \"sourceName\": \"val12\",\n" +
+            "    \"sourceId\": \"val13\",\n" +
+            "    \"reportingEntityName\": \"val14\"\n" +
+            "}");
+
+    static final JSONObject INVALID_SIMULATOR_PARAMS = new JSONObject(
+        "{\n" +
+            "    \"vesServerUrl\": \"http://10.42.111.42:8080/eventListener/v5\",\n" +
+            "    \"messageInterval\": \"1\"\n" +
+            "}");
+
+
+    static final JSONObject INVALID_MESSAGE_PARAMS_1 = new JSONObject(
+        "{\n" +
+            "    \"pnfSerialNumber\": \"val1\",\n" +
+            "    \"pnfVendorName\": \"val2\",\n" +
+            "    \"pnfFamily\": \"val5\",\n" +
+            "    \"pnfModelNumber\": \"val6\",\n" +
+            "    \"pnfSoftwareVersion\": \"val7\",\n" +
+            "    \"pnfType\": \"val8\",\n" +
+            "    \"eventName\": \"val9\",\n" +
+            "    \"nfNamingCode\": \"val10\",\n" +
+            "    \"nfcNamingCode\": \"val11\",\n" +
+            "    \"sourceName\": \"val12\",\n" +
+            "    \"sourceId\": \"val13\",\n" +
+            "    \"reportingEntityName\": \"val14\"\n" +
+            "}");
+
+    static final JSONObject INVALID_MESSAGE_PARAMS_2 = new JSONObject(
+        "{\n" +
+            "    \"pnfVendorName\": \"val2\",\n" +
+            "    \"pnfOamIpv4Address\": \"val3\",\n" +
+            "    \"pnfOamIpv6Address\": \"val4\",\n" +
+            "    \"pnfFamily\": \"val5\",\n" +
+            "    \"pnfModelNumber\": \"val6\",\n" +
+            "    \"pnfSoftwareVersion\": \"val7\",\n" +
+            "    \"pnfType\": \"val8\",\n" +
+            "    \"eventName\": \"val9\",\n" +
+            "    \"nfNamingCode\": \"val10\",\n" +
+            "    \"nfcNamingCode\": \"val11\",\n" +
+            "    \"sourceName\": \"val12\",\n" +
+            "    \"sourceId\": \"val13\",\n" +
+            "    \"reportingEntityName\": \"val14\"\n" +
+            "}");
+
+    static final JSONObject INVALID_MESSAGE_PARAMS_3 = new JSONObject(
+        "{\n" +
+            "    \"pnfSerialNumber\": \"val1\",\n" +
+            "    \"pnfOamIpv4Address\": \"val3\",\n" +
+            "    \"pnfFamily\": \"val5\",\n" +
+            "    \"pnfModelNumber\": \"val6\",\n" +
+            "    \"pnfSoftwareVersion\": \"val7\",\n" +
+            "    \"pnfType\": \"val8\",\n" +
+            "    \"eventName\": \"val9\",\n" +
+            "    \"nfNamingCode\": \"val10\",\n" +
+            "    \"nfcNamingCode\": \"val11\",\n" +
+            "    \"sourceName\": \"val12\",\n" +
+            "    \"sourceId\": \"val13\",\n" +
+            "    \"reportingEntityName\": \"val14\"\n" +
+            "}");
+
+    private TestMessages() {
+    }
+}
diff --git a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapterImplTest.java b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapterImplTest.java
new file mode 100644
index 0000000..48596b3
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapterImplTest.java
@@ -0,0 +1,51 @@
+package org.onap.pnfsimulator.simulator.client;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+import java.io.IOException;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+
+class HttpClientAdapterImplTest {
+
+    private HttpClientAdapter adapter;
+
+    @Mock
+    private HttpClient httpClient;
+    @Mock
+    private HttpResponse httpResponse;
+
+    @BeforeEach
+    void setup() {
+        initMocks(this);
+        adapter = new HttpClientAdapterImpl(httpClient);
+    }
+
+    @Test
+    void send_should_successfully_send_request_given_valid_url() throws IOException {
+        doReturn(httpResponse).when(httpClient).execute(any());
+
+        adapter.send("test-msg", "http://valid-url");
+
+        verify(httpClient).execute(any());
+        verify(httpResponse).getStatusLine();
+    }
+
+    @Test
+    void send_should_not_send_request_given_invalid_url() throws IOException {
+        doThrow(new IOException("test")).when(httpClient).execute(any());
+
+        adapter.send("test-msg", "http://invalid-url");
+
+        verify(httpClient).execute(any());
+        verify(httpResponse, never()).getStatusLine();
+    }
+}
diff --git a/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/simulator/validation/JSONValidatorTest.java b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/simulator/validation/JSONValidatorTest.java
new file mode 100644
index 0000000..d7398d0
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/test/java/org/onap/pnfsimulator/simulator/validation/JSONValidatorTest.java
@@ -0,0 +1,103 @@
+package org.onap.pnfsimulator.simulator.validation;
+
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import com.github.fge.jsonschema.core.exceptions.InvalidSchemaException;
+import com.github.fge.jsonschema.core.exceptions.ProcessingException;
+import java.io.IOException;
+import java.net.URL;
+import org.json.JSONObject;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+class JSONValidatorTest {
+
+    private final static String VALID_SCHEMA_NAME = "valid-test-schema.json";
+    private final static String INVALID_SCHEMA_NAME = "invalid-test-schema.json";
+
+    private JSONValidator validator;
+
+    @BeforeEach
+    void setUp() {
+        validator = new JSONValidator();
+    }
+
+    @Test
+    void validate_should_not_throw_given_valid_json() throws ProcessingException, IOException, ValidationException {
+        validator.validate(getValidJsonString(), getResourcePath(VALID_SCHEMA_NAME));
+    }
+
+    @Test
+    void validate_should_not_throw_when_optional_parameter_missing()
+        throws ProcessingException, IOException, ValidationException {
+
+        String invalidJsonString = new JSONObject()
+            .put("key1", "value1")
+            .put("key2", "value2")
+            .toString();
+
+        validator.validate(invalidJsonString, getResourcePath(VALID_SCHEMA_NAME));
+    }
+
+    @Test
+    void validate_should_throw_when_mandatory_parameter_missing() {
+
+        String invalidJsonString = new JSONObject()
+            .put("key1", "value1")
+            .put("key3", "value3")
+            .toString();
+
+        assertThrows(
+            ValidationException.class,
+            () -> validator.validate(invalidJsonString, getResourcePath(VALID_SCHEMA_NAME)));
+    }
+
+    @Test
+    void validate_should_throw_when_invalid_json_format() {
+        String invalidJsonString = "{" +
+            "\"key1\": \"value1\"" +
+            "\"key2\": \"value2" +
+            "}";
+
+        assertThrows(
+            IOException.class,
+            () -> validator.validate(invalidJsonString, getResourcePath(VALID_SCHEMA_NAME)));
+    }
+
+    @Test
+    void validate_should_throw_when_invalid_schema_format() {
+        assertThrows(
+            InvalidSchemaException.class,
+            () -> validator.validate(getValidJsonString(), getResourcePath(INVALID_SCHEMA_NAME)));
+    }
+
+    @Test
+    void validate_should_throw_when_invalid_schema_path() {
+
+        assertThrows(
+            IOException.class,
+            () -> validator.validate(getValidJsonString(), "/not/existing/path/schema.json"));
+    }
+
+    private String getResourcePath(String schemaFileName) {
+        URL result = getClass()
+            .getClassLoader()
+            .getResource(schemaFileName);
+
+        if (result == null) {
+            throw new IllegalArgumentException("Given file doesn't exist");
+        } else {
+            return result
+                .toString()
+                .replace("file:", "");
+        }
+    }
+
+    private String getValidJsonString() {
+        return new JSONObject()
+            .put("key1", "value1")
+            .put("key2", "value2")
+            .put("key3", "value3")
+            .toString();
+    }
+}
\ No newline at end of file
diff --git a/test/mocks/pnfsimulator/src/test/resources/invalid-test-schema.json b/test/mocks/pnfsimulator/src/test/resources/invalid-test-schema.json
new file mode 100644
index 0000000..8c37c82
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/test/resources/invalid-test-schema.json
@@ -0,0 +1,19 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-07/schema#",
+  "properties": {
+    "key1": {
+      "type": "string"
+    },
+    "key2": {
+      "type": "string"
+    },
+    "key3": {
+      "type": "string"
+    },
+    "required": [
+      "key1",
+      "key2"
+    ]
+  }
+}
diff --git a/test/mocks/pnfsimulator/src/test/resources/valid-test-schema.json b/test/mocks/pnfsimulator/src/test/resources/valid-test-schema.json
new file mode 100644
index 0000000..26e48a5
--- /dev/null
+++ b/test/mocks/pnfsimulator/src/test/resources/valid-test-schema.json
@@ -0,0 +1,19 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-07/schema#",
+  "properties": {
+    "key1": {
+      "type": "string"
+    },
+    "key2": {
+      "type": "string"
+    },
+    "key3": {
+      "type": "string"
+    }
+  },
+  "required": [
+    "key1",
+    "key2"
+  ]
+}
