Merge "Add VidController junits"
diff --git a/deliveries/pom.xml b/deliveries/pom.xml
index 2dad0d4..e366974 100755
--- a/deliveries/pom.xml
+++ b/deliveries/pom.xml
@@ -62,7 +62,7 @@
 									<descriptor>assembly/assembly-for-plugin.xml</descriptor>

 								</assembly>

 								<tags>

-								  <tag>3.0-STAGING-latest</tag>

+								  <tag>4.0-STAGING-latest</tag>

 								  <tag>latest</tag>

 								</tags>

 								    

diff --git a/deliveries/src/main/docker/docker-files/Dockerfile b/deliveries/src/main/docker/docker-files/Dockerfile
index ddaa861..8cd2bc7 100755
--- a/deliveries/src/main/docker/docker-files/Dockerfile
+++ b/deliveries/src/main/docker/docker-files/Dockerfile
@@ -29,7 +29,7 @@
 ENV VID_AAI_PORT 8443

 ENV VID_APP_DISPLAY_NAME VID

 ENV VID_ECOMP_SHARED_CONTEXT_REST_URL https://portal.api.simpledemo.onap.org:8080/onapportal/context

-ENV VID_MSO_SERVER_URL http://vm1.mso.simpledemo.onap.org:8080

+ENV VID_MSO_SERVER_URL http://vm1.mso.simpledemo.onap.org:8080/onap/so/infra

 ENV VID_MYLOGIN_FEED_DIRECTORY /tmp/MyLogins

 ENV VID_MSO_USER InfraPortalClient

 ENV VID_MSO_PASS OBF:1ih71i271vny1yf41ymf1ylz1yf21vn41hzj1icz

@@ -49,6 +49,7 @@
 ENV VID_ECOMP_REDIRECT_URL  http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/login.htm

 ENV VID_ECOMP_REST_URL http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/auxapi

 ENV VID_ECOMP_SHARED_CONTEXT_REST_URL http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/context

+ENV VID_ROLE_ACCESS_CENTRALIZED local

 ENV VID_CONTACT_US_LINK https://todo_contact_us_link.com

 

 ENV VID_DECRYPTION_KEY AGLDdG4D04BKm2IxIWEr8o=

diff --git a/epsdk-app-onap/pom.xml b/epsdk-app-onap/pom.xml
index 025b63a..9b0136f 100755
--- a/epsdk-app-onap/pom.xml
+++ b/epsdk-app-onap/pom.xml
@@ -8,7 +8,7 @@
 		the Portal team. -->

 	<groupId>org.onap.vid</groupId>

 	<artifactId>epsdk-app-onap</artifactId>

-	<version>3.0.0-SNAPSHOT</version>

+	<version>4.0.0-SNAPSHOT</version>

 	<packaging>war</packaging>

 	<name>ECOMP SDK Webapp for OpenSource</name>

 	<description>ECOMP SDK Web Application for public release</description>

diff --git a/epsdk-app-onap/src/main/resources/portal.properties b/epsdk-app-onap/src/main/resources/portal.properties
index 104e85d..edb3580 100755
--- a/epsdk-app-onap/src/main/resources/portal.properties
+++ b/epsdk-app-onap/src/main/resources/portal.properties
@@ -61,6 +61,9 @@
 # URL of the ECOMP Portal REST API

 ecomp_rest_url = http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/auxapi

 

+# Non AAF Mode

+role_access_centralized = local

+

 # Applications do not need to run a UEB listener after 1607.

 ueb_listeners_enable = false

 

diff --git a/epsdk-app-onap/src/main/resources/portal_template.properties b/epsdk-app-onap/src/main/resources/portal_template.properties
index d01413a..51f3949 100755
--- a/epsdk-app-onap/src/main/resources/portal_template.properties
+++ b/epsdk-app-onap/src/main/resources/portal_template.properties
@@ -13,6 +13,9 @@
 # URL of the ECOMP Portal REST API

 ecomp_rest_url = ${VID_ECOMP_REST_URL}

 

+# AAF Mode

+role_access_centralized = ${VID_ROLE_ACCESS_CENTRALIZED}

+

 # UEB servers

 ueb_url_list = ${VID_UEB_URL_LIST}

 

diff --git a/epsdk-app-onap/src/main/resources/vid-schema.sql b/epsdk-app-onap/src/main/resources/vid-schema.sql
index 3f15c88..2833cbd 100755
--- a/epsdk-app-onap/src/main/resources/vid-schema.sql
+++ b/epsdk-app-onap/src/main/resources/vid-schema.sql
@@ -33,6 +33,22 @@
 CREATE SCHEMA IF NOT EXISTS `vid_openecomp_epsdk` ;

 

 USE vid_openecomp_epsdk;

+

+

+CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`schema_info` (

+  `SCHEMA_ID` VARCHAR(25) NOT NULL,

+  `SCHEMA_DESC` VARCHAR(75) NOT NULL,

+  `DATASOURCE_TYPE` VARCHAR(100) NULL DEFAULT NULL,

+  `CONNECTION_URL` VARCHAR(200) NOT NULL,

+  `USER_NAME` VARCHAR(45) NOT NULL,

+  `PASSWORD` VARCHAR(45) NULL DEFAULT NULL,

+  `DRIVER_CLASS` VARCHAR(100) NOT NULL,

+  `MIN_POOL_SIZE` INT(11) NOT NULL,

+  `MAX_POOL_SIZE` INT(11) NOT NULL,

+  `IDLE_CONNECTION_TEST_PERIOD` INT(11) NOT NULL)

+ENGINE = InnoDB

+DEFAULT CHARACTER SET = utf8;

+

 -- ----------------------------------------------------------------------------

 -- Table vid_openecomp_epsdk.cr_favorite_reports

 -- ----------------------------------------------------------------------------

diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system_template.properties b/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system_template.properties
index 60ef9a7..06a2e6b 100755
--- a/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system_template.properties
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system_template.properties
@@ -103,17 +103,17 @@
 mso.user.name=${VID_MSO_USER}

 mso.password.x=${VID_MSO_PASS}

 #E2E is v3

-mso.restapi.svc.e2einstance=/onap/so/infra/e2eServiceInstances/v3

+mso.restapi.svc.e2einstance=/e2eServiceInstances/v3

 mso.restapi.svc.instance=/serviceInstantiation/v7/serviceInstances

 mso.restapi.svc.instance.deleteAndUnassign=/serviceInstantiation/v7/serviceInstances

-mso.restapi.vnf.instance=/onap/so/infra/serviceInstances/v6/<service_instance_id>/vnfs

-mso.restapi.vnf.changemanagement.instance=/onap/so/infra/serviceInstances/v6/<service_instance_id>/vnfs/<vnf_instance_id>/<request_type>

-mso.restapi.network.instance=/onap/so/infra/serviceInstances/v6/<service_instance_id>/networks

-mso.restapi.vf.module.scaleout=/onap/so/infra/serviceInstantiation/v7/serviceInstances/<service_instance_id>/vnfs/<vnf_instance_id>/vfModules/scaleOut

-mso.restapi.vf.module.instance=/onap/so/infra//serviceInstances/v6/<service_instance_id>/vnfs/<vnf_instance_id>/vfModules

-mso.restapi.volume.group.instance=/onap/so/infra/serviceInstances/v6/<service_instance_id>/vnfs/<vnf_instance_id>/volumeGroups

-mso.restapi.get.orc.req=/onap/so/infra/orchestrationRequests/v6

-mso.restapi.get.orc.reqs=/onap/so/infra/orchestrationRequests/v6?

+mso.restapi.vnf.instance=/serviceInstances/v6/<service_instance_id>/vnfs

+mso.restapi.vnf.changemanagement.instance=/serviceInstances/v6/<service_instance_id>/vnfs/<vnf_instance_id>/<request_type>

+mso.restapi.network.instance=/serviceInstances/v6/<service_instance_id>/networks

+mso.restapi.vf.module.scaleout=/serviceInstantiation/v7/serviceInstances/<service_instance_id>/vnfs/<vnf_instance_id>/vfModules/scaleOut

+mso.restapi.vf.module.instance=/serviceInstances/v6/<service_instance_id>/vnfs/<vnf_instance_id>/vfModules

+mso.restapi.volume.group.instance=/serviceInstances/v6/<service_instance_id>/vnfs/<vnf_instance_id>/volumeGroups

+mso.restapi.get.orc.req=/orchestrationRequests/v6

+mso.restapi.get.orc.reqs=/orchestrationRequests/v6?

 mso.restapi.get.man.tasks=/tasks/v1

 mso.restapi.configurations=/serviceInstances/v6/<service_instance_id>/configurations

 mso.restapi.configuration.instance=${mso.restapi.configurations}/<configuration_id>

@@ -144,4 +144,4 @@
 mso.dme2.client.read.timeout=${MSO_DME2_CLIENT_READ_TIMEOUT}

 mso.dme2.server.url=${MSO_DME2_SERVER_URL}

 mso.dme2.enabled=${MSO_DME2_ENABLED}

-

+scheduler.basic.auth=

diff --git a/epsdk-app-onap/version.properties b/epsdk-app-onap/version.properties
index 02144f0..9723960 100644
--- a/epsdk-app-onap/version.properties
+++ b/epsdk-app-onap/version.properties
@@ -2,7 +2,7 @@
 # Note that these variables cannot be structured (e.g. : version.release or version.snapshot etc... )

 # because they are used in Jenkins, whose plug-in doesn't support

 

-major=3

+major=4

 minor=0

 patch=0

 

diff --git a/pom.xml b/pom.xml
index e34fc4d..7ec5032 100644
--- a/pom.xml
+++ b/pom.xml
@@ -80,7 +80,7 @@
 	<properties>

 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

 		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

-		<build.version>3.0.0-SNAPSHOT</build.version>

+		<build.version>4.0.0-SNAPSHOT</build.version>

 		<nexusproxy>https://nexus.onap.org</nexusproxy>

 		<snapshotNexusPath>/content/repositories/snapshots/</snapshotNexusPath>

 		<releaseNexusPath>/content/repositories/releases/</releaseNexusPath>

@@ -268,5 +268,5 @@
 			<version>4.5.3</version>

 		</dependency>

 	</dependencies>

-	<version>3.0.0-SNAPSHOT</version>

+	<version>4.0.0-SNAPSHOT</version>

 </project>

diff --git a/version.properties b/version.properties
index 02144f0..9723960 100644
--- a/version.properties
+++ b/version.properties
@@ -2,7 +2,7 @@
 # Note that these variables cannot be structured (e.g. : version.release or version.snapshot etc... )

 # because they are used in Jenkins, whose plug-in doesn't support

 

-major=3

+major=4

 minor=0

 patch=0

 

diff --git a/vid-app-common/pom.xml b/vid-app-common/pom.xml
index 5082129..4795103 100755
--- a/vid-app-common/pom.xml
+++ b/vid-app-common/pom.xml
@@ -9,7 +9,7 @@
 		inherit from a parent maven module. -->

 	<groupId>org.onap.vid</groupId>

 	<artifactId>vid-app-common</artifactId>

-	<version>3.0.0-SNAPSHOT</version>

+	<version>4.0.0-SNAPSHOT</version>

 	<packaging>war</packaging>

 	<name>VID Common</name>

 	<description>VID Common code for opensource version</description>

diff --git a/vid-app-common/src/main/java/org/onap/vid/category/AddCategoryOptionResponse.java b/vid-app-common/src/main/java/org/onap/vid/category/AddCategoryOptionResponse.java
index 89d3963..b19ea57 100644
--- a/vid-app-common/src/main/java/org/onap/vid/category/AddCategoryOptionResponse.java
+++ b/vid-app-common/src/main/java/org/onap/vid/category/AddCategoryOptionResponse.java
@@ -1,5 +1,27 @@
 package org.onap.vid.category;
 
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright © 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright 2018 Nokia
+ * ================================================================================
+ * 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=========================================================
+ */
+
 import org.onap.vid.model.ListOfErrorsResponse;
 
 import java.util.List;
@@ -9,6 +31,10 @@
     public AddCategoryOptionResponse() {
     }
 
+    public AddCategoryOptionResponse(String error) {
+        errors.add(error);
+    }
+
     public AddCategoryOptionResponse(List<String> errors) {
         super(errors);
     }
diff --git a/vid-app-common/src/main/java/org/onap/vid/category/AddCategoryOptionsRequest.java b/vid-app-common/src/main/java/org/onap/vid/category/AddCategoryOptionsRequest.java
index 5db4746..8e9b144 100644
--- a/vid-app-common/src/main/java/org/onap/vid/category/AddCategoryOptionsRequest.java
+++ b/vid-app-common/src/main/java/org/onap/vid/category/AddCategoryOptionsRequest.java
@@ -1,7 +1,30 @@
 package org.onap.vid.category;
 
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright © 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright 2018 Nokia
+ * ================================================================================
+ * 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=========================================================
+ */
+
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 public class AddCategoryOptionsRequest {
 
@@ -10,4 +33,17 @@
 	public AddCategoryOptionsRequest() {
 		options = new ArrayList<>();
 	}
+
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) return true;
+		if (o == null || this.getClass() != o.getClass()) return false;
+		AddCategoryOptionsRequest that = (AddCategoryOptionsRequest) o;
+		return Objects.equals(this.options, that.options);
+	}
+
+	@Override
+	public int hashCode() {
+		return Objects.hash(this.options);
+	}
 }
diff --git a/vid-app-common/src/main/java/org/onap/vid/category/CategoryParameterOptionRep.java b/vid-app-common/src/main/java/org/onap/vid/category/CategoryParameterOptionRep.java
index 355e548..dc0ecba 100644
--- a/vid-app-common/src/main/java/org/onap/vid/category/CategoryParameterOptionRep.java
+++ b/vid-app-common/src/main/java/org/onap/vid/category/CategoryParameterOptionRep.java
@@ -1,5 +1,29 @@
 package org.onap.vid.category;
 
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright © 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright 2018 Nokia
+ * ================================================================================
+ * 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=========================================================
+ */
+
+import java.util.Objects;
+
 public class CategoryParameterOptionRep {
 
     private String id;
@@ -28,4 +52,18 @@
     public void setName(String name) {
         this.name = name;
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || this.getClass() != o.getClass()) return false;
+        CategoryParameterOptionRep that = (CategoryParameterOptionRep) o;
+        return Objects.equals(this.id, that.id) &&
+                Objects.equals(this.name, that.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.id, this.name);
+    }
 }
diff --git a/vid-app-common/src/main/java/org/onap/vid/client/SyncRestClient.java b/vid-app-common/src/main/java/org/onap/vid/client/SyncRestClient.java
index 84e83e8..a3ff5f9 100644
--- a/vid-app-common/src/main/java/org/onap/vid/client/SyncRestClient.java
+++ b/vid-app-common/src/main/java/org/onap/vid/client/SyncRestClient.java
@@ -23,6 +23,7 @@
 import io.joshworks.restclient.http.HttpResponse;
 import io.joshworks.restclient.http.JsonNode;
 import io.joshworks.restclient.http.RestClient;
+import io.joshworks.restclient.http.exceptions.RestClientException;
 import io.joshworks.restclient.http.mapper.ObjectMapper;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
@@ -39,7 +40,7 @@
 import java.security.NoSuchAlgorithmException;
 import java.security.KeyManagementException;
 import java.security.cert.CertificateException;
-import javax.net.ssl.SSLHandshakeException;
+import javax.net.ssl.SSLException;
 import java.security.KeyStoreException;
 import java.text.SimpleDateFormat;
 import javax.net.ssl.SSLContext;
@@ -134,6 +135,11 @@
     }
 
     @Override
+    public <T> HttpResponse<T> delete(String url, Map<String, String> headers, Object body, Class<T> responseClass) {
+        return callWithRetryOverHttp(url, url2 -> restClient.delete(url2).headers(headers).body(body).asObject(responseClass));
+    }
+
+    @Override
     public <T> HttpResponse<T> delete(String url, Map<String, String> headers, Class<T> responseClass) {
         return callWithRetryOverHttp(url, url2 -> restClient.delete(url2).headers(headers).asObject(responseClass));
     }
@@ -150,13 +156,13 @@
 
     @SneakyThrows
     private <T> HttpResponse<T> callWithRetryOverHttp(String url,
-        CheckedFunction1<String, HttpResponse<T>> httpRequest) {
+                                                      CheckedFunction1<String, HttpResponse<T>> httpRequest) {
         try {
             return httpRequest.apply(url);
-        } catch (Exception e) {
-            if (e.getCause() instanceof SSLHandshakeException) {
+        } catch (RestClientException e) {
+            if (e.getCause() instanceof SSLException) {
                 logger.warn(EELFLoggerDelegate.debugLogger,
-                    DATE_FORMAT.format(new Date()) + TRY_TO_CALL_OVER_HTTP, e);
+                        DATE_FORMAT.format(new Date()) + TRY_TO_CALL_OVER_HTTP, e);
                 return httpRequest.apply(url.replaceFirst(HTTPS_SCHEMA, HTTP_SCHEMA));
             }
             throw e;
diff --git a/vid-app-common/src/main/java/org/onap/vid/client/SyncRestClientInterface.java b/vid-app-common/src/main/java/org/onap/vid/client/SyncRestClientInterface.java
index 142adde..ae2f838 100644
--- a/vid-app-common/src/main/java/org/onap/vid/client/SyncRestClientInterface.java
+++ b/vid-app-common/src/main/java/org/onap/vid/client/SyncRestClientInterface.java
@@ -27,6 +27,8 @@
 
     <T> HttpResponse<T> put(String url, Map<String, String> headers, Object body, Class<T> aClass);
 
+    <T> HttpResponse<T> delete(String url, Map<String, String> headers, Object body, Class<T> aClass);
+
     <T> HttpResponse<T> delete(String url, Map<String, String> headers, Class<T> aClass);
 
     HttpResponse<JsonNode> delete(String url, Map<String, String> headers);
diff --git a/vid-app-common/src/main/java/org/onap/vid/controllers/MaintenanceController.java b/vid-app-common/src/main/java/org/onap/vid/controllers/MaintenanceController.java
index 0976f40..1a3eb42 100644
--- a/vid-app-common/src/main/java/org/onap/vid/controllers/MaintenanceController.java
+++ b/vid-app-common/src/main/java/org/onap/vid/controllers/MaintenanceController.java
@@ -1,6 +1,30 @@
 package org.onap.vid.controllers;
 
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright © 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright 2018 Nokia
+ * ================================================================================
+ * 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=========================================================
+ */
 
+import static org.onap.vid.utils.Logging.getMethodCallerName;
+
+import javax.ws.rs.ForbiddenException;
 import org.onap.portalsdk.core.controller.UnRestrictedBaseController;
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
 import org.onap.vid.category.AddCategoryOptionResponse;
@@ -14,124 +38,114 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.ForbiddenException;
-import java.util.Arrays;
-import java.util.Collections;
-
-import static org.onap.vid.utils.Logging.getMethodCallerName;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * Controler for APIs that are used only by vid operators
  */
 
 @RestController
-@RequestMapping(MaintenanceController.MAINTENANCE)
+@RequestMapping("maintenance")
 public class MaintenanceController extends UnRestrictedBaseController {
 
-    public static final String MAINTENANCE = "maintenance";
+    private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(MaintenanceController.class);
+    private CategoryParameterService categoryParameterService;
 
     @Autowired
-    protected CategoryParameterService categoryParameterService;
-    private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(MaintenanceController.class);
+    public MaintenanceController(CategoryParameterService categoryParameterService) {
+        this.categoryParameterService = categoryParameterService;
+    }
 
     /**
      * Add list of options to one category parameter
-     * @param request the request
-     * @return the new option
-     * @throws Exception the exception
      */
     @RequestMapping(value = "/category_parameter/{categoryName}", method = RequestMethod.POST)
-    public ResponseEntity addCategoryOptions (
-            HttpServletRequest request, @PathVariable String categoryName, @RequestBody AddCategoryOptionsRequest option) {
+    public ResponseEntity addCategoryOptions(@PathVariable String categoryName,
+        @RequestBody AddCategoryOptionsRequest option) {
         debugStartLog();
         try {
-            AddCategoryOptionResponse response = categoryParameterService.createCategoryParameterOptions(categoryName, option);
-            HttpStatus httpStatus = response.getErrors().size()>0 ? HttpStatus.MULTI_STATUS : HttpStatus.OK;
+            AddCategoryOptionResponse response = categoryParameterService
+                .createCategoryParameterOptions(categoryName, option);
+            HttpStatus httpStatus = response.getErrors().isEmpty() ? HttpStatus.OK : HttpStatus.MULTI_STATUS;
             debugEndLog(response);
-            return new ResponseEntity<>(response, httpStatus);
-        }
-        catch (CategoryParameterServiceImpl.UnfoundedCategoryException exception) {
-            return new ResponseEntity<>(new AddCategoryOptionResponse(Collections.singletonList(exception.getMessage())), HttpStatus.NOT_FOUND);
-        }
-        catch (Exception exception) {
+            return createResponseWithBody(httpStatus, response);
+        } catch (CategoryParameterServiceImpl.UnfoundedCategoryException exception) {
+            return createResponseWithBody(HttpStatus.NOT_FOUND, new AddCategoryOptionResponse(exception.getMessage()));
+        } catch (RuntimeException exception) {
             LOGGER.error("failed to add option to parameter category " + categoryName, exception);
-            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
         }
     }
 
     @RequestMapping(value = "/category_parameter/{categoryName}", method = RequestMethod.PUT)
-    public ResponseEntity updateNameForOption (
-            HttpServletRequest request, @PathVariable String categoryName, @RequestBody CategoryParameterOptionRep option) {
+    public ResponseEntity updateNameForOption(@PathVariable String categoryName,
+        @RequestBody CategoryParameterOptionRep option) {
         debugStartLog();
         try {
-            AddCategoryOptionResponse response = categoryParameterService.updateCategoryParameterOption(categoryName, option);
-            HttpStatus httpStatus = response.getErrors().size()>0 ? HttpStatus.MULTI_STATUS : HttpStatus.OK;
+            AddCategoryOptionResponse response = categoryParameterService
+                .updateCategoryParameterOption(categoryName, option);
+            HttpStatus httpStatus = response.getErrors().isEmpty() ? HttpStatus.OK : HttpStatus.MULTI_STATUS;
             debugEndLog(response);
-            return new ResponseEntity<>(response, httpStatus);
-        }
-        catch (ForbiddenException exception) {
-            return new ResponseEntity<>(new AddCategoryOptionResponse(Collections.singletonList(exception.getMessage())), HttpStatus.FORBIDDEN);
-        }
-        catch (CategoryParameterServiceImpl.UnfoundedCategoryException|CategoryParameterServiceImpl.UnfoundedCategoryOptionException exception) {
-            return new ResponseEntity<>(new AddCategoryOptionResponse(Collections.singletonList(exception.getMessage())), HttpStatus.NOT_FOUND);
-        }
-        catch (CategoryParameterServiceImpl.AlreadyExistOptionNameException exception) {
-            return new ResponseEntity<>(new AddCategoryOptionResponse(Collections.singletonList(exception.getMessage())), HttpStatus.CONFLICT);
-        }
-        catch (Exception exception) {
+            return createResponseWithBody(httpStatus, response);
+        } catch (ForbiddenException exception) {
+            return createResponseWithBody(HttpStatus.FORBIDDEN, new AddCategoryOptionResponse(exception.getMessage()));
+        } catch (CategoryParameterServiceImpl.UnfoundedCategoryException | CategoryParameterServiceImpl.UnfoundedCategoryOptionException exception) {
+            return createResponseWithBody(HttpStatus.NOT_FOUND, new AddCategoryOptionResponse(exception.getMessage()));
+
+        } catch (CategoryParameterServiceImpl.AlreadyExistOptionNameException exception) {
+            return createResponseWithBody(HttpStatus.CONFLICT, new AddCategoryOptionResponse(exception.getMessage()));
+
+        } catch (RuntimeException exception) {
             LOGGER.error("failed to update option to parameter category " + categoryName, exception);
-            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
         }
     }
 
     /**
      * Gets the owning entity properties.
-     * @param request the request
-     * @return the property
-     * @throws Exception the exception
      */
     @RequestMapping(value = "/category_parameter", method = RequestMethod.GET)
-    public ResponseEntity getCategoryParameter(HttpServletRequest request, @RequestParam(value="familyName", required = true) Family familyName) {
+    public ResponseEntity getCategoryParameter(@RequestParam(value = "familyName", required = true) Family familyName) {
         debugStartLog();
         try {
             CategoryParametersResponse response = categoryParameterService.getCategoryParameters(familyName);
             debugEndLog(response);
-            return new ResponseEntity<>(response, HttpStatus.OK);
-        }
-        catch (Exception exception) {
+            return ResponseEntity.ok().body(response);
+        } catch (RuntimeException exception) {
             LOGGER.error("failed to retrieve category parameter list from DB.", exception);
-            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
         }
     }
 
-
     /**
      * Delete option of the category.
-     * @param request the request
-     * @throws Exception the exception
      */
-    @RequestMapping(value = "/delete_category_parameter/{categoryName}", method = RequestMethod.POST)
-    public ResponseEntity deleteCategoryOption (
-            HttpServletRequest request, @PathVariable String categoryName, @RequestBody CategoryParameterOption option) {
+    @RequestMapping(value = "/delete_category_parameter/{categoryName}", method = RequestMethod.DELETE)
+    public ResponseEntity deleteCategoryOption(@PathVariable String categoryName,
+        @RequestBody CategoryParameterOption option) {
         debugStartLog();
 
         try {
             categoryParameterService.deleteCategoryOption(categoryName, option);
             debugEndLog(HttpStatus.OK);
-            return new ResponseEntity<>(HttpStatus.OK);
-        }
-        catch (CategoryParameterServiceImpl.UnfoundedCategoryException exception) {
-            return new ResponseEntity<>(new AddCategoryOptionResponse(Arrays.asList(exception.getMessage())), HttpStatus.NOT_FOUND);
-        }
-        catch (Exception exception) {
+            return ResponseEntity.status(HttpStatus.OK).build();
+        } catch (CategoryParameterServiceImpl.UnfoundedCategoryException exception) {
+            return createResponseWithBody(HttpStatus.NOT_FOUND, new AddCategoryOptionResponse(exception.getMessage()));
+        } catch (RuntimeException exception) {
             LOGGER.error("failed to add/update owning entity option", exception);
-            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
         }
     }
 
+    private ResponseEntity createResponseWithBody(HttpStatus status, AddCategoryOptionResponse response) {
+        return ResponseEntity.status(status).body(response);
+    }
+
     private void debugStartLog() {
         LOGGER.debug(EELFLoggerDelegate.debugLogger, "start {}({})", getMethodCallerName());
     }
diff --git a/vid-app-common/src/main/java/org/onap/vid/job/command/InProgressStatusCommand.java b/vid-app-common/src/main/java/org/onap/vid/job/command/InProgressStatusCommand.java
index cee5af6..6685a63 100644
--- a/vid-app-common/src/main/java/org/onap/vid/job/command/InProgressStatusCommand.java
+++ b/vid-app-common/src/main/java/org/onap/vid/job/command/InProgressStatusCommand.java
@@ -23,6 +23,7 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.collect.ImmutableMap;
 import io.joshworks.restclient.http.HttpResponse;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
 import org.onap.vid.job.Job.JobStatus;
 import org.onap.vid.job.JobCommand;
 import org.onap.vid.job.NextCommand;
@@ -30,13 +31,13 @@
 import org.onap.vid.mso.rest.AsyncRequestStatus;
 import org.onap.vid.services.AsyncInstantiationBusinessLogic;
 import org.onap.vid.services.AuditService;
-import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 
 import javax.inject.Inject;
 import java.util.Map;
+import java.util.Objects;
 import java.util.UUID;
 
 
@@ -68,33 +69,38 @@
         init(jobUuid, requestId);
     }
 
+    InProgressStatusCommand(AsyncInstantiationBusinessLogic asyncInstantiationBusinessLogic, MsoInterface msoInterface, AuditService auditService, UUID jobUuid, String requestId) {
+        this(jobUuid, requestId);
+        this.asyncInstantiationBL = asyncInstantiationBusinessLogic;
+        this.restMso = msoInterface;
+        this.auditService = auditService;
+    }
+
     @Override
     public NextCommand call() {
 
         try {
-            String path = asyncInstantiationBL.getOrchestrationRequestsPath()+"/"+requestId;
+            String path = asyncInstantiationBL.getOrchestrationRequestsPath() + "/" + requestId;
             HttpResponse<AsyncRequestStatus> msoResponse = restMso.get(path, AsyncRequestStatus.class);
 
 
             JobStatus jobStatus;
             if (msoResponse.getStatus() >= 400 || msoResponse.getBody() == null) {
-                auditService.setFailedAuditStatusFromMso(jobUuid, requestId, msoResponse.getStatus(), msoResponse.getBody().toString());
+                auditService.setFailedAuditStatusFromMso(jobUuid, requestId, msoResponse.getStatus(), Objects.toString(msoResponse.getBody()));
                 LOGGER.error(EELFLoggerDelegate.errorLogger,
                         "Failed to get orchestration status for {}. Status code: {},  Body: {}",
-                        requestId, msoResponse.getStatus(), msoResponse.getRawBody().toString());
+                        requestId, msoResponse.getStatus(), Objects.toString(msoResponse.getRawBody()));
                 return new NextCommand(JobStatus.IN_PROGRESS, this);
-            }
-            else {
+            } else {
                 jobStatus = asyncInstantiationBL.calcStatus(msoResponse.getBody());
             }
 
-            asyncInstantiationBL.auditMsoStatus(jobUuid,msoResponse.getBody().request);
+            asyncInstantiationBL.auditMsoStatus(jobUuid, msoResponse.getBody().request);
 
 
             if (jobStatus == JobStatus.FAILED) {
                 asyncInstantiationBL.handleFailedInstantiation(jobUuid);
-            }
-            else {
+            } else {
                 asyncInstantiationBL.updateServiceInfoAndAuditStatus(jobUuid, jobStatus);
             }
             //in case of JobStatus.PAUSE we leave the job itself as IN_PROGRESS, for keep tracking job progress
@@ -128,5 +134,4 @@
         return ImmutableMap.of("requestId", requestId);
     }
 
-
 }
diff --git a/vid-app-common/src/main/java/org/onap/vid/job/command/ServiceInstantiationCommand.java b/vid-app-common/src/main/java/org/onap/vid/job/command/ServiceInstantiationCommand.java
index 9d22b8b..958fc11 100644
--- a/vid-app-common/src/main/java/org/onap/vid/job/command/ServiceInstantiationCommand.java
+++ b/vid-app-common/src/main/java/org/onap/vid/job/command/ServiceInstantiationCommand.java
@@ -42,6 +42,7 @@
 
 import javax.inject.Inject;
 import java.util.Map;
+import java.util.Objects;
 import java.util.UUID;
 
 
@@ -73,6 +74,14 @@
         init(uuid, serviceInstantiationRequest, userId);
     }
 
+    ServiceInstantiationCommand(AsyncInstantiationBusinessLogic asyncInstantiationBL, AuditService auditService, MsoInterface msoInterface,
+                                UUID uuid, ServiceInstantiation serviceInstantiation, String userId) {
+        this(uuid, serviceInstantiation, userId);
+        this.asyncInstantiationBL = asyncInstantiationBL;
+        this.auditService = auditService;
+        this.restMso = msoInterface;
+    }
+
     @Override
     public NextCommand call() {
         RequestDetailsWrapper<ServiceInstantiationRequestDetails> requestDetailsWrapper ;
@@ -81,7 +90,6 @@
                     uuid, serviceInstantiationRequest, userId
             );
         }
-
         //Aai return bad response while checking names uniqueness
         catch (InvalidAAIResponseException exception) {
             LOGGER.error("Failed to check name uniqueness in AAI. VID will try again later", exception);
@@ -116,7 +124,7 @@
             return new NextCommand(jobStatus, new InProgressStatusCommand(uuid, requestId));
         } else {
             auditService.setFailedAuditStatusFromMso(uuid,null, msoResponse.getStatus(),
-                msoResponse.getBody().toString());
+                    Objects.toString(msoResponse.getBody()));
             return handleCommandFailed();
         }
 
diff --git a/vid-app-common/src/main/java/org/onap/vid/job/impl/JobAdapterImpl.java b/vid-app-common/src/main/java/org/onap/vid/job/impl/JobAdapterImpl.java
index 77e1dd2..59f12f4 100644
--- a/vid-app-common/src/main/java/org/onap/vid/job/impl/JobAdapterImpl.java
+++ b/vid-app-common/src/main/java/org/onap/vid/job/impl/JobAdapterImpl.java
@@ -33,14 +33,10 @@
     }
 
     @Override
-    public Job createJob(JobType jobType, AsyncJobRequest request, UUID templateId, String userId, Integer indexInBulk){
-        JobDaoImpl job = new JobDaoImpl();
-        job.setStatus(Job.JobStatus.PENDING);
-        job.setTypeAndData(jobType, ImmutableMap.of(
+    public Job createJob(JobType jobType, AsyncJobRequest request, UUID templateId, String userId, Integer indexInBulk) {
+        JobDaoImpl job = createJob(jobType, templateId, indexInBulk, ImmutableMap.of(
                 "request", request,
                 "userId", userId));
-        job.setTemplateId(templateId);
-        job.setIndexInBulk(indexInBulk);
         job.setUserId(userId);
         return job;
     }
@@ -59,14 +55,17 @@
         List<Job> jobList = new ArrayList<>(count + 1);
         UUID templateId = UUID.randomUUID();
         for (int i = 0; i < count; i++) {
-            Job child = new JobDaoImpl();
-            child.setTypeAndData(jobType, bulkRequest);
-            child.setStatus(Job.JobStatus.PENDING);
-            child.setTemplateId(templateId);
-            child.setIndexInBulk(i);
-            jobList.add(child);
+            jobList.add(createJob(jobType, templateId, i, bulkRequest));
         }
         return jobList;
     }
 
+    private JobDaoImpl createJob(JobType jobType, UUID templateId, Integer indexInBulk, Map<String, Object> data) {
+        JobDaoImpl job = new JobDaoImpl();
+        job.setStatus(Job.JobStatus.PENDING);
+        job.setTypeAndData(jobType, data);
+        job.setTemplateId(templateId);
+        job.setIndexInBulk(indexInBulk);
+        return job;
+    }
 }
diff --git a/vid-app-common/src/main/java/org/onap/vid/model/CategoryParameter.java b/vid-app-common/src/main/java/org/onap/vid/model/CategoryParameter.java
index 99824e7..91617ff 100644
--- a/vid-app-common/src/main/java/org/onap/vid/model/CategoryParameter.java
+++ b/vid-app-common/src/main/java/org/onap/vid/model/CategoryParameter.java
@@ -1,12 +1,41 @@
 package org.onap.vid.model;
 
-//import org.hibernate.annotations.Table;
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright © 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright 2018 Nokia
+ * ================================================================================
+ * 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=========================================================
+ */
 
-import javax.persistence.*;
 import java.util.HashSet;
+import java.util.Objects;
 import java.util.Set;
-
-//import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
 
 @Entity
 @Table(name = "vid_category_parameter", uniqueConstraints = @UniqueConstraint(columnNames = "name"))
@@ -72,4 +101,20 @@
     public void setIdSupported(boolean idSupported) {
         this.idSupported = idSupported;
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || this.getClass() != o.getClass()) return false;
+        CategoryParameter that = (CategoryParameter) o;
+        return this.idSupported == that.idSupported &&
+                Objects.equals(this.name, that.name) &&
+                Objects.equals(this.family, that.family) &&
+                Objects.equals(this.options, that.options);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.name, this.idSupported, this.family, this.options);
+    }
 }
diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/MsoBusinessLogic.java b/vid-app-common/src/main/java/org/onap/vid/mso/MsoBusinessLogic.java
index 96fb15a..0ecb925 100644
--- a/vid-app-common/src/main/java/org/onap/vid/mso/MsoBusinessLogic.java
+++ b/vid-app-common/src/main/java/org/onap/vid/mso/MsoBusinessLogic.java
@@ -28,7 +28,7 @@
 
     MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId);
 
-    MsoResponseWrapper scaleOutVfModuleInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId);
+    MsoResponseWrapper scaleOutVfModuleInstance(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId);
 
     MsoResponseWrapper createConfigurationInstance(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String serviceInstanceId);
 
diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/MsoBusinessLogicImpl.java b/vid-app-common/src/main/java/org/onap/vid/mso/MsoBusinessLogicImpl.java
index d4ca865..a6226e0 100644
--- a/vid-app-common/src/main/java/org/onap/vid/mso/MsoBusinessLogicImpl.java
+++ b/vid-app-common/src/main/java/org/onap/vid/mso/MsoBusinessLogicImpl.java
@@ -46,7 +46,11 @@
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
+import static java.util.stream.Collectors.collectingAndThen;
+import static java.util.stream.Collectors.toList;
 import static org.apache.commons.lang.StringUtils.upperCase;
 import static org.onap.vid.changeManagement.ChangeManagementRequest.MsoChangeManagementRequest;
 import static org.onap.vid.controllers.MsoController.*;
@@ -56,10 +60,14 @@
 
 public class MsoBusinessLogicImpl implements MsoBusinessLogic {
 
-    public static final String START = " start";
-    public static final String RESOURCE_TYPE = "resourceType";
-    FeatureManager featureManager;
-
+    static final List<String> DASHBOARD_ALLOWED_TYPES = Stream.of(RequestType.REPLACE_INSTANCE,
+            RequestType.UPDATE_INSTANCE,
+            RequestType.APPLY_UPDATED_CONFIG,
+            RequestType.IN_PLACE_SOFTWARE_UPDATE,
+            RequestType.SCALE_OUT)
+            .map(requestType -> requestType.toString().toUpperCase())
+            .collect(collectingAndThen(toList(), Collections::unmodifiableList));
+    private static final String RESOURCE_TYPE = "resourceType";
     /**
      * The Constant dateFormat.
      */
@@ -74,16 +82,16 @@
     private static final String SOURCE_OPERATIONAL_ENVIRONMENT = "VID";
     private static final ObjectMapper objectMapper = new ObjectMapper();
     /**
+     * The logger.
+     */
+    private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoBusinessLogicImpl.class);
+    /**
      * The Mso REST client
      * This should be replaced with mso client factory.
      */
     private final MsoInterface msoClientInterface;
+    FeatureManager featureManager;
 
-    /**
-     * The logger.
-     */
-    private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoBusinessLogicImpl.class);
-    
     @Autowired
     public MsoBusinessLogicImpl(MsoInterface msoClientInterface, FeatureManager featureManager) {
         this.msoClientInterface = msoClientInterface;
@@ -101,34 +109,26 @@
     // this function should get params from tosca and send them to instance at mso, then return success response.
     @Override
     public MsoResponseWrapper createSvcInstance(RequestDetails msoRequest) {
-        String methodName = "createSvcInstance ";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("createSvcInstance");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
 
         return msoClientInterface.createSvcInstance(msoRequest, endpoint);
     }
 
     @Override
-    public MsoResponseWrapper createE2eSvcInstance(Object msoRequest){
-        String methodName = "createE2eSvcInstance ";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
-
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE);
-
+    public MsoResponseWrapper createE2eSvcInstance(Object msoRequest) {
+        logInvocationInDebug("createE2eSvcInstance");
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE);
 
         return msoClientInterface.createE2eSvcInstance(msoRequest, endpoint);
-    } 
+    }
 
     @Override
     public MsoResponseWrapper createVnf(RequestDetails requestDetails, String serviceInstanceId) {
-        String methodName = "createVnf";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("createVnf");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
 
         String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
         return msoClientInterface.createVnf(requestDetails, vnf_endpoint);
@@ -136,11 +136,9 @@
 
     @Override
     public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String serviceInstanceId) {
-        String methodName = "createNwInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("createNwInstance");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
 
         String nw_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
         return msoClientInterface.createNwInstance(requestDetails, nw_endpoint);
@@ -148,11 +146,9 @@
 
     @Override
     public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
-        String methodName = "createVolumeGroupInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("createVolumeGroupInstance");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
 
         String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
         vnf_endpoint = vnf_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
@@ -162,11 +158,9 @@
 
     @Override
     public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
-        String methodName = "createVfModuleInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("createVfModuleInstance");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
 
         String partial_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
         String vf_module_endpoint = partial_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
@@ -175,22 +169,24 @@
     }
 
     @Override
-    public MsoResponseWrapper scaleOutVfModuleInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
-        String methodName = "scaleOutVfModuleInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+    public MsoResponseWrapper scaleOutVfModuleInstance(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
+        logInvocationInDebug("scaleOutVfModuleInstance");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_SCALE_OUT);
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_SCALE_OUT);
 
         String partial_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
         String vf_module_endpoint = partial_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
+        RequestDetailsWrapper wrapper = new RequestDetailsWrapper();
+        requestDetails.setVnfName(null);
+        requestDetails.setVnfInstanceId(null);
+        wrapper.requestDetails = requestDetails;
 
-        return msoClientInterface.createVfModuleInstance(requestDetails, vf_module_endpoint);
+        return msoClientInterface.scaleOutVFModuleInstance(wrapper, vf_module_endpoint);
     }
+
     @Override
     public MsoResponseWrapper createConfigurationInstance(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String serviceInstanceId) {
-        String methodName = "createConfigurationInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("createConfigurationInstance");
 
         String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATIONS);
         endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
@@ -200,24 +196,21 @@
 
     @Override
     public MsoResponseWrapper deleteE2eSvcInstance(Object requestDetails, String serviceInstanceId) {
-        String methodName = "deleteE2eSvcInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("deleteE2eSvcInstance");
 
-        String endpoint;
-	 	endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE) + "/" + serviceInstanceId;
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE) + "/" + serviceInstanceId;
 
         return msoClientInterface.deleteE2eSvcInstance(requestDetails, endpoint);
     }
 
     @Override
     public MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String serviceInstanceId, String serviceStatus) {
-        String methodName = "deleteSvcInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("deleteSvcInstance");
         String endpoint;
 
-        if (featureManager.isActive(FLAG_UNASSIGN_SERVICE)){
+        if (featureManager.isActive(FLAG_UNASSIGN_SERVICE)) {
             endpoint = validateEndpointPath(MsoProperties.MSO_DELETE_OR_UNASSIGN_REST_API_SVC_INSTANCE);
-            if (shouldUnassignService(serviceStatus)){
+            if (shouldUnassignService(serviceStatus)) {
                 logger.debug(EELFLoggerDelegate.debugLogger, "unassign service");
                 String svc_endpoint = endpoint + "/" + serviceInstanceId + "/unassign";
                 return msoClientInterface.unassignSvcInstance(requestDetails, svc_endpoint);
@@ -231,16 +224,14 @@
     }
 
     private boolean shouldUnassignService(String serviceStatus) {
-            return ImmutableList.of("created","pendingdelete","pending-delete", "assigned").contains(serviceStatus.toLowerCase());
+        return ImmutableList.of("created", "pendingdelete", "pending-delete", "assigned").contains(serviceStatus.toLowerCase());
     }
 
     @Override
     public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
-        String methodName = "deleteVnf";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("deleteVnf");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
         String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
         vnf_endpoint = vnf_endpoint + '/' + vnfInstanceId;
 
@@ -249,14 +240,10 @@
 
     @Override
     public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId, String vfModuleId) {
-        String methodName = "deleteVfModule";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("deleteVfModule");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
-
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
         String vf__modules_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId).replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
-
         String delete_vf_endpoint = vf__modules_endpoint + '/' + vfModuleId;
 
         return msoClientInterface.deleteVfModule(requestDetails, delete_vf_endpoint);
@@ -264,12 +251,9 @@
 
     @Override
     public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId, String volumeGroupId) {
-        String methodName = "deleteVolumeGroupInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("deleteVolumeGroupInstance");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
-
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
         String svc_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
         String vnf_endpoint = svc_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
         String delete_volume_group_endpoint = vnf_endpoint + "/" + volumeGroupId;
@@ -279,12 +263,9 @@
 
     @Override
     public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String serviceInstanceId, String networkInstanceId) {
-        String methodName = "deleteNwInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("deleteNwInstance");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
-
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
         String svc_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
         String delete_nw_endpoint = svc_endpoint + "/" + networkInstanceId;
 
@@ -294,7 +275,7 @@
     @Override
     public MsoResponseWrapper getOrchestrationRequest(String requestId) {
         String methodName = "getOrchestrationRequest";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug(methodName);
         try {
             String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQ);
             String path = p + "/" + requestId;
@@ -302,8 +283,7 @@
             return msoClientInterface.getOrchestrationRequest(path);
 
         } catch (Exception e) {
-            logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
-            logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
+            logException(methodName, e);
             throw e;
         }
     }
@@ -311,7 +291,7 @@
     @Override
     public MsoResponseWrapper getOrchestrationRequests(String filterString) {
         String methodName = "getOrchestrationRequest";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug(methodName);
         try {
             String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS);
             String path = p + filterString;
@@ -319,8 +299,7 @@
             return msoClientInterface.getOrchestrationRequest(path);
 
         } catch (Exception e) {
-            logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
-            logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
+            logException(methodName, e);
             throw e;
         }
     }
@@ -328,48 +307,51 @@
     @Override
     public List<Request> getOrchestrationRequestsForDashboard() {
         String methodName = "getOrchestrationRequestsForDashboard";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
-        List<Request> filteredOrchestrationRequests = new ArrayList<>();
+        logInvocationInDebug(methodName);
+
+        List<Request> dashboardOrchestrationReqs = new ArrayList<>();
         try {
-            String path = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS);
-            path += "filter=modelType:EQUALS:vnf";
-            RestObject<String> restObjStr = new RestObject<>();
-            String str = new String();
-            restObjStr.set(str);
+            List<RequestWrapper> vnfOrchestrationReqsWrappers = getOrchestrationRequestsByFilter("modelType", "vnf");
+            dashboardOrchestrationReqs = vnfOrchestrationReqsWrappers.stream()
+                    .filter(reqWrapper -> Objects.nonNull(reqWrapper.getRequest())
+                            && DASHBOARD_ALLOWED_TYPES.contains(upperCase(reqWrapper.getRequest().getRequestType())))
+                    .map(RequestWrapper::getRequest)
+                    .collect(Collectors.toList());
 
-            MsoResponseWrapper msoResponseWrapper = msoClientInterface.getOrchestrationRequestsForDashboard(str, "", path, restObjStr);
-            List<RequestWrapper> allOrchestrationRequests = deserializeOrchestrationRequestsJson(msoResponseWrapper.getEntity());
+            List<RequestWrapper> scaleOutOrchestrationReqWrappers = getOrchestrationRequestsByFilter("action", "scaleOut");
+            List<Request> scaleoutRequests = scaleOutOrchestrationReqWrappers.stream()
+                    .filter(reqWrapper -> Objects.nonNull(reqWrapper.getRequest()))
+                    .map(RequestWrapper::getRequest)
+                    .collect(Collectors.toList());
 
-            final ImmutableList<String> suppoertedRequestTypes = ImmutableList.of(
-                    RequestType.REPLACE_INSTANCE.toString().toUpperCase(),
-                    RequestType.UPDATE_INSTANCE.toString().toUpperCase(),
-                    RequestType.APPLY_UPDATED_CONFIG.toString().toUpperCase(),
-                    RequestType.IN_PLACE_SOFTWARE_UPDATE.toString().toUpperCase()
-            );
-
-            for (RequestWrapper currentRequest : allOrchestrationRequests) {
-                if (currentRequest.getRequest() != null
-                        && "vnf".equalsIgnoreCase(currentRequest.getRequest().getRequestScope())
-                        && suppoertedRequestTypes.contains(upperCase(currentRequest.getRequest().getRequestType()))
-                ) {
-                    filteredOrchestrationRequests.add(currentRequest.getRequest());
-                }
-            }
+            dashboardOrchestrationReqs.addAll(scaleoutRequests);
         } catch (Exception e) {
-            logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
-            logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
+            logException(methodName, e);
         }
-        return filteredOrchestrationRequests;
+        return dashboardOrchestrationReqs;
+    }
+
+    private String constructOrchestrationRequestFilter(String filterName, String filterValue) {
+        return String.format("%sfilter=%s:EQUALS:%s",
+                SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS), filterName, filterValue);
+    }
+
+    private List<RequestWrapper> getOrchestrationRequestsByFilter(String filterName, String filterValue) {
+        String orchestrationReqPath = constructOrchestrationRequestFilter(filterName, filterValue);
+        RestObject<String> restObjStr = new RestObject<>();
+        String str = new String();
+        restObjStr.set(str);
+        MsoResponseWrapper msoResponseWrapper = msoClientInterface.getOrchestrationRequestsForDashboard(str, "", orchestrationReqPath, restObjStr);
+        return deserializeOrchestrationRequestsJson(msoResponseWrapper.getEntity());
     }
 
     private List<RequestWrapper> deserializeOrchestrationRequestsJson(String orchestrationRequestsJson) {
-        String methodName = "deserializeOrchestrationRequestsJson";
-        logger.debug(dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("deserializeOrchestrationRequestsJson");
 
         ObjectMapper mapper = new ObjectMapper();
         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
         mapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true);
-        RequestList requestList = null;
+        RequestList requestList;
         try {
             requestList = mapper.readValue(orchestrationRequestsJson, RequestList.class);
         } catch (IOException e) {
@@ -382,7 +364,7 @@
     @Override
     public List<Task> getManualTasksByRequestId(String originalRequestId) {
         String methodName = "getManualTasksByRequestId";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug(methodName);
 
         try {
             String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_MAN_TASKS);
@@ -396,15 +378,13 @@
             return deserializeManualTasksJson(msoResponseWrapper.getEntity());
 
         } catch (Exception e) {
-            logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
-            logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
+            logException(methodName, e);
             throw e;
         }
     }
 
     private List<Task> deserializeManualTasksJson(String manualTasksJson) {
-        String methodName = "deserializeManualTasksJson";
-        logger.debug(dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("deserializeManualTasksJson");
 
         ObjectMapper mapper = new ObjectMapper();
         try {
@@ -419,7 +399,7 @@
     @Override
     public MsoResponseWrapper completeManualTask(RequestDetails requestDetails, String taskId) {
         String methodName = "completeManualTask";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug(methodName);
         try {
             String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_MAN_TASKS);
             String path = p + "/" + taskId + "/complete";
@@ -433,8 +413,7 @@
             return MsoUtil.wrapResponse(restObjStr);
 
         } catch (Exception e) {
-            logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
-            logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
+            logException(methodName, e);
             throw e;
         }
     }
@@ -442,7 +421,7 @@
     @Override
     public MsoResponseWrapper activateServiceInstance(RequestDetails requestDetails, String serviceInstanceId) {
         String methodName = "activateServiceInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug(methodName);
         try {
             String serviceEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
             String activateServicePath = serviceEndpoint + "/" + serviceInstanceId + ACTIVATE;
@@ -456,8 +435,7 @@
             return MsoUtil.wrapResponse(restObjStr);
 
         } catch (Exception e) {
-            logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
-            logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
+            logException(methodName, e);
             throw e;
         }
     }
@@ -465,8 +443,7 @@
 
     @Override
     public MsoResponseWrapperInterface updateVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
-        String methodName = "updateVnf";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("updateVnf");
 
         String endpoint;
         endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
@@ -477,11 +454,9 @@
 
     @Override
     public MsoResponseWrapperInterface replaceVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
-        String methodName = "replaceVnf";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("replaceVnf");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
         String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
         vnf_endpoint = vnf_endpoint.replace(VNF_INSTANCE_ID, vnfInstanceId);
         vnf_endpoint = vnf_endpoint.replace(REQUEST_TYPE, MsoChangeManagementRequest.REPLACE);
@@ -502,22 +477,17 @@
     @Override
     public RequestDetailsWrapper generateConfigMsoRequest(org.onap.vid.changeManagement.RequestDetails requestDetails) {
         validateUpdateVnfConfig(requestDetails);
-        RequestDetails ConfigUpdateRequest = new RequestDetails();
-        ConfigUpdateRequest.setRequestParameters(requestDetails.getRequestParameters());
-        ConfigUpdateRequest.setRequestInfo(requestDetails.getRequestInfo());
+        RequestDetails configUpdateRequest = new RequestDetails();
+        configUpdateRequest.setRequestParameters(requestDetails.getRequestParameters());
+        configUpdateRequest.setRequestInfo(requestDetails.getRequestInfo());
         RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
-        requestDetailsWrapper.requestDetails = ConfigUpdateRequest;
+        requestDetailsWrapper.requestDetails = configUpdateRequest;
         return requestDetailsWrapper;
     }
 
-
-
-
-
     @Override
     public MsoResponseWrapperInterface updateVnfSoftware(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
-        String methodName = "updateVnfSoftware";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("updateVnfSoftware");
         String vnf_endpoint = getChangeManagementEndpoint(serviceInstanceId, vnfInstanceId, MsoChangeManagementRequest.SOFTWARE_UPDATE); //workflow name in mso is different than workflow name in vid UI
         RequestDetailsWrapper finalRequestDetails = generateInPlaceMsoRequest(requestDetails);
         return msoClientInterface.changeManagementUpdate(finalRequestDetails, vnf_endpoint);
@@ -525,30 +495,28 @@
 
     @Override
     public MsoResponseWrapperInterface updateVnfConfig(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
-        String methodName = "updateVnfConfig";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("updateVnfConfig");
         RequestDetailsWrapper finalRequestDetails = generateConfigMsoRequest(requestDetails);
         String vnf_endpoint = getChangeManagementEndpoint(serviceInstanceId, vnfInstanceId, MsoChangeManagementRequest.CONFIG_UPDATE);
         return msoClientInterface.changeManagementUpdate(finalRequestDetails, vnf_endpoint);
     }
 
     private String getChangeManagementEndpoint(String serviceInstanceId, String vnfInstanceId, String vnfRequestType) {
-        String endpoint  = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
         String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
         vnf_endpoint = vnf_endpoint.replace(VNF_INSTANCE_ID, vnfInstanceId);
         vnf_endpoint = vnf_endpoint.replace(REQUEST_TYPE, vnfRequestType);
         return vnf_endpoint;
     }
 
-    private Map getChangeManagementPayload(RequestDetails requestDetails, String message){
-        if(requestDetails.getRequestParameters()==null||requestDetails.getRequestParameters().getAdditionalProperties()==null){
+    private Map getChangeManagementPayload(RequestDetails requestDetails, String message) {
+        if (requestDetails.getRequestParameters() == null || requestDetails.getRequestParameters().getAdditionalProperties() == null) {
             throw new BadRequestException(message);
         }
-        Object payloadRaw=requestDetails.getRequestParameters().getAdditionalProperties().get("payload");
-        try{
-            return objectMapper.readValue((String)payloadRaw,Map.class);
-        }
-        catch(Exception exception){
+        Object payloadRaw = requestDetails.getRequestParameters().getAdditionalProperties().get("payload");
+        try {
+            return objectMapper.readValue((String) payloadRaw, Map.class);
+        } catch (Exception exception) {
             throw new BadRequestException(message);
         }
     }
@@ -577,30 +545,12 @@
         }
     }
 
-    private void validateUpdateVnfConfig(RequestDetails requestDetails) {
-        final String noValidPayloadMsg = "No valid payload in " + ChangeManagementRequest.CONFIG_UPDATE + " request";
-
-        Map payload = getChangeManagementPayload(requestDetails, noValidPayloadMsg);
-        validateConfigUpdateVnfPayloadProperty(payload, noValidPayloadMsg, "request-parameters");
-        validateConfigUpdateVnfPayloadProperty(payload, noValidPayloadMsg, "configuration-parameters");
-    }
-
-    private void validateConfigUpdateVnfPayloadProperty(Map payload, String noValidPayloadMsg, String propertyName) {
-        final String noValidPayloadPropertyMsg = noValidPayloadMsg+ ", "+ propertyName + " property is not valid";
-        if(!payload.containsKey(propertyName)) {
-            throw new BadRequestException( noValidPayloadPropertyMsg);
-        }
-    }
-
     @Override
-    public MsoResponseWrapper deleteConfiguration(
-            org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper,
-            String serviceInstanceId,
-            String configurationId) {
+    public MsoResponseWrapper deleteConfiguration(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper,
+                                                  String serviceInstanceId,
+                                                  String configurationId) {
 
-        String methodName = "deleteConfiguration";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
-
+        logInvocationInDebug("deleteConfiguration");
         String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE);
         endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
         endpoint = endpoint.replace(CONFIGURATION_ID, configurationId);
@@ -615,8 +565,7 @@
             String configurationId,
             boolean isActivate) {
 
-        String methodName = "setConfigurationActiveStatus";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("setConfigurationActiveStatus");
 
         String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE);
         endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
@@ -629,9 +578,9 @@
     }
 
     @Override
-    public MsoResponseWrapper setServiceInstanceStatus(RequestDetails requestDetails , String serviceInstanceId, boolean isActivate) {
+    public MsoResponseWrapper setServiceInstanceStatus(RequestDetails requestDetails, String serviceInstanceId, boolean isActivate) {
+        logInvocationInDebug("setServiceInstanceStatus");
         String methodName = "setServiceInstanceStatus";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
         try {
             String serviceEndpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
             String endpoint = serviceEndpoint + "/" + serviceInstanceId;
@@ -644,7 +593,7 @@
             String str = "";
             restObjStr.set(str);
 
-            msoClientInterface.setServiceInstanceStatus(requestDetails , str, "", endpoint, restObjStr);
+            msoClientInterface.setServiceInstanceStatus(requestDetails, str, "", endpoint, restObjStr);
 
             return MsoUtil.wrapResponse(restObjStr);
 
@@ -661,8 +610,7 @@
             String serviceInstanceId,
             String configurationId,
             boolean isEnable) {
-        String methodName = "setPortOnConfigurationStatus";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("setPortOnConfigurationStatus");
 
         String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE);
         endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
@@ -676,7 +624,7 @@
 
 
     @Override
-    public  RequestDetailsWrapper<RequestDetails> createOperationalEnvironmentActivationRequestDetails(OperationalEnvironmentActivateInfo details) {
+    public RequestDetailsWrapper<RequestDetails> createOperationalEnvironmentActivationRequestDetails(OperationalEnvironmentActivateInfo details) {
         RequestDetails requestDetails = new RequestDetails();
         RequestInfo requestInfo = new RequestInfo();
         requestInfo.setAdditionalProperty(RESOURCE_TYPE, RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT);
@@ -750,7 +698,6 @@
     }
 
 
-
     @Override
     public RequestDetailsWrapper<OperationEnvironmentRequestDetails> convertParametersToRequestDetails(OperationalEnvironmentController.OperationalEnvironmentCreateBody input, String userId) {
         OperationEnvironmentRequestDetails.RequestInfo requestInfo = new OperationEnvironmentRequestDetails.RequestInfo(
@@ -779,8 +726,7 @@
 
     @Override
     public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String serviceInstanceId) {
-        String methodName = "removeRelationshipFromServiceInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("removeRelationshipFromServiceInstance");
 
         String serviceEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
         String removeRelationshipsPath = serviceEndpoint + "/" + serviceInstanceId + "/removeRelationships";
@@ -790,8 +736,7 @@
 
     @Override
     public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String serviceInstanceId) {
-        String methodName = "addRelationshipToServiceInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("addRelationshipToServiceInstance");
 
         String serviceEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
         String addRelationshipsPath = serviceEndpoint + "/" + serviceInstanceId + "/addRelationships";
@@ -799,8 +744,31 @@
         return msoClientInterface.addRelationshipToServiceInstance(requestDetails, addRelationshipsPath);
     }
 
+    private void validateUpdateVnfConfig(RequestDetails requestDetails) {
+        final String noValidPayloadMsg = "No valid payload in " + ChangeManagementRequest.CONFIG_UPDATE + " request";
 
-    public enum RequestType {
+        Map payload = getChangeManagementPayload(requestDetails, noValidPayloadMsg);
+        validateConfigUpdateVnfPayloadProperty(payload, noValidPayloadMsg, "request-parameters");
+        validateConfigUpdateVnfPayloadProperty(payload, noValidPayloadMsg, "configuration-parameters");
+    }
+
+    private void validateConfigUpdateVnfPayloadProperty(Map payload, String noValidPayloadMsg, String propertyName) {
+        final String noValidPayloadPropertyMsg = noValidPayloadMsg + ", " + propertyName + " property is not valid";
+        if (!payload.containsKey(propertyName)) {
+            throw new BadRequestException(noValidPayloadPropertyMsg);
+        }
+    }
+
+    private void logInvocationInDebug(String methodName) {
+        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + "  start");
+    }
+
+    private void logException(String methodName, Exception e) {
+        logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
+        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
+    }
+
+    enum RequestType {
 
         CREATE_INSTANCE("createInstance"),
         DELETE_INSTANCE("deleteInstance"),
@@ -810,27 +778,23 @@
         DEACTIVATE_INSTANCE("deactivateInstance"),
         APPLY_UPDATED_CONFIG("applyUpdatedConfig"),
         IN_PLACE_SOFTWARE_UPDATE("inPlaceSoftwareUpdate"),
+        SCALE_OUT("scaleOut"),
         UNKNOWN("unknown"),
         NOT_PROVIDED("not provided");
-        private final String value;
         private static final Map<String, RequestType> CONSTANTS = new HashMap<>();
 
         static {
-            for (RequestType c: values()) {
+            for (RequestType c : values()) {
                 CONSTANTS.put(c.value, c);
             }
         }
 
+        private final String value;
+
         RequestType(String value) {
             this.value = value;
         }
 
-        @JsonValue
-        @Override
-        public String toString() {
-            return this.value;
-        }
-
         @JsonCreator
         public static RequestType fromValue(String value) {
             RequestType constant = CONSTANTS.get(value);
@@ -840,5 +804,11 @@
                 return constant;
             }
         }
+
+        @JsonValue
+        @Override
+        public String toString() {
+            return this.value;
+        }
     }
 }
\ No newline at end of file
diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/MsoInterface.java b/vid-app-common/src/main/java/org/onap/vid/mso/MsoInterface.java
index 3cba12f..834f808 100644
--- a/vid-app-common/src/main/java/org/onap/vid/mso/MsoInterface.java
+++ b/vid-app-common/src/main/java/org/onap/vid/mso/MsoInterface.java
@@ -74,6 +74,8 @@
 
     MsoResponseWrapper createConfigurationInstance(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String endpoint);
 
+    MsoResponseWrapper scaleOutVFModuleInstance(RequestDetailsWrapper requestDetailsWrapper, String endpoint);
+
     MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String endpoint);
 
     MsoResponseWrapper unassignSvcInstance(RequestDetails requestDetails, String endpoint);
diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/rest/MsoRestClientNew.java b/vid-app-common/src/main/java/org/onap/vid/mso/rest/MsoRestClientNew.java
index 9cac3e4..37600f7 100644
--- a/vid-app-common/src/main/java/org/onap/vid/mso/rest/MsoRestClientNew.java
+++ b/vid-app-common/src/main/java/org/onap/vid/mso/rest/MsoRestClientNew.java
@@ -124,6 +124,14 @@
     }
 
     @Override
+    public MsoResponseWrapper scaleOutVFModuleInstance(RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
+        String methodName = "scaleOutVFModuleInstance";
+        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        String path = baseUrl + endpoint;
+        return createInstance(requestDetailsWrapper, path);
+    }
+
+    @Override
     public MsoResponseWrapper createConfigurationInstance(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
         String methodName = "createConfigurationInstance";
         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
@@ -478,7 +486,7 @@
         try {
             logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " calling Delete, path =[" + path + "]");
 
-            HttpResponse<String> response = client.delete(path, commonHeaders, String.class);
+            HttpResponse<String> response = client.delete(path, commonHeaders, request, String.class);
             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
 
             logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " w=" + w.getResponse());
diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/rest/RequestDetailsWrapper.java b/vid-app-common/src/main/java/org/onap/vid/mso/rest/RequestDetailsWrapper.java
index 0e320a3..20c8442 100644
--- a/vid-app-common/src/main/java/org/onap/vid/mso/rest/RequestDetailsWrapper.java
+++ b/vid-app-common/src/main/java/org/onap/vid/mso/rest/RequestDetailsWrapper.java
@@ -1,5 +1,34 @@
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Modifications Copyright (C) 2018 Nokia. 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.vid.mso.rest;
 
-public class RequestDetailsWrapper {
-    public RequestDetails requestDetails;
+public final class RequestDetailsWrapper {
+
+    private final RequestDetails requestDetails;
+
+    public RequestDetailsWrapper(RequestDetails requestDetails) {
+        this.requestDetails = requestDetails;
+    }
+
+    public RequestDetails getRequestDetails() {
+        return requestDetails;
+    }
 }
diff --git a/vid-app-common/src/main/java/org/onap/vid/services/AuditServiceImpl.java b/vid-app-common/src/main/java/org/onap/vid/services/AuditServiceImpl.java
index 13db1ae..b4806f1 100644
--- a/vid-app-common/src/main/java/org/onap/vid/services/AuditServiceImpl.java
+++ b/vid-app-common/src/main/java/org/onap/vid/services/AuditServiceImpl.java
@@ -1,3 +1,23 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2018 Nokia. 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.vid.services;
 
 import com.fasterxml.jackson.core.JsonParseException;
@@ -16,12 +36,12 @@
 
     @Inject
     private AsyncInstantiationBusinessLogic asyncInstantiationBL;
+    public static final String FAILED_MSO_REQUEST_STATUS = "FAILED";
 
     @Override
     public void setFailedAuditStatusFromMso(UUID jobUuid, String requestId, int statusCode, String msoResponse){
-        final String failedMsoRequestStatus = "FAILED";
         String additionalInfo = formatExceptionAdditionalInfo(statusCode, msoResponse);
-        asyncInstantiationBL.auditMsoStatus(jobUuid, failedMsoRequestStatus, requestId, additionalInfo);
+        asyncInstantiationBL.auditMsoStatus(jobUuid, FAILED_MSO_REQUEST_STATUS, requestId, additionalInfo);
     }
 
     private String formatExceptionAdditionalInfo(int statusCode, String msoResponse) {
diff --git a/vid-app-common/src/main/java/org/onap/vid/services/CategoryParameterServiceImpl.java b/vid-app-common/src/main/java/org/onap/vid/services/CategoryParameterServiceImpl.java
index fa531ff..b3d20a6 100644
--- a/vid-app-common/src/main/java/org/onap/vid/services/CategoryParameterServiceImpl.java
+++ b/vid-app-common/src/main/java/org/onap/vid/services/CategoryParameterServiceImpl.java
@@ -1,3 +1,23 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2018 Nokia. 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.vid.services;
 
 import org.onap.vid.category.AddCategoryOptionResponse;
@@ -20,6 +40,7 @@
 @Service
 public class CategoryParameterServiceImpl implements CategoryParameterService {
 
+    public static final String OPTION_ALREADY_EXIST_FOR_CATEGORY = "Option %s already exist for category %s";
     @Autowired
     private DataAccessService dataAccessService;
 
@@ -68,7 +89,7 @@
         Set<String> categoryOptions = categoryParameter.getOptions().stream().map(CategoryParameterOption::getName).collect(Collectors.toSet());
         for (String optionName : optionsRequest.options) {
             if (categoryOptions.contains(optionName)) {
-                response.getErrors().add(String.format("Option %s already exist for category %s", optionName, categoryName));
+                response.getErrors().add(String.format(OPTION_ALREADY_EXIST_FOR_CATEGORY, optionName, categoryName));
                 continue;
             }
             String appId = categoryParameter.isIdSupported() ? UUID.randomUUID().toString() : optionName;
diff --git a/vid-app-common/src/main/java/org/onap/vid/services/PombaServiceImpl.java b/vid-app-common/src/main/java/org/onap/vid/services/PombaServiceImpl.java
index 21b1ec1..231b352 100644
--- a/vid-app-common/src/main/java/org/onap/vid/services/PombaServiceImpl.java
+++ b/vid-app-common/src/main/java/org/onap/vid/services/PombaServiceImpl.java
@@ -1,3 +1,23 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2018 Nokia. 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.vid.services;
 
 import org.onap.vid.aai.PombaClientInterface;
diff --git a/vid-app-common/src/main/java/org/onap/vid/services/VidServiceImpl.java b/vid-app-common/src/main/java/org/onap/vid/services/VidServiceImpl.java
index dc2541b..1890a5b 100644
--- a/vid-app-common/src/main/java/org/onap/vid/services/VidServiceImpl.java
+++ b/vid-app-common/src/main/java/org/onap/vid/services/VidServiceImpl.java
@@ -1,3 +1,23 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2018 Nokia. 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.vid.services;
 
 import com.google.common.cache.CacheBuilder;
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/controller/ServiceModelController.js b/vid-app-common/src/main/webapp/app/vid/scripts/controller/ServiceModelController.js
index 89660fb..aee4c05 100755
--- a/vid-app-common/src/main/webapp/app/vid/scripts/controller/ServiceModelController.js
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/controller/ServiceModelController.js
@@ -190,7 +190,7 @@
           DataService.setPnf(!angular.equals(serviceModel.pnfs, {}));

 					$scope.createType = COMPONENT.A_LA_CARTE;

 					var broadcastType = COMPONENT.CREATE_COMPONENT;

-                    if (AsdcService.isMacro(serviceModel)) {

+                    if (AsdcService.isMacro(serviceModel) || DataService.getE2EService()) {

                         DataService.setALaCarte(false);

                         if(AsdcService.shouldExcludeMacroFromAsyncInstatiationFlow(serviceModel)){

                         	DataService.setShouldExcludeMacroFromAsyncInstatiationFlow(true);

diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js b/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js
index f1440fc..6029ed2 100644
--- a/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js
@@ -269,11 +269,15 @@
 				var data;
 				if(workflowType=="VNF Scale Out") {
                     data = {
+                        vnfName: vnf.name,
+                        vnfInstanceId: vnf.id,
                         modelInfo: {
                             modelType: 'vfModule',
                             modelInvariantId: moduleToScale.invariantUuid,
                             modelName: moduleToScale.modelCustomizationName,
                             modelVersion: moduleToScale.version,
+                            modelCustomizationName: moduleToScale.modelCustomizationName,
+                            modelCustomizationId: moduleToScale.customizationUuid,
                             modelVersionId: moduleToScale.uuid
                         },
                         cloudConfiguration: vnf.cloudConfiguration,
@@ -335,6 +339,7 @@
                         var relatedInstance = {
                             instanceId: vnf.id,
                             modelInfo: {
+                                modelCustomizationId: vnf.availableVersions[0].modelInfo.modelCustomizationId,
                                 modelCustomizationName: vnf.availableVersions[0].modelInfo.modelCustomizationName,
                                 modelInvariantId: vnf.availableVersions[0].modelInfo.modelInvariantId,
                                 modelName: vnf.availableVersions[0].modelInfo.modelName,
@@ -377,18 +382,8 @@
 				//no scheduling support
 				var dataToSo = extractChangeManagementCallbackDataStr(vm.changeManagement);
                 if(dataToSo) {
-
-                    if(vm.changeManagement.workflow==="VNF Scale Out") {
-                        dataToSo = JSON.parse(dataToSo);
-                        dataToSo = {requestDetails: dataToSo.requestDetails[0]};
-                        changeManagementService.postChangeManagementScaleOutNow(dataToSo,
-                            vm.changeManagement.vnfNames[0]["service-instance-node"][0].properties["service-instance-id"],
-                            vm.changeManagement.vnfNames[0].id);
-                    }else{
-                        //TODO: foreach
-                        var vnfName = vm.changeManagement.vnfNames[0].name;
-                        changeManagementService.postChangeManagementNow(dataToSo, vnfName);
-                    }
+                    var vnfName = vm.changeManagement.vnfNames[0].name;
+                    changeManagementService.postChangeManagementNow(dataToSo, vnfName);
                 }
 			}
         };
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/services/asdcService.js b/vid-app-common/src/main/webapp/app/vid/scripts/services/asdcService.js
index 753f9fd..6bdc0ae 100755
--- a/vid-app-common/src/main/webapp/app/vid/scripts/services/asdcService.js
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/services/asdcService.js
@@ -20,7 +20,7 @@
 

 "use strict";

 

-var AsdcService = function ($http, $log, PropertyService, UtilityService, VIDCONFIGURATION, COMPONENT, featureFlags) {

+var AsdcService = function ($http, $log, PropertyService, UtilityService, VIDCONFIGURATION, COMPONENT, DataService, featureFlags) {

     return {

         getModel: function (modelId, successCallbackFunction) {

             $log.debug("AsdcService:getModel: modelId: " + modelId);

@@ -37,6 +37,8 @@
         shouldExcludeMacroFromAsyncInstatiationFlow: function(serviceModel){

             if (!featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_ASYNC_INSTANTIATION))

                 return true;

+			if (DataService.getE2EService())

+				return true;

             if (!_.isEmpty(serviceModel.pnfs))

                 return true;

             if (!_.isEmpty(serviceModel.collectionResource))

@@ -72,4 +74,4 @@
 }

 

 appDS2.factory("AsdcService", ["$http", "$log", "PropertyService",

-    "UtilityService", "VIDCONFIGURATION","COMPONENT", "featureFlags", AsdcService]);

+    "UtilityService", "VIDCONFIGURATION","COMPONENT", "DataService", "featureFlags", AsdcService]);

diff --git a/vid-app-common/src/test/java/org/onap/vid/controllers/MaintenanceControllerTest.java b/vid-app-common/src/test/java/org/onap/vid/controllers/MaintenanceControllerTest.java
index 80c6593..7bdd6b8 100644
--- a/vid-app-common/src/test/java/org/onap/vid/controllers/MaintenanceControllerTest.java
+++ b/vid-app-common/src/test/java/org/onap/vid/controllers/MaintenanceControllerTest.java
@@ -1,66 +1,340 @@
 package org.onap.vid.controllers;
 
-import javax.servlet.http.HttpServletRequest;
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright © 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright 2018 Nokia
+ * ================================================================================
+ * 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=========================================================
+ */
 
+import static org.mockito.BDDMockito.given;
+import static org.mockito.BDDMockito.then;
+import static org.mockito.BDDMockito.willThrow;
+import static org.mockito.Matchers.argThat;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.times;
+import static org.onap.vid.model.CategoryParameter.Family.PARAMETER_STANDARDIZATION;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import java.util.Collections;
+import java.util.function.BiFunction;
+import javax.ws.rs.ForbiddenException;
+import org.apache.log4j.BasicConfigurator;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentMatcher;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.onap.vid.category.AddCategoryOptionResponse;
 import org.onap.vid.category.AddCategoryOptionsRequest;
 import org.onap.vid.category.CategoryParameterOptionRep;
+import org.onap.vid.category.CategoryParametersResponse;
+import org.onap.vid.model.CategoryParameter;
 import org.onap.vid.model.CategoryParameterOption;
-import org.springframework.http.ResponseEntity;
+import org.onap.vid.services.CategoryParameterService;
+import org.onap.vid.services.CategoryParameterServiceImpl;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.ResultActions;
+import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
+@RunWith(MockitoJUnitRunner.class)
 public class MaintenanceControllerTest {
 
-    private MaintenanceController createTestSubject() {
-        return new MaintenanceController();
+    final private String MAINTENANCE_CATEGORY_PATH = "/maintenance/category_parameter";
+    final private String CATEGORY_PARAMETER_PATH = MAINTENANCE_CATEGORY_PATH + "/{name}";
+    final private String DELETE_CATEGORY_PATH = "/maintenance/delete_category_parameter/{name}";
+
+    @Mock
+    private CategoryParameterService service;
+    private MaintenanceController maintenanceController;
+    private MockMvc mockMvc;
+    private ObjectMapper objectMapper;
+
+    @Before
+    public void setUp() {
+        maintenanceController = new MaintenanceController(service);
+        BasicConfigurator.configure();
+        mockMvc = MockMvcBuilders.standaloneSetup(maintenanceController).build();
+        objectMapper = new ObjectMapper();
     }
 
     @Test
-    public void testAddCategoryOptions() throws Exception {
-        MaintenanceController testSubject;
-        HttpServletRequest request = null;
-        String categoryName = "";
-        AddCategoryOptionsRequest option = null;
-        ResponseEntity result;
+    public void addCategoryOptions_shouldReturnMultiStatus_whenErrorsExist() throws Exception {
+        String categoryName = "catName1";
+        AddCategoryOptionsRequest req = new AddCategoryOptionsRequest();
+        req.options = ImmutableList.of("first option", "second option");
+        AddCategoryOptionResponse addCategoryOptionResponse = new AddCategoryOptionResponse(
+            ImmutableList.of("error one", "error two"));
 
-        // default test
-        testSubject = createTestSubject();
-        result = testSubject.addCategoryOptions(request, categoryName, option);
+        given(service.createCategoryParameterOptions(eq(categoryName), argThat(requestMatcher(req))))
+            .willReturn(addCategoryOptionResponse);
+
+        prepareRequestExpectations(MockMvcRequestBuilders::post, CATEGORY_PARAMETER_PATH, categoryName,
+            objectMapper.writeValueAsString(req))
+            .andExpect(status().isMultiStatus())
+            .andExpect(
+                content().json(objectMapper
+                    .writeValueAsString(addCategoryOptionResponse)));
     }
 
     @Test
-    public void testUpdateNameForOption() throws Exception {
-        MaintenanceController testSubject;
-        HttpServletRequest request = null;
-        String categoryName = "";
-        CategoryParameterOptionRep option = null;
-        ResponseEntity result;
+    public void addCategoryOptions_shouldReturnOk_whenNoErrorsExist() throws Exception {
+        String categoryName = "catName2";
+        AddCategoryOptionsRequest req = new AddCategoryOptionsRequest();
+        req.options = ImmutableList.of("first option", "second option", "third option");
+        AddCategoryOptionResponse addCategoryOptionResponse = new AddCategoryOptionResponse(Collections.emptyList());
 
-        // default test
-        testSubject = createTestSubject();
-        result = testSubject.updateNameForOption(request, categoryName, option);
+        given(service.createCategoryParameterOptions(eq(categoryName), argThat(requestMatcher(req))))
+            .willReturn(addCategoryOptionResponse);
+        prepareRequestExpectations(MockMvcRequestBuilders::post, CATEGORY_PARAMETER_PATH, categoryName,
+            objectMapper.writeValueAsString(req))
+            .andExpect(status().isOk())
+            .andExpect(content().json(
+                objectMapper.writeValueAsString(addCategoryOptionResponse)));
     }
 
     @Test
-    public void testGetCategoryParameter() throws Exception {
-        MaintenanceController testSubject;
-        HttpServletRequest request = null;
-        ResponseEntity result;
+    public void addCategoryOptions_shouldReturnNotFound_whenUnfoundedCategoryExceptionIsThrown() throws Exception {
+        String unfoundedMsg = "unfounded category exception message";
+        String categoryName = "catName3";
+        AddCategoryOptionsRequest req = new AddCategoryOptionsRequest();
+        req.options = ImmutableList.of("first option");
 
-        // default test
-        testSubject = createTestSubject();
-        result = testSubject.getCategoryParameter(request, null);
+        given(service.createCategoryParameterOptions(eq(categoryName), argThat(requestMatcher(req))))
+            .willThrow(new CategoryParameterServiceImpl.UnfoundedCategoryException(unfoundedMsg));
+
+        prepareRequestExpectations(MockMvcRequestBuilders::post, CATEGORY_PARAMETER_PATH, categoryName,
+            objectMapper.writeValueAsString(req))
+            .andExpect(status().isNotFound())
+            .andExpect(content().json(
+                objectMapper.writeValueAsString(new AddCategoryOptionResponse(ImmutableList.of(unfoundedMsg)))));
     }
 
     @Test
-    public void testDeleteCategoryOption() throws Exception {
-        MaintenanceController testSubject;
-        HttpServletRequest request = null;
-        String categoryName = "";
-        CategoryParameterOption option = null;
-        ResponseEntity result;
+    public void addCategoryOptions_shouldReturnInternalServerError_whenExceptionIsThrown() throws Exception {
+        String categoryName = "catName13";
+        AddCategoryOptionsRequest req = new AddCategoryOptionsRequest();
+        req.options = ImmutableList.of("option second", "first option");
 
-        // default test
-        testSubject = createTestSubject();
-        result = testSubject.deleteCategoryOption(request, categoryName, option);
+        given(service.createCategoryParameterOptions(eq(categoryName), argThat(requestMatcher(req))))
+            .willThrow(new RuntimeException());
+
+        prepareRequestExpectations(MockMvcRequestBuilders::post, CATEGORY_PARAMETER_PATH, categoryName,
+            objectMapper.writeValueAsString(req))
+            .andExpect(status().isInternalServerError());
+    }
+
+    @Test
+    public void updateNameForOption_shouldReturnMultiStatus_whenErrorsExist() throws Exception {
+        String categoryName = "catName4";
+        CategoryParameterOptionRep categoryParameterOptionRep = new CategoryParameterOptionRep("id1", "name1");
+        AddCategoryOptionResponse addCategoryOptionResponse = new AddCategoryOptionResponse(
+            ImmutableList.of("error one", "error two"));
+
+        given(service
+            .updateCategoryParameterOption(eq(categoryName), argThat(requestMatcher(categoryParameterOptionRep))))
+            .willReturn(addCategoryOptionResponse);
+
+        prepareRequestExpectations(MockMvcRequestBuilders::put, CATEGORY_PARAMETER_PATH, categoryName,
+            objectMapper.writeValueAsString(categoryParameterOptionRep))
+            .andExpect(status().isMultiStatus())
+            .andExpect(
+                content().json(objectMapper
+                    .writeValueAsString(addCategoryOptionResponse)));
+    }
+
+    @Test
+    public void updateNameForOption_shouldReturnOk_whenNoErrorsExist() throws Exception {
+        String categoryName = "catName5";
+        CategoryParameterOptionRep categoryParameterOptionRep = new CategoryParameterOptionRep("id2", "name2");
+        AddCategoryOptionResponse addCategoryOptionResponse = new AddCategoryOptionResponse(Collections.emptyList());
+
+        given(service
+            .updateCategoryParameterOption(eq(categoryName), argThat(requestMatcher(categoryParameterOptionRep))))
+            .willReturn(addCategoryOptionResponse);
+        prepareRequestExpectations(MockMvcRequestBuilders::put, CATEGORY_PARAMETER_PATH, categoryName,
+            objectMapper.writeValueAsString(categoryParameterOptionRep))
+            .andExpect(status().isOk())
+            .andExpect(content().json(
+                objectMapper.writeValueAsString(addCategoryOptionResponse)));
+    }
+
+    @Test
+    public void updateNameForOption_shouldReturnForbidden_whenForbiddenExceptionIsThrown() throws Exception {
+        String categoryName = "catName6";
+        CategoryParameterOptionRep categoryParameterOptionRep = new CategoryParameterOptionRep("id3", "name3");
+
+        given(service
+            .updateCategoryParameterOption(eq(categoryName), argThat(requestMatcher(categoryParameterOptionRep))))
+            .willThrow(new ForbiddenException());
+        prepareRequestExpectations(MockMvcRequestBuilders::put, CATEGORY_PARAMETER_PATH, categoryName,
+            objectMapper.writeValueAsString(categoryParameterOptionRep))
+            .andExpect(status().isForbidden())
+            .andExpect(content().json(
+                objectMapper
+                    .writeValueAsString(new AddCategoryOptionResponse(ImmutableList.of("HTTP 403 Forbidden")))));
+    }
+
+    @Test
+    public void updateNameForOption_shouldReturnNotFound_whenUnfoundedIsThrown() throws Exception {
+        String unfoundedOptionMsg = "unfounded category option exception message";
+        String categoryName = "catName7";
+        CategoryParameterOptionRep categoryParameterOptionRep = new CategoryParameterOptionRep("id4", "name4");
+
+        given(service
+            .updateCategoryParameterOption(eq(categoryName), argThat(requestMatcher(categoryParameterOptionRep))))
+            .willThrow(new CategoryParameterServiceImpl.UnfoundedCategoryOptionException(unfoundedOptionMsg));
+
+        prepareRequestExpectations(MockMvcRequestBuilders::put, CATEGORY_PARAMETER_PATH, categoryName,
+            objectMapper.writeValueAsString(categoryParameterOptionRep))
+            .andExpect(status().isNotFound())
+            .andExpect(content().json(
+                objectMapper.writeValueAsString(new AddCategoryOptionResponse(ImmutableList.of(unfoundedOptionMsg)))));
+    }
+
+    @Test
+    public void updateNameForOption_shouldReturnConflict_whenAlreadyExistOptionNameIsThrown() throws Exception {
+        String conflictMsg = "already exists option name exception message";
+        String categoryName = "catName8";
+        CategoryParameterOptionRep categoryParameterOptionRep = new CategoryParameterOptionRep("id5", "name5");
+
+        given(service
+            .updateCategoryParameterOption(eq(categoryName), argThat(requestMatcher(categoryParameterOptionRep))))
+            .willThrow(new CategoryParameterServiceImpl.AlreadyExistOptionNameException(conflictMsg));
+
+        prepareRequestExpectations(MockMvcRequestBuilders::put, CATEGORY_PARAMETER_PATH, categoryName,
+            objectMapper.writeValueAsString(categoryParameterOptionRep))
+            .andExpect(status().isConflict())
+            .andExpect(content().json(
+                objectMapper.writeValueAsString(new AddCategoryOptionResponse(ImmutableList.of(conflictMsg)))));
+    }
+
+    @Test
+    public void updateNameForOption_shouldReturnInternalServerError_whenExceptionIsThrown() throws Exception {
+        String categoryName = "catName18";
+        CategoryParameterOptionRep categoryParameterOptionRep = new CategoryParameterOptionRep("id6", "name6");
+
+        given(service
+            .updateCategoryParameterOption(eq(categoryName), argThat(requestMatcher(categoryParameterOptionRep))))
+            .willThrow(new RuntimeException());
+
+        prepareRequestExpectations(MockMvcRequestBuilders::put, CATEGORY_PARAMETER_PATH, categoryName,
+            objectMapper.writeValueAsString(categoryParameterOptionRep))
+            .andExpect(status().isInternalServerError());
+    }
+
+    @Test
+    public void getCategoryParameter_shouldReturnExistingMap() throws Exception {
+        CategoryParametersResponse categoryParametersResponse =
+            new CategoryParametersResponse(
+                ImmutableMap.of(
+                    "key1", ImmutableList.of(
+                        new CategoryParameterOptionRep("testId", "testName"))));
+
+        given(service.getCategoryParameters(PARAMETER_STANDARDIZATION))
+            .willReturn(categoryParametersResponse);
+
+        mockMvc.perform(get(MAINTENANCE_CATEGORY_PATH)
+            .param("familyName", "PARAMETER_STANDARDIZATION")
+            .accept(MediaType.APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().json(objectMapper.writeValueAsString(categoryParametersResponse)));
+    }
+
+    @Test
+    public void getCategoryParameter_shouldReturnInternalServerError_whenExceptionIsThrown() throws Exception {
+        given(service.getCategoryParameters(PARAMETER_STANDARDIZATION))
+            .willThrow(new RuntimeException());
+
+        mockMvc.perform(get(MAINTENANCE_CATEGORY_PATH)
+            .param("familyName", "PARAMETER_STANDARDIZATION")
+            .accept(MediaType.APPLICATION_JSON))
+            .andExpect(status().isInternalServerError());
+    }
+
+    @Test
+    public void deleteCategoryOption_shouldReturnOk_whenNoExceptionIsThrown() throws Exception {
+        String categoryName = "catName9";
+        CategoryParameterOption categoryParameterOption = new CategoryParameterOption("id1", "name1",
+            new CategoryParameter());
+
+        prepareRequestExpectations(MockMvcRequestBuilders::delete, DELETE_CATEGORY_PATH, categoryName,
+            objectMapper.writeValueAsString(categoryParameterOption))
+            .andExpect(status().isOk());
+
+        then(service).should(times(1))
+            .deleteCategoryOption(eq(categoryName), argThat(requestMatcher(categoryParameterOption)));
+    }
+
+    @Test
+    public void deleteCategoryOption_shouldReturnNotFound_whenUnfoundedExceptionIsThrown() throws Exception {
+        String unfoundedMsg = "unfounded category exception message";
+        String categoryName = "catName10";
+        CategoryParameterOption categoryParameterOption = new CategoryParameterOption("id2", "name2",
+            new CategoryParameter());
+
+        willThrow(new CategoryParameterServiceImpl.UnfoundedCategoryException(unfoundedMsg))
+            .given(service).deleteCategoryOption(eq(categoryName), argThat(requestMatcher(categoryParameterOption)));
+
+        prepareRequestExpectations(MockMvcRequestBuilders::delete, DELETE_CATEGORY_PATH, categoryName,
+            objectMapper.writeValueAsString(categoryParameterOption))
+            .andExpect(status().isNotFound())
+            .andExpect(content().json(
+                objectMapper.writeValueAsString(new AddCategoryOptionResponse(ImmutableList.of(unfoundedMsg)))));
+    }
+
+    @Test
+    public void deleteCategoryOption_shouldReturnInternalServerError_whenExceptionIsThrown() throws Exception {
+        String categoryName = "catName19";
+        CategoryParameterOption categoryParameterOption = new CategoryParameterOption("id3", "name3",
+            new CategoryParameter());
+
+        willThrow(new RuntimeException()).given(service)
+            .deleteCategoryOption(eq(categoryName), argThat(requestMatcher(categoryParameterOption)));
+
+        prepareRequestExpectations(MockMvcRequestBuilders::delete, DELETE_CATEGORY_PATH, categoryName,
+            objectMapper.writeValueAsString(categoryParameterOption))
+            .andExpect(status().isInternalServerError());
+    }
+
+    private <T> ArgumentMatcher<T> requestMatcher(T t) {
+        return new ArgumentMatcher<T>() {
+            @Override
+            public boolean matches(Object o) {
+                return t.equals(o);
+            }
+        };
+    }
+
+    private ResultActions prepareRequestExpectations(
+        BiFunction<String, String, MockHttpServletRequestBuilder> httpMethod,
+        String path, String name, String jsonContent) throws Exception {
+        return mockMvc.perform(httpMethod.apply(path, name)
+            .contentType(MediaType.APPLICATION_JSON)
+            .content(jsonContent));
     }
 }
\ No newline at end of file
diff --git a/vid-app-common/src/test/java/org/onap/vid/job/command/InProgressStatusCommandTest.java b/vid-app-common/src/test/java/org/onap/vid/job/command/InProgressStatusCommandTest.java
new file mode 100644
index 0000000..bc62392
--- /dev/null
+++ b/vid-app-common/src/test/java/org/onap/vid/job/command/InProgressStatusCommandTest.java
@@ -0,0 +1,143 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * 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.vid.job.command;
+
+
+import io.joshworks.restclient.http.HttpResponse;
+import org.mockito.Mock;
+import org.onap.vid.job.Job;
+import org.onap.vid.job.NextCommand;
+import org.onap.vid.mso.MsoInterface;
+import org.onap.vid.mso.rest.AsyncRequestStatus;
+import org.onap.vid.services.AsyncInstantiationBusinessLogic;
+import org.onap.vid.services.AuditService;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.ProcessingException;
+import java.util.UUID;
+
+
+import static org.assertj.core.api.Java6Assertions.assertThat;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+public class InProgressStatusCommandTest {
+
+    @Mock
+    private AsyncInstantiationBusinessLogic asyncInstantiationBusinessLogic;
+
+    @Mock
+    private MsoInterface msoInterface;
+
+    @Mock
+    private AuditService auditService;
+
+    @Mock
+    private HttpResponse<AsyncRequestStatus> msoResponse;
+
+    @Mock
+    private AsyncRequestStatus asyncRequestStatus;
+
+    @Mock
+    private AsyncRequestStatus.Request request;
+
+    private UUID uuid = UUID.randomUUID();
+
+    private InProgressStatusCommand inProgressStatusCommand;
+
+    @BeforeMethod
+    public void setUp() {
+        initMocks(this);
+
+        inProgressStatusCommand = new InProgressStatusCommand(asyncInstantiationBusinessLogic, msoInterface, auditService, uuid, "sampleRequestId");
+
+        when(asyncInstantiationBusinessLogic.getOrchestrationRequestsPath()).thenReturn("http://localhost:8080/samplePath");
+        when(msoInterface.get("http://localhost:8080/samplePath/sampleRequestId", AsyncRequestStatus.class)).thenReturn(msoResponse);
+        when(msoResponse.getBody()).thenReturn(asyncRequestStatus);
+    }
+
+
+    @Test
+    public void whenSOReturnsErrorShouldSetProperFailureStateAndReturnRetryCommand() {
+        when(msoResponse.getStatus()).thenReturn(500);
+
+        NextCommand call = inProgressStatusCommand.call();
+
+        assertThat(call.getStatus()).isEqualTo(Job.JobStatus.IN_PROGRESS);
+        assertThat(call.getCommand()).isEqualTo(inProgressStatusCommand);
+
+        verify(auditService).setFailedAuditStatusFromMso(uuid, "sampleRequestId", 500, asyncRequestStatus.toString());
+    }
+
+    @Test
+    public void shouldProperlyHandleFailedInstantiation() {
+        when(msoResponse.getStatus()).thenReturn(200);
+        when(asyncInstantiationBusinessLogic.calcStatus(asyncRequestStatus)).thenReturn(Job.JobStatus.FAILED);
+        asyncRequestStatus.request = request;
+
+        NextCommand call = inProgressStatusCommand.call();
+
+        assertThat(call.getCommand()).isEqualTo(inProgressStatusCommand);
+        assertThat(call.getStatus()).isEqualTo(Job.JobStatus.FAILED);
+
+        verify(asyncInstantiationBusinessLogic).handleFailedInstantiation(uuid);
+        verify(asyncInstantiationBusinessLogic).auditMsoStatus(uuid, request);
+    }
+
+    @Test
+    public void shouldRetryCommandWithPausedState() {
+        when(msoResponse.getStatus()).thenReturn(200);
+        when(asyncInstantiationBusinessLogic.calcStatus(asyncRequestStatus)).thenReturn(Job.JobStatus.PAUSE);
+        asyncRequestStatus.request = request;
+
+        NextCommand call = inProgressStatusCommand.call();
+
+        assertThat(call.getCommand()).isEqualTo(inProgressStatusCommand);
+        assertThat(call.getStatus()).isEqualTo(Job.JobStatus.IN_PROGRESS);
+
+        verify(asyncInstantiationBusinessLogic).auditMsoStatus(uuid, request);
+        verify(asyncInstantiationBusinessLogic).updateServiceInfoAndAuditStatus(uuid, Job.JobStatus.PAUSE);
+    }
+
+    @Test
+    public void shouldRetryCommandExitedWithProcessingException() {
+        when(msoResponse.getStatus()).thenReturn(200);
+        when(asyncInstantiationBusinessLogic.calcStatus(asyncRequestStatus)).thenThrow(new ProcessingException(""));
+
+        NextCommand call = inProgressStatusCommand.call();
+
+        assertThat(call.getCommand()).isEqualTo(inProgressStatusCommand);
+        assertThat(call.getStatus()).isEqualTo(Job.JobStatus.IN_PROGRESS);
+    }
+
+    @Test
+    public void shouldSetStoppedStatusWhenRuntimeExceptionOccurs() {
+        when(msoResponse.getStatus()).thenReturn(200);
+        when(asyncInstantiationBusinessLogic.calcStatus(asyncRequestStatus)).thenThrow(new RuntimeException());
+
+        NextCommand call = inProgressStatusCommand.call();
+
+        assertThat(call.getCommand()).isEqualTo(inProgressStatusCommand);
+        assertThat(call.getStatus()).isEqualTo(Job.JobStatus.STOPPED);
+    }
+}
\ No newline at end of file
diff --git a/vid-app-common/src/test/java/org/onap/vid/job/command/ServiceInstantiationCommandTest.java b/vid-app-common/src/test/java/org/onap/vid/job/command/ServiceInstantiationCommandTest.java
new file mode 100644
index 0000000..e7ab4f0
--- /dev/null
+++ b/vid-app-common/src/test/java/org/onap/vid/job/command/ServiceInstantiationCommandTest.java
@@ -0,0 +1,157 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * 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.vid.job.command;
+
+
+import io.joshworks.restclient.http.HttpResponse;
+import org.mockito.Mock;
+import org.onap.vid.aai.AaiResponse;
+import org.onap.vid.aai.exceptions.InvalidAAIResponseException;
+import org.onap.vid.changeManagement.RequestDetailsWrapper;
+import org.onap.vid.domain.mso.RequestReferences;
+import org.onap.vid.exceptions.MaxRetriesException;
+import org.onap.vid.job.Job;
+import org.onap.vid.job.NextCommand;
+import org.onap.vid.model.RequestReferencesContainer;
+import org.onap.vid.model.serviceInstantiation.ServiceInstantiation;
+import org.onap.vid.mso.MsoInterface;
+import org.onap.vid.mso.model.ServiceInstantiationRequestDetails;
+import org.onap.vid.services.AsyncInstantiationBusinessLogic;
+import org.onap.vid.services.AuditService;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import java.util.UUID;
+
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+public class ServiceInstantiationCommandTest {
+    @Mock
+    private AsyncInstantiationBusinessLogic asyncInstantiationBusinessLogic;
+
+    @Mock
+    private MsoInterface msoInterface;
+
+    @Mock
+    private AuditService auditService;
+
+    @Mock
+    private ServiceInstantiation serviceInstantiation;
+
+    @Mock
+    private HttpResponse<RequestReferencesContainer> msoResponse;
+
+    @Mock
+    private RequestDetailsWrapper<ServiceInstantiationRequestDetails> requestDetailsWrapper;
+
+    @Mock
+    private AaiResponse aaiResponse;
+
+    @Mock
+    private RequestReferencesContainer requestReferencesContainer;
+
+
+    private UUID uuid = UUID.randomUUID();
+
+
+    private ServiceInstantiationCommand serviceInstantiationCommand;
+
+    @BeforeMethod
+    public void setUp() {
+        initMocks(this);
+        serviceInstantiationCommand = new ServiceInstantiationCommand(asyncInstantiationBusinessLogic, auditService, msoInterface, uuid, serviceInstantiation, "sampleUserId");
+    }
+
+
+    @Test
+    public void shouldProperlyHandleMaxRetriesException() {
+        when(asyncInstantiationBusinessLogic.generateServiceInstantiationRequest(uuid, serviceInstantiation, "sampleUserId")).thenThrow(new MaxRetriesException("", 2));
+
+        NextCommand call = serviceInstantiationCommand.call();
+
+        assertThat(call.getCommand(), is(nullValue()));
+        assertThat(call.getStatus(), is(equalTo(Job.JobStatus.FAILED)));
+
+        verify(asyncInstantiationBusinessLogic).handleFailedInstantiation(uuid);
+    }
+
+    @Test
+    public void shouldProperlyHandleInvalidAAIResponseException() {
+        doThrow(new InvalidAAIResponseException(aaiResponse)).when(asyncInstantiationBusinessLogic).generateServiceInstantiationRequest(uuid, serviceInstantiation, "sampleUserId");
+
+        NextCommand call = serviceInstantiationCommand.call();
+
+        assertThat(call.getCommand(), is(serviceInstantiationCommand));
+        assertThat(call.getStatus(), is(equalTo(Job.JobStatus.IN_PROGRESS)));
+    }
+
+
+    @Test
+    public void shouldProperlyHandleInvalidSOResponse() {
+        when(asyncInstantiationBusinessLogic.generateServiceInstantiationRequest(uuid, serviceInstantiation, "sampleUserId")).thenReturn(requestDetailsWrapper);
+        when(asyncInstantiationBusinessLogic.getServiceInstantiationPath(serviceInstantiation)).thenReturn("samplePath");
+        when(msoInterface.post("samplePath", requestDetailsWrapper, RequestReferencesContainer.class)).thenReturn(msoResponse);
+        when(msoResponse.getStatus()).thenReturn(500);
+        when(msoResponse.getBody()).thenReturn(requestReferencesContainer);
+
+        NextCommand call = serviceInstantiationCommand.call();
+
+        assertThat(call.getCommand(), is(nullValue()));
+        assertThat(call.getStatus(), is(equalTo(Job.JobStatus.FAILED)));
+
+        verify(auditService).setFailedAuditStatusFromMso(uuid, null, 500, requestReferencesContainer.toString());
+    }
+
+
+    @Test
+    public void shouldProperlyUpdateServiceStatusAndReturnInProgressCommand() {
+        RequestReferences requestReferences = createRequestReferences();
+
+        when(asyncInstantiationBusinessLogic.generateServiceInstantiationRequest(uuid, serviceInstantiation, "sampleUserId")).thenReturn(requestDetailsWrapper);
+        when(asyncInstantiationBusinessLogic.getServiceInstantiationPath(serviceInstantiation)).thenReturn("samplePath");
+        when(msoInterface.post("samplePath", requestDetailsWrapper, RequestReferencesContainer.class)).thenReturn(msoResponse);
+        when(msoResponse.getStatus()).thenReturn(200);
+        when(msoResponse.getBody()).thenReturn(requestReferencesContainer);
+        when(requestReferencesContainer.getRequestReferences()).thenReturn(requestReferences);
+
+
+        NextCommand call = serviceInstantiationCommand.call();
+
+        assertThat(call.getCommand(), instanceOf(InProgressStatusCommand.class));
+        assertThat(call.getStatus(), is(equalTo(Job.JobStatus.IN_PROGRESS)));
+
+    }
+
+    private RequestReferences createRequestReferences() {
+        RequestReferences requestReferences = new RequestReferences();
+        requestReferences.setInstanceId("sampleInstanceId");
+        requestReferences.setRequestId("sampleRequestId");
+        return requestReferences;
+    }
+}
\ No newline at end of file
diff --git a/vid-app-common/src/test/java/org/onap/vid/job/impl/JobAdapterImplTest.java b/vid-app-common/src/test/java/org/onap/vid/job/impl/JobAdapterImplTest.java
new file mode 100644
index 0000000..dc2eafc
--- /dev/null
+++ b/vid-app-common/src/test/java/org/onap/vid/job/impl/JobAdapterImplTest.java
@@ -0,0 +1,110 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * 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.vid.job.impl;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import org.mockito.Mock;
+import org.onap.vid.job.Job;
+import org.onap.vid.job.JobAdapter;
+import org.onap.vid.job.JobType;
+import org.onap.vid.model.JobBulk;
+import org.onap.vid.model.JobModel;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.when;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+public class JobAdapterImplTest {
+
+
+    private static final int SAMPLE_INDEX = 10;
+    private static final String SAMPLE_USER_ID = "sampleUserId";
+
+    @Mock
+    private Job job;
+
+    @Mock
+    private JobAdapter.AsyncJobRequest asyncJobRequest;
+
+    private UUID sampleUuid=UUID.randomUUID();
+
+    private JobAdapterImpl jobAdapter = new JobAdapterImpl();
+
+    @BeforeMethod
+    public void setUp() {
+        initMocks(this);
+
+        when(job.getUuid()).thenReturn(sampleUuid);
+        when(job.getStatus()).thenReturn(Job.JobStatus.IN_PROGRESS);
+        when(job.getTemplateId()).thenReturn(sampleUuid);
+    }
+
+    @Test
+    public void shouldConvertJobToJobModel() {
+
+
+        JobModel convertedJob = jobAdapter.toModel(job);
+
+        assertThat(convertedJob.getUuid()).isEqualByComparingTo(sampleUuid);
+        assertThat(convertedJob.getStatus()).isEqualByComparingTo(Job.JobStatus.IN_PROGRESS);
+        assertThat(convertedJob.getTemplateId()).isEqualByComparingTo(sampleUuid);
+    }
+
+
+    @Test
+    public void shouldProperlyCreateJob() {
+        UUID uuid = UUID.randomUUID();
+
+        Job createdJob = jobAdapter.createJob(JobType.ServiceInstantiation, asyncJobRequest, uuid, SAMPLE_USER_ID, SAMPLE_INDEX);
+
+        assertThat(createdJob.getStatus()).isEqualByComparingTo(Job.JobStatus.PENDING);
+        assertThat(createdJob.getTemplateId()).isEqualByComparingTo(uuid);
+        assertThat(createdJob.getType()).isEqualByComparingTo(JobType.ServiceInstantiation);
+        assertThat(createdJob.getData()).isEqualTo(ImmutableMap.of("request", asyncJobRequest, "userId", SAMPLE_USER_ID));
+    }
+
+    @Test
+    public void shouldProperlyCreateBulkOfJobs(){
+        List<Job> bulkOfJobs = jobAdapter.createBulkOfJobs(ImmutableMap.of("count", 5, "type", JobType.InProgressStatus.name()));
+
+
+        assertThat(bulkOfJobs).hasSize(5);
+
+        Stream<Job> jobStream = bulkOfJobs.stream().filter(x -> JobType.InProgressStatus.equals(x.getType()) && Job.JobStatus.PENDING.equals(x.getStatus()));
+
+        assertThat(jobStream).hasSize(5);
+    }
+
+
+    @Test
+    public void shouldConvertListToBulkJob(){
+        JobBulk jobBulk = jobAdapter.toModelBulk(ImmutableList.of(job, job));
+
+        assertThat(jobBulk.getJobs()).hasSize(2);
+    }
+}
diff --git a/vid-app-common/src/test/java/org/onap/vid/job/impl/JobSchedulerInitializerTest.java b/vid-app-common/src/test/java/org/onap/vid/job/impl/JobSchedulerInitializerTest.java
new file mode 100644
index 0000000..93afd17
--- /dev/null
+++ b/vid-app-common/src/test/java/org/onap/vid/job/impl/JobSchedulerInitializerTest.java
@@ -0,0 +1,121 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * 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.vid.job.impl;
+
+
+import org.mockito.ArgumentCaptor;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.onap.vid.job.JobsBrokerService;
+import org.onap.vid.job.command.JobCommandFactory;
+import org.onap.vid.properties.Features;
+import org.quartz.JobDetail;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.Trigger;
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+import org.togglz.core.manager.FeatureManager;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+public class JobSchedulerInitializerTest {
+
+    @Mock
+    private JobsBrokerService brokerService;
+
+    @Mock
+    private SchedulerFactoryBean schedulerFactoryBean;
+
+    @Mock
+    private FeatureManager featureManager;
+
+    @Mock
+    private JobCommandFactory commandFactory;
+
+    @Mock
+    private Scheduler scheduler;
+
+    @InjectMocks
+    private JobSchedulerInitializer jobSchedulerInitializer;
+
+    @BeforeMethod
+    public void setUp() {
+        initMocks(this);
+    }
+
+
+    @Test
+    public void shouldNotInitializeSchedulerWhenAsyncJobsAreDisabled() {
+        when(featureManager.isActive(Features.FLAG_ASYNC_JOBS)).thenReturn(false);
+
+        jobSchedulerInitializer.init();
+
+        verifyZeroInteractions(schedulerFactoryBean);
+    }
+
+
+    @Test
+    public void shouldInitializeSchedulerWhenAsyncJobsAreEnabled() throws SchedulerException {
+        ArgumentCaptor<JobDetail> jobDetailArgumentCaptor = ArgumentCaptor.forClass(JobDetail.class);
+        ArgumentCaptor<Trigger> triggerArgumentCaptor = ArgumentCaptor.forClass(Trigger.class);
+        when(featureManager.isActive(Features.FLAG_ASYNC_JOBS)).thenReturn(true);
+        when(schedulerFactoryBean.getScheduler()).thenReturn(scheduler);
+
+        jobSchedulerInitializer.init();
+
+        verify(scheduler, times(2)).scheduleJob(jobDetailArgumentCaptor.capture(), triggerArgumentCaptor.capture());
+
+        List<Object> topics = extractTopics(jobDetailArgumentCaptor);
+
+        List<String> descriptions = extractDescription(triggerArgumentCaptor);
+
+        assertThat(topics, containsInAnyOrder(org.onap.vid.job.Job.JobStatus.IN_PROGRESS, org.onap.vid.job.Job.JobStatus.PENDING));
+        assertThat(descriptions, containsInAnyOrder("Trigger to run async worker for PENDING", "Trigger to run async worker for IN_PROGRESS"));
+    }
+
+    private List<Object> extractTopics(ArgumentCaptor<JobDetail> jobDetailArgumentCaptor) {
+        return jobDetailArgumentCaptor
+                .getAllValues()
+                .stream()
+                .map(JobDetail::getJobDataMap)
+                .map(x -> x.get("topic"))
+                .collect(Collectors.toList());
+    }
+
+    private List<String> extractDescription(ArgumentCaptor<Trigger> triggerArgumentCaptor) {
+        return triggerArgumentCaptor
+                .getAllValues()
+                .stream()
+                .map(Trigger::getDescription)
+                .collect(Collectors.toList());
+    }
+}
\ No newline at end of file
diff --git a/vid-app-common/src/test/java/org/onap/vid/mso/MsoBusinessLogicImplTest.java b/vid-app-common/src/test/java/org/onap/vid/mso/MsoBusinessLogicImplTest.java
index 36f4bdd..4616732 100644
--- a/vid-app-common/src/test/java/org/onap/vid/mso/MsoBusinessLogicImplTest.java
+++ b/vid-app-common/src/test/java/org/onap/vid/mso/MsoBusinessLogicImplTest.java
@@ -1,153 +1,306 @@
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Modifications Copyright (C) 2018 Nokia. 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.vid.mso;
 
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-import org.onap.vid.mso.rest.RequestDetails;
-import org.onap.vid.properties.Features;
-import org.onap.portalsdk.core.util.SystemProperties;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
-import org.springframework.test.context.web.WebAppConfiguration;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-import org.togglz.core.manager.FeatureManager;
-
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-import static org.onap.vid.controllers.MsoController.SVC_INSTANCE_ID;
-import static org.onap.vid.controllers.MsoController.VNF_INSTANCE_ID;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.argThat;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
 import static org.onap.vid.mso.MsoBusinessLogicImpl.validateEndpointPath;
 
-@ContextConfiguration(classes = {SystemProperties.class})
-@WebAppConfiguration
-public class MsoBusinessLogicImplTest extends AbstractTestNGSpringContextTests {
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.stream.Collectors;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentMatcher;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.onap.vid.exceptions.GenericUncheckedException;
+import org.onap.vid.mso.rest.Request;
+import org.onap.vid.mso.rest.RequestDetails;
+import org.onap.vid.mso.rest.RequestDetailsWrapper;
+import org.onap.vid.properties.Features;
+import org.springframework.http.HttpStatus;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.togglz.core.manager.FeatureManager;
 
-    @InjectMocks
+@ContextConfiguration(classes = {SystemProperties.class})
+@RunWith(SpringJUnit4ClassRunner.class)
+public class MsoBusinessLogicImplTest {
+
+    private static final ObjectMapper objectMapper = new ObjectMapper();
+
+    @Mock
+    private FeatureManager featureManager;
+
+    @Mock
+    private MsoInterface msoInterface;
+
     private MsoBusinessLogicImpl msoBusinessLogic;
 
-    @Mock
-    private FeatureManager featureManagerMock;
-
-    @Mock
-    private MsoInterface msoInterfaceMock;
-
-
-    @BeforeTest
-    public void initMocks(){
+    @Before
+    public void setUp() {
         MockitoAnnotations.initMocks(this);
+        msoBusinessLogic = new MsoBusinessLogicImpl(msoInterface, featureManager);
     }
 
     @Test
-    public void validateEndpointPath_endPointIsNotEmptyAndVaild_returnProperty(){
-        System.setProperty("TestEnv","123");
+    public void createConfigurationInstance_shouldCallMsoInterface_withCorrectServiceInstanceId() throws Exception {
+        // given
+        String serviceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d";
+        String endpointTemplate = String.format("/serviceInstances/v6/%s/configurations", serviceInstanceId);
+        RequestDetailsWrapper requestDetailsWrapper = createRequestDetails("mso_request_create_configuration.json");
+        MsoResponseWrapper expectedResponse = createOkResponse();
+        given(msoInterface.createConfigurationInstance(requestDetailsWrapper, endpointTemplate))
+            .willReturn(expectedResponse);
+
+        // when
+        MsoResponseWrapper msoResponseWrapper = msoBusinessLogic
+            .createConfigurationInstance(requestDetailsWrapper, serviceInstanceId);
+
+        // then
+        assertThat(msoResponseWrapper).isEqualToComparingFieldByField(expectedResponse);
+    }
+
+    private RequestDetailsWrapper createRequestDetails(String bodyFileName) throws Exception {
+        final URL resource = this.getClass().getResource("/payload_jsons/" + bodyFileName);
+        RequestDetails requestDetails = objectMapper.readValue(resource, RequestDetails.class);
+        return new RequestDetailsWrapper(requestDetails);
+    }
+
+    @Test
+    public void validateEndpointPath_endPointIsNotEmptyAndVaild_returnProperty() {
+        System.setProperty("TestEnv", "123");
         String foundEndPoint = validateEndpointPath("TestEnv");
-        Assert.assertEquals("123",foundEndPoint);
+        assertEquals("123", foundEndPoint);
     }
 
-    @Test(expectedExceptions = RuntimeException.class)
-    public void validateEndpointPath_endPointIsNull_throwRuntimeException(){
-        validateEndpointPath("NotExists");
+    @Test
+    public void validateEndpointPath_endPointIsNull_throwRuntimeException() {
+        assertThatExceptionOfType(RuntimeException.class)
+            .isThrownBy(() -> validateEndpointPath("NotExists"));
     }
 
-    @Test(expectedExceptions = RuntimeException.class)
-    public void validateEndpointPath_endPointIsNotEmptyButDoesntExists_throwRuntimeException(){
-        System.setProperty("EmptyEndPoint","");
-        validateEndpointPath("EmptyEndPoint");
+    @Test
+    public void validateEndpointPath_endPointIsNotEmptyButDoesntExists_throwRuntimeException() {
+        String endPoint = "EmptyEndPoint";
+        System.setProperty(endPoint, "");
+        assertThatExceptionOfType(GenericUncheckedException.class)
+            .isThrownBy(() -> validateEndpointPath(endPoint))
+            .withMessage(endPoint + " env variable is not defined");
     }
 
-
-    //@Test(dataProvider = "unAssignOrDeleteParams")
-    public void deleteSvcInstance_verifyEndPointPathConstructing_unAssignFeatureOffOrUnAssignFlagIsFalse(boolean isAssignFlag,String status) {
-        Mockito.reset(msoInterfaceMock);
-        String endpoint = validateEndpointPath(isAssignFlag ? MsoProperties.MSO_DELETE_OR_UNASSIGN_REST_API_SVC_INSTANCE : MsoProperties.MSO_REST_API_SVC_INSTANCE);
+    @Test
+    public void deleteSvcInstance_verifyEndPointPathConstructing_unAssignFeatureOffOrUnAssignFlagIsFalse() {
+        // given
+        String endpointTemplate = "/serviceInstances/v5/%s";
+        String serviceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d";
+        String svcEndpoint = String.format(endpointTemplate, serviceInstanceId);
         RequestDetails requestDetails = new RequestDetails();
+        MsoResponseWrapper expectedResponse = createOkResponse();
+        given(msoInterface.deleteSvcInstance(requestDetails, svcEndpoint)).willReturn(expectedResponse);
+        given(featureManager.isActive(Features.FLAG_UNASSIGN_SERVICE)).willReturn(false);
 
-        when(featureManagerMock.isActive(Features.FLAG_UNASSIGN_SERVICE)).thenReturn(isAssignFlag);
+        // when
+        MsoResponseWrapper msoResponseWrapper = msoBusinessLogic
+            .deleteSvcInstance(requestDetails, serviceInstanceId, "unAssignOrDeleteParams");
 
-        msoBusinessLogic.deleteSvcInstance(requestDetails, "tempId", status);
-
-        verify(msoInterfaceMock).deleteSvcInstance(requestDetails, endpoint + "/tempId");
+        // then
+        assertThat(msoResponseWrapper).isEqualToComparingFieldByField(expectedResponse);
     }
 
-    @DataProvider
-    public Object[][] unAssignOrDeleteParams() {
-        return new Object[][]{
-                {Boolean.FALSE, "active"},
-                {Boolean.FALSE, "created"},
-                {Boolean.TRUE, "Active"},
-                {Boolean.TRUE, "unexpected-status"},
-        };
-    }
-
-    //@Test(dataProvider = "unAssignStatus")
-    public void deleteSvcInstance_verifyEndPointPathConstructing_unAssignFeatureOnAndUnAssignFlagIsTrue(String status) {
-        Mockito.reset(msoInterfaceMock);
-        // in the test Features.FLAG_UNASSIGN_SERVICE is active so the endpoint should be MsoProperties.MSO_DELETE_OR_UNASSIGN_REST_API_SVC_INSTANCE
-        String endpoint = validateEndpointPath(MsoProperties.MSO_DELETE_OR_UNASSIGN_REST_API_SVC_INSTANCE);
+    @Test
+    public void deleteSvcInstance_verifyEndPointPathConstructing_unAssignFeatureOnAndUnAssignFlagIsTrue() {
+        // given
+        String endpointTemplate = "/serviceInstantiation/v5/serviceInstances/%s/unassign";
+        String serviceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d";
+        String svcEndpoint = String.format(endpointTemplate, serviceInstanceId);
         RequestDetails requestDetails = new RequestDetails();
+        MsoResponseWrapper expectedResponse = createOkResponse();
+        given(msoInterface.unassignSvcInstance(requestDetails, svcEndpoint)).willReturn(expectedResponse);
+        given(featureManager.isActive(Features.FLAG_UNASSIGN_SERVICE)).willReturn(true);
 
-        when(featureManagerMock.isActive(Features.FLAG_UNASSIGN_SERVICE)).thenReturn(true);
+        // when
+        MsoResponseWrapper msoResponseWrapper = msoBusinessLogic
+            .deleteSvcInstance(requestDetails, serviceInstanceId, "assigned");
 
-        msoBusinessLogic.deleteSvcInstance(requestDetails, "tempId", status);
-
-        verify(msoInterfaceMock).unassignSvcInstance(requestDetails, endpoint + "/tempId/unassign");
-    }
-
-    @DataProvider
-    public Object[][] unAssignStatus() {
-        return new Object[][]{
-                {"Created"},
-                {"Pendingdelete"},
-                {"pending-Delete"},
-                {"Assigned"}
-        };
+        // then
+        assertThat(msoResponseWrapper).isEqualToComparingFieldByField(expectedResponse);
     }
 
     @Test
     public void deleteVnf_verifyEndPointPathConstructing() {
-        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
+        // when
+        String endpointTemplate = "/serviceInstances/v5/%s/vnfs/%s";
+        String serviceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d";
+        String vnfInstanceId = "testVnfInstanceTempId";
+        String vnfEndpoint = String.format(endpointTemplate, serviceInstanceId, vnfInstanceId);
         RequestDetails requestDetails = new RequestDetails();
+        MsoResponseWrapper expectedResponse = createOkResponse();
+        given(msoInterface.deleteVnf(requestDetails, vnfEndpoint)).willReturn(expectedResponse);
 
-        String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, "serviceInstanceTempId");
+        // when
+        MsoResponseWrapper msoResponseWrapper = msoBusinessLogic
+            .deleteVnf(requestDetails, serviceInstanceId, vnfInstanceId);
 
-        msoBusinessLogic.deleteVnf(requestDetails, "serviceInstanceTempId","vnfInstanceTempId");
-        verify(msoInterfaceMock).deleteVnf(requestDetails, vnf_endpoint + "/vnfInstanceTempId");
+        // then
+        assertThat(msoResponseWrapper).isEqualToComparingFieldByField(expectedResponse);
     }
 
     @Test
     public void deleteVfModule_verifyEndPointPathConstructing() {
-        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
+        // when
+        String endpointTemplate = "/serviceInstances/v7/%s/vnfs/%s/vfModules/%s";
+        String serviceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d";
+        String vnfInstanceId = "testVnfInstanceTempId";
+        String vfModuleId = "testVfModuleId";
+        String vnfEndpoint = String.format(endpointTemplate, serviceInstanceId, vnfInstanceId, vfModuleId);
         RequestDetails requestDetails = new RequestDetails();
+        MsoResponseWrapper expectedResponse = createOkResponse();
+        given(msoInterface.deleteVfModule(requestDetails, vnfEndpoint)).willReturn(expectedResponse);
 
-        String vf__modules_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, "serviceInstanceTempId").replaceFirst(VNF_INSTANCE_ID, "vnfInstanceTempId");
-
-        msoBusinessLogic.deleteVfModule(requestDetails, "serviceInstanceTempId","vnfInstanceTempId", "vfModuleTempId");
-        verify(msoInterfaceMock).deleteVfModule(requestDetails, vf__modules_endpoint + "/vfModuleTempId" );
+        // when
+        MsoResponseWrapper msoResponseWrapper = msoBusinessLogic
+            .deleteVfModule(requestDetails, serviceInstanceId, vnfInstanceId, vfModuleId);
+        // then
+        assertThat(msoResponseWrapper).isEqualToComparingFieldByField(expectedResponse);
     }
 
     @Test
-    public void insertServiceInstantiationToDB_StartJob() {
+    public void shouldSendProperScaleOutRequest() throws IOException {
+        // given
+        String serviceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d";
+        String vnfInstanceId = "testVnfInstanceTempId";
+        String endpointTemplate = "/serviceInstantiation/v7/serviceInstances/%s/vnfs/%s/vfModules/scaleOut";
+        String vnfEndpoint = String.format(endpointTemplate, serviceInstanceId, vnfInstanceId);
+        org.onap.vid.changeManagement.RequestDetails requestDetails = readRequest(
+            "scaleOutVfModulePayload.json");
+        org.onap.vid.changeManagement.RequestDetailsWrapper expectedRequest = readExpectedRequest(
+            "scaleOutVfModulePayloadToMso.json");
+        MsoResponseWrapper expectedMsoResponseWrapper = createOkResponse();
+        given(
+            msoInterface
+                .scaleOutVFModuleInstance(argThat(new MsoRequestWrapperMatcher(expectedRequest)),
+                    eq(vnfEndpoint)))
+            .willReturn(expectedMsoResponseWrapper);
 
-//        broker = new JobsBrokerServiceInDatabaseImpl(dataAccessServiceMock, sessionFactory);
-//        ((JobsBrokerServiceInDatabaseImpl)broker).deleteAll();
-//
-////        msoBusinessLogic.setDataAccessService(dataAccessServiceMock);
-////        msoBusinessLogic.setJobsBrokerService(broker);
-////        msoBusinessLogic.setJobAdapter(jobAdapter);
-//
-//        ServiceInstantiation serviceInstantiation = new ServiceInstantiation();
-//        serviceInstantiation.setCount(2);
-//        serviceInstantiation.setInstanceName("TestName");
-//
-//        msoBusinessLogic.pushBulkJob(serviceInstantiation, "testUserId");
-//
-//        List<ServiceInfo> serviceInfoList = dataAccessServiceMock.getList(ServiceInfo.class, null);
-//        int k = 9;
-//        Assert.assertEquals(serviceInstantiation, containsInAnyOrder(serviceInfoList.toArray()));
+        // when
+        MsoResponseWrapper msoResponseWrapper = msoBusinessLogic
+            .scaleOutVfModuleInstance(requestDetails, serviceInstanceId, vnfInstanceId);
+
+        // then
+        assertThat(msoResponseWrapper).isEqualToComparingFieldByField(expectedMsoResponseWrapper);
+    }
+
+    private org.onap.vid.changeManagement.RequestDetails readRequest(String requestJsonFilename) throws IOException {
+        Path path = Paths.get("payload_jsons", requestJsonFilename);
+        URL url = this.getClass().getClassLoader().getResource(path.toString());
+        return objectMapper.readValue(url, org.onap.vid.changeManagement.RequestDetails.class);
+    }
+
+    private org.onap.vid.changeManagement.RequestDetailsWrapper readExpectedRequest(String requestJsonFilename)
+        throws IOException {
+        Path path = Paths.get("payload_jsons", requestJsonFilename);
+        URL url = this.getClass().getClassLoader().getResource(path.toString());
+        return objectMapper.readValue(url,
+            new TypeReference<org.onap.vid.changeManagement.RequestDetailsWrapper<org.onap.vid.changeManagement.RequestDetails>>() {
+            });
+    }
+
+    private MsoResponseWrapper createOkResponse() {
+        HttpStatus expectedStatus = HttpStatus.ACCEPTED;
+        String expectedBody = " \"body\": {\n" +
+            "      \"requestReferences\": {\n" +
+            "        \"instanceId\": \" 123456 \",\n" +
+            "        \"requestId\": \"b6dc9806-b094-42f7-9386-a48de8218ce8\"\n" +
+            "      }";
+        MsoResponseWrapper responseWrapper = new MsoResponseWrapper();
+        responseWrapper.setEntity(expectedBody);
+        responseWrapper.setStatus(expectedStatus.value());
+        return responseWrapper;
+    }
+
+    @Test
+    public void shouldFilterOutOrchestrationRequestsNotAllowedInDashboard() throws IOException {
+        //given
+        String vnfModelTypeOrchestrationRequests = getFileContentAsString("mso_model_info_sample_response.json");
+        String scaleOutActionOrchestrationRequests = getFileContentAsString("mso_action_scaleout_sample_response.json");
+
+        MsoResponseWrapper msoResponseWrapperMock = mock(MsoResponseWrapper.class);
+        given(msoInterface
+            .getOrchestrationRequestsForDashboard(any(String.class), any(String.class), any(String.class),
+                any(RestObject.class)))
+            .willReturn(msoResponseWrapperMock);
+        given(msoResponseWrapperMock.getEntity())
+            .willReturn(vnfModelTypeOrchestrationRequests, scaleOutActionOrchestrationRequests);
+
+        //when
+        List<Request> filteredOrchestrationReqs = msoBusinessLogic.getOrchestrationRequestsForDashboard();
+
+        //then
+        assertThat(filteredOrchestrationReqs).hasSize(3);
+        assertThat(MsoBusinessLogicImpl.DASHBOARD_ALLOWED_TYPES)
+            .containsAll(filteredOrchestrationReqs
+                .stream()
+                .map(el -> el.getRequestType().toUpperCase())
+                .collect(Collectors.toList()));
+        assertThat(filteredOrchestrationReqs)
+            .extracting(org.onap.vid.domain.mso.Request::getRequestScope)
+            .containsOnly("vnf", "vfModule");
+    }
+
+    private String getFileContentAsString(String resourceName) throws IOException {
+        URL url = this.getClass().getClassLoader().getResource(".");
+        Path path = Paths.get(url.getPath(), "payload_jsons", resourceName);
+        return new String(Files.readAllBytes(path));
+    }
+
+    private static class MsoRequestWrapperMatcher extends
+        ArgumentMatcher<org.onap.vid.changeManagement.RequestDetailsWrapper> {
+
+        private final org.onap.vid.changeManagement.RequestDetailsWrapper expectedRequest;
+
+        public MsoRequestWrapperMatcher(org.onap.vid.changeManagement.RequestDetailsWrapper expectedRequest) {
+            this.expectedRequest = expectedRequest;
+        }
+
+        @Override
+        public boolean matches(Object argument) {
+            org.onap.vid.changeManagement.RequestDetailsWrapper requestDetailsWrapper = (org.onap.vid.changeManagement.RequestDetailsWrapper) argument;
+            return expectedRequest.requestDetails.equals(requestDetailsWrapper.requestDetails);
+        }
     }
 }
 
diff --git a/vid-app-common/src/test/java/org/onap/vid/mso/MsoBusinessLogicTest.java b/vid-app-common/src/test/java/org/onap/vid/mso/MsoBusinessLogicTest.java
deleted file mode 100644
index af7f74b..0000000
--- a/vid-app-common/src/test/java/org/onap/vid/mso/MsoBusinessLogicTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package org.onap.vid.mso;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.onap.vid.mso.MsoBusinessLogicImpl;
-import org.onap.vid.mso.MsoInterface;
-import org.onap.vid.mso.MsoResponseWrapper;
-import org.onap.vid.mso.rest.RequestDetails;
-import org.onap.vid.mso.rest.RequestDetailsWrapper;
-import org.testng.annotations.Test;
-
-import java.net.URL;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-
-@RunWith(MockitoJUnitRunner.class)
-public class MsoBusinessLogicTest {
-
-    @InjectMocks
-    private MsoBusinessLogicImpl msoBusinessLogic;
-
-    @Mock
-    private MsoInterface msoClient;
-
-    @Test
-    public void testCreateInstance() throws Exception {
-        String instanceId = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d";
-        final RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
-        requestDetailsWrapper.requestDetails = setRequestDetails("mso_request_create_configuration.json");
-        Mockito.doReturn(getOkResponse(instanceId)).when(msoClient).createConfigurationInstance(requestDetailsWrapper, "/serviceInstances/v6/3f93c7cb-2fd0-4557-9514-e189b7b04f9d/configurations");
-        final MsoResponseWrapper msoResponseWrapper = msoBusinessLogic.createConfigurationInstance(requestDetailsWrapper, instanceId);
-
-        assertNotNull(msoResponseWrapper);
-        assertEquals(202, msoResponseWrapper.getStatus());
-    }
-
-    private MsoResponseWrapper getOkResponse(String instanceId){
-        MsoResponseWrapper responseWrapper = new MsoResponseWrapper();
-        String entity = " \"body\": {\n" +
-                "      \"requestReferences\": {\n" +
-                "        \"instanceId\": \""+instanceId+"\",\n" +
-                "        \"requestId\": \"b6dc9806-b094-42f7-9386-a48de8218ce8\"\n" +
-                "      }";
-        responseWrapper.setEntity(entity);
-        responseWrapper.setStatus(202);
-        return responseWrapper;
-    }
-
-    private RequestDetails setRequestDetails(String bodyFileName)throws Exception {
-        final URL resource = this.getClass().getResource("/payload_jsons/" + bodyFileName);
-        ObjectMapper mapper = new ObjectMapper();
-        RequestDetails requestDetails = mapper.readValue(resource, RequestDetails.class);
-        return requestDetails;
-
-    }
-}
diff --git a/vid-app-common/src/test/java/org/onap/vid/mso/rest/MsoRestClientNewTest.java b/vid-app-common/src/test/java/org/onap/vid/mso/rest/MsoRestClientNewTest.java
index 402386a..bfc82ce 100644
--- a/vid-app-common/src/test/java/org/onap/vid/mso/rest/MsoRestClientNewTest.java
+++ b/vid-app-common/src/test/java/org/onap/vid/mso/rest/MsoRestClientNewTest.java
@@ -21,17 +21,12 @@
 package org.onap.vid.mso.rest;
 
 import com.xebialabs.restito.server.StubServer;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Properties;
-import java.util.UUID;
 import org.glassfish.grizzly.http.util.HttpStatus;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
+import org.onap.portalsdk.core.util.SystemProperties;
 import org.onap.vid.client.SyncRestClient;
 import org.onap.vid.controllers.MsoController;
 import org.onap.vid.mso.MsoInterface;
@@ -39,16 +34,30 @@
 import org.onap.vid.mso.MsoResponseWrapper;
 import org.onap.vid.mso.MsoResponseWrapperInterface;
 import org.onap.vid.mso.RestObject;
+import org.springframework.test.context.ContextConfiguration;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Properties;
+import java.util.UUID;
+
+import static org.onap.vid.controllers.MsoController.SVC_INSTANCE_ID;
+import static org.onap.vid.controllers.MsoController.VNF_INSTANCE_ID;
+
+@ContextConfiguration(classes = {SystemProperties.class})
 public class MsoRestClientNewTest {
 
     private static StubServer server;
     private static StubServer securedServer;
     private static Properties props = new Properties();
     private static String msoCreateServiceInstanceJson;
+    private static String msoScaleOutVfModule;
     private final static String CREATE_INSTANCE_RESPONSE_STR =
-        "{\"requestReferences\":{\"instanceId\":\"baa13544-0e95-4644-9565-9a198a29a294\","
-            + "\"requestId\":\"a42a1a35-3d63-4629-bbe0-4989fa7414cb\"}}";
+            "{\"requestReferences\":{\"instanceId\":\"baa13544-0e95-4644-9565-9a198a29a294\","
+                    + "\"requestId\":\"a42a1a35-3d63-4629-bbe0-4989fa7414cb\"}}";
     private final static String SERVICE_INSTANCE_ID = "12345";
     private static final String SAMPLE_VNF_INSTANCE_ID = "111";
     private static final String SAMPLE_VNF_MODULE_ID = "987";
@@ -63,15 +72,19 @@
         securedServer = new StubServer().secured().run();
 
         Path resourceDirectory =
-            Paths.get("src", "test", "resources", "WEB-INF", "conf", "system.properties");
-        try(InputStream is = Files.newInputStream(resourceDirectory)) {
+                Paths.get("src", "test", "resources", "WEB-INF", "conf", "system.properties");
+        try (InputStream is = Files.newInputStream(resourceDirectory)) {
             props.load(is);
         }
 
         Path msoServiceInstantiationJsonFilePath =
-            Paths.get("src", "test", "resources", "payload_jsons", "mso_service_instantiation.json");
+                Paths.get("src", "test", "resources", "payload_jsons", "mso_service_instantiation.json");
+
+        Path scaleOutJsonFilePath = Paths.get("src", "test", "resources", "payload_jsons", "scaleOutVfModulePayloadToMso.json");
         msoCreateServiceInstanceJson =
-            String.join("\n", Files.readAllLines(msoServiceInstantiationJsonFilePath));
+                String.join("\n", Files.readAllLines(msoServiceInstantiationJsonFilePath));
+        msoScaleOutVfModule = String.join("\n", Files.readAllLines(scaleOutJsonFilePath));
+
     }
 
     @AfterClass
@@ -89,11 +102,11 @@
     public void testCreateSvcInstance() throws Exception {
         String endpoint = props.getProperty(MsoProperties.MSO_REST_API_CONFIGURATIONS);
         endpoint = endpoint.replace(MsoController.SVC_INSTANCE_ID, SERVICE_INSTANCE_ID);
-        try(MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
-            server,
-            endpoint,
-            HttpStatus.ACCEPTED_202,
-            CREATE_INSTANCE_RESPONSE_STR,CREATE_INSTANCE_RESPONSE_STR)) {
+        try (MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
+                server,
+                endpoint,
+                HttpStatus.ACCEPTED_202,
+                CREATE_INSTANCE_RESPONSE_STR, CREATE_INSTANCE_RESPONSE_STR)) {
             closure.executePost(msoCreateServiceInstanceJson, msoRestClient()::createSvcInstance);
         }
     }
@@ -102,12 +115,12 @@
     public void testCreateVnf() throws Exception {
         String endpoint = props.getProperty(MsoProperties.MSO_REST_API_VNF_INSTANCE);
         endpoint = endpoint.replace(MsoController.SVC_INSTANCE_ID, SERVICE_INSTANCE_ID);
-        try(MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
-            server,
-            endpoint,
-            HttpStatus.ACCEPTED_202,
-            CREATE_INSTANCE_RESPONSE_STR,CREATE_INSTANCE_RESPONSE_STR)) {
-            
+        try (MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
+                server,
+                endpoint,
+                HttpStatus.ACCEPTED_202,
+                CREATE_INSTANCE_RESPONSE_STR, CREATE_INSTANCE_RESPONSE_STR)) {
+
             closure.executePost(msoCreateServiceInstanceJson, msoRestClient()::createVnf);
         }
     }
@@ -116,11 +129,11 @@
     public void testCreateNwInstance() throws Exception {
         String endpoint = props.getProperty(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
         String nw_endpoint = endpoint.replaceFirst(MsoController.SVC_INSTANCE_ID, SERVICE_INSTANCE_ID);
-        try(MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
-            server,
-            nw_endpoint,
-            HttpStatus.ACCEPTED_202,
-            CREATE_INSTANCE_RESPONSE_STR,CREATE_INSTANCE_RESPONSE_STR)) {
+        try (MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
+                server,
+                nw_endpoint,
+                HttpStatus.ACCEPTED_202,
+                CREATE_INSTANCE_RESPONSE_STR, CREATE_INSTANCE_RESPONSE_STR)) {
             closure.executePost(msoCreateServiceInstanceJson, msoRestClient()::createNwInstance);
         }
     }
@@ -130,11 +143,11 @@
         String endpoint = props.getProperty(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
         String vnf_endpoint = endpoint.replaceFirst(MsoController.SVC_INSTANCE_ID, SERVICE_INSTANCE_ID);
         vnf_endpoint = vnf_endpoint.replaceFirst(MsoController.VNF_INSTANCE_ID, SAMPLE_VNF_INSTANCE_ID);
-        try(MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
-            server,
-            vnf_endpoint,
-            HttpStatus.ACCEPTED_202,
-            CREATE_INSTANCE_RESPONSE_STR,CREATE_INSTANCE_RESPONSE_STR)) {
+        try (MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
+                server,
+                vnf_endpoint,
+                HttpStatus.ACCEPTED_202,
+                CREATE_INSTANCE_RESPONSE_STR, CREATE_INSTANCE_RESPONSE_STR)) {
             closure.executePost(msoCreateServiceInstanceJson, msoRestClient()::createVolumeGroupInstance);
         }
     }
@@ -144,14 +157,14 @@
         String endpoint = props.getProperty(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
         String partial_endpoint = endpoint.replaceFirst(MsoController.SVC_INSTANCE_ID, SERVICE_INSTANCE_ID);
         String vf_module_endpoint =
-            partial_endpoint.replaceFirst(MsoController.VNF_INSTANCE_ID, SAMPLE_VNF_INSTANCE_ID);
+                partial_endpoint.replaceFirst(MsoController.VNF_INSTANCE_ID, SAMPLE_VNF_INSTANCE_ID);
 
 
-        try(MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
-            server,
-            vf_module_endpoint,
-            HttpStatus.ACCEPTED_202,
-            CREATE_INSTANCE_RESPONSE_STR,CREATE_INSTANCE_RESPONSE_STR)) {
+        try (MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
+                server,
+                vf_module_endpoint,
+                HttpStatus.ACCEPTED_202,
+                CREATE_INSTANCE_RESPONSE_STR, CREATE_INSTANCE_RESPONSE_STR)) {
             closure.executePost(msoCreateServiceInstanceJson, msoRestClient()::createVfModuleInstance);
         }
     }
@@ -170,36 +183,38 @@
         } catch (Exception e) {
         }
     }
-
+    @Ignore
     @Test
     public void testDeleteSvcInstance() throws Exception {
         String endpoint = props.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
         endpoint = endpoint.replaceFirst(MsoController.SVC_INSTANCE_ID, SERVICE_INSTANCE_ID);
 
 
-        try(MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
-            server,
-            endpoint,
-            HttpStatus.NO_CONTENT_204,
-            CREATE_INSTANCE_RESPONSE_STR,CREATE_INSTANCE_RESPONSE_STR)) {
+        try (MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
+                server,
+                endpoint,
+                HttpStatus.NO_CONTENT_204,
+                CREATE_INSTANCE_RESPONSE_STR, CREATE_INSTANCE_RESPONSE_STR)) {
             closure.executeDelete(msoCreateServiceInstanceJson, msoRestClient()::deleteSvcInstance);
         }
     }
 
+    @Ignore
     @Test
     public void testDeleteVnf() throws Exception {
         String endpoint = props.getProperty(MsoProperties.MSO_REST_API_VNF_INSTANCE);
         endpoint = endpoint.replaceFirst(MsoController.SVC_INSTANCE_ID, SERVICE_INSTANCE_ID);
 
-        try(MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
-            server,
-            endpoint,
-            HttpStatus.NO_CONTENT_204,
-            CREATE_INSTANCE_RESPONSE_STR,CREATE_INSTANCE_RESPONSE_STR)) {
+        try (MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
+                server,
+                endpoint,
+                HttpStatus.NO_CONTENT_204,
+                CREATE_INSTANCE_RESPONSE_STR, CREATE_INSTANCE_RESPONSE_STR)) {
             closure.executeDelete(msoCreateServiceInstanceJson, msoRestClient()::deleteVnf);
         }
     }
 
+    @Ignore
     @Test
     public void testDeleteVfModule() throws Exception {
         String endpoint = props.getProperty(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
@@ -207,15 +222,16 @@
         String vf_modules_endpoint = part_endpoint.replaceFirst(MsoController.VNF_INSTANCE_ID, SAMPLE_VNF_INSTANCE_ID);
         String delete_vf_endpoint = vf_modules_endpoint + '/' + SAMPLE_VNF_MODULE_ID;
 
-        try(MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
-            server,
-            delete_vf_endpoint,
-            HttpStatus.NO_CONTENT_204,
-            CREATE_INSTANCE_RESPONSE_STR,CREATE_INSTANCE_RESPONSE_STR)) {
+        try (MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
+                server,
+                delete_vf_endpoint,
+                HttpStatus.NO_CONTENT_204,
+                CREATE_INSTANCE_RESPONSE_STR, CREATE_INSTANCE_RESPONSE_STR)) {
             closure.executeDelete(msoCreateServiceInstanceJson, msoRestClient()::deleteVfModule);
         }
     }
 
+    @Ignore
     @Test
     public void testDeleteVolumeGroupInstance() throws Exception {
         String endpoint = props.getProperty(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
@@ -223,15 +239,16 @@
         String vnf_endpoint = svc_endpoint.replaceFirst(MsoController.VNF_INSTANCE_ID, SAMPLE_VNF_INSTANCE_ID);
         String delete_volume_group_endpoint = vnf_endpoint + "/" + SAMPLE_VNF_MODULE_ID;
 
-        try(MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
-            server,
-            delete_volume_group_endpoint,
-            HttpStatus.NO_CONTENT_204,
-            CREATE_INSTANCE_RESPONSE_STR,CREATE_INSTANCE_RESPONSE_STR)) {
+        try (MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
+                server,
+                delete_volume_group_endpoint,
+                HttpStatus.NO_CONTENT_204,
+                CREATE_INSTANCE_RESPONSE_STR, CREATE_INSTANCE_RESPONSE_STR)) {
             closure.executeDelete(msoCreateServiceInstanceJson, msoRestClient()::deleteVolumeGroupInstance);
         }
     }
 
+    @Ignore
     @Test
     public void testDeleteNwInstance() throws Exception {
         String endpoint = props.getProperty(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
@@ -410,11 +427,11 @@
         String serviceEndpoint = props.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
         String removeRelationshipsPath = serviceEndpoint + "/" + SERVICE_INSTANCE_ID + "/removeRelationships";
 
-        try(MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
-            server,
-            removeRelationshipsPath,
-            HttpStatus.ACCEPTED_202,
-            CREATE_INSTANCE_RESPONSE_STR,CREATE_INSTANCE_RESPONSE_STR)) {
+        try (MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
+                server,
+                removeRelationshipsPath,
+                HttpStatus.ACCEPTED_202,
+                CREATE_INSTANCE_RESPONSE_STR, CREATE_INSTANCE_RESPONSE_STR)) {
             closure.executePost(msoCreateServiceInstanceJson, msoRestClient()::removeRelationshipFromServiceInstance);
         }
     }
@@ -433,6 +450,20 @@
         } catch (Exception e) {
         }
     }
+    @Test
+    public void testScaleOutVfModule() throws IOException {
+        String serviceEndpoint = props.getProperty(MsoProperties.MSO_REST_API_VF_MODULE_SCALE_OUT);
+        String partial_endpoint = serviceEndpoint.replaceFirst(SVC_INSTANCE_ID, SERVICE_INSTANCE_ID);
+        String vf_module_endpoint = partial_endpoint.replaceFirst(VNF_INSTANCE_ID, SAMPLE_VNF_INSTANCE_ID);
+        try (MsoRestClientTestUtil closure = new MsoRestClientTestUtil(
+                server,
+                vf_module_endpoint,
+                HttpStatus.ACCEPTED_202,
+                CREATE_INSTANCE_RESPONSE_STR, CREATE_INSTANCE_RESPONSE_STR)) {
+            closure.executePostCall(msoScaleOutVfModule, msoRestClient()::scaleOutVFModuleInstance);
+        }
+
+    }
 
     private MsoRestClientNew msoRestClient() {
         return new MsoRestClientNew(new SyncRestClient(MsoInterface.objectMapper()), baseUrl());
diff --git a/vid-app-common/src/test/java/org/onap/vid/mso/rest/MsoRestClientTestUtil.java b/vid-app-common/src/test/java/org/onap/vid/mso/rest/MsoRestClientTestUtil.java
index e8f5569..c81fa16 100644
--- a/vid-app-common/src/test/java/org/onap/vid/mso/rest/MsoRestClientTestUtil.java
+++ b/vid-app-common/src/test/java/org/onap/vid/mso/rest/MsoRestClientTestUtil.java
@@ -20,11 +20,13 @@
 import java.util.function.Function;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
+
 import org.glassfish.grizzly.http.Method;
 import org.glassfish.grizzly.http.util.HttpStatus;
 import org.json.JSONObject;
 import org.junit.Assert;
 import org.onap.portalsdk.core.util.SystemProperties;
+import org.onap.vid.changeManagement.RequestDetailsWrapper;
 import org.onap.vid.mso.MsoResponseWrapper;
 
 class MsoRestClientTestUtil implements AutoCloseable {
@@ -60,6 +62,21 @@
     verifyServer(server, endpoint, Method.POST);
 
   }
+  void executePostCall(String jsonPayload, BiFunction<RequestDetailsWrapper, String, MsoResponseWrapper> func) throws IOException {
+    whenHttp(server)
+            .match(post(endpoint))
+            .then(status(expectedStatus), jsonContent(responsePayload), contentType(MediaType.APPLICATION_JSON));
+
+    RequestDetailsWrapper  sampleRequestDetails =
+            new ObjectMapper().readValue(jsonPayload, RequestDetailsWrapper.class);
+
+    MsoResponseWrapper response = func.apply(sampleRequestDetails, endpoint);
+    JSONObject actualJson = new JSONObject(response.getEntity());
+
+    Assert.assertEquals(expectedStatus.getStatusCode(), response.getStatus());
+    Assert.assertEquals(expectedResponseStr, actualJson.toString());
+    verifyServer(server, endpoint, Method.POST);
+  }
 
   void executeDelete(String jsonPayload, BiFunction<RequestDetails, String, MsoResponseWrapper> func)
       throws IOException {
diff --git a/vid-app-common/src/test/java/org/onap/vid/services/AuditServiceImplTest.java b/vid-app-common/src/test/java/org/onap/vid/services/AuditServiceImplTest.java
new file mode 100644
index 0000000..3d2a20b
--- /dev/null
+++ b/vid-app-common/src/test/java/org/onap/vid/services/AuditServiceImplTest.java
@@ -0,0 +1,63 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2018 Nokia. 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.vid.services;
+
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+import java.util.UUID;
+import org.glassfish.grizzly.http.util.HttpStatus;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+public class AuditServiceImplTest {
+  @Mock
+  private AsyncInstantiationBusinessLogic asyncInstantiationBL;
+
+  @InjectMocks
+  private AuditServiceImpl auditService;
+
+  @BeforeClass
+  public void init() {
+    initMocks(this);
+  }
+
+  @Test
+  public void setFailedAuditStatusFromMsoTest() {
+
+    UUID jobUuid = UUID.randomUUID();
+    String requestId = "1";
+    int statusCode = HttpStatus.OK_200.getStatusCode();
+    String msoResponse = "{}";
+
+    auditService.setFailedAuditStatusFromMso(jobUuid, requestId, statusCode, msoResponse);
+
+    verify(asyncInstantiationBL, times(1))
+        .auditMsoStatus(
+            Mockito.any(UUID.class),
+            Mockito.anyString(),
+            Mockito.anyString(),
+            Mockito.anyString());
+  }
+}
diff --git a/vid-app-common/src/test/java/org/onap/vid/services/BulkInstantiationServiceImplTest.java b/vid-app-common/src/test/java/org/onap/vid/services/BulkInstantiationServiceImplTest.java
new file mode 100644
index 0000000..6677da3
--- /dev/null
+++ b/vid-app-common/src/test/java/org/onap/vid/services/BulkInstantiationServiceImplTest.java
@@ -0,0 +1,135 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2018 Nokia. 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.vid.services;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.when;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import javax.ws.rs.NotFoundException;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.onap.vid.job.Job;
+import org.onap.vid.job.JobAdapter;
+import org.onap.vid.job.JobsBrokerService;
+import org.onap.vid.job.impl.JobDaoImpl;
+import org.onap.vid.model.JobBulk;
+import org.onap.vid.model.JobModel;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.BeforeSuite;
+import org.testng.annotations.Test;
+
+public class BulkInstantiationServiceImplTest {
+
+  @Mock
+  private JobsBrokerService jobsBrokerService;
+
+  @Mock
+  private JobAdapter jobAdapter;
+
+  @InjectMocks
+  private BulkInstantiationServiceImpl testSubject;
+
+  @BeforeSuite
+  public void before() {
+    initMocks(this);
+  }
+
+  @BeforeMethod
+  public void resetMocks() {
+    reset(jobsBrokerService);
+    reset(jobAdapter);
+  }
+
+  @Test
+  public void saveBulkTest() {
+    UUID uuid = UUID.randomUUID();
+    Map<String, Object> bulkRequest = new HashMap<>();
+    List<Job> jobList = new ArrayList<>();
+    jobList.add(createJob(uuid));
+    when(jobAdapter.createBulkOfJobs(bulkRequest)).thenReturn(jobList);
+
+    JobBulk jobBulk = createJobBulk(jobList);
+    when(jobAdapter.toModelBulk(jobList)).thenReturn(jobBulk);
+
+    JobBulk result = testSubject.saveBulk(bulkRequest);
+
+    Assert.assertEquals(result.getJobs().size(), jobList.size());
+    Assert.assertEquals(result.getJobs().get(0).getUuid(), uuid);
+  }
+
+  @Test
+  public void getJobTest() {
+    UUID uuid = UUID.randomUUID();
+    Job job = createJob(uuid);
+    doReturn(job).when(jobsBrokerService).peek(uuid);
+    JobModel jobModel = createJobModel(uuid);
+    when(jobAdapter.toModel(job)).thenReturn(jobModel);
+
+    JobModel response = testSubject.getJob(uuid);
+    Assert.assertEquals(response.getUuid(), uuid);
+  }
+
+  @Test(expectedExceptions = {NotFoundException.class})
+  public void getJobTest_throwsExceptionOnEmptyUUID() {
+    UUID uuid = null;
+    Job job = createJob(uuid);
+    doReturn(job).when(jobsBrokerService).peek(uuid);
+    JobModel response = testSubject.getJob(uuid);
+    Assert.fail();
+  }
+
+  @Test(expectedExceptions = {NotFoundException.class})
+  public void getJobTest_throwsExceptionCauseJobDoesNotExists() {
+    UUID uuid = UUID.randomUUID();
+    doReturn(null).when(jobsBrokerService).peek(uuid);
+    JobModel response = testSubject.getJob(uuid);
+    Assert.fail();
+  }
+
+  private Job createJob(UUID uuid) {
+    Job job = new JobDaoImpl();
+    job.setUuid(uuid);
+    return job;
+  }
+
+  private JobModel createJobModel(UUID uuid) {
+    JobModel jobModel = new JobModel();
+    jobModel.setUuid(uuid);
+    return jobModel;
+  }
+
+  private JobBulk createJobBulk(List<Job> jobList) {
+    List<JobModel> jobBulkList = new ArrayList<>();
+    jobList.stream().forEach(job -> {
+      JobModel jm = new JobModel();
+      jm.setUuid(job.getUuid());
+      jobBulkList.add(jm);
+    });
+    return new JobBulk(jobBulkList);
+  }
+}
diff --git a/vid-app-common/src/test/java/org/onap/vid/services/CategoryParameterServiceImplTest.java b/vid-app-common/src/test/java/org/onap/vid/services/CategoryParameterServiceImplTest.java
index 440a2a7..6ac7b54 100644
--- a/vid-app-common/src/test/java/org/onap/vid/services/CategoryParameterServiceImplTest.java
+++ b/vid-app-common/src/test/java/org/onap/vid/services/CategoryParameterServiceImplTest.java
@@ -1,80 +1,262 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2018 Nokia. 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.vid.services;
 
-import org.junit.Test;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.ws.rs.ForbiddenException;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.onap.portalsdk.core.service.DataAccessService;
 import org.onap.vid.category.AddCategoryOptionResponse;
 import org.onap.vid.category.AddCategoryOptionsRequest;
 import org.onap.vid.category.CategoryParameterOptionRep;
 import org.onap.vid.category.CategoryParametersResponse;
+import org.onap.vid.model.CategoryParameter;
+import org.onap.vid.model.CategoryParameter.Family;
 import org.onap.vid.model.CategoryParameterOption;
+import org.onap.vid.services.CategoryParameterServiceImpl.AlreadyExistOptionNameException;
+import org.onap.vid.services.CategoryParameterServiceImpl.UnfoundedCategoryException;
+import org.onap.vid.services.CategoryParameterServiceImpl.UnfoundedCategoryOptionException;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.BeforeSuite;
+import org.testng.annotations.Test;
 
 public class CategoryParameterServiceImplTest {
 
-    private CategoryParameterServiceImpl createTestSubject() {
-        return new CategoryParameterServiceImpl();
+    private static final String CATEGORY_NAME = "SAMPLE_CATEGORY_NAME";
+    private static final String OPTION_NAME = "SAMPLE_OPTION_NAME";
+    private static final String UNIQUE_OPTION_NAME = "UNIQUE_OPTION_NAME";
+    private static final String APP_ID_VID = "VID";
+    private static final String APP_ID_SDC = "SDC";
+    private static final String QUERY_STRING_FOR_CATEGORY_NAME = String.format(" where name = '%s' ", CATEGORY_NAME);
+
+
+    @Mock
+    private DataAccessService dataAccessService;
+
+    @InjectMocks
+    private CategoryParameterServiceImpl testSubject;
+
+    @BeforeSuite
+    public void before() {
+        initMocks(this);
+    }
+
+    @BeforeMethod
+    public void resetMocks() {
+        reset(dataAccessService);
     }
 
     @Test
-    public void testCreateCategoryParameterOptions() throws Exception {
-        CategoryParameterServiceImpl testSubject;
-        String categoryName = "";
-        AddCategoryOptionsRequest optionsRequest = null;
-        AddCategoryOptionResponse result;
+    public void createCategoryParameterOptions_happyPath()  {
+        AddCategoryOptionsRequest optionsRequest = new AddCategoryOptionsRequest();
+        optionsRequest.options.add(UNIQUE_OPTION_NAME);
+        CategoryParameter categoryParameter = createCategoryParameter(CATEGORY_NAME, true);
+        List<CategoryParameter> aList = createCategoryParametersList(categoryParameter);
 
-        // default test
-        try {
-            testSubject = createTestSubject();
-            result = testSubject.createCategoryParameterOptions(categoryName, optionsRequest);
-        } catch (
+        doReturn(aList).when(dataAccessService).getList(CategoryParameter.class, QUERY_STRING_FOR_CATEGORY_NAME, null, null);
 
-        Exception e) {
-        }
+        AddCategoryOptionResponse result = testSubject.createCategoryParameterOptions(CATEGORY_NAME, optionsRequest);
+
+        Assert.assertTrue(result.getErrors().isEmpty());;
+        verify(dataAccessService, times(1))
+            .saveDomainObject(anyObject(), anyObject());
     }
 
     @Test
-    public void testDeleteCategoryOption() throws Exception {
-        CategoryParameterServiceImpl testSubject;
-        String categoryName = "";
+    public void createCategoryParameterOptions_existingOptionsForCategory()  {
+        AddCategoryOptionsRequest optionsRequest = new AddCategoryOptionsRequest();
+        optionsRequest.options.add(OPTION_NAME);
+        CategoryParameter categoryParameter = createCategoryParameter(CATEGORY_NAME, true);
+        categoryParameter.getOptions().add(new CategoryParameterOption(APP_ID_VID, OPTION_NAME, categoryParameter));
+        List<CategoryParameter> aList = createCategoryParametersList(categoryParameter);
+
+        String expectedError = String.format(CategoryParameterServiceImpl.OPTION_ALREADY_EXIST_FOR_CATEGORY
+            , OPTION_NAME, CATEGORY_NAME);
+
+        doReturn(aList).when(dataAccessService).getList(CategoryParameter.class, QUERY_STRING_FOR_CATEGORY_NAME, null, null);
+
+        AddCategoryOptionResponse result = testSubject.createCategoryParameterOptions(CATEGORY_NAME, optionsRequest);
+
+        Assert.assertFalse(result.getErrors().isEmpty());
+        Assert.assertEquals(result.getErrors().size(), 1);
+        Assert.assertTrue(result.getErrors().stream().allMatch(expectedError::equals));
+    }
+
+    private List<CategoryParameter> createCategoryParametersList(CategoryParameter categoryParameter) {
+        List<CategoryParameter> aList = new ArrayList<>();
+        aList.add(categoryParameter);
+        return aList;
+    }
+
+    @Test
+    public void createCategoryParameterOptions_nonExistingOptionsForCategory()  {
+        AddCategoryOptionsRequest optionsRequest = new AddCategoryOptionsRequest();
+
+        List<CategoryParameter> aList = createCategoryParametersList(new CategoryParameter());
+        doReturn(aList).when(dataAccessService).getList(CategoryParameter.class, QUERY_STRING_FOR_CATEGORY_NAME, null, null);
+
+        AddCategoryOptionResponse result = testSubject.createCategoryParameterOptions(CATEGORY_NAME, optionsRequest);
+
+        Assert.assertTrue(result.getErrors().isEmpty());
+    }
+
+    @Test(expectedExceptions = { UnfoundedCategoryException.class })
+    public void createCategoryParameterOptions_wrongNumberOfCategoryParameters()  {
+        AddCategoryOptionsRequest optionsRequest = new AddCategoryOptionsRequest();
+        List<CategoryParameter> aList = Collections.emptyList();
+
+        doReturn(aList).when(dataAccessService).getList(CategoryParameter.class, QUERY_STRING_FOR_CATEGORY_NAME, null, null);
+
+        AddCategoryOptionResponse result = testSubject.createCategoryParameterOptions(CATEGORY_NAME, optionsRequest);
+
+        Assert.fail();
+    }
+
+    @Test(expectedExceptions = { UnfoundedCategoryException.class })
+    public void deleteCategoryOption_wrongNumberOfParameters() {
         CategoryParameterOption option = null;
+        List<CategoryParameter> aList = Collections.emptyList();
 
-        // default test
-        try {
-            testSubject = createTestSubject();
-            testSubject.deleteCategoryOption(categoryName, option);
-        } catch (
+        doReturn(aList).when(dataAccessService).getList(CategoryParameter.class, QUERY_STRING_FOR_CATEGORY_NAME, null, null);
 
-        Exception e) {
-        }
+        testSubject.deleteCategoryOption(CATEGORY_NAME, option);
+
+        Assert.fail();
     }
 
     @Test
-    public void testGetCategoryParameters() throws Exception {
-        CategoryParameterServiceImpl testSubject;
-        CategoryParametersResponse result;
+    public void deleteCategoryOption_happyPath() {
+        CategoryParameter categoryParameter = createCategoryParameter(CATEGORY_NAME, true);
+        CategoryParameterOption categoryParameterOption =
+            new CategoryParameterOption(APP_ID_VID, OPTION_NAME, categoryParameter);
+        categoryParameter.getOptions().add(categoryParameterOption);
+        List<CategoryParameter> aList = createCategoryParametersList(categoryParameter);
 
-        // default test
-        try {
-            testSubject = createTestSubject();
-            testSubject.getCategoryParameters(null);
-        } catch (
+        doReturn(aList).when(dataAccessService).getList(anyObject(), anyString(), anyString(), anyObject());
 
-        Exception e) {
-        }
+        testSubject.deleteCategoryOption(CATEGORY_NAME, categoryParameterOption);
+
+        verify(dataAccessService, times(1))
+            .deleteDomainObject(anyObject(), anyObject());
     }
 
     @Test
-    public void testUpdateCategoryParameterOption() throws Exception {
-        CategoryParameterServiceImpl testSubject;
-        String categoryName = "";
-        CategoryParameterOptionRep option = null;
-        AddCategoryOptionResponse result;
+    public void getCategoryParametersTest() {
+        CategoryParameter categoryParameter = createCategoryParameter(CATEGORY_NAME, true);
+        CategoryParameterOption categoryParameterOption =
+            new CategoryParameterOption(APP_ID_VID, OPTION_NAME, categoryParameter);
+        categoryParameter.getOptions().add(categoryParameterOption);
+        List<CategoryParameter> aList = createCategoryParametersList(categoryParameter);
 
-        // default test
-        try {
-            testSubject = createTestSubject();
-            result = testSubject.updateCategoryParameterOption(categoryName, option);
-        } catch (
+        doReturn(aList).when(dataAccessService).getList(anyObject(), anyString(), anyString(), anyObject());
 
-        Exception e) {
-        }
+        CategoryParametersResponse response = testSubject.getCategoryParameters(Family.PARAMETER_STANDARDIZATION);
+
+        Assert.assertFalse(response.getCategoryParameters().isEmpty());
+        Assert.assertTrue(response.getCategoryParameters().containsKey(CATEGORY_NAME));
+
+        verify(dataAccessService, times(1))
+            .getList(anyObject(), anyString(), anyString(), anyObject());
+    }
+
+    @Test
+    public void updateCategoryParameterOption_domainObjectGetsSavedSuccessfully() {
+        CategoryParameterOptionRep optionRepExisting = new CategoryParameterOptionRep(APP_ID_VID, OPTION_NAME);
+        CategoryParameter categoryParameter = createCategoryParameter(CATEGORY_NAME, true);
+        categoryParameter.getOptions().add(
+            new CategoryParameterOption(APP_ID_VID, UNIQUE_OPTION_NAME, categoryParameter));
+        List<CategoryParameter> aList = createCategoryParametersList(categoryParameter);
+
+        doReturn(aList).when(dataAccessService).getList(CategoryParameter.class, QUERY_STRING_FOR_CATEGORY_NAME, null, null);
+
+        AddCategoryOptionResponse result = testSubject.updateCategoryParameterOption(CATEGORY_NAME, optionRepExisting);
+
+        verify(dataAccessService, times(1))
+            .saveDomainObject(anyObject(), anyObject());
+    }
+
+    @Test(expectedExceptions = { ForbiddenException.class })
+    public void updateCategoryParameterOption_shouldFailUpdateForbidden() {
+        CategoryParameterOptionRep optionRep = new CategoryParameterOptionRep("1", CATEGORY_NAME);
+        CategoryParameter categoryParameter = createCategoryParameter(CATEGORY_NAME, false);
+        categoryParameter.getOptions().add(new CategoryParameterOption(APP_ID_VID, OPTION_NAME, categoryParameter));
+        List<CategoryParameter> aList = createCategoryParametersList(categoryParameter);
+
+        doReturn(aList).when(dataAccessService).getList(CategoryParameter.class, QUERY_STRING_FOR_CATEGORY_NAME, null, null);
+
+        AddCategoryOptionResponse result = testSubject.updateCategoryParameterOption(CATEGORY_NAME, optionRep);
+
+        Assert.fail();
+    }
+
+    @Test(expectedExceptions = { UnfoundedCategoryOptionException.class })
+    public void updateCategoryParameterOption_CategoryNotFound() {
+        CategoryParameterOptionRep optionRep = new CategoryParameterOptionRep("SOME_UNRELATED_ID", CATEGORY_NAME);
+
+        CategoryParameter categoryParameter = createCategoryParameter(CATEGORY_NAME, true);
+        categoryParameter.getOptions().add(new CategoryParameterOption(APP_ID_VID, OPTION_NAME, categoryParameter));
+        List<CategoryParameter> aList = createCategoryParametersList(categoryParameter);
+
+        doReturn(aList).when(dataAccessService).getList(CategoryParameter.class, QUERY_STRING_FOR_CATEGORY_NAME, null, null);
+
+        AddCategoryOptionResponse result = testSubject.updateCategoryParameterOption(CATEGORY_NAME, optionRep);
+
+        Assert.fail();
+    }
+
+    @Test(expectedExceptions = { AlreadyExistOptionNameException.class })
+    public void updateCategoryParameterOption_OptionNameExists() {
+        CategoryParameterOptionRep optionRepExisting = new CategoryParameterOptionRep(APP_ID_VID, OPTION_NAME);
+
+        CategoryParameter categoryParameter = createCategoryParameter(CATEGORY_NAME, true);
+        CategoryParameter anotherCategoryParameter = createCategoryParameter(CATEGORY_NAME, true);
+        categoryParameter.getOptions().add(
+            new CategoryParameterOption(APP_ID_VID, UNIQUE_OPTION_NAME, anotherCategoryParameter));
+        categoryParameter.getOptions().add(
+            new CategoryParameterOption(APP_ID_SDC, OPTION_NAME, anotherCategoryParameter));
+        List<CategoryParameter> aList = createCategoryParametersList(categoryParameter);
+
+        doReturn(aList).when(dataAccessService).getList(CategoryParameter.class, QUERY_STRING_FOR_CATEGORY_NAME, null, null);
+
+        AddCategoryOptionResponse result = testSubject.updateCategoryParameterOption(CATEGORY_NAME, optionRepExisting);
+
+        Assert.fail();
+    }
+
+    private CategoryParameter createCategoryParameter(String categoryName, boolean idSupported) {
+        CategoryParameter categoryParameter = new CategoryParameter();
+        categoryParameter.setName(categoryName);
+        categoryParameter.setIdSupported(idSupported);
+        return categoryParameter;
     }
 }
\ No newline at end of file
diff --git a/vid-app-common/src/test/java/org/onap/vid/services/PombaServiceImplTest.java b/vid-app-common/src/test/java/org/onap/vid/services/PombaServiceImplTest.java
new file mode 100644
index 0000000..d0eec26
--- /dev/null
+++ b/vid-app-common/src/test/java/org/onap/vid/services/PombaServiceImplTest.java
@@ -0,0 +1,40 @@
+package org.onap.vid.services;
+
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.MockitoAnnotations.initMocks;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.onap.vid.aai.PombaClientInterface;
+import org.onap.vid.model.PombaInstance.PombaRequest;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+public class PombaServiceImplTest {
+
+  @Mock
+  private PombaClientInterface pombaClientInterface;
+
+  @InjectMocks
+  private PombaServiceImpl testSubject;
+
+  @BeforeClass
+  public void beforeClass() {
+    initMocks(this);
+  }
+
+  @BeforeMethod
+  public void resetMocks() {
+    Mockito.reset(pombaClientInterface);
+  }
+
+  @Test
+  public void testVerify() {
+    PombaRequest pombaRequest = new PombaRequest();
+    testSubject.verify(pombaRequest);
+    verify(pombaClientInterface, times(1))
+        .verify(pombaRequest);
+  }
+}
\ No newline at end of file
diff --git a/vid-app-common/src/test/java/org/onap/vid/services/RoleGenaratorServiceImplTest.java b/vid-app-common/src/test/java/org/onap/vid/services/RoleGenaratorServiceImplTest.java
index 544a799..d7db495 100644
--- a/vid-app-common/src/test/java/org/onap/vid/services/RoleGenaratorServiceImplTest.java
+++ b/vid-app-common/src/test/java/org/onap/vid/services/RoleGenaratorServiceImplTest.java
@@ -1,25 +1,139 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2018 Nokia. 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.vid.services;
 
-import static org.junit.Assert.*;
-import java.util.*;
-import org.junit.Assert;
-import org.junit.Test;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+import java.util.ArrayList;
+import org.apache.commons.lang.StringUtils;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.onap.vid.aai.AaiClientInterface;
+import org.onap.vid.aai.AaiResponse;
+import org.onap.vid.aai.ServiceSubscription;
+import org.onap.vid.aai.ServiceSubscriptions;
+import org.onap.vid.aai.Services;
+import org.onap.vid.model.Subscriber;
+import org.onap.vid.model.SubscriberList;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 public class RoleGenaratorServiceImplTest {
 
-    private RoleGenaratorServiceImpl createTestSubject() {
-        return new RoleGenaratorServiceImpl();
+    private static final String GLOBAL_CUSTOMER_ID = "997";
+    private static final String SUBSCRIBER_NAME = "name";
+    private static final String SUBSCRIBER_TYPE = "subscriber_type";
+    private static final String RESOURCE_VERSION = "1";
+    private static final String SERVICE_TYPE = "service_type";
+
+    @Mock
+    private AaiClientInterface aaiClientInterface;
+
+    @InjectMocks
+    private RoleGenaratorServiceImpl testSubject;
+
+    @BeforeClass
+    public void beforeClass() {
+        initMocks(this);
+    }
+
+    @BeforeMethod
+    public void resetMocks() {
+        Mockito.reset(aaiClientInterface);
     }
 
     @Test
-    public void testGenerateRoleScript() throws Exception {
-        RoleGenaratorServiceImpl testSubject;
-        Boolean firstRun = null;
-        String result;
+    public void tenerateRoleScript_firstRun() {
+        boolean firstRun = true;
 
-        // default test
-        testSubject = createTestSubject();
-        result = testSubject.generateRoleScript(firstRun);
+        Subscriber subscriber = createSubscriber();
+        AaiResponse<SubscriberList> subscribers = createSubscriberListAaiResponse(subscriber);
+        doReturn(subscribers).when(aaiClientInterface).getAllSubscribers();
+
+        ServiceSubscription serviceSubscription = createServiceSubscription();
+        AaiResponse<Services> subscriberResponse = createServicesAaiResponse(serviceSubscription);
+        doReturn(subscriberResponse).when(aaiClientInterface).getSubscriberData(subscriber.globalCustomerId);
+
+        String result = testSubject.generateRoleScript(firstRun);
+        Assert.assertTrue(StringUtils.isNotBlank(result));
+    }
+
+    @Test
+    public void tenerateRoleScript_notAFirstRun() {
+        boolean firstRun = false;
+
+        Subscriber subscriber = createSubscriber();
+        AaiResponse<SubscriberList> subscribers = createSubscriberListAaiResponse(subscriber);
+        doReturn(subscribers).when(aaiClientInterface).getAllSubscribers();
+
+        ServiceSubscription serviceSubscription = createServiceSubscription();
+        AaiResponse<Services> subscriberResponse = createServicesAaiResponse(serviceSubscription);
+        doReturn(subscriberResponse).when(aaiClientInterface).getSubscriberData(subscriber.globalCustomerId);
+
+        String result = testSubject.generateRoleScript(firstRun);
+        Assert.assertTrue(StringUtils.isNotBlank(result));
+    }
+
+    @Test(expectedExceptions = { Exception.class })
+    public void tenerateRoleScript_errorGettingDataFromAAIClient() {
+        boolean firstRun = false;
+
+        doThrow(new Exception("This is expected.")).when(aaiClientInterface).getAllSubscribers();
+
+        String result = testSubject.generateRoleScript(firstRun);
+        Assert.fail();
+    }
+
+    private ServiceSubscription createServiceSubscription() {
+        ServiceSubscription serviceSubscription = new ServiceSubscription();
+        serviceSubscription.serviceType = SERVICE_TYPE;
+        return serviceSubscription;
+    }
+
+    private AaiResponse<SubscriberList> createSubscriberListAaiResponse(Subscriber subscriber) {
+        AaiResponse<SubscriberList> subscribers = new AaiResponse<>(new SubscriberList(new ArrayList<>()), "", 200);
+        subscribers.getT().customer.add(subscriber);
+        return subscribers;
+    }
+
+    private AaiResponse<Services> createServicesAaiResponse(ServiceSubscription serviceSubscription) {
+        AaiResponse<Services> subscriberResponse = new AaiResponse<>(new Services(), "", 200);
+        subscriberResponse.getT().serviceSubscriptions = new ServiceSubscriptions();
+        subscriberResponse.getT().serviceSubscriptions.serviceSubscription = new ArrayList<>();
+        subscriberResponse.getT().serviceSubscriptions.serviceSubscription.add(serviceSubscription);
+        return subscriberResponse;
+    }
+
+    private Subscriber createSubscriber() {
+        Subscriber subscriber = new Subscriber();
+        subscriber.globalCustomerId = GLOBAL_CUSTOMER_ID;
+        subscriber.subscriberName = SUBSCRIBER_NAME;
+        subscriber.subscriberType = SUBSCRIBER_TYPE;
+        subscriber.resourceVersion = RESOURCE_VERSION;
+        return subscriber;
     }
 
 
diff --git a/vid-app-common/src/test/resources/WEB-INF/conf/system.properties b/vid-app-common/src/test/resources/WEB-INF/conf/system.properties
index bf0f826..baf56d3 100644
--- a/vid-app-common/src/test/resources/WEB-INF/conf/system.properties
+++ b/vid-app-common/src/test/resources/WEB-INF/conf/system.properties
@@ -73,18 +73,12 @@
 
 #aai related properties
 #dev server
-#aai.server.url.base=https://mtanjv9aaas40.aic.cip.att.com:8443/aai/
-#aai.server.url=https://mtanjv9aaas40.aic.cip.att.com:8443/aai/v10/
-#aai.oldserver.url.base=https://mtanjv9aaas40.aic.cip.att.com:8443/aai/servers/
-#aai.oldserver.url=https://mtanjv9aaas40.aic.cip.att.com:8443/aai/servers/v3/
 #ist servers
-aai.server.url.base=https://aai-ext1.test.att.com:8443/aai/
-#aai.server.url=https://aai-ext1.test.att.com:8443/aai/v12/
+aai.server.url.base=http://localhost:8080/vidSimulator/aai/
 aai.server.url=http://localhost:8080/vidSimulator/aai/v12/
 #aai.server.url=http://localhost:1080/aai
-#aai.server.url=https://aai-int2.test.att.com:8443/aai/v12/
-aai.vid.username=VID
-aai.vid.passwd.x=OBF:1jm91i0v1jl9
+aai.vid.username=vid@vid.onap.org
+aai.vid.passwd.x=OBF:1fia1ju61l871lfe18xp18xr18xt1lc41l531jrk1fek
 
 
 
@@ -93,12 +87,10 @@
 
 
 
-aai.oldserver.url.base=https://aai-ext1.test.att.com:8443/aai/servers/
-aai.oldserver.url=https://aai-ext1.test.att.com:8443/aai/servers/v3/
 aai.truststore.filename=tomcat_keystore
-aai.truststore.passwd.x=OBF:1i9a1u2a1unz1lr61wn51wn11lss1unz1u301i6o
+aai.truststore.passwd.x=OBF:1ks51l8d1o3i1pcc1r2r1e211r391kls1pyj1z7u1njf1lx51go21hnj1y0k1mli1sop1k8o1j651vu91mxw1vun1mze1vv11j8x1k5i1sp11mjc1y161hlr1gm41m111nkj1z781pw31kku1r4p1e391r571pbm1o741l4x1ksp
 aai.keystore.filename=aai-client-cert.p12
-aai.keystore.passwd.x=OBF:1i9a1u2a1unz1lr61wn51wn11lss1unz1u301i6o
+aai.keystore.passwd.x=OBF:1ks51l8d1o3i1pcc1r2r1e211r391kls1pyj1z7u1njf1lx51go21hnj1y0k1mli1sop1k8o1j651vu91mxw1vun1mze1vv11j8x1k5i1sp11mjc1y161hlr1gm41m111nkj1z781pw31kku1r4p1e391r571pbm1o741l4x1ksp
 aai.use.client.cert=false
 aai.vnf.provstatus=PREPROV,NVTPROV,PROV,CAPPED
 
@@ -151,10 +143,12 @@
 mso.user.name=infraportal
 mso.password.x=OBF:1ghz1kfx1j1w1m7w1i271e8q1eas1hzj1m4i1iyy1kch1gdz
 mso.restapi.svc.instance=/serviceInstances/v5
+mso.restapi.svc.instance.deleteAndUnassign=/serviceInstantiation/v5/serviceInstances
 mso.restapi.vnf.instance=/serviceInstances/v5/<service_instance_id>/vnfs
 mso.restapi.vnf.changemanagement.instance=/serviceInstances/v5/<service_instance_id>/vnfs/<vnf_instance_id>/<request_type>
 mso.restapi.network.instance=/serviceInstances/v5/<service_instance_id>/networks
-mso.restapi.vf.module.instance=/serviceInstantiation/v7/<service_instance_id>/vnfs/<vnf_instance_id>/vfModules/scaleOut
+mso.restapi.vf.module.instance=/serviceInstances/v7/<service_instance_id>/vnfs/<vnf_instance_id>/vfModules
+mso.restapi.vf.module.scaleout=/serviceInstantiation/v7/serviceInstances/<service_instance_id>/vnfs/<vnf_instance_id>/vfModules/scaleOut
 mso.restapi.volume.group.instance=/serviceInstances/v5/<service_instance_id>/vnfs/<vnf_instance_id>/volumeGroups
 mso.restapi.get.orc.req=/orchestrationRequests/v5
 mso.restapi.get.orc.reqs=/orchestrationRequests/v5?
@@ -166,7 +160,7 @@
 mso.dme2.client.timeout=30000
 mso.dme2.client.read.timeout=120000
 
-scheduler.server.url=http://mtanjv9sdlg10.aic.cip.att.com:8989/scheduler
+scheduler.server.url=
 scheduler.create.new.vnf.change.instance=/v1/ChangeManagement/schedules/
 scheduler.get.time.slots=/v1/ChangeManagement/schedules/
 scheduler.get.schedules=/v1/ChangeManagement/schedules/scheduleDetails/
diff --git a/vid-app-common/src/test/resources/payload_jsons/mso_action_scaleout_sample_response.json b/vid-app-common/src/test/resources/payload_jsons/mso_action_scaleout_sample_response.json
new file mode 100644
index 0000000..d37f6af
--- /dev/null
+++ b/vid-app-common/src/test/resources/payload_jsons/mso_action_scaleout_sample_response.json
@@ -0,0 +1,174 @@
+{
+  "requestList": [
+    {
+      "request": {
+        "requestId": "799d7380-60fe-4b64-9d99-82f6ab09163b",
+        "startTime": "Fri, 12 Oct 2018 08:53:07 GMT",
+        "requestScope": "vfModule",
+        "requestType": "scaleOut",
+        "requestDetails": {
+          "modelInfo": {
+            "modelCustomizationName": "WsSp..base_ws..module-0",
+            "modelInvariantId": "763b1172-b5f5-4062-9d79-2459710fa0bc",
+            "modelType": "vfModule",
+            "modelName": "WsSp..base_ws..module-0",
+            "modelVersion": "1",
+            "modelCustomizationUuid": "bfcc8f57-7b56-4be8-a8f1-e44262c83318",
+            "modelVersionId": "53f52586-236b-4d52-a94c-990883e054f0",
+            "modelCustomizationId": "bfcc8f57-7b56-4be8-a8f1-e44262c83318",
+            "modelUuid": "53f52586-236b-4d52-a94c-990883e054f0",
+            "modelInvariantUuid": "763b1172-b5f5-4062-9d79-2459710fa0bc",
+            "modelInstanceName": "WsSp..base_ws..module-0"
+          },
+          "requestInfo": {
+            "source": "VID",
+            "instanceName": "ws-test-0310-8_NaN",
+            "suppressRollback": false,
+            "requestorId": "demo"
+          },
+          "relatedInstanceList": [
+            {
+              "relatedInstance": {
+                "instanceId": "fd84f066-ea75-4b23-acd0-3cf3fce7a99b",
+                "modelInfo": {
+                  "modelInvariantId": "c9817f08-07b2-458b-a02f-cd5407ee7a7b",
+                  "modelType": "service",
+                  "modelName": "ws-service",
+                  "modelVersion": "1.0",
+                  "modelVersionId": "0e0bb964-e687-4439-9a9e-de9cd1ff5367",
+                  "modelUuid": "0e0bb964-e687-4439-9a9e-de9cd1ff5367",
+                  "modelInvariantUuid": "c9817f08-07b2-458b-a02f-cd5407ee7a7b"
+                }
+              }
+            },
+            {
+              "relatedInstance": {
+                "instanceId": "980fe98e-47f8-4164-862d-4ebb026cec75",
+                "modelInfo": {
+                  "modelCustomizationName": "ws-sp 0",
+                  "modelInvariantId": "734f0952-6678-44e7-8918-f9aa4694b687",
+                  "modelType": "vnf",
+                  "modelName": "ws-sp",
+                  "modelVersion": "1.0",
+                  "modelCustomizationUuid": "5815868c-35f8-4c5a-b899-e6eb49f52986",
+                  "modelVersionId": "0e0bb964-e687-4439-9a9e-de9cd1ff5367",
+                  "modelCustomizationId": "5815868c-35f8-4c5a-b899-e6eb49f52986",
+                  "modelUuid": "0e0bb964-e687-4439-9a9e-de9cd1ff5367",
+                  "modelInvariantUuid": "734f0952-6678-44e7-8918-f9aa4694b687",
+                  "modelInstanceName": "ws-sp 0"
+                }
+              }
+            }
+          ],
+          "cloudConfiguration": {
+            "tenantId": "1e097c6713e74fd7ac8e4295e605ee1e",
+            "lcpCloudRegionId": "RegionOne"
+          },
+          "requestParameters": {},
+          "configurationParameters": [
+            {
+              "availability-zone": "$.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[0]",
+              "xtz-123": "$.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[0]"
+            }
+          ]
+        },
+        "instanceReferences": {
+          "serviceInstanceId": "fd84f066-ea75-4b23-acd0-3cf3fce7a99b",
+          "vnfInstanceId": "980fe98e-47f8-4164-862d-4ebb026cec75",
+          "vfModuleInstanceName": "ws-test-0310-8_NaN",
+          "requestorId": "demo"
+        },
+        "requestStatus": {
+          "requestState": "FAILED",
+          "statusMessage": "No valid vfModuleCustomization is specified",
+          "percentProgress": 100,
+          "finishTime": "Fri, 12 Oct 2018 08:53:07 GMT"
+        }
+      }
+    },
+    {
+      "request": {
+        "requestId": "44b534c7-57b5-42ec-85bb-219167021b34",
+        "startTime": "Fri, 12 Oct 2018 09:08:01 GMT",
+        "requestScope": "vfModule",
+        "requestType": "scaleOut",
+        "requestDetails": {
+          "modelInfo": {
+            "modelCustomizationName": "WsSp..base_ws..module-0",
+            "modelInvariantId": "763b1172-b5f5-4062-9d79-2459710fa0bc",
+            "modelType": "vfModule",
+            "modelName": "WsSp..base_ws..module-0",
+            "modelVersion": "1",
+            "modelCustomizationUuid": "bfcc8f57-7b56-4be8-a8f1-e44262c83318",
+            "modelVersionId": "53f52586-236b-4d52-a94c-990883e054f0",
+            "modelCustomizationId": "bfcc8f57-7b56-4be8-a8f1-e44262c83318",
+            "modelUuid": "53f52586-236b-4d52-a94c-990883e054f0",
+            "modelInvariantUuid": "763b1172-b5f5-4062-9d79-2459710fa0bc",
+            "modelInstanceName": "WsSp..base_ws..module-0"
+          },
+          "requestInfo": {
+            "source": "VID",
+            "instanceName": "ws-test-0310-8_NaN",
+            "suppressRollback": false,
+            "requestorId": "demo"
+          },
+          "relatedInstanceList": [
+            {
+              "relatedInstance": {
+                "instanceId": "fd84f066-ea75-4b23-acd0-3cf3fce7a99b",
+                "modelInfo": {
+                  "modelInvariantId": "c9817f08-07b2-458b-a02f-cd5407ee7a7b",
+                  "modelType": "service",
+                  "modelName": "ws-service",
+                  "modelVersion": "1.0",
+                  "modelVersionId": "0e0bb964-e687-4439-9a9e-de9cd1ff5367",
+                  "modelUuid": "0e0bb964-e687-4439-9a9e-de9cd1ff5367",
+                  "modelInvariantUuid": "c9817f08-07b2-458b-a02f-cd5407ee7a7b"
+                }
+              }
+            },
+            {
+              "relatedInstance": {
+                "instanceId": "980fe98e-47f8-4164-862d-4ebb026cec75",
+                "modelInfo": {
+                  "modelCustomizationName": "ws-sp 0",
+                  "modelInvariantId": "734f0952-6678-44e7-8918-f9aa4694b687",
+                  "modelType": "vnf",
+                  "modelName": "ws-sp",
+                  "modelVersion": "1.0",
+                  "modelCustomizationUuid": "5815868c-35f8-4c5a-b899-e6eb49f52986",
+                  "modelVersionId": "0e0bb964-e687-4439-9a9e-de9cd1ff5367",
+                  "modelCustomizationId": "5815868c-35f8-4c5a-b899-e6eb49f52986",
+                  "modelUuid": "0e0bb964-e687-4439-9a9e-de9cd1ff5367",
+                  "modelInvariantUuid": "734f0952-6678-44e7-8918-f9aa4694b687",
+                  "modelInstanceName": "ws-sp 0"
+                }
+              }
+            }
+          ],
+          "cloudConfiguration": {
+            "tenantId": "1e097c6713e74fd7ac8e4295e605ee1e",
+            "lcpCloudRegionId": "RegionOne"
+          },
+          "requestParameters": {},
+          "configurationParameters": [
+            {
+              "availability-zone": "$.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[0]",
+              "xtz-123": "$.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[0]"
+            }
+          ]
+        },
+        "instanceReferences": {
+          "serviceInstanceId": "fd84f066-ea75-4b23-acd0-3cf3fce7a99b",
+          "vnfInstanceId": "980fe98e-47f8-4164-862d-4ebb026cec75",
+          "vfModuleInstanceId": "scaleOut",
+          "vfModuleInstanceName": "ws-test-0310-8_NaN",
+          "requestorId": "demo"
+        },
+        "requestStatus": {
+          "requestState": "FAILED"
+        }
+      }
+    }
+  ]
+}
\ No newline at end of file
diff --git a/vid-app-common/src/test/resources/payload_jsons/mso_model_info_sample_response.json b/vid-app-common/src/test/resources/payload_jsons/mso_model_info_sample_response.json
new file mode 100644
index 0000000..9dbdfb0
--- /dev/null
+++ b/vid-app-common/src/test/resources/payload_jsons/mso_model_info_sample_response.json
@@ -0,0 +1,108 @@
+{
+  "requestList": [
+    {
+      "request": {
+        "requestId": "f8c813a2-b22b-4e3d-9be0-8e2d16b1add3",
+        "startTime": "Wed, 03 Oct 2018 13:13:04 GMT",
+        "requestScope": "vnf",
+        "requestType": "createInstance",
+        "requestDetails": {
+          "modelInfo": {
+            "modelCustomizationName": "ws-sp 0",
+            "modelInvariantId": "734f0952-6678-44e7-8918-f9aa4694b687",
+            "modelType": "vnf",
+            "modelName": "ws-sp",
+            "modelVersion": "1.0",
+            "modelCustomizationUuid": "5815868c-35f8-4c5a-b899-e6eb49f52986",
+            "modelVersionId": "0e0bb964-e687-4439-9a9e-de9cd1ff5367",
+            "modelCustomizationId": "5815868c-35f8-4c5a-b899-e6eb49f52986",
+            "modelUuid": "0e0bb964-e687-4439-9a9e-de9cd1ff5367",
+            "modelInvariantUuid": "734f0952-6678-44e7-8918-f9aa4694b687",
+            "modelInstanceName": "ws-sp 0"
+          },
+          "requestInfo": {
+            "productFamilyId": "61cc3239-5c2e-4762-a281-7422a2e54d5a",
+            "source": "VID",
+            "instanceName": "ws-test-0310-8",
+            "suppressRollback": false,
+            "requestorId": "demo"
+          },
+          "relatedInstanceList": [
+            {
+              "relatedInstance": {
+                "instanceId": "fd84f066-ea75-4b23-acd0-3cf3fce7a99b",
+                "modelInfo": {
+                  "modelInvariantId": "c9817f08-07b2-458b-a02f-cd5407ee7a7b",
+                  "modelType": "service",
+                  "modelName": "ws-service",
+                  "modelVersion": "1.0",
+                  "modelVersionId": "cd3fbd06-6bc8-43a4-b803-933fc2e3cdf7",
+                  "modelUuid": "cd3fbd06-6bc8-43a4-b803-933fc2e3cdf7",
+                  "modelInvariantUuid": "c9817f08-07b2-458b-a02f-cd5407ee7a7b"
+                }
+              }
+            }
+          ],
+          "cloudConfiguration": {
+            "tenantId": "1e097c6713e74fd7ac8e4295e605ee1e",
+            "lcpCloudRegionId": "RegionOne"
+          },
+          "requestParameters": {
+            "testApi": "VNF_API"
+          },
+          "platform": {
+            "platformName": "Demo"
+          },
+          "lineOfBusiness": {
+            "lineOfBusinessName": "Demo"
+          }
+        },
+        "instanceReferences": {
+          "serviceInstanceId": "fd84f066-ea75-4b23-acd0-3cf3fce7a99b",
+          "vnfInstanceId": "980fe98e-47f8-4164-862d-4ebb026cec75",
+          "vnfInstanceName": "ws-test-0310-8",
+          "requestorId": "demo"
+        },
+        "requestStatus": {
+          "requestState": "COMPLETE",
+          "statusMessage": "Vnf has been created successfully.",
+          "percentProgress": 100,
+          "finishTime": "Wed, 03 Oct 2018 13:13:09 GMT"
+        }
+      }
+    },
+    {
+      "request": {
+        "requestId": "3447ba35-015d-4d72-9345-d89b1e35b2d6",
+        "startTime": "Thu, 04 Oct 2018 10:35:17 GMT",
+        "requestScope": "vnf",
+        "requestType": "inPlaceSoftwareUpdate",
+        "requestDetails": {
+          "requestInfo": {
+            "source": "VID",
+            "suppressRollback": false,
+            "requestorId": "demo"
+          },
+          "cloudConfiguration": {
+            "tenantId": "1e097c6713e74fd7ac8e4295e605ee1e",
+            "lcpCloudRegionId": "RegionOne"
+          },
+          "requestParameters": {
+            "payload": "{\"existing_software_version\":\"0.7\",\"new_software_version\":\"1.0\",\"operations_timeout\":\"10\"}"
+          }
+        },
+        "instanceReferences": {
+          "serviceInstanceId": "fd84f066-ea75-4b23-acd0-3cf3fce7a99b",
+          "vnfInstanceId": "980fe98e-47f8-4164-862d-4ebb026cec75",
+          "requestorId": "demo"
+        },
+        "requestStatus": {
+          "requestState": "FAILED",
+          "statusMessage": "Cloud Region with cloudRegionId RegionOne does not exist in A&AI",
+          "percentProgress": 100,
+          "finishTime": "Thu, 04 Oct 2018 10:35:21 GMT"
+        }
+      }
+    }
+  ]
+}
\ No newline at end of file
diff --git a/vid-app-common/src/test/resources/payload_jsons/scaleOutVfModulePayload.json b/vid-app-common/src/test/resources/payload_jsons/scaleOutVfModulePayload.json
new file mode 100644
index 0000000..c509c62
--- /dev/null
+++ b/vid-app-common/src/test/resources/payload_jsons/scaleOutVfModulePayload.json
@@ -0,0 +1,67 @@
+{
+    "vnfName":"test",
+    "vnfInstanceId":"123",
+    "relatedInstanceList": [
+      {
+        "relatedInstance": {
+          "instanceId": "fd84f066-ea75-4b23-acd0-3cf3fce7a99b",
+          "modelInfo": {
+            "modelType": "service",
+            "modelInvariantId": "c9817f08-07b2-458b-a02f-cd5407ee7a7b",
+            "modelVersionId": "0e0bb964-e687-4439-9a9e-de9cd1ff5367",
+            "modelName": "ws-service",
+            "modelVersion": "1.0",
+            "additionalProperties": {}
+          }
+        }
+      },
+      {
+        "relatedInstance": {
+          "instanceId": "980fe98e-47f8-4164-862d-4ebb026cec75",
+          "modelInfo": {
+            "modelType": "vnf",
+            "modelInvariantId": "734f0952-6678-44e7-8918-f9aa4694b687",
+            "modelVersionId": "0e0bb964-e687-4439-9a9e-de9cd1ff5367",
+            "modelName": "ws-sp",
+            "modelVersion": "1.0",
+            "modelCustomizationName": "ws-sp 0",
+            "modelCustomizationId": "5815868c-35f8-4c5a-b899-e6eb49f52986",
+            "additionalProperties": {}
+          }
+        }
+      }
+    ],
+    "cloudConfiguration": {
+      "lcpCloudRegionId": "RegionOne",
+      "tenantId": "1e097c6713e74fd7ac8e4295e605ee1e",
+      "additionalProperties": {}
+    },
+    "modelInfo": {
+      "modelCustomizationName": "WsSp..base_ws..module-0",
+      "modelCustomizationId": "bfcc8f57-7b56-4be8-a8f1-e44262c83318",
+      "modelInvariantId": "763b1172-b5f5-4062-9d79-2459710fa0bc",
+      "modelVersionId": "53f52586-236b-4d52-a94c-990883e054f0",
+      "modelName": "WsSp..base_ws..module-0",
+      "modelNameVersionId": null,
+      "modelType": "vfModule",
+      "modelVersion": "1",
+      "additionalProperties": {}
+    },
+    "requestInfo": {
+      "instanceName": "ws-test-0310-8_NaN",
+      "source": "VID",
+      "suppressRollback": false,
+      "requestorId": "demo",
+      "additionalProperties": {}
+    },
+    "requestParameters": {
+      "additionalProperties": {}
+    },
+    "configurationParameters": [
+      {
+        "availability-zone": "$.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[0]",
+        "xtz-123": "$.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[0]"
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/vid-app-common/src/test/resources/payload_jsons/scaleOutVfModulePayloadToMso.json b/vid-app-common/src/test/resources/payload_jsons/scaleOutVfModulePayloadToMso.json
new file mode 100644
index 0000000..ddbebac
--- /dev/null
+++ b/vid-app-common/src/test/resources/payload_jsons/scaleOutVfModulePayloadToMso.json
@@ -0,0 +1,66 @@
+{
+  "requestDetails": {
+    "relatedInstanceList": [
+      {
+        "relatedInstance": {
+          "instanceId": "fd84f066-ea75-4b23-acd0-3cf3fce7a99b",
+          "modelInfo": {
+            "modelType": "service",
+            "modelInvariantId": "c9817f08-07b2-458b-a02f-cd5407ee7a7b",
+            "modelVersionId": "0e0bb964-e687-4439-9a9e-de9cd1ff5367",
+            "modelName": "ws-service",
+            "modelVersion": "1.0",
+            "additionalProperties": {}
+          }
+        }
+      },
+      {
+        "relatedInstance": {
+          "instanceId": "980fe98e-47f8-4164-862d-4ebb026cec75",
+          "modelInfo": {
+            "modelType": "vnf",
+            "modelInvariantId": "734f0952-6678-44e7-8918-f9aa4694b687",
+            "modelVersionId": "0e0bb964-e687-4439-9a9e-de9cd1ff5367",
+            "modelName": "ws-sp",
+            "modelVersion": "1.0",
+            "modelCustomizationName": "ws-sp 0",
+            "modelCustomizationId": "5815868c-35f8-4c5a-b899-e6eb49f52986",
+            "additionalProperties": {}
+          }
+        }
+      }
+    ],
+    "cloudConfiguration": {
+      "lcpCloudRegionId": "RegionOne",
+      "tenantId": "1e097c6713e74fd7ac8e4295e605ee1e",
+      "additionalProperties": {}
+    },
+    "modelInfo": {
+      "modelCustomizationName": "WsSp..base_ws..module-0",
+      "modelCustomizationId": "bfcc8f57-7b56-4be8-a8f1-e44262c83318",
+      "modelInvariantId": "763b1172-b5f5-4062-9d79-2459710fa0bc",
+      "modelVersionId": "53f52586-236b-4d52-a94c-990883e054f0",
+      "modelName": "WsSp..base_ws..module-0",
+      "modelNameVersionId": null,
+      "modelType": "vfModule",
+      "modelVersion": "1",
+      "additionalProperties": {}
+    },
+    "requestInfo": {
+      "instanceName": "ws-test-0310-8_NaN",
+      "source": "VID",
+      "suppressRollback": false,
+      "requestorId": "demo",
+      "additionalProperties": {}
+    },
+    "requestParameters": {
+      "additionalProperties": {}
+    },
+    "configurationParameters": [
+      {
+        "availability-zone": "$.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[0]",
+        "xtz-123": "$.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[0]"
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/vid-app-common/version.properties b/vid-app-common/version.properties
index 02144f0..9723960 100755
--- a/vid-app-common/version.properties
+++ b/vid-app-common/version.properties
@@ -2,7 +2,7 @@
 # Note that these variables cannot be structured (e.g. : version.release or version.snapshot etc... )

 # because they are used in Jenkins, whose plug-in doesn't support

 

-major=3

+major=4

 minor=0

 patch=0