diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/pom.xml b/openecomp-be/backend/openecomp-sdc-action-manager/pom.xml
new file mode 100644
index 0000000..af1652a
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/pom.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>backend</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>openecomp-sdc-action-manager</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.openecomp.core</groupId>
+            <artifactId>openecomp-utilities-lib</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-validation-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.core</groupId>
+            <artifactId>openecomp-nosqldb-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <version>6.9.10</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>RELEASE</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-xml</artifactId>
+            <version>2.7.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.woodstox</groupId>
+            <artifactId>woodstox-core-asl</artifactId>
+            <version>4.4.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-action-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-versioning-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc.sdc_common</groupId>
+            <artifactId>openecomp-logging-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc.sdc_common</groupId>
+            <artifactId>openecomp-logging-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.19.1</version>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/src/main/java/org/openecomp/sdc/action/ActionManager.java b/openecomp-be/backend/openecomp-sdc-action-manager/src/main/java/org/openecomp/sdc/action/ActionManager.java
new file mode 100644
index 0000000..52b0b2a
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/src/main/java/org/openecomp/sdc/action/ActionManager.java
@@ -0,0 +1,66 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.action;
+
+
+import org.openecomp.sdc.action.errors.ActionException;
+import org.openecomp.sdc.action.types.Action;
+import org.openecomp.sdc.action.types.ActionArtifact;
+import org.openecomp.sdc.action.types.EcompComponent;
+
+import java.util.List;
+
+public interface ActionManager {
+  public Action createAction(Action action, String user) throws ActionException;
+
+  public Action updateAction(Action action, String user) throws ActionException;
+
+  public void deleteAction(String actionInvariantUuId, String user) throws ActionException;
+
+  public List<Action> getFilteredActions(String filterType, String filterValue)
+      throws ActionException;
+
+  public List<EcompComponent> getEcompComponents() throws ActionException;
+
+  public List<Action> getActionsByActionInvariantUuId(String invariantId) throws ActionException;
+
+  public Action getActionsByActionUuId(String actionUuId) throws ActionException;
+
+  public Action checkout(String invariantUuId, String user) throws ActionException;
+
+  public void undoCheckout(String invariantUuId, String user) throws ActionException;
+
+  public Action checkin(String invariantUuId, String user) throws ActionException;
+
+  public Action submit(String invariantUuId, String user) throws ActionException;
+
+  public ActionArtifact uploadArtifact(ActionArtifact data, String actionInvariantUuId,
+                                       String user);
+
+  public ActionArtifact downloadArtifact(String actionUuId, String artifactUuId)
+      throws ActionException;
+
+  public void deleteArtifact(String actionInvariantUuId, String artifactUuId, String user)
+      throws ActionException;
+
+  public void updateArtifact(ActionArtifact data, String actionInvariantUuId, String user);
+}
+
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/src/main/java/org/openecomp/sdc/action/impl/ActionManagerImpl.java b/openecomp-be/backend/openecomp-sdc-action-manager/src/main/java/org/openecomp/sdc/action/impl/ActionManagerImpl.java
new file mode 100644
index 0000000..53ab943
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/src/main/java/org/openecomp/sdc/action/impl/ActionManagerImpl.java
@@ -0,0 +1,1217 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.action.impl;
+
+import static org.openecomp.sdc.action.ActionConstants.SERVICE_INSTANCE_ID;
+import static org.openecomp.sdc.action.ActionConstants.TARGET_ENTITY_API;
+import static org.openecomp.sdc.action.ActionConstants.TARGET_ENTITY_DB;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_ARTIFACT_ALREADY_EXISTS;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_ARTIFACT_ALREADY_EXISTS_CODE;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_ARTIFACT_DELETE_READ_ONLY;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_ARTIFACT_DELETE_READ_ONLY_MSG;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_ARTIFACT_UPDATE_NAME_INVALID;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_ARTIFACT_UPDATE_READ_ONLY;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_ARTIFACT_UPDATE_READ_ONLY_MSG;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_CHECKIN_ON_ENTITY_LOCKED_BY_OTHER_USER;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_CHECKIN_ON_UNLOCKED_ENTITY;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_CHECKOUT_ON_LOCKED_ENTITY;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_CHECKOUT_ON_LOCKED_ENTITY_OTHER_USER;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_DELETE_ON_LOCKED_ENTITY_CODE;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_EDIT_ON_ENTITY_LOCKED_BY_OTHER_USER;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_ENTITY_NOT_EXIST;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_ENTITY_NOT_EXIST_CODE;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_ENTITY_UNIQUE_VALUE_ERROR;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_ENTITY_UNIQUE_VALUE_MSG;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_INTERNAL_SERVER_ERR_CODE;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_REQUESTED_VERSION_INVALID;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_SUBMIT_FINALIZED_ENTITY_NOT_ALLOWED;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_SUBMIT_LOCKED_ENTITY_NOT_ALLOWED;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_UNDO_CHECKOUT_ON_ENTITY_LOCKED_BY_OTHER_USER;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_UNDO_CHECKOUT_ON_UNLOCKED_ENTITY;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_UPDATE_INVALID_VERSION;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_UPDATE_NOT_ALLOWED_CODE;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_UPDATE_NOT_ALLOWED_CODE_NAME;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_UPDATE_NOT_ALLOWED_FOR_NAME;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_UPDATE_ON_UNLOCKED_ENTITY;
+import static org.openecomp.sdc.action.errors.ActionErrorConstants.ACTION_UPDATE_PARAM_INVALID;
+import static org.openecomp.sdc.action.util.ActionUtil.actionLogPostProcessor;
+import static org.openecomp.sdc.action.util.ActionUtil.actionLogPreProcessor;
+import static org.openecomp.sdc.versioning.dao.types.Version.VERSION_STRING_VIOLATION_MSG;
+
+import org.apache.commons.lang.StringUtils;
+import org.openecomp.core.logging.api.Logger;
+import org.openecomp.core.logging.api.LoggerFactory;
+import org.openecomp.core.util.UniqueValueUtil;
+import org.openecomp.core.utilities.CommonMethods;
+import org.openecomp.core.utilities.json.JsonUtil;
+import org.openecomp.sdc.action.ActionConstants;
+import org.openecomp.sdc.action.ActionManager;
+import org.openecomp.sdc.action.dao.ActionArtifactDao;
+import org.openecomp.sdc.action.dao.ActionArtifactDaoFactory;
+import org.openecomp.sdc.action.dao.ActionDao;
+import org.openecomp.sdc.action.dao.ActionDaoFactory;
+import org.openecomp.sdc.action.dao.types.ActionArtifactEntity;
+import org.openecomp.sdc.action.dao.types.ActionEntity;
+import org.openecomp.sdc.action.errors.ActionErrorConstants;
+import org.openecomp.sdc.action.errors.ActionException;
+import org.openecomp.sdc.action.logging.StatusCode;
+import org.openecomp.sdc.action.types.Action;
+import org.openecomp.sdc.action.types.ActionArtifact;
+import org.openecomp.sdc.action.types.ActionArtifactProtection;
+import org.openecomp.sdc.action.types.ActionStatus;
+import org.openecomp.sdc.action.types.ActionSubOperation;
+import org.openecomp.sdc.action.types.EcompComponent;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.versioning.VersioningManager;
+import org.openecomp.sdc.versioning.VersioningManagerFactory;
+import org.openecomp.sdc.versioning.dao.VersionInfoDao;
+import org.openecomp.sdc.versioning.dao.VersionInfoDaoFactory;
+import org.openecomp.sdc.versioning.dao.types.UserCandidateVersion;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.dao.types.VersionInfoEntity;
+import org.openecomp.sdc.versioning.errors.EntityNotExistErrorBuilder;
+import org.openecomp.sdc.versioning.errors.VersioningErrorCodes;
+import org.openecomp.sdc.versioning.types.VersionInfo;
+import org.openecomp.sdc.versioning.types.VersionableEntityAction;
+import org.slf4j.MDC;
+
+import java.time.ZoneOffset;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+
+/**
+ * Manager Implementation for {@link ActionManager Action Library Operations}. <br> Handles Business
+ * layer validations and acts as an interface between the REST and DAO layers.
+ */
+public class ActionManagerImpl implements ActionManager {
+
+  private static final ActionDao actionDao = ActionDaoFactory.getInstance().createInterface();
+  private static final VersioningManager versioningManager =
+      VersioningManagerFactory.getInstance().createInterface();
+  private static final ActionArtifactDao actionArtifactDao =
+      ActionArtifactDaoFactory.getInstance().createInterface();
+  private static VersionInfoDao versionInfoDao =
+      VersionInfoDaoFactory.getInstance().createInterface();
+
+  private final Logger log = (Logger) LoggerFactory.getLogger(this.getClass().getName());
+
+  public ActionManagerImpl() {
+    actionDao.registerVersioning(ActionConstants.ACTION_VERSIONABLE_TYPE);
+  }
+
+  /**
+   * Get Current Timestamp in UTC format.
+   *
+   * @return Current Timestamp in UTC format.
+   */
+  public static Date getCurrentTimeStampUtc() {
+    return Date.from(java.time.ZonedDateTime.now(ZoneOffset.UTC).toInstant());
+  }
+
+  /**
+   * List All Major, Last Minor and Candidate version (if any) for Given Action Invariant UUID.
+   *
+   * @param invariantId Invariant UUID of the action for which the information is required.
+   * @return List of All Major, Last Minor and Candidate version if any Of {@link Action} with given
+     actionInvariantUuId.
+   * @throws ActionException Exception with an action library specific code, short description and
+   *                         detailed message for the error occurred during the operation.
+   */
+  @Override
+  public List<Action> getActionsByActionInvariantUuId(String invariantId) throws ActionException {
+    log.debug(" entering getActionsByActionInvariantUUID with  invariantID = " + invariantId);
+    List<Action> actions = actionDao
+        .getActionsByActionInvariantUuId(invariantId != null ? invariantId.toUpperCase() : null);
+    if (actions != null && actions.isEmpty()) {
+      throw new ActionException(ACTION_ENTITY_NOT_EXIST_CODE, ACTION_ENTITY_NOT_EXIST);
+    }
+    log.debug(" exit getActionsByActionInvariantUUID with  invariantID = " + invariantId);
+    return actions;
+  }
+
+  /**
+   * Get list of actions based on a filter criteria. If no filter is sent all actions will be
+   * returned.
+   *
+   * @param filterType  Filter by Vendor/Category/Model/Component/None.
+   * @param filterValue Filter Parameter Value (Vendor ID/Category ID/Model ID/Component ID).
+   * @return List of {@link Action} objects based on a filter criteria <br> Empty List if no records
+    match the provided filter criteria.
+   * @throws ActionException Exception with an action library specific code, short description and
+   *                         detailed message for the error occurred for the error occurred during
+   *                         the operation.
+   */
+  @Override
+  public List<Action> getFilteredActions(String filterType, String filterValue)
+      throws ActionException {
+    log.debug(" entering getFilteredActions By filterType = " + filterType + " With value = "
+        + filterValue);
+    List<Action> actions;
+    switch (filterType) {
+      case ActionConstants.FILTER_TYPE_NONE:
+        //Business validation for ECOMP Component type fetch (if any)
+        break;
+      case ActionConstants.FILTER_TYPE_VENDOR:
+        //Business validation for vendor type fetch (if any)
+        break;
+      case ActionConstants.FILTER_TYPE_CATEGORY:
+        //Business validation for Category type fetch (if any)
+        break;
+      case ActionConstants.FILTER_TYPE_MODEL:
+        //Business validation for model type fetch (if any)
+        break;
+      case ActionConstants.FILTER_TYPE_ECOMP_COMPONENT:
+        //Business validation for ECOMP Component type fetch (if any)
+        break;
+      case ActionConstants.FILTER_TYPE_NAME:
+        actions = actionDao
+            .getFilteredActions(filterType, filterValue != null ? filterValue.toLowerCase() : null);
+        if (actions != null && actions.isEmpty()) {
+          throw new ActionException(ACTION_ENTITY_NOT_EXIST_CODE, ACTION_ENTITY_NOT_EXIST);
+        }
+        log.debug(" exit getFilteredActions By filterType = " + filterType + " With value = "
+            + filterValue);
+        return actions;
+      default:
+        break;
+    }
+    actions = actionDao
+        .getFilteredActions(filterType, filterValue != null ? filterValue.toLowerCase() : null);
+    List<Action> majorMinorVersionList = getMajorMinorVersionActions(actions);
+    Collections.sort(majorMinorVersionList);
+    log.debug(
+        " exit getFilteredActions By filterType = " + filterType + " With value = " + filterValue);
+    return majorMinorVersionList;
+  }
+
+  /**
+   * Get the properties of an action version by its UUID.
+   *
+   * @param actionUuId UUID of the specific action version.
+   * @return {@link Action} object corresponding the version represented by the UUID.
+   * @throws ActionException Exception with an action library specific code, short description and
+   *                         detailed message for the error occurred for the error occurred during
+   *                         the operation.
+   */
+  @Override
+  public Action getActionsByActionUuId(String actionUuId) throws ActionException {
+    log.debug(" entering getActionsByActionUUID with  actionUUID = " + actionUuId);
+    Action action =
+        actionDao.getActionsByActionUuId(actionUuId != null ? actionUuId.toUpperCase() : null);
+
+    if (action == null) {
+      throw new ActionException(ACTION_ENTITY_NOT_EXIST_CODE, ACTION_ENTITY_NOT_EXIST);
+    }
+    log.debug(" exit getActionsByActionUUID with  actionUUID = " + actionUuId);
+    return action;
+  }
+
+  /**
+   * List ECOMP Components supported by Action Library
+   *
+   * @return List of {@link EcompComponent} objects supported by Action Library <br> Empty List if
+    no components are found.
+   * @throws ActionException Exception with an action library specific code, short description and
+   *                         detailed message for the error occurred for the error occurred during
+   *                         the operation.
+   */
+  @Override
+  public List<EcompComponent> getEcompComponents() throws ActionException {
+    return actionDao.getEcompComponents();
+  }
+
+
+  /**
+   * Delete an action.
+   *
+   * @param actionInvariantUuId Invariant UUID of the action to be deleted.
+   * @param user                User id of the user performing the operation.
+   */
+  @Override
+  public void deleteAction(String actionInvariantUuId, String user) throws ActionException {
+    try {
+      log.debug("entering deleteAction with actionInvariantUUID = " + actionInvariantUuId
+          + " and user = " + user);
+      actionLogPreProcessor(ActionSubOperation.DELETE_ACTION, TARGET_ENTITY_API);
+      versioningManager.delete(ActionConstants.ACTION_VERSIONABLE_TYPE, actionInvariantUuId, user);
+      actionLogPostProcessor(StatusCode.COMPLETE);
+      log.metrics("");
+      actionDao.deleteAction(actionInvariantUuId);
+    } catch (CoreException ce) {
+      formAndThrowException(ce);
+    }
+  }
+
+  /**
+   * Create a new Action.
+   *
+   * @param action Action object model of the user request for creating an action.
+   * @param user   AT&T id of the user sending the create request.
+   * @return {@link Action} model object for the created action.
+   * @throws ActionException Exception with an action library specific code, short description and
+   *                         detailed message for the error occurred for the error occurred during
+   *                         the operation.
+   */
+  @Override
+  public Action createAction(Action action, String user) throws ActionException {
+    try {
+      actionLogPreProcessor(ActionSubOperation.VALIDATE_ACTION_UNIQUE_NAME, TARGET_ENTITY_API);
+      UniqueValueUtil
+          .validateUniqueValue(ActionConstants.UniqueValues.ACTION_NAME, action.getName());
+      actionLogPostProcessor(StatusCode.COMPLETE);
+    } catch (CoreException ce) {
+      String errorDesc = String
+          .format(ACTION_ENTITY_UNIQUE_VALUE_MSG, ActionConstants.UniqueValues.ACTION_NAME,
+              action.getName());
+      actionLogPostProcessor(StatusCode.ERROR, ACTION_ENTITY_UNIQUE_VALUE_ERROR, errorDesc, false);
+      throw new ActionException(ACTION_ENTITY_UNIQUE_VALUE_ERROR, errorDesc);
+    } finally {
+      log.metrics("");
+    }
+
+    action.setUser(user);
+    action.setTimestamp(getCurrentTimeStampUtc());
+    action.setActionInvariantUuId(CommonMethods.nextUuId());
+    action.setActionUuId(CommonMethods.nextUuId());
+
+    actionLogPreProcessor(ActionSubOperation.CREATE_ACTION_VERSION, TARGET_ENTITY_API);
+    Version version = versioningManager
+        .create(ActionConstants.ACTION_VERSIONABLE_TYPE, action.getActionInvariantUuId(), user);
+    actionLogPostProcessor(StatusCode.COMPLETE);
+    log.metrics("");
+    action.setVersion(version.toString());
+    action.setStatus(ActionStatus.Locked);
+    action = updateData(action);
+    action = actionDao.createAction(action);
+    actionLogPreProcessor(ActionSubOperation.CREATE_ACTION_UNIQUE_VALUE, TARGET_ENTITY_API);
+    UniqueValueUtil.createUniqueValue(ActionConstants.UniqueValues.ACTION_NAME, action.getName());
+    actionLogPostProcessor(StatusCode.COMPLETE);
+    log.metrics("");
+    return action;
+  }
+
+  /**
+   * Update an existing action.
+   *
+   * @param action Action object model of the user request for creating an action.
+   * @param user   AT&T id of the user sending the update request.
+   * @return {@link Action} model object for the update action.
+   * @throws ActionException Exception with an action library specific code, short description and
+   *                         detailed message for the error occurred for the error occurred during
+   *                         the operation.
+   */
+  @Override
+  public Action updateAction(Action action, String user) throws ActionException {
+    try {
+      log.debug("entering updateAction to update action with invariantUUID = "
+          + action.getActionInvariantUuId() + " by user = " + user);
+      String invariantUuId = action.getActionInvariantUuId();
+      actionLogPreProcessor(ActionSubOperation.GET_ACTION_VERSION, TARGET_ENTITY_API);
+      VersionInfo versionInfo = versioningManager
+          .getEntityVersionInfo(ActionConstants.ACTION_VERSIONABLE_TYPE, invariantUuId, user,
+              VersionableEntityAction.Write);
+      actionLogPostProcessor(StatusCode.COMPLETE);
+      log.metrics("");
+      Version activeVersion = versionInfo.getActiveVersion();
+      validateActions(action, activeVersion);
+      action.setStatus(ActionStatus.Locked); //Status will be Checkout for update
+      updateData(action);
+      action.setUser(user);
+      action.setTimestamp(getCurrentTimeStampUtc());
+      actionDao.updateAction(action);
+    } catch (CoreException ce) {
+      formAndThrowException(ce);
+    }
+    log.debug("exit updateAction");
+    return action;
+  }
+
+  /**
+   * Checkout an existing action.
+   *
+   * @param invariantUuId actionInvariantUuId of the action to be checked out.
+   * @param user          AT&T id of the user sending the checkout request.
+   * @return {@link Action} model object for the checkout action.
+   * @throws ActionException Exception with an action library specific code, short description and
+   *                         detailed message for the error occurred for the error occurred during
+   *                         the operation.
+   */
+  @Override
+  public Action checkout(String invariantUuId, String user) throws ActionException {
+    Version version = null;
+    ActionEntity actionEntity = null;
+    try {
+      log.debug(
+          "entering checkout for Action with invariantUUID= " + invariantUuId + " by user = "
+              + user);
+      actionLogPreProcessor(ActionSubOperation.CHECKOUT_ACTION, TARGET_ENTITY_API);
+      version =
+          versioningManager.checkout(ActionConstants.ACTION_VERSIONABLE_TYPE, invariantUuId, user);
+      actionLogPostProcessor(StatusCode.COMPLETE);
+      log.metrics("");
+      actionEntity =
+          updateUniqueIdForVersion(invariantUuId, version, ActionStatus.Locked.name(), user);
+    } catch (CoreException e0) {
+      if (e0.code() != null
+          && e0.code().id().equals(VersioningErrorCodes.CHECKOT_ON_LOCKED_ENTITY)) {
+        actionLogPreProcessor(ActionSubOperation.GET_ACTION_VERSION, TARGET_ENTITY_DB);
+        VersionInfoEntity versionInfoEntity = versionInfoDao
+            .get(new VersionInfoEntity(ActionConstants.ACTION_VERSIONABLE_TYPE, invariantUuId));
+        actionLogPostProcessor(StatusCode.COMPLETE);
+        log.metrics("");
+        String checkoutUser = versionInfoEntity.getCandidate().getUser();
+        log.debug(
+            "Actual checkout user for Action with invariantUUID= " + invariantUuId + " is = "
+                + checkoutUser);
+        if (!checkoutUser.equals(user)) {
+          throw new ActionException(ACTION_CHECKOUT_ON_LOCKED_ENTITY_OTHER_USER, e0.getMessage());
+        }
+      }
+      formAndThrowException(e0);
+    }
+    log.debug(
+        "exit checkout for Action with invariantUUID= " + invariantUuId + " by user = " + user);
+    return actionEntity != null ? actionEntity.toDto() : new Action();
+  }
+
+  /**
+   * Undo an already checked out action.
+   *
+   * @param invariantUuId actionInvariantUuId of the checked out action.
+   * @param user          AT&T id of the user sending the request.
+   * @throws ActionException Exception with an action library specific code, short description and
+   *                         detailed message for the error occurred for the error occurred during
+   *                         the operation.
+   */
+  @Override
+  public void undoCheckout(String invariantUuId, String user) throws ActionException {
+    Version version;
+    try {
+      log.debug(
+          "entering undoCheckout for Action with invariantUUID= " + invariantUuId + " by user = "
+              + user);
+      actionLogPreProcessor(ActionSubOperation.GET_ACTION_VERSION, TARGET_ENTITY_DB);
+      //Get list of uploaded artifacts in this checked out version
+      VersionInfoEntity versionInfoEntity = versionInfoDao
+          .get(new VersionInfoEntity(ActionConstants.ACTION_VERSIONABLE_TYPE, invariantUuId));
+      actionLogPostProcessor(StatusCode.COMPLETE);
+      log.metrics("");
+      if (versionInfoEntity == null) {
+        throw new CoreException(
+            new EntityNotExistErrorBuilder(ActionConstants.ACTION_VERSIONABLE_TYPE, invariantUuId)
+                .build());
+      }
+      UserCandidateVersion candidate = versionInfoEntity.getCandidate();
+      Version activeVersion;
+      if (candidate != null) {
+        activeVersion = candidate.getVersion();
+      } else {
+        activeVersion = versionInfoEntity.getActiveVersion();
+      }
+      actionLogPreProcessor(ActionSubOperation.GET_ACTIONENTITY_BY_VERSION, TARGET_ENTITY_DB);
+      Action action = actionDao.get(new ActionEntity(invariantUuId, activeVersion)).toDto();
+      actionLogPostProcessor(StatusCode.COMPLETE);
+      log.metrics("");
+      //Perform undo checkout on the action
+      actionLogPreProcessor(ActionSubOperation.UNDO_CHECKOUT_ACTION, TARGET_ENTITY_API);
+      version = versioningManager
+          .undoCheckout(ActionConstants.ACTION_VERSIONABLE_TYPE, invariantUuId, user);
+      actionLogPostProcessor(StatusCode.COMPLETE);
+      log.metrics("");
+      if (version.equals(new Version(0, 0))) {
+        actionLogPreProcessor(ActionSubOperation.DELETE_UNIQUEVALUE, TARGET_ENTITY_API);
+        UniqueValueUtil
+            .deleteUniqueValue(ActionConstants.UniqueValues.ACTION_NAME, action.getName());
+        actionLogPostProcessor(StatusCode.COMPLETE);
+        log.metrics("");
+        actionLogPreProcessor(ActionSubOperation.DELETE_ACTIONVERSION, TARGET_ENTITY_DB );
+        //Added for the case where Create->Undo_Checkout->Checkout should not get the action
+        versionInfoDao
+            .delete(new VersionInfoEntity(ActionConstants.ACTION_VERSIONABLE_TYPE, invariantUuId));
+        actionLogPostProcessor(StatusCode.COMPLETE);
+        log.metrics("");
+      }
+      List<ActionArtifact> currentVersionArtifacts = action.getArtifacts();
+
+      //Delete the artifacts from action_artifact table (if any)
+      if (currentVersionArtifacts != null && currentVersionArtifacts.size() > 0) {
+        for (ActionArtifact artifact : currentVersionArtifacts) {
+          ActionArtifactEntity artifactDeleteEntity =
+              new ActionArtifactEntity(artifact.getArtifactUuId(),
+                  getEffectiveVersion(activeVersion.toString()));
+          actionLogPreProcessor(ActionSubOperation.DELETE_ARTIFACT, TARGET_ENTITY_DB);
+          actionArtifactDao.delete(artifactDeleteEntity);
+          actionLogPostProcessor(StatusCode.COMPLETE);
+          log.metrics("");
+        }
+      }
+    } catch (CoreException e0) {
+      formAndThrowException(e0);
+    }
+    log.debug(
+        "exit undoCheckout for Action with invariantUUID= " + invariantUuId + " by user = " + user);
+  }
+
+  /**
+   * Checkin a checked out action.
+   *
+   * @param invariantUuId actionInvariantUuId of the checked out action.
+   * @param user          AT&T id of the user sending the request.
+   * @return {@link Action} model object for the updated action.
+   * @throws ActionException Exception with an action library specific code, short description and
+   *                         detailed message for the error occurred for the error occurred during
+   *                         the operation.
+   */
+  @Override
+  public Action checkin(String invariantUuId, String user) throws ActionException {
+    Version version = null;
+    ActionEntity actionEntity = null;
+    try {
+      log.debug("entering checkin for Action with invariantUUID= " + invariantUuId + " by user = "
+          + user);
+      actionLogPreProcessor(ActionSubOperation.CHECKIN_ACTION, TARGET_ENTITY_API);
+      version = versioningManager
+          .checkin(ActionConstants.ACTION_VERSIONABLE_TYPE, invariantUuId, user, null);
+      actionLogPostProcessor(StatusCode.COMPLETE);
+      log.metrics("");
+      actionEntity =
+          updateStatusForVersion(invariantUuId, version, ActionStatus.Available.name(), user);
+    } catch (CoreException e0) {
+      formAndThrowException(e0);
+    }
+    log.debug(
+        "exit checkin for Action with invariantUUID= " + invariantUuId + " by user = " + user);
+    return actionEntity != null ? actionEntity.toDto() : new Action();
+  }
+
+  /**
+   * Submit a checked in action.
+   *
+   * @param invariantUuId actionInvariantUuId of the checked in action.
+   * @param user          AT&T id of the user sending the request.
+   * @return {@link Action} model object for the updated action.
+   * @throws ActionException Exception with an action library specific code, short description and
+   *                         detailed message for the error occurred for the error occurred during
+   *                         the operation.
+   */
+  @Override
+  public Action submit(String invariantUuId, String user) throws ActionException {
+    Version version = null;
+    ActionEntity actionEntity = null;
+    try {
+      log.debug("entering checkin for Action with invariantUUID= " + invariantUuId + " by user = "
+          + user);
+      actionLogPreProcessor(ActionSubOperation.CHECKIN_ACTION, TARGET_ENTITY_API);
+      version = versioningManager
+          .submit(ActionConstants.ACTION_VERSIONABLE_TYPE, invariantUuId, user, null);
+      actionLogPostProcessor(StatusCode.COMPLETE);
+      log.metrics("");
+      actionEntity =
+          updateUniqueIdForVersion(invariantUuId, version, ActionStatus.Final.name(), user);
+    } catch (CoreException e0) {
+      formAndThrowException(e0);
+    }
+    log.debug(
+        "exit checkin for Action with invariantUUID= " + invariantUuId + " by user = " + user);
+    return actionEntity != null ? actionEntity.toDto() : new Action();
+  }
+
+  /**
+   * Download an artifact of an action.
+   *
+   * @param artifactUuId {@link ActionArtifact} object representing the artifact and its metadata.
+   * @param actionUuId   UUID of the action for which the artifact has to be downloaded.
+   * @return downloaded action artifact object.
+   */
+  @Override
+  public ActionArtifact downloadArtifact(String actionUuId, String artifactUuId)
+      throws ActionException {
+    log.debug(" entering downloadArtifact with actionUUID= " + actionUuId + " and artifactUUID= "
+        + artifactUuId);
+    Action action = actionDao.getActionsByActionUuId(actionUuId);
+    ActionArtifact actionArtifact;
+    if (action != null) {
+      MDC.put(SERVICE_INSTANCE_ID, action.getActionInvariantUuId());
+      List<ActionArtifact> artifacts = action.getArtifacts();
+      String actionVersion = action.getVersion();
+      int effectiveVersion = getEffectiveVersion(actionVersion);
+      ActionArtifact artifactMetadata =
+          getArtifactMetadataFromAction(artifacts, ActionConstants.ARTIFACT_METADATA_ATTR_UUID,
+              artifactUuId);
+      if (artifactMetadata != null) {
+        String artifactName = artifactMetadata.getArtifactName();
+        actionArtifact = actionArtifactDao.downloadArtifact(effectiveVersion, artifactUuId);
+        actionArtifact.setArtifactName(artifactName);
+
+      } else {
+        throw new ActionException(ActionErrorConstants.ACTION_ARTIFACT_ENTITY_NOT_EXIST_CODE,
+            ActionErrorConstants.ACTION_ARTIFACT_ENTITY_NOT_EXIST);
+      }
+    } else {
+      throw new ActionException(ACTION_ENTITY_NOT_EXIST_CODE,
+          ACTION_ENTITY_NOT_EXIST);
+    }
+    log.debug(" exit downloadArtifact with actionUUID= " + actionUuId + " and artifactUUID= "
+        + artifactUuId);
+    return actionArtifact;
+  }
+
+  /**
+   * Upload an artifact to an action.
+   *
+   * @param artifact            {@link ActionArtifact} object representing the artifact and its
+   *                            metadata.
+   * @param actionInvariantUuId Invariant UUID of the action to which the artifact has to be
+   *                            uploaded.
+   * @param user                User ID of the user sending the request.
+   * @return Uploaded action artifact object.
+   */
+  @Override
+  public ActionArtifact uploadArtifact(ActionArtifact artifact, String actionInvariantUuId,
+                                       String user) {
+    ActionArtifact uploadArtifactResponse = new ActionArtifact();
+    try {
+      log.debug("entering uploadArtifact with actionInvariantUUID= " + actionInvariantUuId
+          + "artifactName= " + artifact.getArtifactName());
+      actionLogPreProcessor(ActionSubOperation.GET_ACTION_VERSION, TARGET_ENTITY_DB);
+      VersionInfo versionInfo = versioningManager
+          .getEntityVersionInfo(ActionConstants.ACTION_VERSIONABLE_TYPE, actionInvariantUuId, user,
+              VersionableEntityAction.Write);
+      actionLogPostProcessor(StatusCode.COMPLETE);
+      log.metrics("");
+      Version activeVersion = versionInfo.getActiveVersion();
+      actionLogPreProcessor(ActionSubOperation.GET_ACTIONENTITY_BY_ACTIONINVID, TARGET_ENTITY_DB);
+      Action action = actionDao.get(new ActionEntity(actionInvariantUuId, activeVersion)).toDto();
+      actionLogPostProcessor(StatusCode.COMPLETE);
+      log.metrics("");
+      String artifactUuId = generateActionArtifactUuId(action, artifact.getArtifactName());
+      //Check for Unique document name
+      List<ActionArtifact> actionArtifacts = action.getArtifacts();
+      ActionArtifact artifactMetadata = getArtifactMetadataFromAction(actionArtifacts,
+          ActionConstants.ARTIFACT_METADATA_ATTR_NAME, artifact.getArtifactName());
+      if (artifactMetadata != null) {
+        throw new ActionException(ACTION_ARTIFACT_ALREADY_EXISTS_CODE,
+            String.format(ACTION_ARTIFACT_ALREADY_EXISTS, actionInvariantUuId));
+      }
+
+      //Create the artifact
+      artifact.setArtifactUuId(artifactUuId);
+      artifact.setTimestamp(getCurrentTimeStampUtc());
+      artifact.setEffectiveVersion(getEffectiveVersion(activeVersion.toString()));
+      actionArtifactDao.uploadArtifact(artifact);
+
+      //Update the action data field and timestamp
+      addArtifactMetadataInActionData(action, artifact);
+
+      //Set the response object
+      uploadArtifactResponse.setArtifactUuId(artifact.getArtifactUuId());
+    } catch (CoreException ce) {
+      formAndThrowException(ce);
+    }
+    log.debug(
+        "exit uploadArtifact with actionInvariantUUID= " + actionInvariantUuId + "artifactName= "
+            + artifact.getArtifactName());
+    return uploadArtifactResponse;
+  }
+
+  @Override
+  public void deleteArtifact(String actionInvariantUuId, String artifactUuId, String user)
+      throws ActionException {
+    log.debug(
+        "enter deleteArtifact with actionInvariantUUID= " + actionInvariantUuId + "artifactUUID= "
+            + artifactUuId + " and user = " + user);
+    Action action = actionDao.getLockedAction(actionInvariantUuId, user);
+    List<ActionArtifact> actionArtifacts = action.getArtifacts();
+    ActionArtifact artifactMetadata =
+        getArtifactMetadataFromAction(actionArtifacts, ActionConstants.ARTIFACT_METADATA_ATTR_UUID,
+            artifactUuId);
+    if (artifactMetadata == null) {
+      throw new ActionException(ActionErrorConstants.ACTION_ARTIFACT_ENTITY_NOT_EXIST_CODE,
+          ActionErrorConstants.ACTION_ARTIFACT_ENTITY_NOT_EXIST);
+    }
+    if (artifactMetadata.getArtifactProtection().equals(ActionArtifactProtection.readOnly.name())) {
+      throw new ActionException(ACTION_ARTIFACT_DELETE_READ_ONLY,
+          ACTION_ARTIFACT_DELETE_READ_ONLY_MSG);
+    } else {
+
+      //Update action by removing artifact metadata
+      String jsonData = action.getData();
+      List<ActionArtifact> artifacts = action.getArtifacts();//action.getArtifacts();
+      ActionArtifact artifact = null;
+      Iterator<ActionArtifact> it = artifacts.iterator();
+      while (it.hasNext()) {
+        artifact = it.next();
+        String artifactId = artifact.getArtifactUuId();
+        if (artifactId.equals(artifactUuId)) {
+          it.remove();
+        }
+      }
+
+      Map dataMap = JsonUtil.json2Object(jsonData, LinkedHashMap.class);
+      dataMap.put("artifacts", artifacts);
+      String data = JsonUtil.object2Json(dataMap);
+      ActionEntity actionEntity = action.toEntity();
+      actionEntity.setData(data);
+      actionLogPreProcessor(ActionSubOperation.UPDATE_ACTION, TARGET_ENTITY_DB);
+      actionDao.update(actionEntity);
+      actionLogPostProcessor(StatusCode.COMPLETE, null, "", false);
+      log.metrics("");
+      // delete Artifact if it's upload and delete action on same checkout version
+      String artifactName = artifactMetadata.getArtifactName();
+      String generatedArtifactUuId = generateActionArtifactUuId(action, artifactName);
+      if (generatedArtifactUuId.equals(artifactUuId)) {
+        ActionArtifactEntity artifactDeleteEntity =
+            new ActionArtifactEntity(artifact.getArtifactUuId(),
+                getEffectiveVersion(action.getVersion()));
+        actionLogPreProcessor(ActionSubOperation.DELETE_ACTION_ARTIFACT, TARGET_ENTITY_DB);
+        actionArtifactDao.delete(artifactDeleteEntity);
+        actionLogPostProcessor(StatusCode.COMPLETE, null, "", false);
+        log.metrics("");
+      }
+
+    }
+    log.debug(
+        "exit deleteArtifact with actionInvariantUUID= " + actionInvariantUuId + "artifactUUID= "
+            + artifactUuId + " and user = " + user);
+  }
+
+  /**
+   * Update an existing artifact.
+   *
+   * @param artifact            {@link ActionArtifact} object representing the artifact and its
+   *                            metadata.
+   * @param actionInvariantUuId Invariant UUID of the action to which the artifact has to be
+   *                            uploaded.
+   * @param user                User ID of the user sending the request.
+   */
+  public void updateArtifact(ActionArtifact artifact, String actionInvariantUuId, String user) {
+    try {
+      log.debug("Enter updateArtifact with actionInvariantUUID= " + actionInvariantUuId
+          + "artifactUUID= " + artifact.getArtifactUuId() + " and user = " + user);
+      actionLogPreProcessor(ActionSubOperation.GET_ACTION_VERSION, TARGET_ENTITY_API);
+      VersionInfo versionInfo = versioningManager
+          .getEntityVersionInfo(ActionConstants.ACTION_VERSIONABLE_TYPE, actionInvariantUuId, user,
+              VersionableEntityAction.Write);
+      actionLogPostProcessor(StatusCode.COMPLETE, null, "", false);
+      log.metrics("");
+      Version activeVersion = versionInfo.getActiveVersion();
+      actionLogPreProcessor(ActionSubOperation.GET_ACTIONENTITY_BY_ACTIONINVID, TARGET_ENTITY_DB);
+      Action action = actionDao.get(new ActionEntity(actionInvariantUuId, activeVersion)).toDto();
+      actionLogPostProcessor(StatusCode.COMPLETE, null, "", false);
+      log.metrics("");
+      List<ActionArtifact> actionArtifacts = action.getArtifacts();
+      ActionArtifact artifactMetadataByUuId = getArtifactMetadataFromAction(actionArtifacts,
+          ActionConstants.ARTIFACT_METADATA_ATTR_UUID, artifact.getArtifactUuId());
+      //Check if artifact is already in action or not
+      if (artifactMetadataByUuId == null) {
+        throw new ActionException(ActionErrorConstants.ACTION_ARTIFACT_ENTITY_NOT_EXIST_CODE,
+            ActionErrorConstants.ACTION_ARTIFACT_ENTITY_NOT_EXIST);
+      }
+      //If user tries to change artifact name
+      if (artifact.getArtifactName() != null
+          && !artifactMetadataByUuId.getArtifactName()
+          .equalsIgnoreCase(artifact.getArtifactName())) {
+        throw new ActionException(ACTION_UPDATE_NOT_ALLOWED_CODE,
+            ACTION_ARTIFACT_UPDATE_NAME_INVALID);
+      }
+
+      byte[] payload = artifact.getArtifact();
+      String artifactLabel = artifact.getArtifactLabel();
+      String artifactCategory = artifact.getArtifactCategory();
+      String artifactDescription = artifact.getArtifactDescription();
+      String artifactProtection = artifact.getArtifactProtection();
+      String artifactName = artifact.getArtifactName();
+      //If artifact read only
+      if (artifactMetadataByUuId.getArtifactProtection()
+          .equals(ActionArtifactProtection.readOnly.name())) {
+        if (artifactName != null || artifactLabel != null || artifactCategory != null
+            || artifactDescription != null || payload != null) {
+          throw new ActionException(ACTION_ARTIFACT_UPDATE_READ_ONLY,
+              ACTION_ARTIFACT_UPDATE_READ_ONLY_MSG);
+        }
+        //Changing value from readOnly to readWrite
+        if (artifactProtection != null
+            && artifactProtection.equals(ActionArtifactProtection.readWrite.name())) {
+          artifactMetadataByUuId.setArtifactProtection(ActionArtifactProtection.readWrite.name());
+          artifactMetadataByUuId.setTimestamp(getCurrentTimeStampUtc());
+          updateArtifactMetadataInActionData(action, artifactMetadataByUuId);
+        }
+      } else {
+        int effectiveVersion = getEffectiveVersion(activeVersion.toString());
+        if (artifactLabel != null) {
+          artifactMetadataByUuId.setArtifactLabel(artifactLabel);
+        }
+        if (artifactCategory != null) {
+          artifactMetadataByUuId.setArtifactCategory(artifactCategory);
+        }
+        if (artifactDescription != null) {
+          artifactMetadataByUuId.setArtifactDescription(artifactDescription);
+        }
+        if (artifactProtection != null) {
+          artifactMetadataByUuId.setArtifactProtection(artifactProtection);
+        }
+        if (payload != null) {
+          //get artifact data from action_artifact table for updating the content
+          ActionArtifact artifactContent = new ActionArtifact();
+          artifactContent.setArtifactUuId(artifact.getArtifactUuId());
+          artifactContent.setArtifact(payload);
+          artifactContent.setEffectiveVersion(effectiveVersion);
+          actionArtifactDao.updateArtifact(artifactContent);
+        }
+        //Update the action data field and timestamp
+        artifactMetadataByUuId.setTimestamp(getCurrentTimeStampUtc());
+        updateArtifactMetadataInActionData(action, artifactMetadataByUuId);
+      }
+      log.debug("exit updateArtifact with actionInvariantUUID= " + actionInvariantUuId
+          + "artifactUUID= " + artifact.getArtifactUuId() + " and user = " + user);
+    } catch (CoreException coreException) {
+      formAndThrowException(coreException);
+    }
+  }
+
+  /**
+   * Generate artifact UUID at runtime using action name and effective version.
+   *
+   * @param action       {@link Action} for which the artifact is being uploaded/updated/downloaded.
+   * @param artifactName Artifact name.
+   * @return Generated UUID string.
+   */
+  private String generateActionArtifactUuId(Action action, String artifactName) {
+    int effectiveVersion = getEffectiveVersion(action.getVersion());
+    //Upper case for maintaining case-insensitive behavior for the artifact names
+    String artifactUuIdString
+        = action.getName().toUpperCase() + effectiveVersion + artifactName.toUpperCase();
+    String generateArtifactUuId
+        = UUID.nameUUIDFromBytes((artifactUuIdString).getBytes()).toString();
+    String artifactUuId = generateArtifactUuId.replace("-", "");
+    return artifactUuId.toUpperCase();
+  }
+
+  /**
+   * Generate the effective action version for artifact operations.
+   *
+   * @param actionVersion Version of the action as a string.
+   * @return Effective version to be used for artifact operations.
+   */
+  private int getEffectiveVersion(String actionVersion) {
+    Version version = Version.valueOf(actionVersion);
+    return version.getMajor() * 10000 + version.getMinor();
+  }
+
+  /**
+   * Update the data field of the Action object with the modified/generated fields after an
+   * operation.
+   *
+   * @param action Action object whose data field has to be updated.
+   * @return Updated {@link Action} object.
+   */
+  private Action updateData(Action action) {
+    log.debug("entering updateData to update data json for action with actionuuid=  "
+        + action.getActionUuId());
+    Map<String, String> dataMap = new LinkedHashMap<>();
+    dataMap.put(ActionConstants.UNIQUE_ID, action.getActionUuId());
+    dataMap.put(ActionConstants.VERSION, action.getVersion());
+    dataMap.put(ActionConstants.INVARIANTUUID, action.getActionInvariantUuId());
+    dataMap.put(ActionConstants.STATUS, action.getStatus().name());
+
+    String data = action.getData();
+    Map<String, String> currentDataMap = JsonUtil.json2Object(data, LinkedHashMap.class);
+    dataMap.putAll(currentDataMap);
+    data = JsonUtil.object2Json(dataMap);
+    action.setData(data);
+    log.debug("exit updateData");
+    return action;
+  }
+
+  /**
+   * Method to add the artifact metadata in the data attribute of action table.
+   *
+   * @param action   Action to which artifact is uploaded.
+   * @param artifact Uploaded artifact object.
+   */
+  private void addArtifactMetadataInActionData(Action action, ActionArtifact artifact) {
+
+    ActionArtifact artifactMetadata = new ActionArtifact();
+    artifactMetadata.setArtifactUuId(artifact.getArtifactUuId());
+    artifactMetadata.setArtifactName(artifact.getArtifactName());
+    artifactMetadata.setArtifactProtection(artifact.getArtifactProtection());
+    artifactMetadata.setArtifactLabel(artifact.getArtifactLabel());
+    artifactMetadata.setArtifactDescription(artifact.getArtifactDescription());
+    artifactMetadata.setArtifactCategory(artifact.getArtifactCategory());
+    artifactMetadata.setTimestamp(artifact.getTimestamp());
+    List<ActionArtifact> actionArtifacts = action.getArtifacts();
+    if (actionArtifacts == null) {
+      actionArtifacts = new ArrayList<>();
+    }
+    actionArtifacts.add(artifactMetadata);
+    action.setArtifacts(actionArtifacts);
+    String currentData = action.getData();
+    Map<String, Object> currentDataMap = JsonUtil.json2Object(currentData, LinkedHashMap.class);
+    currentDataMap.put(ActionConstants.ARTIFACTS, actionArtifacts);
+    String updatedActionData = JsonUtil.object2Json(currentDataMap);
+    action.setData(updatedActionData);
+    action.setTimestamp(artifact.getTimestamp());
+    actionDao.updateAction(action);
+  }
+
+  /**
+   * Get a list of last major and last minor version (no candidate) of action from a list of
+   * actions.
+   *
+   * @param actions Exhaustive list of the action versions.
+   * @return List {@link Action} of last major and last minor version (no candidate) of action from
+      a list of actions.
+   */
+  private List<Action> getMajorMinorVersionActions(List<Action> actions) {
+    log.debug(" entering getMajorMinorVersionActions for actions ");
+    List<Action> list = new LinkedList<>();
+    actionLogPreProcessor(ActionSubOperation.GET_VERSIONINFO_FOR_ALL_ACTIONS, TARGET_ENTITY_API);
+    Map<String, VersionInfo> actionVersionMap = versioningManager
+        .listEntitiesVersionInfo(ActionConstants.ACTION_VERSIONABLE_TYPE, "",
+            VersionableEntityAction.Read);
+    actionLogPostProcessor(StatusCode.COMPLETE);
+    log.metrics("");
+    for (Action action : actions) {
+      if (action.getStatus() == ActionStatus.Deleted) {
+        continue;
+      }
+      VersionInfo actionVersionInfo = actionVersionMap.get(action.getActionInvariantUuId());
+      if (actionVersionInfo.getActiveVersion() != null
+          && actionVersionInfo.getActiveVersion().equals(Version.valueOf(action.getVersion()))) {
+        list.add(action);
+      } else if (actionVersionInfo.getLatestFinalVersion() != null
+          && actionVersionInfo.getLatestFinalVersion().equals(Version.valueOf(action.getVersion()))
+          &&
+          !actionVersionInfo.getLatestFinalVersion().equals(actionVersionInfo.getActiveVersion())) {
+        list.add(action);
+      }
+    }
+    log.debug(" exit getMajorMinorVersionActions for actions ");
+    return list;
+  }
+
+  /**
+   * CoreException object wrapper from Version library to Action Library Exception.
+   *
+   * @param exception CoreException object from version library.
+   */
+  private void formAndThrowException(CoreException exception) {
+    log.debug(
+        "entering formAndThrowException with input CoreException =" + exception.code().id() + " "
+            + exception.getMessage());
+    String errorDescription = exception.getMessage();
+    String errorCode = exception.code().id();
+    ActionException actionException = new ActionException();
+    switch (errorCode) {
+      case VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST:
+        actionException.setErrorCode(ACTION_ENTITY_NOT_EXIST_CODE);
+        actionException.setDescription(ACTION_ENTITY_NOT_EXIST);
+        break;
+      case VersioningErrorCodes.CHECKOT_ON_LOCKED_ENTITY:
+        actionException.setErrorCode(ACTION_CHECKOUT_ON_LOCKED_ENTITY);
+        actionException.setDescription(errorDescription);
+        break;
+      case VersioningErrorCodes.CHECKIN_ON_UNLOCKED_ENTITY:
+        actionException.setErrorCode(ACTION_CHECKIN_ON_UNLOCKED_ENTITY);
+        actionException.setDescription(errorDescription);
+        break;
+      case VersioningErrorCodes.SUBMIT_FINALIZED_ENTITY_NOT_ALLOWED:
+        actionException.setErrorCode(ACTION_SUBMIT_FINALIZED_ENTITY_NOT_ALLOWED);
+        actionException.setDescription(errorDescription);
+        break;
+      case VersioningErrorCodes.SUBMIT_LOCKED_ENTITY_NOT_ALLOWED:
+        actionException.setErrorCode(ACTION_SUBMIT_LOCKED_ENTITY_NOT_ALLOWED);
+        actionException.setDescription(errorDescription);
+        break;
+      case VersioningErrorCodes.UNDO_CHECKOUT_ON_UNLOCKED_ENTITY:
+        actionException.setErrorCode(ACTION_UNDO_CHECKOUT_ON_UNLOCKED_ENTITY);
+        actionException.setDescription(errorDescription);
+        break;
+      case VersioningErrorCodes.EDIT_ON_ENTITY_LOCKED_BY_OTHER_USER:
+        actionException.setErrorCode(ACTION_EDIT_ON_ENTITY_LOCKED_BY_OTHER_USER);
+        actionException.setDescription(errorDescription.replace("edit", "updat"));
+        break;
+      case VersioningErrorCodes.CHECKIN_ON_ENTITY_LOCKED_BY_OTHER_USER:
+        actionException.setErrorCode(ACTION_CHECKIN_ON_ENTITY_LOCKED_BY_OTHER_USER);
+        actionException.setDescription(errorDescription);
+        break;
+      case VersioningErrorCodes.UNDO_CHECKOUT_ON_ENTITY_LOCKED_BY_OTHER_USER:
+        actionException.setErrorCode(ACTION_UNDO_CHECKOUT_ON_ENTITY_LOCKED_BY_OTHER_USER);
+        actionException.setDescription(errorDescription);
+        break;
+      case VersioningErrorCodes.EDIT_ON_UNLOCKED_ENTITY:
+        actionException.setErrorCode(ACTION_UPDATE_ON_UNLOCKED_ENTITY);
+        actionException.setDescription(errorDescription.replace("edit", "update"));
+        break;
+      case VersioningErrorCodes.DELETE_ON_LOCKED_ENTITY:
+        actionException.setErrorCode(ACTION_DELETE_ON_LOCKED_ENTITY_CODE);
+        actionException.setDescription(errorDescription);
+        break;
+      default:
+        actionException.setErrorCode(ACTION_INTERNAL_SERVER_ERR_CODE);
+        actionException.setDescription(exception.getMessage());
+
+    }
+    log.debug(
+        "exit formAndThrowException with ActionException =" + actionException.getErrorCode() + " "
+            + actionException.getDescription());
+    throw actionException;
+  }
+
+  /**
+   * Validates an action object for business layer validations before an update operation.
+   *
+   * @param action        Action object to be validated.
+   * @param activeVersion Active version of the actoin object.
+   */
+  private void validateActions(Action action, Version activeVersion) {
+    try {
+      //Set version if not already available in input request
+      //If version set in input compare it with version from DB
+      if (StringUtils.isEmpty(action.getVersion())) {
+        action.setVersion(activeVersion.toString());
+      } else {
+        if (!activeVersion.equals(Version.valueOf(action.getVersion()))) {
+          throw new ActionException(ACTION_UPDATE_INVALID_VERSION,
+              String.format(ACTION_REQUESTED_VERSION_INVALID, action.getVersion()));
+        }
+      }
+      String invariantUuId = action.getActionInvariantUuId();
+      Version version = Version.valueOf(action.getVersion());
+      Action existingAction = getActions(invariantUuId, version);
+      if (existingAction == null || existingAction.getActionInvariantUuId() == null) {
+        throw new ActionException(ACTION_ENTITY_NOT_EXIST_CODE, ACTION_ENTITY_NOT_EXIST);
+      }
+      List<String> invalidParameters = new LinkedList<>();
+      //Prevent update of name, version and id fields
+      if (!existingAction.getName().equals(action.getName())) {
+        throw new ActionException(ACTION_UPDATE_NOT_ALLOWED_CODE_NAME,
+            ACTION_UPDATE_NOT_ALLOWED_FOR_NAME);
+      }
+      if (!StringUtils.isEmpty(action.getActionUuId())
+          && !existingAction.getActionUuId().equals(action.getActionUuId())) {
+        invalidParameters.add(ActionConstants.UNIQUE_ID);
+      }
+      if (action.getStatus() != null && (existingAction.getStatus() != action.getStatus())) {
+        invalidParameters.add(ActionConstants.STATUS);
+      }
+
+      if (!invalidParameters.isEmpty()) {
+        throw new ActionException(ACTION_UPDATE_NOT_ALLOWED_CODE,
+            String.format(ACTION_UPDATE_PARAM_INVALID, StringUtils.join(invalidParameters, ", ")));
+      }
+      action.setActionUuId(existingAction.getActionUuId());
+    } catch (IllegalArgumentException iae) {
+      String message = iae.getMessage();
+      switch (message) {
+        case VERSION_STRING_VIOLATION_MSG:
+          throw new ActionException(ACTION_UPDATE_NOT_ALLOWED_CODE, message);
+        default:
+          throw iae;
+      }
+    }
+  }
+
+  /**
+   * Get an action version entity object.
+   *
+   * @param invariantUuId Invariant UUID of the action.
+   * @param version       Version of the action.
+   * @return {@link ActionEntity} object of the action version.
+   */
+  private ActionEntity getActionsEntityByVersion(String invariantUuId, Version version) {
+    log.debug(
+        "entering getActionsEntityByVersion with invariantUUID= " + invariantUuId + " and version"
+            + version);
+    ActionEntity entity = null;
+    if (version != null) {
+      actionLogPreProcessor(ActionSubOperation.GET_ACTIONENTITY_BY_VERSION, TARGET_ENTITY_DB);
+      entity = actionDao.get(
+          new ActionEntity(invariantUuId != null ? invariantUuId.toUpperCase() : null, version));
+      actionLogPostProcessor(StatusCode.COMPLETE);
+      log.metrics("");
+    }
+    log.debug(
+        "exit getActionsEntityByVersion with invariantUUID= " + invariantUuId + " and version"
+            + version);
+    return entity;
+  }
+
+  /**
+   * Get an action version object.
+   *
+   * @param invariantUuId Invariant UUID of the action.
+   * @param version       Version of the action.
+   * @return {@link Action} object of the action version.
+   */
+  private Action getActions(String invariantUuId, Version version) {
+    ActionEntity actionEntity =
+        getActionsEntityByVersion(invariantUuId != null ? invariantUuId.toUpperCase() : null,
+            version);
+    return actionEntity != null ? actionEntity.toDto() : new Action();
+  }
+
+  /**
+   * Create and set the Unique ID in for an action version row.
+   *
+   * @param invariantUuId Invariant UUID of the action.
+   * @param version       Version of the action.
+   * @param status        Status of the action.
+   * @param user          AT&T id of the user sending the request.
+   * @return {@link ActionEntity} object of the action version.
+   */
+  private ActionEntity updateUniqueIdForVersion(String invariantUuId, Version version,
+                                                String status, String user) {
+    log.debug(
+        "entering updateUniqueIdForVersion to update action with invariantUUID= " + invariantUuId
+            + " with version,status and user as ::" + version + " " + status + " " + user);
+    //generate UUID AND update for newly created entity row
+    ActionEntity actionEntity = getActionsEntityByVersion(invariantUuId, version);
+    if (actionEntity != null) {
+      log.debug("Found action to be updated");
+      String data = actionEntity.getData();
+      String uniqueId = CommonMethods.nextUuId();
+      Map<String, String> dataMap = JsonUtil.json2Object(data, LinkedHashMap.class);
+      dataMap.put(ActionConstants.UNIQUE_ID, uniqueId);
+      dataMap.put(ActionConstants.VERSION, version.toString());
+      dataMap.put(ActionConstants.STATUS, status);
+      data = JsonUtil.object2Json(dataMap);
+
+      actionEntity.setData(data);
+      actionEntity.setActionUuId(uniqueId);
+      actionEntity.setStatus(status);
+      actionEntity.setUser(user);
+      actionEntity.setTimestamp(getCurrentTimeStampUtc());
+      actionLogPreProcessor(ActionSubOperation.UPDATE_ACTION, TARGET_ENTITY_DB);
+      actionDao.update(actionEntity);
+      actionLogPostProcessor(StatusCode.COMPLETE);
+      log.metrics("");
+    }
+    log.debug(
+        "exit updateUniqueIdForVersion to update action with invariantUUID= " + invariantUuId);
+    return actionEntity;
+  }
+
+  /**
+   * Set the status for an action version row.
+   *
+   * @param invariantUuId Invariant UUID of the action.
+   * @param version       Version of the action.
+   * @param status        Status of the action.
+   * @param user          AT&T id of the user sending the request.
+   * @return {@link ActionEntity} object of the action version.
+   */
+  private ActionEntity updateStatusForVersion(String invariantUuId, Version version, String status,
+                                              String user) {
+    log.debug(
+        "entering updateStatusForVersion with invariantUUID= " + invariantUuId + " and version"
+            + version + " for updating status " + status + " by user " + user);
+    ActionEntity actionEntity = getActionsEntityByVersion(invariantUuId, version);
+    if (actionEntity != null) {
+      String data = actionEntity.getData();
+      Map<String, String> dataMap = JsonUtil.json2Object(data, LinkedHashMap.class);
+      dataMap.put(ActionConstants.STATUS, status);
+      data = JsonUtil.object2Json(dataMap);
+      actionEntity.setData(data);
+      actionEntity.setStatus(status);
+      actionEntity.setUser(user);
+      actionEntity.setTimestamp(getCurrentTimeStampUtc());
+      actionLogPreProcessor(ActionSubOperation.UPDATE_ACTION, TARGET_ENTITY_DB);
+      actionDao.update(actionEntity);
+      actionLogPostProcessor(StatusCode.COMPLETE);
+      log.metrics("");
+    }
+    log.debug("exit updateStatusForVersion with invariantUUID= " + invariantUuId + " and version"
+        + version + " for updating status " + status + " by user " + user);
+    return actionEntity;
+
+  }
+
+  /**
+   * Gets an artifact from the action artifact metadata by artifact name.
+   *
+   * @param actionArtifactList  Action's existing artifact list.
+   * @param artifactFilterType  Search criteria for artifact in action artifact metadata.
+   * @param artifactFilterValue Value of Search parameter.
+   * @return Artifact metadata object if artifact is present in action and null otherwise.
+   */
+  private ActionArtifact getArtifactMetadataFromAction(List<ActionArtifact> actionArtifactList,
+                                                       String artifactFilterType,
+                                                       String artifactFilterValue) {
+    ActionArtifact artifact = null;
+    if (actionArtifactList != null && !actionArtifactList.isEmpty()) {
+      for (ActionArtifact entry : actionArtifactList) {
+        switch (artifactFilterType) {
+          case ActionConstants.ARTIFACT_METADATA_ATTR_UUID:
+            String artifactUuId = entry.getArtifactUuId();
+            if (artifactUuId != null && artifactUuId.equals(artifactFilterValue)) {
+              artifact = entry;
+              break;
+            }
+            break;
+          case ActionConstants.ARTIFACT_METADATA_ATTR_NAME:
+            String existingArtifactName = entry.getArtifactName().toLowerCase();
+            if (existingArtifactName.equals(artifactFilterValue.toLowerCase())) {
+              artifact = entry;
+              break;
+            }
+            break;
+          default:
+        }
+      }
+    }
+    return artifact;
+  }
+
+  /**
+   * Method to update the artifact metadata in the data attribute of action table.
+   *
+   * @param action          Action to which artifact is uploaded.
+   * @param updatedArtifact updated artifact object.
+   */
+  private void updateArtifactMetadataInActionData(Action action, ActionArtifact updatedArtifact) {
+    for (ActionArtifact entry : action.getArtifacts()) {
+      if (entry.getArtifactUuId().equals(updatedArtifact.getArtifactUuId())) {
+        entry.setArtifactLabel(updatedArtifact.getArtifactLabel());
+        entry.setArtifactCategory(updatedArtifact.getArtifactCategory());
+        entry.setArtifactDescription(updatedArtifact.getArtifactDescription());
+        entry.setArtifactProtection(updatedArtifact.getArtifactProtection());
+        entry.setTimestamp(updatedArtifact.getTimestamp());
+        break;
+      }
+    }
+    String data = action.getData();
+    Map<String, Object> map = JsonUtil.json2Object(data, LinkedHashMap.class);
+    map.put(ActionConstants.ARTIFACTS, action.getArtifacts());
+    String updatedActionData = JsonUtil.object2Json(map);
+    action.setData(updatedActionData);
+    action.setTimestamp(updatedArtifact.getTimestamp());
+    actionDao.updateAction(action);
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/src/test/java/org/openecomp/sdc/action/ActionTest.java b/openecomp-be/backend/openecomp-sdc-action-manager/src/test/java/org/openecomp/sdc/action/ActionTest.java
new file mode 100644
index 0000000..6d4b422
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/src/test/java/org/openecomp/sdc/action/ActionTest.java
@@ -0,0 +1,1207 @@
+package org.openecomp.sdc.action;
+
+import org.openecomp.sdc.action.dao.ActionDao;
+import org.openecomp.sdc.action.dao.ActionDaoFactory;
+import org.openecomp.sdc.action.dao.types.ActionEntity;
+import org.openecomp.sdc.action.errors.ActionErrorConstants;
+import org.openecomp.sdc.action.errors.ActionException;
+import org.openecomp.sdc.action.impl.ActionManagerImpl;
+
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.core.nosqldb.api.NoSqlDb;
+import org.openecomp.core.nosqldb.factory.NoSqlDbFactory;
+import org.openecomp.core.utilities.json.JsonUtil;
+
+import org.openecomp.sdc.action.types.Action;
+import org.openecomp.sdc.action.types.ActionArtifact;
+import org.openecomp.sdc.action.types.ActionArtifactProtection;
+import org.openecomp.sdc.action.types.ActionStatus;
+import org.openecomp.sdc.action.types.EcompComponent;
+import org.testng.Assert;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.*;
+
+
+@SuppressWarnings("Duplicates")
+public class ActionTest {
+  private static final Version VERSION01 = new Version(0, 1);
+  private static final String USER1 = "actionTestUser1";
+  private static final String USER2 = "actionTestUser2";
+  private static final String ACTION_1 =
+      "{\"name\":\"Test_Action1_name\", \"endpointUri\":\"/test/action/uri\"}";
+  private static final String ACTION_2 =
+      "{\"name\":\"Test_Action2_list\", \"endpointUri\":\"/test/action/uri\", \"categoryList\":[\"Cat-test\", \"Cat-2\"], \"supportedModels\":[{\"versionId\" : \"Model-test\"}], \"supportedComponents\":[{\"Id\":\"APP-C\"}]}";
+  private static final String ACTION_3 =
+      "{\"name\":\"Test_Action3_list\", \"endpointUri\":\"/test/action/uri\", \"vendorList\":[\"Vendor-test\", \"Vendor-2\"], \"supportedModels\":[{\"versionId\" : \"Model-2\"}], \"supportedComponents\":[{\"Id\":\"MSO\"}]}";
+  private static final String ACTION_4 =
+      "{\"name\":\"Test_Action4_list\", \"endpointUri\":\"/test/action/uri\", \"categoryList\":[\"Cat-test\", \"Cat-2\"], \"supportedModels\":[{\"versionId\" : \"Model-test\"}], \"supportedComponents\":[{\"Id\":\"APP-C\"}]}";
+  private static final String ACTION_5 =
+      "{\"name\":\"Test_Action5_list\", \"endpointUri\":\"/test/action/uri\", \"vendorList\":[\"Vendor-test\", \"Vendor-2\"], \"supportedModels\":[{\"versionId\" : \"Model-2\"}], \"supportedComponents\":[{\"Id\":\"MSO\"}]}";
+  private static final String ACTION_6 =
+      "{\"name\":\"Test_Action6_name\", \"endpointUri\":\"/test/action/uri\"}";
+  private static final String ARTIFACT_TEST_ACTION =
+      "{\"name\":\"Test_Artifact_Action\", \"endpointUri\":\"/test/artifact/action/uri\", \"vendorList\":[\"Vendor-test\", \"Vendor-2\"], \"supportedModels\":[{\"versionId\" : \"Model-2\"}], \"supportedComponents\":[{\"Id\":\"MSO\"}]}";
+  private static final String ACTION_TEST_DELETE =
+      "{\"name\":\"Test_Delete_Action\", \"endpointUri\":\"/test/delete/action/uri\", \"categoryList\":[\"Cat-Delete-test\"], \"vendorList\":[\"Vendor-Delete\"], \"supportedModels\":[{\"versionId\" : \"Model-Delete\"}], \"supportedComponents\":[{\"Id\":\"MSO-Delete\"}]}";
+  private static final String ACTION_TEST_ARTIFACT_FILE_NAME = "test_artifact_file.txt";
+  private static final String ACTION_TEST_UPDATE_ARTIFACT_FILE_NAME =
+      "test_artifact_update_file.txt";
+  private static ActionManager actionManager = new ActionManagerImpl();
+  private static ActionDao actionDao = ActionDaoFactory.getInstance().createInterface();
+
+  private static NoSqlDb noSqlDb;
+
+  private static String action1Id;
+  private static String action2Id;
+
+  private static String actionUUId;
+  private static Action testArtifactAction;
+  private static String expectedArtifactUUID;
+  private static ActionArtifact actionArtifact;
+  private Action deleteAction;
+
+  private static String testCreate() {
+    Action action1 = createAction(ACTION_1);
+    Action actionCreated = actionManager.createAction(action1, USER1);
+    action1Id = actionCreated.getActionInvariantUuId();
+    actionUUId = actionCreated.getActionUuId();
+    action1.setVersion(VERSION01.toString());
+    ActionEntity loadedAction = actionDao.get(action1.toEntity());
+    assertActionEquals(actionCreated, loadedAction.toDto());
+    return action1Id;
+  }
+
+  private static Action createAction(String requestJSON) {
+    Action action = JsonUtil.json2Object(requestJSON, Action.class);
+    action.setData(requestJSON);
+    return action;
+  }
+
+  private static void assertActionEquals(Action actual, Action expected) {
+    Assert.assertEquals(actual.getActionUuId(), expected.getActionUuId());
+    Assert.assertEquals(actual.getVersion(), expected.getVersion());
+    Assert.assertEquals(actual.getName(), expected.getName());
+    //Assert.assertEquals(actual.getDescription(), expected.getDescription());
+    Assert.assertEquals(actual.getData(), expected.getData());
+    Assert.assertEquals(actual.getActionInvariantUuId(), expected.getActionInvariantUuId());
+    //Assert.assertEquals(actual.getEndpointUri(), expected.getEndpointUri());
+    Assert.assertEquals(actual.getStatus(), expected.getStatus());
+    Assert.assertEquals(actual.getSupportedComponents(), expected.getSupportedComponents());
+    Assert.assertEquals(actual.getSupportedModels(), expected.getSupportedModels());
+  }
+
+  @BeforeTest
+  private void init() {
+    this.noSqlDb = NoSqlDbFactory.getInstance().createInterface();
+    this.noSqlDb.execute("TRUNCATE dox.action;");
+    this.noSqlDb.execute("TRUNCATE dox.ecompcomponent;");
+    this.noSqlDb.execute("TRUNCATE dox.unique_value;");
+    this.noSqlDb.execute("TRUNCATE dox.action_artifact;");
+    this.noSqlDb.execute("insert into dox.ecompcomponent(id, name) values ('COMP-1','MSO');");
+    this.noSqlDb.execute("insert into dox.ecompcomponent(id, name) values ('COMP-2','APP-C');");
+  }
+
+  @Test
+  public void createTest() {
+    action1Id = testCreate();
+  }
+
+  @Test
+  public void testGetByInvIdOnCreate() {
+    String input =
+        "{\"name\":\"Action_2.0\",\"endpointUri\":\"new/action/uri\",\"categoryList\":[\"Cat-1\", \"Cat-2\"],\"displayName\":\"Updated Action\",\"vendorList\":[\"Vendor-1\", \"Vendor-2\"]," +
+            "\"supportedModels\":[{\"versionId\":\"AA56B177-9383-4934-8543-0F91A7A04971\"," +
+            "\"invariantID\":\"CC87B177-9383-4934-8543-0F91A7A07193\", \"name\":\"vABC\"," +
+            "\"version\":\"2.1\",\"vendor\":\"cisco\"}]," +
+            "\"supportedComponents\":[{\"Id\":\"BB47B177-9383-4934-8543-0F91A7A06448\", \"name\":\"appc\"}]}";
+    Action action1 = createAction(input);
+    Action action = actionManager.createAction(action1, USER1);
+    action2Id = action.getActionInvariantUuId();
+    List<Action> actions =
+        actionManager.getActionsByActionInvariantUuId(action.getActionInvariantUuId());
+    Assert.assertEquals(1, actions.size());
+    Assert.assertEquals("0.1", actions.get(0).getVersion());
+  }
+
+  @Test(dependsOnMethods = {"testGetByInvIdOnCreate"})
+  public void testGetByIgnoreCaseName() {
+    List<Action> actions =
+        actionManager.getFilteredActions(ActionConstants.FILTER_TYPE_NAME, "acTion_2.0");
+    List<String> actualVersionList = new ArrayList<String>();
+    List<String> expectedVersionList = new ArrayList<String>();
+    expectedVersionList.add("0.1");
+    for (Action action : actions) {
+      System.out.println("action by testGetByIgnoreCaseName is::::");
+      System.out.println(action.getActionInvariantUuId() + " " + action.getVersion());
+      actualVersionList.add(action.getVersion());
+    }
+    Assert.assertEquals(1, actions.size());
+    Assert.assertEquals(expectedVersionList, actualVersionList);
+  }
+
+  @Test(dependsOnMethods = {"testGetByInvIdOnCreate"})
+  public void testGetByInvIdManyVersionWithoutSubmit() {
+    for (int i = 0; i < 11; i++) {
+      actionManager.checkin(action2Id, USER1);
+      actionManager.checkout(action2Id, USER1);
+    }
+
+    List<Action> actions = actionManager.getActionsByActionInvariantUuId(action2Id);
+    List<String> actualVersionList = new ArrayList<String>();
+    List<String> expectedVersionList = new ArrayList<String>();
+    expectedVersionList.add("0.11");
+    expectedVersionList.add("0.12");
+    System.out.println(actions.size());
+    for (Action action : actions) {
+      System.out.println("testGetByInvIdManyVersionWithoutSubmit is::::");
+      System.out.println(action.getActionInvariantUuId() + " " + action.getVersion());
+      actualVersionList.add(action.getVersion());
+    }
+    Assert.assertEquals(2, actions.size());
+    Assert.assertEquals(expectedVersionList, actualVersionList);
+  }
+
+  @Test(dependsOnMethods = {"testGetByInvIdManyVersionWithoutSubmit"})
+  public void testGetByInvIdManyVersionWithFirstSubmit() {
+    actionManager.checkin(action2Id, USER1);//Checkin 0.12
+    actionManager.submit(action2Id, USER1); //1.0
+    for (int i = 0; i < 11; i++) {
+      actionManager.checkout(action2Id, USER1);
+      actionManager.checkin(action2Id, USER1);
+    }
+
+    List<Action> actions = actionManager.getActionsByActionInvariantUuId(action2Id);
+    List<String> actualVersionList = new ArrayList<String>();
+    List<String> expectedVersionList = new ArrayList<String>();
+    expectedVersionList.add("1.0");
+    expectedVersionList.add("1.11");
+    System.out.println(actions.size());
+    for (Action action : actions) {
+      System.out.println("testGetByInvIdManyVersionWithFirstSubmit is::::");
+      System.out.println(action.getActionInvariantUuId() + " " + action.getVersion());
+      actualVersionList.add(action.getVersion());
+    }
+    Assert.assertEquals(2, actions.size());
+    Assert.assertEquals(expectedVersionList, actualVersionList);
+  }
+
+  @Test(dependsOnMethods = {"testGetByInvIdManyVersionWithFirstSubmit"})
+  public void testGetByInvIdManyVersionWithMultSubmit() {
+    actionManager.submit(action2Id, USER1); //2.0
+    for (int i = 0; i < 11; i++) {
+      actionManager.checkout(action2Id, USER1);
+      actionManager.checkin(action2Id, USER1);
+    }
+    actionManager.checkout(action2Id, USER1); //2.12
+
+    List<Action> actions = actionManager.getActionsByActionInvariantUuId(action2Id);
+    List<String> actualVersionList = new ArrayList<String>();
+    List<String> expectedVersionList = new ArrayList<String>();
+    expectedVersionList.add("1.0");
+    expectedVersionList.add("2.0");
+    expectedVersionList.add("2.11");
+    expectedVersionList.add("2.12");
+    System.out.println(actions.size());
+    for (Action action : actions) {
+      System.out.println("testGetByInvIdManyVersionWithMultSubmit is::::");
+      System.out.println(action.getActionInvariantUuId() + " " + action.getVersion());
+      actualVersionList.add(action.getVersion());
+    }
+    Assert.assertEquals(4, actions.size());
+    Assert.assertEquals(expectedVersionList, actualVersionList);
+  }
+
+  @Test(dependsOnMethods = {"testGetByInvIdManyVersionWithMultSubmit"})
+  public void testGetByInvIdOnName() {
+    for (int i = 0; i < 9; i++) {
+      actionManager.checkin(action2Id, USER1);
+      actionManager.checkout(action2Id, USER1); //2.21
+    }
+
+    List<Action> actions =
+        actionManager.getFilteredActions(ActionConstants.FILTER_TYPE_NAME, "Action_2.0");
+    List<String> actualVersionList = new ArrayList<String>();
+    List<String> expectedVersionList = new ArrayList<String>();
+    expectedVersionList.add("1.0");
+    expectedVersionList.add("2.0");
+    expectedVersionList.add("2.20");
+    expectedVersionList.add("2.21");
+    for (Action action : actions) {
+      System.out.println("action by testGetByInvIdOnName is::::");
+      System.out.println(action.getActionInvariantUuId() + " " + action.getVersion());
+      actualVersionList.add(action.getVersion());
+    }
+    Assert.assertEquals(4, actions.size());
+    Assert.assertEquals(expectedVersionList, actualVersionList);
+  }
+
+  @Test(dependsOnMethods = {"createTest"})
+  public void testCreateWithExistingActionName_negative() {
+    try {
+      actionManager.createAction(createAction(ACTION_1), USER1);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_ENTITY_UNIQUE_VALUE_ERROR);
+    }
+  }
+
+  @Test(groups = "updateTestGroup",
+      dependsOnMethods = {"testCreateWithExistingActionName_negative", "createTest"})
+  public void updateTest() {
+    List<String> newSupportedComponents = new LinkedList<>();
+    newSupportedComponents.add("Updated MSO");
+    newSupportedComponents.add("Updated APPC");
+
+    List<String> newSupportedModels = new LinkedList<>();
+    newSupportedModels.add("Updated Model-1");
+    newSupportedModels.add("Updated Model-2");
+
+    Action action = new Action();
+    action.setActionInvariantUuId(action1Id);
+    action.setVersion(VERSION01.toString());
+    ActionEntity existingActionEntity = actionDao.get(action.toEntity());
+    existingActionEntity
+        .setSupportedComponents(newSupportedComponents);    //Updating Supported components
+    existingActionEntity.setSupportedModels(newSupportedModels);    //Updating supported models
+    //Persisting the updated entity
+    Action updatedAction = actionManager.updateAction(existingActionEntity.toDto(), USER1);
+
+    //Create expected response template
+    ActionEntity expectedActionEntity = new ActionEntity(action1Id, VERSION01);
+    expectedActionEntity.setName(existingActionEntity.getName());
+    expectedActionEntity.setActionUuId(existingActionEntity.getActionUuId());
+    expectedActionEntity.setActionInvariantUuId(existingActionEntity.getActionInvariantUuId());
+    expectedActionEntity.setData(existingActionEntity.getData());
+    expectedActionEntity.setStatus(ActionStatus.Locked.name());
+    expectedActionEntity.setSupportedComponents(newSupportedComponents);
+    expectedActionEntity.setSupportedModels(newSupportedModels);
+    Action expectedAction = updateData(expectedActionEntity.toDto());
+
+    assertActionEquals(updatedAction, expectedAction);
+  }
+
+  @Test(groups = "updateTestGroup", dependsOnMethods = {"updateTest"})
+  public void testUpdateName_negative() {
+    try {
+      Action action = new Action();
+      action.setActionInvariantUuId(action1Id);
+      action.setVersion(VERSION01.toString());
+      ActionEntity existingActionEntity = actionDao.get(action.toEntity());
+      action = existingActionEntity.toDto();
+      action.setName("Update - New Action Name");
+      //Persisting the updated entity
+      actionManager.updateAction(action, USER1);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert
+          .assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_UPDATE_NOT_ALLOWED_CODE_NAME);
+    }
+  }
+
+  @Test(groups = "updateTestGroup", dependsOnMethods = {"updateTest"})
+  public void testUpdateVersion_negative() {
+    try {
+      Action action = new Action();
+      action.setActionInvariantUuId(action1Id);
+      action.setVersion(VERSION01.toString());
+      ActionEntity existingActionEntity = actionDao.get(action.toEntity());
+      action = existingActionEntity.toDto();
+      action.setVersion("0.3");
+      //Persisting the updated entity
+      actionManager.updateAction(action, USER1);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_UPDATE_INVALID_VERSION);
+    }
+  }
+
+  @Test(groups = "updateTestGroup", dependsOnMethods = {"updateTest"})
+  public void testUpdateInvalidVersion_negative() {
+    try {
+      Action action = new Action();
+      action.setActionInvariantUuId(action1Id);
+      action.setVersion(VERSION01.toString());
+      ActionEntity existingActionEntity = actionDao.get(action.toEntity());
+      //existingActionEntity.setDisplayName("Display Name Updated");
+      Action updatedAction = existingActionEntity.toDto();
+      updatedAction.setVersion("invalid_version_format");
+      //Persisting the updated entity
+      actionManager.updateAction(updatedAction, USER1);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_UPDATE_NOT_ALLOWED_CODE);
+    }
+  }
+
+    /*@Test(groups = "updateTestGroup", dependsOnMethods = {"updateTest"})
+    public void testUpdateStatusInvalidEnum_negative() {
+        try {
+            Action action = new Action();
+            action.setActionInvariantUuId(action1Id);
+            action.setVersion(VERSION01.toString());
+            ActionEntity existingActionEntity = actionDao.get(action.toEntity());
+            existingActionEntity.setStatus("invalid_status_string");
+            //Persisting the updated entity
+            actionManager.updateAction(existingActionEntity.toDto(),USER1);
+            Assert.fail();
+        } catch (ActionException e) {
+            Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_UPDATE_NOT_ALLOWED_CODE);
+        } catch (IllegalArgumentException ie){
+            String message = ie.getMessage();
+            boolean result = message.contains("No enum constant");
+            Assert.assertEquals(true, result);
+        }
+    }*/
+
+  @Test(groups = "updateTestGroup", dependsOnMethods = {"updateTest"})
+  public void testUpdateInvariantId_negative() {
+    try {
+      Action action = new Action();
+      action.setActionInvariantUuId(action1Id);
+      action.setVersion(VERSION01.toString());
+      ActionEntity existingActionEntity = actionDao.get(action.toEntity());
+      action = existingActionEntity.toDto();
+      action.setActionInvariantUuId(UUID.randomUUID().toString());
+      //Persisting the updated entity
+      actionManager.updateAction(action, USER1);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST_CODE);
+    }
+  }
+
+  @Test(groups = "updateTestGroup", dependsOnMethods = {"updateTest"})
+  public void testUpdateUniqueId_negative() {
+    try {
+      Action action = new Action();
+      action.setActionInvariantUuId(action1Id);
+      action.setVersion(VERSION01.toString());
+      ActionEntity existingActionEntity = actionDao.get(action.toEntity());
+      //existingActionEntity.setActionUuId(UUID.randomUUID().toString());
+
+      action = existingActionEntity.toDto();
+      action.setActionUuId(UUID.randomUUID().toString());
+      //Persisting the updated entity
+      //actionManager.updateAction(existingActionEntity.toDto(),USER1);
+      actionManager.updateAction(action, USER1);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_UPDATE_NOT_ALLOWED_CODE);
+    }
+  }
+
+  @Test(groups = "updateTestGroup", dependsOnMethods = {"updateTest"})
+  public void testUpdateStatus_negative() {
+    try {
+      Action action = new Action();
+      action.setActionInvariantUuId(action1Id);
+      action.setVersion(VERSION01.toString());
+      ActionEntity existingActionEntity = actionDao.get(action.toEntity());
+      action = existingActionEntity.toDto();
+      action.setStatus(ActionStatus.Final);
+      //Persisting the updated entity
+      actionManager.updateAction(action, USER1);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_UPDATE_NOT_ALLOWED_CODE);
+    } catch (IllegalArgumentException ie) {
+      String message = ie.getMessage();
+      boolean result = message.contains("No enum constant");
+      Assert.assertEquals(true, result);
+    }
+  }
+
+  @Test(groups = "updateTestGroup", dependsOnMethods = {"updateTest"})
+  public void testUpdateOtherUser_negative() {
+    try {
+      Action action = new Action();
+      action.setActionInvariantUuId(action1Id);
+      action.setVersion(VERSION01.toString());
+      ActionEntity existingActionEntity = actionDao.get(action.toEntity());
+      action = existingActionEntity.toDto();
+      //existingActionEntity.setDescription("Testing Update using other user");
+      //Persisting the updated entity
+      actionManager.updateAction(action, USER2);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(),
+          ActionErrorConstants.ACTION_EDIT_ON_ENTITY_LOCKED_BY_OTHER_USER);
+    }
+  }
+
+  @Test(dependsOnMethods = {"createTest"})
+  public void testCheckOutOnCheckOut() {
+    try {
+      actionManager.checkout(action1Id, USER1);
+    } catch (ActionException wae) {
+      Assert
+          .assertEquals(wae.getErrorCode(), ActionErrorConstants.ACTION_CHECKOUT_ON_LOCKED_ENTITY);
+      Assert.assertEquals(wae.getDescription(),
+          "Can not check out versionable entity Action with id " + action1Id +
+              " since it is checked out by other user: " + USER1 + ".");
+    }
+  }
+
+  @Test(dependsOnMethods = {"createTest"})
+  public void testCheckOutOnCheckOutWithOtherUser() {
+    try {
+      actionManager.checkout(action1Id, "invlaiduser");
+    } catch (ActionException wae) {
+      Assert.assertEquals(wae.getErrorCode(),
+          ActionErrorConstants.ACTION_CHECKOUT_ON_LOCKED_ENTITY_OTHER_USER);
+      Assert.assertEquals(wae.getDescription(),
+          "Can not check out versionable entity Action with id " + action1Id +
+              " since it is checked out by other user: " + USER1 + ".");
+    }
+  }
+
+  @Test(dependsOnGroups = {"updateTestGroup"})
+  public void testCheckIn() {
+    Action action = actionManager.checkin(action1Id, USER1);
+    Assert.assertEquals(action.getActionInvariantUuId(), action1Id);
+    Assert.assertEquals(action.getStatus(), ActionStatus.Available);
+    Assert.assertEquals(action.getVersion(), VERSION01.toString());
+    Assert.assertNotNull(action.getActionUuId());
+  }
+
+  @Test(dependsOnMethods = {"testCheckIn"})
+  public void testUpdateOnCheckedInAction_negative() {
+    try {
+      Action action = new Action();
+      action.setActionInvariantUuId(action1Id);
+      action.setVersion(VERSION01.toString());
+      ActionEntity existingActionEntity = actionDao.get(action.toEntity());
+      //existingActionEntity.setDescription("Testing Update On Checked In Action");
+      //Persisting the updated entity
+      actionManager.updateAction(existingActionEntity.toDto(), USER1);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_UPDATE_ON_UNLOCKED_ENTITY);
+    }
+  }
+
+  @Test(dependsOnMethods = {"testUpdateOnCheckedInAction_negative"})
+  public void testSubmit() {
+    Action action = actionManager.submit(action1Id, USER1);
+    ActionEntity loadedAction = actionDao.get(action.toEntity());
+    assertActionEquals(action, loadedAction.toDto());
+  }
+
+  @Test(dependsOnMethods = {"testSubmit"})
+  public void testCheckInWithoutCheckout() {
+    try {
+      actionManager.checkin(action1Id, "invaliduser");
+    } catch (ActionException wae) {
+      Assert
+          .assertEquals(wae.getErrorCode(), ActionErrorConstants.ACTION_CHECKIN_ON_UNLOCKED_ENTITY);
+      Assert.assertEquals(wae.getDescription(),
+          "Can not check in versionable entity Action with id " + action1Id +
+              " since it is not checked out.");
+    }
+  }
+
+  @Test(dependsOnMethods = {"testSubmit"})
+  public void testCheckOut() {
+    final Version VERSION02 = new Version(1, 1);
+    Action action = null;
+    action = actionManager.checkout(action1Id, USER1);
+    ActionEntity loadedAction = actionDao.get(action.toEntity());
+    assertActionEquals(action, loadedAction.toDto());
+  }
+
+  @Test(dependsOnMethods = {"testCheckOut"})
+  public void testCheckInWithOtherUser() {
+    try {
+      actionManager.checkin(action1Id, "invaliduser");
+    } catch (ActionException wae) {
+      Assert.assertEquals(wae.getErrorCode(),
+          ActionErrorConstants.ACTION_CHECKIN_ON_ENTITY_LOCKED_BY_OTHER_USER);
+      Assert.assertEquals(wae.getDescription(),
+          "Can not check in versionable entity Action with id " + action1Id +
+              " since it is checked out by other user: " + USER1 + ".");
+    }
+  }
+
+  @Test(dependsOnMethods = {"testCheckOut"})
+  public void testSubmitOnCheckout() {
+    try {
+      actionManager.submit(action1Id, USER1);
+    } catch (ActionException wae) {
+      Assert.assertEquals(wae.getErrorCode(),
+          ActionErrorConstants.ACTION_SUBMIT_LOCKED_ENTITY_NOT_ALLOWED);
+      Assert.assertEquals(wae.getDescription(), "Versionable entity Action with id " + action1Id +
+          " can not be submitted since it is currently locked by user " + USER1 + ".");
+    }
+  }
+
+  @Test(dependsOnMethods = {"testCheckOut"})
+  public void testUndoCheckout() {
+    final Version VERSION11 = new Version(1, 1);
+    actionManager.undoCheckout(action1Id, USER1);
+    Action action = new Action();
+    action.setActionInvariantUuId(action1Id);
+    action.setVersion(VERSION11.toString());
+    ActionEntity existingActionEntity = actionDao.get(action.toEntity());
+    Assert.assertNull(existingActionEntity);
+  }
+
+  @Test
+  public void testUndoCheckoutOnCreate() {
+    Action action = actionManager.createAction(createAction(ACTION_6), USER1);
+    actionManager.undoCheckout(action.getActionInvariantUuId(), USER1);
+    ActionEntity existingActionEntity = actionDao.get(action.toEntity());
+    Assert.assertNull(existingActionEntity);
+  }
+
+  @Test
+  public void testGetECOMPComponents() {
+    List<EcompComponent> componentList = actionManager.getEcompComponents();
+    List<EcompComponent> expectedComponentList = new ArrayList<>();
+    expectedComponentList.add(new EcompComponent("MSO", "COMP-1"));
+    expectedComponentList.add(new EcompComponent("APP-C", "COMP-2"));
+    for (EcompComponent e : componentList) {
+      boolean res = expectedComponentList.contains(e);
+      Assert.assertEquals(res, true);
+    }
+  }
+
+  @Test
+  public void testgetActionsByActionUUID_Negative() {
+    try {
+      Action action = actionManager.getActionsByActionUuId("");
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST_CODE);
+    }
+  }
+
+  @Test(dependsOnMethods = {"createTest"})
+  public void testgetActionsByActionUUID() {
+    Action action = actionManager.getActionsByActionUuId(actionUUId);
+    Assert.assertNotNull(action.getData());
+  }
+
+  @Test
+  public void testGetByCategory() {
+    createActionVersions(ACTION_2);
+    createActionVersions(ACTION_3);
+    createActionVersions(ACTION_4);
+    createActionVersions(ACTION_5);
+    List<Action> actions =
+        actionManager.getFilteredActions(ActionConstants.FILTER_TYPE_CATEGORY, "CAT-teSt");
+
+    List<String> actualNameVersionList = new ArrayList<String>();
+    List<String> expectedNameVersionList = new ArrayList<String>();
+    expectedNameVersionList.add("Test_Action4_list:2.2");
+    expectedNameVersionList.add("Test_Action4_list:2.0");
+    expectedNameVersionList.add("Test_Action2_list:2.2");
+    expectedNameVersionList.add("Test_Action2_list:2.0");
+    for (Action action : actions) {
+      System.out.println("action by category is::::");
+      System.out.println(action.getName() + " " + action.getVersion());
+      actualNameVersionList.add(action.getName() + ":" + action.getVersion());
+    }
+    Assert.assertEquals(4, actions.size());
+    Assert.assertEquals(expectedNameVersionList, actualNameVersionList);
+  }
+
+  @Test(dependsOnMethods = {"testGetByCategory"})
+  public void testGetByVendor() {
+    List<Action> actions =
+        actionManager.getFilteredActions(ActionConstants.FILTER_TYPE_VENDOR, "VendOr-tESt");
+
+    List<String> actualNameVersionList = new ArrayList<String>();
+    List<String> expectedNameVersionList = new ArrayList<String>();
+    expectedNameVersionList.add("Test_Action5_list:2.2");
+    expectedNameVersionList.add("Test_Action5_list:2.0");
+    expectedNameVersionList.add("Test_Action3_list:2.2");
+    expectedNameVersionList.add("Test_Action3_list:2.0");
+    for (Action action : actions) {
+      System.out.println("action by category is::::");
+      System.out.println(action.getName() + " " + action.getVersion());
+      actualNameVersionList.add(action.getName() + ":" + action.getVersion());
+    }
+    Assert.assertEquals(4, actions.size());
+    Assert.assertEquals(expectedNameVersionList, actualNameVersionList);
+  }
+
+  @Test(dependsOnMethods = {"testGetByCategory"})
+  public void testGetBySupportedModel() {
+    List<Action> actions =
+        actionManager.getFilteredActions(ActionConstants.FILTER_TYPE_MODEL, "MODEL-tEst");
+
+    List<String> actualNameVersionList = new ArrayList<>();
+    List<String> expectedNameVersionList = new ArrayList<>();
+    expectedNameVersionList.add("Test_Action4_list:2.2");
+    expectedNameVersionList.add("Test_Action4_list:2.0");
+    expectedNameVersionList.add("Test_Action2_list:2.2");
+    expectedNameVersionList.add("Test_Action2_list:2.0");
+    for (Action action : actions) {
+      actualNameVersionList.add(action.getName() + ":" + action.getVersion());
+    }
+    Assert.assertEquals(4, actions.size());
+    Assert.assertEquals(expectedNameVersionList, actualNameVersionList);
+  }
+
+  @Test(dependsOnMethods = {"testGetByCategory"})
+  public void testGetBySupportedComponent() {
+    List<Action> actions =
+        actionManager.getFilteredActions(ActionConstants.FILTER_TYPE_ECOMP_COMPONENT, "mso");
+
+    List<String> actualNameVersionList = new ArrayList<>();
+    List<String> expectedNameVersionList = new ArrayList<>();
+    expectedNameVersionList.add("Test_Action5_list:2.2");
+    expectedNameVersionList.add("Test_Action5_list:2.0");
+    expectedNameVersionList.add("Test_Action3_list:2.2");
+    expectedNameVersionList.add("Test_Action3_list:2.0");
+    for (Action action : actions) {
+      actualNameVersionList.add(action.getName() + ":" + action.getVersion());
+    }
+    Assert.assertEquals(4, actions.size());
+    Assert.assertEquals(expectedNameVersionList, actualNameVersionList);
+  }
+
+  @Test(dependsOnMethods = {"testGetByCategory"})
+  public void testGetAllActions() {
+    List<Action> actions =
+        actionManager.getFilteredActions(ActionConstants.FILTER_TYPE_NONE, "MSO");
+
+    List<String> actualNameVersionList = new ArrayList<>();
+    List<String> expectedNameVersionList = new ArrayList<>();
+
+    expectedNameVersionList.add("Test_Action5_list:2.2");
+    expectedNameVersionList.add("Test_Action5_list:2.0");
+    expectedNameVersionList.add("Test_Action3_list:2.2");
+    expectedNameVersionList.add("Test_Action3_list:2.0");
+    expectedNameVersionList.add("Test_Action4_list:2.2");
+    expectedNameVersionList.add("Test_Action4_list:2.0");
+    expectedNameVersionList.add("Test_Action2_list:2.2");
+    expectedNameVersionList.add("Test_Action2_list:2.0");
+    for (Action action : actions) {
+      actualNameVersionList.add(action.getName() + ":" + action.getVersion());
+    }
+    Assert.assertEquals(8, actions.size());
+
+    for (String s : actualNameVersionList) {
+      boolean res = expectedNameVersionList.contains(s);
+      Assert.assertEquals(res, true);
+    }
+  }
+
+  @Test(dependsOnMethods = {"testGetAllActions"})
+  public void testDeleteCheckedOutAction_Negative() {
+    try {
+      initDeleteActionTest();
+      String deleteActionInvariantId = deleteAction.getActionInvariantUuId();
+      actionManager.deleteAction(deleteActionInvariantId, USER1);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_DELETE_ON_LOCKED_ENTITY_CODE);
+      Assert.assertEquals(e.getDescription(), String.format(
+          "Can not delete versionable entity Action with id %s since it is checked out by other user: %s",
+          deleteAction.getActionInvariantUuId(), USER1 + "."));
+    }
+  }
+
+  @Test(dependsOnMethods = {"testDeleteCheckedOutAction_Negative"})
+  public void testDeleteAction() {
+    try {
+      String deleteActionInvariantId = deleteAction.getActionInvariantUuId();
+      actionManager.checkin(deleteActionInvariantId, USER1);
+      actionManager.deleteAction(deleteActionInvariantId, USER1);
+    } catch (ActionException e) {
+      Assert.fail("Delete action test failed with exception : " + e.getDescription());
+    }
+  }
+
+  @Test(dependsOnMethods = {"testDeleteAction"})
+  public void testDeletedActionVersioningOperations_Negative() {
+    String deleteActionInvariantId = deleteAction.getActionInvariantUuId();
+    try {
+      actionManager.checkout(deleteActionInvariantId, USER1);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST_CODE);
+      Assert.assertEquals(e.getDescription(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST);
+    }
+    try {
+      actionManager.checkin(deleteActionInvariantId, USER1);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST_CODE);
+      Assert.assertEquals(e.getDescription(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST);
+    }
+    try {
+      actionManager.submit(deleteActionInvariantId, USER1);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST_CODE);
+      Assert.assertEquals(e.getDescription(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST);
+    }
+    try {
+      actionManager.undoCheckout(deleteActionInvariantId, USER1);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST_CODE);
+      Assert.assertEquals(e.getDescription(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST);
+    }
+    try {
+      actionManager.deleteAction(deleteActionInvariantId, USER1);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST_CODE);
+      Assert.assertEquals(e.getDescription(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST);
+    }
+  }
+
+  @Test(dependsOnMethods = {"testDeleteAction"})
+  public void testCreateActionWithDeletedActionName_Negative() {
+    try {
+      actionManager.createAction(createAction(ACTION_TEST_DELETE), USER1);
+      Assert.fail();
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_ENTITY_UNIQUE_VALUE_ERROR);
+      Assert.assertEquals(e.getDescription(), String
+          .format(ActionErrorConstants.ACTION_ENTITY_UNIQUE_VALUE_MSG, ActionConstants.UniqueValues.ACTION_NAME,
+              deleteAction.getName()));
+    }
+  }
+
+  @Test(dependsOnMethods = {"testDeleteAction"})
+  public void testDeletedActionGetQueries() {
+    String deleteActionInvariantId = deleteAction.getActionInvariantUuId();
+    List<Action> invariantFetchResults =
+        actionManager.getActionsByActionInvariantUuId(deleteActionInvariantId);
+    Assert.assertEquals(invariantFetchResults.size(), 3);
+    for (Action a : invariantFetchResults) {
+      Assert.assertEquals(a.getStatus(), ActionStatus.Deleted);
+    }
+
+    Action actionUUIDFetchResult =
+        actionManager.getActionsByActionUuId(deleteAction.getActionUuId());
+    Assert.assertEquals(actionUUIDFetchResult.getStatus(), ActionStatus.Deleted);
+
+    List<Action> nameFetchResults =
+        actionManager.getFilteredActions(ActionConstants.FILTER_TYPE_NAME, "Test_Delete_Action");
+    Assert.assertEquals(nameFetchResults.size(), 3);
+    for (Action a : nameFetchResults) {
+      Assert.assertEquals(a.getStatus(), ActionStatus.Deleted);
+    }
+
+    List<Action> filteredActions =
+        actionManager.getFilteredActions(ActionConstants.FILTER_TYPE_VENDOR, "Vendor-Delete");
+    Assert.assertEquals(filteredActions.size(), 0);
+    filteredActions =
+        actionManager.getFilteredActions(ActionConstants.FILTER_TYPE_CATEGORY, "Cat-Delete-test");
+    Assert.assertEquals(filteredActions.size(), 0);
+    filteredActions =
+        actionManager.getFilteredActions(ActionConstants.FILTER_TYPE_ECOMP_COMPONENT, "MSO-delete");
+    Assert.assertEquals(filteredActions.size(), 0);
+    filteredActions =
+        actionManager.getFilteredActions(ActionConstants.FILTER_TYPE_MODEL, "Model-Delete");
+    Assert.assertEquals(filteredActions.size(), 0);
+  }
+
+  /***
+   * ACTION ARTIFACT OPERATION TEST CASES
+   ***/
+
+  @Test
+  public void testUploadArtifact() {
+    actionArtifact = new ActionArtifact();
+    File resourceFile = new File(
+        this.getClass().getClassLoader().getResource(ACTION_TEST_ARTIFACT_FILE_NAME).getPath());
+    FileInputStream fileInputStream;
+    //Create payload from the test resource file
+    byte[] payload = new byte[(int) resourceFile.length()];
+    try {
+      fileInputStream = new FileInputStream(resourceFile);
+      fileInputStream.read(payload);
+      fileInputStream.close();
+      actionArtifact.setArtifact(payload);
+      actionArtifact.setArtifactName(ACTION_TEST_ARTIFACT_FILE_NAME);
+      actionArtifact.setArtifactLabel("Test Artifact Label");
+      actionArtifact.setArtifactDescription("Test Artifact Description");
+      actionArtifact.setArtifactProtection(ActionArtifactProtection.readWrite.name());
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+
+    //Create action for artifact upload test
+    testArtifactAction = actionManager.createAction(createAction(ARTIFACT_TEST_ACTION), USER1);
+    //Generate Expected artifact UUID
+    expectedArtifactUUID =
+        generateActionArtifactUUID(testArtifactAction, ACTION_TEST_ARTIFACT_FILE_NAME);
+    //Upload the artifact
+    ActionArtifact response = actionManager
+        .uploadArtifact(actionArtifact, testArtifactAction.getActionInvariantUuId(), USER1);
+    //Validate if generated and the expected artifact UUID is same
+    Assert.assertEquals(expectedArtifactUUID, response.getArtifactUuId());
+    //Fetch the data field of the updated action version
+    Action updatedAction = actionManager.getActionsByActionUuId(testArtifactAction.getActionUuId());
+    List<ActionArtifact> updatedArtifactList = updatedAction.getArtifacts();
+    for (ActionArtifact artifact : updatedArtifactList) {
+      //Validate the artifact metadata
+      Assert.assertEquals(artifact.getArtifactName(), actionArtifact.getArtifactName());
+      Assert.assertEquals(artifact.getArtifactLabel(), actionArtifact.getArtifactLabel());
+      Assert
+          .assertEquals(artifact.getArtifactDescription(), actionArtifact.getArtifactDescription());
+      Assert.assertEquals(artifact.getArtifactProtection(), actionArtifact.getArtifactProtection());
+    }
+  }
+
+  @Test(dependsOnMethods = {"testUploadArtifact"})
+  public void testUploadArtifactInvalidActionInvId_negative() {
+    ActionArtifact testArtifact = new ActionArtifact();
+    testArtifact.setArtifact("testData".getBytes());
+    testArtifact.setArtifactName(ACTION_TEST_ARTIFACT_FILE_NAME);
+    try {
+      actionManager.uploadArtifact(testArtifact, "INVALID_UUID", USER1);
+    } catch (ActionException ae) {
+      Assert.assertEquals(ae.getErrorCode(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST_CODE);
+      Assert.assertEquals(ae.getDescription(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST);
+    }
+  }
+
+  @Test(dependsOnMethods = {"testUploadArtifact"})
+  public void testUploadArtifactSameName_negative() {
+    try {
+      actionManager
+          .uploadArtifact(actionArtifact, testArtifactAction.getActionInvariantUuId(), USER1);
+    } catch (ActionException ae) {
+      Assert.assertEquals(ae.getErrorCode(), ActionErrorConstants.ACTION_ARTIFACT_ALREADY_EXISTS_CODE);
+      Assert.assertEquals(ae.getDescription(), String
+          .format(ActionErrorConstants.ACTION_ARTIFACT_ALREADY_EXISTS, testArtifactAction.getActionInvariantUuId()));
+    }
+  }
+
+  @Test(dependsOnMethods = {"testUploadArtifact"})
+  public void testUploadArtifactCheckedOutOtherUser_negative() {
+    try {
+      actionManager
+          .uploadArtifact(actionArtifact, testArtifactAction.getActionInvariantUuId(), USER2);
+    } catch (ActionException ae) {
+      Assert.assertEquals(ae.getErrorCode(), ActionErrorConstants.ACTION_EDIT_ON_ENTITY_LOCKED_BY_OTHER_USER);
+      Assert.assertEquals(ae.getDescription(),
+          "Versionable entity Action with id " + testArtifactAction.getActionInvariantUuId() +
+              " can not be updated since it is locked by other user " + USER1 + ".");
+    }
+  }
+
+  @Test(dependsOnMethods = {"testUploadArtifact"})
+  public void testUploadArtifactUnlockedAction_negative() {
+    try {
+      testArtifactAction =
+          actionManager.checkin(testArtifactAction.getActionInvariantUuId(), USER1);
+      actionManager
+          .uploadArtifact(actionArtifact, testArtifactAction.getActionInvariantUuId(), USER1);
+    } catch (ActionException ae) {
+      Assert.assertEquals(ae.getErrorCode(), ActionErrorConstants.ACTION_UPDATE_ON_UNLOCKED_ENTITY);
+      Assert.assertEquals(ae.getDescription(), "Can not update versionable entity Action with id " +
+          testArtifactAction.getActionInvariantUuId() + " since it is not checked out.");
+    }
+  }
+
+  @Test(dependsOnMethods = {"testUploadArtifact"})
+  public void testDownloadArtifact() {
+    String actionUUID = testArtifactAction.getActionUuId();
+    ActionArtifact response = actionManager.downloadArtifact(actionUUID, expectedArtifactUUID);
+    Assert.assertEquals(actionArtifact.getArtifactName(), response.getArtifactName());
+    Assert.assertEquals(actionArtifact.getArtifact(), response.getArtifact());
+  }
+
+  @Test(dependsOnMethods = {"testUploadArtifact"})
+  public void testDownloadArtifactNegativeInvalidArtifact() {
+    String actionUUID = testArtifactAction.getActionUuId();
+    String artifactUUID = "negativeArtifact";
+    try {
+      ActionArtifact response = actionManager.downloadArtifact(actionUUID, artifactUUID);
+    } catch (ActionException ae) {
+      Assert.assertEquals(ae.getErrorCode(), ActionErrorConstants.ACTION_ARTIFACT_ENTITY_NOT_EXIST_CODE);
+    }
+
+  }
+
+  @Test
+  public void testDownloadArtifactNegativeInvalidAction() {
+    String actionUUID = "NegativeAction";
+    try {
+      ActionArtifact response = actionManager.downloadArtifact(actionUUID, expectedArtifactUUID);
+    } catch (ActionException ae) {
+      Assert.assertEquals(ae.getErrorCode(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST_CODE);
+    }
+
+  }
+
+  @Test
+  public void testDeleteArtifactInvalidActInvId() {
+    try {
+      actionManager.deleteArtifact("action2Id", "1234", USER1);
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST_CODE);
+      Assert.assertEquals(e.getDescription(), ActionErrorConstants.ACTION_ENTITY_NOT_EXIST);
+    }
+  }
+
+  @Test(dependsOnMethods = {"testGetByInvIdOnCreate"})
+  public void testDeleteArtifactInvalidArtifactUUID() {
+    try {
+      actionManager.deleteArtifact(action2Id, "1234", USER1);
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(),
+          ActionErrorConstants.ACTION_ARTIFACT_ENTITY_NOT_EXIST_CODE);
+      Assert
+          .assertEquals(e.getDescription(), ActionErrorConstants.ACTION_ARTIFACT_ENTITY_NOT_EXIST);
+    }
+  }
+
+  @Test(dependsOnMethods = {"testUploadArtifact"})
+  public void testDeleteReadOnlyArtifact() {
+    ActionArtifact testArtifact = null;
+    String artifactUUID = null;
+    try {
+      testArtifact = new ActionArtifact();
+      testArtifact.setArtifact("testData".getBytes());
+      testArtifact.setArtifactProtection(ActionArtifactProtection.readOnly.name());
+      testArtifact.setArtifactName("TestRO.txt");
+      actionManager
+          .uploadArtifact(testArtifact, testArtifactAction.getActionInvariantUuId(), USER1);
+      artifactUUID = testArtifact.getArtifactUuId();
+      actionManager.deleteArtifact(testArtifactAction.getActionInvariantUuId(),
+          testArtifact.getArtifactUuId(), USER1);
+
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(), ActionErrorConstants.ACTION_ARTIFACT_DELETE_READ_ONLY);
+      Assert.assertEquals(e.getDescription(),
+          ActionErrorConstants.ACTION_ARTIFACT_DELETE_READ_ONLY_MSG);
+    }
+
+    //cleanup uploaded document after test
+    testArtifact = new ActionArtifact();
+    testArtifact.setArtifactUuId(artifactUUID);
+    testArtifact.setArtifactProtection(ActionArtifactProtection.readWrite.name());
+    actionManager.updateArtifact(testArtifact, testArtifactAction.getActionInvariantUuId(), USER1);
+    actionManager
+        .deleteArtifact(testArtifactAction.getActionInvariantUuId(), testArtifact.getArtifactUuId(),
+            USER1);
+  }
+
+  @Test(dependsOnMethods = {"testUploadArtifact"})
+  public void testDeleteArtifactLockedByOtherUser() {
+    try {
+      actionManager.deleteArtifact(testArtifactAction.getActionInvariantUuId(),
+          actionArtifact.getArtifactUuId(), USER2);
+    } catch (ActionException ae) {
+      Assert.assertEquals(ae.getErrorCode(), ActionErrorConstants.ACTION_ARTIFACT_DEL_LOCKED_OTHER_USER_CODE);
+      Assert.assertEquals(ae.getDescription(),
+          String.format(ActionErrorConstants.ACTION_ARTIFACT_DEL_LOCKED_OTHER_USER, USER1));
+    }
+  }
+
+  @Test(dependsOnMethods = {"testUploadArtifactUnlockedAction_negative"})
+  public void testDeleteArtifactOnUnlockedAction() {
+    try {
+      actionManager.deleteArtifact(testArtifactAction.getActionInvariantUuId(),
+          actionArtifact.getArtifactUuId(), USER1);
+    } catch (ActionException ae) {
+      Assert.assertEquals(ae.getErrorCode(), ActionErrorConstants.ACTION_NOT_LOCKED_CODE);
+      Assert.assertEquals(ae.getDescription(), ActionErrorConstants.ACTION_NOT_LOCKED_MSG);
+    }
+  }
+
+  @Test(dependsOnMethods = {"testUploadArtifact"})
+  public void testDeleteArtifact() {
+    try {
+      ActionArtifact testArtifact = new ActionArtifact();
+      testArtifact.setArtifact("testData".getBytes());
+      testArtifact.setArtifactName("Test_ToBeDel.txt");
+      testArtifact.setArtifactProtection(ActionArtifactProtection.readWrite.name());
+      actionManager
+          .uploadArtifact(testArtifact, testArtifactAction.getActionInvariantUuId(), USER1);
+      actionManager.deleteArtifact(testArtifactAction.getActionInvariantUuId(),
+          testArtifact.getArtifactUuId(), USER1);
+      ActionArtifact response = actionManager
+          .downloadArtifact(testArtifactAction.getActionUuId(), testArtifact.getArtifactUuId());
+    } catch (ActionException e) {
+      Assert.assertEquals(e.getErrorCode(),
+          ActionErrorConstants.ACTION_ARTIFACT_ENTITY_NOT_EXIST_CODE);
+      Assert
+          .assertEquals(e.getDescription(), ActionErrorConstants.ACTION_ARTIFACT_ENTITY_NOT_EXIST);
+    }
+  }
+
+  @Test(dependsOnMethods = {"testUploadArtifact"})
+  public void testUpdateArtifact() {
+    ActionArtifact updatedArtifact = new ActionArtifact();
+    File resourceFile = new File(
+        this.getClass().getClassLoader().getResource(ACTION_TEST_UPDATE_ARTIFACT_FILE_NAME)
+            .getPath());
+    FileInputStream fileInputStream;
+    //Create payload from the test resource file
+    byte[] payload = new byte[(int) resourceFile.length()];
+    try {
+      fileInputStream = new FileInputStream(resourceFile);
+      fileInputStream.read(payload);
+      fileInputStream.close();
+      updatedArtifact.setArtifactUuId(
+          generateActionArtifactUUID(testArtifactAction, ACTION_TEST_ARTIFACT_FILE_NAME));
+      updatedArtifact.setArtifact(payload);
+      updatedArtifact.setArtifactName(ACTION_TEST_ARTIFACT_FILE_NAME);
+      updatedArtifact.setArtifactLabel("Test Artifact Update Label");
+      updatedArtifact.setArtifactDescription("Test Artifact Update Description");
+      updatedArtifact.setArtifactProtection(ActionArtifactProtection.readWrite.name());
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+
+    String actionInvarientUUID = testArtifactAction.getActionInvariantUuId();
+    actionManager.updateArtifact(updatedArtifact, actionInvarientUUID, USER1);
+
+    String actionUUID = testArtifactAction.getActionUuId();
+    Action action = actionManager.getActionsByActionUuId(actionUUID);
+    List<ActionArtifact> artifacts = action.getArtifacts();
+    for (ActionArtifact actionArtifact : artifacts) {
+      Assert.assertEquals(actionArtifact.getArtifactName(), updatedArtifact.getArtifactName());
+      Assert.assertEquals(actionArtifact.getArtifactLabel(), updatedArtifact.getArtifactLabel());
+      Assert.assertEquals(actionArtifact.getArtifactDescription(),
+          updatedArtifact.getArtifactDescription());
+      Assert.assertEquals(actionArtifact.getArtifactProtection(),
+          updatedArtifact.getArtifactProtection());
+    }
+  }
+
+  @Test(dependsOnMethods = {"testUploadArtifact"})
+  public void testUpdateArtifact_ArtifactNotPresent_Negative() {
+    ActionArtifact invalidActionArtifact = new ActionArtifact();
+    String artifactUUID = generateActionArtifactUUID(testArtifactAction, "ArtifactNotPresent");
+    invalidActionArtifact.setArtifactUuId(artifactUUID);
+    try {
+      actionManager
+          .updateArtifact(invalidActionArtifact, testArtifactAction.getActionInvariantUuId(),
+              USER1);
+    } catch (ActionException actionException) {
+      Assert.assertEquals(actionException.getDescription(), ActionErrorConstants.ACTION_ARTIFACT_ENTITY_NOT_EXIST);
+    }
+  }
+
+  @Test(dependsOnMethods = {"testUploadArtifact"})
+  public void testUpdateArtifact_ArtifactNameUpdate_Negative() {
+    String invariantUUID = testArtifactAction.getActionInvariantUuId();
+    ActionArtifact artifactToUpdate = new ActionArtifact();
+    artifactToUpdate.setArtifactUuId(actionArtifact.getArtifactUuId());
+    artifactToUpdate.setArtifactName("UpdatingName");
+
+    try {
+      actionManager.updateArtifact(artifactToUpdate, invariantUUID, USER1);
+    } catch (ActionException actionException) {
+      Assert.assertEquals(actionException.getDescription(), ActionErrorConstants.ACTION_ARTIFACT_UPDATE_NAME_INVALID);
+    }
+  }
+
+  @Test(dependsOnMethods = {"testUploadArtifact"})
+  void testUpdateArtifact_CheckoutByOtherUser_Negative() {
+    String invariantUUID = testArtifactAction.getActionInvariantUuId();
+    ActionArtifact artifactToUpdate = new ActionArtifact();
+    artifactToUpdate.setArtifactUuId(actionArtifact.getArtifactUuId());
+    artifactToUpdate.setArtifactLabel("CheckoutbyOtherUser label");
+
+    try {
+      actionManager.updateArtifact(artifactToUpdate, invariantUUID, USER2);
+    } catch (ActionException actionException) {
+      Assert
+          .assertEquals(actionException.getErrorCode(), ActionErrorConstants.ACTION_EDIT_ON_ENTITY_LOCKED_BY_OTHER_USER);
+      Assert.assertEquals(actionException.getDescription(),
+          "Versionable entity Action with id " + invariantUUID +
+              " can not be updated since it is locked by other user " + USER1 + ".");
+    }
+    System.out.println("asdf");
+  }
+
+  @Test(dependsOnMethods = {"testUploadArtifact"})
+  void testUpdateArtifact_ArtifactProtectionReadOnly_CanNotUpdate_Negative() {
+    String invariantUUID = testArtifactAction.getActionInvariantUuId();
+    ActionArtifact artifactToUpdate = new ActionArtifact();
+    artifactToUpdate.setArtifactUuId(actionArtifact.getArtifactUuId());
+    artifactToUpdate.setArtifactProtection(ActionArtifactProtection.readOnly.name());
+    actionManager.updateArtifact(artifactToUpdate, invariantUUID, USER1);
+
+    artifactToUpdate.setArtifactLabel("test label");
+    artifactToUpdate.setArtifactDescription("test description");
+    artifactToUpdate.setArtifactProtection(ActionArtifactProtection.readWrite.name());
+    try {
+      actionManager.updateArtifact(artifactToUpdate, invariantUUID, USER1);
+    } catch (ActionException actionExecption) {
+      Assert.assertEquals(actionExecption.getDescription(), ActionErrorConstants.ACTION_ARTIFACT_UPDATE_READ_ONLY_MSG);
+    }
+  }
+
+  // Function which will take action as input string and create action
+  // After create multiple versions of same action
+  // Final versions :1.0, 2.0
+  // Last minor version :2.2
+  // Candidate version :2.3
+  private void createActionVersions(String input) {
+    Action action1 = createAction(input);
+    Action action = actionManager.createAction(action1, USER1);
+    String Id = action.getActionInvariantUuId();
+
+    actionManager.checkin(Id, USER1);
+    actionManager.submit(Id, USER1); // 1.0
+    actionManager.checkout(Id, USER1);
+    actionManager.checkin(Id, USER1);
+    actionManager.submit(Id, USER1);//2.0
+    actionManager.checkout(Id, USER1);
+    actionManager.checkin(Id, USER1);
+    actionManager.checkout(Id, USER1);
+    actionManager.checkin(Id, USER1); //2.2
+    actionManager.checkout(Id, USER1); //2.3 candidate
+  }
+
+  private Action updateData(Action action) {
+    Map<String, String> dataMap = new LinkedHashMap<>();
+    dataMap.put(ActionConstants.UNIQUE_ID, action.getActionUuId());
+    dataMap.put(ActionConstants.VERSION, action.getVersion());
+    dataMap.put(ActionConstants.INVARIANTUUID, action.getActionInvariantUuId());
+    dataMap.put(ActionConstants.STATUS, ActionStatus.Locked.name());
+
+    String data = action.getData();
+    Map<String, String> currentDataMap = JsonUtil.json2Object(data, LinkedHashMap.class);
+    dataMap.putAll(currentDataMap);
+    data = JsonUtil.object2Json(dataMap);
+    action.setData(data);
+    return action;
+  }
+
+  private void initDeleteActionTest() {
+    deleteAction = actionManager.createAction(createAction(ACTION_TEST_DELETE), USER1);
+    String deleteActionInvariantId = deleteAction.getActionInvariantUuId();
+    actionManager.checkin(deleteActionInvariantId, USER1);
+    actionManager.submit(deleteActionInvariantId, USER1); // 1.0
+    actionManager.checkout(deleteActionInvariantId, USER1);
+    actionManager.checkin(deleteActionInvariantId, USER1);
+    actionManager.submit(deleteActionInvariantId, USER1);//2.0
+    actionManager.checkout(deleteActionInvariantId, USER1);
+  }
+
+  private int getEffectiveVersion(String actionVersion) {
+    Version version = Version.valueOf(actionVersion);
+    return version.getMajor() * 10000 + version.getMinor();
+  }
+
+  private String generateActionArtifactUUID(Action action, String artifactName) {
+    int effectiveVersion = getEffectiveVersion(action.getVersion());
+    //Upper case for maintaining case-insensitive behavior for the artifact names
+    String artifactUUIDString =
+        action.getName().toUpperCase() + effectiveVersion + artifactName.toUpperCase();
+    String generateArtifactUUID =
+        UUID.nameUUIDFromBytes((artifactUUIDString).getBytes()).toString();
+    String artifactUUID = generateArtifactUUID.replace("-", "");
+    return artifactUUID.toUpperCase();
+  }
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/src/test/resources/test_artifact_file.txt b/openecomp-be/backend/openecomp-sdc-action-manager/src/test/resources/test_artifact_file.txt
new file mode 100644
index 0000000..15752ea
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/src/test/resources/test_artifact_file.txt
@@ -0,0 +1,2 @@
+Upload_Artifacts.
+The test verifies uploading an artifact when action status is locked.
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/src/test/resources/test_artifact_update_file.txt b/openecomp-be/backend/openecomp-sdc-action-manager/src/test/resources/test_artifact_update_file.txt
new file mode 100644
index 0000000..940aedf
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/src/test/resources/test_artifact_update_file.txt
@@ -0,0 +1,2 @@
+Update_Artifacts.
+The test verifies updating an artifact when action status is locked.
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/Default suite/Default test.html b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/Default suite/Default test.html
new file mode 100644
index 0000000..d0d707d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/Default suite/Default test.html
@@ -0,0 +1,324 @@
+<html>
+<head>
+<title>TestNG:  Default test</title>
+<link href="../testng.css" rel="stylesheet" type="text/css" />
+<link href="../my-testng.css" rel="stylesheet" type="text/css" />
+
+<style type="text/css">
+.log { display: none;} 
+.stack-trace { display: none;} 
+</style>
+<script type="text/javascript">
+<!--
+function flip(e) {
+  current = e.style.display;
+  if (current == 'block') {
+    e.style.display = 'none';
+    return 0;
+  }
+  else {
+    e.style.display = 'block';
+    return 1;
+  }
+}
+
+function toggleBox(szDivId, elem, msg1, msg2)
+{
+  var res = -1;  if (document.getElementById) {
+    res = flip(document.getElementById(szDivId));
+  }
+  else if (document.all) {
+    // this is the way old msie versions work
+    res = flip(document.all[szDivId]);
+  }
+  if(elem) {
+    if(res == 0) elem.innerHTML = msg1; else elem.innerHTML = msg2;
+  }
+
+}
+
+function toggleAllBoxes() {
+  if (document.getElementsByTagName) {
+    d = document.getElementsByTagName('div');
+    for (i = 0; i < d.length; i++) {
+      if (d[i].className == 'log') {
+        flip(d[i]);
+      }
+    }
+  }
+}
+
+// -->
+</script>
+
+</head>
+<body>
+<h2 align='center'>Default test</h2><table border='1' align="center">
+<tr>
+<td>Tests passed/Failed/Skipped:</td><td>49/0/0</td>
+</tr><tr>
+<td>Started on:</td><td>Thu Sep 08 12:49:36 IST 2016</td>
+</tr>
+<tr><td>Total time:</td><td>6 seconds (6008 ms)</td>
+</tr><tr>
+<td>Included groups:</td><td></td>
+</tr><tr>
+<td>Excluded groups:</td><td></td>
+</tr>
+</table><p/>
+<small><i>(Hover the method name to see the test class name)</i></small><p/>
+<table width='100%' border='1' class='invocation-passed'>
+<tr><td colspan='4' align='center'><b>PASSED TESTS</b></td></tr>
+<tr><td><b>Test method</b></td>
+<td width="30%"><b>Exception</b></td>
+<td width="10%"><b>Time (seconds)</b></td>
+<td><b>Instance</b></td>
+</tr>
+<tr>
+<td title='ActionTest.createTest()'><b>createTest</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testCheckIn()'><b>testCheckIn</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testCheckInWithOtherUser()'><b>testCheckInWithOtherUser</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testCheckInWithoutCheckout()'><b>testCheckInWithoutCheckout</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testCheckOut()'><b>testCheckOut</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testCheckOutOnCheckOut()'><b>testCheckOutOnCheckOut</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testCheckOutOnCheckOutWithOtherUser()'><b>testCheckOutOnCheckOutWithOtherUser</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testCreateWithExistingActionName_negative()'><b>testCreateWithExistingActionName_negative</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testDeleteArtifact()'><b>testDeleteArtifact</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testDeleteArtifactInvalidActInvId()'><b>testDeleteArtifactInvalidActInvId</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testDeleteArtifactInvalidArtifactUUID()'><b>testDeleteArtifactInvalidArtifactUUID</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testDeleteArtifactLockedByOtherUser()'><b>testDeleteArtifactLockedByOtherUser</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testDeleteArtifactOnUnlockedAction()'><b>testDeleteArtifactOnUnlockedAction</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testDeleteReadOnlyArtifact()'><b>testDeleteReadOnlyArtifact</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testDownloadArtifact()'><b>testDownloadArtifact</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testDownloadArtifactNegativeInvalidAction()'><b>testDownloadArtifactNegativeInvalidAction</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testDownloadArtifactNegativeInvalidArtifact()'><b>testDownloadArtifactNegativeInvalidArtifact</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testGetAllActions()'><b>testGetAllActions</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testGetByCategory()'><b>testGetByCategory</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testGetByIgnoreCaseName()'><b>testGetByIgnoreCaseName</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testGetByInvIdManyVersionWithFirstSubmit()'><b>testGetByInvIdManyVersionWithFirstSubmit</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testGetByInvIdManyVersionWithMultSubmit()'><b>testGetByInvIdManyVersionWithMultSubmit</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testGetByInvIdManyVersionWithoutSubmit()'><b>testGetByInvIdManyVersionWithoutSubmit</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testGetByInvIdOnCreate()'><b>testGetByInvIdOnCreate</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testGetByInvIdOnName()'><b>testGetByInvIdOnName</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testGetBySupportedComponent()'><b>testGetBySupportedComponent</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testGetBySupportedModel()'><b>testGetBySupportedModel</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testGetByVendor()'><b>testGetByVendor</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testGetECOMPComponents()'><b>testGetECOMPComponents</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testSubmit()'><b>testSubmit</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testSubmitOnCheckout()'><b>testSubmitOnCheckout</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testUndoCheckout()'><b>testUndoCheckout</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testUpdateArtifact()'><b>testUpdateArtifact</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testUpdateInvalidVersion_negative()'><b>testUpdateInvalidVersion_negative</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testUpdateInvariantId_negative()'><b>testUpdateInvariantId_negative</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testUpdateName_negative()'><b>testUpdateName_negative</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testUpdateOnCheckedInAction_negative()'><b>testUpdateOnCheckedInAction_negative</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testUpdateOtherUser_negative()'><b>testUpdateOtherUser_negative</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testUpdateStatus_negative()'><b>testUpdateStatus_negative</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testUpdateUniqueId_negative()'><b>testUpdateUniqueId_negative</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testUpdateVersion_negative()'><b>testUpdateVersion_negative</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testUploadArtifact()'><b>testUploadArtifact</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testUploadArtifactCheckedOutOtherUser_negative()'><b>testUploadArtifactCheckedOutOtherUser_negative</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testUploadArtifactInvalidActionInvId_negative()'><b>testUploadArtifactInvalidActionInvId_negative</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testUploadArtifactSameName_negative()'><b>testUploadArtifactSameName_negative</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testUploadArtifactUnlockedAction_negative()'><b>testUploadArtifactUnlockedAction_negative</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testgetActionsByActionUUID()'><b>testgetActionsByActionUUID</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.testgetActionsByActionUUID_Negative()'><b>testgetActionsByActionUUID_Negative</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+<tr>
+<td title='ActionTest.updateTest()'><b>updateTest</b><br>Test class: ActionTest</td>
+<td></td>
+<td>0</td>
+<td>ActionTest@5b367418</td></tr>
+</table><p>
+</body>
+</html>
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/Default suite/Default test.xml b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/Default suite/Default test.xml
new file mode 100644
index 0000000..9eb74cf
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/Default suite/Default test.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated by org.testng.reporters.JUnitXMLReporter -->
+<testsuite hostname="SHEETALM02" name="Default test" tests="49" failures="0" timestamp="8 Sep 2016 07:19:42 GMT" time="6.008" errors="0">
+  <testcase name="createTest" time="0.079" classname="ActionTest"/>
+  <testcase name="testDeleteArtifactInvalidActInvId" time="0.003" classname="ActionTest"/>
+  <testcase name="testDownloadArtifactNegativeInvalidAction" time="0.004" classname="ActionTest"/>
+  <testcase name="testGetByCategory" time="0.961" classname="ActionTest"/>
+  <testcase name="testGetByInvIdOnCreate" time="0.03" classname="ActionTest"/>
+  <testcase name="testGetECOMPComponents" time="0.005" classname="ActionTest"/>
+  <testcase name="testUploadArtifact" time="0.078" classname="ActionTest"/>
+  <testcase name="testgetActionsByActionUUID_Negative" time="0.004" classname="ActionTest"/>
+  <testcase name="testCheckOutOnCheckOut" time="0.013" classname="ActionTest"/>
+  <testcase name="testCheckOutOnCheckOutWithOtherUser" time="0.009" classname="ActionTest"/>
+  <testcase name="testCreateWithExistingActionName_negative" time="0.005" classname="ActionTest"/>
+  <testcase name="testGetAllActions" time="0.056" classname="ActionTest"/>
+  <testcase name="testDeleteArtifactInvalidArtifactUUID" time="0.009" classname="ActionTest"/>
+  <testcase name="testGetByIgnoreCaseName" time="0.011" classname="ActionTest"/>
+  <testcase name="testGetByInvIdManyVersionWithoutSubmit" time="0.451" classname="ActionTest"/>
+  <testcase name="testGetBySupportedComponent" time="0.044" classname="ActionTest"/>
+  <testcase name="testGetBySupportedModel" time="0.044" classname="ActionTest"/>
+  <testcase name="testGetByVendor" time="0.041" classname="ActionTest"/>
+  <testcase name="testDeleteArtifact" time="0.039" classname="ActionTest"/>
+  <testcase name="testDeleteArtifactLockedByOtherUser" time="0.005" classname="ActionTest"/>
+  <testcase name="testDeleteReadOnlyArtifact" time="0.059" classname="ActionTest"/>
+  <testcase name="testDownloadArtifact" time="0.008" classname="ActionTest"/>
+  <testcase name="testDownloadArtifactNegativeInvalidArtifact" time="0.005" classname="ActionTest"/>
+  <testcase name="testUpdateArtifact" time="0.022" classname="ActionTest"/>
+  <testcase name="testUploadArtifactCheckedOutOtherUser_negative" time="0.006" classname="ActionTest"/>
+  <testcase name="testUploadArtifactInvalidActionInvId_negative" time="0.006" classname="ActionTest"/>
+  <testcase name="testUploadArtifactSameName_negative" time="0.009" classname="ActionTest"/>
+  <testcase name="testUploadArtifactUnlockedAction_negative" time="0.021" classname="ActionTest"/>
+  <testcase name="testgetActionsByActionUUID" time="0.005" classname="ActionTest"/>
+  <testcase name="testGetByInvIdManyVersionWithFirstSubmit" time="0.515" classname="ActionTest"/>
+  <testcase name="testDeleteArtifactOnUnlockedAction" time="0.005" classname="ActionTest"/>
+  <testcase name="updateTest" time="0.017" classname="ActionTest"/>
+  <testcase name="testGetByInvIdManyVersionWithMultSubmit" time="0.366" classname="ActionTest"/>
+  <testcase name="testUpdateInvalidVersion_negative" time="0.007" classname="ActionTest"/>
+  <testcase name="testUpdateInvariantId_negative" time="0.006" classname="ActionTest"/>
+  <testcase name="testUpdateName_negative" time="0.008" classname="ActionTest"/>
+  <testcase name="testUpdateOtherUser_negative" time="0.007" classname="ActionTest"/>
+  <testcase name="testUpdateStatus_negative" time="0.01" classname="ActionTest"/>
+  <testcase name="testUpdateUniqueId_negative" time="0.009" classname="ActionTest"/>
+  <testcase name="testUpdateVersion_negative" time="0.007" classname="ActionTest"/>
+  <testcase name="testGetByInvIdOnName" time="0.271" classname="ActionTest"/>
+  <testcase name="testCheckIn" time="0.01" classname="ActionTest"/>
+  <testcase name="testUpdateOnCheckedInAction_negative" time="0.007" classname="ActionTest"/>
+  <testcase name="testSubmit" time="0.02" classname="ActionTest"/>
+  <testcase name="testCheckInWithoutCheckout" time="0.004" classname="ActionTest"/>
+  <testcase name="testCheckOut" time="0.021" classname="ActionTest"/>
+  <testcase name="testCheckInWithOtherUser" time="0.005" classname="ActionTest"/>
+  <testcase name="testSubmitOnCheckout" time="0.004" classname="ActionTest"/>
+  <testcase name="testUndoCheckout" time="0.018" classname="ActionTest"/>
+</testsuite> <!-- Default test -->
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/Default suite/testng-failed.xml b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/Default suite/testng-failed.xml
new file mode 100644
index 0000000..5f2650e
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/Default suite/testng-failed.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
+<suite name="Failed suite [Default suite]">
+  <test name="Default test(failed)">
+    <classes>
+      <class name="ActionTest">
+        <methods>
+          <include name="testDeleteReadOnlyArtifact"/>
+          <include name="testUploadArtifact"/>
+          <include name="testUpdateArtifact"/>
+          <include name="init"/>
+        </methods>
+      </class> <!-- ActionTest -->
+    </classes>
+  </test> <!-- Default test(failed) -->
+</suite> <!-- Failed suite [Default suite] -->
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/bullet_point.png b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/bullet_point.png
new file mode 100644
index 0000000..176e6d5
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/bullet_point.png
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/collapseall.gif b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/collapseall.gif
new file mode 100644
index 0000000..a2d80a9
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/collapseall.gif
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/emailable-report.html b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/emailable-report.html
new file mode 100644
index 0000000..299de97
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/emailable-report.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><title>TestNG Report</title><style type="text/css">table {margin-bottom:10px;border-collapse:collapse;empty-cells:show}th,td {border:1px solid #009;padding:.25em .5em}th {vertical-align:bottom}td {vertical-align:top}table a {font-weight:bold}.stripe td {background-color: #E6EBF9}.num {text-align:right}.passedodd td {background-color: #3F3}.passedeven td {background-color: #0A0}.skippedodd td {background-color: #DDD}.skippedeven td {background-color: #CCC}.failedodd td,.attn {background-color: #F33}.failedeven td,.stripe .attn {background-color: #D00}.stacktrace {white-space:pre;font-family:monospace}.totop {font-size:85%;text-align:center;border-bottom:2px solid #000}</style></head><body><table><tr><th>Test</th><th># Passed</th><th># Skipped</th><th># Failed</th><th>Time (ms)</th><th>Included Groups</th><th>Excluded Groups</th></tr><tr><th colspan="7">Default suite</th></tr><tr><td><a href="#t0">Default test</a></td><td class="num">49</td><td class="num">0</td><td class="num">0</td><td class="num">6,008</td><td></td><td></td></tr></table><table><thead><tr><th>Class</th><th>Method</th><th>Start</th><th>Time (ms)</th></tr></thead><tbody><tr><th colspan="4">Default suite</th></tr></tbody><tbody id="t0"><tr><th colspan="4">Default test &#8212; passed</th></tr><tr class="passedeven"><td rowspan="49">ActionTest</td><td><a href="#m0">createTest</a></td><td rowspan="1">1473319179408</td><td rowspan="1">79</td></tr><tr class="passedeven"><td><a href="#m1">testCheckIn</a></td><td rowspan="1">1473319182701</td><td rowspan="1">10</td></tr><tr class="passedeven"><td><a href="#m2">testCheckInWithOtherUser</a></td><td rowspan="1">1473319182766</td><td rowspan="1">5</td></tr><tr class="passedeven"><td><a href="#m3">testCheckInWithoutCheckout</a></td><td rowspan="1">1473319182740</td><td rowspan="1">4</td></tr><tr class="passedeven"><td><a href="#m4">testCheckOut</a></td><td rowspan="1">1473319182745</td><td rowspan="1">21</td></tr><tr class="passedeven"><td><a href="#m5">testCheckOutOnCheckOut</a></td><td rowspan="1">1473319180580</td><td rowspan="1">13</td></tr><tr class="passedeven"><td><a href="#m6">testCheckOutOnCheckOutWithOtherUser</a></td><td rowspan="1">1473319180594</td><td rowspan="1">9</td></tr><tr class="passedeven"><td><a href="#m7">testCreateWithExistingActionName_negative</a></td><td rowspan="1">1473319180603</td><td rowspan="1">5</td></tr><tr class="passedeven"><td><a href="#m8">testDeleteArtifact</a></td><td rowspan="1">1473319181272</td><td rowspan="1">39</td></tr><tr class="passedeven"><td><a href="#m9">testDeleteArtifactInvalidActInvId</a></td><td rowspan="1">1473319179488</td><td rowspan="1">3</td></tr><tr class="passedeven"><td><a href="#m10">testDeleteArtifactInvalidArtifactUUID</a></td><td rowspan="1">1473319180666</td><td rowspan="1">9</td></tr><tr class="passedeven"><td><a href="#m11">testDeleteArtifactLockedByOtherUser</a></td><td rowspan="1">1473319181312</td><td rowspan="1">5</td></tr><tr class="passedeven"><td><a href="#m12">testDeleteArtifactOnUnlockedAction</a></td><td rowspan="1">1473319181982</td><td rowspan="1">5</td></tr><tr class="passedeven"><td><a href="#m13">testDeleteReadOnlyArtifact</a></td><td rowspan="1">1473319181317</td><td rowspan="1">59</td></tr><tr class="passedeven"><td><a href="#m14">testDownloadArtifact</a></td><td rowspan="1">1473319181377</td><td rowspan="1">8</td></tr><tr class="passedeven"><td><a href="#m15">testDownloadArtifactNegativeInvalidAction</a></td><td rowspan="1">1473319179492</td><td rowspan="1">4</td></tr><tr class="passedeven"><td><a href="#m16">testDownloadArtifactNegativeInvalidArtifact</a></td><td rowspan="1">1473319181386</td><td rowspan="1">5</td></tr><tr class="passedeven"><td><a href="#m17">testGetAllActions</a></td><td rowspan="1">1473319180609</td><td rowspan="1">56</td></tr><tr class="passedeven"><td><a href="#m18">testGetByCategory</a></td><td rowspan="1">1473319179497</td><td rowspan="1">961</td></tr><tr class="passedeven"><td><a href="#m19">testGetByIgnoreCaseName</a></td><td rowspan="1">1473319180676</td><td rowspan="1">11</td></tr><tr class="passedeven"><td><a href="#m20">testGetByInvIdManyVersionWithFirstSubmit</a></td><td rowspan="1">1473319181466</td><td rowspan="1">515</td></tr><tr class="passedeven"><td><a href="#m21">testGetByInvIdManyVersionWithMultSubmit</a></td><td rowspan="1">1473319182005</td><td rowspan="1">366</td></tr><tr class="passedeven"><td><a href="#m22">testGetByInvIdManyVersionWithoutSubmit</a></td><td rowspan="1">1473319180688</td><td rowspan="1">451</td></tr><tr class="passedeven"><td><a href="#m23">testGetByInvIdOnCreate</a></td><td rowspan="1">1473319180459</td><td rowspan="1">30</td></tr><tr class="passedeven"><td><a href="#m24">testGetByInvIdOnName</a></td><td rowspan="1">1473319182430</td><td rowspan="1">271</td></tr><tr class="passedeven"><td><a href="#m25">testGetBySupportedComponent</a></td><td rowspan="1">1473319181140</td><td rowspan="1">44</td></tr><tr class="passedeven"><td><a href="#m26">testGetBySupportedModel</a></td><td rowspan="1">1473319181185</td><td rowspan="1">44</td></tr><tr class="passedeven"><td><a href="#m27">testGetByVendor</a></td><td rowspan="1">1473319181230</td><td rowspan="1">41</td></tr><tr class="passedeven"><td><a href="#m28">testGetECOMPComponents</a></td><td rowspan="1">1473319180490</td><td rowspan="1">5</td></tr><tr class="passedeven"><td><a href="#m29">testSubmit</a></td><td rowspan="1">1473319182719</td><td rowspan="1">20</td></tr><tr class="passedeven"><td><a href="#m30">testSubmitOnCheckout</a></td><td rowspan="1">1473319182772</td><td rowspan="1">4</td></tr><tr class="passedeven"><td><a href="#m31">testUndoCheckout</a></td><td rowspan="1">1473319182777</td><td rowspan="1">18</td></tr><tr class="passedeven"><td><a href="#m32">testUpdateArtifact</a></td><td rowspan="1">1473319181392</td><td rowspan="1">22</td></tr><tr class="passedeven"><td><a href="#m33">testUpdateInvalidVersion_negative</a></td><td rowspan="1">1473319182371</td><td rowspan="1">7</td></tr><tr class="passedeven"><td><a href="#m34">testUpdateInvariantId_negative</a></td><td rowspan="1">1473319182378</td><td rowspan="1">6</td></tr><tr class="passedeven"><td><a href="#m35">testUpdateName_negative</a></td><td rowspan="1">1473319182385</td><td rowspan="1">8</td></tr><tr class="passedeven"><td><a href="#m36">testUpdateOnCheckedInAction_negative</a></td><td rowspan="1">1473319182712</td><td rowspan="1">7</td></tr><tr class="passedeven"><td><a href="#m37">testUpdateOtherUser_negative</a></td><td rowspan="1">1473319182394</td><td rowspan="1">7</td></tr><tr class="passedeven"><td><a href="#m38">testUpdateStatus_negative</a></td><td rowspan="1">1473319182402</td><td rowspan="1">10</td></tr><tr class="passedeven"><td><a href="#m39">testUpdateUniqueId_negative</a></td><td rowspan="1">1473319182413</td><td rowspan="1">9</td></tr><tr class="passedeven"><td><a href="#m40">testUpdateVersion_negative</a></td><td rowspan="1">1473319182422</td><td rowspan="1">7</td></tr><tr class="passedeven"><td><a href="#m41">testUploadArtifact</a></td><td rowspan="1">1473319180496</td><td rowspan="1">78</td></tr><tr class="passedeven"><td><a href="#m42">testUploadArtifactCheckedOutOtherUser_negative</a></td><td rowspan="1">1473319181415</td><td rowspan="1">6</td></tr><tr class="passedeven"><td><a href="#m43">testUploadArtifactInvalidActionInvId_negative</a></td><td rowspan="1">1473319181422</td><td rowspan="1">6</td></tr><tr class="passedeven"><td><a href="#m44">testUploadArtifactSameName_negative</a></td><td rowspan="1">1473319181428</td><td rowspan="1">9</td></tr><tr class="passedeven"><td><a href="#m45">testUploadArtifactUnlockedAction_negative</a></td><td rowspan="1">1473319181438</td><td rowspan="1">21</td></tr><tr class="passedeven"><td><a href="#m46">testgetActionsByActionUUID</a></td><td rowspan="1">1473319181460</td><td rowspan="1">5</td></tr><tr class="passedeven"><td><a href="#m47">testgetActionsByActionUUID_Negative</a></td><td rowspan="1">1473319180574</td><td rowspan="1">4</td></tr><tr class="passedeven"><td><a href="#m48">updateTest</a></td><td rowspan="1">1473319181987</td><td rowspan="1">17</td></tr></tbody></table><h2>Default test</h2><h3 id="m0">ActionTest#createTest</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m1">ActionTest#testCheckIn</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m2">ActionTest#testCheckInWithOtherUser</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m3">ActionTest#testCheckInWithoutCheckout</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m4">ActionTest#testCheckOut</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m5">ActionTest#testCheckOutOnCheckOut</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m6">ActionTest#testCheckOutOnCheckOutWithOtherUser</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m7">ActionTest#testCreateWithExistingActionName_negative</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m8">ActionTest#testDeleteArtifact</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m9">ActionTest#testDeleteArtifactInvalidActInvId</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m10">ActionTest#testDeleteArtifactInvalidArtifactUUID</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m11">ActionTest#testDeleteArtifactLockedByOtherUser</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m12">ActionTest#testDeleteArtifactOnUnlockedAction</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m13">ActionTest#testDeleteReadOnlyArtifact</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m14">ActionTest#testDownloadArtifact</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m15">ActionTest#testDownloadArtifactNegativeInvalidAction</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m16">ActionTest#testDownloadArtifactNegativeInvalidArtifact</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m17">ActionTest#testGetAllActions</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m18">ActionTest#testGetByCategory</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m19">ActionTest#testGetByIgnoreCaseName</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m20">ActionTest#testGetByInvIdManyVersionWithFirstSubmit</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m21">ActionTest#testGetByInvIdManyVersionWithMultSubmit</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m22">ActionTest#testGetByInvIdManyVersionWithoutSubmit</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m23">ActionTest#testGetByInvIdOnCreate</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m24">ActionTest#testGetByInvIdOnName</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m25">ActionTest#testGetBySupportedComponent</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m26">ActionTest#testGetBySupportedModel</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m27">ActionTest#testGetByVendor</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m28">ActionTest#testGetECOMPComponents</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m29">ActionTest#testSubmit</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m30">ActionTest#testSubmitOnCheckout</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m31">ActionTest#testUndoCheckout</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m32">ActionTest#testUpdateArtifact</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m33">ActionTest#testUpdateInvalidVersion_negative</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m34">ActionTest#testUpdateInvariantId_negative</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m35">ActionTest#testUpdateName_negative</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m36">ActionTest#testUpdateOnCheckedInAction_negative</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m37">ActionTest#testUpdateOtherUser_negative</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m38">ActionTest#testUpdateStatus_negative</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m39">ActionTest#testUpdateUniqueId_negative</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m40">ActionTest#testUpdateVersion_negative</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m41">ActionTest#testUploadArtifact</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m42">ActionTest#testUploadArtifactCheckedOutOtherUser_negative</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m43">ActionTest#testUploadArtifactInvalidActionInvId_negative</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m44">ActionTest#testUploadArtifactSameName_negative</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m45">ActionTest#testUploadArtifactUnlockedAction_negative</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m46">ActionTest#testgetActionsByActionUUID</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m47">ActionTest#testgetActionsByActionUUID_Negative</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p><h3 id="m48">ActionTest#updateTest</h3><table class="result"></table><p class="totop"><a href="#summary">back to summary</a></p></body></html>
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/failed.png b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/failed.png
new file mode 100644
index 0000000..c117be5
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/failed.png
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/index.html b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/index.html
new file mode 100644
index 0000000..a9227f6
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/index.html
@@ -0,0 +1,1231 @@
+<!DOCTYPE html>
+
+<html>
+  <head>
+  <title>TestNG reports</title>
+
+    <link type="text/css" href="testng-reports.css" rel="stylesheet" />  
+    <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
+    <script type="text/javascript" src="testng-reports.js"></script>
+    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
+    <script type='text/javascript'>
+      google.load('visualization', '1', {packages:['table']});
+      google.setOnLoadCallback(drawTable);
+      var suiteTableInitFunctions = new Array();
+      var suiteTableData = new Array();
+    </script>
+    <!--
+      <script type="text/javascript" src="jquery-ui/js/jquery-ui-1.8.16.custom.min.js"></script>
+     -->
+  </head>
+
+  <body>
+    <div class="top-banner-root">
+      <span class="top-banner-title-font">Test results</span>
+      <br/>
+      <span class="top-banner-font-1">1 suite</span>
+    </div> <!-- top-banner-root -->
+    <div class="navigator-root">
+      <div class="navigator-suite-header">
+        <span>All suites</span>
+        <a href="#" class="collapse-all-link" title="Collapse/expand all the suites">
+          <img class="collapse-all-icon" src="collapseall.gif">
+          </img> <!-- collapse-all-icon -->
+        </a> <!-- collapse-all-link -->
+      </div> <!-- navigator-suite-header -->
+      <div class="suite">
+        <div class="rounded-window">
+          <div class="suite-header light-rounded-window-top">
+            <a href="#" class="navigator-link" panel-name="suite-Default_suite">
+              <span class="suite-name border-passed">Default suite</span>
+            </a> <!-- navigator-link -->
+          </div> <!-- suite-header light-rounded-window-top -->
+          <div class="navigator-suite-content">
+            <div class="suite-section-title">
+              <span>Info</span>
+            </div> <!-- suite-section-title -->
+            <div class="suite-section-content">
+              <ul>
+                <li>
+                  <a href="#" class="navigator-link " panel-name="test-xml-Default_suite">
+                    <span>C:\Users\sheetalm\AppData\Local\Temp\testng-eclipse--1963739526\testng-customsuite.xml</span>
+                  </a> <!-- navigator-link  -->
+                </li>
+                <li>
+                  <a href="#" class="navigator-link " panel-name="testlist-Default_suite">
+                    <span class="test-stats">1 test</span>
+                  </a> <!-- navigator-link  -->
+                </li>
+                <li>
+                  <a href="#" class="navigator-link " panel-name="group-Default_suite">
+                    <span>1 group</span>
+                  </a> <!-- navigator-link  -->
+                </li>
+                <li>
+                  <a href="#" class="navigator-link " panel-name="times-Default_suite">
+                    <span>Times</span>
+                  </a> <!-- navigator-link  -->
+                </li>
+                <li>
+                  <a href="#" class="navigator-link " panel-name="reporter-Default_suite">
+                    <span>Reporter output</span>
+                  </a> <!-- navigator-link  -->
+                </li>
+                <li>
+                  <a href="#" class="navigator-link " panel-name="ignored-methods-Default_suite">
+                    <span>Ignored methods</span>
+                  </a> <!-- navigator-link  -->
+                </li>
+                <li>
+                  <a href="#" class="navigator-link " panel-name="chronological-Default_suite">
+                    <span>Chronological view</span>
+                  </a> <!-- navigator-link  -->
+                </li>
+              </ul>
+            </div> <!-- suite-section-content -->
+            <div class="result-section">
+              <div class="suite-section-title">
+                <span>Results</span>
+              </div> <!-- suite-section-title -->
+              <div class="suite-section-content">
+                <ul>
+                  <li>
+                    <span class="method-stats">49 methods,   49 passed</span>
+                  </li>
+                  <li>
+                    <span class="method-list-title passed">Passed methods</span>
+                    <span class="show-or-hide-methods passed">
+                      <a href="#" panel-name="suite-Default_suite" class="hide-methods passed suite-Default_suite"> (hide)</a> <!-- hide-methods passed suite-Default_suite -->
+                      <a href="#" panel-name="suite-Default_suite" class="show-methods passed suite-Default_suite"> (show)</a> <!-- show-methods passed suite-Default_suite -->
+                    </span>
+                    <div class="method-list-content passed suite-Default_suite">
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="createTest">createTest</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testCheckIn">testCheckIn</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testCheckInWithOtherUser">testCheckInWithOtherUser</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testCheckInWithoutCheckout">testCheckInWithoutCheckout</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testCheckOut">testCheckOut</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testCheckOutOnCheckOut">testCheckOutOnCheckOut</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testCheckOutOnCheckOutWithOtherUser">testCheckOutOnCheckOutWithOtherUser</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testCreateWithExistingActionName_negative">testCreateWithExistingActionName_negative</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testDeleteArtifact">testDeleteArtifact</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testDeleteArtifactInvalidActInvId">testDeleteArtifactInvalidActInvId</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testDeleteArtifactInvalidArtifactUUID">testDeleteArtifactInvalidArtifactUUID</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testDeleteArtifactLockedByOtherUser">testDeleteArtifactLockedByOtherUser</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testDeleteArtifactOnUnlockedAction">testDeleteArtifactOnUnlockedAction</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testDeleteReadOnlyArtifact">testDeleteReadOnlyArtifact</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testDownloadArtifact">testDownloadArtifact</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testDownloadArtifactNegativeInvalidAction">testDownloadArtifactNegativeInvalidAction</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testDownloadArtifactNegativeInvalidArtifact">testDownloadArtifactNegativeInvalidArtifact</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testGetAllActions">testGetAllActions</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testGetByCategory">testGetByCategory</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testGetByIgnoreCaseName">testGetByIgnoreCaseName</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testGetByInvIdManyVersionWithFirstSubmit">testGetByInvIdManyVersionWithFirstSubmit</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testGetByInvIdManyVersionWithMultSubmit">testGetByInvIdManyVersionWithMultSubmit</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testGetByInvIdManyVersionWithoutSubmit">testGetByInvIdManyVersionWithoutSubmit</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testGetByInvIdOnCreate">testGetByInvIdOnCreate</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testGetByInvIdOnName">testGetByInvIdOnName</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testGetBySupportedComponent">testGetBySupportedComponent</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testGetBySupportedModel">testGetBySupportedModel</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testGetByVendor">testGetByVendor</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testGetECOMPComponents">testGetECOMPComponents</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testSubmit">testSubmit</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testSubmitOnCheckout">testSubmitOnCheckout</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testUndoCheckout">testUndoCheckout</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testUpdateArtifact">testUpdateArtifact</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testUpdateInvalidVersion_negative">testUpdateInvalidVersion_negative</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testUpdateInvariantId_negative">testUpdateInvariantId_negative</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testUpdateName_negative">testUpdateName_negative</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testUpdateOnCheckedInAction_negative">testUpdateOnCheckedInAction_negative</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testUpdateOtherUser_negative">testUpdateOtherUser_negative</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testUpdateStatus_negative">testUpdateStatus_negative</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testUpdateUniqueId_negative">testUpdateUniqueId_negative</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testUpdateVersion_negative">testUpdateVersion_negative</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testUploadArtifact">testUploadArtifact</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testUploadArtifactCheckedOutOtherUser_negative">testUploadArtifactCheckedOutOtherUser_negative</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testUploadArtifactInvalidActionInvId_negative">testUploadArtifactInvalidActionInvId_negative</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testUploadArtifactSameName_negative">testUploadArtifactSameName_negative</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testUploadArtifactUnlockedAction_negative">testUploadArtifactUnlockedAction_negative</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testgetActionsByActionUUID">testgetActionsByActionUUID</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="testgetActionsByActionUUID_Negative">testgetActionsByActionUUID_Negative</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                      <span>
+                        <img width="3%" src="passed.png"/>
+                        <a href="#" class="method navigator-link" panel-name="suite-Default_suite" title="ActionTest" hash-for-method="updateTest">updateTest</a> <!-- method navigator-link -->
+                      </span>
+                      <br/>
+                    </div> <!-- method-list-content passed suite-Default_suite -->
+                  </li>
+                </ul>
+              </div> <!-- suite-section-content -->
+            </div> <!-- result-section -->
+          </div> <!-- navigator-suite-content -->
+        </div> <!-- rounded-window -->
+      </div> <!-- suite -->
+    </div> <!-- navigator-root -->
+    <div class="wrapper">
+      <div class="main-panel-root">
+        <div panel-name="suite-Default_suite" class="panel Default_suite">
+          <div class="suite-Default_suite-class-passed">
+            <div class="main-panel-header rounded-window-top">
+              <img src="passed.png"/>
+              <span class="class-name">ActionTest</span>
+            </div> <!-- main-panel-header rounded-window-top -->
+            <div class="main-panel-content rounded-window-bottom">
+              <div class="method">
+                <div class="method-content">
+                  <a name="createTest">
+                  </a> <!-- createTest -->
+                  <span class="method-name">createTest</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testCheckIn">
+                  </a> <!-- testCheckIn -->
+                  <span class="method-name">testCheckIn</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testCheckInWithOtherUser">
+                  </a> <!-- testCheckInWithOtherUser -->
+                  <span class="method-name">testCheckInWithOtherUser</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testCheckInWithoutCheckout">
+                  </a> <!-- testCheckInWithoutCheckout -->
+                  <span class="method-name">testCheckInWithoutCheckout</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testCheckOut">
+                  </a> <!-- testCheckOut -->
+                  <span class="method-name">testCheckOut</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testCheckOutOnCheckOut">
+                  </a> <!-- testCheckOutOnCheckOut -->
+                  <span class="method-name">testCheckOutOnCheckOut</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testCheckOutOnCheckOutWithOtherUser">
+                  </a> <!-- testCheckOutOnCheckOutWithOtherUser -->
+                  <span class="method-name">testCheckOutOnCheckOutWithOtherUser</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testCreateWithExistingActionName_negative">
+                  </a> <!-- testCreateWithExistingActionName_negative -->
+                  <span class="method-name">testCreateWithExistingActionName_negative</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testDeleteArtifact">
+                  </a> <!-- testDeleteArtifact -->
+                  <span class="method-name">testDeleteArtifact</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testDeleteArtifactInvalidActInvId">
+                  </a> <!-- testDeleteArtifactInvalidActInvId -->
+                  <span class="method-name">testDeleteArtifactInvalidActInvId</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testDeleteArtifactInvalidArtifactUUID">
+                  </a> <!-- testDeleteArtifactInvalidArtifactUUID -->
+                  <span class="method-name">testDeleteArtifactInvalidArtifactUUID</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testDeleteArtifactLockedByOtherUser">
+                  </a> <!-- testDeleteArtifactLockedByOtherUser -->
+                  <span class="method-name">testDeleteArtifactLockedByOtherUser</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testDeleteArtifactOnUnlockedAction">
+                  </a> <!-- testDeleteArtifactOnUnlockedAction -->
+                  <span class="method-name">testDeleteArtifactOnUnlockedAction</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testDeleteReadOnlyArtifact">
+                  </a> <!-- testDeleteReadOnlyArtifact -->
+                  <span class="method-name">testDeleteReadOnlyArtifact</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testDownloadArtifact">
+                  </a> <!-- testDownloadArtifact -->
+                  <span class="method-name">testDownloadArtifact</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testDownloadArtifactNegativeInvalidAction">
+                  </a> <!-- testDownloadArtifactNegativeInvalidAction -->
+                  <span class="method-name">testDownloadArtifactNegativeInvalidAction</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testDownloadArtifactNegativeInvalidArtifact">
+                  </a> <!-- testDownloadArtifactNegativeInvalidArtifact -->
+                  <span class="method-name">testDownloadArtifactNegativeInvalidArtifact</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testGetAllActions">
+                  </a> <!-- testGetAllActions -->
+                  <span class="method-name">testGetAllActions</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testGetByCategory">
+                  </a> <!-- testGetByCategory -->
+                  <span class="method-name">testGetByCategory</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testGetByIgnoreCaseName">
+                  </a> <!-- testGetByIgnoreCaseName -->
+                  <span class="method-name">testGetByIgnoreCaseName</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testGetByInvIdManyVersionWithFirstSubmit">
+                  </a> <!-- testGetByInvIdManyVersionWithFirstSubmit -->
+                  <span class="method-name">testGetByInvIdManyVersionWithFirstSubmit</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testGetByInvIdManyVersionWithMultSubmit">
+                  </a> <!-- testGetByInvIdManyVersionWithMultSubmit -->
+                  <span class="method-name">testGetByInvIdManyVersionWithMultSubmit</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testGetByInvIdManyVersionWithoutSubmit">
+                  </a> <!-- testGetByInvIdManyVersionWithoutSubmit -->
+                  <span class="method-name">testGetByInvIdManyVersionWithoutSubmit</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testGetByInvIdOnCreate">
+                  </a> <!-- testGetByInvIdOnCreate -->
+                  <span class="method-name">testGetByInvIdOnCreate</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testGetByInvIdOnName">
+                  </a> <!-- testGetByInvIdOnName -->
+                  <span class="method-name">testGetByInvIdOnName</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testGetBySupportedComponent">
+                  </a> <!-- testGetBySupportedComponent -->
+                  <span class="method-name">testGetBySupportedComponent</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testGetBySupportedModel">
+                  </a> <!-- testGetBySupportedModel -->
+                  <span class="method-name">testGetBySupportedModel</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testGetByVendor">
+                  </a> <!-- testGetByVendor -->
+                  <span class="method-name">testGetByVendor</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testGetECOMPComponents">
+                  </a> <!-- testGetECOMPComponents -->
+                  <span class="method-name">testGetECOMPComponents</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testSubmit">
+                  </a> <!-- testSubmit -->
+                  <span class="method-name">testSubmit</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testSubmitOnCheckout">
+                  </a> <!-- testSubmitOnCheckout -->
+                  <span class="method-name">testSubmitOnCheckout</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testUndoCheckout">
+                  </a> <!-- testUndoCheckout -->
+                  <span class="method-name">testUndoCheckout</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testUpdateArtifact">
+                  </a> <!-- testUpdateArtifact -->
+                  <span class="method-name">testUpdateArtifact</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testUpdateInvalidVersion_negative">
+                  </a> <!-- testUpdateInvalidVersion_negative -->
+                  <span class="method-name">testUpdateInvalidVersion_negative</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testUpdateInvariantId_negative">
+                  </a> <!-- testUpdateInvariantId_negative -->
+                  <span class="method-name">testUpdateInvariantId_negative</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testUpdateName_negative">
+                  </a> <!-- testUpdateName_negative -->
+                  <span class="method-name">testUpdateName_negative</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testUpdateOnCheckedInAction_negative">
+                  </a> <!-- testUpdateOnCheckedInAction_negative -->
+                  <span class="method-name">testUpdateOnCheckedInAction_negative</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testUpdateOtherUser_negative">
+                  </a> <!-- testUpdateOtherUser_negative -->
+                  <span class="method-name">testUpdateOtherUser_negative</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testUpdateStatus_negative">
+                  </a> <!-- testUpdateStatus_negative -->
+                  <span class="method-name">testUpdateStatus_negative</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testUpdateUniqueId_negative">
+                  </a> <!-- testUpdateUniqueId_negative -->
+                  <span class="method-name">testUpdateUniqueId_negative</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testUpdateVersion_negative">
+                  </a> <!-- testUpdateVersion_negative -->
+                  <span class="method-name">testUpdateVersion_negative</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testUploadArtifact">
+                  </a> <!-- testUploadArtifact -->
+                  <span class="method-name">testUploadArtifact</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testUploadArtifactCheckedOutOtherUser_negative">
+                  </a> <!-- testUploadArtifactCheckedOutOtherUser_negative -->
+                  <span class="method-name">testUploadArtifactCheckedOutOtherUser_negative</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testUploadArtifactInvalidActionInvId_negative">
+                  </a> <!-- testUploadArtifactInvalidActionInvId_negative -->
+                  <span class="method-name">testUploadArtifactInvalidActionInvId_negative</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testUploadArtifactSameName_negative">
+                  </a> <!-- testUploadArtifactSameName_negative -->
+                  <span class="method-name">testUploadArtifactSameName_negative</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testUploadArtifactUnlockedAction_negative">
+                  </a> <!-- testUploadArtifactUnlockedAction_negative -->
+                  <span class="method-name">testUploadArtifactUnlockedAction_negative</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testgetActionsByActionUUID">
+                  </a> <!-- testgetActionsByActionUUID -->
+                  <span class="method-name">testgetActionsByActionUUID</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="testgetActionsByActionUUID_Negative">
+                  </a> <!-- testgetActionsByActionUUID_Negative -->
+                  <span class="method-name">testgetActionsByActionUUID_Negative</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+              <div class="method">
+                <div class="method-content">
+                  <a name="updateTest">
+                  </a> <!-- updateTest -->
+                  <span class="method-name">updateTest</span>
+                </div> <!-- method-content -->
+              </div> <!-- method -->
+            </div> <!-- main-panel-content rounded-window-bottom -->
+          </div> <!-- suite-Default_suite-class-passed -->
+        </div> <!-- panel Default_suite -->
+        <div panel-name="test-xml-Default_suite" class="panel">
+          <div class="main-panel-header rounded-window-top">
+            <span class="header-content">C:\Users\sheetalm\AppData\Local\Temp\testng-eclipse--1963739526\testng-customsuite.xml</span>
+          </div> <!-- main-panel-header rounded-window-top -->
+          <div class="main-panel-content rounded-window-bottom">
+            <pre>
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;!DOCTYPE suite SYSTEM &quot;http://testng.org/testng-1.0.dtd&quot;&gt;
+&lt;suite name=&quot;Default suite&quot;&gt;
+  &lt;test verbose=&quot;2&quot; name=&quot;Default test&quot;&gt;
+    &lt;classes&gt;
+      &lt;class name=&quot;ActionTest&quot;/&gt;
+    &lt;/classes&gt;
+  &lt;/test&gt; &lt;!-- Default test --&gt;
+&lt;/suite&gt; &lt;!-- Default suite --&gt;
+            </pre>
+          </div> <!-- main-panel-content rounded-window-bottom -->
+        </div> <!-- panel -->
+        <div panel-name="testlist-Default_suite" class="panel">
+          <div class="main-panel-header rounded-window-top">
+            <span class="header-content">Tests for Default suite</span>
+          </div> <!-- main-panel-header rounded-window-top -->
+          <div class="main-panel-content rounded-window-bottom">
+            <ul>
+              <li>
+                <span class="test-name">Default test (1 class)</span>
+              </li>
+            </ul>
+          </div> <!-- main-panel-content rounded-window-bottom -->
+        </div> <!-- panel -->
+        <div panel-name="group-Default_suite" class="panel">
+          <div class="main-panel-header rounded-window-top">
+            <span class="header-content">Groups for Default suite</span>
+          </div> <!-- main-panel-header rounded-window-top -->
+          <div class="main-panel-content rounded-window-bottom">
+            <div class="test-group">
+              <span class="test-group-name">updateTestGroup</span>
+              <br/>
+              <div class="method-in-group">
+                <span class="method-in-group-name">testUpdateInvalidVersion_negative</span>
+                <br/>
+              </div> <!-- method-in-group -->
+              <div class="method-in-group">
+                <span class="method-in-group-name">testUpdateInvariantId_negative</span>
+                <br/>
+              </div> <!-- method-in-group -->
+              <div class="method-in-group">
+                <span class="method-in-group-name">testUpdateName_negative</span>
+                <br/>
+              </div> <!-- method-in-group -->
+              <div class="method-in-group">
+                <span class="method-in-group-name">testUpdateOtherUser_negative</span>
+                <br/>
+              </div> <!-- method-in-group -->
+              <div class="method-in-group">
+                <span class="method-in-group-name">testUpdateStatus_negative</span>
+                <br/>
+              </div> <!-- method-in-group -->
+              <div class="method-in-group">
+                <span class="method-in-group-name">testUpdateUniqueId_negative</span>
+                <br/>
+              </div> <!-- method-in-group -->
+              <div class="method-in-group">
+                <span class="method-in-group-name">testUpdateVersion_negative</span>
+                <br/>
+              </div> <!-- method-in-group -->
+              <div class="method-in-group">
+                <span class="method-in-group-name">updateTest</span>
+                <br/>
+              </div> <!-- method-in-group -->
+            </div> <!-- test-group -->
+          </div> <!-- main-panel-content rounded-window-bottom -->
+        </div> <!-- panel -->
+        <div panel-name="times-Default_suite" class="panel">
+          <div class="main-panel-header rounded-window-top">
+            <span class="header-content">Times for Default suite</span>
+          </div> <!-- main-panel-header rounded-window-top -->
+          <div class="main-panel-content rounded-window-bottom">
+            <div class="times-div">
+              <script type="text/javascript">
+suiteTableInitFunctions.push('tableData_Default_suite');
+function tableData_Default_suite() {
+var data = new google.visualization.DataTable();
+data.addColumn('number', 'Number');
+data.addColumn('string', 'Method');
+data.addColumn('string', 'Class');
+data.addColumn('number', 'Time (ms)');
+data.addRows(49);
+data.setCell(0, 0, 0)
+data.setCell(0, 1, 'testGetByCategory')
+data.setCell(0, 2, 'ActionTest')
+data.setCell(0, 3, 961);
+data.setCell(1, 0, 1)
+data.setCell(1, 1, 'testGetByInvIdManyVersionWithFirstSubmit')
+data.setCell(1, 2, 'ActionTest')
+data.setCell(1, 3, 515);
+data.setCell(2, 0, 2)
+data.setCell(2, 1, 'testGetByInvIdManyVersionWithoutSubmit')
+data.setCell(2, 2, 'ActionTest')
+data.setCell(2, 3, 451);
+data.setCell(3, 0, 3)
+data.setCell(3, 1, 'testGetByInvIdManyVersionWithMultSubmit')
+data.setCell(3, 2, 'ActionTest')
+data.setCell(3, 3, 366);
+data.setCell(4, 0, 4)
+data.setCell(4, 1, 'testGetByInvIdOnName')
+data.setCell(4, 2, 'ActionTest')
+data.setCell(4, 3, 271);
+data.setCell(5, 0, 5)
+data.setCell(5, 1, 'createTest')
+data.setCell(5, 2, 'ActionTest')
+data.setCell(5, 3, 79);
+data.setCell(6, 0, 6)
+data.setCell(6, 1, 'testUploadArtifact')
+data.setCell(6, 2, 'ActionTest')
+data.setCell(6, 3, 78);
+data.setCell(7, 0, 7)
+data.setCell(7, 1, 'testDeleteReadOnlyArtifact')
+data.setCell(7, 2, 'ActionTest')
+data.setCell(7, 3, 59);
+data.setCell(8, 0, 8)
+data.setCell(8, 1, 'testGetAllActions')
+data.setCell(8, 2, 'ActionTest')
+data.setCell(8, 3, 56);
+data.setCell(9, 0, 9)
+data.setCell(9, 1, 'testGetBySupportedModel')
+data.setCell(9, 2, 'ActionTest')
+data.setCell(9, 3, 44);
+data.setCell(10, 0, 10)
+data.setCell(10, 1, 'testGetBySupportedComponent')
+data.setCell(10, 2, 'ActionTest')
+data.setCell(10, 3, 44);
+data.setCell(11, 0, 11)
+data.setCell(11, 1, 'testGetByVendor')
+data.setCell(11, 2, 'ActionTest')
+data.setCell(11, 3, 41);
+data.setCell(12, 0, 12)
+data.setCell(12, 1, 'testDeleteArtifact')
+data.setCell(12, 2, 'ActionTest')
+data.setCell(12, 3, 39);
+data.setCell(13, 0, 13)
+data.setCell(13, 1, 'testGetByInvIdOnCreate')
+data.setCell(13, 2, 'ActionTest')
+data.setCell(13, 3, 30);
+data.setCell(14, 0, 14)
+data.setCell(14, 1, 'testUpdateArtifact')
+data.setCell(14, 2, 'ActionTest')
+data.setCell(14, 3, 22);
+data.setCell(15, 0, 15)
+data.setCell(15, 1, 'testCheckOut')
+data.setCell(15, 2, 'ActionTest')
+data.setCell(15, 3, 21);
+data.setCell(16, 0, 16)
+data.setCell(16, 1, 'testUploadArtifactUnlockedAction_negative')
+data.setCell(16, 2, 'ActionTest')
+data.setCell(16, 3, 21);
+data.setCell(17, 0, 17)
+data.setCell(17, 1, 'testSubmit')
+data.setCell(17, 2, 'ActionTest')
+data.setCell(17, 3, 20);
+data.setCell(18, 0, 18)
+data.setCell(18, 1, 'testUndoCheckout')
+data.setCell(18, 2, 'ActionTest')
+data.setCell(18, 3, 18);
+data.setCell(19, 0, 19)
+data.setCell(19, 1, 'updateTest')
+data.setCell(19, 2, 'ActionTest')
+data.setCell(19, 3, 17);
+data.setCell(20, 0, 20)
+data.setCell(20, 1, 'testCheckOutOnCheckOut')
+data.setCell(20, 2, 'ActionTest')
+data.setCell(20, 3, 13);
+data.setCell(21, 0, 21)
+data.setCell(21, 1, 'testGetByIgnoreCaseName')
+data.setCell(21, 2, 'ActionTest')
+data.setCell(21, 3, 11);
+data.setCell(22, 0, 22)
+data.setCell(22, 1, 'testUpdateStatus_negative')
+data.setCell(22, 2, 'ActionTest')
+data.setCell(22, 3, 10);
+data.setCell(23, 0, 23)
+data.setCell(23, 1, 'testCheckIn')
+data.setCell(23, 2, 'ActionTest')
+data.setCell(23, 3, 10);
+data.setCell(24, 0, 24)
+data.setCell(24, 1, 'testDeleteArtifactInvalidArtifactUUID')
+data.setCell(24, 2, 'ActionTest')
+data.setCell(24, 3, 9);
+data.setCell(25, 0, 25)
+data.setCell(25, 1, 'testCheckOutOnCheckOutWithOtherUser')
+data.setCell(25, 2, 'ActionTest')
+data.setCell(25, 3, 9);
+data.setCell(26, 0, 26)
+data.setCell(26, 1, 'testUploadArtifactSameName_negative')
+data.setCell(26, 2, 'ActionTest')
+data.setCell(26, 3, 9);
+data.setCell(27, 0, 27)
+data.setCell(27, 1, 'testUpdateUniqueId_negative')
+data.setCell(27, 2, 'ActionTest')
+data.setCell(27, 3, 9);
+data.setCell(28, 0, 28)
+data.setCell(28, 1, 'testDownloadArtifact')
+data.setCell(28, 2, 'ActionTest')
+data.setCell(28, 3, 8);
+data.setCell(29, 0, 29)
+data.setCell(29, 1, 'testUpdateName_negative')
+data.setCell(29, 2, 'ActionTest')
+data.setCell(29, 3, 8);
+data.setCell(30, 0, 30)
+data.setCell(30, 1, 'testUpdateInvalidVersion_negative')
+data.setCell(30, 2, 'ActionTest')
+data.setCell(30, 3, 7);
+data.setCell(31, 0, 31)
+data.setCell(31, 1, 'testUpdateVersion_negative')
+data.setCell(31, 2, 'ActionTest')
+data.setCell(31, 3, 7);
+data.setCell(32, 0, 32)
+data.setCell(32, 1, 'testUpdateOnCheckedInAction_negative')
+data.setCell(32, 2, 'ActionTest')
+data.setCell(32, 3, 7);
+data.setCell(33, 0, 33)
+data.setCell(33, 1, 'testUpdateOtherUser_negative')
+data.setCell(33, 2, 'ActionTest')
+data.setCell(33, 3, 7);
+data.setCell(34, 0, 34)
+data.setCell(34, 1, 'testUpdateInvariantId_negative')
+data.setCell(34, 2, 'ActionTest')
+data.setCell(34, 3, 6);
+data.setCell(35, 0, 35)
+data.setCell(35, 1, 'testUploadArtifactInvalidActionInvId_negative')
+data.setCell(35, 2, 'ActionTest')
+data.setCell(35, 3, 6);
+data.setCell(36, 0, 36)
+data.setCell(36, 1, 'testUploadArtifactCheckedOutOtherUser_negative')
+data.setCell(36, 2, 'ActionTest')
+data.setCell(36, 3, 6);
+data.setCell(37, 0, 37)
+data.setCell(37, 1, 'testDeleteArtifactOnUnlockedAction')
+data.setCell(37, 2, 'ActionTest')
+data.setCell(37, 3, 5);
+data.setCell(38, 0, 38)
+data.setCell(38, 1, 'testCheckInWithOtherUser')
+data.setCell(38, 2, 'ActionTest')
+data.setCell(38, 3, 5);
+data.setCell(39, 0, 39)
+data.setCell(39, 1, 'testCreateWithExistingActionName_negative')
+data.setCell(39, 2, 'ActionTest')
+data.setCell(39, 3, 5);
+data.setCell(40, 0, 40)
+data.setCell(40, 1, 'testgetActionsByActionUUID')
+data.setCell(40, 2, 'ActionTest')
+data.setCell(40, 3, 5);
+data.setCell(41, 0, 41)
+data.setCell(41, 1, 'testDownloadArtifactNegativeInvalidArtifact')
+data.setCell(41, 2, 'ActionTest')
+data.setCell(41, 3, 5);
+data.setCell(42, 0, 42)
+data.setCell(42, 1, 'testDeleteArtifactLockedByOtherUser')
+data.setCell(42, 2, 'ActionTest')
+data.setCell(42, 3, 5);
+data.setCell(43, 0, 43)
+data.setCell(43, 1, 'testGetECOMPComponents')
+data.setCell(43, 2, 'ActionTest')
+data.setCell(43, 3, 5);
+data.setCell(44, 0, 44)
+data.setCell(44, 1, 'testSubmitOnCheckout')
+data.setCell(44, 2, 'ActionTest')
+data.setCell(44, 3, 4);
+data.setCell(45, 0, 45)
+data.setCell(45, 1, 'testCheckInWithoutCheckout')
+data.setCell(45, 2, 'ActionTest')
+data.setCell(45, 3, 4);
+data.setCell(46, 0, 46)
+data.setCell(46, 1, 'testDownloadArtifactNegativeInvalidAction')
+data.setCell(46, 2, 'ActionTest')
+data.setCell(46, 3, 4);
+data.setCell(47, 0, 47)
+data.setCell(47, 1, 'testgetActionsByActionUUID_Negative')
+data.setCell(47, 2, 'ActionTest')
+data.setCell(47, 3, 4);
+data.setCell(48, 0, 48)
+data.setCell(48, 1, 'testDeleteArtifactInvalidActInvId')
+data.setCell(48, 2, 'ActionTest')
+data.setCell(48, 3, 3);
+window.suiteTableData['Default_suite']= { tableData: data, tableDiv: 'times-div-Default_suite'}
+return data;
+}
+              </script>
+              <span class="suite-total-time">Total running time: 3 seconds</span>
+              <div id="times-div-Default_suite">
+              </div> <!-- times-div-Default_suite -->
+            </div> <!-- times-div -->
+          </div> <!-- main-panel-content rounded-window-bottom -->
+        </div> <!-- panel -->
+        <div panel-name="reporter-Default_suite" class="panel">
+          <div class="main-panel-header rounded-window-top">
+            <span class="header-content">Reporter output for Default suite</span>
+          </div> <!-- main-panel-header rounded-window-top -->
+          <div class="main-panel-content rounded-window-bottom">
+          </div> <!-- main-panel-content rounded-window-bottom -->
+        </div> <!-- panel -->
+        <div panel-name="ignored-methods-Default_suite" class="panel">
+          <div class="main-panel-header rounded-window-top">
+            <span class="header-content">0 ignored methods</span>
+          </div> <!-- main-panel-header rounded-window-top -->
+          <div class="main-panel-content rounded-window-bottom">
+          </div> <!-- main-panel-content rounded-window-bottom -->
+        </div> <!-- panel -->
+        <div panel-name="chronological-Default_suite" class="panel">
+          <div class="main-panel-header rounded-window-top">
+            <span class="header-content">Methods in chronological order</span>
+          </div> <!-- main-panel-header rounded-window-top -->
+          <div class="main-panel-content rounded-window-bottom">
+            <div class="chronological-class">
+              <div class="chronological-class-name">ActionTest</div> <!-- chronological-class-name -->
+              <div class="configuration-test before">
+                <span class="method-name">init</span>
+                <span class="method-start">0 ms</span>
+              </div> <!-- configuration-test before -->
+              <div class="test-method">
+                <span class="method-name">createTest</span>
+                <span class="method-start">2619 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testDeleteArtifactInvalidActInvId</span>
+                <span class="method-start">2699 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testDownloadArtifactNegativeInvalidAction</span>
+                <span class="method-start">2703 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testGetByCategory</span>
+                <span class="method-start">2708 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testGetByInvIdOnCreate</span>
+                <span class="method-start">3670 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testGetECOMPComponents</span>
+                <span class="method-start">3701 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testUploadArtifact</span>
+                <span class="method-start">3707 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testgetActionsByActionUUID_Negative</span>
+                <span class="method-start">3785 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testCheckOutOnCheckOut</span>
+                <span class="method-start">3791 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testCheckOutOnCheckOutWithOtherUser</span>
+                <span class="method-start">3805 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testCreateWithExistingActionName_negative</span>
+                <span class="method-start">3814 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testGetAllActions</span>
+                <span class="method-start">3820 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testDeleteArtifactInvalidArtifactUUID</span>
+                <span class="method-start">3877 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testGetByIgnoreCaseName</span>
+                <span class="method-start">3887 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testGetByInvIdManyVersionWithoutSubmit</span>
+                <span class="method-start">3899 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testGetBySupportedComponent</span>
+                <span class="method-start">4351 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testGetBySupportedModel</span>
+                <span class="method-start">4396 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testGetByVendor</span>
+                <span class="method-start">4441 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testDeleteArtifact</span>
+                <span class="method-start">4483 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testDeleteArtifactLockedByOtherUser</span>
+                <span class="method-start">4523 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testDeleteReadOnlyArtifact</span>
+                <span class="method-start">4528 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testDownloadArtifact</span>
+                <span class="method-start">4588 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testDownloadArtifactNegativeInvalidArtifact</span>
+                <span class="method-start">4597 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testUpdateArtifact</span>
+                <span class="method-start">4603 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testUploadArtifactCheckedOutOtherUser_negative</span>
+                <span class="method-start">4626 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testUploadArtifactInvalidActionInvId_negative</span>
+                <span class="method-start">4633 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testUploadArtifactSameName_negative</span>
+                <span class="method-start">4639 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testUploadArtifactUnlockedAction_negative</span>
+                <span class="method-start">4649 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testgetActionsByActionUUID</span>
+                <span class="method-start">4671 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testGetByInvIdManyVersionWithFirstSubmit</span>
+                <span class="method-start">4677 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testDeleteArtifactOnUnlockedAction</span>
+                <span class="method-start">5193 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">updateTest</span>
+                <span class="method-start">5198 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testGetByInvIdManyVersionWithMultSubmit</span>
+                <span class="method-start">5216 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testUpdateInvalidVersion_negative</span>
+                <span class="method-start">5582 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testUpdateInvariantId_negative</span>
+                <span class="method-start">5589 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testUpdateName_negative</span>
+                <span class="method-start">5596 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testUpdateOtherUser_negative</span>
+                <span class="method-start">5605 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testUpdateStatus_negative</span>
+                <span class="method-start">5613 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testUpdateUniqueId_negative</span>
+                <span class="method-start">5624 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testUpdateVersion_negative</span>
+                <span class="method-start">5633 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testGetByInvIdOnName</span>
+                <span class="method-start">5641 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testCheckIn</span>
+                <span class="method-start">5912 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testUpdateOnCheckedInAction_negative</span>
+                <span class="method-start">5923 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testSubmit</span>
+                <span class="method-start">5930 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testCheckInWithoutCheckout</span>
+                <span class="method-start">5951 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testCheckOut</span>
+                <span class="method-start">5956 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testCheckInWithOtherUser</span>
+                <span class="method-start">5977 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testSubmitOnCheckout</span>
+                <span class="method-start">5983 ms</span>
+              </div> <!-- test-method -->
+              <div class="test-method">
+                <span class="method-name">testUndoCheckout</span>
+                <span class="method-start">5988 ms</span>
+              </div> <!-- test-method -->
+          </div> <!-- main-panel-content rounded-window-bottom -->
+        </div> <!-- panel -->
+      </div> <!-- main-panel-root -->
+    </div> <!-- wrapper -->
+  </body>
+</html>
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/jquery-1.7.1.min.js b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/jquery-1.7.1.min.js
new file mode 100644
index 0000000..198b3ff
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/jquery-1.7.1.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/junitreports/TEST-com.amdocs.asdc.action.ActionTest.xml b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/junitreports/TEST-com.amdocs.asdc.action.ActionTest.xml
new file mode 100644
index 0000000..538301c
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/junitreports/TEST-com.amdocs.asdc.action.ActionTest.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated by org.testng.reporters.JUnitReportReporter -->
+<testsuite hostname="SHEETALM02" name="ActionTest" tests="49" failures="0" timestamp="8 Sep 2016 07:19:43 GMT" time="3.349" errors="0">
+  <testcase name="testGetBySupportedModel" time="0.044" classname="ActionTest"/>
+  <testcase name="testDeleteArtifactInvalidArtifactUUID" time="0.009" classname="ActionTest"/>
+  <testcase name="testCheckOut" time="0.021" classname="ActionTest"/>
+  <testcase name="testDeleteArtifactInvalidActInvId" time="0.003" classname="ActionTest"/>
+  <testcase name="testSubmit" time="0.020" classname="ActionTest"/>
+  <testcase name="testUndoCheckout" time="0.018" classname="ActionTest"/>
+  <testcase name="testGetByInvIdManyVersionWithMultSubmit" time="0.366" classname="ActionTest"/>
+  <testcase name="testSubmitOnCheckout" time="0.004" classname="ActionTest"/>
+  <testcase name="testDownloadArtifact" time="0.008" classname="ActionTest"/>
+  <testcase name="testUpdateInvariantId_negative" time="0.006" classname="ActionTest"/>
+  <testcase name="testCheckOutOnCheckOut" time="0.013" classname="ActionTest"/>
+  <testcase name="updateTest" time="0.017" classname="ActionTest"/>
+  <testcase name="testUpdateName_negative" time="0.008" classname="ActionTest"/>
+  <testcase name="testCheckInWithoutCheckout" time="0.004" classname="ActionTest"/>
+  <testcase name="testCheckOutOnCheckOutWithOtherUser" time="0.009" classname="ActionTest"/>
+  <testcase name="testGetByInvIdOnCreate" time="0.030" classname="ActionTest"/>
+  <testcase name="testDeleteArtifactOnUnlockedAction" time="0.005" classname="ActionTest"/>
+  <testcase name="testCheckInWithOtherUser" time="0.005" classname="ActionTest"/>
+  <testcase name="testDownloadArtifactNegativeInvalidAction" time="0.004" classname="ActionTest"/>
+  <testcase name="testGetByInvIdManyVersionWithoutSubmit" time="0.451" classname="ActionTest"/>
+  <testcase name="testCreateWithExistingActionName_negative" time="0.005" classname="ActionTest"/>
+  <testcase name="createTest" time="0.079" classname="ActionTest"/>
+  <testcase name="testGetAllActions" time="0.056" classname="ActionTest"/>
+  <testcase name="testgetActionsByActionUUID" time="0.005" classname="ActionTest"/>
+  <testcase name="testDownloadArtifactNegativeInvalidArtifact" time="0.005" classname="ActionTest"/>
+  <testcase name="testUpdateArtifact" time="0.022" classname="ActionTest"/>
+  <testcase name="testUploadArtifactInvalidActionInvId_negative" time="0.006" classname="ActionTest"/>
+  <testcase name="testGetByInvIdManyVersionWithFirstSubmit" time="0.515" classname="ActionTest"/>
+  <testcase name="testgetActionsByActionUUID_Negative" time="0.004" classname="ActionTest"/>
+  <testcase name="testDeleteReadOnlyArtifact" time="0.059" classname="ActionTest"/>
+  <testcase name="testUploadArtifact" time="0.078" classname="ActionTest"/>
+  <testcase name="testUpdateInvalidVersion_negative" time="0.007" classname="ActionTest"/>
+  <testcase name="testUploadArtifactUnlockedAction_negative" time="0.021" classname="ActionTest"/>
+  <testcase name="testDeleteArtifact" time="0.039" classname="ActionTest"/>
+  <testcase name="testGetByInvIdOnName" time="0.271" classname="ActionTest"/>
+  <testcase name="testUpdateVersion_negative" time="0.007" classname="ActionTest"/>
+  <testcase name="testDeleteArtifactLockedByOtherUser" time="0.005" classname="ActionTest"/>
+  <testcase name="testUpdateStatus_negative" time="0.010" classname="ActionTest"/>
+  <testcase name="testUploadArtifactSameName_negative" time="0.009" classname="ActionTest"/>
+  <testcase name="testUpdateUniqueId_negative" time="0.009" classname="ActionTest"/>
+  <testcase name="testCheckIn" time="0.010" classname="ActionTest"/>
+  <testcase name="testGetByIgnoreCaseName" time="0.011" classname="ActionTest"/>
+  <testcase name="testGetECOMPComponents" time="0.005" classname="ActionTest"/>
+  <testcase name="testGetByCategory" time="0.961" classname="ActionTest"/>
+  <testcase name="testGetBySupportedComponent" time="0.044" classname="ActionTest"/>
+  <testcase name="testUpdateOnCheckedInAction_negative" time="0.007" classname="ActionTest"/>
+  <testcase name="testUploadArtifactCheckedOutOtherUser_negative" time="0.006" classname="ActionTest"/>
+  <testcase name="testGetByVendor" time="0.041" classname="ActionTest"/>
+  <testcase name="testUpdateOtherUser_negative" time="0.007" classname="ActionTest"/>
+</testsuite> <!-- ActionTest -->
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/navigator-bullet.png b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/navigator-bullet.png
new file mode 100644
index 0000000..36d90d3
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/navigator-bullet.png
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/Default test.properties b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/Default test.properties
new file mode 100644
index 0000000..37da032
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/Default test.properties
@@ -0,0 +1 @@
+[SuiteResult context=Default test]
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/classes.html b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/classes.html
new file mode 100644
index 0000000..1ef25b2
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/classes.html
@@ -0,0 +1,228 @@
+<table border='1'>
+<tr>
+<th>Class name</th>
+<th>Method name</th>
+<th>Groups</th>
+</tr><tr>
+<td>ActionTest</td>
+<td>&nbsp;</td><td>&nbsp;</td></tr>
+<tr>
+<td align='center' colspan='3'>@Test</td>
+</tr>
+<tr>
+<td>&nbsp;</td>
+<td>testUploadArtifactSameName_negative</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testCheckIn</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testGetBySupportedComponent</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testDeleteArtifactOnUnlockedAction</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testDeleteArtifactInvalidActInvId</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testUpdateStatus_negative</td>
+<td>updateTestGroup </td>
+</tr>
+<tr>
+<td>&nbsp;</td>
+<td>testUpdateArtifact</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testGetByVendor</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testCheckInWithOtherUser</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testGetByInvIdManyVersionWithMultSubmit</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testUpdateOtherUser_negative</td>
+<td>updateTestGroup </td>
+</tr>
+<tr>
+<td>&nbsp;</td>
+<td>testUploadArtifactCheckedOutOtherUser_negative</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testCheckInWithoutCheckout</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>updateTest</td>
+<td>updateTestGroup </td>
+</tr>
+<tr>
+<td>&nbsp;</td>
+<td>testUpdateVersion_negative</td>
+<td>updateTestGroup </td>
+</tr>
+<tr>
+<td>&nbsp;</td>
+<td>testGetByIgnoreCaseName</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testgetActionsByActionUUID</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testGetECOMPComponents</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testGetByCategory</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testDownloadArtifact</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>createTest</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testUpdateName_negative</td>
+<td>updateTestGroup </td>
+</tr>
+<tr>
+<td>&nbsp;</td>
+<td>testGetAllActions</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testUndoCheckout</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testCheckOutOnCheckOutWithOtherUser</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testUploadArtifactInvalidActionInvId_negative</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testSubmit</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testgetActionsByActionUUID_Negative</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testUpdateOnCheckedInAction_negative</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testGetByInvIdManyVersionWithoutSubmit</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testGetByInvIdManyVersionWithFirstSubmit</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testUpdateUniqueId_negative</td>
+<td>updateTestGroup </td>
+</tr>
+<tr>
+<td>&nbsp;</td>
+<td>testGetByInvIdOnCreate</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testGetBySupportedModel</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testUploadArtifact</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testDownloadArtifactNegativeInvalidArtifact</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testDeleteReadOnlyArtifact</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testUpdateInvariantId_negative</td>
+<td>updateTestGroup </td>
+</tr>
+<tr>
+<td>&nbsp;</td>
+<td>testDownloadArtifactNegativeInvalidAction</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testGetByInvIdOnName</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testUpdateInvalidVersion_negative</td>
+<td>updateTestGroup </td>
+</tr>
+<tr>
+<td>&nbsp;</td>
+<td>testDeleteArtifact</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testDeleteArtifactLockedByOtherUser</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testCheckOut</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testCheckOutOnCheckOut</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testUploadArtifactUnlockedAction_negative</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testSubmitOnCheckout</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testDeleteArtifactInvalidArtifactUUID</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;</td>
+<td>testCreateWithExistingActionName_negative</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td align='center' colspan='3'>@BeforeClass</td>
+</tr>
+<tr>
+<td align='center' colspan='3'>@BeforeMethod</td>
+</tr>
+<tr>
+<td align='center' colspan='3'>@AfterMethod</td>
+</tr>
+<tr>
+<td align='center' colspan='3'>@AfterClass</td>
+</tr>
+</table>
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/groups.html b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/groups.html
new file mode 100644
index 0000000..211c8ec
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/groups.html
@@ -0,0 +1,3 @@
+<h2>Groups used for this test run</h2><table border="1">
+<tr> <td align="center"><b>Group name</b></td><td align="center"><b>Methods</b></td></tr><tr><td>updateTestGroup</td><td>ActionTest.testUpdateOtherUser_negative()[pri:0, instance:ActionTest@5b367418]<br/>ActionTest.testUpdateInvariantId_negative()[pri:0, instance:ActionTest@5b367418]<br/>ActionTest.testUpdateStatus_negative()[pri:0, instance:ActionTest@5b367418]<br/>ActionTest.testUpdateUniqueId_negative()[pri:0, instance:ActionTest@5b367418]<br/>ActionTest.testUpdateVersion_negative()[pri:0, instance:ActionTest@5b367418]<br/>ActionTest.updateTest()[pri:0, instance:ActionTest@5b367418]<br/>ActionTest.testUpdateInvalidVersion_negative()[pri:0, instance:ActionTest@5b367418]<br/>ActionTest.testUpdateName_negative()[pri:0, instance:ActionTest@5b367418]<br/></td></tr>
+</table>
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/index.html b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/index.html
new file mode 100644
index 0000000..8ed202c
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/index.html
@@ -0,0 +1,6 @@
+<html><head><title>Results for Default suite</title></head>
+<frameset cols="26%,74%">
+<frame src="toc.html" name="navFrame">
+<frame src="main.html" name="mainFrame">
+</frameset>
+</html>
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/main.html b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/main.html
new file mode 100644
index 0000000..5888ae0
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/main.html
@@ -0,0 +1,2 @@
+<html><head><title>Results for Default suite</title></head>
+<body>Select a result on the left-hand pane.</body></html>
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/methods-alphabetical.html b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/methods-alphabetical.html
new file mode 100644
index 0000000..c7600fc
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/methods-alphabetical.html
@@ -0,0 +1,104 @@
+<h2>Methods run, sorted chronologically</h2><h3>&gt;&gt; means before, &lt;&lt; means after</h3><p/><br/><em>Default suite</em><p/><small><i>(Hover the method name to see the test class name)</i></small><p/>
+<table border="1">
+<tr><th>Time</th><th>Delta (ms)</th><th>Suite<br>configuration</th><th>Test<br>configuration</th><th>Class<br>configuration</th><th>Groups<br>configuration</th><th>Method<br>configuration</th><th>Test<br>method</th><th>Thread</th><th>Instances</th></tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:39</td>   <td>0</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.createTest()[pri:0, instance:ActionTest@5b367418]">createTest</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:36</td>   <td>-2616</td> <td>&nbsp;</td><td title="&gt;&gt;ActionTest.init()[pri:0, instance:ActionTest@5b367418]">&gt;&gt;init</td>
+<td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>3293</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testCheckIn()[pri:0, instance:ActionTest@5b367418]">testCheckIn</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>3358</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testCheckInWithOtherUser()[pri:0, instance:ActionTest@5b367418]">testCheckInWithOtherUser</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>3332</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testCheckInWithoutCheckout()[pri:0, instance:ActionTest@5b367418]">testCheckInWithoutCheckout</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>3337</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testCheckOut()[pri:0, instance:ActionTest@5b367418]">testCheckOut</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>1172</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testCheckOutOnCheckOut()[pri:0, instance:ActionTest@5b367418]">testCheckOutOnCheckOut</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>1186</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testCheckOutOnCheckOutWithOtherUser()[pri:0, instance:ActionTest@5b367418]">testCheckOutOnCheckOutWithOtherUser</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>1195</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testCreateWithExistingActionName_negative()[pri:0, instance:ActionTest@5b367418]">testCreateWithExistingActionName_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>1864</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDeleteArtifact()[pri:0, instance:ActionTest@5b367418]">testDeleteArtifact</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:39</td>   <td>80</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDeleteArtifactInvalidActInvId()[pri:0, instance:ActionTest@5b367418]">testDeleteArtifactInvalidActInvId</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>1258</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDeleteArtifactInvalidArtifactUUID()[pri:0, instance:ActionTest@5b367418]">testDeleteArtifactInvalidArtifactUUID</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>1904</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDeleteArtifactLockedByOtherUser()[pri:0, instance:ActionTest@5b367418]">testDeleteArtifactLockedByOtherUser</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>2574</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDeleteArtifactOnUnlockedAction()[pri:0, instance:ActionTest@5b367418]">testDeleteArtifactOnUnlockedAction</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>1909</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDeleteReadOnlyArtifact()[pri:0, instance:ActionTest@5b367418]">testDeleteReadOnlyArtifact</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>1969</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDownloadArtifact()[pri:0, instance:ActionTest@5b367418]">testDownloadArtifact</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:39</td>   <td>84</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDownloadArtifactNegativeInvalidAction()[pri:0, instance:ActionTest@5b367418]">testDownloadArtifactNegativeInvalidAction</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>1978</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDownloadArtifactNegativeInvalidArtifact()[pri:0, instance:ActionTest@5b367418]">testDownloadArtifactNegativeInvalidArtifact</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>1201</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetAllActions()[pri:0, instance:ActionTest@5b367418]">testGetAllActions</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:39</td>   <td>89</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByCategory()[pri:0, instance:ActionTest@5b367418]">testGetByCategory</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>1268</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByIgnoreCaseName()[pri:0, instance:ActionTest@5b367418]">testGetByIgnoreCaseName</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>2058</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByInvIdManyVersionWithFirstSubmit()[pri:0, instance:ActionTest@5b367418]">testGetByInvIdManyVersionWithFirstSubmit</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>2597</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByInvIdManyVersionWithMultSubmit()[pri:0, instance:ActionTest@5b367418]">testGetByInvIdManyVersionWithMultSubmit</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>1280</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByInvIdManyVersionWithoutSubmit()[pri:0, instance:ActionTest@5b367418]">testGetByInvIdManyVersionWithoutSubmit</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>1051</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByInvIdOnCreate()[pri:0, instance:ActionTest@5b367418]">testGetByInvIdOnCreate</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>3022</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByInvIdOnName()[pri:0, instance:ActionTest@5b367418]">testGetByInvIdOnName</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>1732</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetBySupportedComponent()[pri:0, instance:ActionTest@5b367418]">testGetBySupportedComponent</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>1777</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetBySupportedModel()[pri:0, instance:ActionTest@5b367418]">testGetBySupportedModel</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>1822</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByVendor()[pri:0, instance:ActionTest@5b367418]">testGetByVendor</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>1082</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetECOMPComponents()[pri:0, instance:ActionTest@5b367418]">testGetECOMPComponents</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>3311</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testSubmit()[pri:0, instance:ActionTest@5b367418]">testSubmit</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>3364</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testSubmitOnCheckout()[pri:0, instance:ActionTest@5b367418]">testSubmitOnCheckout</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>3369</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUndoCheckout()[pri:0, instance:ActionTest@5b367418]">testUndoCheckout</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>1984</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateArtifact()[pri:0, instance:ActionTest@5b367418]">testUpdateArtifact</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>2963</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateInvalidVersion_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateInvalidVersion_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>2970</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateInvariantId_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateInvariantId_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>2977</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateName_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateName_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>3304</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateOnCheckedInAction_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateOnCheckedInAction_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>2986</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateOtherUser_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateOtherUser_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>2994</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateStatus_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateStatus_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>3005</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateUniqueId_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateUniqueId_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>3014</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateVersion_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateVersion_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>1088</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUploadArtifact()[pri:0, instance:ActionTest@5b367418]">testUploadArtifact</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>2007</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUploadArtifactCheckedOutOtherUser_negative()[pri:0, instance:ActionTest@5b367418]">testUploadArtifactCheckedOutOtherUser_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>2014</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUploadArtifactInvalidActionInvId_negative()[pri:0, instance:ActionTest@5b367418]">testUploadArtifactInvalidActionInvId_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>2020</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUploadArtifactSameName_negative()[pri:0, instance:ActionTest@5b367418]">testUploadArtifactSameName_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>2030</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUploadArtifactUnlockedAction_negative()[pri:0, instance:ActionTest@5b367418]">testUploadArtifactUnlockedAction_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>2052</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testgetActionsByActionUUID()[pri:0, instance:ActionTest@5b367418]">testgetActionsByActionUUID</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>1166</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testgetActionsByActionUUID_Negative()[pri:0, instance:ActionTest@5b367418]">testgetActionsByActionUUID_Negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>2579</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.updateTest()[pri:0, instance:ActionTest@5b367418]">updateTest</td>
+  <td>main@222427158</td>   <td></td> </tr>
+</table>
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/methods-not-run.html b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/methods-not-run.html
new file mode 100644
index 0000000..54b14cb
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/methods-not-run.html
@@ -0,0 +1,2 @@
+<h2>Methods that were not run</h2><table>
+</table>
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/methods.html b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/methods.html
new file mode 100644
index 0000000..ebf981d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/methods.html
@@ -0,0 +1,104 @@
+<h2>Methods run, sorted chronologically</h2><h3>&gt;&gt; means before, &lt;&lt; means after</h3><p/><br/><em>Default suite</em><p/><small><i>(Hover the method name to see the test class name)</i></small><p/>
+<table border="1">
+<tr><th>Time</th><th>Delta (ms)</th><th>Suite<br>configuration</th><th>Test<br>configuration</th><th>Class<br>configuration</th><th>Groups<br>configuration</th><th>Method<br>configuration</th><th>Test<br>method</th><th>Thread</th><th>Instances</th></tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:36</td>   <td>0</td> <td>&nbsp;</td><td title="&gt;&gt;ActionTest.init()[pri:0, instance:ActionTest@5b367418]">&gt;&gt;init</td>
+<td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:39</td>   <td>2616</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.createTest()[pri:0, instance:ActionTest@5b367418]">createTest</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:39</td>   <td>2696</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDeleteArtifactInvalidActInvId()[pri:0, instance:ActionTest@5b367418]">testDeleteArtifactInvalidActInvId</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:39</td>   <td>2700</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDownloadArtifactNegativeInvalidAction()[pri:0, instance:ActionTest@5b367418]">testDownloadArtifactNegativeInvalidAction</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:39</td>   <td>2705</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByCategory()[pri:0, instance:ActionTest@5b367418]">testGetByCategory</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>3667</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByInvIdOnCreate()[pri:0, instance:ActionTest@5b367418]">testGetByInvIdOnCreate</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>3698</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetECOMPComponents()[pri:0, instance:ActionTest@5b367418]">testGetECOMPComponents</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>3704</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUploadArtifact()[pri:0, instance:ActionTest@5b367418]">testUploadArtifact</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>3782</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testgetActionsByActionUUID_Negative()[pri:0, instance:ActionTest@5b367418]">testgetActionsByActionUUID_Negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>3788</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testCheckOutOnCheckOut()[pri:0, instance:ActionTest@5b367418]">testCheckOutOnCheckOut</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>3802</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testCheckOutOnCheckOutWithOtherUser()[pri:0, instance:ActionTest@5b367418]">testCheckOutOnCheckOutWithOtherUser</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>3811</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testCreateWithExistingActionName_negative()[pri:0, instance:ActionTest@5b367418]">testCreateWithExistingActionName_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>3817</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetAllActions()[pri:0, instance:ActionTest@5b367418]">testGetAllActions</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>3874</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDeleteArtifactInvalidArtifactUUID()[pri:0, instance:ActionTest@5b367418]">testDeleteArtifactInvalidArtifactUUID</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>3884</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByIgnoreCaseName()[pri:0, instance:ActionTest@5b367418]">testGetByIgnoreCaseName</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:40</td>   <td>3896</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByInvIdManyVersionWithoutSubmit()[pri:0, instance:ActionTest@5b367418]">testGetByInvIdManyVersionWithoutSubmit</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>4348</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetBySupportedComponent()[pri:0, instance:ActionTest@5b367418]">testGetBySupportedComponent</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>4393</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetBySupportedModel()[pri:0, instance:ActionTest@5b367418]">testGetBySupportedModel</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>4438</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByVendor()[pri:0, instance:ActionTest@5b367418]">testGetByVendor</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>4480</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDeleteArtifact()[pri:0, instance:ActionTest@5b367418]">testDeleteArtifact</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>4520</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDeleteArtifactLockedByOtherUser()[pri:0, instance:ActionTest@5b367418]">testDeleteArtifactLockedByOtherUser</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>4525</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDeleteReadOnlyArtifact()[pri:0, instance:ActionTest@5b367418]">testDeleteReadOnlyArtifact</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>4585</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDownloadArtifact()[pri:0, instance:ActionTest@5b367418]">testDownloadArtifact</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>4594</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDownloadArtifactNegativeInvalidArtifact()[pri:0, instance:ActionTest@5b367418]">testDownloadArtifactNegativeInvalidArtifact</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>4600</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateArtifact()[pri:0, instance:ActionTest@5b367418]">testUpdateArtifact</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>4623</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUploadArtifactCheckedOutOtherUser_negative()[pri:0, instance:ActionTest@5b367418]">testUploadArtifactCheckedOutOtherUser_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>4630</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUploadArtifactInvalidActionInvId_negative()[pri:0, instance:ActionTest@5b367418]">testUploadArtifactInvalidActionInvId_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>4636</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUploadArtifactSameName_negative()[pri:0, instance:ActionTest@5b367418]">testUploadArtifactSameName_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>4646</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUploadArtifactUnlockedAction_negative()[pri:0, instance:ActionTest@5b367418]">testUploadArtifactUnlockedAction_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>4668</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testgetActionsByActionUUID()[pri:0, instance:ActionTest@5b367418]">testgetActionsByActionUUID</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>4674</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByInvIdManyVersionWithFirstSubmit()[pri:0, instance:ActionTest@5b367418]">testGetByInvIdManyVersionWithFirstSubmit</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>5190</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testDeleteArtifactOnUnlockedAction()[pri:0, instance:ActionTest@5b367418]">testDeleteArtifactOnUnlockedAction</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:41</td>   <td>5195</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.updateTest()[pri:0, instance:ActionTest@5b367418]">updateTest</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5213</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByInvIdManyVersionWithMultSubmit()[pri:0, instance:ActionTest@5b367418]">testGetByInvIdManyVersionWithMultSubmit</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5579</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateInvalidVersion_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateInvalidVersion_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5586</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateInvariantId_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateInvariantId_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5593</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateName_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateName_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5602</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateOtherUser_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateOtherUser_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5610</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateStatus_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateStatus_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5621</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateUniqueId_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateUniqueId_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5630</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateVersion_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateVersion_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5638</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testGetByInvIdOnName()[pri:0, instance:ActionTest@5b367418]">testGetByInvIdOnName</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5909</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testCheckIn()[pri:0, instance:ActionTest@5b367418]">testCheckIn</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5920</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUpdateOnCheckedInAction_negative()[pri:0, instance:ActionTest@5b367418]">testUpdateOnCheckedInAction_negative</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5927</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testSubmit()[pri:0, instance:ActionTest@5b367418]">testSubmit</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5948</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testCheckInWithoutCheckout()[pri:0, instance:ActionTest@5b367418]">testCheckInWithoutCheckout</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5953</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testCheckOut()[pri:0, instance:ActionTest@5b367418]">testCheckOut</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5974</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testCheckInWithOtherUser()[pri:0, instance:ActionTest@5b367418]">testCheckInWithOtherUser</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5980</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testSubmitOnCheckout()[pri:0, instance:ActionTest@5b367418]">testSubmitOnCheckout</td>
+  <td>main@222427158</td>   <td></td> </tr>
+<tr bgcolor="baeedf">  <td>16/09/08 12:49:42</td>   <td>5985</td> <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td title="ActionTest.testUndoCheckout()[pri:0, instance:ActionTest@5b367418]">testUndoCheckout</td>
+  <td>main@222427158</td>   <td></td> </tr>
+</table>
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/reporter-output.html b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/reporter-output.html
new file mode 100644
index 0000000..063bc2e
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/reporter-output.html
@@ -0,0 +1 @@
+<h2>Reporter output</h2><table></table>
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/testng.xml.html b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/testng.xml.html
new file mode 100644
index 0000000..ce68151
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/testng.xml.html
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/toc.html b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/toc.html
new file mode 100644
index 0000000..a27f5af
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/Default suite/toc.html
@@ -0,0 +1,30 @@
+<html>
+<head>
+<title>Results for Default suite</title>
+<link href="../testng.css" rel="stylesheet" type="text/css" />
+<link href="../my-testng.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<h3><p align="center">Results for<br/><em>Default suite</em></p></h3>
+<table border='1' width='100%'>
+<tr valign='top'>
+<td>1 test</td>
+<td><a target='mainFrame' href='classes.html'>1 class</a></td>
+<td>49 methods:<br/>
+&nbsp;&nbsp;<a target='mainFrame' href='methods.html'>chronological</a><br/>
+&nbsp;&nbsp;<a target='mainFrame' href='methods-alphabetical.html'>alphabetical</a><br/>
+&nbsp;&nbsp;<a target='mainFrame' href='methods-not-run.html'>not run (0)</a></td>
+</tr>
+<tr>
+<td><a target='mainFrame' href='groups.html'>1 group</a></td>
+<td><a target='mainFrame' href='reporter-output.html'>reporter output</a></td>
+<td><a target='mainFrame' href='testng.xml.html'>testng.xml</a></td>
+</tr></table>
+<table width='100%' class='test-passed'>
+<tr><td>
+<table style='width: 100%'><tr><td valign='top'>Default test (49/0/0)</td><td valign='top' align='right'>
+  <a href='Default test.html' target='mainFrame'>Results</a>
+</td></tr></table>
+</td></tr><p/>
+</table>
+</body></html>
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/index.html b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/index.html
new file mode 100644
index 0000000..0ac18dc
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/old/index.html
@@ -0,0 +1,9 @@
+<html>
+<head><title>Test results</title><link href="./testng.css" rel="stylesheet" type="text/css" />
+<link href="./my-testng.css" rel="stylesheet" type="text/css" />
+</head><body>
+<h2><p align='center'>Test results</p></h2>
+<table border='1' width='100%' class='main-page'><tr><th>Suite</th><th>Passed</th><th>Failed</th><th>Skipped</th><th>testng.xml</th></tr>
+<tr align='center' class='invocation-passed'><td><em>Total</em></td><td><em>49</em></td><td><em>0</em></td><td><em>0</em></td><td>&nbsp;</td></tr>
+<tr align='center' class='invocation-passed'><td><a href='Default suite/index.html'>Default suite</a></td>
+<td>49</td><td>0</td><td>0</td><td><a href='Default suite/testng.xml.html'>Link</a></td></tr></table></body></html>
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/passed.png b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/passed.png
new file mode 100644
index 0000000..45e85bb
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/passed.png
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/skipped.png b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/skipped.png
new file mode 100644
index 0000000..c36a324
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/skipped.png
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/testng-failed.xml b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/testng-failed.xml
new file mode 100644
index 0000000..5f2650e
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/testng-failed.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
+<suite name="Failed suite [Default suite]">
+  <test name="Default test(failed)">
+    <classes>
+      <class name="ActionTest">
+        <methods>
+          <include name="testDeleteReadOnlyArtifact"/>
+          <include name="testUploadArtifact"/>
+          <include name="testUpdateArtifact"/>
+          <include name="init"/>
+        </methods>
+      </class> <!-- ActionTest -->
+    </classes>
+  </test> <!-- Default test(failed) -->
+</suite> <!-- Failed suite [Default suite] -->
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/testng-reports.css b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/testng-reports.css
new file mode 100644
index 0000000..29588e5
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/testng-reports.css
@@ -0,0 +1,309 @@
+body {
+    margin: 0px 0px 5px 5px;
+}
+
+ul {
+    margin: 0px;
+}
+
+li {
+    list-style-type: none;
+}
+
+a {
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: underline;
+}
+
+.navigator-selected {
+    background: #ffa500;
+}
+
+.wrapper {
+    position: absolute;
+    top: 60px;
+    bottom: 0;
+    left: 400px;
+    right: 0;
+    overflow: auto;
+}
+
+.navigator-root {
+    position: absolute;
+    top: 60px;
+    bottom: 0;
+    left: 0;
+    width: 400px;
+    overflow-y: auto;
+}
+
+.suite {
+    margin: 0px 10px 10px 0px;
+    background-color: #fff8dc;
+}
+
+.suite-name {
+    padding-left: 10px;
+    font-size: 25px;
+    font-family: Times;
+}
+
+.main-panel-header {
+    padding: 5px;
+    background-color: #9FB4D9; //afeeee;
+    font-family: monospace;
+    font-size: 18px;
+}
+
+.main-panel-content {
+    padding: 5px;
+    margin-bottom: 10px;
+    background-color: #DEE8FC; //d0ffff;
+}
+
+.rounded-window {
+    border-radius: 10px;
+    border-style: solid;
+    border-width: 1px;
+}
+
+.rounded-window-top {
+    border-top-right-radius: 10px 10px;
+    border-top-left-radius: 10px 10px;
+    border-style: solid;
+    border-width: 1px;
+    overflow: auto;
+}
+
+.light-rounded-window-top {
+    border-top-right-radius: 10px 10px;
+    border-top-left-radius: 10px 10px;
+}
+
+.rounded-window-bottom {
+    border-style: solid;
+    border-width: 0px 1px 1px 1px;
+    border-bottom-right-radius: 10px 10px;
+    border-bottom-left-radius: 10px 10px;
+    overflow: auto;
+}
+
+.method-name {
+    font-size: 12px;
+    font-family: monospace;
+}
+
+.method-content {
+    border-style: solid;
+    border-width: 0px 0px 1px 0px;
+    margin-bottom: 10;
+    padding-bottom: 5px;
+    width: 80%;
+}
+
+.parameters {
+    font-size: 14px;
+    font-family: monospace;
+}
+
+.stack-trace {
+    white-space: pre;
+    font-family: monospace;
+    font-size: 12px;
+    font-weight: bold;
+    margin-top: 0px;
+    margin-left: 20px;
+}
+
+.testng-xml {
+    font-family: monospace;
+}
+
+.method-list-content {
+    margin-left: 10px;
+}
+
+.navigator-suite-content {
+    margin-left: 10px;
+    font: 12px 'Lucida Grande';
+}
+
+.suite-section-title {
+    margin-top: 10px;
+    width: 80%;
+    border-style: solid;
+    border-width: 1px 0px 0px 0px;
+    font-family: Times;
+    font-size: 18px;
+    font-weight: bold;
+}
+
+.suite-section-content {
+    list-style-image: url(bullet_point.png);
+}
+
+.top-banner-root {
+    position: absolute;
+    top: 0;
+    height: 45px;
+    left: 0;
+    right: 0;
+    padding: 5px;
+    margin: 0px 0px 5px 0px;
+    background-color: #0066ff;
+    font-family: Times;
+    color: #fff;
+    text-align: center;
+}
+
+.top-banner-title-font {
+    font-size: 25px;
+}
+
+.test-name {
+    font-family: 'Lucida Grande';
+    font-size: 16px;
+}
+
+.suite-icon {
+    padding: 5px;
+    float: right;
+    height: 20;
+}
+
+.test-group {
+    font: 20px 'Lucida Grande';
+    margin: 5px 5px 10px 5px;
+    border-width: 0px 0px 1px 0px;
+    border-style: solid;
+    padding: 5px;
+}
+
+.test-group-name {
+    font-weight: bold;
+}
+
+.method-in-group {
+    font-size: 16px;
+    margin-left: 80px;
+}
+
+table.google-visualization-table-table {
+    width: 100%;
+}
+
+.reporter-method-name {
+    font-size: 14px;
+    font-family: monospace;
+}
+
+.reporter-method-output-div {
+    padding: 5px;
+    margin: 0px 0px 5px 20px;
+    font-size: 12px;
+    font-family: monospace;
+    border-width: 0px 0px 0px 1px;
+    border-style: solid;
+}
+
+.ignored-class-div {
+    font-size: 14px;
+    font-family: monospace;
+}
+
+.ignored-methods-div {
+    padding: 5px;
+    margin: 0px 0px 5px 20px;
+    font-size: 12px;
+    font-family: monospace;
+    border-width: 0px 0px 0px 1px;
+    border-style: solid;
+}
+
+.border-failed {
+    border-top-left-radius: 10px 10px;
+    border-bottom-left-radius: 10px 10px;
+    border-style: solid;
+    border-width: 0px 0px 0px 10px;
+    border-color: #f00;
+}
+
+.border-skipped {
+    border-top-left-radius: 10px 10px;
+    border-bottom-left-radius: 10px 10px;
+    border-style: solid;
+    border-width: 0px 0px 0px 10px;
+    border-color: #edc600;
+}
+
+.border-passed {
+    border-top-left-radius: 10px 10px;
+    border-bottom-left-radius: 10px 10px;
+    border-style: solid;
+    border-width: 0px 0px 0px 10px;
+    border-color: #19f52d;
+}
+
+.times-div {
+    text-align: center;
+    padding: 5px;
+}
+
+.suite-total-time {
+    font: 16px 'Lucida Grande';
+}
+
+.configuration-suite {
+    margin-left: 20px;
+}
+
+.configuration-test {
+    margin-left: 40px;
+}
+
+.configuration-class {
+    margin-left: 60px;
+}
+
+.configuration-method {
+    margin-left: 80px;
+}
+
+.test-method {
+    margin-left: 100px;
+}
+
+.chronological-class {
+    background-color: #0ccff;
+    border-style: solid;
+    border-width: 0px 0px 1px 1px;
+}
+
+.method-start {
+    float: right;
+}
+
+.chronological-class-name {
+    padding: 0px 0px 0px 5px;
+    color: #008;
+}
+
+.after, .before, .test-method {
+    font-family: monospace;
+    font-size: 14px;
+}
+
+.navigator-suite-header {
+    font-size: 22px;
+    margin: 0px 10px 5px 0px;
+    background-color: #deb887;
+    text-align: center;
+}
+
+.collapse-all-icon {
+    padding: 5px;
+    float: right;
+}
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/testng-reports.js b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/testng-reports.js
new file mode 100644
index 0000000..5159f81
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/testng-reports.js
@@ -0,0 +1,122 @@
+$(document).ready(function() {
+    $('a.navigator-link').click(function() {
+        // Extract the panel for this link
+        var panel = getPanelName($(this));
+
+        // Mark this link as currently selected
+        $('.navigator-link').parent().removeClass('navigator-selected');
+        $(this).parent().addClass('navigator-selected');
+
+        showPanel(panel);
+    });
+
+    installMethodHandlers('failed');
+    installMethodHandlers('skipped');
+    installMethodHandlers('passed', true); // hide passed methods by default
+
+    $('a.method').click(function() {
+        showMethod($(this));
+        return false;
+    });
+
+    // Hide all the panels and display the first one (do this last
+    // to make sure the click() will invoke the listeners)
+    $('.panel').hide();
+    $('.navigator-link').first().click();
+
+    // Collapse/expand the suites
+    $('a.collapse-all-link').click(function() {
+        var contents = $('.navigator-suite-content');
+        if (contents.css('display') == 'none') {
+            contents.show();
+        } else {
+            contents.hide();
+        }
+    });
+});
+
+// The handlers that take care of showing/hiding the methods
+function installMethodHandlers(name, hide) {
+    function getContent(t) {
+    return $('.method-list-content.' + name + "." + t.attr('panel-name'));
+    }
+
+    function getHideLink(t, name) {
+        var s = 'a.hide-methods.' + name + "." + t.attr('panel-name');
+        return $(s);
+    }
+
+    function getShowLink(t, name) {
+        return $('a.show-methods.' + name + "." + t.attr('panel-name'));
+    }
+
+    function getMethodPanelClassSel(element, name) {
+        var panelName = getPanelName(element);
+    var sel = '.' + panelName + "-class-" + name;
+        return $(sel);
+    }
+
+    $('a.hide-methods.' + name).click(function() {
+        var w = getContent($(this));
+        w.hide();
+        getHideLink($(this), name).hide();
+        getShowLink($(this), name).show();
+    getMethodPanelClassSel($(this), name).hide();
+    });
+
+    $('a.show-methods.' + name).click(function() {
+        var w = getContent($(this));
+        w.show();
+        getHideLink($(this), name).show();
+        getShowLink($(this), name).hide();
+    showPanel(getPanelName($(this)));
+    getMethodPanelClassSel($(this), name).show();
+    });
+
+    if (hide) {
+        $('a.hide-methods.' + name).click();
+    } else {
+        $('a.show-methods.' + name).click();
+    }
+}
+
+function getHashForMethod(element) {
+    return element.attr('hash-for-method');
+}
+
+function getPanelName(element) {
+    return element.attr('panel-name');
+}
+
+function showPanel(panelName) {
+    $('.panel').hide();
+    var panel = $('.panel[panel-name="' + panelName + '"]');
+    panel.show();
+}
+
+function showMethod(element) {
+    var hashTag = getHashForMethod(element);
+    var panelName = getPanelName(element);
+    showPanel(panelName);
+    var current = document.location.href;
+    var base = current.substring(0, current.indexOf('#'))
+    document.location.href = base + '#' + hashTag;
+    var newPosition = $(document).scrollTop() - 65;
+    $(document).scrollTop(newPosition);
+}
+
+function drawTable() {
+    for (var i = 0; i < suiteTableInitFunctions.length; i++) {
+        window[suiteTableInitFunctions[i]]();
+    }
+
+    for (var k in window.suiteTableData) {
+        var v = window.suiteTableData[k];
+        var div = v.tableDiv;
+        var data = v.tableData
+        var table = new google.visualization.Table(document.getElementById(div));
+        table.draw(data, {
+            showRowNumber : false
+        });
+    }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/testng-results.xml b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/testng-results.xml
new file mode 100644
index 0000000..02c71b6
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/testng-results.xml
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testng-results skipped="0" failed="0" total="49" passed="49">
+  <reporter-output>
+  </reporter-output>
+  <suite name="Default suite" duration-ms="6008" started-at="2016-09-08T07:19:36Z" finished-at="2016-09-08T07:19:42Z">
+    <groups>
+      <group name="updateTestGroup">
+        <method signature="ActionTest.updateTest()[pri:0, instance:ActionTest@5b367418]" name="updateTest" class="ActionTest"/>
+        <method signature="ActionTest.testUpdateInvalidVersion_negative()[pri:0, instance:ActionTest@5b367418]" name="testUpdateInvalidVersion_negative" class="ActionTest"/>
+        <method signature="ActionTest.testUpdateInvariantId_negative()[pri:0, instance:ActionTest@5b367418]" name="testUpdateInvariantId_negative" class="ActionTest"/>
+        <method signature="ActionTest.testUpdateName_negative()[pri:0, instance:ActionTest@5b367418]" name="testUpdateName_negative" class="ActionTest"/>
+        <method signature="ActionTest.testUpdateOtherUser_negative()[pri:0, instance:ActionTest@5b367418]" name="testUpdateOtherUser_negative" class="ActionTest"/>
+        <method signature="ActionTest.testUpdateStatus_negative()[pri:0, instance:ActionTest@5b367418]" name="testUpdateStatus_negative" class="ActionTest"/>
+        <method signature="ActionTest.testUpdateUniqueId_negative()[pri:0, instance:ActionTest@5b367418]" name="testUpdateUniqueId_negative" class="ActionTest"/>
+        <method signature="ActionTest.testUpdateVersion_negative()[pri:0, instance:ActionTest@5b367418]" name="testUpdateVersion_negative" class="ActionTest"/>
+      </group> <!-- updateTestGroup -->
+    </groups>
+    <test name="Default test" duration-ms="6008" started-at="2016-09-08T07:19:36Z" finished-at="2016-09-08T07:19:42Z">
+      <class name="ActionTest">
+        <test-method status="PASS" signature="init()[pri:0, instance:ActionTest@5b367418]" name="init" is-config="true" duration-ms="2613" started-at="2016-09-08T12:49:36Z" finished-at="2016-09-08T12:49:39Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- init -->
+        <test-method status="PASS" signature="createTest()[pri:0, instance:ActionTest@5b367418]" name="createTest" duration-ms="79" started-at="2016-09-08T12:49:39Z" finished-at="2016-09-08T12:49:39Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- createTest -->
+        <test-method status="PASS" signature="testDeleteArtifactInvalidActInvId()[pri:0, instance:ActionTest@5b367418]" name="testDeleteArtifactInvalidActInvId" duration-ms="3" started-at="2016-09-08T12:49:39Z" finished-at="2016-09-08T12:49:39Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testDeleteArtifactInvalidActInvId -->
+        <test-method status="PASS" signature="testDownloadArtifactNegativeInvalidAction()[pri:0, instance:ActionTest@5b367418]" name="testDownloadArtifactNegativeInvalidAction" duration-ms="4" started-at="2016-09-08T12:49:39Z" finished-at="2016-09-08T12:49:39Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testDownloadArtifactNegativeInvalidAction -->
+        <test-method status="PASS" signature="testGetByCategory()[pri:0, instance:ActionTest@5b367418]" name="testGetByCategory" duration-ms="961" started-at="2016-09-08T12:49:39Z" finished-at="2016-09-08T12:49:40Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testGetByCategory -->
+        <test-method status="PASS" signature="testGetByInvIdOnCreate()[pri:0, instance:ActionTest@5b367418]" name="testGetByInvIdOnCreate" duration-ms="30" started-at="2016-09-08T12:49:40Z" finished-at="2016-09-08T12:49:40Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testGetByInvIdOnCreate -->
+        <test-method status="PASS" signature="testGetECOMPComponents()[pri:0, instance:ActionTest@5b367418]" name="testGetECOMPComponents" duration-ms="5" started-at="2016-09-08T12:49:40Z" finished-at="2016-09-08T12:49:40Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testGetECOMPComponents -->
+        <test-method status="PASS" signature="testUploadArtifact()[pri:0, instance:ActionTest@5b367418]" name="testUploadArtifact" duration-ms="78" started-at="2016-09-08T12:49:40Z" finished-at="2016-09-08T12:49:40Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testUploadArtifact -->
+        <test-method status="PASS" signature="testgetActionsByActionUUID_Negative()[pri:0, instance:ActionTest@5b367418]" name="testgetActionsByActionUUID_Negative" duration-ms="4" started-at="2016-09-08T12:49:40Z" finished-at="2016-09-08T12:49:40Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testgetActionsByActionUUID_Negative -->
+        <test-method status="PASS" signature="testCheckOutOnCheckOut()[pri:0, instance:ActionTest@5b367418]" name="testCheckOutOnCheckOut" duration-ms="13" started-at="2016-09-08T12:49:40Z" depends-on-methods="ActionTest.createTest" finished-at="2016-09-08T12:49:40Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testCheckOutOnCheckOut -->
+        <test-method status="PASS" signature="testCheckOutOnCheckOutWithOtherUser()[pri:0, instance:ActionTest@5b367418]" name="testCheckOutOnCheckOutWithOtherUser" duration-ms="9" started-at="2016-09-08T12:49:40Z" depends-on-methods="ActionTest.createTest" finished-at="2016-09-08T12:49:40Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testCheckOutOnCheckOutWithOtherUser -->
+        <test-method status="PASS" signature="testCreateWithExistingActionName_negative()[pri:0, instance:ActionTest@5b367418]" name="testCreateWithExistingActionName_negative" duration-ms="5" started-at="2016-09-08T12:49:40Z" depends-on-methods="ActionTest.createTest" finished-at="2016-09-08T12:49:40Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testCreateWithExistingActionName_negative -->
+        <test-method status="PASS" signature="testGetAllActions()[pri:0, instance:ActionTest@5b367418]" name="testGetAllActions" duration-ms="56" started-at="2016-09-08T12:49:40Z" depends-on-methods="ActionTest.testGetByCategory" finished-at="2016-09-08T12:49:40Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testGetAllActions -->
+        <test-method status="PASS" signature="testDeleteArtifactInvalidArtifactUUID()[pri:0, instance:ActionTest@5b367418]" name="testDeleteArtifactInvalidArtifactUUID" duration-ms="9" started-at="2016-09-08T12:49:40Z" depends-on-methods="ActionTest.testGetByInvIdOnCreate" finished-at="2016-09-08T12:49:40Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testDeleteArtifactInvalidArtifactUUID -->
+        <test-method status="PASS" signature="testGetByIgnoreCaseName()[pri:0, instance:ActionTest@5b367418]" name="testGetByIgnoreCaseName" duration-ms="11" started-at="2016-09-08T12:49:40Z" depends-on-methods="ActionTest.testGetByInvIdOnCreate" finished-at="2016-09-08T12:49:40Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testGetByIgnoreCaseName -->
+        <test-method status="PASS" signature="testGetByInvIdManyVersionWithoutSubmit()[pri:0, instance:ActionTest@5b367418]" name="testGetByInvIdManyVersionWithoutSubmit" duration-ms="451" started-at="2016-09-08T12:49:40Z" depends-on-methods="ActionTest.testGetByInvIdOnCreate" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testGetByInvIdManyVersionWithoutSubmit -->
+        <test-method status="PASS" signature="testGetBySupportedComponent()[pri:0, instance:ActionTest@5b367418]" name="testGetBySupportedComponent" duration-ms="44" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.testGetByCategory" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testGetBySupportedComponent -->
+        <test-method status="PASS" signature="testGetBySupportedModel()[pri:0, instance:ActionTest@5b367418]" name="testGetBySupportedModel" duration-ms="44" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.testGetByCategory" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testGetBySupportedModel -->
+        <test-method status="PASS" signature="testGetByVendor()[pri:0, instance:ActionTest@5b367418]" name="testGetByVendor" duration-ms="41" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.testGetByCategory" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testGetByVendor -->
+        <test-method status="PASS" signature="testDeleteArtifact()[pri:0, instance:ActionTest@5b367418]" name="testDeleteArtifact" duration-ms="39" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.testUploadArtifact" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testDeleteArtifact -->
+        <test-method status="PASS" signature="testDeleteArtifactLockedByOtherUser()[pri:0, instance:ActionTest@5b367418]" name="testDeleteArtifactLockedByOtherUser" duration-ms="5" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.testUploadArtifact" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testDeleteArtifactLockedByOtherUser -->
+        <test-method status="PASS" signature="testDeleteReadOnlyArtifact()[pri:0, instance:ActionTest@5b367418]" name="testDeleteReadOnlyArtifact" duration-ms="59" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.testUploadArtifact" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testDeleteReadOnlyArtifact -->
+        <test-method status="PASS" signature="testDownloadArtifact()[pri:0, instance:ActionTest@5b367418]" name="testDownloadArtifact" duration-ms="8" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.testUploadArtifact" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testDownloadArtifact -->
+        <test-method status="PASS" signature="testDownloadArtifactNegativeInvalidArtifact()[pri:0, instance:ActionTest@5b367418]" name="testDownloadArtifactNegativeInvalidArtifact" duration-ms="5" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.testUploadArtifact" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testDownloadArtifactNegativeInvalidArtifact -->
+        <test-method status="PASS" signature="testUpdateArtifact()[pri:0, instance:ActionTest@5b367418]" name="testUpdateArtifact" duration-ms="22" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.testUploadArtifact" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testUpdateArtifact -->
+        <test-method status="PASS" signature="testUploadArtifactCheckedOutOtherUser_negative()[pri:0, instance:ActionTest@5b367418]" name="testUploadArtifactCheckedOutOtherUser_negative" duration-ms="6" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.testUploadArtifact" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testUploadArtifactCheckedOutOtherUser_negative -->
+        <test-method status="PASS" signature="testUploadArtifactInvalidActionInvId_negative()[pri:0, instance:ActionTest@5b367418]" name="testUploadArtifactInvalidActionInvId_negative" duration-ms="6" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.testUploadArtifact" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testUploadArtifactInvalidActionInvId_negative -->
+        <test-method status="PASS" signature="testUploadArtifactSameName_negative()[pri:0, instance:ActionTest@5b367418]" name="testUploadArtifactSameName_negative" duration-ms="9" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.testUploadArtifact" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testUploadArtifactSameName_negative -->
+        <test-method status="PASS" signature="testUploadArtifactUnlockedAction_negative()[pri:0, instance:ActionTest@5b367418]" name="testUploadArtifactUnlockedAction_negative" duration-ms="21" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.testUploadArtifact" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testUploadArtifactUnlockedAction_negative -->
+        <test-method status="PASS" signature="testgetActionsByActionUUID()[pri:0, instance:ActionTest@5b367418]" name="testgetActionsByActionUUID" duration-ms="5" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.createTest" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testgetActionsByActionUUID -->
+        <test-method status="PASS" signature="testGetByInvIdManyVersionWithFirstSubmit()[pri:0, instance:ActionTest@5b367418]" name="testGetByInvIdManyVersionWithFirstSubmit" duration-ms="515" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.testGetByInvIdManyVersionWithoutSubmit" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testGetByInvIdManyVersionWithFirstSubmit -->
+        <test-method status="PASS" signature="testDeleteArtifactOnUnlockedAction()[pri:0, instance:ActionTest@5b367418]" name="testDeleteArtifactOnUnlockedAction" duration-ms="5" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.testUploadArtifactUnlockedAction_negative" finished-at="2016-09-08T12:49:41Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testDeleteArtifactOnUnlockedAction -->
+        <test-method status="PASS" signature="updateTest()[pri:0, instance:ActionTest@5b367418]" name="updateTest" duration-ms="17" started-at="2016-09-08T12:49:41Z" depends-on-methods="ActionTest.createTest, ActionTest.testCreateWithExistingActionName_negative" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- updateTest -->
+        <test-method status="PASS" signature="testGetByInvIdManyVersionWithMultSubmit()[pri:0, instance:ActionTest@5b367418]" name="testGetByInvIdManyVersionWithMultSubmit" duration-ms="366" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.testGetByInvIdManyVersionWithFirstSubmit" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testGetByInvIdManyVersionWithMultSubmit -->
+        <test-method status="PASS" signature="testUpdateInvalidVersion_negative()[pri:0, instance:ActionTest@5b367418]" name="testUpdateInvalidVersion_negative" duration-ms="7" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.updateTest" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testUpdateInvalidVersion_negative -->
+        <test-method status="PASS" signature="testUpdateInvariantId_negative()[pri:0, instance:ActionTest@5b367418]" name="testUpdateInvariantId_negative" duration-ms="6" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.updateTest" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testUpdateInvariantId_negative -->
+        <test-method status="PASS" signature="testUpdateName_negative()[pri:0, instance:ActionTest@5b367418]" name="testUpdateName_negative" duration-ms="8" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.updateTest" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testUpdateName_negative -->
+        <test-method status="PASS" signature="testUpdateOtherUser_negative()[pri:0, instance:ActionTest@5b367418]" name="testUpdateOtherUser_negative" duration-ms="7" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.updateTest" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testUpdateOtherUser_negative -->
+        <test-method status="PASS" signature="testUpdateStatus_negative()[pri:0, instance:ActionTest@5b367418]" name="testUpdateStatus_negative" duration-ms="10" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.updateTest" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testUpdateStatus_negative -->
+        <test-method status="PASS" signature="testUpdateUniqueId_negative()[pri:0, instance:ActionTest@5b367418]" name="testUpdateUniqueId_negative" duration-ms="9" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.updateTest" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testUpdateUniqueId_negative -->
+        <test-method status="PASS" signature="testUpdateVersion_negative()[pri:0, instance:ActionTest@5b367418]" name="testUpdateVersion_negative" duration-ms="7" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.updateTest" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testUpdateVersion_negative -->
+        <test-method status="PASS" signature="testGetByInvIdOnName()[pri:0, instance:ActionTest@5b367418]" name="testGetByInvIdOnName" duration-ms="271" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.testGetByInvIdManyVersionWithMultSubmit" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testGetByInvIdOnName -->
+        <test-method status="PASS" signature="testCheckIn()[pri:0, instance:ActionTest@5b367418]" name="testCheckIn" duration-ms="10" depends-on-groups="updateTestGroup" started-at="2016-09-08T12:49:42Z" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testCheckIn -->
+        <test-method status="PASS" signature="testUpdateOnCheckedInAction_negative()[pri:0, instance:ActionTest@5b367418]" name="testUpdateOnCheckedInAction_negative" duration-ms="7" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.testCheckIn" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testUpdateOnCheckedInAction_negative -->
+        <test-method status="PASS" signature="testSubmit()[pri:0, instance:ActionTest@5b367418]" name="testSubmit" duration-ms="20" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.testUpdateOnCheckedInAction_negative" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testSubmit -->
+        <test-method status="PASS" signature="testCheckInWithoutCheckout()[pri:0, instance:ActionTest@5b367418]" name="testCheckInWithoutCheckout" duration-ms="4" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.testSubmit" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testCheckInWithoutCheckout -->
+        <test-method status="PASS" signature="testCheckOut()[pri:0, instance:ActionTest@5b367418]" name="testCheckOut" duration-ms="21" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.testSubmit" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testCheckOut -->
+        <test-method status="PASS" signature="testCheckInWithOtherUser()[pri:0, instance:ActionTest@5b367418]" name="testCheckInWithOtherUser" duration-ms="5" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.testCheckOut" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testCheckInWithOtherUser -->
+        <test-method status="PASS" signature="testSubmitOnCheckout()[pri:0, instance:ActionTest@5b367418]" name="testSubmitOnCheckout" duration-ms="4" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.testCheckOut" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testSubmitOnCheckout -->
+        <test-method status="PASS" signature="testUndoCheckout()[pri:0, instance:ActionTest@5b367418]" name="testUndoCheckout" duration-ms="18" started-at="2016-09-08T12:49:42Z" depends-on-methods="ActionTest.testCheckOut" finished-at="2016-09-08T12:49:42Z">
+          <reporter-output>
+          </reporter-output>
+        </test-method> <!-- testUndoCheckout -->
+      </class> <!-- ActionTest -->
+    </test> <!-- Default test -->
+  </suite> <!-- Default suite -->
+</testng-results>
diff --git a/openecomp-be/backend/openecomp-sdc-action-manager/test-output/testng.css b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/testng.css
new file mode 100644
index 0000000..5124ba8
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-action-manager/test-output/testng.css
@@ -0,0 +1,9 @@
+.invocation-failed,  .test-failed  { background-color: #DD0000; }
+.invocation-percent, .test-percent { background-color: #006600; }
+.invocation-passed,  .test-passed  { background-color: #00AA00; }
+.invocation-skipped, .test-skipped { background-color: #CCCC00; }
+
+.main-page {
+  font-size: x-large;
+}
+
diff --git a/openecomp-be/backend/openecomp-sdc-application-config-manager/pom.xml b/openecomp-be/backend/openecomp-sdc-application-config-manager/pom.xml
new file mode 100644
index 0000000..4371144
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-application-config-manager/pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>backend</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.openecomp.sdc</groupId>
+    <artifactId>openecomp-sdc-application-config-manager</artifactId>
+
+
+    <dependencies>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.3.1</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
+            <version>1.14</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.core</groupId>
+            <artifactId>openecomp-config-lib</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <version>6.9.10</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.19.1</version>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    
+</project>
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-application-config-manager/src/main/java/org/openecomp/sdc/applicationconfig/ApplicationConfigManager.java b/openecomp-be/backend/openecomp-sdc-application-config-manager/src/main/java/org/openecomp/sdc/applicationconfig/ApplicationConfigManager.java
new file mode 100644
index 0000000..924401b
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-application-config-manager/src/main/java/org/openecomp/sdc/applicationconfig/ApplicationConfigManager.java
@@ -0,0 +1,35 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.applicationconfig;
+
+import org.openecomp.core.utilities.applicationconfig.dao.type.ApplicationConfigEntity;
+import org.openecomp.core.utilities.applicationconfig.type.ConfigurationData;
+
+import java.util.Collection;
+
+public interface ApplicationConfigManager {
+
+  void insertIntoTable(String namespace, String key, String value);
+
+  ConfigurationData getFromTable(String namespace, String key);
+
+  Collection<ApplicationConfigEntity> getListOfConfigurationByNamespace(String namespace);
+}
diff --git a/openecomp-be/backend/openecomp-sdc-application-config-manager/src/main/java/org/openecomp/sdc/applicationconfig/impl/ApplicationConfigManagerImpl.java b/openecomp-be/backend/openecomp-sdc-application-config-manager/src/main/java/org/openecomp/sdc/applicationconfig/impl/ApplicationConfigManagerImpl.java
new file mode 100644
index 0000000..b44c541
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-application-config-manager/src/main/java/org/openecomp/sdc/applicationconfig/impl/ApplicationConfigManagerImpl.java
@@ -0,0 +1,63 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.applicationconfig.impl;
+
+import org.openecomp.core.utilities.applicationconfig.ApplicationConfig;
+import org.openecomp.core.utilities.applicationconfig.dao.type.ApplicationConfigEntity;
+import org.openecomp.core.utilities.applicationconfig.impl.ApplicationConfigImpl;
+import org.openecomp.core.utilities.applicationconfig.type.ConfigurationData;
+import org.openecomp.sdc.applicationconfig.ApplicationConfigManager;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+
+import java.util.Collection;
+
+public class ApplicationConfigManagerImpl implements ApplicationConfigManager {
+  private static final String SCHEMA_GENERATOR_INITIALIZATION_ERROR =
+      "SCHEMA_GENERATOR_INITIALIZATION_ERROR";
+  private static final String SCHEMA_GENERATOR_INITIALIZATION_ERROR_MSG =
+      "Error occurred while loading questionnaire schema templates";
+  private ApplicationConfig applicationConfig = new ApplicationConfigImpl();
+
+  @Override
+  public void insertIntoTable(String namespace, String key, String value) {
+    try {
+      applicationConfig.insertValue(namespace, key, value);
+    } catch (Exception exception) {
+      throw new CoreException(new ErrorCode.ErrorCodeBuilder()
+          .withCategory(ErrorCategory.APPLICATION)
+          .withId(SCHEMA_GENERATOR_INITIALIZATION_ERROR)
+          .withMessage(SCHEMA_GENERATOR_INITIALIZATION_ERROR_MSG)
+          .build());
+    }
+  }
+
+  @Override
+  public ConfigurationData getFromTable(String namespace, String key) {
+    return applicationConfig.getConfigurationData(namespace, key);
+  }
+
+  @Override
+  public Collection<ApplicationConfigEntity> getListOfConfigurationByNamespace(String namespace) {
+    return applicationConfig.getListOfConfigurationByNamespace(namespace);
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-application-config-manager/src/test/java/org/openecomp/sdc/applicationconfig/ApplicationConfigManagerTest.java b/openecomp-be/backend/openecomp-sdc-application-config-manager/src/test/java/org/openecomp/sdc/applicationconfig/ApplicationConfigManagerTest.java
new file mode 100644
index 0000000..291ef18
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-application-config-manager/src/test/java/org/openecomp/sdc/applicationconfig/ApplicationConfigManagerTest.java
@@ -0,0 +1,64 @@
+package org.openecomp.sdc.applicationconfig;
+
+import org.openecomp.sdc.applicationconfig.impl.ApplicationConfigManagerImpl;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.core.utilities.applicationconfig.dao.type.ApplicationConfigEntity;
+import org.openecomp.core.utilities.applicationconfig.type.ConfigurationData;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.util.Collection;
+
+public class ApplicationConfigManagerTest {
+
+  public static final String TEST_NAMESPACE_1 = "test-app-namespace";
+  public static final String TEST_NAMESPACE_2 = "test-namespace";
+  public static final String TEST_KEY = "test-app-key";
+  public static final String TEST_VALUE = "test-app-value";
+  ApplicationConfigManager applicationConfigManager = new ApplicationConfigManagerImpl();
+
+  @Test
+  public void testInsertIntoTable() {
+    try {
+      applicationConfigManager.insertIntoTable(TEST_NAMESPACE_1, TEST_KEY, TEST_VALUE);
+    } catch (CoreException e) {
+      Assert.assertEquals(e.getMessage(),
+          "Error occurred while loading questionnaire schema templates");
+    }
+  }
+
+
+  @Test(dependsOnMethods = "testInsertIntoTable")
+  public void testGetValueFromTable() {
+    ConfigurationData value = applicationConfigManager.getFromTable(TEST_NAMESPACE_1, TEST_KEY);
+
+    Assert.assertEquals(value.getValue(), TEST_VALUE);
+  }
+
+
+  @Test(dependsOnMethods = "testInsertIntoTable")
+  public void testGetValueFromTableNegative() {
+    try {
+      ConfigurationData value =
+          applicationConfigManager.getFromTable("not-existing-namespace", "not-existing-key");
+    } catch (CoreException ce) {
+      Assert.assertEquals(ce.getMessage(),
+          "Configuration for namespace not-existing-namespace and key not-existing-key was not found");
+    }
+
+  }
+
+  @Test
+  public void testGetList() {
+    applicationConfigManager.insertIntoTable(TEST_NAMESPACE_2, "key1", "val1");
+    applicationConfigManager.insertIntoTable(TEST_NAMESPACE_2, "key2", "val2");
+    applicationConfigManager.insertIntoTable(TEST_NAMESPACE_2, "key3", "val3");
+
+    Collection<ApplicationConfigEntity> ACElist =
+        applicationConfigManager.getListOfConfigurationByNamespace(TEST_NAMESPACE_2);
+
+    Assert.assertNotNull(ACElist);
+    Assert.assertEquals(ACElist.size(), 3);
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-validation-manager/pom.xml b/openecomp-be/backend/openecomp-sdc-validation-manager/pom.xml
new file mode 100644
index 0000000..4a7b39a
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-validation-manager/pom.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>backend</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>openecomp-sdc-validation-manager</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.openecomp.core</groupId>
+            <artifactId>openecomp-utilities-lib</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-validation-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.core</groupId>
+            <artifactId>openecomp-heat-lib</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <version>6.9.10</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>RELEASE</version>
+            <scope>test</scope>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-translator-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-xml</artifactId>
+            <version>2.7.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.woodstox</groupId>
+            <artifactId>woodstox-core-asl</artifactId>
+            <version>4.4.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-vendor-license-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-validation-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+
+
+
+    
+</project>
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/UploadValidationManager.java b/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/UploadValidationManager.java
new file mode 100644
index 0000000..734771f
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/UploadValidationManager.java
@@ -0,0 +1,34 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.validation;
+
+import org.openecomp.sdc.validation.types.ValidationFileResponse;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public interface UploadValidationManager {
+
+
+  ValidationFileResponse validateFile(String type, InputStream heatFileToUpload) throws IOException;
+
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/errors/ValidationErrorCodes.java b/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/errors/ValidationErrorCodes.java
new file mode 100644
index 0000000..815517c
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/errors/ValidationErrorCodes.java
@@ -0,0 +1,26 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.validation.errors;
+
+public class ValidationErrorCodes {
+  public static final String VALIDATION_INVALID = "VALIDATION_INVALID";
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/errors/ValidationInvalidErrorBuilder.java b/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/errors/ValidationInvalidErrorBuilder.java
new file mode 100644
index 0000000..5e4cb59
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/errors/ValidationInvalidErrorBuilder.java
@@ -0,0 +1,75 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.validation.errors;
+
+import static org.openecomp.sdc.validation.errors.ValidationErrorCodes.VALIDATION_INVALID;
+
+import org.openecomp.sdc.common.errors.BaseErrorBuilder;
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.datatypes.error.ErrorMessage;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * The type Validation invalid error builder.
+ */
+public class ValidationInvalidErrorBuilder extends BaseErrorBuilder {
+  private static final String VALIDATION_INVALID_DETAILED_MSG = "File is invalid: %s";
+  private static final String VALIDATION_INVALID_MSG = "Validated file is invalid";
+
+  /**
+   * Instantiates a new Validation invalid error builder.
+   *
+   * @param errors the errors
+   */
+  public ValidationInvalidErrorBuilder(Map<String, List<ErrorMessage>> errors) {
+    getErrorCodeBuilder().withId(VALIDATION_INVALID);
+    getErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION);
+    getErrorCodeBuilder()
+        .withMessage(String.format(VALIDATION_INVALID_DETAILED_MSG, toString(errors)));
+  }
+
+  /**
+   * Instantiates a new Validation invalid error builder.
+   */
+  public ValidationInvalidErrorBuilder() {
+    getErrorCodeBuilder().withId(VALIDATION_INVALID);
+    getErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION);
+    getErrorCodeBuilder().withMessage(VALIDATION_INVALID_MSG);
+  }
+
+  private String toString(Map<String, List<ErrorMessage>> errors) {
+    StringBuffer sb = new StringBuffer();
+    errors.entrySet().stream()
+        .forEach(entry -> singleErrorToString(sb, entry.getKey(), entry.getValue()));
+    return sb.toString();
+  }
+
+  private void singleErrorToString(StringBuffer sb, String fileName, List<ErrorMessage> errors) {
+    sb.append(System.lineSeparator());
+    sb.append(fileName);
+    sb.append(sb.append(": "));
+    errors.stream().forEach(
+        error -> sb.append(error.getMessage()).append("[").append(error.getLevel()).append("], "));
+  }
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/impl/UploadValidationManagerImpl.java b/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/impl/UploadValidationManagerImpl.java
new file mode 100644
index 0000000..ce0d911
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/impl/UploadValidationManagerImpl.java
@@ -0,0 +1,161 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.validation.impl;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.openecomp.core.utilities.file.FileContentHandler;
+import org.openecomp.core.utilities.file.FileUtils;
+import org.openecomp.core.validation.api.ValidationManager;
+import org.openecomp.core.validation.errors.Messages;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.common.utils.AsdcCommon;
+import org.openecomp.sdc.heat.datatypes.structure.ValidationStructureList;
+import org.openecomp.sdc.heat.services.tree.HeatTreeManager;
+import org.openecomp.sdc.heat.services.tree.HeatTreeManagerUtil;
+import org.openecomp.sdc.validation.UploadValidationManager;
+import org.openecomp.sdc.validation.types.ValidationFileResponse;
+import org.openecomp.sdc.validation.utils.ValidationManagerUtil;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+public class UploadValidationManagerImpl implements UploadValidationManager {
+
+  private static FileContentHandler getFileContentMapFromZip(byte[] uploadFileData)
+      throws IOException, CoreException {
+    ZipEntry zipEntry;
+    List<String> folderList = new ArrayList<>();
+    FileContentHandler mapFileContent = new FileContentHandler();
+    try {
+      ZipInputStream inputZipStream;
+
+      byte[] fileByteContent;
+      String currentEntryName;
+      inputZipStream = new ZipInputStream(new ByteArrayInputStream(uploadFileData));
+
+      while ((zipEntry = inputZipStream.getNextEntry()) != null) {
+        currentEntryName = zipEntry.getName();
+        // else, get the file content (as byte array) and save it in a map.
+        fileByteContent = FileUtils.toByteArray(inputZipStream);
+
+        int index = lastIndexFileSeparatorIndex(currentEntryName);
+        String currSubstringWithoutSeparator =
+            currentEntryName.substring(index + 1, currentEntryName.length());
+        if (index != -1) {
+          if (currSubstringWithoutSeparator.length() > 0) {
+            mapFileContent.addFile(currentEntryName.substring(index + 1, currentEntryName.length()),
+                fileByteContent);
+          } else {
+            folderList.add(currentEntryName);
+          }
+        } else {
+          mapFileContent.addFile(currentEntryName, fileByteContent);
+        }
+      }
+    } catch (RuntimeException exception) {
+      throw new IOException(exception);
+    }
+
+    if (CollectionUtils.isNotEmpty(folderList)) {
+      throw new CoreException((new ErrorCode.ErrorCodeBuilder())
+          .withMessage(Messages.ZIP_SHOULD_NOT_CONTAIN_FOLDERS.getErrorMessage())
+          .withId(Messages.ZIP_SHOULD_NOT_CONTAIN_FOLDERS.getErrorMessage())
+          .withCategory(ErrorCategory.APPLICATION).build());
+
+    }
+
+    return mapFileContent;
+  }
+
+  private static int lastIndexFileSeparatorIndex(String filePath) {
+    int length = filePath.length() - 1;
+
+    for (int i = length; i >= 0; i--) {
+      char currChar = filePath.charAt(i);
+      if (currChar == '/' || currChar == File.separatorChar || currChar == File.pathSeparatorChar) {
+        return i;
+      }
+    }
+    // if we've reached to the start of the string and didn't find file separator - return -1
+    return -1;
+  }
+
+  @Override
+  public ValidationFileResponse validateFile(String type, InputStream fileToValidate)
+      throws IOException {
+
+    ValidationFileResponse validationFileResponse = new ValidationFileResponse();
+
+    HeatTreeManager tree;
+    ValidationStructureList validationStructureList = new ValidationStructureList();
+    if (type.toLowerCase().equals("heat")) {
+      FileContentHandler content = getFileContent(fileToValidate);
+      if (!content.containsFile(AsdcCommon.MANIFEST_NAME)) {
+        throw new CoreException((new ErrorCode.ErrorCodeBuilder())
+            .withMessage(Messages.MANIFEST_NOT_EXIST.getErrorMessage())
+            .withId(Messages.ZIP_SHOULD_NOT_CONTAIN_FOLDERS.getErrorMessage())
+            .withCategory(ErrorCategory.APPLICATION).build());
+      }
+      Map<String, List<org.openecomp.sdc.datatypes.error.ErrorMessage>> errors =
+          validateHeatUploadData(content);
+      tree = HeatTreeManagerUtil.initHeatTreeManager(content);
+      tree.createTree();
+      if (MapUtils.isNotEmpty(errors)) {
+
+
+        tree.addErrors(errors);
+        validationStructureList.setImportStructure(tree.getTree());
+        //validationFileResponse.setStatus(ValidationFileStatus.Failure);
+      } else {
+        //validationFileResponse.setStatus(ValidationFileStatus.Success);
+      }
+    } else {
+      throw new RuntimeException("invalid type:" + type);
+    }
+    validationFileResponse.setValidationData(validationStructureList);
+    return validationFileResponse;
+  }
+
+  private Map<String, List<org.openecomp.sdc.datatypes.error.ErrorMessage>> validateHeatUploadData(
+      FileContentHandler fileContentMap)
+      throws IOException {
+    ValidationManager validationManager =
+        ValidationManagerUtil.initValidationManager(fileContentMap);
+    return validationManager.validate();
+  }
+
+  private FileContentHandler getFileContent(InputStream is) throws IOException {
+    return getFileContentMapFromZip(FileUtils.toByteArray(is));
+
+
+  }
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/types/ValidationFileResponse.java b/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/types/ValidationFileResponse.java
new file mode 100644
index 0000000..ff7f845
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/types/ValidationFileResponse.java
@@ -0,0 +1,36 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.validation.types;
+
+
+import org.openecomp.sdc.heat.datatypes.structure.ValidationStructureList;
+
+public class ValidationFileResponse {
+  private ValidationStructureList validationData;
+
+  public ValidationStructureList getValidationData() {
+    return validationData;
+  }
+
+  public void setValidationData(ValidationStructureList validationData) {
+    this.validationData = validationData;
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/types/ValidationFileStatus.java b/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/types/ValidationFileStatus.java
new file mode 100644
index 0000000..117eb3b
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-validation-manager/src/main/java/org/openecomp/sdc/validation/types/ValidationFileStatus.java
@@ -0,0 +1,26 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.validation.types;
+
+public enum ValidationFileStatus {
+  Success,
+  Failure;
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-license-manager/pom.xml b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/pom.xml
new file mode 100644
index 0000000..a8c8e9a
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/pom.xml
@@ -0,0 +1,103 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+
+    <parent>
+        <artifactId>backend</artifactId>
+        <groupId>org.openecomp.sdc</groupId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>openecomp-sdc-vendor-license-manager</artifactId>
+    <name>openecomp-sdc-vendor-license-manager</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.3.1</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
+            <version>1.14</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-vendor-license-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-all</artifactId>
+            <scope>test</scope>
+            <version>1.10.19</version>
+        </dependency>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <scope>test</scope>
+            <version>6.8.5</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>snakeyaml</artifactId>
+                    <groupId>org.yaml</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+            <version>RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.el</groupId>
+            <artifactId>javax.el-api</artifactId>
+            <version>${javax.el-api.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.web</groupId>
+            <artifactId>javax.el</artifactId>
+            <version>2.2.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.woodstox</groupId>
+            <artifactId>woodstox-core-asl</artifactId>
+            <version>4.4.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-vendor-software-product-manager</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-xml</artifactId>
+            <version>2.7.4</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>${commons.io.version}</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.19.1</version>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/main/java/org/openecomp/sdc/vendorlicense/VendorLicenseManager.java b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/main/java/org/openecomp/sdc/vendorlicense/VendorLicenseManager.java
new file mode 100644
index 0000000..dbe786a
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/main/java/org/openecomp/sdc/vendorlicense/VendorLicenseManager.java
@@ -0,0 +1,115 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorlicense;
+
+import org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity;
+import org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupModel;
+import org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity;
+import org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementModel;
+import org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity;
+import org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity;
+import org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel;
+import org.openecomp.sdc.versioning.dao.types.Version;
+
+import java.util.Collection;
+import java.util.Set;
+
+public interface VendorLicenseManager {
+
+  void checkout(String vendorLicenseModelId, String user);
+
+  void undoCheckout(String vendorLicenseModelId, String user);
+
+  void checkin(String vendorLicenseModelId, String user);
+
+  void submit(String vendorLicenseModelId, String user);
+
+  Collection<VersionedVendorLicenseModel> listVendorLicenseModels(String versionFilter,
+                                                                  String user);
+
+  VendorLicenseModelEntity createVendorLicenseModel(VendorLicenseModelEntity licenseModel,
+                                                    String user);
+
+  void updateVendorLicenseModel(VendorLicenseModelEntity licenseModel, String user);
+
+  VersionedVendorLicenseModel getVendorLicenseModel(String vlmId, Version version, String user);
+
+  void deleteVendorLicenseModel(String vlmId, String user);
+
+
+  Collection<LicenseAgreementEntity> listLicenseAgreements(String vlmId, Version version,
+                                                           String user);
+
+  LicenseAgreementEntity createLicenseAgreement(LicenseAgreementEntity licenseAgreement,
+                                                String user);
+
+  void updateLicenseAgreement(LicenseAgreementEntity licenseAgreement,
+                              Set<String> addedFeatureGroupIds, Set<String> removedFeatureGroupIds,
+                              String user);
+
+  LicenseAgreementModel getLicenseAgreementModel(String vlmId, Version version,
+                                                 String licenseAgreementId, String user);
+
+  void deleteLicenseAgreement(String vlmId, String licenseAgreementId, String user);
+
+
+  Collection<org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity> listFeatureGroups(
+      String vlmId, Version version, String user);
+
+  org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity createFeatureGroup(
+      org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity fg, String user);
+
+  void updateFeatureGroup(org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity featureGroup,
+                          Set<String> addedLicenseKeyGroups, Set<String> removedLicenseKeyGroups,
+                          Set<String> addedEntitlementPools, Set<String> removedEntitlementPools,
+                          String user);
+
+  FeatureGroupModel getFeatureGroupModel(
+      org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity featureGroup, String user);
+
+  void deleteFeatureGroup(org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity featureGroup,
+                          String user);
+
+
+  Collection<EntitlementPoolEntity> listEntitlementPools(String vlmId, Version version,
+                                                         String user);
+
+  EntitlementPoolEntity createEntitlementPool(EntitlementPoolEntity entitlementPool, String user);
+
+  void updateEntitlementPool(EntitlementPoolEntity entitlementPool, String user);
+
+  EntitlementPoolEntity getEntitlementPool(EntitlementPoolEntity entitlementPool, String user);
+
+  void deleteEntitlementPool(EntitlementPoolEntity entitlementPool, String user);
+
+
+  Collection<LicenseKeyGroupEntity> listLicenseKeyGroups(String vlmId, Version version,
+                                                         String user);
+
+  LicenseKeyGroupEntity createLicenseKeyGroup(LicenseKeyGroupEntity licenseKeyGroup, String user);
+
+  void updateLicenseKeyGroup(LicenseKeyGroupEntity licenseKeyGroup, String user);
+
+  LicenseKeyGroupEntity getLicenseKeyGroup(LicenseKeyGroupEntity licenseKeyGroup, String user);
+
+  void deleteLicenseKeyGroup(LicenseKeyGroupEntity licenseKeyGroup, String user);
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/main/java/org/openecomp/sdc/vendorlicense/impl/VendorLicenseManagerImpl.java b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/main/java/org/openecomp/sdc/vendorlicense/impl/VendorLicenseManagerImpl.java
new file mode 100644
index 0000000..b0b088c
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/main/java/org/openecomp/sdc/vendorlicense/impl/VendorLicenseManagerImpl.java
@@ -0,0 +1,558 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorlicense.impl;
+
+import static org.openecomp.sdc.vendorlicense.VendorLicenseConstants
+    .VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE;
+
+import org.openecomp.core.util.UniqueValueUtil;
+import org.openecomp.sdc.vendorlicense.VendorLicenseConstants;
+import org.openecomp.sdc.vendorlicense.VendorLicenseManager;
+import org.openecomp.sdc.vendorlicense.dao.EntitlementPoolDao;
+import org.openecomp.sdc.vendorlicense.dao.EntitlementPoolDaoFactory;
+import org.openecomp.sdc.vendorlicense.dao.FeatureGroupDao;
+import org.openecomp.sdc.vendorlicense.dao.FeatureGroupDaoFactory;
+import org.openecomp.sdc.vendorlicense.dao.LicenseAgreementDaoFactory;
+import org.openecomp.sdc.vendorlicense.dao.LicenseKeyGroupDao;
+import org.openecomp.sdc.vendorlicense.dao.LicenseKeyGroupDaoFactory;
+import org.openecomp.sdc.vendorlicense.dao.VendorLicenseModelDao;
+import org.openecomp.sdc.vendorlicense.dao.VendorLicenseModelDaoFactory;
+import org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity;
+import org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupModel;
+import org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity;
+import org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementModel;
+import org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity;
+import org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity;
+import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacade;
+import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacadeFactory;
+import org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel;
+import org.openecomp.sdc.versioning.VersioningManager;
+import org.openecomp.sdc.versioning.VersioningUtil;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.dao.types.VersionStatus;
+import org.openecomp.sdc.versioning.types.VersionInfo;
+import org.openecomp.sdc.versioning.types.VersionableEntityAction;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class VendorLicenseManagerImpl implements VendorLicenseManager {
+
+  private static final VersioningManager versioningManager =
+      org.openecomp.sdc.versioning.VersioningManagerFactory.getInstance().createInterface();
+  private static final VendorLicenseFacade vendorLicenseFacade =
+      VendorLicenseFacadeFactory.getInstance().createInterface();
+
+  private static final VendorLicenseModelDao
+      vendorLicenseModelDao = VendorLicenseModelDaoFactory.getInstance().createInterface();
+  private static final org.openecomp.sdc.vendorlicense.dao.LicenseAgreementDao
+      licenseAgreementDao = LicenseAgreementDaoFactory.getInstance().createInterface();
+  private static final FeatureGroupDao featureGroupDao =
+      FeatureGroupDaoFactory.getInstance().createInterface();
+  private static final EntitlementPoolDao
+      entitlementPoolDao = EntitlementPoolDaoFactory.getInstance().createInterface();
+  private static final LicenseKeyGroupDao
+      licenseKeyGroupDao = LicenseKeyGroupDaoFactory.getInstance().createInterface();
+
+  private static void sortVlmListByModificationTimeDescOrder(
+      List<VersionedVendorLicenseModel> vendorLicenseModels) {
+    Collections.sort(vendorLicenseModels, new Comparator<VersionedVendorLicenseModel>() {
+      @Override
+      public int compare(VersionedVendorLicenseModel o1, VersionedVendorLicenseModel o2) {
+        return o2.getVendorLicenseModel().getWritetimeMicroSeconds()
+            .compareTo(o1.getVendorLicenseModel().getWritetimeMicroSeconds());
+      }
+    });
+  }
+
+  @Override
+  public void checkout(String vendorLicenseModelId, String user) {
+    Version newVersion = versioningManager
+        .checkout(VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE, vendorLicenseModelId, user);
+    vendorLicenseFacade.updateVlmLastModificationTime(vendorLicenseModelId, newVersion);
+  }
+
+  @Override
+  public void undoCheckout(String vendorLicenseModelId, String user) {
+    Version newVersion = versioningManager
+        .undoCheckout(VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE, vendorLicenseModelId, user);
+    vendorLicenseFacade.updateVlmLastModificationTime(vendorLicenseModelId, newVersion);
+  }
+
+  @Override
+  public void checkin(String vendorLicenseModelId, String user) {
+    vendorLicenseFacade.checkin(vendorLicenseModelId, user);
+  }
+
+  @Override
+  public void submit(String vendorLicenseModelId, String user) {
+    vendorLicenseFacade.submit(vendorLicenseModelId, user);
+  }
+
+  @Override
+  public Collection<VersionedVendorLicenseModel> listVendorLicenseModels(String versionFilter,
+                                                                         String user) {
+    Map<String, VersionInfo> idToVersionsInfo = versioningManager
+        .listEntitiesVersionInfo(VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE, user,
+            VersionableEntityAction.Read);
+
+    List<VersionedVendorLicenseModel> vendorLicenseModels = new ArrayList<>();
+    for (Map.Entry<String, VersionInfo> entry : idToVersionsInfo.entrySet()) {
+      VersionInfo versionInfo = entry.getValue();
+      if (versionFilter != null && versionFilter.equals(VersionStatus.Final.name())) {
+        if (versionInfo.getLatestFinalVersion() == null) {
+          continue;
+        }
+        versionInfo.setActiveVersion(versionInfo.getLatestFinalVersion());
+        versionInfo.setStatus(VersionStatus.Final);
+        versionInfo.setLockingUser(null);
+      }
+
+      VendorLicenseModelEntity
+          vlm = vendorLicenseModelDao
+          .get(new VendorLicenseModelEntity(entry.getKey(), versionInfo.getActiveVersion()));
+      if (vlm != null) {
+        VersionedVendorLicenseModel versionedVlm = new VersionedVendorLicenseModel();
+        versionedVlm.setVendorLicenseModel(vlm);
+        versionedVlm.setVersionInfo(versionInfo);
+        vendorLicenseModels.add(versionedVlm);
+      }
+    }
+
+    sortVlmListByModificationTimeDescOrder(vendorLicenseModels);
+
+    return vendorLicenseModels;
+  }
+
+  @Override
+  public VendorLicenseModelEntity createVendorLicenseModel(
+      VendorLicenseModelEntity vendorLicenseModelEntity, String user) {
+    return vendorLicenseFacade.createVendorLicenseModel(vendorLicenseModelEntity, user);
+  }
+
+  @Override
+  public void updateVendorLicenseModel(VendorLicenseModelEntity vendorLicenseModelEntity,
+                                       String user) {
+    Version activeVersion =
+        getVersionInfo(vendorLicenseModelEntity.getId(), VersionableEntityAction.Write, user)
+            .getActiveVersion();
+    vendorLicenseModelEntity.setVersion(activeVersion);
+
+    String existingVendorName = vendorLicenseModelDao.get(vendorLicenseModelEntity).getVendorName();
+    UniqueValueUtil
+        .updateUniqueValue(VendorLicenseConstants.UniqueValues.VENDOR_NAME, existingVendorName,
+            vendorLicenseModelEntity.getVendorName());
+    vendorLicenseModelDao.update(vendorLicenseModelEntity);
+
+    vendorLicenseFacade
+        .updateVlmLastModificationTime(vendorLicenseModelEntity.getId(), activeVersion);
+  }
+
+  @Override
+  public VersionedVendorLicenseModel getVendorLicenseModel(String vlmId, Version version,
+                                                           String user) {
+    return vendorLicenseFacade.getVendorLicenseModel(vlmId, version, user);
+  }
+
+  @Override
+  public void deleteVendorLicenseModel(String vlmId, String user) {
+    throw new UnsupportedOperationException("Unsupported operation for 1607 release.");
+
+    /*        Version activeVersion = getVersionInfo(vlmId, VersionableEntityAction.Write, user)
+    .getActiveVersion();
+
+        vendorLicenseModelDao.delete(new VendorLicenseModelEntity(vlmId, activeVersion));
+        licenseAgreementDao.deleteAll(new LicenseAgreementEntity(vlmId, activeVersion, null));
+        featureGroupDao.deleteAll(new FeatureGroupEntity(vlmId, activeVersion, null));
+        licenseKeyGroupDao.deleteAll(new LicenseKeyGroupEntity(vlmId, activeVersion, null));
+        entitlementPoolDao.deleteAll(new EntitlementPoolEntity(vlmId, activeVersion, null));*/
+  }
+
+  @Override
+  public Collection<LicenseAgreementEntity> listLicenseAgreements(String vlmId, Version version,
+                                                                  String user) {
+    return licenseAgreementDao.list(new LicenseAgreementEntity(vlmId, VersioningUtil
+        .resolveVersion(version, getVersionInfo(vlmId, VersionableEntityAction.Read, user)), null));
+  }
+
+  @Override
+  public LicenseAgreementEntity createLicenseAgreement(LicenseAgreementEntity licenseAgreement,
+                                                       String user) {
+    return vendorLicenseFacade.createLicenseAgreement(licenseAgreement, user);
+  }
+
+  @Override
+  public void updateLicenseAgreement(LicenseAgreementEntity licenseAgreement,
+                                     Set<String> addedFeatureGroupIds,
+                                     Set<String> removedFeatureGroupIds, String user) {
+    Version activeVersion =
+        getVersionInfo(licenseAgreement.getVendorLicenseModelId(), VersionableEntityAction.Write,
+            user).getActiveVersion();
+    licenseAgreement.setVersion(activeVersion);
+    LicenseAgreementEntity retrieved = licenseAgreementDao.get(licenseAgreement);
+    VersioningUtil
+        .validateEntityExistence(retrieved, licenseAgreement, VendorLicenseModelEntity.ENTITY_TYPE);
+    VersioningUtil.validateContainedEntitiesExistence(
+        new org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity().getEntityType(),
+        removedFeatureGroupIds, retrieved, retrieved.getFeatureGroupIds());
+    VersioningUtil.validateEntitiesExistence(addedFeatureGroupIds,
+        new org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity(
+            licenseAgreement.getVendorLicenseModelId(), activeVersion, null),
+        featureGroupDao, VendorLicenseModelEntity.ENTITY_TYPE);
+
+    UniqueValueUtil.updateUniqueValue(VendorLicenseConstants.UniqueValues.LICENSE_AGREEMENT_NAME,
+        retrieved.getName(), licenseAgreement.getName(), licenseAgreement.getVendorLicenseModelId(),
+        licenseAgreement.getVersion().toString());
+    licenseAgreementDao.updateColumnsAndDeltaFeatureGroupIds(licenseAgreement, addedFeatureGroupIds,
+        removedFeatureGroupIds);
+
+    addFeatureGroupsToLicenseAgreementRef(addedFeatureGroupIds, licenseAgreement);
+    removeFeatureGroupsToLicenseAgreementRef(removedFeatureGroupIds, licenseAgreement);
+
+    vendorLicenseFacade
+        .updateVlmLastModificationTime(licenseAgreement.getVendorLicenseModelId(), activeVersion);
+  }
+
+  @Override
+  public LicenseAgreementModel getLicenseAgreementModel(String vlmId, Version version,
+                                                        String licenseAgreementId, String user) {
+    return vendorLicenseFacade.getLicenseAgreementModel(vlmId, version, licenseAgreementId, user);
+  }
+
+  @Override
+  public void deleteLicenseAgreement(String vlmId, String licenseAgreementId, String user) {
+    Version activeVersion =
+        getVersionInfo(vlmId, VersionableEntityAction.Write, user).getActiveVersion();
+    LicenseAgreementEntity input =
+        new LicenseAgreementEntity(vlmId, activeVersion, licenseAgreementId);
+    LicenseAgreementEntity retrieved = licenseAgreementDao.get(input);
+    VersioningUtil.validateEntityExistence(retrieved, input, VendorLicenseModelEntity.ENTITY_TYPE);
+
+    removeFeatureGroupsToLicenseAgreementRef(retrieved.getFeatureGroupIds(), retrieved);
+
+    licenseAgreementDao.delete(input);
+    UniqueValueUtil.deleteUniqueValue(VendorLicenseConstants.UniqueValues.LICENSE_AGREEMENT_NAME,
+        retrieved.getVendorLicenseModelId(), retrieved.getVersion().toString(),
+        retrieved.getName());
+
+    vendorLicenseFacade
+        .updateVlmLastModificationTime(input.getVendorLicenseModelId(), input.getVersion());
+  }
+
+  @Override
+  public Collection<org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity> listFeatureGroups(
+      String vlmId, Version version,
+      String user) {
+    return featureGroupDao
+        .list(new org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity(vlmId, VersioningUtil
+            .resolveVersion(version, getVersionInfo(vlmId, VersionableEntityAction.Read, user)),
+            null));
+  }
+
+  @Override
+  public org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity createFeatureGroup(
+      org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity featureGroup, String user) {
+    return vendorLicenseFacade.createFeatureGroup(featureGroup, user);
+  }
+
+  @Override
+  public void updateFeatureGroup(
+      org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity featureGroup,
+      Set<String> addedLicenseKeyGroups,
+      Set<String> removedLicenseKeyGroups,
+      Set<String> addedEntitlementPools,
+      Set<String> removedEntitlementPools,
+      String user) {
+    Version activeVersion =
+        getVersionInfo(featureGroup.getVendorLicenseModelId(), VersionableEntityAction.Write, user)
+            .getActiveVersion();
+    featureGroup.setVersion(activeVersion);
+
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity retrieved =
+        featureGroupDao.get(featureGroup);
+    VersioningUtil
+        .validateEntityExistence(retrieved, featureGroup, VendorLicenseModelEntity.ENTITY_TYPE);
+
+    VersioningUtil.validateContainedEntitiesExistence(new LicenseKeyGroupEntity().getEntityType(),
+        removedLicenseKeyGroups, retrieved, retrieved.getLicenseKeyGroupIds());
+    VersioningUtil.validateContainedEntitiesExistence(new EntitlementPoolEntity().getEntityType(),
+        removedEntitlementPools, retrieved, retrieved.getEntitlementPoolIds());
+
+    VersioningUtil.validateEntitiesExistence(addedLicenseKeyGroups,
+        new LicenseKeyGroupEntity(featureGroup.getVendorLicenseModelId(), activeVersion, null),
+        licenseKeyGroupDao, VendorLicenseModelEntity.ENTITY_TYPE);
+    VersioningUtil.validateEntitiesExistence(addedEntitlementPools,
+        new EntitlementPoolEntity(featureGroup.getVendorLicenseModelId(), activeVersion, null),
+        entitlementPoolDao, VendorLicenseModelEntity.ENTITY_TYPE);
+    UniqueValueUtil.updateUniqueValue(VendorLicenseConstants.UniqueValues.FEATURE_GROUP_NAME,
+        retrieved.getName(), featureGroup.getName(), featureGroup.getVendorLicenseModelId(),
+        featureGroup.getVersion().toString());
+
+    addLicenseKeyGroupsToFeatureGroupsRef(addedLicenseKeyGroups, featureGroup);
+    removeLicenseKeyGroupsToFeatureGroupsRef(removedLicenseKeyGroups, featureGroup);
+    addEntitlementPoolsToFeatureGroupsRef(addedEntitlementPools, featureGroup);
+    removeEntitlementPoolsToFeatureGroupsRef(removedEntitlementPools, featureGroup);
+
+    featureGroupDao.updateFeatureGroup(featureGroup, addedEntitlementPools, removedEntitlementPools,
+        addedLicenseKeyGroups, removedLicenseKeyGroups);
+
+    vendorLicenseFacade
+        .updateVlmLastModificationTime(featureGroup.getVendorLicenseModelId(), activeVersion);
+  }
+
+  @Override
+  public FeatureGroupModel getFeatureGroupModel(
+      org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity featureGroup, String user) {
+    return vendorLicenseFacade.getFeatureGroupModel(featureGroup, user);
+  }
+
+  @Override
+  public void deleteFeatureGroup(
+      org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity featureGroup, String user) {
+    Version activeVersion =
+        getVersionInfo(featureGroup.getVendorLicenseModelId(), VersionableEntityAction.Write, user)
+            .getActiveVersion();
+    featureGroup.setVersion(activeVersion);
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity retrieved =
+        featureGroupDao.get(featureGroup);
+    VersioningUtil
+        .validateEntityExistence(retrieved, featureGroup, VendorLicenseModelEntity.ENTITY_TYPE);
+
+    removeLicenseKeyGroupsToFeatureGroupsRef(retrieved.getLicenseKeyGroupIds(), featureGroup);
+    removeEntitlementPoolsToFeatureGroupsRef(retrieved.getEntitlementPoolIds(), featureGroup);
+
+    for (String licenceAgreementId : retrieved.getReferencingLicenseAgreements()) {
+      licenseAgreementDao.removeFeatureGroup(
+          new LicenseAgreementEntity(featureGroup.getVendorLicenseModelId(), activeVersion,
+              licenceAgreementId), featureGroup.getId());
+    }
+
+    featureGroupDao.delete(featureGroup);
+    UniqueValueUtil.deleteUniqueValue(VendorLicenseConstants.UniqueValues.FEATURE_GROUP_NAME,
+        retrieved.getVendorLicenseModelId(), retrieved.getVersion().toString(),
+        retrieved.getName());
+
+    vendorLicenseFacade.updateVlmLastModificationTime(featureGroup.getVendorLicenseModelId(),
+        featureGroup.getVersion());
+  }
+
+  @Override
+  public Collection<EntitlementPoolEntity> listEntitlementPools(String vlmId, Version version,
+                                                                String user) {
+    return vendorLicenseFacade.listEntitlementPools(vlmId, version, user);
+  }
+
+  @Override
+  public EntitlementPoolEntity createEntitlementPool(EntitlementPoolEntity entitlementPool,
+                                                     String user) {
+    return vendorLicenseFacade.createEntitlementPool(entitlementPool, user);
+  }
+
+  @Override
+  public void updateEntitlementPool(EntitlementPoolEntity entitlementPool, String user) {
+    Version activeVersion =
+        getVersionInfo(entitlementPool.getVendorLicenseModelId(), VersionableEntityAction.Write,
+            user).getActiveVersion();
+    vendorLicenseFacade
+        .updateVlmLastModificationTime(entitlementPool.getVendorLicenseModelId(), activeVersion);
+    vendorLicenseFacade.updateEntitlementPool(entitlementPool, user);
+  }
+
+  @Override
+  public EntitlementPoolEntity getEntitlementPool(EntitlementPoolEntity entitlementPool,
+                                                  String user) {
+    entitlementPool.setVersion(VersioningUtil.resolveVersion(entitlementPool.getVersion(),
+        getVersionInfo(entitlementPool.getVendorLicenseModelId(), VersionableEntityAction.Read,
+            user)));
+
+    EntitlementPoolEntity retrieved = entitlementPoolDao.get(entitlementPool);
+    VersioningUtil
+        .validateEntityExistence(retrieved, entitlementPool, VendorLicenseModelEntity.ENTITY_TYPE);
+    return retrieved;
+  }
+
+  @Override
+  public void deleteEntitlementPool(EntitlementPoolEntity entitlementPool, String user) {
+    Version activeVersion =
+        getVersionInfo(entitlementPool.getVendorLicenseModelId(), VersionableEntityAction.Write,
+            user).getActiveVersion();
+    entitlementPool.setVersion(activeVersion);
+
+    EntitlementPoolEntity retrieved = entitlementPoolDao.get(entitlementPool);
+    VersioningUtil
+        .validateEntityExistence(retrieved, entitlementPool, VendorLicenseModelEntity.ENTITY_TYPE);
+
+    for (String referencingFeatureGroupId : retrieved.getReferencingFeatureGroups()) {
+      featureGroupDao.removeEntitlementPool(
+          new org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity(
+              entitlementPool.getVendorLicenseModelId(), activeVersion,
+              referencingFeatureGroupId), entitlementPool.getId());
+    }
+
+    entitlementPoolDao.delete(entitlementPool);
+    UniqueValueUtil.deleteUniqueValue(VendorLicenseConstants.UniqueValues.ENTITLEMENT_POOL_NAME,
+        retrieved.getVendorLicenseModelId(), retrieved.getVersion().toString(),
+        retrieved.getName());
+
+    vendorLicenseFacade.updateVlmLastModificationTime(entitlementPool.getVendorLicenseModelId(),
+        entitlementPool.getVersion());
+  }
+
+  @Override
+  public Collection<LicenseKeyGroupEntity> listLicenseKeyGroups(String vlmId, Version version,
+                                                                String user) {
+    return vendorLicenseFacade.listLicenseKeyGroups(vlmId, version, user);
+  }
+
+  @Override
+  public LicenseKeyGroupEntity createLicenseKeyGroup(LicenseKeyGroupEntity licenseKeyGroup,
+                                                     String user) {
+    return vendorLicenseFacade.createLicenseKeyGroup(licenseKeyGroup, user);
+  }
+
+  @Override
+  public void updateLicenseKeyGroup(LicenseKeyGroupEntity licenseKeyGroup, String user) {
+    Version activeVersion =
+        getVersionInfo(licenseKeyGroup.getVendorLicenseModelId(), VersionableEntityAction.Write,
+            user).getActiveVersion();
+    vendorLicenseFacade
+        .updateVlmLastModificationTime(licenseKeyGroup.getVendorLicenseModelId(), activeVersion);
+
+    vendorLicenseFacade.updateLicenseKeyGroup(licenseKeyGroup, user);
+  }
+
+  @Override
+  public LicenseKeyGroupEntity getLicenseKeyGroup(LicenseKeyGroupEntity licenseKeyGroup,
+                                                  String user) {
+    licenseKeyGroup.setVersion(VersioningUtil.resolveVersion(licenseKeyGroup.getVersion(),
+        getVersionInfo(licenseKeyGroup.getVendorLicenseModelId(), VersionableEntityAction.Read,
+            user)));
+
+    LicenseKeyGroupEntity retrieved = licenseKeyGroupDao.get(licenseKeyGroup);
+    VersioningUtil
+        .validateEntityExistence(retrieved, licenseKeyGroup, VendorLicenseModelEntity.ENTITY_TYPE);
+    return retrieved;
+  }
+
+  @Override
+  public void deleteLicenseKeyGroup(LicenseKeyGroupEntity licenseKeyGroup, String user) {
+    Version activeVersion =
+        getVersionInfo(licenseKeyGroup.getVendorLicenseModelId(), VersionableEntityAction.Write,
+            user).getActiveVersion();
+    licenseKeyGroup.setVersion(activeVersion);
+
+    LicenseKeyGroupEntity retrieved = licenseKeyGroupDao.get(licenseKeyGroup);
+    VersioningUtil
+        .validateEntityExistence(retrieved, licenseKeyGroup, VendorLicenseModelEntity.ENTITY_TYPE);
+
+    licenseKeyGroupDao.delete(licenseKeyGroup);
+    for (String referencingFeatureGroupId : retrieved.getReferencingFeatureGroups()) {
+      featureGroupDao.removeLicenseKeyGroup(
+          new org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity(
+              licenseKeyGroup.getVendorLicenseModelId(), activeVersion,
+              referencingFeatureGroupId), licenseKeyGroup.getId());
+    }
+    UniqueValueUtil.deleteUniqueValue(VendorLicenseConstants.UniqueValues.LICENSE_KEY_GROUP_NAME,
+        retrieved.getVendorLicenseModelId(), retrieved.getVersion().toString(),
+        retrieved.getName());
+
+    vendorLicenseFacade.updateVlmLastModificationTime(licenseKeyGroup.getVendorLicenseModelId(),
+        licenseKeyGroup.getVersion());
+  }
+
+  private void addFeatureGroupsToLicenseAgreementRef(Set<String> featureGroupIds,
+                                                     LicenseAgreementEntity licenseAgreement) {
+    if (featureGroupIds != null) {
+      for (String featureGroupId : featureGroupIds) {
+        featureGroupDao.addReferencingLicenseAgreement(
+            new org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity(
+                licenseAgreement.getVendorLicenseModelId(),
+                licenseAgreement.getVersion(), featureGroupId), licenseAgreement.getId());
+      }
+    }
+  }
+
+  private void removeFeatureGroupsToLicenseAgreementRef(Set<String> featureGroupIds,
+                                                        LicenseAgreementEntity licenseAgreement) {
+    if (featureGroupIds != null) {
+      for (String featureGroupId : featureGroupIds) {
+        featureGroupDao.removeReferencingLicenseAgreement(
+            new org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity(
+                licenseAgreement.getVendorLicenseModelId(),
+                licenseAgreement.getVersion(), featureGroupId), licenseAgreement.getId());
+      }
+    }
+  }
+
+  private void addLicenseKeyGroupsToFeatureGroupsRef(Set<String> licenseKeyGroupIds,
+              org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity featureGroup) {
+    if (licenseKeyGroupIds != null) {
+      for (String licenseKeyGroupId : licenseKeyGroupIds) {
+        licenseKeyGroupDao.addReferencingFeatureGroup(
+            new LicenseKeyGroupEntity(featureGroup.getVendorLicenseModelId(),
+                featureGroup.getVersion(), licenseKeyGroupId), featureGroup.getId());
+      }
+    }
+  }
+
+  private void removeLicenseKeyGroupsToFeatureGroupsRef(Set<String> licenseKeyGroupIds,
+               org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity featureGroup) {
+    if (licenseKeyGroupIds != null) {
+      for (String licenseKeyGroupId : licenseKeyGroupIds) {
+        licenseKeyGroupDao.removeReferencingFeatureGroup(
+            new LicenseKeyGroupEntity(featureGroup.getVendorLicenseModelId(),
+                featureGroup.getVersion(), licenseKeyGroupId), featureGroup.getId());
+      }
+    }
+  }
+
+  private void addEntitlementPoolsToFeatureGroupsRef(Set<String> entitlementPoolIds,
+              org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity featureGroup) {
+    if (entitlementPoolIds != null) {
+      for (String entitlementPoolId : entitlementPoolIds) {
+        entitlementPoolDao.addReferencingFeatureGroup(
+            new EntitlementPoolEntity(featureGroup.getVendorLicenseModelId(),
+                featureGroup.getVersion(), entitlementPoolId), featureGroup.getId());
+      }
+    }
+  }
+
+  private void removeEntitlementPoolsToFeatureGroupsRef(Set<String> entitlementPoolIds,
+               org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity featureGroup) {
+    if (entitlementPoolIds != null) {
+      for (String entitlementPoolId : entitlementPoolIds) {
+        entitlementPoolDao.removeReferencingFeatureGroup(
+            new EntitlementPoolEntity(featureGroup.getVendorLicenseModelId(),
+                featureGroup.getVersion(), entitlementPoolId), featureGroup.getId());
+      }
+    }
+  }
+
+  private VersionInfo getVersionInfo(String vendorLicenseModelId, VersionableEntityAction action,
+                                     String user) {
+    return vendorLicenseFacade.getVersionInfo(vendorLicenseModelId, action, user);
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/ArtifactTestUtils.java b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/ArtifactTestUtils.java
new file mode 100644
index 0000000..60fe06a
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/ArtifactTestUtils.java
@@ -0,0 +1,252 @@
+package org.openecomp.sdc.vendorlicense;
+
+import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacade;
+import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacadeFactory;
+import org.openecomp.sdc.vendorlicense.impl.VendorLicenseManagerImpl;
+import org.openecomp.sdc.vendorlicense.licenseartifacts.VendorLicenseArtifactsService;
+import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.impl.VendorSoftwareProductManagerImpl;
+import org.openecomp.sdc.versioning.VersioningManager;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.types.VersionInfo;
+import org.openecomp.sdc.versioning.types.VersionableEntityAction;
+import org.openecomp.core.utilities.CommonMethods;
+import org.testng.annotations.BeforeMethod;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import static org.openecomp.sdc.vendorlicense.VendorLicenseConstants.VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE;
+
+public class ArtifactTestUtils {
+
+    protected static final Version VERSION01 = new Version(0, 1);
+    protected static final String USER1 = "baseTest_TestUser1";
+    protected static VendorLicenseManager vendorLicenseManager = new VendorLicenseManagerImpl();
+    protected static VendorSoftwareProductManager vendorSoftwareProductManager = new VendorSoftwareProductManagerImpl();
+    protected static VendorLicenseFacade vendorLicenseFacade = VendorLicenseFacadeFactory.getInstance().createInterface();
+    private static final VersioningManager versioningManager = org.openecomp.sdc.versioning.VersioningManagerFactory
+        .getInstance().createInterface();
+    protected static VendorLicenseArtifactsService vendorLicenseArtifactsService = VendorLicenseArtifactServiceFactory
+        .getInstance().createInterface();
+
+    protected static Version currVersion;
+
+    protected String vlm1Id;
+    protected String vlm2Id;
+
+    protected String ep11Id;
+    protected String ep12Id;
+    protected String lkg11Id;
+    protected String lkg12Id;
+    protected String lkg13Id;
+    protected String fg11Id;
+    protected String fg12Id;
+    protected String la11Id;
+
+    protected String ep21Id;
+    protected String ep22Id;
+    protected String lkg21Id;
+    protected String lkg22Id;
+    protected String fg21Id;
+    protected String fg22Id;
+    protected String la21Id;
+    protected String la22Id;
+
+    protected org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity fg11;
+    protected org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity fg12;
+    protected org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity ep11;
+    protected org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity ep12;
+    protected org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity lkg11;
+    protected org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity lkg12;
+    protected org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity lkg13;
+
+    protected org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity fg21;
+    protected org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity fg22;
+    protected org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity ep21;
+    protected org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity ep22;
+    protected org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity lkg21;
+    protected org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity lkg22;
+
+    protected VspDetails vspDetails;
+    protected VspDetails vsp2;
+
+
+    @BeforeMethod
+    public void setUp() {
+        vlm1Id = vendorLicenseFacade.createVendorLicenseModel(VendorLicenseModelTest.createVendorLicenseModel("vlm1 name" + CommonMethods.nextUuId(), "vlm1Id desc", "icon1"), USER1).getId();
+        vlm2Id = vendorLicenseFacade.createVendorLicenseModel(VendorLicenseModelTest.createVendorLicenseModel("vlm2 name" + CommonMethods.nextUuId(), "vlm2Id desc", "icon2"), USER1).getId();
+
+
+        Set<org.openecomp.sdc.vendorlicense.dao.types.OperationalScope> opScopeChoices = new HashSet<>();
+        opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Other);
+        opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Data_Center);
+        opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Network_Wide);
+
+        ep11 = EntitlementPoolTest.createEntitlementPool(vlm1Id, VERSION01, "EP1_" + CommonMethods.nextUuId(), "EP1 dec", 80, org.openecomp.sdc.vendorlicense.dao.types.ThresholdUnit.Absolute, org.openecomp.sdc.vendorlicense.dao.types.EntitlementMetric.Core, null, "inc1", org.openecomp.sdc.vendorlicense.dao.types.AggregationFunction.Other, "agg func1", opScopeChoices, null, org.openecomp.sdc.vendorlicense.dao.types.EntitlementTime.Hour, null, "sku1");
+        ep11Id = vendorLicenseManager.createEntitlementPool(ep11, USER1).getId();
+        ep12 = EntitlementPoolTest.createEntitlementPool(vlm1Id, VERSION01, "EP2_" + CommonMethods.nextUuId(), "EP2 dec", 70, org.openecomp.sdc.vendorlicense.dao.types.ThresholdUnit.Absolute, org.openecomp.sdc.vendorlicense.dao.types.EntitlementMetric.Other, "e metric2", "inc2", org.openecomp.sdc.vendorlicense.dao.types.AggregationFunction.Average, null, opScopeChoices, "op scope2", org.openecomp.sdc.vendorlicense.dao.types.EntitlementTime.Other, "time2", "sku2");
+        ep12Id = vendorLicenseManager.createEntitlementPool(ep12, USER1).getId();
+
+        Set<org.openecomp.sdc.vendorlicense.dao.types.OperationalScope> opScopeChoicesLKG = new HashSet<>();
+        opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.CPU);
+        opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.VM);
+        opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Availability_Zone);
+        opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Data_Center);
+
+        lkg11 = LicenseKeyGroupTest.createLicenseKeyGroup(vlm1Id, VERSION01, "LKG1", "LKG1 dec", org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyType.One_Time, new org.openecomp.sdc.vendorlicense.dao.types.MultiChoiceOrOther<>(opScopeChoicesLKG, null));
+        lkg11Id = vendorLicenseManager.createLicenseKeyGroup(lkg11, USER1).getId();
+        lkg11.setId(lkg11Id);
+
+        lkg12 = LicenseKeyGroupTest.createLicenseKeyGroup(vlm1Id, VERSION01, "LKG2", "LKG2 dec", org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyType.Unique, new org.openecomp.sdc.vendorlicense.dao.types.MultiChoiceOrOther<>(opScopeChoicesLKG, null));
+        lkg12Id = vendorLicenseManager.createLicenseKeyGroup(lkg12, USER1).getId();
+        lkg12.setId(lkg11Id);
+
+        lkg13 = LicenseKeyGroupTest.createLicenseKeyGroup(vlm1Id, VERSION01, "LKG3", "LKG3 dec", org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyType.Universal, new org.openecomp.sdc.vendorlicense.dao.types.MultiChoiceOrOther<>(opScopeChoicesLKG, null));
+        lkg13Id = vendorLicenseManager.createLicenseKeyGroup(lkg13, USER1).getId();
+        lkg13.setId(lkg13Id);
+
+        fg11 = LicenseAgreementTest.createFeatureGroup(vlm1Id, VERSION01, "fg11", "FG1", "FG1 desc", CommonMethods.toSingleElementSet(ep11Id), CommonMethods.toSingleElementSet(lkg11Id));
+        fg11Id = vendorLicenseManager.createFeatureGroup(fg11, USER1).getId();
+
+        fg12 = LicenseAgreementTest.createFeatureGroup(vlm1Id, VERSION01, "fg2", "FG2", "FG2 desc", CommonMethods.toSingleElementSet(ep12Id), CommonMethods.toSingleElementSet(lkg12Id));
+        fg12Id = vendorLicenseManager.createFeatureGroup(fg12, USER1).getId();
+
+
+        String requirementsAndConstrains1 = "Requirements And Constraints1";
+        org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity
+            la1 = LicenseAgreementTest.createLicenseAgreement(vlm1Id, VERSION01, null, "LA1", "LA1 desc", requirementsAndConstrains1, new org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther<>(
+            org.openecomp.sdc.vendorlicense.dao.types.LicenseTerm.Unlimited, null), fg11Id);
+        la11Id = vendorLicenseManager.createLicenseAgreement(la1, USER1).getId();
+
+        List<String> fgs = new ArrayList<>();
+        fgs.add(fg11Id);
+        createTwoFinalVersionsForVLM(vlm1Id);
+        VersionInfo versionInfo = vendorLicenseFacade.getVersionInfo(vlm1Id, VersionableEntityAction.Read, "");
+        vspDetails = createVspDetails(null, null, "VSP1_" + CommonMethods.nextUuId(), "Test-vsp", "vendorName", vlm1Id, "icon", "category", "subCategory", la11Id, fgs);
+
+        List<Version> finalVersions = versionInfo.getFinalVersions();
+        Version finalVersion = finalVersions.get(1);
+
+        vspDetails.setVlmVersion(finalVersion);
+
+        vspDetails = vendorSoftwareProductManager.createNewVsp(vspDetails, USER1);
+
+    }
+
+    private void createTwoFinalVersionsForVLM(String vlm1Id) {
+        versioningManager.checkin(VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE, vlm1Id, USER1, "desc1");
+        versioningManager.checkout(VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE, vlm1Id, USER1);
+        versioningManager.checkin(VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE, vlm1Id, USER1, "desc1");
+        vendorLicenseFacade.submit(vlm1Id, USER1);
+        versioningManager.checkout(VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE, vlm1Id, USER1);
+        versioningManager.checkin(VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE, vlm1Id, USER1, "desc2");
+        vendorLicenseFacade.submit(vlm1Id, USER1);
+
+    }
+
+    protected void createThirdFinalVersionForVLMChangeEpLKGInSome(String vlm1Id, org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity ep, org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity lkg) {
+        versioningManager.checkout(VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE, vlm1Id, USER1);
+        vendorLicenseManager.updateEntitlementPool(ep, USER1);
+        vendorLicenseManager.updateLicenseKeyGroup(lkg, USER1);
+        versioningManager.checkin(VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE, vlm1Id, USER1, "desc1");
+        vendorLicenseFacade.submit(vlm1Id, USER1);
+
+    }
+
+
+    protected void setVlm2FirstVersion() {
+        Set<org.openecomp.sdc.vendorlicense.dao.types.OperationalScope> opScopeChoices = new HashSet<>();
+        opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Other);
+        opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Data_Center);
+        opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Network_Wide);
+
+        Set<org.openecomp.sdc.vendorlicense.dao.types.OperationalScope> opScopeChoicesLKG = new HashSet<>();
+        opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.CPU);
+        opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.VM);
+        opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Availability_Zone);
+        opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Data_Center);
+
+        ep21 = EntitlementPoolTest.createEntitlementPool(vlm2Id, VERSION01, "EP21", "EP21 dec", 80, org.openecomp.sdc.vendorlicense.dao.types.ThresholdUnit.Absolute, org.openecomp.sdc.vendorlicense.dao.types.EntitlementMetric.Core, null, "inc21", org.openecomp.sdc.vendorlicense.dao.types.AggregationFunction.Other, "agg func21", opScopeChoices, null, org.openecomp.sdc.vendorlicense.dao.types.EntitlementTime.Hour, null, "sku21");
+        ep21Id = vendorLicenseManager.createEntitlementPool(ep21, USER1).getId();
+
+        lkg21 = LicenseKeyGroupTest.createLicenseKeyGroup(vlm2Id, VERSION01, "LKG21", "LKG21 dec", org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyType.One_Time, new org.openecomp.sdc.vendorlicense.dao.types.MultiChoiceOrOther<>(opScopeChoicesLKG, null));
+        lkg21Id = vendorLicenseManager.createLicenseKeyGroup(lkg21, USER1).getId();
+        lkg21.setId(lkg21Id);
+
+        fg21 = LicenseAgreementTest.createFeatureGroup(vlm2Id, VERSION01, "fg21", "FG21", "FG21 desc", CommonMethods.toSingleElementSet(ep21Id), CommonMethods.toSingleElementSet(lkg21Id));
+        fg21Id = vendorLicenseManager.createFeatureGroup(fg21, USER1).getId();
+
+        String requirementsAndConstrains1 = "Requirements And Constraints21";
+        org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity
+            la2 = LicenseAgreementTest.createLicenseAgreement(vlm2Id, VERSION01, null, "LA21", "LA21 desc", requirementsAndConstrains1, new org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther<>(
+            org.openecomp.sdc.vendorlicense.dao.types.LicenseTerm.Unlimited, null), fg21Id);
+        la21Id = vendorLicenseManager.createLicenseAgreement(la2, USER1).getId();
+
+//        setValuesForVlm(VERSION01, ep21, ep21Id, lkg21, lkg21Id, fg21, fg21Id, la21Id, 1);
+
+        vendorLicenseManager.checkin(vlm2Id, USER1);
+        currVersion = versioningManager.submit(VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE, vlm2Id, USER1, null);
+
+        List<String> fgs = new ArrayList<>();
+        fgs.add(fg21Id);
+        vsp2 = createVspDetails(null, null, "VSP2_" + CommonMethods.nextUuId(), "Test-vsp", "vendorName", vlm2Id, "icon", "category", "subCategory", la21Id, fgs);
+        vsp2 = vendorSoftwareProductManager.createNewVsp(vsp2, USER1);
+    }
+
+    protected void setVlm2SecondVersion() {
+        vendorLicenseManager.checkout(vlm2Id, USER1);
+
+        Set<org.openecomp.sdc.vendorlicense.dao.types.OperationalScope> opScopeChoices = new HashSet<>();
+        opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Other);
+        opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Data_Center);
+        opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Network_Wide);
+
+        Set<org.openecomp.sdc.vendorlicense.dao.types.OperationalScope> opScopeChoicesLKG = new HashSet<>();
+        opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.CPU);
+        opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.VM);
+        opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Availability_Zone);
+        opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Data_Center);
+
+        ep22 = EntitlementPoolTest.createEntitlementPool(vlm2Id, currVersion, "EP22", "EP22 dec", 80, org.openecomp.sdc.vendorlicense.dao.types.ThresholdUnit.Absolute, org.openecomp.sdc.vendorlicense.dao.types.EntitlementMetric.Core, null, "inc22", org.openecomp.sdc.vendorlicense.dao.types.AggregationFunction.Other, "agg func22", opScopeChoices, null, org.openecomp.sdc.vendorlicense.dao.types.EntitlementTime.Hour, null, "sku22");
+        ep22Id = vendorLicenseManager.createEntitlementPool(ep22, USER1).getId();
+
+        lkg22 = LicenseKeyGroupTest.createLicenseKeyGroup(vlm2Id, currVersion, "LKG22", "LKG22 dec", org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyType.One_Time, new org.openecomp.sdc.vendorlicense.dao.types.MultiChoiceOrOther<>(opScopeChoicesLKG, null));
+        lkg22Id = vendorLicenseManager.createLicenseKeyGroup(lkg22, USER1).getId();
+        lkg22.setId(lkg22Id);
+
+        fg22 = LicenseAgreementTest.createFeatureGroup(vlm2Id, currVersion, "fg22", "FG22", "FG22 desc", CommonMethods.toSingleElementSet(ep22Id), CommonMethods.toSingleElementSet(lkg22Id));
+        fg22Id = vendorLicenseManager.createFeatureGroup(fg22, USER1).getId();
+
+        String requirementsAndConstrains1 = "Requirements And Constraints22";
+        org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity
+            la2 = LicenseAgreementTest.createLicenseAgreement(vlm2Id, currVersion, null, "LA22", "LA22 desc", requirementsAndConstrains1, new org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther<>(
+            org.openecomp.sdc.vendorlicense.dao.types.LicenseTerm.Unlimited, null), fg22Id);
+        la22Id = vendorLicenseManager.createLicenseAgreement(la2, USER1).getId();
+
+//        setValuesForVlm(currVersion, ep22, ep22Id, lkg22, lkg22Id, fg22, fg22Id, la22Id, 2);
+
+        vendorLicenseManager.checkin(vlm2Id, USER1);
+        currVersion = versioningManager.submit(VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE, vlm2Id, USER1, null);
+    }
+
+    protected static VspDetails createVspDetails(String id, Version version, String name, String desc, String vendorName, String vlm, String icon, String category, String subCategory, String licenseAgreement, List<String> featureGroups) {
+        VspDetails vspDetails = new VspDetails(id, version);
+        vspDetails.setName(name);
+        vspDetails.setDescription(desc);
+        vspDetails.setIcon(icon);
+        vspDetails.setCategory(category);
+        vspDetails.setSubCategory(subCategory);
+        vspDetails.setVendorName(vendorName);
+        vspDetails.setVendorId(vlm);
+        vspDetails.setLicenseAgreement(licenseAgreement);
+        vspDetails.setFeatureGroups(featureGroups);
+        return vspDetails;
+    }
+
+
+}
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/EntitlementPoolTest.java b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/EntitlementPoolTest.java
new file mode 100644
index 0000000..0c05fee
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/EntitlementPoolTest.java
@@ -0,0 +1,275 @@
+package org.openecomp.sdc.vendorlicense;
+
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.vendorlicense.dao.EntitlementPoolDao;
+import org.openecomp.sdc.vendorlicense.dao.EntitlementPoolDaoFactory;
+import org.openecomp.sdc.vendorlicense.impl.VendorLicenseManagerImpl;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.errors.VersioningErrorCodes;
+import org.openecomp.core.util.UniqueValueUtil;
+import org.openecomp.core.utilities.CommonMethods;
+
+import org.openecomp.sdc.vendorlicense.dao.types.AggregationFunction;
+import org.openecomp.sdc.vendorlicense.dao.types.EntitlementMetric;
+import org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity;
+import org.openecomp.sdc.vendorlicense.dao.types.EntitlementTime;
+import org.openecomp.sdc.vendorlicense.dao.types.OperationalScope;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+public class EntitlementPoolTest {
+
+  private static final String USER1 = "epTestUser1";
+  private static final String USER2 = "epTestUser2";
+  private static final String EP1_V01_DESC = "EP1 desc";
+  private static final Version VERSION01 = new Version(0, 1);
+  private static final Version VERSION03 = new Version(0, 3);
+  private static final String EP1_NAME = "EP1 name";
+  private static final String EP2_NAME = "EP2 name";
+
+  private static VendorLicenseManager vendorLicenseManager = new VendorLicenseManagerImpl();
+  private static EntitlementPoolDao entitlementPoolDao;
+
+  private static String vlm1Id;
+  private static String vlm2Id;
+  private static String ep1Id;
+  private static String ep2Id;
+
+  public static EntitlementPoolEntity createEntitlementPool(String vlmId, Version version,
+                                                            String name, String desc, int threshold,
+                                                            org.openecomp.sdc.vendorlicense.dao.types.ThresholdUnit thresholdUnit,
+                                                            EntitlementMetric entitlementMetricChoice,
+                                                            String entitlementMetricOther,
+                                                            String increments,
+                                                            AggregationFunction aggregationFunctionChoice,
+                                                            String aggregationFunctionOther,
+                                                            Set<OperationalScope> operationalScopeChoices,
+                                                            String operationalScopeOther,
+                                                            EntitlementTime timeChoice,
+                                                            String timeOther, String sku) {
+    EntitlementPoolEntity entitlementPool = new EntitlementPoolEntity();
+    entitlementPool.setVendorLicenseModelId(vlmId);
+    entitlementPool.setVersion(version);
+    entitlementPool.setName(name);
+    entitlementPool.setDescription(desc);
+    entitlementPool.setThresholdValue(threshold);
+    entitlementPool.setThresholdUnit(thresholdUnit);
+    entitlementPool
+        .setEntitlementMetric(new org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther<>(entitlementMetricChoice, entitlementMetricOther));
+    entitlementPool.setIncrements(increments);
+    entitlementPool.setAggregationFunction(
+        new org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther<>(aggregationFunctionChoice, aggregationFunctionOther));
+    entitlementPool.setOperationalScope(
+        new org.openecomp.sdc.vendorlicense.dao.types.MultiChoiceOrOther<>(operationalScopeChoices, operationalScopeOther));
+    entitlementPool.setTime(new org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther<>(timeChoice, timeOther));
+    entitlementPool.setManufacturerReferenceNumber(sku);
+    return entitlementPool;
+  }
+
+  private static void assertEntitlementPoolsEquals(EntitlementPoolEntity actual,
+                                                   EntitlementPoolEntity expected) {
+    Assert.assertEquals(actual.getVendorLicenseModelId(), expected.getVendorLicenseModelId());
+    Assert.assertEquals(actual.getVersion(), expected.getVersion());
+    Assert.assertEquals(actual.getId(), expected.getId());
+    Assert.assertEquals(actual.getName(), expected.getName());
+    Assert.assertEquals(actual.getDescription(), expected.getDescription());
+    Assert.assertEquals(actual.getThresholdValue(), expected.getThresholdValue());
+    Assert.assertEquals(actual.getThresholdUnit(), expected.getThresholdUnit());
+    Assert.assertEquals(actual.getEntitlementMetric(), expected.getEntitlementMetric());
+    Assert.assertEquals(actual.getIncrements(), expected.getIncrements());
+    Assert.assertEquals(actual.getAggregationFunction(), expected.getAggregationFunction());
+    Assert.assertEquals(actual.getOperationalScope(), expected.getOperationalScope());
+    Assert.assertEquals(actual.getTime(), expected.getTime());
+    Assert.assertEquals(actual.getManufacturerReferenceNumber(),
+        expected.getManufacturerReferenceNumber());
+  }
+
+  @BeforeClass
+  private void init() {
+    entitlementPoolDao = EntitlementPoolDaoFactory.getInstance().createInterface();
+    vlm1Id = vendorLicenseManager.createVendorLicenseModel(VendorLicenseModelTest
+            .createVendorLicenseModel("vendor1 name " + CommonMethods.nextUuId(), "vlm1 dec", "icon1"),
+        USER1).getId();
+    vlm2Id = vendorLicenseManager.createVendorLicenseModel(VendorLicenseModelTest
+            .createVendorLicenseModel("vendor2 name " + CommonMethods.nextUuId(), "vlm2 dec", "icon2"),
+        USER1).getId();
+  }
+
+  @Test
+  public void emptyListTest() {
+    Collection<EntitlementPoolEntity> entitlementPools =
+        vendorLicenseManager.listEntitlementPools(vlm1Id, null, USER1);
+    Assert.assertEquals(entitlementPools.size(), 0);
+  }
+
+  @Test(dependsOnMethods = "emptyListTest")
+  public void createTest() {
+    ep1Id = testCreate(vlm1Id, EP1_NAME);
+
+    Set<OperationalScope> opScopeChoices;
+    opScopeChoices = new HashSet<>();
+    opScopeChoices.add(OperationalScope.Core);
+    opScopeChoices.add(OperationalScope.CPU);
+    opScopeChoices.add(OperationalScope.Network_Wide);
+    EntitlementPoolEntity ep2 =
+        createEntitlementPool(vlm1Id, null, EP2_NAME, "EP2 dec", 70, org.openecomp.sdc.vendorlicense.dao.types.ThresholdUnit.Absolute,
+            EntitlementMetric.Other, "e metric2", "inc2", AggregationFunction.Average, null,
+            opScopeChoices, null, EntitlementTime.Other, "time2", "sku2");
+    ep2Id = vendorLicenseManager.createEntitlementPool(ep2, USER1).getId();
+    ep2.setId(ep2Id);
+  }
+
+  private String testCreate(String vlmId, String name) {
+    Set<OperationalScope> opScopeChoices = new HashSet<>();
+    opScopeChoices.add(OperationalScope.Other);
+    EntitlementPoolEntity ep1 =
+        createEntitlementPool(vlmId, null, name, EP1_V01_DESC, 80, org.openecomp.sdc.vendorlicense.dao.types.ThresholdUnit.Percentage,
+            EntitlementMetric.Core, null, "inc1", AggregationFunction.Other, "agg func1",
+            opScopeChoices, "op scope1", EntitlementTime.Other, "time1", "sku1");
+    String ep1Id = vendorLicenseManager.createEntitlementPool(ep1, USER1).getId();
+    ep1.setId(ep1Id);
+
+    EntitlementPoolEntity loadedEp1 = entitlementPoolDao.get(ep1);
+    Assert.assertTrue(loadedEp1.equals(ep1));
+    return ep1Id;
+  }
+
+  @Test(dependsOnMethods = {"createTest"})
+  public void testCreateWithExistingName_negative() {
+    testCreateWithExistingName_negative(vlm1Id, EP1_NAME);
+  }
+
+  @Test(dependsOnMethods = {"createTest"})
+  public void testCreateWithExistingNameUnderOtherVlm() {
+    testCreate(vlm2Id, EP1_NAME);
+  }
+
+  @Test(dependsOnMethods = {"testCreateWithExistingName_negative"})
+  public void updateAndGetTest() {
+    EntitlementPoolEntity emptyEp1 = new EntitlementPoolEntity(vlm1Id, VERSION01, ep1Id);
+
+    EntitlementPoolEntity ep1 = entitlementPoolDao.get(emptyEp1);
+    ep1.setEntitlementMetric(new org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther<>(EntitlementMetric.Other, "e metric1 updated"));
+    ep1.setAggregationFunction(new org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther<>(AggregationFunction.Other, "agg func1 updated"));
+
+    vendorLicenseManager.updateEntitlementPool(ep1, USER1);
+
+    EntitlementPoolEntity loadedEp1 = vendorLicenseManager.getEntitlementPool(emptyEp1, USER1);
+    assertEntitlementPoolsEquals(loadedEp1, ep1);
+  }
+
+  @Test(dependsOnMethods = {"updateAndGetTest"})
+  public void testGetNonExistingVersion_negative() {
+    try {
+      vendorLicenseManager
+          .getEntitlementPool(new EntitlementPoolEntity(vlm1Id, new Version(48, 83), ep1Id), USER1);
+      Assert.assertTrue(false);
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), VersioningErrorCodes.REQUESTED_VERSION_INVALID);
+    }
+  }
+
+  @Test(dependsOnMethods = {"updateAndGetTest"})
+  public void testGetOtherUserCandidateVersion_negative() {
+    vendorLicenseManager.checkin(vlm1Id, USER1);
+    vendorLicenseManager.checkout(vlm1Id, USER2);
+    try {
+      vendorLicenseManager
+          .getEntitlementPool(new EntitlementPoolEntity(vlm1Id, new Version(0, 2), ep1Id), USER1);
+      Assert.assertTrue(false);
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), VersioningErrorCodes.REQUESTED_VERSION_INVALID);
+    }
+  }
+
+  @Test(dependsOnMethods = {"testGetOtherUserCandidateVersion_negative"})
+  public void testGetCandidateVersion() {
+    EntitlementPoolEntity ep = new EntitlementPoolEntity(vlm1Id, new Version(0, 2), ep1Id);
+    ep.setDescription("updated!");
+    vendorLicenseManager.updateEntitlementPool(ep, USER2);
+
+    EntitlementPoolEntity actualEp = vendorLicenseManager.getEntitlementPool(ep, USER2);
+    EntitlementPoolEntity expectedEp = entitlementPoolDao.get(ep);
+
+    Assert.assertEquals(actualEp.getDescription(), ep.getDescription());
+    assertEntitlementPoolsEquals(actualEp, expectedEp);
+  }
+
+  @Test(dependsOnMethods = {"testGetCandidateVersion"})
+  public void testGetOldVersion() {
+    vendorLicenseManager.checkin(vlm1Id, USER2);
+    EntitlementPoolEntity actualEp = vendorLicenseManager
+        .getEntitlementPool(new EntitlementPoolEntity(vlm1Id, new Version(0, 1), ep1Id), USER2);
+    Assert.assertEquals(actualEp.getDescription(), EP1_V01_DESC);
+  }
+
+  @Test(dependsOnMethods = {"testGetOldVersion"})
+  public void listTest() {
+    Collection<EntitlementPoolEntity> loadedEps =
+        vendorLicenseManager.listEntitlementPools(vlm1Id, null, USER1);
+    Assert.assertEquals(loadedEps.size(), 2);
+
+    int existingCounter = 0;
+    for (EntitlementPoolEntity loadedEp : loadedEps) {
+      if (ep2Id.equals(loadedEp.getId()) || ep1Id.equals(loadedEp.getId())) {
+        existingCounter++;
+      }
+    }
+
+    Assert.assertEquals(existingCounter, 2);
+  }
+
+  @Test(dependsOnMethods = {"listTest"})
+  public void deleteTest() {
+    vendorLicenseManager.checkout(vlm1Id, USER1);
+    EntitlementPoolEntity emptyEp1 = new EntitlementPoolEntity(vlm1Id, null, ep1Id);
+    vendorLicenseManager.deleteEntitlementPool(emptyEp1, USER1);
+
+    emptyEp1.setVersion(VERSION03);
+    EntitlementPoolEntity loadedEp1 = entitlementPoolDao.get(emptyEp1);
+    Assert.assertEquals(loadedEp1, null);
+
+    Collection<EntitlementPoolEntity> loadedEps =
+        entitlementPoolDao.list(new EntitlementPoolEntity(vlm1Id, VERSION03, null));
+    Assert.assertEquals(loadedEps.size(), 1);
+    Assert.assertEquals(loadedEps.iterator().next().getId(), ep2Id);
+  }
+
+  @Test(dependsOnMethods = "deleteTest")
+  public void listOldVersionTest() {
+    Collection<EntitlementPoolEntity> loadedEps =
+        vendorLicenseManager.listEntitlementPools(vlm1Id, VERSION01, USER1);
+    Assert.assertEquals(loadedEps.size(), 2);
+  }
+
+  @Test(dependsOnMethods = "deleteTest")
+  public void testCreateWithRemovedName() {
+    testCreate(vlm1Id, EP1_NAME);
+  }
+
+  @Test(dependsOnMethods = "deleteTest")
+  public void testCreateWithExistingNameAfterCheckout_negative() {
+    testCreateWithExistingName_negative(vlm1Id, EP2_NAME);
+  }
+
+  private void testCreateWithExistingName_negative(String vlmId, String epName) {
+    try {
+      EntitlementPoolEntity ep1 =
+          createEntitlementPool(vlmId, null, epName, EP1_V01_DESC, 80, org.openecomp.sdc.vendorlicense.dao.types.ThresholdUnit.Percentage,
+              EntitlementMetric.Core, null, "inc1", AggregationFunction.Other, "agg func1",
+              Collections.singleton(OperationalScope.Other), "op scope1", EntitlementTime.Other,
+              "time1", "sku1");
+      vendorLicenseManager.createEntitlementPool(ep1, USER1).getId();
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), UniqueValueUtil.UNIQUE_VALUE_VIOLATION);
+    }
+  }
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/FeatureGroupTest.java b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/FeatureGroupTest.java
new file mode 100644
index 0000000..c2381dd
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/FeatureGroupTest.java
@@ -0,0 +1,202 @@
+package org.openecomp.sdc.vendorlicense;
+
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacade;
+import org.openecomp.sdc.vendorlicense.impl.VendorLicenseManagerImpl;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.core.util.UniqueValueUtil;
+import org.openecomp.core.utilities.CommonMethods;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.util.*;
+
+public class FeatureGroupTest {
+  protected static final Version VERSION01 = new Version(0, 1);
+  protected static final String USER1 = "FeatureGroupTest_User1";
+  protected static VendorLicenseManager vendorLicenseManager = new VendorLicenseManagerImpl();
+  protected static VendorLicenseFacade vendorLicenseFacade = org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacadeFactory
+      .getInstance().createInterface();
+
+
+  @Test
+  public void testListFeatureGroups() throws Exception {
+    String vlmId = vendorLicenseFacade.createVendorLicenseModel(VendorLicenseModelTest.createVendorLicenseModel("vlmId_" + CommonMethods.nextUuId(), "vlm2Id desc", "icon2"), USER1).getId();
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+        fg22 = LicenseAgreementTest.createFeatureGroup(vlmId, VERSION01, "fg2", "FG2", "FG2 desc", null, null);
+    String fg22Id = vendorLicenseManager.createFeatureGroup(fg22, USER1).getId();
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+        fg33 = LicenseAgreementTest.createFeatureGroup(vlmId, VERSION01, "fg3", "FG3", "FG3 desc", null, null);
+    String fg33Id = vendorLicenseManager.createFeatureGroup(fg33, USER1).getId();
+
+    Collection<org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity> featureGroupEntities = vendorLicenseManager.listFeatureGroups(vlmId, null, USER1);
+
+    Assert.assertEquals(featureGroupEntities.size(), 2);
+    Set<String> actualIds = new HashSet<>();
+    for (org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity featureGroupEntity : featureGroupEntities) {
+      actualIds.add(featureGroupEntity.getId());
+    }
+
+    Set<String> expectedIds = new HashSet<>();
+    expectedIds.add(fg22Id);
+    expectedIds.add(fg33Id);
+    for (String id : actualIds) {
+      Assert.assertTrue(expectedIds.contains(id));
+    }
+
+  }
+
+  @Test
+  public void testCreateFeatureGroup() throws Exception {
+    String testName = "testCreateFeatureGroup";
+    String vlmId = vendorLicenseFacade.createVendorLicenseModel(VendorLicenseModelTest.createVendorLicenseModel(testName + CommonMethods.nextUuId(), testName, "icon1"), USER1).getId();
+    Set<org.openecomp.sdc.vendorlicense.dao.types.OperationalScope> opScopeChoices = new HashSet<>();
+    opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Other);
+    opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Data_Center);
+    opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Network_Wide);
+    org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity
+        ep = EntitlementPoolTest.createEntitlementPool(vlmId, VERSION01, "EP1" + CommonMethods.nextUuId(), "EP1 dec", 80, org.openecomp.sdc.vendorlicense.dao.types.ThresholdUnit.Absolute, org.openecomp.sdc.vendorlicense.dao.types.EntitlementMetric.Core, null, "inc1", org.openecomp.sdc.vendorlicense.dao.types.AggregationFunction.Other, "agg func1", opScopeChoices, null, org.openecomp.sdc.vendorlicense.dao.types.EntitlementTime.Hour, null, "sku1");
+    String epId = vendorLicenseManager.createEntitlementPool(ep, USER1).getId();
+    Set<org.openecomp.sdc.vendorlicense.dao.types.OperationalScope> opScopeChoicesLKG = new HashSet<>();
+    opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.CPU);
+    opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.VM);
+    opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Availability_Zone);
+    opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Data_Center);
+
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity
+        lkg = LicenseKeyGroupTest.createLicenseKeyGroup(vlmId, VERSION01, "LKG1", "LKG1 dec", org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyType.One_Time, new org.openecomp.sdc.vendorlicense.dao.types.MultiChoiceOrOther<>(opScopeChoicesLKG, null));
+    String lkgId = vendorLicenseManager.createLicenseKeyGroup(lkg, USER1).getId();
+    lkg.setId(lkgId);
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+        fg1 = createFGForTest(vlmId, "created" + CommonMethods.nextUuId(), Collections.singleton(epId), Collections.singleton(lkgId));
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+        fg1FromDB = vendorLicenseManager.getFeatureGroupModel(fg1, USER1).getFeatureGroup();
+    Assert.assertTrue(fg1FromDB.equals(fg1));
+  }
+
+
+  @Test
+  public void testCreateWithExistingName_negative() {
+    String testName = "createExistingName";
+    String vlmId = vendorLicenseFacade.createVendorLicenseModel(VendorLicenseModelTest.createVendorLicenseModel(testName + CommonMethods.nextUuId(), testName, "icon1"), USER1).getId();
+    createFGForTest(vlmId, "created", Collections.emptySet(), Collections.emptySet());
+    try {
+      org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+          created = LicenseAgreementTest.createFeatureGroup(vlmId, null, "created", "created", "created desc", Collections.emptySet(), Collections.emptySet());
+      vendorLicenseManager.createFeatureGroup(created, USER1);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), UniqueValueUtil.UNIQUE_VALUE_VIOLATION);
+    }
+  }
+
+  private org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity createFGForTest(String vlmId, String fgName, Set<String> epIds, Set<String> lkgIds) {
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+        created = LicenseAgreementTest.createFeatureGroup(vlmId, null, null, fgName, "created desc", epIds, lkgIds);
+    return vendorLicenseManager.createFeatureGroup(created, USER1);
+  }
+
+  @Test
+  public void testUpdateFeatureGroup_addEP_andGET() throws Exception {
+    String testName = "testUpdateFeatureGroup_addEP_andGET";
+    String vlmId = vendorLicenseFacade.createVendorLicenseModel(VendorLicenseModelTest.createVendorLicenseModel(testName + CommonMethods.nextUuId(), testName, "icon1"), USER1).getId();
+
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+        fg5 = LicenseAgreementTest.createFeatureGroup(vlmId, VERSION01, "id" + CommonMethods.nextUuId(), "created" + CommonMethods.nextUuId(), "created desc", null, null);
+    vendorLicenseManager.createFeatureGroup(fg5, USER1).getId();
+
+
+    Set<org.openecomp.sdc.vendorlicense.dao.types.OperationalScope> opScopeChoices = new HashSet<>();
+    opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Other);
+    opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Data_Center);
+
+    org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity
+        epToAdd = EntitlementPoolTest.createEntitlementPool(vlmId, VERSION01, "epToAdd", "epToAdd dec", 80, org.openecomp.sdc.vendorlicense.dao.types.ThresholdUnit.Absolute, org.openecomp.sdc.vendorlicense.dao.types.EntitlementMetric.Core, null, "inc1", org.openecomp.sdc.vendorlicense.dao.types.AggregationFunction.Other, "agg func1", opScopeChoices, null, org.openecomp.sdc.vendorlicense.dao.types.EntitlementTime.Hour, null, "sku1");
+    String epToAddId = vendorLicenseManager.createEntitlementPool(epToAdd, USER1).getId();
+
+    vendorLicenseManager.updateFeatureGroup(fg5, null, null, CommonMethods.toSingleElementSet(epToAddId), null, USER1);
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupModel
+        updatedFG = vendorLicenseManager.getFeatureGroupModel(fg5, USER1);
+    Set<org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity> updatedEPs = updatedFG.getEntitlementPools();
+
+    epToAdd.setReferencingFeatureGroups(CommonMethods.toSingleElementSet(fg5.getId()));
+
+    Assert.assertEquals(updatedEPs.size(), 1);
+    for (org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity updatedEP : updatedEPs) {
+      Assert.assertTrue(updatedEP.getReferencingFeatureGroups().contains(fg5.getId()));
+      Assert.assertEquals(updatedEP.getId(), epToAddId);
+    }
+  }
+
+  @Test
+  public void testUpdateFeatureGroup_removeLKG_andGET() throws Exception {
+    String testName = "testUpdateFeatureGroup_removeLKG_andGET";
+    String vlmId = vendorLicenseFacade.createVendorLicenseModel(VendorLicenseModelTest.createVendorLicenseModel(testName + CommonMethods.nextUuId(), testName, "icon1"), USER1).getId();
+
+    Set<org.openecomp.sdc.vendorlicense.dao.types.OperationalScope> opScopeChoicesLKG = new HashSet<>();
+    opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.CPU);
+    opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.VM);
+    opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Availability_Zone);
+    opScopeChoicesLKG.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Data_Center);
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity
+        lkg = LicenseKeyGroupTest.createLicenseKeyGroup(vlmId, VERSION01, "lkg" + CommonMethods.nextUuId(), "lkg desc", org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyType.Unique, new org.openecomp.sdc.vendorlicense.dao.types.MultiChoiceOrOther<>(opScopeChoicesLKG, null));
+    String lkgId = vendorLicenseManager.createLicenseKeyGroup(lkg, USER1).getId();
+    lkg.setId(lkgId);
+
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity
+        lkg_1 = LicenseKeyGroupTest.createLicenseKeyGroup(vlmId, VERSION01, "lkg" + CommonMethods.nextUuId(), "lkg_1 desc", org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyType.Unique, new org.openecomp.sdc.vendorlicense.dao.types.MultiChoiceOrOther<>(opScopeChoicesLKG, null));
+    String lkgId_1 = vendorLicenseManager.createLicenseKeyGroup(lkg_1, USER1).getId();
+    lkg.setId(lkgId);
+
+    Set<org.openecomp.sdc.vendorlicense.dao.types.OperationalScope> opScopeChoices = new HashSet<>();
+    opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Other);
+    opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Data_Center);
+    opScopeChoices.add(org.openecomp.sdc.vendorlicense.dao.types.OperationalScope.Network_Wide);
+    org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity
+        ep = EntitlementPoolTest.createEntitlementPool(vlmId, VERSION01, "EP1" + CommonMethods.nextUuId(), "EP1 dec", 80, org.openecomp.sdc.vendorlicense.dao.types.ThresholdUnit.Absolute, org.openecomp.sdc.vendorlicense.dao.types.EntitlementMetric.Core, null, "inc1", org.openecomp.sdc.vendorlicense.dao.types.AggregationFunction.Other, "agg func1", opScopeChoices, null, org.openecomp.sdc.vendorlicense.dao.types.EntitlementTime.Hour, null, "sku1");
+    String epId = vendorLicenseManager.createEntitlementPool(ep, USER1).getId();
+
+    Set<String> lkgs = new HashSet<>();
+    lkgs.add(lkgId);
+    lkgs.add(lkgId_1);
+
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+        fg = LicenseAgreementTest.createFeatureGroup(vlmId, VERSION01, "fg11" + CommonMethods.nextUuId(), "FG1", "FG1 desc", CommonMethods.toSingleElementSet(epId), lkgs);
+    String fgId = vendorLicenseManager.createFeatureGroup(fg, USER1).getId();
+    vendorLicenseManager.updateFeatureGroup(fg, null, CommonMethods.toSingleElementSet(lkgId), null, null, USER1);
+
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupModel
+        featureGroup = vendorLicenseManager.getFeatureGroupModel(fg, USER1);
+    Set<org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity> licenseKeyGroups = featureGroup.getLicenseKeyGroups();
+    Assert.assertEquals(licenseKeyGroups.size(), 1);
+    List<String> lkgIds = new ArrayList<>();
+    for (org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity licenseKeyGroup : licenseKeyGroups) {
+      lkgIds.add(licenseKeyGroup.getId());
+    }
+
+    Assert.assertTrue(lkgIds.contains(lkgId_1));
+    Assert.assertFalse(lkgIds.contains(lkgId));
+
+  }
+
+
+  @Test
+  public void testDeleteFeatureGroup() throws Exception {
+    String testName = "testDeleteFeatureGroup";
+    String vlmId = vendorLicenseFacade.createVendorLicenseModel(VendorLicenseModelTest.createVendorLicenseModel(testName + CommonMethods.nextUuId(), testName, "icon1"), USER1).getId();
+
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+        fg1 = createFGForTest(vlmId, "new", Collections.emptySet(), Collections.emptySet());
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+        fg2 = createFGForTest(vlmId, "newer", Collections.emptySet(), Collections.emptySet());
+    Collection<org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity> featureGroupEntities = vendorLicenseManager.listFeatureGroups(vlmId, null, USER1);
+    Assert.assertEquals(featureGroupEntities.size(), 2); //precondition
+
+    vendorLicenseManager.deleteFeatureGroup(fg1, USER1);
+    Assert.assertEquals(vendorLicenseManager.listFeatureGroups(vlmId, null, USER1).size(), 1);
+
+
+  }
+
+
+}
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/LicenseAgreementTest.java b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/LicenseAgreementTest.java
new file mode 100644
index 0000000..f68f84e
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/LicenseAgreementTest.java
@@ -0,0 +1,218 @@
+package org.openecomp.sdc.vendorlicense;
+
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.vendorlicense.dao.FeatureGroupDaoFactory;
+import org.openecomp.sdc.vendorlicense.dao.types.LicenseTerm;
+import org.openecomp.sdc.vendorlicense.impl.VendorLicenseManagerImpl;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.core.util.UniqueValueUtil;
+import org.openecomp.core.utilities.CommonMethods;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+public class LicenseAgreementTest {
+  private static final Version VERSION01 = new Version(0, 1);
+  private static final String USER1 = "user1";
+  private static final String LA1_NAME = "LA1 Name";
+
+  private static VendorLicenseManager vendorLicenseManager = new VendorLicenseManagerImpl();
+  private static org.openecomp.sdc.vendorlicense.dao.FeatureGroupDao featureGroupDao;
+  private static org.openecomp.sdc.vendorlicense.dao.LicenseAgreementDao licenseAgreementDao;
+
+  private static String vlm1Id;
+  private static String vlm2Id;
+  private static String la1Id;
+  private static String la2Id;
+
+  public static org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity createLicenseAgreement(String vlmId, Version version,
+                                                                                                        String id, String name, String desc,
+                                                                                                        String requirementsAndConstrains,
+                                                                                                        org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther<LicenseTerm> term,
+                                                                                                        String... fgIds) {
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity
+        la = new org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity();
+    la.setVendorLicenseModelId(vlmId);
+    la.setVersion(version);
+    la.setId(id);
+    la.setName(name);
+    la.setDescription(desc);
+    la.setLicenseTerm(term);
+    la.setRequirementsAndConstrains(requirementsAndConstrains);
+    for (String fgId : fgIds) {
+      la.getFeatureGroupIds().add(fgId);
+    }
+    return la;
+  }
+
+  public static org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity createFeatureGroup(String vendorId, Version version, String id,
+                                                                                                String name, String description,
+                                                                                                Set<String> entitlementPoolIds,
+                                                                                                Set<String> licenseKeyGroupIds) {
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+        featureGroup = new org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity();
+    featureGroup.setVendorLicenseModelId(vendorId);
+    featureGroup.setVersion(version);
+    featureGroup.setId(id);
+    featureGroup.setName(name);
+    featureGroup.setDescription(description);
+    featureGroup.setEntitlementPoolIds(entitlementPoolIds);
+    featureGroup.setLicenseKeyGroupIds(licenseKeyGroupIds);
+    return featureGroup;
+  }
+
+  @BeforeClass
+  private void init() {
+    licenseAgreementDao = org.openecomp.sdc.vendorlicense.dao.LicenseAgreementDaoFactory.getInstance().createInterface();
+    featureGroupDao = FeatureGroupDaoFactory.getInstance().createInterface();
+    vlm1Id = vendorLicenseManager.createVendorLicenseModel(VendorLicenseModelTest
+            .createVendorLicenseModel("vendor1 name " + CommonMethods.nextUuId(), "vlm1 dec", "icon1"),
+        USER1).getId();
+    vlm2Id = vendorLicenseManager.createVendorLicenseModel(VendorLicenseModelTest
+            .createVendorLicenseModel("vendor2 name " + CommonMethods.nextUuId(), "vlm2 dec", "icon2"),
+        USER1).getId();
+  }
+
+  @Test
+  public void createLicenseAgreementTest() {
+    la1Id = testCreate(vlm1Id, LA1_NAME);
+  }
+
+  private String testCreate(String vlmId, String name) {
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity fg1 =
+        createFeatureGroup(vlmId, VERSION01, "fg11", "FG1", "FG1 desc", null, null);
+    featureGroupDao.create(fg1);
+
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity
+        la1 = createLicenseAgreement(vlmId, VERSION01, null, name, "LA1 desc",
+        "RequirementsAndConstrains1", new org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther<>(
+            org.openecomp.sdc.vendorlicense.dao.types.LicenseTerm.Unlimited, null), "fg11");
+    la1 = vendorLicenseManager.createLicenseAgreement(la1, USER1);
+    String la1Id = la1.getId();
+
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity loadedLa1 = licenseAgreementDao.get(la1);
+    Assert.assertTrue(loadedLa1.equals(la1));
+    return la1Id;
+  }
+
+  @Test(dependsOnMethods = {"createLicenseAgreementTest"})
+  public void testCreateWithExistingName_negative() {
+    try {
+      org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity la1 =
+          createLicenseAgreement(vlm1Id, VERSION01, null, LA1_NAME, "LA1 desc",
+              "RequirementsAndConstrains1", new org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther<>(
+                  org.openecomp.sdc.vendorlicense.dao.types.LicenseTerm.Unlimited, null),
+              "fg11");
+      vendorLicenseManager.createLicenseAgreement(la1, USER1);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), UniqueValueUtil.UNIQUE_VALUE_VIOLATION);
+    }
+  }
+
+  @Test(dependsOnMethods = {"createLicenseAgreementTest"})
+  public void testCreateWithExistingNameUnderOtherVlm() {
+    testCreate(vlm2Id, LA1_NAME);
+  }
+
+  @Test(dependsOnMethods = {"testCreateWithExistingName_negative"})
+  public void updateLicenseAgreementTest() {
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity fg2 =
+        createFeatureGroup(vlm1Id, VERSION01, "fg2", "FG2", "FG2 desc", null, null);
+    featureGroupDao.create(fg2);
+
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity fg3 =
+        createFeatureGroup(vlm1Id, VERSION01, "fg3", "FG3", "FG3 desc", null, null);
+    featureGroupDao.create(fg3);
+
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity la1 =
+        licenseAgreementDao.get(new org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity(vlm1Id, VERSION01, la1Id));
+    la1.setDescription("LA1 desc updated");
+    la1.setLicenseTerm(new org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther<>(
+        org.openecomp.sdc.vendorlicense.dao.types.LicenseTerm.Other, "bla bla term"));
+    la1.getFeatureGroupIds().add("fg2");
+    la1.getFeatureGroupIds().add("fg3");
+    la1.getFeatureGroupIds().remove("fg11");
+
+    Set<String> addedFeatureGroupIds = new HashSet<>();
+    addedFeatureGroupIds.add("fg2");
+    addedFeatureGroupIds.add("fg3");
+
+    Set<String> removedFeatureGroupIds = new HashSet<>();
+    removedFeatureGroupIds.add("fg11");
+
+    vendorLicenseManager
+        .updateLicenseAgreement(la1, addedFeatureGroupIds, removedFeatureGroupIds, USER1);
+
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity loadedLa1 =
+        licenseAgreementDao.get(new org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity(vlm1Id, VERSION01, la1Id));
+    Assert.assertTrue(loadedLa1.equals(la1));
+
+  }
+
+  @Test(dependsOnMethods = {"updateLicenseAgreementTest"})
+  public void listLicenseAgreementsTest() {
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity
+        la2 = createLicenseAgreement(vlm1Id, VERSION01, null, "LA2", "LA2 desc",
+        "RequirementsAndConstrains2", new org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther<>(
+            org.openecomp.sdc.vendorlicense.dao.types.LicenseTerm.Unlimited, null), "fg2");
+    la2 = vendorLicenseManager.createLicenseAgreement(la2, USER1);
+    la2Id = la2.getId();
+
+    Collection<org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity> loadedLas =
+        vendorLicenseManager.listLicenseAgreements(vlm1Id, null, USER1);
+    Assert.assertEquals(loadedLas.size(), 2);
+    boolean la2Exists = false;
+    for (org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity loadedLa : loadedLas) {
+      if (la2Id.equals(loadedLa.getId())) {
+        Assert.assertTrue(loadedLa.equals(la2));
+        la2Exists = true;
+      }
+    }
+
+    Assert.assertTrue(la2Exists);
+  }
+
+  @Test(dependsOnMethods = {"listLicenseAgreementsTest"})
+  public void featureGroupDeletedLicenseAgreementUpdated() {
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity licenseAgreement =
+        createLicenseAgreement(vlm1Id, VERSION01, "laId", "LA2", "LA2 desc",
+            "RequirementsAndConstrains2", new org.openecomp.sdc.vendorlicense.dao.types.ChoiceOrOther<>(
+                org.openecomp.sdc.vendorlicense.dao.types.LicenseTerm.Unlimited, null), "fg2");
+    licenseAgreementDao.create(licenseAgreement);
+    String featureGroupId = "FeatureGroupId";
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity created =
+        createFeatureGroup(vlm1Id, VERSION01, "fg11", "FG1", "FG1 desc", null, null);
+    featureGroupDao.create(created);
+    featureGroupDao.addReferencingLicenseAgreement(created, licenseAgreement.getId());
+
+    vendorLicenseManager.deleteFeatureGroup(created, USER1);
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity afterDeletingFG = licenseAgreementDao.get(licenseAgreement);
+    Assert.assertEquals(afterDeletingFG.getFeatureGroupIds().size(), 1);
+    Assert.assertTrue(afterDeletingFG.getFeatureGroupIds().contains("fg2"));
+  }
+
+  @Test(dependsOnMethods = {"listLicenseAgreementsTest"})
+  public void deleteLicenseAgreementsTest() {
+    vendorLicenseManager.deleteLicenseAgreement(vlm1Id, la1Id, USER1);
+
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity loadedLa1 =
+        licenseAgreementDao.get(new org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity(vlm1Id, VERSION01, la1Id));
+    Assert.assertEquals(loadedLa1, null);
+
+    Collection<org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity> loadedLas =
+        licenseAgreementDao.list(new org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity(vlm1Id, VERSION01, null));
+    Assert.assertEquals(loadedLas.size(), 1);
+    Assert.assertEquals(loadedLas.iterator().next().getId(), la2Id);
+  }
+
+  @Test(dependsOnMethods = "deleteLicenseAgreementsTest")
+  public void testCreateWithRemovedName() {
+    testCreate(vlm1Id, LA1_NAME);
+  }
+}
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/LicenseKeyGroupTest.java b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/LicenseKeyGroupTest.java
new file mode 100644
index 0000000..15b179b
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/LicenseKeyGroupTest.java
@@ -0,0 +1,162 @@
+package org.openecomp.sdc.vendorlicense;
+
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.vendorlicense.dao.LicenseKeyGroupDao;
+import org.openecomp.sdc.vendorlicense.dao.LicenseKeyGroupDaoFactory;
+import org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity;
+import org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyType;
+import org.openecomp.sdc.vendorlicense.dao.types.MultiChoiceOrOther;
+import org.openecomp.sdc.vendorlicense.dao.types.OperationalScope;
+import org.openecomp.sdc.vendorlicense.impl.VendorLicenseManagerImpl;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.core.nosqldb.api.NoSqlDb;
+import org.openecomp.core.nosqldb.factory.NoSqlDbFactory;
+import org.openecomp.core.util.UniqueValueUtil;
+import org.openecomp.core.utilities.CommonMethods;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+public class LicenseKeyGroupTest {
+
+  public static final String LKG1_NAME = "LKG1 name";
+  private static final Version VERSION01 = new Version(0, 1);
+  private static final String USER1 = "user1";
+  public static String vlm1Id;
+  public static String vlm2Id;
+  private static VendorLicenseManager vendorLicenseManager = new VendorLicenseManagerImpl();
+  private static LicenseKeyGroupDao licenseKeyGroupDao;
+  private static NoSqlDb noSqlDb;
+  private static String lkg1Id;
+  private static String lkg2Id;
+
+  public static LicenseKeyGroupEntity createLicenseKeyGroup(String vlmId, Version version,
+                                                            String name, String desc,
+                                                            LicenseKeyType type,
+                                                            MultiChoiceOrOther<OperationalScope> operationalScope) {
+    LicenseKeyGroupEntity licenseKeyGroup = new LicenseKeyGroupEntity();
+    licenseKeyGroup.setVendorLicenseModelId(vlmId);
+    licenseKeyGroup.setVersion(version);
+    licenseKeyGroup.setName(name);
+    licenseKeyGroup.setDescription(desc);
+    licenseKeyGroup.setType(type);
+    licenseKeyGroup.setOperationalScope(operationalScope);
+    return licenseKeyGroup;
+  }
+
+  @BeforeClass
+  private void init() {
+    licenseKeyGroupDao = LicenseKeyGroupDaoFactory.getInstance().createInterface();
+    noSqlDb = NoSqlDbFactory.getInstance().createInterface();
+
+    vlm1Id = vendorLicenseManager.createVendorLicenseModel(VendorLicenseModelTest
+        .createVendorLicenseModel("vendor1 name " + CommonMethods.nextUuId(), "vlm1Id dec",
+            "icon1"), USER1).getId();
+    vlm2Id = vendorLicenseManager.createVendorLicenseModel(VendorLicenseModelTest
+            .createVendorLicenseModel("vendor2 name " + CommonMethods.nextUuId(), "vlm2 dec", "icon2"),
+        USER1).getId();
+  }
+
+  @Test
+  public void createTest() {
+    lkg1Id = testCreate(vlm1Id, LKG1_NAME);
+  }
+
+  private String testCreate(String vlmId, String name) {
+    Set<OperationalScope> opScopeChoices = new HashSet<>();
+    opScopeChoices.add(OperationalScope.CPU);
+    opScopeChoices.add(OperationalScope.VM);
+    opScopeChoices.add(OperationalScope.Tenant);
+    opScopeChoices.add(OperationalScope.Data_Center);
+    LicenseKeyGroupEntity lkg1 =
+        createLicenseKeyGroup(vlmId, VERSION01, name, "LKG1 dec", LicenseKeyType.One_Time,
+            new MultiChoiceOrOther<>(opScopeChoices, null));
+    String lkg1Id = vendorLicenseManager.createLicenseKeyGroup(lkg1, USER1).getId();
+    lkg1.setId(lkg1Id);
+
+    LicenseKeyGroupEntity loadedLkg1 = licenseKeyGroupDao.get(lkg1);
+    Assert.assertTrue(loadedLkg1.equals(lkg1));
+    return lkg1Id;
+  }
+
+  @Test(dependsOnMethods = {"createTest"})
+  public void testCreateWithExistingName_negative() {
+    try {
+      LicenseKeyGroupEntity lkg1 =
+          createLicenseKeyGroup(vlm1Id, VERSION01, LKG1_NAME, "LKG1 dec", LicenseKeyType.One_Time,
+              new MultiChoiceOrOther<>(Collections.singleton(OperationalScope.Other),
+                  "other op scope"));
+      vendorLicenseManager.createLicenseKeyGroup(lkg1, USER1).getId();
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), UniqueValueUtil.UNIQUE_VALUE_VIOLATION);
+    }
+  }
+
+  @Test(dependsOnMethods = {"createTest"})
+  public void testCreateWithExistingNameUnderOtherVlm() {
+    testCreate(vlm2Id, LKG1_NAME);
+  }
+
+  @Test(dependsOnMethods = {"testCreateWithExistingName_negative"})
+  public void updateAndGetTest() {
+    LicenseKeyGroupEntity lkg1 =
+        licenseKeyGroupDao.get(new LicenseKeyGroupEntity(vlm1Id, VERSION01, lkg1Id));
+    Set<OperationalScope> opScopeChoices = new HashSet<>();
+    opScopeChoices.add(OperationalScope.Other);
+    lkg1.setOperationalScope(new MultiChoiceOrOther<>(opScopeChoices, "op scope1 updated"));
+    lkg1.setDescription("LKG1 dec updated");
+
+    vendorLicenseManager.updateLicenseKeyGroup(lkg1, USER1);
+
+    LicenseKeyGroupEntity loadedLkg1 = vendorLicenseManager.getLicenseKeyGroup(lkg1, USER1);
+    Assert.assertTrue(loadedLkg1.equals(lkg1));
+
+  }
+
+  @Test(dependsOnMethods = {"updateAndGetTest"})
+  public void listTest() {
+    Set<OperationalScope> opScopeChoices = new HashSet<>();
+    opScopeChoices.add(OperationalScope.Network_Wide);
+    LicenseKeyGroupEntity lkg2 =
+        createLicenseKeyGroup(vlm1Id, VERSION01, "LKG2", "LKG2 dec", LicenseKeyType.Universal,
+            new MultiChoiceOrOther<>(opScopeChoices, null));
+    lkg2Id = vendorLicenseManager.createLicenseKeyGroup(lkg2, USER1).getId();
+    lkg2.setId(lkg2Id);
+
+    Collection<LicenseKeyGroupEntity> loadedLkgs =
+        vendorLicenseManager.listLicenseKeyGroups(vlm1Id, null, USER1);
+    Assert.assertEquals(loadedLkgs.size(), 2);
+    for (LicenseKeyGroupEntity loadedLkg : loadedLkgs) {
+      if (lkg2Id.equals(loadedLkg.getId())) {
+        Assert.assertTrue(loadedLkg.equals(lkg2));
+      }
+    }
+  }
+
+  @Test(dependsOnMethods = {"listTest"})
+  public void deleteTest() {
+    vendorLicenseManager
+        .deleteLicenseKeyGroup(new LicenseKeyGroupEntity(vlm1Id, VERSION01, lkg1Id), USER1);
+
+    LicenseKeyGroupEntity loadedLkg1 =
+        licenseKeyGroupDao.get(new LicenseKeyGroupEntity(vlm1Id, VERSION01, lkg1Id));
+    Assert.assertEquals(loadedLkg1, null);
+
+    Collection<LicenseKeyGroupEntity> loadedLkgs =
+        licenseKeyGroupDao.list(new LicenseKeyGroupEntity(vlm1Id, VERSION01, null));
+    Assert.assertEquals(loadedLkgs.size(), 1);
+    Assert.assertEquals(loadedLkgs.iterator().next().getId(), lkg2Id);
+  }
+
+  @Test(dependsOnMethods = "deleteTest")
+  public void testCreateWithRemovedName() {
+    testCreate(vlm1Id, LKG1_NAME);
+  }
+}
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/VendorLicenseModelTest.java b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/VendorLicenseModelTest.java
new file mode 100644
index 0000000..c2a8d14
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/VendorLicenseModelTest.java
@@ -0,0 +1,402 @@
+package org.openecomp.sdc.vendorlicense;
+
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.vendorlicense.impl.VendorLicenseManagerImpl;
+import org.openecomp.core.util.UniqueValueUtil;
+
+import org.testng.Assert;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+public class VendorLicenseModelTest {
+  private static final org.openecomp.sdc.versioning.dao.types.Version
+      VERSION01 = new org.openecomp.sdc.versioning.dao.types.Version(0, 1);
+  private static final org.openecomp.sdc.versioning.dao.types.Version
+      VERSION02 = new org.openecomp.sdc.versioning.dao.types.Version(0, 2);
+  private static final String USER1 = "vlmTestUser1";
+  private static final String USER2 = "vlmTestUser2";
+  private static final String USER3 = "vlmTestUser3";
+  private static final String VLM1_NAME = "Vlm1 name";
+  private static VendorLicenseManager vendorLicenseManager = new VendorLicenseManagerImpl();
+  private static org.openecomp.sdc.vendorlicense.dao.VendorLicenseModelDao vendorLicenseModelDao =
+      org.openecomp.sdc.vendorlicense.dao.VendorLicenseModelDaoFactory.getInstance().createInterface();
+
+  private static String vlm1Id;
+  private static String vlm2Id;
+  private static String vlm3Id;
+  private static String vlm4Id;
+  private static String laId;
+  private static String fg1Id;
+  private static String fg2Id;
+
+  private static String testCreate() {
+    org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity vlm1 = createVendorLicenseModel(VLM1_NAME, "VLM1 dec", "icon1");
+    String vlmId = vendorLicenseManager.createVendorLicenseModel(vlm1, USER1).getId();
+
+    vlm1.setVersion(VERSION01);
+    org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity loadedVlm1 = vendorLicenseModelDao.get(vlm1);
+    Assert.assertTrue(loadedVlm1.equals(vlm1));
+    return vlmId;
+  }
+
+  public static org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity createVendorLicenseModel(String name, String desc,
+                                                                                                            String icon) {
+    org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity
+        vendorLicenseModel = new org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity();
+    vendorLicenseModel.setVendorName(name);
+    vendorLicenseModel.setDescription(desc);
+    vendorLicenseModel.setIconRef(icon);
+    return vendorLicenseModel;
+  }
+
+  @BeforeTest
+  private void init() {
+    UniqueValueUtil.deleteUniqueValue(VendorLicenseConstants.UniqueValues.VENDOR_NAME, VLM1_NAME);
+    UniqueValueUtil
+        .deleteUniqueValue(VendorLicenseConstants.UniqueValues.VENDOR_NAME, "VLM1 updated");
+    UniqueValueUtil.deleteUniqueValue(VendorLicenseConstants.UniqueValues.VENDOR_NAME, "VLM2");
+    UniqueValueUtil.deleteUniqueValue(VendorLicenseConstants.UniqueValues.VENDOR_NAME, "test_vlm1");
+    UniqueValueUtil.deleteUniqueValue(VendorLicenseConstants.UniqueValues.VENDOR_NAME, "test_vlm2");
+    UniqueValueUtil.deleteUniqueValue(VendorLicenseConstants.UniqueValues.VENDOR_NAME, "test_vlm3");
+  }
+
+  @Test
+  public void createTest() {
+    vlm1Id = testCreate();
+  }
+
+  @Test(dependsOnMethods = {"createTest"})
+  public void testCreateWithExistingVendorName_negative() {
+    try {
+      vendorLicenseManager
+          .createVendorLicenseModel(createVendorLicenseModel(VLM1_NAME, "VLM1 dec", "icon1"),
+              USER1);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), UniqueValueUtil.UNIQUE_VALUE_VIOLATION);
+    }
+  }
+
+  @Test(dependsOnMethods = {"testCreateWithExistingVendorName_negative"})
+  public void updateTest() {
+    org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity
+        expectedVlm1 = new org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity(vlm1Id, VERSION01);
+    expectedVlm1.setVendorName("VLM1 updated");
+    expectedVlm1.setDescription("VLM1 dec updated");
+    expectedVlm1.setIconRef("icon1 updated");
+    vendorLicenseManager.updateVendorLicenseModel(expectedVlm1, USER1);
+
+    org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity actualVlm1 =
+        vendorLicenseModelDao.get(new org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity(vlm1Id, VERSION01));
+    Assert.assertTrue(actualVlm1.equals(expectedVlm1));
+  }
+
+  @Test(dependsOnMethods = {"updateTest"})
+  public void testUpdateWithSimilarVendorName() {
+    org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity
+        expectedVlm1 = new org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity(vlm1Id, VERSION01);
+    expectedVlm1.setVendorName("vlm1 UPDATED");
+    vendorLicenseManager.updateVendorLicenseModel(expectedVlm1, USER1);
+
+    org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity actualVlm1 =
+        vendorLicenseModelDao.get(new org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity(vlm1Id, VERSION01));
+    Assert.assertTrue(actualVlm1.equals(expectedVlm1));
+  }
+
+  @Test(dependsOnMethods = {"updateTest"})
+  public void testCreateWithRemovedVendorName() {
+    testCreate();
+  }
+
+  @Test(dependsOnMethods = {"updateTest"})
+  public void getTest() {
+    org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity expectedVlm1 =
+        vendorLicenseModelDao.get(new org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity(vlm1Id, VERSION01));
+    org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel actualVlm1 =
+        vendorLicenseManager.getVendorLicenseModel(vlm1Id, null, USER1);
+
+    Assert.assertTrue(actualVlm1.getVendorLicenseModel().equals(expectedVlm1));
+    Assert.assertEquals(actualVlm1.getVersionInfo().getActiveVersion(), VERSION01);
+    Assert.assertEquals(actualVlm1.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Locked);
+    Assert.assertEquals(actualVlm1.getVersionInfo().getLockingUser(), USER1);
+  }
+
+  @Test(dependsOnMethods = {"getTest"})
+  public void listTest() {
+    org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity vlm2 = createVendorLicenseModel("VLM2", "VLM2 dec", "icon2");
+    vlm2Id = vendorLicenseManager.createVendorLicenseModel(vlm2, USER1).getId();
+    vlm2.setId(vlm2Id);
+
+    Collection<org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel> loadedVlms =
+        vendorLicenseManager.listVendorLicenseModels(null, USER1);
+    boolean vlm1Exists = false;
+    boolean vlm2Exists = false;
+    for (org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel loadedVlm : loadedVlms) {
+      if (vlm1Id.equals(loadedVlm.getVendorLicenseModel().getId())) {
+        vlm1Exists = true;
+        continue;
+      }
+      if (vlm2Id.equals(loadedVlm.getVendorLicenseModel().getId())) {
+        Assert.assertTrue(loadedVlm.getVendorLicenseModel().equals(vlm2));
+
+        vlm2Exists = true;
+      }
+    }
+
+    Assert.assertTrue(vlm1Exists);
+    Assert.assertTrue(vlm2Exists);
+  }
+
+  @Test(dependsOnMethods = {"listTest"})
+  public void listFinalVersionWhenNoneTest() {
+    Collection<org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel> loadedVlms =
+        vendorLicenseManager.listVendorLicenseModels(
+            org.openecomp.sdc.versioning.dao.types.VersionStatus.Final.name(), USER1);
+    boolean vlm1Exists = false;
+    boolean vlm2Exists = false;
+    for (org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel loadedVlm : loadedVlms) {
+      if (vlm1Id.equals(loadedVlm.getVendorLicenseModel().getId())) {
+        vlm1Exists = true;
+        continue;
+      }
+      if (vlm2Id.equals(loadedVlm.getVendorLicenseModel().getId())) {
+        vlm2Exists = true;
+      }
+    }
+
+    Assert.assertFalse(vlm1Exists);
+    Assert.assertFalse(vlm2Exists);
+  }
+
+  @Test(dependsOnMethods = {"listFinalVersionWhenNoneTest"})
+
+  // Unsupported operation for 1607 release.
+/*    public void deleteTest() {
+        vendorLicenseManager.deleteVendorLicenseModel(vlm1Id, USER1);
+
+        VendorLicenseModelEntity loadedVlm1 = vendorLicenseModelDao.get(new VendorLicenseModelEntity(vlm1Id, VERSION01));
+        Assert.assertEquals(loadedVlm1, null);
+
+        Collection<VendorLicenseModelEntity> loadedVlms = vendorLicenseModelDao.list(null);
+        Assert.assertTrue(loadedVlms.size() > 1);
+        boolean vlm1Exists = false;
+        boolean vlm2Exists = false;
+        for (VendorLicenseModelEntity loadedVlm : loadedVlms) {
+            if (vlm1Id.equals(loadedVlm.getId())) {
+                vlm1Exists = true;
+            }
+            if (vlm2Id.equals(loadedVlm.getId())) {
+                vlm2Exists = true;
+            }
+        }
+        Assert.assertFalse(vlm1Exists);
+        Assert.assertTrue(vlm2Exists);
+    }
+
+    @Test(dependsOnMethods = {"deleteTest"})*/
+  public void checkinTest() {
+    vendorLicenseManager.checkin(vlm2Id, USER1);
+
+    org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel versionedVlm2 =
+        vendorLicenseManager.getVendorLicenseModel(vlm2Id, null, USER1);
+    Assert.assertEquals(versionedVlm2.getVersionInfo().getActiveVersion(), VERSION01);
+    Assert.assertEquals(versionedVlm2.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Available);
+    Assert.assertNull(versionedVlm2.getVersionInfo().getLockingUser());
+  }
+
+  @Test(dependsOnMethods = {"checkinTest"})
+  public void checkoutTest() {
+    vendorLicenseManager.checkout(vlm2Id, USER2);
+
+    org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel versionedVlm2 =
+        vendorLicenseManager.getVendorLicenseModel(vlm2Id, null, USER2);
+    Assert.assertEquals(versionedVlm2.getVersionInfo().getActiveVersion(), VERSION02);
+    Assert.assertEquals(versionedVlm2.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Locked);
+    Assert.assertEquals(versionedVlm2.getVersionInfo().getLockingUser(), USER2);
+
+    versionedVlm2 = vendorLicenseManager.getVendorLicenseModel(vlm2Id, null, USER1);
+    Assert.assertEquals(versionedVlm2.getVersionInfo().getActiveVersion(), VERSION01);
+    Assert.assertEquals(versionedVlm2.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Locked);
+    Assert.assertEquals(versionedVlm2.getVersionInfo().getLockingUser(), USER2);
+  }
+
+  @Test(dependsOnMethods = {"checkoutTest"})
+  public void undoCheckoutTest() {
+    vendorLicenseManager.undoCheckout(vlm2Id, USER2);
+
+    org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel versionedVlm2 =
+        vendorLicenseManager.getVendorLicenseModel(vlm2Id, null, USER2);
+    Assert.assertEquals(versionedVlm2.getVersionInfo().getActiveVersion(), VERSION01);
+    Assert.assertEquals(versionedVlm2.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Available);
+    Assert.assertNull(versionedVlm2.getVersionInfo().getLockingUser());
+  }
+
+  @Test(dependsOnMethods = {"undoCheckoutTest"}, expectedExceptions = CoreException.class)
+  public void submitUncompletedVlmNegativeTest() {
+    vendorLicenseManager.submit(vlm2Id, USER2);
+  }
+
+  @Test(dependsOnMethods = {"submitUncompletedVlmNegativeTest"},
+      expectedExceptions = CoreException.class)
+  public void submitUncompletedVlmMissingFGNegativeTest() {
+    vendorLicenseManager.checkout(vlm2Id, USER2);
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity
+        licenseAgreement = new org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity(vlm2Id, null, null);
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity licenseAgreementEntity =
+        vendorLicenseManager.createLicenseAgreement(licenseAgreement, USER2);
+    laId = licenseAgreementEntity.getId();
+    vendorLicenseManager.checkin(vlm2Id, USER2);
+    vendorLicenseManager.submit(vlm2Id, USER2);
+  }
+
+  @Test(dependsOnMethods = {"submitUncompletedVlmMissingFGNegativeTest"},
+      expectedExceptions = CoreException.class)
+  public void submitUncompletedVlmMissingEPNegativeTest() {
+    vendorLicenseManager.checkout(vlm2Id, USER2);
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+        featureGroup = new org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity(vlm2Id, null, null);
+    featureGroup = vendorLicenseManager.createFeatureGroup(featureGroup, USER2);
+    fg1Id = featureGroup.getId();
+
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementModel licenseAgreementModel =
+        vendorLicenseManager.getLicenseAgreementModel(vlm2Id, null, laId, USER2);
+    Set<String> fgIdSet = new HashSet<>();
+    fgIdSet.add(fg1Id);
+    vendorLicenseManager
+        .updateLicenseAgreement(licenseAgreementModel.getLicenseAgreement(), fgIdSet, null, USER2);
+    vendorLicenseManager.checkin(vlm2Id, USER2);
+    vendorLicenseManager.submit(vlm2Id, USER2);
+  }
+
+  @Test(dependsOnMethods = {"submitUncompletedVlmMissingEPNegativeTest"},
+      expectedExceptions = CoreException.class)
+  public void submitUncompletedVlmMissingEPInOneFGNegativeTest() {
+    vendorLicenseManager.checkout(vlm2Id, USER2);
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+        featureGroup = new org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity(vlm2Id, null, null);
+    org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity entitlementPool = vendorLicenseManager
+        .createEntitlementPool(new org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity(vlm2Id, null, null), USER2);
+    featureGroup.getEntitlementPoolIds().add(entitlementPool.getId());
+    featureGroup = vendorLicenseManager.createFeatureGroup(featureGroup, USER2);
+    fg2Id = featureGroup.getId();
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementModel licenseAgreementModel =
+        vendorLicenseManager.getLicenseAgreementModel(vlm2Id, null, laId, USER2);
+    Set<String> fgIdSet = new HashSet<>();
+    fgIdSet.add(fg2Id);
+    vendorLicenseManager
+        .updateLicenseAgreement(licenseAgreementModel.getLicenseAgreement(), fgIdSet, null, USER2);
+
+    vendorLicenseManager.checkin(vlm2Id, USER2);
+    vendorLicenseManager.submit(vlm2Id, USER2);
+  }
+
+  @Test(dependsOnMethods = {"submitUncompletedVlmMissingEPInOneFGNegativeTest"})
+  public void submitTest() {
+    vendorLicenseManager.checkout(vlm2Id, USER2);
+
+    org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity entitlementPool = vendorLicenseManager
+        .createEntitlementPool(new org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity(vlm2Id, null, null), USER2);
+    Set<String> epSetId = new HashSet<>();
+    epSetId.add(entitlementPool.getId());
+
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+        featureGroup = new org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity(vlm2Id, null, fg1Id);
+    featureGroup.getEntitlementPoolIds().add(entitlementPool.getId());
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupModel featureGroupModel =
+        vendorLicenseManager.getFeatureGroupModel(featureGroup, USER2);
+
+    vendorLicenseManager
+        .updateFeatureGroup(featureGroupModel.getFeatureGroup(), null, null, epSetId, null, USER2);
+    vendorLicenseManager.checkin(vlm2Id, USER2);
+    vendorLicenseManager.submit(vlm2Id, USER2);
+
+    org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel versionedVlm2 =
+        vendorLicenseManager.getVendorLicenseModel(vlm2Id, null, USER1);
+    Assert.assertEquals(versionedVlm2.getVersionInfo().getActiveVersion(), new org.openecomp.sdc.versioning.dao.types.Version(1, 0));
+    Assert.assertEquals(versionedVlm2.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Final);
+    Assert.assertNull(versionedVlm2.getVersionInfo().getLockingUser());
+  }
+
+  @Test(dependsOnMethods = {"submitTest"})
+  public void listFinalVersionWhenOneTest() {
+    Collection<org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel> loadedVlms =
+        vendorLicenseManager.listVendorLicenseModels(
+            org.openecomp.sdc.versioning.dao.types.VersionStatus.Final.name(), USER1);
+    boolean vlm2Exists = false;
+    for (org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel loadedVlm : loadedVlms) {
+      if (vlm2Id.equals(loadedVlm.getVendorLicenseModel().getId())) {
+        vlm2Exists = true;
+        Assert.assertEquals(loadedVlm.getVersionInfo().getActiveVersion(), new org.openecomp.sdc.versioning.dao.types.Version(1, 0));
+        Assert.assertEquals(loadedVlm.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Final);
+        Assert.assertNull(loadedVlm.getVersionInfo().getLockingUser());
+        break;
+      }
+    }
+
+    Assert.assertTrue(vlm2Exists);
+  }
+
+  @Test(dependsOnMethods = {"listFinalVersionWhenOneTest"})
+  public void testVLMListWithModificationTimeDescOrder() {
+    org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity vlm1 = createVendorLicenseModel("test_vlm1", "desc", "icon");
+    vlm3Id = vendorLicenseManager.createVendorLicenseModel(vlm1, USER3).getId();
+
+    org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity vlm2 = createVendorLicenseModel("test_vlm2", "desc", "icon");
+    vlm4Id = vendorLicenseManager.createVendorLicenseModel(vlm2, USER3).getId();
+
+    assertVLMInWantedLocationInVSPList(vlm4Id, 0, USER3);
+    assertVLMInWantedLocationInVSPList(vlm3Id, 1, USER3);
+  }
+
+  @Test(dependsOnMethods = {"testVLMListWithModificationTimeDescOrder"})
+  public void testOldVLMAfterChangeShouldBeInBeginningOfList() {
+    org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity ep = vendorLicenseManager
+        .createEntitlementPool(new org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity(vlm3Id, null, null), USER3);
+
+    assertVLMInWantedLocationInVSPList(vlm3Id, 0, USER3);
+  }
+
+  @Test(dependsOnMethods = {"testOldVLMAfterChangeShouldBeInBeginningOfList"})
+  public void testAddNewVLMShouldBeInBeginningOfList() {
+    org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity vlm = createVendorLicenseModel("test_vlm3", "desc", "icon");
+    String vlm5Id = vendorLicenseManager.createVendorLicenseModel(vlm, USER3).getId();
+
+    assertVLMInWantedLocationInVSPList(vlm5Id, 0, USER3);
+  }
+
+  @Test(dependsOnMethods = {"testAddNewVLMShouldBeInBeginningOfList"})
+  public void testVLMInBeginningOfListAfterCheckin() {
+    vendorLicenseManager.checkin(vlm4Id, USER3);
+    assertVLMInWantedLocationInVSPList(vlm4Id, 0, USER3);
+  }
+
+  @Test(dependsOnMethods = {"testVLMInBeginningOfListAfterCheckin"})
+  public void testVLMInBeginningOfListAfterCheckout() {
+    vendorLicenseManager.checkin(vlm3Id, USER3);
+    assertVLMInWantedLocationInVSPList(vlm3Id, 0, USER3);
+
+    vendorLicenseManager.checkout(vlm4Id, USER3);
+    assertVLMInWantedLocationInVSPList(vlm4Id, 0, USER3);
+  }
+
+  @Test(dependsOnMethods = {"testVLMInBeginningOfListAfterCheckout"})
+  public void testVLMInBeginningOfListAfterUndoCheckout() {
+    vendorLicenseManager.checkout(vlm3Id, USER3);
+    vendorLicenseManager.undoCheckout(vlm3Id, USER3);
+    assertVLMInWantedLocationInVSPList(vlm3Id, 0, USER3);
+  }
+
+  private void assertVLMInWantedLocationInVSPList(String vlmId, int location, String user) {
+    List<org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel> vlmList =
+        (List<org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel>) vendorLicenseManager
+            .listVendorLicenseModels(null, user);
+    Assert.assertEquals(vlmList.get(location).getVendorLicenseModel().getId(), vlmId);
+  }
+
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/licenseartifacts/impl/VendorLicenseArtifactsServiceTest.java b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/licenseartifacts/impl/VendorLicenseArtifactsServiceTest.java
new file mode 100644
index 0000000..778caf3
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-license-manager/src/test/java/org/openecomp/sdc/vendorlicense/licenseartifacts/impl/VendorLicenseArtifactsServiceTest.java
@@ -0,0 +1,141 @@
+package org.openecomp.sdc.vendorlicense.licenseartifacts.impl;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.openecomp.sdc.vendorlicense.ArtifactTestUtils;
+import org.openecomp.sdc.vendorlicense.dao.types.EntitlementMetric;
+import org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity;
+import org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity;
+import org.openecomp.sdc.vendorlicense.dao.types.OperationalScope;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.core.utilities.file.FileContentHandler;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+
+public class VendorLicenseArtifactsServiceTest extends ArtifactTestUtils {
+    private FileContentHandler licenseArtifacts;
+
+
+    @Test
+    public void createVNFArtifact() throws Exception {
+        Version vlmVersion = vspDetails.getVlmVersion();
+        licenseArtifacts = vendorLicenseArtifactsService.createLicenseArtifacts(vspDetails.getId(), vspDetails.getVendorId(), vlmVersion, vspDetails.getFeatureGroups(), USER1);
+        String actual = IOUtils.toString(licenseArtifacts.getFileContent(
+            org.openecomp.sdc.vendorlicense.VendorLicenseConstants.VNF_ARTIFACT_NAME_WITH_PATH), StandardCharsets.UTF_8);
+//        System.out.println("createVnfArtifact = " + actual);
+
+        Assert.assertTrue(actual.contains("type"));
+        Assert.assertFalse(actual.contains(lkg13Id));
+        Assert.assertTrue(actual.contains(OperationalScope.Availability_Zone.toString()));
+        Assert.assertTrue(actual.contains("vf-id"));
+        Assert.assertFalse(actual.contains(org.openecomp.sdc.vendorlicense.VendorLicenseConstants.VENDOR_LICENSE_MODEL_ARTIFACT_REGEX_REMOVE));
+        Assert.assertFalse(actual.contains("80.0"));
+        Assert.assertTrue(actual.contains("80"));
+
+    }
+
+    @Test
+    public void createVendorLicenseArtifact() throws Exception {
+        Version vlmVersion = vspDetails.getVlmVersion();
+
+        licenseArtifacts = vendorLicenseArtifactsService.createLicenseArtifacts(vspDetails.getId(), vspDetails.getVendorId(), vlmVersion, vspDetails.getFeatureGroups(), USER1);
+        String actual = IOUtils.toString(licenseArtifacts.getFileContent(
+            org.openecomp.sdc.vendorlicense.VendorLicenseConstants.VENDOR_LICENSE_MODEL_ARTIFACT_NAME_WITH_PATH), StandardCharsets.UTF_8);
+
+//        System.out.println("createVendorLicenseArtifact = " + actual);
+        Assert.assertFalse(actual.contains(lkg11Id));
+        Assert.assertFalse(actual.contains(ep11Id));
+        Assert.assertTrue(actual.contains("type"));
+        Assert.assertTrue(actual.contains(EntitlementMetric.Core.toString()));
+        Assert.assertTrue(actual.contains("entitlement-pool-list"));
+        Assert.assertFalse(actual.contains(org.openecomp.sdc.vendorlicense.VendorLicenseConstants.VENDOR_LICENSE_MODEL_ARTIFACT_REGEX_REMOVE));
+
+        Assert.assertTrue(actual.contains("vendor-license-model"));
+        Assert.assertFalse(actual.contains("80.0"));
+        Assert.assertTrue(actual.contains("80"));
+    }
+
+    @Test
+    public void vNFArtifactContainsCurrentVLMVersion() throws IOException {
+        super.setVlm2FirstVersion();
+        licenseArtifacts = vendorLicenseArtifactsService.createLicenseArtifacts(vsp2.getId(), vsp2.getVendorId(), vsp2.getVlmVersion(), vsp2.getFeatureGroups(), USER1);
+        String actual = IOUtils.toString(licenseArtifacts.getFileContent(
+            org.openecomp.sdc.vendorlicense.VendorLicenseConstants.VNF_ARTIFACT_NAME_WITH_PATH), StandardCharsets.UTF_8);
+
+        Assert.assertTrue(actual.contains(ep21.getVersionUuId()));
+    }
+
+    @Test
+    public void vnfArtifactContainsSameIdAsVLMArtifact() throws IOException {
+        Version vlmVersion = vspDetails.getVlmVersion();
+        licenseArtifacts = vendorLicenseArtifactsService.createLicenseArtifacts(vspDetails.getId(), vspDetails.getVendorId(), vlmVersion, vspDetails.getFeatureGroups(), USER1);
+        String actualVnfArtifact = IOUtils.toString(licenseArtifacts.getFileContent(
+            org.openecomp.sdc.vendorlicense.VendorLicenseConstants.VNF_ARTIFACT_NAME_WITH_PATH), StandardCharsets.UTF_8);
+        String actualVendorLicenseArtifact = IOUtils.toString(licenseArtifacts.getFileContent(
+            org.openecomp.sdc.vendorlicense.VendorLicenseConstants.VENDOR_LICENSE_MODEL_ARTIFACT_NAME_WITH_PATH), StandardCharsets.UTF_8);
+
+        String firstLKGUUID = actualVnfArtifact.substring(actualVnfArtifact.indexOf("<license-key-group-uuid>") + 24, actualVnfArtifact.indexOf("<license-key-group-uuid>") + 60);
+        Assert.assertTrue(actualVendorLicenseArtifact.contains(firstLKGUUID));
+
+        String firstEPUUID = actualVnfArtifact.substring(actualVnfArtifact.indexOf("<<entitlement-pool-uuid>>") + 23, actualVnfArtifact.indexOf("<<entitlement-pool-uuid>>") + 60);
+        Assert.assertTrue(actualVendorLicenseArtifact.contains(firstEPUUID));
+    }
+
+
+    @Test
+    public void vNFArtifactContainsPreviousVLMVersionAndNotLatest() throws IOException {
+        super.setVlm2SecondVersion();
+        licenseArtifacts = vendorLicenseArtifactsService.createLicenseArtifacts(vsp2.getId(), vsp2.getVendorId(), vsp2.getVlmVersion(), vsp2.getFeatureGroups(), USER1);
+        String actual = IOUtils.toString(licenseArtifacts.getFileContent(
+            org.openecomp.sdc.vendorlicense.VendorLicenseConstants.VNF_ARTIFACT_NAME_WITH_PATH), StandardCharsets.UTF_8);
+
+        Assert.assertTrue(actual.contains(lkg21.getVersionUuId()));
+        Assert.assertTrue(actual.contains(ep21.getVersionUuId()));
+        Assert.assertFalse(actual.contains(lkg22Id));
+        Assert.assertFalse(actual.contains(ep22Id));
+
+
+        Assert.assertTrue(actual.contains("80"));
+    }
+
+
+    @Test
+    public void onlyAddChangedEntitiesToVendorArtifact() throws IOException {
+        Version vlmVersion = vspDetails.getVlmVersion();
+
+        EntitlementPoolEntity updatedEP = ep11;
+        String updatedNameEP = "updatedNameEP";
+        updatedEP.setName(updatedNameEP);
+        LicenseKeyGroupEntity updatedLKG = new LicenseKeyGroupEntity();
+        updatedLKG.setId(lkg11Id);
+        updatedLKG.setVendorLicenseModelId(lkg11.getVendorLicenseModelId());
+        String updateDescLKG = "UpdateDescLKG";
+        updatedLKG.setName(lkg11.getName());
+        updatedLKG.setDescription(updateDescLKG);
+
+        createThirdFinalVersionForVLMChangeEpLKGInSome(ep11.getVendorLicenseModelId(), updatedEP, updatedLKG);
+        licenseArtifacts = vendorLicenseArtifactsService.createLicenseArtifacts(vspDetails.getId(), vspDetails.getVendorId(), vlmVersion, vspDetails.getFeatureGroups(), USER1);
+        String actual = IOUtils.toString(licenseArtifacts.getFileContent(
+            org.openecomp.sdc.vendorlicense.VendorLicenseConstants.VENDOR_LICENSE_MODEL_ARTIFACT_NAME_WITH_PATH), StandardCharsets.UTF_8);
+//        System.out.println("onlyAddChangedEntitiesToVendorArtifact = " + actual);
+
+        int countUpdatedLKG = StringUtils.countMatches(actual, updateDescLKG);
+        Assert.assertEquals(countUpdatedLKG, 1);
+
+        int countUpdatedEp = StringUtils.countMatches(actual, updatedNameEP);
+        Assert.assertEquals(countUpdatedEp, 1);
+
+        int epOccurrences = StringUtils.countMatches(actual, "<entitlement-pool>");
+        Assert.assertEquals(epOccurrences, 3);
+    }
+
+    @BeforeClass
+    public void setUp() {
+        super.setUp();
+    }
+}
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/pom.xml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/pom.xml
new file mode 100644
index 0000000..6b98e15
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/pom.xml
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>backend</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>openecomp-sdc-vendor-software-product-manager</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.3.1</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
+            <version>1.14</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.core</groupId>
+            <artifactId>openecomp-utilities-lib</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-validation-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+        <groupId>org.openecomp.core</groupId>
+        <artifactId>openecomp-nosqldb-core</artifactId>
+        <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-vendor-software-product-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.core</groupId>
+            <artifactId>openecomp-heat-lib</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.core</groupId>
+            <artifactId>openecomp-tosca-lib</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <version>6.9.10</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>RELEASE</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-all</artifactId>
+            <version>1.10.19</version>
+            <scope>test</scope>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-translator-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-xml</artifactId>
+            <version>2.7.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.woodstox</groupId>
+            <artifactId>woodstox-core-asl</artifactId>
+            <version>4.4.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-vendor-license-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-enrichment-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-validation-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-enrichment-impl</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>${commons.io.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-model-impl</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-validation-manager</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+    <plugins>
+        <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <version>2.19.1</version>
+            <configuration>
+                <skipTests>true</skipTests>
+            </configuration>
+        </plugin>
+    </plugins>
+    </build>
+
+    
+</project>
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/VendorSoftwareProductManager.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/VendorSoftwareProductManager.java
new file mode 100644
index 0000000..0d38d16
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/VendorSoftwareProductManager.java
@@ -0,0 +1,173 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct;
+
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.PackageInfo;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityValidationData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.UploadFileResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.ValidationResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.VersionedVendorSoftwareProductInfo;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.MibUploadStatus;
+import org.openecomp.sdc.versioning.dao.types.Version;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.List;
+
+public interface VendorSoftwareProductManager {
+
+  Version checkout(String vendorSoftwareProductId, String user);
+
+  Version undoCheckout(String vendorSoftwareProductId, String user);
+
+  Version checkin(String vendorSoftwareProductId, String user);
+
+  ValidationResponse submit(String vendorSoftwareProductId, String user) throws IOException;
+
+
+  VspDetails createNewVsp(VspDetails vspDetails, String user);
+
+  List<VersionedVendorSoftwareProductInfo> getVspList(String versionFilter, String user);
+
+  void updateVsp(VspDetails vspDetails, String user);
+
+  VersionedVendorSoftwareProductInfo getVspDetails(String vspId, Version version, String user);
+
+  void deleteVsp(String vspIdToDelete, String user);
+
+
+  UploadFileResponse uploadFile(String vspId, InputStream heatFileToUpload, String user);
+
+  PackageInfo createPackage(String vspId, String user) throws IOException;
+
+  List<PackageInfo> listPackages(String category, String subCategory);
+
+  File getTranslatedFile(String vspId, Version version, String user);
+
+  File getLatestHeatPackage(String vspId, String user);
+
+  QuestionnaireResponse getVspQuestionnaire(String vspId, Version version, String user);
+
+  void updateVspQuestionnaire(String vspId, String questionnaireData, String user);
+
+
+  Collection<NetworkEntity> listNetworks(String vspId, Version version, String user);
+
+  NetworkEntity createNetwork(NetworkEntity network, String user);
+
+  CompositionEntityValidationData updateNetwork(NetworkEntity networkEntity, String user);
+
+  CompositionEntityResponse<Network> getNetwork(String vspId, Version version, String networkId,
+                                                String user);
+
+  void deleteNetwork(String vspId, String networkId, String user);
+
+
+  QuestionnaireResponse getComponentQuestionnaire(String vspId, Version version, String componentId,
+                                                  String user);
+
+  void updateComponentQuestionnaire(String vspId, String componentId, String questionnaireData,
+                                    String user);
+
+
+  Collection<ComponentEntity> listComponents(String vspId, Version version, String user);
+
+  void deleteComponents(String vspId, String user);
+
+  ComponentEntity createComponent(ComponentEntity componentEntity, String user);
+
+  CompositionEntityValidationData updateComponent(ComponentEntity componentEntity, String user);
+
+  CompositionEntityResponse<ComponentData> getComponent(String vspId, Version version,
+                                                        String componentId, String user);
+
+  void deleteComponent(String vspId, String componentId, String user);
+
+
+  Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity> listProcesses(
+      String vspId, Version version, String componentId,
+      String user);
+
+  void deleteProcesses(String vspId, String componentId, String user);
+
+  org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity createProcess(
+      org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity processEntity, String user);
+
+  org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity getProcess(String vspId,
+                                                                            Version version,
+                                                                            String componentId,
+                                                                            String processId,
+                                                                            String user);
+
+  void updateProcess(org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity processEntity,
+                     String user);
+
+  void deleteProcess(String vspId, String componentId, String processId, String user);
+
+
+  File getProcessArtifact(String vspId, Version version, String componentId, String processId,
+                          String user);
+
+  void deleteProcessArtifact(String vspId, String componentId, String processId, String user);
+
+  void uploadProcessArtifact(InputStream uploadFile, String fileName, String vspId,
+                             String componentId, String processId, String user);
+
+
+  Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity> listNics(String vspId,
+                                                                                 Version version,
+                                                                                 String componentId,
+                                                                                 String user);
+
+  org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity createNic(
+      org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity nic, String user);
+
+  CompositionEntityValidationData updateNic(
+      org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity nicEntity, String user);
+
+  CompositionEntityResponse<Nic> getNic(String vspId, Version version, String componentId,
+                                        String nicId, String user);
+
+  void deleteNic(String vspId, String componentId, String nicId, String user);
+
+  QuestionnaireResponse getNicQuestionnaire(String vspId, Version version, String componentId,
+                                            String nicId, String user);
+
+  void updateNicQuestionnaire(String vspId, String componentId, String nicId,
+                              String questionnaireData, String user);
+
+  void deleteComponentMib(String vspId, String componentId, boolean isTrap, String user);
+
+  void uploadComponentMib(InputStream object, String filename, String vspId, String componentId,
+                          boolean isTrap, String user);
+
+  MibUploadStatus listMibFilenames(String vspId, String componentId, String user);
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/CreatePackageForNonFinalVendorSoftwareProductErrorBuilder.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/CreatePackageForNonFinalVendorSoftwareProductErrorBuilder.java
new file mode 100644
index 0000000..527530d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/CreatePackageForNonFinalVendorSoftwareProductErrorBuilder.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.errors;
+
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.versioning.dao.types.Version;
+
+/**
+ * The type Create package for non final vendor software product error builder.
+ */
+public class CreatePackageForNonFinalVendorSoftwareProductErrorBuilder {
+
+  private static final String CREATE_PACKAGE_FOR_NON_FINAL_VSP_MSG =
+      "Package creation for vendor software product with id %s and version %s is not allowed "
+          + "since it is not final (submitted).";
+  private final ErrorCode.ErrorCodeBuilder builder = new ErrorCode.ErrorCodeBuilder();
+
+  /**
+   * Instantiates a new Create package for non final vendor software product error builder.
+   *
+   * @param vendorSoftwareProductId the vendor software product id
+   * @param version                 the version
+   */
+  public CreatePackageForNonFinalVendorSoftwareProductErrorBuilder(String vendorSoftwareProductId,
+                                                                   Version version) {
+    builder.withId(VendorSoftwareProductErrorCodes.CREATE_PACKAGE_FOR_NON_FINAL_VSP);
+    builder.withCategory(ErrorCategory.APPLICATION);
+    builder.withMessage(String
+        .format(CREATE_PACKAGE_FOR_NON_FINAL_VSP_MSG, vendorSoftwareProductId, version.toString()));
+  }
+
+  /**
+   * Build error code.
+   *
+   * @return the error code
+   */
+  public ErrorCode build() {
+    return builder.build();
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/FileCreationErrorBuilder.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/FileCreationErrorBuilder.java
new file mode 100644
index 0000000..5a40609
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/FileCreationErrorBuilder.java
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.errors;
+
+import static org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes.HEAT_PACKAGE_FILE_CREATION;
+
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+
+/**
+ * The type File creation error builder.
+ */
+public class FileCreationErrorBuilder {
+  private static final String HEAT_PKG_FILE_CREATION_ERROR_MSG =
+      "Error while trying to create heat file from the package of vendor software product "
+          + "with Id %s.";
+  private final ErrorCode.ErrorCodeBuilder builder = new ErrorCode.ErrorCodeBuilder();
+
+  /**
+   * Instantiates a new File creation error builder.
+   *
+   * @param vendorSoftwareProductId the vendor software product id
+   */
+  public FileCreationErrorBuilder(String vendorSoftwareProductId) {
+    builder.withId(HEAT_PACKAGE_FILE_CREATION);
+    builder.withCategory(ErrorCategory.SYSTEM);
+    builder.withMessage(String.format(HEAT_PKG_FILE_CREATION_ERROR_MSG, vendorSoftwareProductId));
+  }
+
+  /**
+   * Build error code.
+   *
+   * @return the error code
+   */
+  public ErrorCode build() {
+    return builder.build();
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/MibUploadErrorBuilder.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/MibUploadErrorBuilder.java
new file mode 100644
index 0000000..75a4aa3
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/MibUploadErrorBuilder.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.errors;
+
+import org.openecomp.sdc.common.errors.BaseErrorBuilder;
+import org.openecomp.sdc.common.errors.ErrorCategory;
+
+/**
+ * The type Mib upload error builder.
+ */
+public class MibUploadErrorBuilder extends BaseErrorBuilder {
+  private static final String UPLOAD_INVALID_DETAILED_MSG =
+      "MIB uploaded for vendor software product with Id %s and version %s is invalid: %s";
+
+
+  /**
+   * Instantiates a new Mib upload error builder.
+   *
+   * @param vendorSoftwareProductId the vendor software product id
+   * @param version                 the version
+   * @param error                   the error
+   */
+  public MibUploadErrorBuilder(String vendorSoftwareProductId, org.openecomp.sdc.versioning.dao
+      .types.Version version, String error) {
+    getErrorCodeBuilder().withId(VendorSoftwareProductErrorCodes.MIB_UPLOAD_INVALID);
+    getErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION);
+    getErrorCodeBuilder().withMessage(String
+        .format(UPLOAD_INVALID_DETAILED_MSG, vendorSoftwareProductId, version.toString(), error));
+  }
+
+  /**
+   * Instantiates a new Mib upload error builder.
+   *
+   * @param errorMessage the error message
+   */
+  public MibUploadErrorBuilder(String errorMessage) {
+    getErrorCodeBuilder().withId(VendorSoftwareProductErrorCodes.MIB_UPLOAD_INVALID);
+    getErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION);
+    getErrorCodeBuilder().withMessage(errorMessage);
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/PackageInvalidErrorBuilder.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/PackageInvalidErrorBuilder.java
new file mode 100644
index 0000000..279dbfe
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/PackageInvalidErrorBuilder.java
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.errors;
+
+import static org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes
+    .PACKAGE_INVALID;
+
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.versioning.dao.types.Version;
+
+/**
+ * The type Package invalid error builder.
+ */
+public class PackageInvalidErrorBuilder {
+  private static final String PACKAGE_INVALID_MSG =
+      "Package for vendor software product with Id %s and version %s is invalid "
+          + "(does not contain translated data).";
+  private final ErrorCode.ErrorCodeBuilder builder = new ErrorCode.ErrorCodeBuilder();
+
+  /**
+   * Instantiates a new Package invalid error builder.
+   *
+   * @param vendorSoftwareProductId the vendor software product id
+   * @param version                 the version
+   */
+  public PackageInvalidErrorBuilder(String vendorSoftwareProductId, Version version) {
+    builder.withId(PACKAGE_INVALID);
+    builder.withCategory(ErrorCategory.APPLICATION);
+    builder.withMessage(
+        String.format(PACKAGE_INVALID_MSG, vendorSoftwareProductId, version.toString()));
+  }
+
+  /**
+   * Build error code.
+   *
+   * @return the error code
+   */
+  public ErrorCode build() {
+    return builder.build();
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/PackageNotFoundErrorBuilder.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/PackageNotFoundErrorBuilder.java
new file mode 100644
index 0000000..3a32fa3
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/PackageNotFoundErrorBuilder.java
@@ -0,0 +1,71 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.errors;
+
+import static org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes.PACKAGE_NOT_FOUND;
+
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.versioning.dao.types.Version;
+
+/**
+ * The type Package not found error builder.
+ */
+public class PackageNotFoundErrorBuilder {
+  private static final String PACKAGE_VERSION_NOT_FOUND_MSG =
+      "Package for vendor software product with Id %s and version %s does not exist.";
+  private static final String PACKAGE_NOT_FOUND_MSG =
+      "Package for vendor software product with Id %s does not exist.";
+  private final ErrorCode.ErrorCodeBuilder builder = new ErrorCode.ErrorCodeBuilder();
+
+  /**
+   * Instantiates a new Package not found error builder.
+   *
+   * @param vendorSoftwareProductId the vendor software product id
+   * @param version                 the version
+   */
+  public PackageNotFoundErrorBuilder(String vendorSoftwareProductId, Version version) {
+    builder.withId(PACKAGE_NOT_FOUND);
+    builder.withCategory(ErrorCategory.APPLICATION);
+    builder.withMessage(
+        String.format(PACKAGE_VERSION_NOT_FOUND_MSG, vendorSoftwareProductId, version.toString()));
+  }
+
+  /**
+   * Instantiates a new Package not found error builder.
+   *
+   * @param vendorSoftwareProductId the vendor software product id
+   */
+  public PackageNotFoundErrorBuilder(String vendorSoftwareProductId) {
+    builder.withId(PACKAGE_NOT_FOUND);
+    builder.withCategory(ErrorCategory.APPLICATION);
+    builder.withMessage(String.format(PACKAGE_NOT_FOUND_MSG, vendorSoftwareProductId));
+  }
+
+  /**
+   * Build error code.
+   *
+   * @return the error code
+   */
+  public ErrorCode build() {
+    return builder.build();
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/TranslationFileCreationErrorBuilder.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/TranslationFileCreationErrorBuilder.java
new file mode 100644
index 0000000..2267e1d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/TranslationFileCreationErrorBuilder.java
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.errors;
+
+import static org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes
+    .TRANSLATION_FILE_CREATION;
+
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.versioning.dao.types.Version;
+
+/**
+ * The type Translation file creation error builder.
+ */
+public class TranslationFileCreationErrorBuilder {
+  private static final String TRANSLATION_FILE_CREATION_ERROR_MSG =
+      "Error while trying to create translation file from the package of vendor software "
+          + "product with Id %s and version %s.";
+  private final ErrorCode.ErrorCodeBuilder builder = new ErrorCode.ErrorCodeBuilder();
+
+  /**
+   * Instantiates a new Translation file creation error builder.
+   *
+   * @param vendorSoftwareProductId the vendor software product id
+   * @param version                 the version
+   */
+  public TranslationFileCreationErrorBuilder(String vendorSoftwareProductId, Version version) {
+    builder.withId(TRANSLATION_FILE_CREATION);
+    builder.withCategory(ErrorCategory.SYSTEM);
+    builder.withMessage(String
+        .format(TRANSLATION_FILE_CREATION_ERROR_MSG, vendorSoftwareProductId, version.toString()));
+  }
+
+  /**
+   * Build error code.
+   *
+   * @return the error code
+   */
+  public ErrorCode build() {
+    return builder.build();
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/UploadInvalidErrorBuilder.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/UploadInvalidErrorBuilder.java
new file mode 100644
index 0000000..0974af1
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/UploadInvalidErrorBuilder.java
@@ -0,0 +1,82 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.errors;
+
+import static org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes
+    .UPLOAD_INVALID;
+
+import org.openecomp.sdc.common.errors.BaseErrorBuilder;
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.datatypes.error.ErrorMessage;
+import org.openecomp.sdc.versioning.dao.types.Version;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * The type Upload invalid error builder.
+ */
+public class UploadInvalidErrorBuilder extends BaseErrorBuilder {
+  private static final String UPLOAD_INVALID_DETAILED_MSG =
+      "File uploaded for vendor software product with Id %s and version %s is invalid: %s";
+  private static final String UPLOAD_INVALID_MSG = "Uploaded file is invalid";
+
+  /**
+   * Instantiates a new Upload invalid error builder.
+   *
+   * @param vendorSoftwareProductId the vendor software product id
+   * @param version                 the version
+   * @param errors                  the errors
+   */
+  public UploadInvalidErrorBuilder(String vendorSoftwareProductId, Version version,
+                                   Map<String, List<ErrorMessage>> errors) {
+    getErrorCodeBuilder().withId(UPLOAD_INVALID);
+    getErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION);
+    getErrorCodeBuilder().withMessage(String
+        .format(UPLOAD_INVALID_DETAILED_MSG, vendorSoftwareProductId, version.toString(),
+            toString(errors)));
+  }
+
+  /**
+   * Instantiates a new Upload invalid error builder.
+   */
+  public UploadInvalidErrorBuilder() {
+    getErrorCodeBuilder().withId(UPLOAD_INVALID);
+    getErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION);
+    getErrorCodeBuilder().withMessage(UPLOAD_INVALID_MSG);
+  }
+
+  private String toString(Map<String, List<ErrorMessage>> errors) {
+    StringBuffer sb = new StringBuffer();
+    errors.entrySet().stream()
+        .forEach(entry -> singleErrorToString(sb, entry.getKey(), entry.getValue()));
+    return sb.toString();
+  }
+
+  private void singleErrorToString(StringBuffer sb, String fileName, List<ErrorMessage> errors) {
+    sb.append(System.lineSeparator());
+    sb.append(fileName);
+    sb.append(sb.append(": "));
+    errors.stream().forEach(
+        error -> sb.append(error.getMessage()).append("[").append(error.getLevel()).append("], "));
+  }
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/VendorSoftwareProductErrorCodes.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/VendorSoftwareProductErrorCodes.java
new file mode 100644
index 0000000..369e99d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/VendorSoftwareProductErrorCodes.java
@@ -0,0 +1,48 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.errors;
+
+public class VendorSoftwareProductErrorCodes {
+
+  public static final String VSP_NOT_FOUND = "VSP_NOT_FOUND";
+  public static final String VSP_INVALID = "VSP_INVALID";
+
+  public static final String UPLOAD_INVALID = "UPLOAD_INVALID";
+
+  public static final String PACKAGE_NOT_FOUND = "PACKAGE_NOT_FOUND";
+
+  public static final String PACKAGE_INVALID = "PACKAGE_INVALID";
+  public static final String VSP_COMPOSITION_EDIT_NOT_ALLOWED = "VSP_COMPOSITION_EDIT_NOT_ALLOWED";
+
+  public static final String CREATE_PACKAGE_FOR_NON_FINAL_VSP = "CREATE_PACKAGE_FOR_NON_FINAL_VSP";
+
+  public static final String TRANSLATION_FILE_CREATION = "TRANSLATION_FILE_CREATION";
+
+  public static final String HEAT_PACKAGE_FILE_CREATION = "HEAT_PACKAGE_FILE_CREATION";
+
+  public static final String TOSCA_ENTRY_NOT_FOUND = "TOSCA_ENTRY_NOT_FOUND";
+  public static final String TOSCA_INVALID_SUBSTITUTE_NODE_TEMPLATE =
+      "TOSCA_INVALID_SUBSTITUTE_NODE_TEMPLATE";
+
+  public static final String MIB_UPLOAD_INVALID = "MIB_UPLOAD_INVALID";
+
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/VendorSoftwareProductInvalidErrorBuilder.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/VendorSoftwareProductInvalidErrorBuilder.java
new file mode 100644
index 0000000..1439563
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/VendorSoftwareProductInvalidErrorBuilder.java
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.errors;
+
+import static org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes.VSP_INVALID;
+
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.versioning.dao.types.Version;
+
+
+/**
+ * The type Vendor software product invalid error builder.
+ */
+public class VendorSoftwareProductInvalidErrorBuilder {
+  private static final String VSP_INVALID_MSG =
+      "Vendor software product with Id %s and version %s is invalid - does not contain "
+          + "service model.";
+  private final ErrorCode.ErrorCodeBuilder builder = new ErrorCode.ErrorCodeBuilder();
+
+  /**
+   * Instantiates a new Vendor software product invalid error builder.
+   *
+   * @param vendorSoftwareProductId the vendor software product id
+   * @param version                 the version
+   */
+  public VendorSoftwareProductInvalidErrorBuilder(String vendorSoftwareProductId, Version version) {
+    builder.withId(VSP_INVALID);
+    builder.withCategory(ErrorCategory.APPLICATION);
+    builder
+        .withMessage(String.format(VSP_INVALID_MSG, vendorSoftwareProductId, version.toString()));
+  }
+
+  /**
+   * Build error code.
+   *
+   * @return the error code
+   */
+  public ErrorCode build() {
+    return builder.build();
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/VendorSoftwareProductNotFoundErrorBuilder.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/VendorSoftwareProductNotFoundErrorBuilder.java
new file mode 100644
index 0000000..89fc08c
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/errors/VendorSoftwareProductNotFoundErrorBuilder.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.errors;
+
+import static org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes.VSP_NOT_FOUND;
+
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+
+/**
+ * The type Vendor software product not found error builder.
+ */
+public class VendorSoftwareProductNotFoundErrorBuilder {
+  private static final String VSP_FOUND_MSG = "Vendor software product with Id %s not found.";
+  private final ErrorCode.ErrorCodeBuilder builder = new ErrorCode.ErrorCodeBuilder();
+
+  /**
+   * Instantiates a new Vendor software product not found error builder.
+   *
+   * @param vendorSoftwareProductId the vendor software product id
+   */
+  public VendorSoftwareProductNotFoundErrorBuilder(String vendorSoftwareProductId) {
+    builder.withId(VSP_NOT_FOUND);
+    builder.withCategory(ErrorCategory.APPLICATION);
+    builder.withMessage(String.format(VSP_FOUND_MSG, vendorSoftwareProductId));
+  }
+
+  /**
+   * Build error code.
+   *
+   * @return the error code
+   */
+  public ErrorCode build() {
+    return builder.build();
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/VendorSoftwareProductManagerImpl.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/VendorSoftwareProductManagerImpl.java
new file mode 100644
index 0000000..191c8d7
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/VendorSoftwareProductManagerImpl.java
@@ -0,0 +1,1567 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.impl;
+
+import static org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.CSAR;
+import static org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.GENERAL_COMPONENT_ID;
+import static org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.UPLOAD_RAW_DATA;
+import static org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.VENDOR_SOFTWARE_PRODUCT_VERSIONABLE_TYPE;
+import static org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.VSP_PACKAGE_ZIP;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.openecomp.core.enrichment.EnrichmentArtifactsServiceFactory;
+import org.openecomp.core.enrichment.api.EnrichmentManager;
+import org.openecomp.core.enrichment.enrichmentartifacts.EnrichmentArtifactsService;
+import org.openecomp.core.enrichment.factory.EnrichmentManagerFactory;
+import org.openecomp.core.enrichment.types.ComponentArtifactType;
+import org.openecomp.core.model.dao.EnrichedServiceModelDao;
+import org.openecomp.core.model.dao.EnrichedServiceModelDaoFactory;
+import org.openecomp.core.model.dao.ServiceModelDao;
+import org.openecomp.core.model.dao.ServiceModelDaoFactory;
+import org.openecomp.core.model.types.ServiceElement;
+import org.openecomp.core.util.UniqueValueUtil;
+import org.openecomp.core.utilities.CommonMethods;
+import org.openecomp.core.utilities.file.FileContentHandler;
+import org.openecomp.core.utilities.file.FileUtils;
+import org.openecomp.core.utilities.json.JsonSchemaDataGenerator;
+import org.openecomp.core.utilities.json.JsonUtil;
+import org.openecomp.core.validation.api.ValidationManager;
+import org.openecomp.core.validation.errors.Messages;
+import org.openecomp.core.validation.types.MessageContainerUtil;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.common.errors.ValidationErrorBuilder;
+import org.openecomp.sdc.common.utils.AsdcCommon;
+import org.openecomp.sdc.datatypes.error.ErrorLevel;
+import org.openecomp.sdc.datatypes.error.ErrorMessage;
+import org.openecomp.sdc.enrichment.impl.tosca.ComponentInfo;
+import org.openecomp.sdc.heat.datatypes.structure.HeatStructureTree;
+import org.openecomp.sdc.heat.datatypes.structure.ValidationStructureList;
+import org.openecomp.sdc.heat.services.tree.HeatTreeManager;
+import org.openecomp.sdc.heat.services.tree.HeatTreeManagerUtil;
+import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
+import org.openecomp.sdc.tosca.services.impl.ToscaFileOutputServiceCsarImpl;
+import org.openecomp.sdc.validation.utils.ValidationManagerUtil;
+import org.openecomp.sdc.vendorlicense.VendorLicenseArtifactServiceFactory;
+import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacade;
+import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacadeFactory;
+import org.openecomp.sdc.vendorlicense.licenseartifacts.VendorLicenseArtifactsService;
+import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants;
+import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentArtifactDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentArtifactDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentArtifactEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.PackageInfo;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessArtifactEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.UploadDataEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspQuestionnaireEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.CreatePackageForNonFinalVendorSoftwareProductErrorBuilder;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.FileCreationErrorBuilder;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.MibUploadErrorBuilder;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.PackageInvalidErrorBuilder;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.PackageNotFoundErrorBuilder;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.TranslationFileCreationErrorBuilder;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.UploadInvalidErrorBuilder;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductInvalidErrorBuilder;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductNotFoundErrorBuilder;
+import org.openecomp.sdc.vendorsoftwareproduct.services.CompositionDataExtractor;
+import org.openecomp.sdc.vendorsoftwareproduct.services.CompositionEntityDataManager;
+import org.openecomp.sdc.vendorsoftwareproduct.services.SchemaGenerator;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityValidationData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireValidationResult;
+import org.openecomp.sdc.vendorsoftwareproduct.types.UploadFileResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.ValidationResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.VersionedVendorSoftwareProductInfo;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.ComponentCompositionSchemaInput;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.ComponentQuestionnaireSchemaInput;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.MibUploadStatus;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.NetworkCompositionSchemaInput;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.NicCompositionSchemaInput;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateInput;
+import org.openecomp.sdc.vendorsoftwareproduct.util.CompilationUtil;
+import org.openecomp.sdc.vendorsoftwareproduct.util.VendorSoftwareProductUtils;
+import org.openecomp.sdc.versioning.VersioningManager;
+import org.openecomp.sdc.versioning.VersioningManagerFactory;
+import org.openecomp.sdc.versioning.VersioningUtil;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.dao.types.VersionStatus;
+import org.openecomp.sdc.versioning.errors.RequestedVersionInvalidErrorBuilder;
+import org.openecomp.sdc.versioning.types.VersionInfo;
+import org.openecomp.sdc.versioning.types.VersionableEntityAction;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * The type Vendor software product manager.
+ */
+public class VendorSoftwareProductManagerImpl implements VendorSoftwareProductManager {
+
+  private static final String VSP_COMPOSITION_EDIT_NOT_ALLOWED_MSG =
+      "Composition entities may not be created / deleted for Vendor Software Product whose "
+          + "entities were uploaded";
+
+  private static final VersioningManager versioningManager =
+      VersioningManagerFactory.getInstance().createInterface();
+  private static final VendorSoftwareProductDao vendorSoftwareProductDao =
+      VendorSoftwareProductDaoFactory.getInstance().createInterface();
+  private static final VendorLicenseFacade vendorLicenseFacade =
+      VendorLicenseFacadeFactory.getInstance().createInterface();
+  private static final ComponentArtifactDao componentArtifactDao =
+      ComponentArtifactDaoFactory.getInstance().createInterface();
+  private static final ServiceModelDao<ToscaServiceModel, ServiceElement> serviceModelDao =
+      ServiceModelDaoFactory.getInstance().createInterface();
+  private static final EnrichedServiceModelDao<ToscaServiceModel, ServiceElement>
+      enrichedServiceModelDao = EnrichedServiceModelDaoFactory.getInstance().createInterface();
+  private static VendorLicenseArtifactsService licenseArtifactsService =
+      VendorLicenseArtifactServiceFactory.getInstance().createInterface();
+  private static EnrichmentArtifactsService enrichmentArtifactsService =
+      EnrichmentArtifactsServiceFactory.getInstance().createInterface();
+
+
+  /**
+   * Instantiates a new Vendor software product manager.
+   */
+  public VendorSoftwareProductManagerImpl() {
+    vendorSoftwareProductDao.registerVersioning(VENDOR_SOFTWARE_PRODUCT_VERSIONABLE_TYPE);
+    serviceModelDao.registerVersioning(VENDOR_SOFTWARE_PRODUCT_VERSIONABLE_TYPE);
+    enrichedServiceModelDao.registerVersioning(VENDOR_SOFTWARE_PRODUCT_VERSIONABLE_TYPE);
+    componentArtifactDao.registerVersioning(VENDOR_SOFTWARE_PRODUCT_VERSIONABLE_TYPE);
+  }
+
+  private static List<ErrorCode> validateCompletedVendorSoftwareProduct(VspDetails vspDetails,
+                                                                        UploadDataEntity uploadData,
+                                                                        Object serviceModel) {
+    List<ErrorCode> errros = new ArrayList<>();
+
+    if (vspDetails.getName() == null) {
+      errros.add(createMissingMandatoryFieldError("name"));
+    }
+    if (vspDetails.getDescription() == null) {
+      errros.add(createMissingMandatoryFieldError("description"));
+    }
+    if (vspDetails.getVendorId() == null) {
+      errros.add(createMissingMandatoryFieldError("vendor Id"));
+    }
+    if (vspDetails.getVlmVersion() == null) {
+      errros.add(createMissingMandatoryFieldError(
+          "licensing version (in the format of: {integer}.{integer})"));
+    }
+    if (vspDetails.getCategory() == null) {
+      errros.add(createMissingMandatoryFieldError("category"));
+    }
+    if (vspDetails.getSubCategory() == null) {
+      errros.add(createMissingMandatoryFieldError("sub category"));
+    }
+    if (vspDetails.getLicenseAgreement() == null) {
+      errros.add(createMissingMandatoryFieldError("license agreement"));
+    }
+    if (CollectionUtils.isEmpty(vspDetails.getFeatureGroups())) {
+      errros.add(createMissingMandatoryFieldError("feature groups"));
+    }
+    if (uploadData == null || uploadData.getContentData() == null || serviceModel == null) {
+      errros.add(
+          new VendorSoftwareProductInvalidErrorBuilder(vspDetails.getId(), vspDetails.getVersion())
+              .build());
+    }
+
+    return errros.isEmpty() ? null : errros;
+  }
+
+  private static ErrorCode createMissingMandatoryFieldError(String fieldName) {
+    return new ValidationErrorBuilder("must be supplied", fieldName).build();
+  }
+
+  private static String getVspQuestionnaireSchema(SchemaTemplateInput schemaInput) {
+    return SchemaGenerator
+        .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.vsp, schemaInput);
+  }
+
+  private static String getComponentQuestionnaireSchema(SchemaTemplateInput schemaInput) {
+    return SchemaGenerator
+        .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.component,
+            schemaInput);
+  }
+
+  private static String getNicQuestionnaireSchema(SchemaTemplateInput schemaInput) {
+    return SchemaGenerator
+        .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.nic, schemaInput);
+  }
+
+  private static void sortVspListByModificationTimeDescOrder(
+      List<VersionedVendorSoftwareProductInfo> vendorLicenseModels) {
+    Collections.sort(vendorLicenseModels, new Comparator<VersionedVendorSoftwareProductInfo>() {
+      @Override
+      public int compare(VersionedVendorSoftwareProductInfo o1,
+                         VersionedVendorSoftwareProductInfo o2) {
+        return o2.getVspDetails().getWritetimeMicroSeconds()
+            .compareTo(o1.getVspDetails().getWritetimeMicroSeconds());
+      }
+    });
+  }
+
+  private boolean isManual(String vspId, Version version) {
+    return false;
+  }
+
+  @Override
+  public Version checkout(String vendorSoftwareProductId, String user) {
+    Version newVersion = versioningManager
+        .checkout(VENDOR_SOFTWARE_PRODUCT_VERSIONABLE_TYPE, vendorSoftwareProductId, user);
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vendorSoftwareProductId, newVersion);
+    return newVersion;
+  }
+
+  @Override
+  public Version undoCheckout(String vendorSoftwareProductId, String user) {
+    Version newVersion = versioningManager
+        .undoCheckout(VENDOR_SOFTWARE_PRODUCT_VERSIONABLE_TYPE, vendorSoftwareProductId, user);
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vendorSoftwareProductId, newVersion);
+    return newVersion;
+  }
+
+  @Override
+  public Version checkin(String vendorSoftwareProductId, String user) {
+    Version newVersion = versioningManager
+        .checkin(VENDOR_SOFTWARE_PRODUCT_VERSIONABLE_TYPE, vendorSoftwareProductId, user, null);
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vendorSoftwareProductId, newVersion);
+    return newVersion;
+  }
+
+  @Override
+  public ValidationResponse submit(String vendorSoftwareProductId, String user) throws IOException {
+    VspDetails vspDetails = getVspDetails(vendorSoftwareProductId, null, user).getVspDetails();
+    UploadDataEntity uploadData = vendorSoftwareProductDao
+        .getUploadData(new UploadDataEntity(vendorSoftwareProductId, vspDetails.getVersion()));
+    ToscaServiceModel serviceModel =
+        serviceModelDao.getServiceModel(vendorSoftwareProductId, vspDetails.getVersion());
+    Version newVersion = null;
+
+    ValidationResponse validationResponse = new ValidationResponse();
+    validationResponse
+        .setVspErrors(validateCompletedVendorSoftwareProduct(vspDetails, uploadData, serviceModel));
+    validationResponse.setLicensingDataErrors(validateLicensingData(vspDetails));
+    validationResponse.setUploadDataErrors(validateUploadData(uploadData));
+    validationResponse.setQuestionnaireValidationResult(
+        validateQuestionnaire(vspDetails.getId(), vspDetails.getVersion()));
+    validationResponse.setCompilationErrors(
+        compile(vendorSoftwareProductId, vspDetails.getVersion(), serviceModel));
+
+    if (validationResponse.isValid()) {
+      newVersion = versioningManager
+          .submit(VENDOR_SOFTWARE_PRODUCT_VERSIONABLE_TYPE, vendorSoftwareProductId, user, null);
+    }
+    //vendorSoftwareProductDao.updateVspLatestModificationTime(vendorSoftwareProductId, newVersion);
+    return validationResponse;
+  }
+
+  private Map<String, List<ErrorMessage>> compile(String vendorSoftwareProductId, Version version,
+                                                  ToscaServiceModel serviceModel) {
+    Collection<ComponentEntity> components = listComponents(vendorSoftwareProductId, version);
+    if (serviceModel == null) {
+      return null;
+    }
+    if (CollectionUtils.isEmpty(components)) {
+      enrichedServiceModelDao.storeServiceModel(vendorSoftwareProductId, version, serviceModel);
+      return null;
+    }
+    EnrichmentManager<ToscaServiceModel> enrichmentManager =
+        EnrichmentManagerFactory.getInstance().createInterface();
+    enrichmentManager.initInput(vendorSoftwareProductId, version);
+    enrichmentManager.addModel(serviceModel);
+
+    ComponentInfo componentInfo = new ComponentInfo();
+    Map<String, List<ErrorMessage>> compileErrors = new HashMap<>();
+    CompilationUtil.addMonitoringInfo(componentInfo, compileErrors);
+    for (ComponentEntity componentEntity : components) {
+      ComponentInfo currentEntityComponentInfo = new ComponentInfo();
+      currentEntityComponentInfo.setCeilometerInfo(componentInfo.getCeilometerInfo());
+      CompilationUtil
+          .addMibInfo(vendorSoftwareProductId, version, componentEntity, currentEntityComponentInfo,
+              compileErrors);
+      enrichmentManager.addEntityInput(componentEntity.getComponentCompositionData().getName(),
+          currentEntityComponentInfo);
+
+    }
+    Map<String, List<ErrorMessage>> enrichErrors;
+    enrichErrors = enrichmentManager.enrich();
+    enrichedServiceModelDao
+        .storeServiceModel(vendorSoftwareProductId, version, enrichmentManager.getModel());
+    if (enrichErrors != null) {
+      compileErrors.putAll(enrichErrors);
+    }
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vendorSoftwareProductId, version);
+
+    return compileErrors;
+  }
+
+  private Collection<ErrorCode> validateLicensingData(VspDetails vspDetails) {
+    if (vspDetails.getVendorId() == null || vspDetails.getVlmVersion() == null
+        || vspDetails.getLicenseAgreement() == null
+        || CollectionUtils.isEmpty(vspDetails.getFeatureGroups())) {
+      return null;
+    }
+    return vendorLicenseFacade
+        .validateLicensingData(vspDetails.getVendorId(), vspDetails.getVlmVersion(),
+            vspDetails.getLicenseAgreement(), vspDetails.getFeatureGroups());
+  }
+
+  @Override
+  public VspDetails createNewVsp(VspDetails vspDetails, String user) {
+    UniqueValueUtil.validateUniqueValue(
+        VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+        vspDetails.getName());
+    vspDetails.setId(CommonMethods.nextUuId());
+
+    //        vspDetails.setLastModificationTime(new Date());
+
+    Version version = versioningManager
+        .create(VENDOR_SOFTWARE_PRODUCT_VERSIONABLE_TYPE, vspDetails.getId(), user);
+    vspDetails.setVersion(version);
+
+    //        vspDetails.setLastModificationTime(new Date());
+
+    vendorSoftwareProductDao.createVendorSoftwareProductInfo(vspDetails);
+    vendorSoftwareProductDao.updateQuestionnaire(vspDetails.getId(), version,
+        new JsonSchemaDataGenerator(getVspQuestionnaireSchema(null)).generateData());
+    UniqueValueUtil
+        .createUniqueValue(VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+            vspDetails.getName());
+
+    return vspDetails;
+  }
+
+  @Override
+  public List<VersionedVendorSoftwareProductInfo> getVspList(String versionFilter, String user) {
+    Map<String, VersionInfo> idToVersionsInfo = versioningManager
+        .listEntitiesVersionInfo(VENDOR_SOFTWARE_PRODUCT_VERSIONABLE_TYPE, user,
+            VersionableEntityAction.Read);
+
+    List<VersionedVendorSoftwareProductInfo> vsps = new ArrayList<>();
+    for (Map.Entry<String, VersionInfo> entry : idToVersionsInfo.entrySet()) {
+      VersionInfo versionInfo = entry.getValue();
+      if (versionFilter != null && versionFilter.equals(VersionStatus.Final.name())) {
+        if (versionInfo.getLatestFinalVersion() == null) {
+          continue;
+        }
+        versionInfo.setActiveVersion(versionInfo.getLatestFinalVersion());
+        versionInfo.setStatus(VersionStatus.Final);
+        versionInfo.setLockingUser(null);
+      }
+
+      VspDetails vsp = vendorSoftwareProductDao.getVendorSoftwareProductInfo(
+          new VspDetails(entry.getKey(), entry.getValue().getActiveVersion()));
+      if (vsp != null) {
+        vsp.setValidationDataStructure(null);
+        vsps.add(new VersionedVendorSoftwareProductInfo(vsp, entry.getValue()));
+      }
+    }
+
+    sortVspListByModificationTimeDescOrder(vsps);
+    return vsps;
+  }
+
+  @Override
+  public void updateVsp(VspDetails vspDetails, String user) {
+    Version activeVersion =
+        getVersionInfo(vspDetails.getId(), VersionableEntityAction.Write, user).getActiveVersion();
+    vspDetails.setVersion(activeVersion);
+    //        vspDetails.setLastModificationTime(new Date());
+
+    VspDetails retrieved = vendorSoftwareProductDao.getVendorSoftwareProductInfo(vspDetails);
+    vspDetails.setValidationData(retrieved.getValidationData());
+    UniqueValueUtil
+        .updateUniqueValue(VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+            retrieved.getName(), vspDetails.getName());
+    vendorSoftwareProductDao.updateVendorSoftwareProductInfo(vspDetails);
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspDetails.getId(), activeVersion);
+  }
+
+  @Override
+  public VersionedVendorSoftwareProductInfo getVspDetails(String vspId, Version version,
+                                                          String user) {
+    VersionInfo versionInfo = getVersionInfo(vspId, VersionableEntityAction.Read, user);
+    if (version == null) {
+      version = versionInfo.getActiveVersion();
+    } else {
+      if (!versionInfo.getViewableVersions().contains(version)) {
+        throw new CoreException(new RequestedVersionInvalidErrorBuilder().build());
+      }
+    }
+
+    VspDetails vendorSoftwareProductInfo =
+        vendorSoftwareProductDao.getVendorSoftwareProductInfo(new VspDetails(vspId, version));
+    if (vendorSoftwareProductInfo == null) {
+      throw new CoreException(new VendorSoftwareProductNotFoundErrorBuilder(vspId).build());
+    }
+    return new VersionedVendorSoftwareProductInfo(vendorSoftwareProductInfo, versionInfo);
+  }
+
+  @Override
+  public void deleteVsp(String vspId, String user) {
+    throw new UnsupportedOperationException("Unsupported operation for 1607 release.");
+  }
+
+  @Override
+  public UploadFileResponse uploadFile(String vspId, InputStream heatFileToUpload, String user) {
+    Version activeVersion =
+        getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+    UploadFileResponse uploadFileResponse = new UploadFileResponse();
+
+    if (heatFileToUpload == null) {
+      uploadFileResponse.addStructureError(AsdcCommon.UPLOAD_FILE,
+          new ErrorMessage(ErrorLevel.ERROR,
+              Messages.NO_ZIP_FILE_WAS_UPLOADED_OR_ZIP_NOT_EXIST.getErrorMessage()));
+      return uploadFileResponse;
+    }
+
+    InputStream uploadedFileData;
+    FileContentHandler fileContentMap;
+    Map<String, List<ErrorMessage>> errors = new HashMap<>();
+    try {
+      fileContentMap = getContent(heatFileToUpload, errors);
+      if (!errors.isEmpty()) {
+        return addStructureErrorsToResponse(uploadFileResponse, errors);
+      }
+
+      uploadedFileData = fileContentMap.getFileContent(UPLOAD_RAW_DATA);
+      fileContentMap.remove(UPLOAD_RAW_DATA);
+
+      ValidationManagerUtil.handleMissingManifest(fileContentMap, errors);
+      if (!errors.isEmpty()) {
+        return addStructureErrorsToResponse(uploadFileResponse, errors);
+      }
+
+    } catch (CoreException ce) {
+      ErrorMessage.ErrorMessageUtil.addMessage(AsdcCommon.UPLOAD_FILE, errors)
+          .add(new ErrorMessage(ErrorLevel.ERROR, ce.getMessage()));
+      return addStructureErrorsToResponse(uploadFileResponse, errors);
+    }
+
+    HeatStructureTree tree = createAndValidateHeatTree(uploadFileResponse, fileContentMap);
+
+    deleteUploadDataAndContent(vspId, activeVersion);
+    saveHotData(vspId, activeVersion, uploadedFileData, fileContentMap, tree);
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspId, activeVersion);
+
+    ToscaServiceModel toscaServiceModel =
+        VendorSoftwareProductUtils.loadAndTranslateTemplateData(fileContentMap)
+            .getToscaServiceModel();
+    if (toscaServiceModel != null) {
+      serviceModelDao.storeServiceModel(vspId, activeVersion, toscaServiceModel);
+      saveCompositionData(vspId, activeVersion,
+          CompositionDataExtractor.extractServiceCompositionData(toscaServiceModel));
+    }
+
+    return uploadFileResponse;
+  }
+
+  private UploadFileResponse addStructureErrorsToResponse(UploadFileResponse uploadFileResponse,
+                                                          Map<String, List<ErrorMessage>> errors) {
+    uploadFileResponse.addStructureErrors(errors);
+    return uploadFileResponse;
+  }
+
+  private HeatStructureTree createAndValidateHeatTree(UploadFileResponse uploadFileResponse,
+                                                      FileContentHandler fileContentMap) {
+    VendorSoftwareProductUtils.addFileNamesToUploadFileResponse(fileContentMap, uploadFileResponse);
+    Map<String, List<ErrorMessage>> validationErrors =
+        ValidationManagerUtil.initValidationManager(fileContentMap).validate();
+    uploadFileResponse.getErrors().putAll(validationErrors);
+
+    HeatTreeManager heatTreeManager = HeatTreeManagerUtil.initHeatTreeManager(fileContentMap);
+    heatTreeManager.createTree();
+    heatTreeManager.addErrors(validationErrors);
+    return heatTreeManager.getTree();
+  }
+
+  private void saveHotData(String vspId, Version activeVersion, InputStream uploadedFileData,
+                           FileContentHandler fileContentMap, HeatStructureTree tree) {
+    Map<String, Object> manifestAsMap = (Map<String, Object>) JsonUtil
+        .json2Object(fileContentMap.getFileContent(AsdcCommon.MANIFEST_NAME), Map.class);
+
+    UploadDataEntity uploadData = new UploadDataEntity(vspId, activeVersion);
+    uploadData.setPackageName((String) manifestAsMap.get("name"));
+    uploadData.setPackageVersion((String) manifestAsMap.get("version"));
+    uploadData.setContentData(ByteBuffer.wrap(FileUtils.toByteArray(uploadedFileData)));
+    uploadData.setValidationDataStructure(new ValidationStructureList(tree));
+    vendorSoftwareProductDao.updateUploadData(uploadData);
+  }
+
+  private FileContentHandler getContent(InputStream heatFileToUpload,
+                                        Map<String, List<ErrorMessage>> errors) {
+    FileContentHandler contentMap = null;
+    byte[] uploadedFileData;
+    try {
+      uploadedFileData = FileUtils.toByteArray(heatFileToUpload);
+      VendorSoftwareProductUtils.validateRawZipData(uploadedFileData, errors);
+      contentMap = VendorSoftwareProductUtils.loadUploadFileContent(uploadedFileData);
+      VendorSoftwareProductUtils.validateContentZipData(contentMap, errors);
+      contentMap.addFile(UPLOAD_RAW_DATA, uploadedFileData);
+    } catch (IOException e0) {
+      ErrorMessage.ErrorMessageUtil.addMessage(AsdcCommon.UPLOAD_FILE, errors)
+          .add(new ErrorMessage(ErrorLevel.ERROR, Messages.INVALID_ZIP_FILE.getErrorMessage()));
+    }
+    return contentMap;
+  }
+
+  private void validateMibZipContent(String vspId, Version version, byte[] uploadedFileData,
+                                     Map<String, List<ErrorMessage>> errors) {
+    FileContentHandler contentMap;
+    try {
+      contentMap = VendorSoftwareProductUtils.loadUploadFileContent(uploadedFileData);
+      VendorSoftwareProductUtils.validateContentZipData(contentMap, errors);
+    } catch (IOException e0) {
+      throw new CoreException(
+          new MibUploadErrorBuilder(vspId, version, Messages.INVALID_ZIP_FILE.getErrorMessage())
+              .build());
+    }
+  }
+
+  @Override
+  public List<PackageInfo> listPackages(String category, String subCategory) {
+    return vendorSoftwareProductDao.listPackages(category, subCategory);
+  }
+
+  @Override
+  public File getTranslatedFile(String vspId, Version version, String user) {
+    VersionInfo versionInfo = getVersionInfo(vspId, VersionableEntityAction.Read, user);
+    if (version == null) {
+      if (versionInfo.getLatestFinalVersion() == null) {
+        throw new CoreException(new PackageNotFoundErrorBuilder(vspId).build());
+      }
+      version = versionInfo.getLatestFinalVersion();
+    } else {
+      if (!version.isFinal() || !versionInfo.getViewableVersions().contains(version)) {
+        throw new CoreException(new RequestedVersionInvalidErrorBuilder().build());
+      }
+    }
+
+    PackageInfo packageInfo =
+        vendorSoftwareProductDao.getPackageInfo(new PackageInfo(vspId, version));
+    if (packageInfo == null) {
+      throw new CoreException(new PackageNotFoundErrorBuilder(vspId, version).build());
+    }
+
+    ByteBuffer translatedFileBuffer = packageInfo.getTranslatedFile();
+    if (translatedFileBuffer == null) {
+      throw new CoreException(new PackageInvalidErrorBuilder(vspId, version).build());
+    }
+
+    File translatedFile = new File(VSP_PACKAGE_ZIP);
+
+    try {
+      FileOutputStream fos = new FileOutputStream(translatedFile);
+      fos.write(translatedFileBuffer.array());
+      fos.close();
+    } catch (IOException e0) {
+      throw new CoreException(new TranslationFileCreationErrorBuilder(vspId, version).build(), e0);
+    }
+
+    return translatedFile;
+  }
+
+  @Override
+  public File getLatestHeatPackage(String vspId,
+                                   String user) { //todo remove the writing to file system..
+    VersionInfo versionInfo = getVersionInfo(vspId, VersionableEntityAction.Read, user);
+    Version version = versionInfo.getActiveVersion();
+
+    UploadDataEntity uploadData =
+        vendorSoftwareProductDao.getUploadData(new UploadDataEntity(vspId, version));
+
+    ByteBuffer contentData = uploadData.getContentData();
+    if (contentData == null) {
+      return null;
+    }
+
+    File heatPkgFile = new File(String.format("heats-for-%s.zip", vspId));
+
+    try {
+      FileOutputStream fos = new FileOutputStream(heatPkgFile);
+      fos.write(contentData.array());
+      fos.close();
+    } catch (IOException e0) {
+      throw new CoreException(new FileCreationErrorBuilder(vspId).build(), e0);
+    }
+    return heatPkgFile;
+  }
+
+  @Override
+  public PackageInfo createPackage(String vspId, String user) throws IOException {
+    VersionInfo versionInfo = getVersionInfo(vspId, VersionableEntityAction.Read, user);
+    Version activeVersion = versionInfo.getActiveVersion();
+    if (!activeVersion.isFinal()) {
+      throw new CoreException(
+          new CreatePackageForNonFinalVendorSoftwareProductErrorBuilder(vspId, activeVersion)
+              .build());
+    }
+
+    ToscaServiceModel toscaServiceModel =
+        enrichedServiceModelDao.getServiceModel(vspId, activeVersion);
+    VspDetails vspDetails =
+        vendorSoftwareProductDao.getVendorSoftwareProductInfo(new VspDetails(vspId, activeVersion));
+    Version vlmVersion = vspDetails.getVlmVersion();
+
+    PackageInfo packageInfo = createPackageInfo(vspId, vspDetails);
+
+    ToscaFileOutputServiceCsarImpl toscaServiceTemplateServiceCsar =
+        new ToscaFileOutputServiceCsarImpl();
+    FileContentHandler licenseArtifacts = licenseArtifactsService
+        .createLicenseArtifacts(vspDetails.getId(), vspDetails.getVendorId(), vlmVersion,
+            vspDetails.getFeatureGroups(), user);
+    //todo add tosca validation here
+    packageInfo.setTranslatedFile(ByteBuffer.wrap(
+        toscaServiceTemplateServiceCsar.createOutputFile(toscaServiceModel, licenseArtifacts)));
+
+    vendorSoftwareProductDao.insertPackageDetails(packageInfo);
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspId, vspDetails.getVersion());
+
+    return packageInfo;
+  }
+
+  private PackageInfo createPackageInfo(String vspId, VspDetails vspDetails) {
+    PackageInfo packageInfo = new PackageInfo();
+    packageInfo.setVspId(vspId);
+    packageInfo.setVersion(vspDetails.getVersion());
+    packageInfo.setDisplayName(vspDetails.getPackageName());
+    packageInfo.setVspName(vspDetails.getName());
+    packageInfo.setVspDescription(vspDetails.getDescription());
+    packageInfo.setCategory(vspDetails.getCategory());
+    packageInfo.setSubCategory(vspDetails.getSubCategory());
+    packageInfo.setVendorName(vspDetails.getVendorName());
+    packageInfo.setPackageType(CSAR);
+    packageInfo.setVendorRelease("1.0"); //todo TBD
+    return packageInfo;
+  }
+
+  @Override
+  public QuestionnaireResponse getVspQuestionnaire(String vspId, Version version, String user) {
+    version = VersioningUtil
+        .resolveVersion(version, getVersionInfo(vspId, VersionableEntityAction.Read, user));
+
+    QuestionnaireResponse questionnaireResponse = new QuestionnaireResponse();
+    questionnaireResponse.setData(getVspQuestionnaire(vspId, version).getQuestionnaireData());
+    questionnaireResponse.setSchema(getVspQuestionnaireSchema(null));
+
+    return questionnaireResponse;
+  }
+
+  private VspQuestionnaireEntity getVspQuestionnaire(String vspId, Version version) {
+    VspQuestionnaireEntity retrieved = vendorSoftwareProductDao.getQuestionnaire(vspId, version);
+    VersioningUtil.validateEntityExistence(retrieved, new VspQuestionnaireEntity(vspId, version),
+        VspDetails.ENTITY_TYPE);
+    return retrieved;
+  }
+
+  @Override
+  public void updateVspQuestionnaire(String vspId, String questionnaireData, String user) {
+    Version activeVersion =
+        getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspId, activeVersion);
+
+    vendorSoftwareProductDao.updateQuestionnaire(vspId, activeVersion, questionnaireData);
+  }
+
+  @Override
+  public Collection<NetworkEntity> listNetworks(String vspId, Version version, String user) {
+    version = VersioningUtil
+        .resolveVersion(version, getVersionInfo(vspId, VersionableEntityAction.Read, user));
+    return listNetworks(vspId, version);
+  }
+
+  private Collection<NetworkEntity> listNetworks(String vspId, Version version) {
+    return vendorSoftwareProductDao.listNetworks(vspId, version);
+  }
+
+  @Override
+  public NetworkEntity createNetwork(NetworkEntity network, String user) {
+    Version activeVersion =
+        getVersionInfo(network.getVspId(), VersionableEntityAction.Write, user).getActiveVersion();
+    network.setVersion(activeVersion);
+    if (!isManual(network.getVspId(), activeVersion)) {
+      throw new CoreException(
+          new ErrorCode.ErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION)
+              .withId(VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED)
+              .withMessage(VSP_COMPOSITION_EDIT_NOT_ALLOWED_MSG).build());
+    }
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(network.getVspId(), activeVersion);
+    return null;
+  }
+
+  private NetworkEntity createNetwork(NetworkEntity network) {
+    network.setId(CommonMethods.nextUuId());
+    vendorSoftwareProductDao.createNetwork(network);
+
+    return network;
+  }
+
+  @Override
+  public CompositionEntityValidationData updateNetwork(NetworkEntity network, String user) {
+    Version activeVersion =
+        getVersionInfo(network.getVspId(), VersionableEntityAction.Write, user).getActiveVersion();
+    network.setVersion(activeVersion);
+    NetworkEntity retrieved = getNetwork(network.getVspId(), activeVersion, network.getId());
+
+    NetworkCompositionSchemaInput schemaInput = new NetworkCompositionSchemaInput();
+    schemaInput.setManual(isManual(network.getVspId(), activeVersion));
+    schemaInput.setNetwork(retrieved.getNetworkCompositionData());
+
+    CompositionEntityValidationData validationData = CompositionEntityDataManager
+        .validateEntity(network, SchemaTemplateContext.composition, schemaInput);
+    if (CollectionUtils.isEmpty(validationData.getErrors())) {
+      vendorSoftwareProductDao.updateNetwork(network);
+    }
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(network.getVspId(), activeVersion);
+
+    return validationData;
+  }
+
+  @Override
+  public CompositionEntityResponse<Network> getNetwork(String vspId, Version version,
+                                                       String networkId, String user) {
+    version = VersioningUtil
+        .resolveVersion(version, getVersionInfo(vspId, VersionableEntityAction.Read, user));
+    NetworkEntity networkEntity = getNetwork(vspId, version, networkId);
+    Network network = networkEntity.getNetworkCompositionData();
+
+    NetworkCompositionSchemaInput schemaInput = new NetworkCompositionSchemaInput();
+    schemaInput.setManual(isManual(vspId, version));
+    schemaInput.setNetwork(network);
+
+    CompositionEntityResponse<Network> response = new CompositionEntityResponse<>();
+    response.setId(networkId);
+    response.setData(network);
+    response.setSchema(SchemaGenerator
+        .generate(SchemaTemplateContext.composition, CompositionEntityType.network, schemaInput));
+
+    return response;
+  }
+
+  private NetworkEntity getNetwork(String vspId, Version version, String networkId) {
+    NetworkEntity retrieved = vendorSoftwareProductDao.getNetwork(vspId, version, networkId);
+    VersioningUtil.validateEntityExistence(retrieved, new NetworkEntity(vspId, version, networkId),
+        VspDetails.ENTITY_TYPE);
+    return retrieved;
+  }
+
+  @Override
+  public void deleteNetwork(String vspId, String networkId, String user) {
+    Version activeVersion =
+        getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+    if (!isManual(vspId, activeVersion)) {
+      throw new CoreException(
+          new ErrorCode.ErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION)
+              .withId(VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED)
+              .withMessage(VSP_COMPOSITION_EDIT_NOT_ALLOWED_MSG).build());
+    }
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspId, activeVersion);
+  }
+
+  @Override
+  public QuestionnaireResponse getComponentQuestionnaire(String vspId, Version version,
+                                                         String componentId, String user) {
+    version = VersioningUtil
+        .resolveVersion(version, getVersionInfo(vspId, VersionableEntityAction.Read, user));
+
+    QuestionnaireResponse questionnaireResponse = new QuestionnaireResponse();
+    questionnaireResponse.setData(getComponent(vspId, version, componentId).getQuestionnaireData());
+    List<String> nicNames = listNics(vspId, version, componentId).stream()
+        .map(nic -> nic.getNicCompositionData().getName()).collect(Collectors.toList());
+    questionnaireResponse.setSchema(getComponentQuestionnaireSchema(
+        new ComponentQuestionnaireSchemaInput(nicNames,
+            JsonUtil.json2Object(questionnaireResponse.getData(), Map.class))));
+
+    return questionnaireResponse;
+  }
+
+  @Override
+  public void updateComponentQuestionnaire(String vspId, String componentId,
+                                           String questionnaireData, String user) {
+    Version activeVersion =
+        getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+    getComponent(vspId, activeVersion, componentId);
+
+    vendorSoftwareProductDao
+        .updateComponentQuestionnaire(vspId, activeVersion, componentId, questionnaireData);
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspId, activeVersion);
+  }
+
+  @Override
+  public Collection<ComponentEntity> listComponents(String vspId, Version version, String user) {
+    version = VersioningUtil
+        .resolveVersion(version, getVersionInfo(vspId, VersionableEntityAction.Read, user));
+    return listComponents(vspId, version);
+  }
+
+  private Collection<ComponentEntity> listComponents(String vspId, Version version) {
+    return vendorSoftwareProductDao.listComponents(vspId, version);
+  }
+
+  @Override
+  public void deleteComponents(String vspId, String user) {
+    Version activeVersion =
+        getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+    if (!isManual(vspId, activeVersion)) {
+      throw new CoreException(
+          new ErrorCode.ErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION)
+              .withId(VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED)
+              .withMessage(VSP_COMPOSITION_EDIT_NOT_ALLOWED_MSG).build());
+    }
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspId, activeVersion);
+  }
+
+  @Override
+  public ComponentEntity createComponent(ComponentEntity component, String user) {
+    Version activeVersion =
+        getVersionInfo(component.getVspId(), VersionableEntityAction.Write, user)
+            .getActiveVersion();
+    component.setVersion(activeVersion);
+
+    if (!isManual(component.getVspId(), activeVersion)) {
+      throw new CoreException(
+          new ErrorCode.ErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION)
+              .withId(VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED)
+              .withMessage(VSP_COMPOSITION_EDIT_NOT_ALLOWED_MSG).build());
+
+    }
+
+    /*        ComponentCompositionSchemaInput schemaInput = new ComponentCompositionSchemaInput();
+        schemaInput.setManual(true);
+        CompositionEntityValidationData validationData = CompositionEntityDataManager
+        .validateEntity(component, SchemaTemplateContext.composition, schemaInput);
+        if (CollectionUtils.isEmpty(validationData.getErrors())) {
+            return createComponent(component);
+        }
+        return validationData;*/
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(component.getVspId(), activeVersion);
+
+    return null;
+  }
+
+  private ComponentEntity createComponent(ComponentEntity component) {
+    component.setId(CommonMethods.nextUuId());
+    component.setQuestionnaireData(
+        new JsonSchemaDataGenerator(getComponentQuestionnaireSchema(null)).generateData());
+
+    vendorSoftwareProductDao.createComponent(component);
+
+    return component;
+  }
+
+  @Override
+  public CompositionEntityResponse<ComponentData> getComponent(String vspId, Version version,
+                                                               String componentId, String user) {
+    version = VersioningUtil
+        .resolveVersion(version, getVersionInfo(vspId, VersionableEntityAction.Read, user));
+    ComponentEntity componentEntity = getComponent(vspId, version, componentId);
+    ComponentData component = componentEntity.getComponentCompositionData();
+
+    ComponentCompositionSchemaInput schemaInput = new ComponentCompositionSchemaInput();
+    schemaInput.setManual(isManual(vspId, version));
+    schemaInput.setComponent(component);
+
+    CompositionEntityResponse<ComponentData> response = new CompositionEntityResponse<>();
+    response.setId(componentId);
+    response.setData(component);
+    response.setSchema(SchemaGenerator
+        .generate(SchemaTemplateContext.composition, CompositionEntityType.component, schemaInput));
+
+    return response;
+  }
+
+  private ComponentEntity getComponent(String vspId, Version version, String componentId) {
+    ComponentEntity retrieved = vendorSoftwareProductDao.getComponent(vspId, version, componentId);
+    VersioningUtil
+        .validateEntityExistence(retrieved, new ComponentEntity(vspId, version, componentId),
+            VspDetails.ENTITY_TYPE);
+    return retrieved;
+  }
+
+  @Override
+  public CompositionEntityValidationData updateComponent(ComponentEntity component, String user) {
+    Version activeVersion =
+        getVersionInfo(component.getVspId(), VersionableEntityAction.Write, user)
+            .getActiveVersion();
+    component.setVersion(activeVersion);
+    ComponentEntity retrieved =
+        getComponent(component.getVspId(), activeVersion, component.getId());
+
+    ComponentCompositionSchemaInput schemaInput = new ComponentCompositionSchemaInput();
+    schemaInput.setManual(isManual(component.getVspId(), activeVersion));
+    schemaInput.setComponent(retrieved.getComponentCompositionData());
+
+    CompositionEntityValidationData validationData = CompositionEntityDataManager
+        .validateEntity(component, SchemaTemplateContext.composition, schemaInput);
+    if (CollectionUtils.isEmpty(validationData.getErrors())) {
+      vendorSoftwareProductDao.updateComponent(component);
+    }
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(component.getVspId(), activeVersion);
+
+    return validationData;
+  }
+
+  @Override
+  public void deleteComponent(String vspId, String componentId, String user) {
+    Version activeVersion =
+        getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+    if (!isManual(vspId, activeVersion)) {
+      throw new CoreException(
+          new ErrorCode.ErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION)
+              .withId(VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED)
+              .withMessage(VSP_COMPOSITION_EDIT_NOT_ALLOWED_MSG).build());
+    }
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspId, activeVersion);
+  }
+
+  @Override
+  public Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity> listProcesses(
+      String vspId, Version version, String componentId,
+      String user) {
+    version = VersioningUtil
+        .resolveVersion(version, getVersionInfo(vspId, VersionableEntityAction.Read, user));
+    if (!GENERAL_COMPONENT_ID.equals(componentId)) {
+      getComponent(vspId, version, componentId);
+    }
+    return vendorSoftwareProductDao.listProcesses(vspId, version, componentId);
+  }
+
+  @Override
+  public void deleteProcesses(String vspId, String componentId, String user) {
+    Version activeVersion =
+        getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+    if (!GENERAL_COMPONENT_ID.equals(componentId)) {
+      getComponent(vspId, activeVersion, componentId);
+    }
+
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity> processes =
+        vendorSoftwareProductDao.listProcesses(vspId, activeVersion, componentId);
+    for (org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity process : processes) {
+      UniqueValueUtil.deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.PROCESS_NAME,
+          process.getVspId(), process.getVersion().toString(), process.getComponentId(),
+          process.getName());
+    }
+
+    vendorSoftwareProductDao.deleteProcesses(vspId, activeVersion, componentId);
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspId, activeVersion);
+  }
+
+  @Override
+  public org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity createProcess(
+      org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity process, String user) {
+    Version activeVersion =
+        getVersionInfo(process.getVspId(), VersionableEntityAction.Write, user).getActiveVersion();
+    process.setVersion(activeVersion);
+    UniqueValueUtil.validateUniqueValue(VendorSoftwareProductConstants.UniqueValues.PROCESS_NAME,
+        process.getVspId(), process.getVersion().toString(), process.getComponentId(),
+        process.getName());
+    process.setId(CommonMethods.nextUuId());
+    if (!GENERAL_COMPONENT_ID.equals(process.getComponentId())) {
+      getComponent(process.getVspId(), activeVersion, process.getComponentId());
+    }
+
+    vendorSoftwareProductDao.createProcess(process);
+    UniqueValueUtil.createUniqueValue(VendorSoftwareProductConstants.UniqueValues.PROCESS_NAME,
+        process.getVspId(), process.getVersion().toString(), process.getComponentId(),
+        process.getName());
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(process.getVspId(), activeVersion);
+    return process;
+  }
+
+  @Override
+  public org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity getProcess(String vspId,
+                                                                                 Version version,
+                                                                                 String componentId,
+                                                                                 String processId,
+                                                                                 String user) {
+    version = VersioningUtil
+        .resolveVersion(version, getVersionInfo(vspId, VersionableEntityAction.Read, user));
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity retrieved =
+        vendorSoftwareProductDao.getProcess(vspId, version, componentId, processId);
+    validateProcessExistence(vspId, version, componentId, processId, retrieved);
+    return retrieved;
+  }
+
+  @Override
+  public void updateProcess(org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity process,
+                            String user) {
+    Version activeVersion =
+        getVersionInfo(process.getVspId(), VersionableEntityAction.Write, user).getActiveVersion();
+    process.setVersion(activeVersion);
+
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity retrieved =
+        vendorSoftwareProductDao
+            .getProcess(process.getVspId(), activeVersion, process.getComponentId(),
+                process.getId());
+    validateProcessExistence(process.getVspId(), activeVersion, process.getComponentId(),
+        process.getId(), retrieved);
+
+    UniqueValueUtil.updateUniqueValue(VendorSoftwareProductConstants.UniqueValues.PROCESS_NAME,
+        retrieved.getName(), process.getName(), process.getVspId(), process.getVersion().toString(),
+        process.getComponentId());
+    vendorSoftwareProductDao.updateProcess(process);
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(process.getVspId(), activeVersion);
+  }
+
+  @Override
+  public void deleteProcess(String vspId, String componentId, String processId, String user) {
+    Version activeVersion =
+        getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity retrieved =
+        vendorSoftwareProductDao.getProcess(vspId, activeVersion, componentId, processId);
+    validateProcessExistence(vspId, activeVersion, componentId, processId, retrieved);
+
+    vendorSoftwareProductDao.deleteProcess(vspId, activeVersion, componentId, processId);
+    UniqueValueUtil.deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.PROCESS_NAME,
+        retrieved.getVspId(), retrieved.getVersion().toString(), retrieved.getComponentId(),
+        retrieved.getName());
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspId, activeVersion);
+  }
+
+  @Override
+  public File getProcessArtifact(String vspId, Version version, String componentId,
+                                 String processId, String user) {
+    version = VersioningUtil
+        .resolveVersion(version, getVersionInfo(vspId, VersionableEntityAction.Read, user));
+    ProcessArtifactEntity retrieved =
+        vendorSoftwareProductDao.getProcessArtifact(vspId, version, componentId, processId);
+    validateProcessArtifactExistence(vspId, version, componentId, processId, retrieved);
+
+    File file = new File(String
+        .format("%s_%s_%s_%s", vspId, version.toString().replace('.', '_'), componentId,
+            processId));
+    try {
+      FileOutputStream fos = new FileOutputStream(file);
+      fos.write(retrieved.getArtifact().array());
+      fos.close();
+    } catch (IOException e0) {
+      throw new CoreException(new UploadInvalidErrorBuilder().build());
+    }
+
+    return file;
+  }
+
+  @Override
+  public void deleteProcessArtifact(String vspId, String componentId, String processId,
+                                    String user) {
+    Version activeVersion =
+        getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+    ProcessArtifactEntity retrieved =
+        vendorSoftwareProductDao.getProcessArtifact(vspId, activeVersion, componentId, processId);
+    validateProcessArtifactExistence(vspId, activeVersion, componentId, processId, retrieved);
+
+    vendorSoftwareProductDao.deleteProcessArtifact(vspId, activeVersion, componentId, processId);
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspId, activeVersion);
+  }
+
+  @Override
+  public void uploadProcessArtifact(InputStream artifactFile, String artifactFileName, String vspId,
+                                    String componentId, String processId, String user) {
+    Version activeVersion =
+        getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity retrieved =
+        vendorSoftwareProductDao.getProcess(vspId, activeVersion, componentId, processId);
+    validateProcessExistence(vspId, activeVersion, componentId, processId, retrieved);
+
+    if (artifactFile == null) {
+      throw new CoreException(new UploadInvalidErrorBuilder().build());
+    }
+
+    byte[] artifact;
+    try {
+      artifact = FileUtils.toByteArray(artifactFile);
+    } catch (RuntimeException e0) {
+      throw new CoreException(new UploadInvalidErrorBuilder().build());
+    }
+
+    vendorSoftwareProductDao
+        .uploadProcessArtifact(vspId, activeVersion, componentId, processId, artifact,
+            artifactFileName);
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspId, activeVersion);
+  }
+
+  @Override
+  public Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity> listNics(
+      String vspId, Version version, String componentId,
+      String user) {
+    version = VersioningUtil
+        .resolveVersion(version, getVersionInfo(vspId, VersionableEntityAction.Read, user));
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity> nics =
+        listNics(vspId, version, componentId);
+
+    Map<String, String> networksNameById = listNetworksNameById(vspId, version);
+    nics.stream().forEach(nicEntity -> {
+      Nic nic = nicEntity.getNicCompositionData();
+      nic.setNetworkName(networksNameById.get(nic.getNetworkId()));
+      nicEntity.setNicCompositionData(nic);
+    });
+    return nics;
+  }
+
+  private Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity> listNics(
+      String vspId, Version version, String componentId) {
+    getComponent(vspId, version, componentId);
+
+    return vendorSoftwareProductDao.listNics(vspId, version, componentId);
+  }
+
+  private Map<String, String> listNetworksNameById(String vspId, Version version) {
+    Collection<NetworkEntity> networks = listNetworks(vspId, version);
+    return networks.stream().collect(Collectors.toMap(NetworkEntity::getId,
+        networkEntity -> networkEntity.getNetworkCompositionData().getName()));
+  }
+
+  @Override
+  public org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity createNic(
+      org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity nic, String user) {
+    Version activeVersion =
+        getVersionInfo(nic.getVspId(), VersionableEntityAction.Write, user).getActiveVersion();
+    nic.setVersion(activeVersion);
+    if (!isManual(nic.getVspId(), activeVersion)) {
+      throw new CoreException(
+          new ErrorCode.ErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION)
+              .withId(VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED)
+              .withMessage(VSP_COMPOSITION_EDIT_NOT_ALLOWED_MSG).build());
+    }
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(nic.getVspId(), activeVersion);
+
+    return null;
+  }
+
+  private org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity createNic(
+      org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity nic) {
+    nic.setId(CommonMethods.nextUuId());
+    nic.setQuestionnaireData(
+        new JsonSchemaDataGenerator(getNicQuestionnaireSchema(null)).generateData());
+
+    vendorSoftwareProductDao.createNic(nic);
+
+    return nic;
+  }
+
+  @Override
+  public CompositionEntityResponse<Nic> getNic(String vspId, Version version, String componentId,
+                                               String nicId, String user) {
+    version = VersioningUtil
+        .resolveVersion(version, getVersionInfo(vspId, VersionableEntityAction.Read, user));
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity
+        nicEntity = getNic(vspId, version, componentId, nicId);
+    Nic nic = nicEntity.getNicCompositionData();
+
+    NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
+    schemaInput.setManual(isManual(vspId, version));
+    schemaInput.setNic(nic);
+    Map<String, String> networksNameById = listNetworksNameById(vspId, version);
+    nic.setNetworkName(networksNameById.get(nic.getNetworkId()));
+    schemaInput.setNetworkIds(networksNameById.keySet());
+
+    CompositionEntityResponse<Nic> response = new CompositionEntityResponse<>();
+    response.setId(nicId);
+    response.setData(nic);
+    response.setSchema(SchemaGenerator
+        .generate(SchemaTemplateContext.composition, CompositionEntityType.nic, schemaInput));
+
+    return response;
+  }
+
+  private org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity getNic(String vspId,
+                                                                            Version version,
+                                                                            String componentId,
+                                                                            String nicId) {
+    getComponent(vspId, version, componentId);
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity
+        retrieved = vendorSoftwareProductDao.getNic(vspId, version, componentId, nicId);
+    VersioningUtil
+        .validateEntityExistence(retrieved,
+            new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity(vspId, version,
+                componentId, nicId),
+            VspDetails.ENTITY_TYPE);
+    return retrieved;
+  }
+
+  @Override
+  public void deleteNic(String vspId, String componentId, String nicId, String user) {
+    Version activeVersion =
+        getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+    if (!isManual(vspId, activeVersion)) {
+      throw new CoreException(
+          new ErrorCode.ErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION)
+              .withId(VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED)
+              .withMessage(VSP_COMPOSITION_EDIT_NOT_ALLOWED_MSG).build());
+    }
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspId, activeVersion);
+  }
+
+  @Override
+  public CompositionEntityValidationData updateNic(
+      org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity nic, String user) {
+    Version activeVersion =
+        getVersionInfo(nic.getVspId(), VersionableEntityAction.Write, user).getActiveVersion();
+    nic.setVersion(activeVersion);
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity
+        retrieved = getNic(nic.getVspId(), activeVersion, nic.getComponentId(), nic.getId());
+
+    NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
+    schemaInput.setManual(isManual(nic.getVspId(), activeVersion));
+    schemaInput.setNic(retrieved.getNicCompositionData());
+
+    CompositionEntityValidationData validationData = CompositionEntityDataManager
+        .validateEntity(nic, SchemaTemplateContext.composition, schemaInput);
+    if (CollectionUtils.isEmpty(validationData.getErrors())) {
+      vendorSoftwareProductDao.updateNic(nic);
+    }
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(nic.getVspId(), activeVersion);
+    return validationData;
+  }
+
+  @Override
+  public QuestionnaireResponse getNicQuestionnaire(String vspId, Version version,
+                                                   String componentId, String nicId, String user) {
+    version = VersioningUtil
+        .resolveVersion(version, getVersionInfo(vspId, VersionableEntityAction.Read, user));
+
+    QuestionnaireResponse questionnaireResponse = new QuestionnaireResponse();
+    questionnaireResponse
+        .setData(getNic(vspId, version, componentId, nicId).getQuestionnaireData());
+    questionnaireResponse.setSchema(getNicQuestionnaireSchema(null));
+
+    return questionnaireResponse;
+  }
+
+  @Override
+  public void updateNicQuestionnaire(String vspId, String componentId, String nicId,
+                                     String questionnaireData, String user) {
+    Version activeVersion =
+        getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+    getNic(vspId, activeVersion, componentId, nicId);
+
+    vendorSoftwareProductDao
+        .updateNicQuestionnaire(vspId, activeVersion, componentId, nicId, questionnaireData);
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspId, activeVersion);
+  }
+
+  @Override
+  public void deleteComponentMib(String vspId, String componentId, boolean isTrap, String user) {
+    Version activeVersion =
+        getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+    ComponentArtifactEntity componentArtifactEntity =
+        setValuesForComponentArtifactEntityUpload(vspId, activeVersion, null, componentId, null,
+            isTrap, null);
+    ComponentArtifactEntity retrieved =
+        componentArtifactDao.getArtifactByType(componentArtifactEntity);
+
+    componentArtifactDao.delete(retrieved);
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspId, activeVersion);
+  }
+
+  @Override
+  public void uploadComponentMib(InputStream object, String filename, String vspId,
+                                 String componentId, boolean isTrap, String user) {
+    Version activeVersion =
+        getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+    ComponentArtifactEntity componentArtifactEntity;
+
+
+    if (object == null) {
+      throw new CoreException(new MibUploadErrorBuilder(
+          Messages.NO_ZIP_FILE_WAS_UPLOADED_OR_ZIP_NOT_EXIST.getErrorMessage()).build());
+    } else {
+      byte[] uploadedFileData;
+      Map<String, List<ErrorMessage>> errors = new HashMap<>();
+      try {
+        uploadedFileData = FileUtils.toByteArray(object);
+        validateMibZipContent(vspId, activeVersion, uploadedFileData, errors);
+        if (MapUtils.isNotEmpty(errors)) {
+          throw new CoreException(
+              new MibUploadErrorBuilder(errors.values().iterator().next().get(0).getMessage())
+                  .build());
+        }
+
+        createArtifactInDatabase(vspId, activeVersion, filename, componentId, isTrap,
+            uploadedFileData);
+
+      } catch (Exception e0) {
+        throw new CoreException(new MibUploadErrorBuilder(e0.getMessage()).build());
+      }
+    }
+
+    vendorSoftwareProductDao.updateVspLatestModificationTime(vspId, activeVersion);
+  }
+
+  private void createArtifactInDatabase(String vspId, Version activeVersion, String filename,
+                                        String componentId, boolean isTrap,
+                                        byte[] uploadedFileData) {
+    ComponentArtifactEntity componentArtifactEntity;
+
+    String artifactId = CommonMethods.nextUuId();
+    componentArtifactEntity =
+        setValuesForComponentArtifactEntityUpload(vspId, activeVersion, filename, componentId,
+            artifactId, isTrap, uploadedFileData);
+    componentArtifactDao.update(componentArtifactEntity);
+  }
+
+  @Override
+  public MibUploadStatus listMibFilenames(String vspId, String componentId, String user) {
+    Version activeVersion =
+        getVersionInfo(vspId, VersionableEntityAction.Read, user).getActiveVersion();
+    ComponentArtifactEntity current =
+        new ComponentArtifactEntity(vspId, activeVersion, componentId, null);
+
+    return setMibUploadStatusValues(current);
+
+  }
+
+  private MibUploadStatus setMibUploadStatusValues(
+      ComponentArtifactEntity componentArtifactEntity) {
+    MibUploadStatus mibUploadStatus = new MibUploadStatus();
+
+    Collection<ComponentArtifactEntity> artifactNames =
+        componentArtifactDao.getArtifactNamesAndTypesForComponent(componentArtifactEntity);
+    Map<ComponentArtifactType, String> artifactTypeToFilename =
+        VendorSoftwareProductUtils.filterNonTrapOrPollArtifacts(artifactNames);
+
+    if (MapUtils.isNotEmpty(artifactTypeToFilename)) {
+      if (artifactTypeToFilename.containsKey(ComponentArtifactType.SNMP_TRAP)) {
+        mibUploadStatus.setSnmpTrap(artifactTypeToFilename.get(ComponentArtifactType.SNMP_TRAP));
+      }
+      if (artifactTypeToFilename.containsKey(ComponentArtifactType.SNMP_POLL)) {
+        mibUploadStatus.setSnmpPoll(artifactTypeToFilename.get(ComponentArtifactType.SNMP_POLL));
+      }
+    }
+
+    return mibUploadStatus;
+  }
+
+  private ComponentArtifactEntity setValuesForComponentArtifactEntityUpload(String vspId,
+                                                                            Version version,
+                                                                            String filename,
+                                                                            String componentId,
+                                                                            String artifactId,
+                                                                            boolean isTrap,
+                                                                            byte[]
+                                                                                uploadedFileData) {
+    ComponentArtifactEntity componentArtifactEntity = new ComponentArtifactEntity();
+
+    componentArtifactEntity.setVspId(vspId);
+    componentArtifactEntity.setVersion(version);
+    componentArtifactEntity.setComponentId(componentId);
+    componentArtifactEntity.setId(artifactId);
+    componentArtifactEntity.setType(ComponentArtifactType.getComponentArtifactType(isTrap));
+    componentArtifactEntity.setArtifactName(filename);
+
+    if (Objects.nonNull(uploadedFileData)) {
+      componentArtifactEntity.setArtifact(ByteBuffer.wrap(uploadedFileData));
+    }
+
+    return componentArtifactEntity;
+  }
+
+  private void validateProcessExistence(String vspId, Version version, String componentId,
+                       String processId,
+                       org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity retrieved) {
+    if (retrieved != null) {
+      return;
+    }
+    if (!GENERAL_COMPONENT_ID.equals(componentId)) {
+      getComponent(vspId, version, componentId);
+    }
+    VersioningUtil.validateEntityExistence(retrieved,
+        new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity(vspId, version,
+            componentId, processId),
+        VspDetails.ENTITY_TYPE);//todo retrieved is always null ??
+  }
+
+  private void validateProcessArtifactExistence(String vspId, Version version, String componentId,
+                                                String processId, ProcessArtifactEntity retrieved) {
+    if (retrieved != null) {
+      VersioningUtil.validateEntityExistence(retrieved.getArtifact(),
+          new ProcessArtifactEntity(vspId, version, componentId, processId),
+          VspDetails.ENTITY_TYPE);
+    } else {
+      if (!GENERAL_COMPONENT_ID.equals(componentId)) {
+        getComponent(vspId, version, componentId);
+      }
+      VersioningUtil.validateEntityExistence(retrieved,
+          new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity(vspId, version,
+              componentId, processId),
+          VspDetails.ENTITY_TYPE); //todo retrieved is always null ??
+    }
+  }
+
+  private Map<String, List<ErrorMessage>> validateUploadData(UploadDataEntity uploadData)
+      throws IOException {
+    if (uploadData == null || uploadData.getContentData() == null) {
+      return null;
+    }
+
+    FileContentHandler fileContentMap =
+        VendorSoftwareProductUtils.loadUploadFileContent(uploadData.getContentData().array());
+    ValidationManager validationManager =
+        ValidationManagerUtil.initValidationManager(fileContentMap);
+    Map<String, List<ErrorMessage>> validationErrors = validationManager.validate();
+
+    return
+        MapUtils.isEmpty(MessageContainerUtil.getMessageByLevel(ErrorLevel.ERROR, validationErrors))
+            ? null : validationErrors;
+  }
+
+  private VersionInfo getVersionInfo(String vendorSoftwareProductId, VersionableEntityAction action,
+                                     String user) {
+    return versioningManager
+        .getEntityVersionInfo(VENDOR_SOFTWARE_PRODUCT_VERSIONABLE_TYPE, vendorSoftwareProductId,
+            user, action);
+  }
+
+  private void saveCompositionData(String vspId, Version version, CompositionData compositionData) {
+    Map<String, String> networkIdByName = new HashMap<>();
+    for (Network network : compositionData.getNetworks()) {
+
+      NetworkEntity networkEntity = new NetworkEntity(vspId, version, null);
+      networkEntity.setNetworkCompositionData(network);
+
+      if (network.getName() != null) {
+        networkIdByName.put(network.getName(), createNetwork(networkEntity).getId());
+      }
+    }
+
+    for (Component component : compositionData.getComponents()) {
+      ComponentEntity componentEntity = new ComponentEntity(vspId, version, null);
+      componentEntity.setComponentCompositionData(component.getData());
+
+      String componentId = createComponent(componentEntity).getId();
+
+      if (CollectionUtils.isNotEmpty(component.getNics())) {
+        for (Nic nic : component.getNics()) {
+          if (nic.getNetworkName() != null) {
+            nic.setNetworkId(networkIdByName.get(nic.getNetworkName()));
+            nic.setNetworkName(null);
+          }
+
+          org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity
+              nicEntity =
+              new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity(vspId, version,
+                  componentId, null);
+          nicEntity.setNicCompositionData(nic);
+          createNic(nicEntity);
+        }
+      }
+    }
+  }
+
+  private void deleteUploadDataAndContent(String vspId, Version version) {
+    vendorSoftwareProductDao.deleteUploadData(vspId, version);
+  }
+
+  private QuestionnaireValidationResult validateQuestionnaire(String vspId, Version version) {
+    CompositionEntityDataManager compositionEntityDataManager = new CompositionEntityDataManager();
+    compositionEntityDataManager
+        .addEntity(vendorSoftwareProductDao.getQuestionnaire(vspId, version), null);
+
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity> nics =
+        vendorSoftwareProductDao.listNicsByVsp(vspId, version);
+
+    Map<String, List<String>> nicNamesByComponent = new HashMap<>();
+    for (org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity nicEntity : nics) {
+      compositionEntityDataManager.addEntity(nicEntity, null);
+
+      Nic nic = nicEntity.getNicCompositionData();
+      if (nic != null && nic.getName() != null) {
+        List<String> nicNames = nicNamesByComponent.get(nicEntity.getComponentId());
+        if (nicNames == null) {
+          nicNames = new ArrayList<>();
+          nicNamesByComponent.put(nicEntity.getComponentId(), nicNames);
+        }
+        nicNames.add(nic.getName());
+      }
+    }
+
+    Collection<ComponentEntity> components =
+        vendorSoftwareProductDao.listComponentsQuestionnaire(vspId, version);
+    components.stream().forEach(component -> compositionEntityDataManager.addEntity(component,
+        new ComponentQuestionnaireSchemaInput(nicNamesByComponent.get(component.getId()),
+            JsonUtil.json2Object(component.getQuestionnaireData(), Map.class))));
+
+    Map<CompositionEntityId, Collection<String>> errorsByEntityId =
+        compositionEntityDataManager.validateEntitiesQuestionnaire();
+    if (MapUtils.isNotEmpty(errorsByEntityId)) {
+      compositionEntityDataManager.buildTrees();
+      compositionEntityDataManager.addErrorsToTrees(errorsByEntityId);
+      Collection<CompositionEntityValidationData> roots = compositionEntityDataManager.getTrees();
+      return new QuestionnaireValidationResult(roots.iterator().next());
+    }
+
+    return null;
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/CompositionDataExtractor.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/CompositionDataExtractor.java
new file mode 100644
index 0000000..f92b835
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/CompositionDataExtractor.java
@@ -0,0 +1,386 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.services;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.tosca.datatypes.ToscaCapabilityType;
+import org.openecomp.sdc.tosca.datatypes.ToscaFunctions;
+import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
+import org.openecomp.sdc.tosca.datatypes.ToscaRelationshipType;
+import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
+import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
+import org.openecomp.sdc.tosca.datatypes.model.ParameterDefinition;
+import org.openecomp.sdc.tosca.datatypes.model.RequirementAssignment;
+import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
+import org.openecomp.sdc.tosca.errors.ToscaInvalidEntryNotFoundErrorBuilder;
+import org.openecomp.sdc.tosca.errors.ToscaInvalidSubstituteNodeTemplateErrorBuilder;
+import org.openecomp.sdc.tosca.errors.ToscaMissingSubstitutionMappingForReqCapErrorBuilder;
+import org.openecomp.sdc.tosca.services.ToscaAnalyzerService;
+import org.openecomp.sdc.tosca.services.ToscaConstants;
+import org.openecomp.sdc.tosca.services.impl.ToscaAnalyzerServiceImpl;
+import org.openecomp.sdc.tosca.services.yamlutil.ToscaExtensionYamlUtil;
+import org.openecomp.sdc.vendorsoftwareproduct.types.ExtractCompositionDataContext;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * The type Composition data extractor.
+ */
+public class CompositionDataExtractor {
+
+  /**
+   * The constant logger.
+   */
+  protected static Logger logger;
+  private static ToscaAnalyzerService toscaAnalyzerService;
+
+  static {
+    logger = LoggerFactory.getLogger(CompositionDataExtractor.class);
+    toscaAnalyzerService = new ToscaAnalyzerServiceImpl();
+  }
+
+  /**
+   * Extract service composition data composition data.
+   *
+   * @param toscaServiceModel the tosca service model
+   * @return the composition data
+   */
+  public static CompositionData extractServiceCompositionData(ToscaServiceModel toscaServiceModel) {
+    ExtractCompositionDataContext context = new ExtractCompositionDataContext();
+    String entryDefinitionServiceTemplateFileName =
+        toscaServiceModel.getEntryDefinitionServiceTemplate();
+    ServiceTemplate entryDefinitionServiceTemplate =
+        toscaServiceModel.getServiceTemplates().get(entryDefinitionServiceTemplateFileName);
+    extractServiceCompositionData(entryDefinitionServiceTemplateFileName,
+        entryDefinitionServiceTemplate, toscaServiceModel, context);
+
+    CompositionData compositionData = new CompositionData();
+    compositionData.setNetworks(context.getNetworks());
+    compositionData.setComponents(context.getComponents());
+    return compositionData;
+  }
+
+  private static void extractServiceCompositionData(String serviceTemplateFileName,
+                                                    ServiceTemplate serviceTemplate,
+                                                    ToscaServiceModel toscaServiceModel,
+                                                    ExtractCompositionDataContext context) {
+    if (context.getHandledServiceTemplates().contains(serviceTemplateFileName)) {
+      return;
+    }
+    context.addNetworks(extractNetworks(serviceTemplate, toscaServiceModel));
+    extractComponents(serviceTemplate, toscaServiceModel, context);
+    handleSubstitution(serviceTemplate, toscaServiceModel, context);
+    context.addHandledServiceTemplates(serviceTemplateFileName);
+  }
+
+  private static void handleSubstitution(ServiceTemplate serviceTemplate,
+                                         ToscaServiceModel toscaServiceModel,
+                                         ExtractCompositionDataContext context) {
+    Map<String, NodeTemplate> substitutableNodeTemplates =
+        toscaAnalyzerService.getSubstitutableNodeTemplates(serviceTemplate);
+
+    if (substitutableNodeTemplates != null) {
+      for (String substitutableNodeTemplateId : substitutableNodeTemplates.keySet()) {
+        handleSubstitutableNodeTemplate(serviceTemplate, toscaServiceModel,
+            substitutableNodeTemplateId,
+            substitutableNodeTemplates.get(substitutableNodeTemplateId), context);
+      }
+    }
+  }
+
+  private static void handleSubstitutableNodeTemplate(ServiceTemplate serviceTemplate,
+                                                      ToscaServiceModel toscaServiceModel,
+                                                      String substitutableNodeTemplateId,
+                                                      NodeTemplate substitutableNodeTemplate,
+                                                      ExtractCompositionDataContext context) {
+    ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
+    Optional<String> substituteServiceTemplateFileName = toscaAnalyzerService
+        .getSubstituteServiceTemplateName(substitutableNodeTemplateId, substitutableNodeTemplate);
+    if (!substituteServiceTemplateFileName.isPresent()) {
+      throw new CoreException(
+          new ToscaInvalidSubstituteNodeTemplateErrorBuilder(substitutableNodeTemplateId).build());
+    }
+    if (context.getHandledServiceTemplates().contains(substituteServiceTemplateFileName.get())) {
+      return;
+    }
+
+    ServiceTemplate substituteServiceTemplate =
+        toscaServiceModel.getServiceTemplates().get(substituteServiceTemplateFileName.get());
+    extractServiceCompositionData(substituteServiceTemplateFileName.get(),
+        substituteServiceTemplate, toscaServiceModel, context);
+
+    List<Map<String, RequirementAssignment>> substitutableRequirements =
+        substitutableNodeTemplate.getRequirements();
+
+    if (CollectionUtils.isEmpty(substitutableRequirements)) {
+      return;
+    }
+
+    for (Map<String, RequirementAssignment> substitutableReq : substitutableRequirements) {
+      substitutableReq.keySet().stream().filter(reqId -> {
+        RequirementAssignment reqAssignment = toscaExtensionYamlUtil
+            .yamlToObject(toscaExtensionYamlUtil.objectToYaml(substitutableReq.get(reqId)),
+                RequirementAssignment.class);
+        return isLinkToNetworkRequirementAssignment(reqAssignment);
+      }).forEach(reqId -> {
+        RequirementAssignment linkToNetworkRequirement = toscaExtensionYamlUtil
+            .yamlToObject(toscaExtensionYamlUtil.objectToYaml(substitutableReq.get(reqId)),
+                RequirementAssignment.class);
+        String connectedNodeId = linkToNetworkRequirement.getNode();
+        Optional<NodeTemplate> connectedNodeTemplate =
+            toscaAnalyzerService.getNodeTemplateById(serviceTemplate, connectedNodeId);
+
+        if (connectedNodeTemplate.isPresent() && toscaAnalyzerService
+            .isTypeOf(connectedNodeTemplate.get(), ToscaNodeType.NETWORK.getDisplayName(),
+                serviceTemplate, toscaServiceModel)) {
+          Optional<Map.Entry<String, NodeTemplate>> mappedNodeTemplate = toscaAnalyzerService
+              .getSubstitutionMappedNodeTemplateByExposedReq(
+                  substituteServiceTemplateFileName.get(), substituteServiceTemplate, reqId);
+          if (!mappedNodeTemplate.isPresent()) {
+            throw new CoreException(new ToscaMissingSubstitutionMappingForReqCapErrorBuilder(
+                ToscaMissingSubstitutionMappingForReqCapErrorBuilder.MappingExposedEntry
+                    .REQUIREMENT, connectedNodeId).build());
+          }
+
+          if (toscaAnalyzerService.isTypeOf(mappedNodeTemplate.get().getValue(),
+              ToscaNodeType.NETWORK_PORT.getDisplayName(), serviceTemplate, toscaServiceModel)) {
+            Nic port = context.getNics().get(mappedNodeTemplate.get().getKey());
+            if (port != null) {
+              port.setNetworkName(connectedNodeId);
+            } else {
+              logger.warn(
+                  "Different ports define for the same component which is used in different "
+                      + "substitution service templates.");
+            }
+          }
+        } else if (!connectedNodeTemplate.isPresent()) {
+          throw new CoreException(
+              new ToscaInvalidEntryNotFoundErrorBuilder("Node Template", connectedNodeId).build());
+        }
+      });
+    }
+  }
+
+  private static boolean isLinkToNetworkRequirementAssignment(RequirementAssignment requirement) {
+    return toscaAnalyzerService.isDesiredRequirementAssignment(requirement,
+        ToscaCapabilityType.NETWORK_LINKABLE.getDisplayName(), null,
+        ToscaRelationshipType.NETWORK_LINK_TO.getDisplayName());
+  }
+
+
+  private static void connectPortToNetwork(Nic port, NodeTemplate portNodeTemplate) {
+    List<RequirementAssignment> linkRequirementsToNetwork =
+        toscaAnalyzerService.getRequirements(portNodeTemplate, ToscaConstants.LINK_REQUIREMENT_ID);
+
+    //port is connected to one network
+    for (RequirementAssignment linkRequirementToNetwork : linkRequirementsToNetwork) {
+      port.setNetworkName(linkRequirementToNetwork.getNode());
+    }
+
+  }
+
+  /*
+  return Map with key - compute node template id, value - list of connected port node template id
+   */
+  private static Map<String, List<String>> getComputeToPortsConnection(
+      Map<String, NodeTemplate> portNodeTemplates) {
+    Map<String, List<String>> computeToPortConnection = new HashMap<>();
+    if (MapUtils.isEmpty(portNodeTemplates)) {
+      return computeToPortConnection;
+    }
+    for (String portId : portNodeTemplates.keySet()) {
+      List<RequirementAssignment> bindingRequirementsToCompute = toscaAnalyzerService
+          .getRequirements(portNodeTemplates.get(portId), ToscaConstants.BINDING_REQUIREMENT_ID);
+      for (RequirementAssignment bindingRequirementToCompute : bindingRequirementsToCompute) {
+        computeToPortConnection
+            .putIfAbsent(bindingRequirementToCompute.getNode(), new ArrayList<>());
+        computeToPortConnection.get(bindingRequirementToCompute.getNode()).add(portId);
+      }
+
+    }
+
+    return computeToPortConnection;
+  }
+
+  private static void extractComponents(ServiceTemplate serviceTemplate,
+                                        ToscaServiceModel toscaServiceModel,
+                                        ExtractCompositionDataContext context) {
+    Map<String, NodeTemplate> computeNodeTemplates = toscaAnalyzerService
+        .getNodeTemplatesByType(serviceTemplate, ToscaNodeType.COMPUTE.getDisplayName(),
+            toscaServiceModel);
+    if (MapUtils.isEmpty(computeNodeTemplates)) {
+      return;
+    }
+    Map<String, NodeTemplate> portNodeTemplates = toscaAnalyzerService
+        .getNodeTemplatesByType(serviceTemplate, ToscaNodeType.NETWORK_PORT.getDisplayName(),
+            toscaServiceModel);
+    Map<String, List<String>> computeToPortsConnection =
+        getComputeToPortsConnection(portNodeTemplates);
+    Map<String, List<String>> computesGroupedByType =
+        getNodeTemplatesGroupedByType(computeNodeTemplates);
+
+    computesGroupedByType.keySet()
+        .stream()
+        .filter(nodeType ->
+            !context.getCreatedComponents().contains(nodeType))
+        .forEach(nodeType -> extractComponent(serviceTemplate, computeToPortsConnection,
+            computesGroupedByType, nodeType, context));
+  }
+
+  private static void extractComponent(ServiceTemplate serviceTemplate,
+                                       Map<String, List<String>> computeToPortsConnection,
+                                       Map<String, List<String>> computesGroupedByType,
+                                       String computeNodeType,
+                                       ExtractCompositionDataContext context) {
+    ComponentData component = new ComponentData();
+    component.setName(computeNodeType);
+    component.setDisplayName(getComponentDisplayName(component.getName()));
+    Component componentModel = new Component();
+    componentModel.setData(component);
+
+    String computeId = computesGroupedByType.get(computeNodeType).get(0);
+    List<String> connectedPortIds = computeToPortsConnection.get(computeId);
+
+    if (connectedPortIds != null) {
+      componentModel.setNics(new ArrayList<>());
+      for (String portId : connectedPortIds) {
+        Nic port = extractPort(serviceTemplate, portId);
+        componentModel.getNics().add(port);
+        context.addNic(portId, port);
+      }
+    }
+    context.addComponent(componentModel);
+    context.getCreatedComponents().add(computeNodeType);
+  }
+
+  private static Nic extractPort(ServiceTemplate serviceTemplate, String portNodeTemplateId) {
+    Optional<NodeTemplate> portNodeTemplate =
+        toscaAnalyzerService.getNodeTemplateById(serviceTemplate, portNodeTemplateId);
+    if (portNodeTemplate.isPresent()) {
+      Nic port = new Nic();
+      port.setName(portNodeTemplateId);
+      connectPortToNetwork(port, portNodeTemplate.get());
+      return port;
+    } else {
+      throw new CoreException(
+          new ToscaInvalidEntryNotFoundErrorBuilder("Node Template", portNodeTemplateId).build());
+    }
+  }
+
+
+  private static Map<String, List<String>> getNodeTemplatesGroupedByType(
+      Map<String, NodeTemplate> nodeTemplates) {
+    Map<String, List<String>> nodeTemplatesGrouped =
+        new HashMap<>();   //key - node type, value - list of node ids with this type
+    for (String nodeId : nodeTemplates.keySet()) {
+      String nodeType = nodeTemplates.get(nodeId).getType();
+      nodeTemplatesGrouped.putIfAbsent(nodeType, new ArrayList<>());
+      nodeTemplatesGrouped.get(nodeType).add(nodeId);
+    }
+    return nodeTemplatesGrouped;
+  }
+
+  private static List<Network> extractNetworks(ServiceTemplate serviceTemplate,
+                                               ToscaServiceModel toscaServiceModel) {
+    List<Network> networks = new ArrayList<>();
+    Map<String, NodeTemplate> networkNodeTemplates = toscaAnalyzerService
+        .getNodeTemplatesByType(serviceTemplate, ToscaNodeType.NETWORK.getDisplayName(),
+            toscaServiceModel);
+    if (MapUtils.isEmpty(networkNodeTemplates)) {
+      return networks;
+    }
+    for (String networkId : networkNodeTemplates.keySet()) {
+      Network network = new Network();
+      network.setName(networkId);
+      Optional<Boolean> networkDhcpValue =
+          getNetworkDhcpValue(serviceTemplate, networkNodeTemplates.get(networkId));
+      network.setDhcp(networkDhcpValue.isPresent() ? networkDhcpValue.get() : true);
+      networks.add(network);
+    }
+
+    return networks;
+  }
+
+  //dhcp default value is true
+  private static Optional<Boolean> getNetworkDhcpValue(ServiceTemplate serviceTemplate,
+                                                       NodeTemplate networkNodeTemplate) {
+    if (networkNodeTemplate == null) {
+      return Optional.empty();
+    }
+    if (networkNodeTemplate.getProperties() == null
+        || networkNodeTemplate.getProperties().get(ToscaConstants.DHCP_ENABLED_PROPERTY_NAME)
+        == null) {
+      return Optional.of(true);
+    }
+
+    Object dhcp =
+        networkNodeTemplate.getProperties().get(ToscaConstants.DHCP_ENABLED_PROPERTY_NAME);
+    if (dhcp instanceof String) {
+      return Optional.of(Boolean.valueOf((String) dhcp));
+    } else if (dhcp instanceof Boolean) {
+      return Optional.of((Boolean) dhcp);
+    } else if (dhcp instanceof Map) {
+      String inputParameterName =
+          (String) ((Map) dhcp).get(ToscaFunctions.GET_INPUT.getDisplayName());
+      if (inputParameterName != null) {
+        ParameterDefinition inputParameterDefinition =
+            serviceTemplate.getTopology_template().getInputs().get(inputParameterName);
+        if (inputParameterDefinition != null) {
+          if (inputParameterDefinition.get_default() != null) {
+            return Optional.of(Boolean.valueOf(inputParameterDefinition.get_default().toString()));
+          }
+        } else {
+          throw new CoreException(
+              new ToscaInvalidEntryNotFoundErrorBuilder("Input Parameter", inputParameterName)
+                  .build());
+        }
+      }
+    }
+
+    return Optional.of(true);
+  }
+
+  private static String getComponentDisplayName(String componentName) {
+    if (componentName == null) {
+      return null;
+    }
+    String delimiterChar = ".";
+    if (componentName.contains(delimiterChar)) {
+      return componentName.substring(componentName.lastIndexOf(delimiterChar) + 1);
+    }
+    return componentName;
+
+  }
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/CompositionEntityDataManager.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/CompositionEntityDataManager.java
new file mode 100644
index 0000000..e3f56a6
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/CompositionEntityDataManager.java
@@ -0,0 +1,257 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.services;
+
+import org.openecomp.core.utilities.json.JsonUtil;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityValidationData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateInput;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * The type Composition entity data manager.
+ */
+public class CompositionEntityDataManager {
+
+  private static final String COMPOSITION_ENTITY_DATA_MANAGER_ERR =
+      "COMPOSITION_ENTITY_DATA_MANAGER_ERR";
+  private static final String COMPOSITION_ENTITY_DATA_MANAGER_ERR_MSG =
+      "Invalid input: %s may not be null";
+
+  private Map<org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId,
+      CompositionEntityData> entities = new HashMap<>();
+  private Map<org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType,
+      String> nonDynamicSchemas = new HashMap<>();
+  private List<CompositionEntityValidationData> roots = new ArrayList<>();
+
+  /**
+   * Validate entity composition entity validation data.
+   *
+   * @param entity                the entity
+   * @param schemaTemplateContext the schema template context
+   * @param schemaTemplateInput   the schema template input
+   * @return the composition entity validation data
+   */
+  public static CompositionEntityValidationData validateEntity(
+      org.openecomp.sdc.vendorsoftwareproduct.dao.type.CompositionEntity entity,
+      SchemaTemplateContext schemaTemplateContext,
+      SchemaTemplateInput schemaTemplateInput) {
+    if (entity == null) {
+      throw new CoreException(
+          new ErrorCode.ErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION)
+              .withId(COMPOSITION_ENTITY_DATA_MANAGER_ERR).withMessage(
+              String.format(COMPOSITION_ENTITY_DATA_MANAGER_ERR_MSG, "composition entity"))
+              .build());
+    }
+    if (schemaTemplateContext == null) {
+      throw new CoreException(
+          new ErrorCode.ErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION)
+              .withId(COMPOSITION_ENTITY_DATA_MANAGER_ERR).withMessage(
+              String.format(COMPOSITION_ENTITY_DATA_MANAGER_ERR_MSG, "schema template context"))
+              .build());
+    }
+
+    CompositionEntityValidationData validationData =
+        new CompositionEntityValidationData(entity.getType(), entity.getId());
+    String json =
+        schemaTemplateContext == SchemaTemplateContext.composition ? entity.getCompositionData()
+            : entity.getQuestionnaireData();
+    validationData.setErrors(JsonUtil.validate(
+        json == null ? JsonUtil.object2Json(new Object()) : json,
+        SchemaGenerator.generate(schemaTemplateContext, entity.getType(), schemaTemplateInput)));
+
+    return validationData;
+  }
+
+  /**
+   * Add entity.
+   *
+   * @param entity              the entity
+   * @param schemaTemplateInput the schema template input
+   */
+  public void addEntity(org.openecomp.sdc.vendorsoftwareproduct.dao.type.CompositionEntity entity,
+                        SchemaTemplateInput schemaTemplateInput) {
+    if (entity == null) {
+      throw new CoreException(
+          new ErrorCode.ErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION)
+              .withId(COMPOSITION_ENTITY_DATA_MANAGER_ERR).withMessage(
+              String.format(COMPOSITION_ENTITY_DATA_MANAGER_ERR_MSG, "composition entity"))
+              .build());
+    }
+    entities.put(entity.getCompositionEntityId(),
+        new CompositionEntityData(entity, schemaTemplateInput));
+  }
+
+  /**
+   * Validate entities questionnaire map.
+   *
+   * @return the map
+   */
+  public Map<org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId,
+      Collection<String>> validateEntitiesQuestionnaire() {
+    Map<org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId,
+        Collection<String>>
+        errorsByEntityId = new HashMap<>();
+
+    entities.entrySet().stream().forEach(entry -> {
+      Collection<String> errors = validateQuestionnaire(entry.getValue());
+      if (errors != null) {
+        errorsByEntityId.put(entry.getKey(), errors);
+      }
+    });
+
+    return errorsByEntityId;
+  }
+
+  /**
+   * Build trees.
+   */
+  public void buildTrees() {
+    Map<org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId,
+        CompositionEntityValidationData>
+        entitiesValidationData =
+        new HashMap<>();
+    entities.entrySet().stream().forEach(
+        entry -> addValidationDataEntity(entitiesValidationData, entry.getKey(),
+            entry.getValue().entity));
+  }
+
+  /**
+   * Gets trees.
+   *
+   * @return the trees
+   */
+  public Collection<CompositionEntityValidationData> getTrees() {
+    return roots;
+  }
+
+  /**
+   * Add errors to trees.
+   *
+   * @param errors the errors
+   */
+  public void addErrorsToTrees(
+      Map<org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId,
+          Collection<String>> errors) {
+    roots.stream().forEach(root -> addErrorsToTree(root, null, errors));
+  }
+
+  private void addValidationDataEntity(
+      Map<org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId,
+          CompositionEntityValidationData> entitiesValidationData,
+      org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId entityId,
+      org.openecomp.sdc.vendorsoftwareproduct.dao.type.CompositionEntity entity) {
+    if (entitiesValidationData.containsKey(entityId)) {
+      return;
+    }
+
+    CompositionEntityValidationData validationData =
+        new CompositionEntityValidationData(entity.getType(), entity.getId());
+    entitiesValidationData.put(entityId, validationData);
+
+    org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId parentEntityId =
+        entityId.getParentId();
+    if (parentEntityId == null) {
+      roots.add(validationData);
+    } else {
+      CompositionEntityData parentEntity = entities.get(parentEntityId);
+      if (parentEntity == null) {
+        roots.add(validationData);
+      } else {
+        addValidationDataEntity(entitiesValidationData, parentEntityId, parentEntity.entity);
+        entitiesValidationData.get(parentEntityId).addSubEntityValidationData(validationData);
+      }
+    }
+  }
+
+  private void addErrorsToTree(CompositionEntityValidationData node,
+       org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId parentNodeId,
+       Map<org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId,
+           Collection<String>> errors) {
+    if (node == null) {
+      return;
+    }
+    org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId
+        nodeId = new org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId(
+        node.getEntityId(), parentNodeId);
+    node.setErrors(errors.get(nodeId));
+
+    if (node.getSubEntitiesValidationData() != null) {
+      node.getSubEntitiesValidationData().stream()
+          .forEach(subNode -> addErrorsToTree(subNode, nodeId, errors));
+    }
+  }
+
+  private Collection<String> validateQuestionnaire(CompositionEntityData compositionEntityData) {
+    return JsonUtil.validate(
+        compositionEntityData.entity.getQuestionnaireData() == null ? JsonUtil
+            .object2Json(new Object()) : compositionEntityData.entity.getQuestionnaireData(),
+        getSchema(compositionEntityData.entity.getType(), SchemaTemplateContext.questionnaire,
+            compositionEntityData.schemaTemplateInput));
+  }
+
+  private String getSchema(
+      org.openecomp.sdc.vendorsoftwareproduct.types
+          .composition.CompositionEntityType compositionEntityType,
+      SchemaTemplateContext schemaTemplateContext,
+      SchemaTemplateInput schemaTemplateInput) {
+    return schemaTemplateInput == null ? getNonDynamicSchema(schemaTemplateContext,
+        compositionEntityType) : SchemaGenerator
+        .generate(schemaTemplateContext, compositionEntityType, schemaTemplateInput);
+  }
+
+  private String getNonDynamicSchema(SchemaTemplateContext schemaTemplateContext,
+      org.openecomp.sdc.vendorsoftwareproduct.types.composition
+        .CompositionEntityType compositionEntityType) {
+    String schema = nonDynamicSchemas.get(compositionEntityType);
+    if (schema == null) {
+      schema = SchemaGenerator.generate(schemaTemplateContext, compositionEntityType, null);
+      nonDynamicSchemas.put(compositionEntityType, schema);
+    }
+    return schema;
+  }
+
+  private static class CompositionEntityData {
+    private org.openecomp.sdc.vendorsoftwareproduct.dao.type.CompositionEntity entity;
+    private SchemaTemplateInput schemaTemplateInput;
+
+    /**
+     * Instantiates a new Composition entity data.
+     *
+     * @param entity              the entity
+     * @param schemaTemplateInput the schema template input
+     */
+    public CompositionEntityData(
+        org.openecomp.sdc.vendorsoftwareproduct.dao.type.CompositionEntity entity,
+        SchemaTemplateInput schemaTemplateInput) {
+      this.entity = entity;
+      this.schemaTemplateInput = schemaTemplateInput;
+    }
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/SchemaGenerator.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/SchemaGenerator.java
new file mode 100644
index 0000000..53fe545
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/SchemaGenerator.java
@@ -0,0 +1,70 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.services;
+
+import freemarker.template.Template;
+import freemarker.template.TemplateException;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateInput;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+
+/**
+ * The type Schema generator.
+ */
+public class SchemaGenerator {
+  /**
+   * The constant SCHEMA_GENERATION_ERROR.
+   */
+  public static final String SCHEMA_GENERATION_ERROR = "SCHEMA_GENERATION_ERROR";
+
+  /**
+   * Generate string.
+   *
+   * @param schemaTemplateContext the schema template context
+   * @param entityType            the entity type
+   * @param input                 the input
+   * @return the string
+   */
+  public static String generate(SchemaTemplateContext schemaTemplateContext,
+       org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType entityType,
+                                SchemaTemplateInput input) {
+    Template schemaTemplate =
+        SchemaGeneratorConfig.getSchemaTemplate(schemaTemplateContext, entityType);
+    return processTemplate(input, schemaTemplate);
+  }
+
+  private static String processTemplate(SchemaTemplateInput input, Template schemaTemplate) {
+    try (Writer writer = new StringWriter(1024)) {
+      schemaTemplate.process(input, writer);
+      return writer.toString();
+    } catch (IOException | TemplateException exception) {
+      throw new CoreException(
+          new ErrorCode.ErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION)
+              .withId(SCHEMA_GENERATION_ERROR).withMessage(exception.getMessage()).build());
+    }
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/SchemaGeneratorConfig.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/SchemaGeneratorConfig.java
new file mode 100644
index 0000000..034d852
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/SchemaGeneratorConfig.java
@@ -0,0 +1,184 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.services;
+
+import freemarker.cache.StringTemplateLoader;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import freemarker.template.TemplateExceptionHandler;
+import org.openecomp.core.utilities.applicationconfig.ApplicationConfig;
+import org.openecomp.core.utilities.applicationconfig.ApplicationConfigFactory;
+import org.openecomp.core.utilities.applicationconfig.type.ConfigurationData;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * The type Schema generator config.
+ */
+public class SchemaGeneratorConfig {
+  /**
+   * The constant SCHEMA_GENERATOR_INITIALIZATION_ERROR.
+   */
+  public static final String SCHEMA_GENERATOR_INITIALIZATION_ERROR =
+      "SCHEMA_GENERATOR_INITIALIZATION_ERROR";
+  /**
+   * The constant SCHEMA_GENERATOR_INITIALIZATION_ERROR_MSG.
+   */
+  public static final String SCHEMA_GENERATOR_INITIALIZATION_ERROR_MSG =
+      "Error occurred while loading questionnaire schema schemaTemplates";
+  private static final String CONFIGURATION_NAMESPACE = "vsp.schemaTemplates";
+  private static Map<SchemaTemplateId, SchemaTemplate> schemaTemplates = new HashMap<>();
+  private static ApplicationConfig applicationConfig =
+      ApplicationConfigFactory.getInstance().createInterface();
+
+  private static Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);
+  private static StringTemplateLoader stringLoader = new StringTemplateLoader();
+
+  static {
+    configuration.setClassLoaderForTemplateLoading(SchemaGenerator.class.getClassLoader(),
+        File.pathSeparator);
+    configuration.setDefaultEncoding("UTF-8");
+    configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
+    configuration.setLogTemplateExceptions(true);
+    configuration.setTemplateLoader(stringLoader);
+  }
+
+  /**
+   * Insert schema template.
+   *
+   * @param schemaTemplateContext the schema template context
+   * @param entityType            the entity type
+   * @param schemaTemplateString  the schema template string
+   */
+  public static void insertSchemaTemplate(SchemaTemplateContext schemaTemplateContext,
+         org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType entityType,
+         String schemaTemplateString) {
+    applicationConfig.insertValue(CONFIGURATION_NAMESPACE,
+        new SchemaTemplateId(schemaTemplateContext, entityType).toString(), schemaTemplateString);
+  }
+
+  /**
+   * Gets schema template.
+   *
+   * @param schemaTemplateContext the schema template context
+   * @param entityType            the entity type
+   * @return the schema template
+   */
+  public static Template getSchemaTemplate(SchemaTemplateContext schemaTemplateContext,
+       org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType entityType) {
+    SchemaTemplateId id = new SchemaTemplateId(schemaTemplateContext, entityType);
+    ConfigurationData configurationData =
+        applicationConfig.getConfigurationData(CONFIGURATION_NAMESPACE, id.toString());
+
+    SchemaTemplate schemaTemplate = schemaTemplates.get(id);
+    if (schemaTemplate == null || schemaTemplate.timestamp != configurationData.getTimeStamp()) {
+      stringLoader.putTemplate(id.toString(), configurationData.getValue());
+      Template template;
+      try {
+        template = configuration.getTemplate(id.toString());
+      } catch (IOException exception) {
+        throw new CoreException(
+            new ErrorCode.ErrorCodeBuilder().withCategory(ErrorCategory.APPLICATION)
+                .withId(SCHEMA_GENERATOR_INITIALIZATION_ERROR)
+                .withMessage(SCHEMA_GENERATOR_INITIALIZATION_ERROR_MSG).build(), exception);
+      }
+      schemaTemplate = new SchemaTemplate(template, configurationData.getTimeStamp());
+      schemaTemplates.put(id, schemaTemplate);
+    }
+    return schemaTemplate.template;
+  }
+
+  private static class SchemaTemplateId {
+    private SchemaTemplateContext context;
+    private org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType
+        entityType;
+
+    /**
+     * Instantiates a new Schema template id.
+     *
+     * @param context    the context
+     * @param entityType the entity type
+     */
+    public SchemaTemplateId(SchemaTemplateContext context,
+        org.openecomp.sdc.vendorsoftwareproduct.types.composition
+            .CompositionEntityType entityType) {
+      this.context = context;
+      this.entityType = entityType;
+    }
+
+    @Override
+    public String toString() {
+      return context + "." + entityType;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+      if (this == obj) {
+        return true;
+      }
+      if (obj == null || getClass() != obj.getClass()) {
+        return false;
+      }
+
+      SchemaTemplateId that = (SchemaTemplateId) obj;
+
+      if (entityType != that.entityType) {
+        return false;
+      }
+      if (context != that.context) {
+        return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int result = entityType != null ? entityType.hashCode() : 0;
+      result = 31 * result + (context != null ? context.hashCode() : 0);
+      return result;
+    }
+  }
+
+  private static class SchemaTemplate {
+    private Template template;
+    private long timestamp;
+
+    /**
+     * Instantiates a new Schema template.
+     *
+     * @param template  the template
+     * @param timestamp the timestamp
+     */
+    public SchemaTemplate(Template template, long timestamp) {
+      this.template = template;
+      this.timestamp = timestamp;
+    }
+  }
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/CompositionEntityResponse.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/CompositionEntityResponse.java
new file mode 100644
index 0000000..6a71db0
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/CompositionEntityResponse.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types;
+
+public class CompositionEntityResponse<T extends org.openecomp.sdc
+    .vendorsoftwareproduct.types.composition.CompositionDataEntity> {
+
+  private String id;
+  private String schema;
+  private T data;
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getSchema() {
+    return schema;
+  }
+
+  public void setSchema(String schema) {
+    this.schema = schema;
+  }
+
+  public T getData() {
+    return data;
+  }
+
+  public void setData(T data) {
+    this.data = data;
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/CompositionEntityValidationData.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/CompositionEntityValidationData.java
new file mode 100644
index 0000000..d334e18
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/CompositionEntityValidationData.java
@@ -0,0 +1,122 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types;
+
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * The type Composition entity validation data.
+ */
+public class CompositionEntityValidationData {
+  private CompositionEntityType entityType;
+  private String entityId;
+  private Collection<String> errors;
+  private Collection<CompositionEntityValidationData> subEntitiesValidationData;
+
+  /**
+   * Instantiates a new Composition entity validation data.
+   *
+   * @param entityType the entity type
+   * @param entityId   the entity id
+   */
+  public CompositionEntityValidationData(CompositionEntityType entityType, String entityId) {
+    this.entityType = entityType;
+    this.entityId = entityId;
+  }
+
+  /**
+   * Gets entity type.
+   *
+   * @return the entity type
+   */
+  public CompositionEntityType getEntityType() {
+    return entityType;
+  }
+
+  /**
+   * Sets entity type.
+   *
+   * @param entityType the entity type
+   */
+  public void setEntityType(CompositionEntityType entityType) {
+    this.entityType = entityType;
+  }
+
+  /**
+   * Gets entity id.
+   *
+   * @return the entity id
+   */
+  public String getEntityId() {
+    return entityId;
+  }
+
+  /**
+   * Sets entity id.
+   *
+   * @param entityId the entity id
+   */
+  public void setEntityId(String entityId) {
+    this.entityId = entityId;
+  }
+
+  /**
+   * Gets errors.
+   *
+   * @return the errors
+   */
+  public Collection<String> getErrors() {
+    return errors;
+  }
+
+  /**
+   * Sets errors.
+   *
+   * @param errors the errors
+   */
+  public void setErrors(Collection<String> errors) {
+    this.errors = errors;
+  }
+
+  /**
+   * Gets sub entities validation data.
+   *
+   * @return the sub entities validation data
+   */
+  public Collection<CompositionEntityValidationData> getSubEntitiesValidationData() {
+    return subEntitiesValidationData;
+  }
+
+  /**
+   * Add sub entity validation data.
+   *
+   * @param subEntityValidationData the sub entity validation data
+   */
+  public void addSubEntityValidationData(CompositionEntityValidationData subEntityValidationData) {
+    if (subEntitiesValidationData == null) {
+      subEntitiesValidationData = new ArrayList<>();
+    }
+    subEntitiesValidationData.add(subEntityValidationData);
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/ExtractCompositionDataContext.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/ExtractCompositionDataContext.java
new file mode 100644
index 0000000..0e34fc4
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/ExtractCompositionDataContext.java
@@ -0,0 +1,204 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types;
+
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * The type Extract composition data context.
+ */
+public class ExtractCompositionDataContext {
+  private List<org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network> networks =
+      new ArrayList<>();
+  private List<org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component> components =
+      new ArrayList<>();
+  private Map<String, Nic> nics = new HashMap<>();
+  private Set<String> handledServiceTemplates = new HashSet<>();
+  private Set<String> createdComponents = new HashSet<>();
+
+  /**
+   * Gets created components.
+   *
+   * @return the created components
+   */
+  public Set<String> getCreatedComponents() {
+    return createdComponents;
+  }
+
+  /**
+   * Sets created components.
+   *
+   * @param createdComponents the created components
+   */
+  public void setCreatedComponents(Set<String> createdComponents) {
+    this.createdComponents = createdComponents;
+  }
+
+  /**
+   * Gets handled service templates.
+   *
+   * @return the handled service templates
+   */
+  public Set<String> getHandledServiceTemplates() {
+    return handledServiceTemplates;
+  }
+
+  /**
+   * Sets handled service templates.
+   *
+   * @param handledServiceTemplates the handled service templates
+   */
+  public void setHandledServiceTemplates(Set<String> handledServiceTemplates) {
+    this.handledServiceTemplates = handledServiceTemplates;
+  }
+
+  /**
+   * Add handled service templates.
+   *
+   * @param handledServiceTemplate the handled service template
+   */
+  public void addHandledServiceTemplates(String handledServiceTemplate) {
+    this.handledServiceTemplates.add(handledServiceTemplate);
+  }
+
+  /**
+   * Gets networks.
+   *
+   * @return the networks
+   */
+  public List<org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network> getNetworks() {
+    return networks;
+  }
+
+  /**
+   * Sets networks.
+   *
+   * @param networks the networks
+   */
+  public void setNetworks(
+      List<org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network> networks) {
+    this.networks = networks;
+  }
+
+  /**
+   * Add network.
+   *
+   * @param network the network
+   */
+  public void addNetwork(
+      org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network network) {
+    if (network != null) {
+      networks.add(network);
+    }
+  }
+
+  /**
+   * Add networks.
+   *
+   * @param network the network
+   */
+  public void addNetworks(
+      List<org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network> network) {
+    if (networks != null) {
+      networks.addAll(network);
+    }
+  }
+
+  /**
+   * Gets components.
+   *
+   * @return the components
+   */
+  public List<org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component> getComponents() {
+    return components;
+  }
+
+  /**
+   * Sets components.
+   *
+   * @param components the components
+   */
+  public void setComponents(
+      List<org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component> components) {
+    this.components = components;
+  }
+
+  /**
+   * Add component.
+   *
+   * @param component the component
+   */
+  public void addComponent(
+      org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component component) {
+    if (component != null) {
+      components.add(component);
+    }
+  }
+
+  /**
+   * Add components.
+   *
+   * @param components the components
+   */
+  public void addComponents(
+      List<org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component> components) {
+    if (components != null) {
+      this.components.addAll(components);
+    }
+  }
+
+  /**
+   * Gets nics.
+   *
+   * @return the nics
+   */
+  public Map<String, Nic> getNics() {
+    return nics;
+  }
+
+  /**
+   * Sets nics.
+   *
+   * @param nics the nics
+   */
+  public void setNics(Map<String, Nic> nics) {
+    this.nics = nics;
+  }
+
+  /**
+   * Add nic.
+   *
+   * @param nicId the nic id
+   * @param nic   the nic
+   */
+  public void addNic(String nicId, Nic nic) {
+    this.nics.put(nicId, nic);
+  }
+
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/LicensingData.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/LicensingData.java
new file mode 100644
index 0000000..f0f6c09
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/LicensingData.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types;
+
+import java.util.List;
+
+public class LicensingData {
+
+  private String licenseAgreement;
+  private List<String> featureGroups;
+
+  public String getLicenseAgreement() {
+    return licenseAgreement;
+  }
+
+  public void setLicenseAgreement(String licenseAgreement) {
+    this.licenseAgreement = licenseAgreement;
+  }
+
+  public List<String> getFeatureGroups() {
+    return featureGroups;
+  }
+
+  public void setFeatureGroups(List<String> featureGroups) {
+    this.featureGroups = featureGroups;
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/QuestionnaireResponse.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/QuestionnaireResponse.java
new file mode 100644
index 0000000..84a2ed5
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/QuestionnaireResponse.java
@@ -0,0 +1,42 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types;
+
+public class QuestionnaireResponse {
+  private String schema;
+  private String data;
+
+  public String getSchema() {
+    return schema;
+  }
+
+  public void setSchema(String schema) {
+    this.schema = schema;
+  }
+
+  public String getData() {
+    return data;
+  }
+
+  public void setData(String data) {
+    this.data = data;
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/QuestionnaireValidationResult.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/QuestionnaireValidationResult.java
new file mode 100644
index 0000000..d970e73
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/QuestionnaireValidationResult.java
@@ -0,0 +1,39 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types;
+
+public class QuestionnaireValidationResult {
+  private boolean valid;
+  private CompositionEntityValidationData validationData;
+
+  public QuestionnaireValidationResult(CompositionEntityValidationData validationData) {
+    this.validationData = validationData;
+    valid = validationData == null;
+  }
+
+  public boolean isValid() {
+    return valid;
+  }
+
+  public CompositionEntityValidationData getValidationData() {
+    return validationData;
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/UploadFileResponse.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/UploadFileResponse.java
new file mode 100644
index 0000000..68389b6
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/UploadFileResponse.java
@@ -0,0 +1,143 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types;
+
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class UploadFileResponse {
+  private List<String> fileNames;
+  private Map<String, List<org.openecomp.sdc.datatypes.error.ErrorMessage>> errors =
+      new HashMap<>();
+  private UploadFileStatus status = UploadFileStatus.Success;
+
+  /**
+   * Gets status.
+   *
+   * @return the status
+   */
+  public UploadFileStatus getStatus() {
+    return status;
+  }
+
+  /**
+   * Sets status.
+   *
+   * @param status the status
+   */
+  public void setStatus(UploadFileStatus status) {
+    this.status = status;
+  }
+
+  /**
+   * Gets file names.
+   *
+   * @return the file names
+   */
+  public List<String> getFileNames() {
+    return fileNames;
+  }
+
+  /**
+   * Sets file names.
+   *
+   * @param fileNames the file names
+   */
+  public void setFileNames(List<String> fileNames) {
+    this.fileNames = fileNames;
+  }
+
+  /**
+   * Add new file to list.
+   *
+   * @param filename the filename
+   */
+  public void addNewFileToList(String filename) {
+    this.fileNames.add(filename);
+  }
+
+  /**
+   * Remove file from list.
+   *
+   * @param toRemove the to remove
+   */
+  public void removeFileFromList(String toRemove) {
+    this.fileNames.remove(toRemove);
+  }
+
+  /**
+   * Add structure error.
+   *
+   * @param fileName     the file name
+   * @param errorMessage the error message
+   */
+  public void addStructureError(String fileName,
+                                org.openecomp.sdc.datatypes.error.ErrorMessage errorMessage) {
+    List<org.openecomp.sdc.datatypes.error.ErrorMessage> errorList = errors.get(fileName);
+    if (errorList == null) {
+      errorList = new ArrayList<>();
+      errors.put(fileName, errorList);
+    }
+    errorList.add(errorMessage);
+    if (org.openecomp.sdc.datatypes.error.ErrorLevel.ERROR.equals(errorMessage.getLevel())) {
+      status = UploadFileStatus.Failure;
+    }
+  }
+
+  /**
+   * Add structure errors.
+   *
+   * @param errorsByFileName the errors by file name
+   */
+  public void addStructureErrors(
+      Map<String, List<org.openecomp.sdc.datatypes.error.ErrorMessage>> errorsByFileName) {
+    if (errorsByFileName == null) {
+      return;
+    }
+
+    errors.putAll(errorsByFileName);
+
+    if (status == UploadFileStatus.Failure) {
+      return;
+    }
+    for (Map.Entry<String, List<org.openecomp.sdc.datatypes.error.ErrorMessage>> entry
+        : errorsByFileName.entrySet()) {
+      for (org.openecomp.sdc.datatypes.error.ErrorMessage errorMessage : entry.getValue()) {
+        if (errorMessage.getLevel() == org.openecomp.sdc.datatypes.error.ErrorLevel.ERROR) {
+          status = UploadFileStatus.Failure;
+          return;
+        }
+      }
+    }
+  }
+
+  /**
+   * Gets errors.
+   *
+   * @return the errors
+   */
+  public Map<String, List<org.openecomp.sdc.datatypes.error.ErrorMessage>> getErrors() {
+    return errors;
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/UploadFileStatus.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/UploadFileStatus.java
new file mode 100644
index 0000000..2bd8d76
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/UploadFileStatus.java
@@ -0,0 +1,26 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types;
+
+public enum UploadFileStatus {
+  Success,
+  Failure
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/UploadFileStructure.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/UploadFileStructure.java
new file mode 100644
index 0000000..1e21c60
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/UploadFileStructure.java
@@ -0,0 +1,40 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types;
+
+import java.util.List;
+
+public class UploadFileStructure {
+
+  private List<String> fileNames;
+
+  public List<String> getFileNames() {
+    return fileNames;
+  }
+
+  public void setFileNames(List<String> fileNames) {
+    this.fileNames = fileNames;
+  }
+
+  public void addNewFileToList(String filename) {
+    this.fileNames.add(filename);
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/ValidationResponse.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/ValidationResponse.java
new file mode 100644
index 0000000..29e5f73
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/ValidationResponse.java
@@ -0,0 +1,157 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.datatypes.error.ErrorMessage;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * The type Validation response.
+ */
+public class ValidationResponse {
+  private boolean valid = true;
+  private Collection<ErrorCode> vspErrors;
+  private Collection<ErrorCode> licensingDataErrors;
+  private Map<String, List<ErrorMessage>> uploadDataErrors;
+  private Map<String, List<ErrorMessage>> compilationErrors;
+  private QuestionnaireValidationResult questionnaireValidationResult;
+
+  /**
+   * Is valid boolean.
+   *
+   * @return the boolean
+   */
+  public boolean isValid() {
+    return valid;
+  }
+
+  /**
+   * Gets vsp errors.
+   *
+   * @return the vsp errors
+   */
+  public Collection<ErrorCode> getVspErrors() {
+    return vspErrors;
+  }
+
+  /**
+   * Sets vsp errors.
+   *
+   * @param vspErrors the vsp errors
+   */
+  public void setVspErrors(Collection<ErrorCode> vspErrors) {
+    this.vspErrors = vspErrors;
+    if (CollectionUtils.isNotEmpty(vspErrors)) {
+      valid = false;
+    }
+  }
+
+  /**
+   * Gets licensing data errors.
+   *
+   * @return the licensing data errors
+   */
+  public Collection<ErrorCode> getLicensingDataErrors() {
+    return licensingDataErrors;
+  }
+
+  /**
+   * Sets licensing data errors.
+   *
+   * @param licensingDataErrors the licensing data errors
+   */
+  public void setLicensingDataErrors(Collection<ErrorCode> licensingDataErrors) {
+    this.licensingDataErrors = licensingDataErrors;
+    if (CollectionUtils.isNotEmpty(licensingDataErrors)) {
+      valid = false;
+    }
+  }
+
+  /**
+   * Gets upload data errors.
+   *
+   * @return the upload data errors
+   */
+  public Map<String, List<ErrorMessage>> getUploadDataErrors() {
+    return uploadDataErrors;
+  }
+
+  /**
+   * Sets upload data errors.
+   *
+   * @param uploadDataErrors the upload data errors
+   */
+  public void setUploadDataErrors(Map<String, List<ErrorMessage>> uploadDataErrors) {
+    this.uploadDataErrors = uploadDataErrors;
+    if (MapUtils.isNotEmpty(uploadDataErrors)) {
+      valid = false;
+    }
+  }
+
+  /**
+   * Gets compilation errors.
+   *
+   * @return the compilation errors
+   */
+  public Map<String, List<ErrorMessage>> getCompilationErrors() {
+    return compilationErrors;
+  }
+
+  /**
+   * Sets compilation errors.
+   *
+   * @param compilationErrors the compilation errors
+   */
+  public void setCompilationErrors(Map<String, List<ErrorMessage>> compilationErrors) {
+    this.compilationErrors = compilationErrors;
+    if (MapUtils.isNotEmpty(compilationErrors)) {
+      valid = false;
+    }
+  }
+
+  /**
+   * Gets questionnaire validation result.
+   *
+   * @return the questionnaire validation result
+   */
+  public QuestionnaireValidationResult getQuestionnaireValidationResult() {
+    return questionnaireValidationResult;
+  }
+
+  /**
+   * Sets questionnaire validation result.
+   *
+   * @param questionnaireValidationResult the questionnaire validation result
+   */
+  public void setQuestionnaireValidationResult(
+      QuestionnaireValidationResult questionnaireValidationResult) {
+    this.questionnaireValidationResult = questionnaireValidationResult;
+    if (questionnaireValidationResult != null && !questionnaireValidationResult.isValid()) {
+      valid = false;
+    }
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/VersionedVendorSoftwareProductInfo.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/VersionedVendorSoftwareProductInfo.java
new file mode 100644
index 0000000..cbc81da
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/VersionedVendorSoftwareProductInfo.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types;
+
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+
+public class VersionedVendorSoftwareProductInfo {
+  private VspDetails vspDetails;
+  private org.openecomp.sdc.versioning.types.VersionInfo versionInfo;
+
+  public VersionedVendorSoftwareProductInfo() {
+  }
+
+  public VersionedVendorSoftwareProductInfo(VspDetails vspDetails,
+                                   org.openecomp.sdc.versioning.types.VersionInfo versionInfo) {
+    this.vspDetails = vspDetails;
+    this.versionInfo = versionInfo;
+  }
+
+  public VspDetails getVspDetails() {
+    return vspDetails;
+  }
+
+  public void setVspDetails(VspDetails vspDetails) {
+    this.vspDetails = vspDetails;
+  }
+
+  public org.openecomp.sdc.versioning.types.VersionInfo getVersionInfo() {
+    return versionInfo;
+  }
+
+  public void setVersionInfo(org.openecomp.sdc.versioning.types.VersionInfo versionInfo) {
+    this.versionInfo = versionInfo;
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/ComponentCompositionSchemaInput.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/ComponentCompositionSchemaInput.java
new file mode 100644
index 0000000..7fb5ec8
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/ComponentCompositionSchemaInput.java
@@ -0,0 +1,43 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator;
+
+public class ComponentCompositionSchemaInput implements SchemaTemplateInput {
+  private boolean manual;
+  private org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData component;
+
+  public boolean isManual() {
+    return manual;
+  }
+
+  public void setManual(boolean manual) {
+    this.manual = manual;
+  }
+
+  public org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData getComponent() {
+    return component;
+  }
+
+  public void setComponent(
+      org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData component) {
+    this.component = component;
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/ComponentQuestionnaireSchemaInput.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/ComponentQuestionnaireSchemaInput.java
new file mode 100644
index 0000000..1f92e6d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/ComponentQuestionnaireSchemaInput.java
@@ -0,0 +1,42 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator;
+
+import java.util.List;
+import java.util.Map;
+
+public class ComponentQuestionnaireSchemaInput implements SchemaTemplateInput {
+  private List<String> nicNames;
+  private Map componentQuestionnaireData;
+
+  public ComponentQuestionnaireSchemaInput(List<String> nicNames, Map componentQuestionnaireData) {
+    this.nicNames = nicNames;
+    this.componentQuestionnaireData = componentQuestionnaireData;
+  }
+
+  public List<String> getNicNames() {
+    return nicNames;
+  }
+
+  public Map getComponentQuestionnaireData() {
+    return componentQuestionnaireData;
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/MibUploadStatus.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/MibUploadStatus.java
new file mode 100644
index 0000000..046d530
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/MibUploadStatus.java
@@ -0,0 +1,51 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator;
+
+public class MibUploadStatus {
+  private String snmpTrap;
+  private String snmpPoll;
+
+
+  public MibUploadStatus(String snmpTrap, String snmpPoll) {
+    this.snmpTrap = snmpTrap;
+    this.snmpPoll = snmpPoll;
+  }
+
+  public MibUploadStatus() {
+  }
+
+  public String getSnmpTrap() {
+    return snmpTrap;
+  }
+
+  public void setSnmpTrap(String snmpTrap) {
+    this.snmpTrap = snmpTrap;
+  }
+
+  public String getSnmpPoll() {
+    return snmpPoll;
+  }
+
+  public void setSnmpPoll(String snmpPoll) {
+    this.snmpPoll = snmpPoll;
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/NetworkCompositionSchemaInput.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/NetworkCompositionSchemaInput.java
new file mode 100644
index 0000000..456b440
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/NetworkCompositionSchemaInput.java
@@ -0,0 +1,43 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator;
+
+public class NetworkCompositionSchemaInput implements SchemaTemplateInput {
+  private boolean manual;
+  private org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network network;
+
+  public boolean isManual() {
+    return manual;
+  }
+
+  public void setManual(boolean manual) {
+    this.manual = manual;
+  }
+
+  public org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network getNetwork() {
+    return network;
+  }
+
+  public void setNetwork(org.openecomp.sdc.vendorsoftwareproduct.types.composition
+                             .Network network) {
+    this.network = network;
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/NicCompositionSchemaInput.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/NicCompositionSchemaInput.java
new file mode 100644
index 0000000..87693a4
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/NicCompositionSchemaInput.java
@@ -0,0 +1,55 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator;
+
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
+
+import java.util.Collection;
+
+public class NicCompositionSchemaInput implements SchemaTemplateInput {
+  private boolean manual;
+  private Nic nic;
+  private Collection<String> networkIds;
+
+  public boolean isManual() {
+    return manual;
+  }
+
+  public void setManual(boolean manual) {
+    this.manual = manual;
+  }
+
+  public Nic getNic() {
+    return nic;
+  }
+
+  public void setNic(Nic nic) {
+    this.nic = nic;
+  }
+
+  public Collection<String> getNetworkIds() {
+    return networkIds;
+  }
+
+  public void setNetworkIds(Collection<String> networkIds) {
+    this.networkIds = networkIds;
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/SchemaTemplateContext.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/SchemaTemplateContext.java
new file mode 100644
index 0000000..3ee3e4a
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/SchemaTemplateContext.java
@@ -0,0 +1,26 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator;
+
+public enum SchemaTemplateContext {
+  composition,
+  questionnaire
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/SchemaTemplateInput.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/SchemaTemplateInput.java
new file mode 100644
index 0000000..93e614f
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/SchemaTemplateInput.java
@@ -0,0 +1,25 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator;
+
+public interface SchemaTemplateInput {
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/util/CompilationUtil.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/util/CompilationUtil.java
new file mode 100644
index 0000000..54038bc
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/util/CompilationUtil.java
@@ -0,0 +1,126 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.util;
+
+import org.openecomp.core.enrichment.types.ComponentArtifactType;
+import org.openecomp.core.enrichment.types.ComponentCeilometerInfo;
+import org.openecomp.core.enrichment.types.ComponentMibInfo;
+import org.openecomp.core.enrichment.types.MibInfo;
+import org.openecomp.core.utilities.applicationconfig.ApplicationConfig;
+import org.openecomp.core.utilities.applicationconfig.ApplicationConfigFactory;
+import org.openecomp.core.utilities.json.JsonUtil;
+import org.openecomp.sdc.datatypes.error.ErrorMessage;
+import org.openecomp.sdc.enrichment.impl.tosca.ComponentInfo;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentArtifactDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentArtifactDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentArtifactEntity;
+import org.openecomp.sdc.versioning.dao.types.Version;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * The type Compilation util.
+ */
+public class CompilationUtil {
+
+  private static final ApplicationConfig applicationConfig =
+      ApplicationConfigFactory.getInstance().createInterface();
+  private static final ComponentArtifactDao componentArtifactDao =
+      ComponentArtifactDaoFactory.getInstance().createInterface();
+
+  /**
+   * Add monitoring info.
+   *
+   * @param componentInfo the component info
+   * @param compileErrors the compile errors
+   */
+  public static void addMonitoringInfo(ComponentInfo componentInfo,
+                                       Map<String, List<ErrorMessage>> compileErrors) {
+
+    String ceilometerJson =
+        applicationConfig.getConfigurationData("vsp.monitoring", "component.ceilometer").getValue();
+    ComponentCeilometerInfo ceilometerInfo =
+        JsonUtil.json2Object(ceilometerJson, ComponentCeilometerInfo.class);
+    componentInfo.setCeilometerInfo(ceilometerInfo);
+  }
+
+  /**
+   * Add mib info.
+   *
+   * @param vspId           the vsp id
+   * @param version         the version
+   * @param componentEntity the component entity
+   * @param componentInfo   the component info
+   * @param compileErrors   the compile errors
+   */
+  public static void addMibInfo(String vspId, Version version, org.openecomp.sdc
+      .vendorsoftwareproduct.dao.type.ComponentEntity componentEntity,
+      ComponentInfo componentInfo,
+      Map<String, List<ErrorMessage>> compileErrors) {
+
+    String componentId = componentEntity.getId();
+
+    ComponentArtifactEntity entity = new ComponentArtifactEntity();
+    entity.setVspId(vspId);
+    entity.setVersion(version);
+    entity.setComponentId(componentId);
+
+    ComponentMibInfo componentMibInfo = new ComponentMibInfo();
+
+    extractAndInsertMibContentToComponentInfo(componentId, ComponentArtifactType.SNMP_POLL, entity,
+        componentMibInfo, compileErrors);
+    extractAndInsertMibContentToComponentInfo(componentId, ComponentArtifactType.SNMP_TRAP, entity,
+        componentMibInfo, compileErrors);
+    componentInfo.setMibInfo(componentMibInfo);
+  }
+
+  private static void extractAndInsertMibContentToComponentInfo(String componentId,
+                                         ComponentArtifactType type,
+                                         ComponentArtifactEntity componentArtifactEntity,
+                                         ComponentMibInfo componentMibInfo,
+                                         Map<String, List<ErrorMessage>> compileErrors) {
+    String path;
+    componentArtifactEntity.setType(type);
+    ComponentArtifactEntity artifact =
+        componentArtifactDao.getArtifactByType(componentArtifactEntity);
+
+    if (artifact == null) {
+      return;
+    }
+    path = componentId + File.separator + type.name();
+    MibInfo mibInfo = new MibInfo();
+    mibInfo.setName(path);
+    mibInfo.setContent(artifact.getArtifact().array());
+    switch (type) {
+      case SNMP_POLL:
+        componentMibInfo.setSnmpPoll(mibInfo);
+        break;
+      case SNMP_TRAP:
+        componentMibInfo.setSnmpTrap(mibInfo);
+        break;
+      default:
+    }
+
+
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/util/VendorSoftwareProductUtils.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/util/VendorSoftwareProductUtils.java
new file mode 100644
index 0000000..62e8dd8
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/util/VendorSoftwareProductUtils.java
@@ -0,0 +1,254 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.openecomp.sdc.vendorsoftwareproduct.util;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.openecomp.core.enrichment.types.ComponentArtifactType;
+import org.openecomp.core.translator.api.HeatToToscaTranslator;
+import org.openecomp.core.translator.datatypes.TranslatorOutput;
+import org.openecomp.core.translator.factory.HeatToToscaTranslatorFactory;
+import org.openecomp.core.utilities.file.FileContentHandler;
+import org.openecomp.core.utilities.file.FileUtils;
+import org.openecomp.core.validation.errors.Messages;
+import org.openecomp.core.validation.types.MessageContainerUtil;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.common.utils.AsdcCommon;
+import org.openecomp.sdc.datatypes.error.ErrorMessage;
+import org.openecomp.sdc.heat.datatypes.structure.HeatStructureTree;
+import org.openecomp.sdc.heat.datatypes.structure.ValidationStructureList;
+import org.openecomp.sdc.heat.services.tree.HeatTreeManager;
+import org.openecomp.sdc.heat.services.tree.HeatTreeManagerUtil;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentArtifactEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.types.UploadFileResponse;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+/**
+ * The type Vendor software product utils.
+ */
+public class VendorSoftwareProductUtils {
+
+  private static org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDao
+      vendorSoftwareProductDao =
+      VendorSoftwareProductDaoFactory.getInstance().createInterface();
+
+  /**
+   * Load upload file content file content handler.
+   *
+   * @param uploadedFileData the uploaded file data
+   * @return the file content handler
+   * @throws IOException the io exception
+   */
+  public static FileContentHandler loadUploadFileContent(byte[] uploadedFileData)
+      throws IOException {
+    return getFileContentMapFromZip(uploadedFileData);
+  }
+
+  private static FileContentHandler getFileContentMapFromZip(byte[] uploadFileData)
+      throws IOException, CoreException {
+    ZipEntry zipEntry;
+    List<String> folderList = new ArrayList<>();
+    FileContentHandler mapFileContent = new FileContentHandler();
+    try {
+      ZipInputStream inputZipStream;
+
+      byte[] fileByteContent;
+      String currentEntryName;
+      inputZipStream = new ZipInputStream(new ByteArrayInputStream(uploadFileData));
+
+      while ((zipEntry = inputZipStream.getNextEntry()) != null) {
+        currentEntryName = zipEntry.getName();
+        // else, get the file content (as byte array) and save it in a map.
+        fileByteContent = FileUtils.toByteArray(inputZipStream);
+
+        int index = lastIndexFileSeparatorIndex(currentEntryName);
+        String currSubstringWithoutSeparator =
+            currentEntryName.substring(index + 1, currentEntryName.length());
+        if (index != -1) { //todo ?
+          folderList.add(currentEntryName);
+        } else {
+          mapFileContent.addFile(currentEntryName, fileByteContent);
+        }
+
+      }
+
+    } catch (RuntimeException e0) {
+      throw new IOException(e0);
+    }
+
+    if (CollectionUtils.isNotEmpty(folderList)) {
+      throw new CoreException((new ErrorCode.ErrorCodeBuilder())
+          .withMessage(Messages.ZIP_SHOULD_NOT_CONTAIN_FOLDERS.getErrorMessage())
+          .withId(Messages.ZIP_SHOULD_NOT_CONTAIN_FOLDERS.getErrorMessage())
+          .withCategory(ErrorCategory.APPLICATION).build());
+    }
+
+    return mapFileContent;
+  }
+
+  /**
+   * Load and translate template data translator output.
+   *
+   * @param fileNameContentMap the file name content map
+   * @return the translator output
+   */
+  public static TranslatorOutput loadAndTranslateTemplateData(
+      FileContentHandler fileNameContentMap) {
+    HeatToToscaTranslator heatToToscaTranslator =
+        HeatToToscaTranslatorFactory.getInstance().createInterface();
+    InputStream fileContent = fileNameContentMap.getFileContent(AsdcCommon.MANIFEST_NAME);
+
+    heatToToscaTranslator.addManifest(AsdcCommon.MANIFEST_NAME, FileUtils.toByteArray(fileContent));
+
+    fileNameContentMap.getFileList().stream()
+        .filter(fileName -> !(fileName.equals(AsdcCommon.MANIFEST_NAME))).forEach(
+          fileName -> heatToToscaTranslator
+        .addFile(fileName, FileUtils.toByteArray(fileNameContentMap.getFileContent(fileName))));
+
+    Map<String, List<ErrorMessage>> errors = heatToToscaTranslator.validate();
+    if (MapUtils.isNotEmpty(MessageContainerUtil.getMessageByLevel(
+        org.openecomp.sdc.datatypes.error.ErrorLevel.ERROR, errors))) {
+      TranslatorOutput translatorOutput = new TranslatorOutput();
+      translatorOutput.setErrorMessages(errors);
+      return translatorOutput;
+    }
+
+    InputStream structureFile = getHeatStructureTreeFile(fileNameContentMap);
+    heatToToscaTranslator.addExternalArtifacts(AsdcCommon.HEAT_META, structureFile);
+    return heatToToscaTranslator.translate();
+  }
+
+  private static InputStream getHeatStructureTreeFile(FileContentHandler fileNameContentMap) {
+    HeatTreeManager heatTreeManager = HeatTreeManagerUtil.initHeatTreeManager(fileNameContentMap);
+    heatTreeManager.createTree();
+    HeatStructureTree tree = heatTreeManager.getTree();
+    ValidationStructureList validationStructureList = new ValidationStructureList(tree);
+    return FileUtils.convertToInputStream(validationStructureList, FileUtils.FileExtension.JSON);
+  }
+
+
+  private static int lastIndexFileSeparatorIndex(String filePath) {
+    int length = filePath.length() - 1;
+
+    for (int i = length; i >= 0; i--) {
+      char currChar = filePath.charAt(i);
+      if (currChar == '/' || currChar == File.separatorChar || currChar == File.pathSeparatorChar) {
+        return i;
+      }
+    }
+    // if we've reached to the start of the string and didn't find file separator - return -1
+    return -1;
+  }
+
+  /**
+   * Add file names to upload file response.
+   *
+   * @param fileContentMap     the file content map
+   * @param uploadFileResponse the upload file response
+   */
+  public static void addFileNamesToUploadFileResponse(FileContentHandler fileContentMap,
+                                                      UploadFileResponse uploadFileResponse) {
+    uploadFileResponse.setFileNames(new ArrayList<>());
+    for (String filename : fileContentMap.getFileList()) {
+      if (!new File(filename).isDirectory()) {
+        uploadFileResponse.addNewFileToList(filename);
+      }
+    }
+    uploadFileResponse.removeFileFromList(AsdcCommon.MANIFEST_NAME);
+  }
+
+  /**
+   * Validate raw zip data.
+   *
+   * @param uploadedFileData the uploaded file data
+   * @param errors           the errors
+   */
+  public static void validateRawZipData(byte[] uploadedFileData,
+                                        Map<String, List<ErrorMessage>> errors) {
+    if (uploadedFileData.length == 0) {
+      ErrorMessage.ErrorMessageUtil.addMessage(AsdcCommon.UPLOAD_FILE, errors).add(
+          new ErrorMessage(org.openecomp.sdc.datatypes.error.ErrorLevel.ERROR,
+              Messages.NO_ZIP_FILE_WAS_UPLOADED_OR_ZIP_NOT_EXIST.getErrorMessage()));
+    }
+  }
+
+  /**
+   * Validate content zip data.
+   *
+   * @param contentMap the content map
+   * @param errors     the errors
+   */
+  public static void validateContentZipData(FileContentHandler contentMap,
+                                            Map<String, List<ErrorMessage>> errors) {
+    if (contentMap == null) {
+      ErrorMessage.ErrorMessageUtil.addMessage(AsdcCommon.UPLOAD_FILE, errors).add(
+          new ErrorMessage(org.openecomp.sdc.datatypes.error.ErrorLevel.ERROR,
+              Messages.ZIP_SHOULD_NOT_CONTAIN_FOLDERS.getErrorMessage()));
+
+    } else if (contentMap.getFileList().size() == 0) {
+      ErrorMessage.ErrorMessageUtil.addMessage(AsdcCommon.UPLOAD_FILE, errors)
+          .add(new ErrorMessage(org.openecomp.sdc.datatypes.error.ErrorLevel.ERROR,
+              Messages.INVALID_ZIP_FILE.getErrorMessage()));
+    }
+  }
+
+
+  /**
+   * Filter non trap or poll artifacts map.
+   *
+   * @param artifacts the artifacts
+   * @return the map
+   */
+  public static Map<ComponentArtifactType, String> filterNonTrapOrPollArtifacts(
+      Collection<ComponentArtifactEntity> artifacts) {
+    Map<ComponentArtifactType, String> artifactTypeToFilename = new HashMap<>();
+
+    for (ComponentArtifactEntity entity : artifacts) {
+      if (isTrapOrPoll(entity.getType())) {
+        artifactTypeToFilename.put(entity.getType(), entity.getArtifactName());
+      }
+    }
+
+    return artifactTypeToFilename;
+  }
+
+
+  private static boolean isTrapOrPoll(ComponentArtifactType type) {
+    return type.equals(ComponentArtifactType.SNMP_POLL)
+        || type.equals(ComponentArtifactType.SNMP_TRAP);
+  }
+
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/ComponentProcessesTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/ComponentProcessesTest.java
new file mode 100644
index 0000000..cfc2e11
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/ComponentProcessesTest.java
@@ -0,0 +1,46 @@
+package org.openecomp.sdc.vendorsoftwareproduct;
+
+import org.testng.annotations.BeforeClass;
+
+public class ComponentProcessesTest extends ProcessesTest {
+
+  @BeforeClass
+  @Override
+  protected void init() {
+//    super.init();
+//
+//    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity
+//        comp11 = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity(vsp1Id, null, null);
+//    org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData
+//        compData11 = new org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData();
+//    compData11.setName("c11 name");
+//    compData11.setDescription("c11 desc");
+//    comp11.setComponentCompositionData(compData11);
+//
+////        component11Id = vendorSoftwareProductManager.createComponent(comp11, USER1).getId();
+//
+//    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity
+//        comp21 = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity(vsp2Id, null, null);
+//    org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData
+//        compData21 = new org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData();
+//    compData21.setName("c21 name");
+//    compData21.setDescription("c21 desc");
+//    comp21.setComponentCompositionData(compData21);
+
+//        component21Id = vendorSoftwareProductManager.createComponent(comp21, USER1).getId();
+  }
+
+  @Override
+  public void testCreateWithExistingNameUnderOtherComponent() {
+//    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity
+//        comp12 = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity(vsp1Id, null, null);
+//    org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData
+//        compData12 = new org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData();
+//    compData12.setName("c12 name");
+//    compData12.setDescription("c12 desc");
+//    comp12.setComponentCompositionData(compData12);
+//
+//        String component12Id = vendorSoftwareProductManager.createComponent(comp12, USER1).getId();
+//        testCreate(vsp1Id, component12Id);
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/ComponentsTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/ComponentsTest.java
new file mode 100644
index 0000000..ff33bcb
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/ComponentsTest.java
@@ -0,0 +1,329 @@
+package org.openecomp.sdc.vendorsoftwareproduct;
+
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes;
+import org.openecomp.sdc.vendorsoftwareproduct.impl.VendorSoftwareProductManagerImpl;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityValidationData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.errors.VersioningErrorCodes;
+import org.openecomp.core.utilities.CommonMethods;
+
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import java.util.Collection;
+
+public class ComponentsTest {
+
+  private static final String USER1 = "componentsTestUser1";
+  private static final String USER2 = "componentsTestUser2";
+  private static final Version VERSION01 = new Version(0, 1);
+  private static final VendorSoftwareProductManager vendorSoftwareProductManager =
+      new VendorSoftwareProductManagerImpl();
+  private static final org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDao
+      vendorSoftwareProductDao =
+      VendorSoftwareProductDaoFactory.getInstance().createInterface();
+
+  private static String vsp1Id;
+  private static String vsp2Id;
+  private static String comp1Id = "1";
+  private static String comp2Id = "2";
+
+  static org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity createComponent(String vspId, Version version, String compId) {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity
+        componentEntity = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity(vspId, version, compId);
+    ComponentData compData = new ComponentData();
+    compData.setName(compId + " name");
+    compData.setDisplayName(compId + " display name");
+    compData.setDescription(compId + " desc");
+    componentEntity.setComponentCompositionData(compData);
+    vendorSoftwareProductDao.createComponent(componentEntity);
+    return componentEntity;
+  }
+
+  @BeforeClass
+  private void init() {
+    VspDetails vsp1 = vendorSoftwareProductManager.createNewVsp(VSPCommon
+        .createVspDetails(null, null, "VSP_" + CommonMethods.nextUuId(), "Test-vsp1", "vendorName",
+            "vlm1Id", "icon", "category", "subCategory", "123", null), USER1);
+    vsp1Id = vsp1.getId();
+
+    VspDetails vsp2 = vendorSoftwareProductManager.createNewVsp(VSPCommon
+        .createVspDetails(null, null, "VSP_" + CommonMethods.nextUuId(), "Test-vsp2", "vendorName",
+            "vlm1Id", "icon", "category", "subCategory", "123", null), USER1);
+    vsp2Id = vsp2.getId();
+  }
+
+  @Test
+  public void testListWhenNone() {
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity> components =
+        vendorSoftwareProductManager.listComponents(vsp1Id, null, USER1);
+    Assert.assertEquals(components.size(), 0);
+  }
+
+  @Test
+  public void testCreateNonExistingVspId_negative() {
+    testCreate_negative(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity("non existing vsp id", null, null), USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test
+  public void testCreateOnLockedVsp_negative() {
+    testCreate_negative(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity(vsp1Id, null, null), USER2,
+        VersioningErrorCodes.EDIT_ON_ENTITY_LOCKED_BY_OTHER_USER);
+  }
+
+/*    @Test(dependsOnMethods = "testListWhenNone")
+    public void testCreate() {
+        comp1Id = testCreate(vsp1Id);
+    }
+
+    private String testCreate(String vspId) {
+        ComponentEntity expected = new ComponentEntity(vspId, null, null);
+        ComponentData compData = new ComponentData();
+        compData.setName("comp1 name");
+        compData.setDescription("comp1 desc");
+        expected.setComponentCompositionData(compData);
+
+        ComponentEntity created = vendorSoftwareProductManager.createComponent(expected, USER1);
+        Assert.assertNotNull(created);
+        expected.setId(created.getId());
+        expected.setVersion(VERSION01);
+
+        ComponentEntity actual = vendorSoftwareProductDao.getComponent(vspId, VERSION01, created.getId());
+
+        Assert.assertEquals(actual, expected);
+        return created.getId();
+    }*/
+
+/*    @Test(dependsOnMethods = {"testCreate"})
+    public void testCreateWithExistingName_negative() {
+        ComponentEntity component = new ComponentEntity(vsp1Id, null, null);
+        ComponentData compData = new ComponentData();
+        compData.setName("comp1 name");
+        compData.setDescription("comp1 desc");
+        component.setComponentCompositionData(compData);
+        testCreate_negative(component, USER1, UniqueValueUtil.UNIQUE_VALUE_VIOLATION);
+    }*/
+
+/*    @Test(dependsOnMethods = {"testCreate"})
+    public void testCreateWithExistingNameUnderOtherVsp() {
+        testCreate(vsp2Id);
+    }*/
+
+  @Test
+  public void testCreateOnUploadVsp_negative() {
+    testCreate_negative(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity(vsp1Id, null, null), USER1,
+        VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED);
+  }
+
+  @Test
+  public void testGetNonExistingComponentId_negative() {
+    testGet_negative(vsp1Id, null, "non existing component id", USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test
+  public void testGetNonExistingVspId_negative() {
+    testGet_negative("non existing vsp id", null, comp1Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test(dependsOnMethods = "testListWhenNone")//"testCreate")
+  public void testGet() {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity
+        expected = createComponent(vsp1Id, VERSION01, comp1Id);
+    testGet(vsp1Id, VERSION01, comp1Id, USER1, expected);
+  }
+
+  @Test
+  public void testUpdateNonExistingComponentId_negative() {
+    testUpdate_negative(vsp1Id, "non existing component id", USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test
+  public void testUpdateNonExistingVspId_negative() {
+    testUpdate_negative("non existing vsp id", comp1Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test(dependsOnMethods = {"testGet"})
+  public void testUpdateOnUploadVsp() {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity
+        expected = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity(vsp1Id, null, comp1Id);
+    ComponentData compData = new ComponentData();
+    compData.setName(comp1Id + " name");                // no change
+    compData.setDisplayName(comp1Id + " display name"); // no change
+    compData.setDescription(comp1Id + " desc updated"); // allowed change
+    expected.setComponentCompositionData(compData);
+
+    CompositionEntityValidationData validationData =
+        vendorSoftwareProductManager.updateComponent(expected, USER1);
+    Assert.assertTrue(validationData == null || validationData.getErrors() == null);
+    expected.setVersion(VERSION01);
+
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity actual = vendorSoftwareProductDao.getComponent(vsp1Id, VERSION01, comp1Id);
+    Assert.assertEquals(actual, expected);
+  }
+
+  @Test(dependsOnMethods = {"testUpdateOnUploadVsp"})
+  public void testIllegalUpdateOnUploadVsp() {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity
+        expected = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity(vsp1Id, null, comp1Id);
+    ComponentData compData = new ComponentData();
+    compData
+        .setName("comp1 name updated");         // not allowed: changed name + omitted display name
+    expected.setComponentCompositionData(compData);
+
+    CompositionEntityValidationData validationData =
+        vendorSoftwareProductManager.updateComponent(expected, USER1);
+    Assert.assertNotNull(validationData);
+    Assert.assertEquals(validationData.getErrors().size(), 2);
+  }
+
+  @Test
+  public void testListNonExistingVspId_negative() {
+    testList_negative("non existing vsp id", null, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+/*
+    @Test(dependsOnMethods = {"testUpdateOnUploadVsp", "testList"})
+    public void testCreateWithERemovedName() {
+        testCreate(vsp1Id);
+    }
+
+    @Test(dependsOnMethods = "testList")
+    public void testDeleteNonExistingComponentId_negative() {
+        testDelete_negative(vsp1Id, "non existing component id", USER1, VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+    }*/
+
+  @Test(dependsOnMethods = {"testGet"})
+  public void testList() {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity
+        createdP2 = createComponent(vsp1Id, VERSION01, comp2Id);
+
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity> actual =
+        vendorSoftwareProductManager.listComponents(vsp1Id, null, USER1);
+    Assert.assertEquals(actual.size(), 2);
+  }
+
+  @Test
+  public void testDeleteNonExistingVspId_negative() {
+    testDelete_negative("non existing vsp id", comp1Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+/*
+    @Test(dependsOnMethods = "testList")
+    public void testDelete() {
+        vendorSoftwareProductManager.deleteComponent(vsp1Id, comp1Id, USER1);
+        ComponentEntity actual = vendorSoftwareProductDao.getComponent(vsp1Id, VERSION01, comp1Id);
+        Assert.assertNull(actual);
+    }*/
+
+  @Test
+  public void testDeleteOnUploadVsp_negative() {
+    testDelete_negative(vsp1Id, comp1Id, USER1,
+        VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED);
+  }
+
+  @Test
+  public void testDeleteListNonExistingVspId_negative() {
+    testDeleteList_negative("non existing vsp id", USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+/*
+    @Test(dependsOnMethods = "testDelete")
+    public void testDeleteList() {
+        ComponentEntity comp3 = new ComponentEntity(vsp1Id, null, null);
+        comp3.setName("comp3 name");
+        comp3.setDescription("comp3 desc");
+        vendorSoftwareProductManager.createComponent(comp3, USER1);
+
+        vendorSoftwareProductManager.deleteComponents(vsp1Id, USER1);
+
+        Collection<ComponentEntity> actual = vendorSoftwareProductManager.listComponents(vsp1Id, null, USER1);
+        Assert.assertEquals(actual.size(), 0);
+    }*/
+
+  @Test
+  public void testDeleteListOnUploadVsp_negative() {
+    testDeleteList_negative(vsp1Id, USER1,
+        VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED);
+  }
+
+  private void testGet(String vspId, Version version, String componentId, String user,
+                       org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity expected) {
+    CompositionEntityResponse<ComponentData> response =
+        vendorSoftwareProductManager.getComponent(vspId, null, componentId, user);
+    Assert.assertEquals(response.getId(), expected.getId());
+    Assert.assertEquals(response.getData(), expected.getComponentCompositionData());
+    Assert.assertNotNull(response.getSchema());
+  }
+
+  private void testCreate_negative(
+      org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity component, String user,
+      String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.createComponent(component, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testGet_negative(String vspId, Version version, String componentId, String user,
+                                String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.getComponent(vspId, version, componentId, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testUpdate_negative(String vspId, String componentId, String user,
+                                   String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager
+          .updateComponent(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity(vspId, null, componentId), user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testList_negative(String vspId, Version version, String user,
+                                 String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.listComponents(vspId, version, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testDeleteList_negative(String vspId, String user, String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.deleteComponents(vspId, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testDelete_negative(String vspId, String componentId, String user,
+                                   String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.deleteComponent(vspId, componentId, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+}
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/ComponentsUploadTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/ComponentsUploadTest.java
new file mode 100644
index 0000000..0819d89
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/ComponentsUploadTest.java
@@ -0,0 +1,159 @@
+package org.openecomp.sdc.vendorsoftwareproduct;
+
+import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacade;
+import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacadeFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.impl.VendorSoftwareProductManagerImpl;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.MibUploadStatus;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.core.util.UniqueValueUtil;
+import org.openecomp.core.utilities.CommonMethods;
+
+import org.testng.Assert;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+public class ComponentsUploadTest {
+
+  private static final String USER1 = "vspTestUser1";
+
+  private static VendorSoftwareProductManager vendorSoftwareProductManager =
+      new VendorSoftwareProductManagerImpl();
+  private static VendorSoftwareProductDao vendorSoftwareProductDao =
+      VendorSoftwareProductDaoFactory.getInstance().createInterface();
+  private static VendorLicenseFacade vendorLicenseFacade =
+      VendorLicenseFacadeFactory.getInstance().createInterface();
+
+  private static String vspId = null;
+  private static Version activeVersion = null;
+  private static String trapFileName = "MMSC.zip";
+  private static String pollFileName = "MNS OAM FW.zip";
+  private static String notZipFileName = "notZipFile";
+  private static String zipWithFoldersFileName = "zipFileWithFolder.zip";
+  private static String emptyZipFileName = "emptyZip.zip";
+  private String vlm1Id;
+  private String componentId;
+
+  @BeforeTest
+  private void init() {
+    UniqueValueUtil
+        .deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+            "VSPTestMib");
+    vlm1Id = vendorLicenseFacade.createVendorLicenseModel(VSPCommon
+            .createVendorLicenseModel("vlmName " + CommonMethods.nextUuId(), "vlm1Id desc", "icon1"),
+        USER1).getId();
+    VspDetails vspDetails = vendorSoftwareProductManager.createNewVsp(VSPCommon
+        .createVspDetails(null, null, "VSPTestMib", "Test-vsp-mib", "vendorName", vlm1Id, "icon",
+            "category", "subCategory", "123", null), USER1);
+
+    vspId = vspDetails.getId();
+    activeVersion = vspDetails.getVersion();
+    componentId = createComponent(new ComponentEntity(vspId, activeVersion, null)).getId();
+  }
+
+
+  @Test
+  public void testUploadAndFilenamesList() {
+    InputStream zis1 = getFileInputStream("/validation/zips/various/MMSC.zip");
+    InputStream zis2 = getFileInputStream("/validation/zips/various/MNS OAM FW.zip");
+
+    vendorSoftwareProductManager
+        .uploadComponentMib(zis1, "MMSC.zip", vspId, componentId, true, USER1);
+    vendorSoftwareProductManager
+        .uploadComponentMib(zis2, "MNS OAM FW.zip", vspId, componentId, false, USER1);
+
+    MibUploadStatus mibUploadStatus =
+        vendorSoftwareProductManager.listMibFilenames(vspId, componentId, USER1);
+    Assert.assertEquals(mibUploadStatus.getSnmpTrap(), trapFileName);
+    Assert.assertEquals(mibUploadStatus.getSnmpPoll(), pollFileName);
+  }
+
+  @Test(dependsOnMethods = "testUploadAndFilenamesList")
+  public void testMibsExistentAfterCheckout() throws IOException {
+    activeVersion = vendorSoftwareProductManager.checkin(vspId, USER1);
+//        UniqueValueUtil.deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.COMPONENT_ARTIFACT_NAME, "MMSC.zip");
+//        UniqueValueUtil.deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.COMPONENT_ARTIFACT_NAME, "MNS OAM FW.zip");
+    activeVersion = vendorSoftwareProductManager.checkout(vspId, USER1);
+
+    MibUploadStatus mibUploadStatus =
+        vendorSoftwareProductManager.listMibFilenames(vspId, componentId, USER1);
+    Assert.assertNotNull(mibUploadStatus.getSnmpTrap());
+    Assert.assertNotNull(mibUploadStatus.getSnmpPoll());
+  }
+
+  @Test(dependsOnMethods = "testMibsExistentAfterCheckout")
+  public void testDeleteFile() {
+    vendorSoftwareProductManager.deleteComponentMib(vspId, componentId, true, USER1);
+    vendorSoftwareProductManager.deleteComponentMib(vspId, componentId, false, USER1);
+
+    MibUploadStatus mibUploadStatus =
+        vendorSoftwareProductManager.listMibFilenames(vspId, componentId, USER1);
+    Assert.assertNull(mibUploadStatus.getSnmpTrap());
+    Assert.assertNull(mibUploadStatus.getSnmpPoll());
+  }
+
+  @Test(dependsOnMethods = "testDeleteFile")
+  public void testUploadInvalidZip() {
+    URL url = this.getClass().getResource("/notZipFile");
+
+    try {
+      vendorSoftwareProductManager
+          .uploadComponentMib(url.openStream(), notZipFileName, vspId, componentId, true, USER1);
+      Assert.fail();
+    } catch (Exception e) {
+//            Assert.assertEquals(e.getMessage(), "MIB uploaded for vendor software product with Id " + vspId + " and version " + activeVersion + " is invalid: Invalid zip file");
+      Assert.assertEquals(e.getMessage(), "Invalid zip file");
+    }
+  }
+
+  @Test(dependsOnMethods = "testUploadInvalidZip")
+  public void testUploadZipWithFolders() {
+    InputStream zis = getFileInputStream("/vspmanager/zips/zipFileWithFolder.zip");
+
+    try {
+      vendorSoftwareProductManager
+          .uploadComponentMib(zis, zipWithFoldersFileName, vspId, componentId, true, USER1);
+      Assert.fail();
+    } catch (Exception e) {
+      Assert.assertEquals(e.getMessage(), "Zip file should not contain folders");
+    }
+  }
+
+  @Test(dependsOnMethods = "testUploadZipWithFolders")
+  public void testUploadEmptyZip() {
+    InputStream zis = getFileInputStream("/vspmanager/zips/emptyZip.zip");
+
+    try {
+      vendorSoftwareProductManager
+          .uploadComponentMib(zis, emptyZipFileName, vspId, componentId, true, USER1);
+      Assert.fail();
+    } catch (Exception e) {
+      Assert.assertEquals(e.getMessage(), "Invalid zip file");
+    }
+  }
+
+
+  private InputStream getFileInputStream(String fileName) {
+    URL url = this.getClass().getResource(fileName);
+    try {
+      return url.openStream();
+    } catch (IOException e) {
+      e.printStackTrace();
+      return null;
+    }
+  }
+
+
+  private ComponentEntity createComponent(ComponentEntity component) {
+    component.setId(CommonMethods.nextUuId());
+    vendorSoftwareProductDao.createComponent(component);
+    return component;
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/NetworksTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/NetworksTest.java
new file mode 100644
index 0000000..2921f19
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/NetworksTest.java
@@ -0,0 +1,292 @@
+package org.openecomp.sdc.vendorsoftwareproduct;
+
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes;
+import org.openecomp.sdc.vendorsoftwareproduct.impl.VendorSoftwareProductManagerImpl;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityValidationData;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.errors.VersioningErrorCodes;
+import org.openecomp.core.utilities.CommonMethods;
+
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import java.util.Collection;
+
+public class NetworksTest {
+
+  private static final String USER1 = "networksTestUser1";
+  private static final String USER2 = "networksTestUser2";
+  private static final Version VERSION01 = new Version(0, 1);
+  private static final VendorSoftwareProductManager vendorSoftwareProductManager =
+      new VendorSoftwareProductManagerImpl();
+  private static final org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDao
+      vendorSoftwareProductDao =
+      VendorSoftwareProductDaoFactory.getInstance().createInterface();
+
+  private static String vsp1Id;
+  private static String vsp2Id;
+  private static String networkId = "1";
+
+  static org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity createNetwork(String vspId, Version version, String networkId) {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity
+        networkEntity = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity(vspId, version, networkId);
+    org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network
+        networkData = new org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network();
+    networkData.setName(networkId + " name");
+    networkData.setDhcp(true);
+    networkEntity.setNetworkCompositionData(networkData);
+    vendorSoftwareProductDao.createNetwork(networkEntity);
+    return networkEntity;
+  }
+
+  @BeforeClass
+  private void init() {
+    VspDetails vsp1 = vendorSoftwareProductManager.createNewVsp(VSPCommon
+        .createVspDetails(null, null, "VSP_" + CommonMethods.nextUuId(), "Test-vsp1", "vendorName",
+            "vlm1Id", "icon", "category", "subCategory", "123", null), USER1);
+    vsp1Id = vsp1.getId();
+
+    VspDetails vsp2 = vendorSoftwareProductManager.createNewVsp(VSPCommon
+        .createVspDetails(null, null, "VSP_" + CommonMethods.nextUuId(), "Test-vsp2", "vendorName",
+            "vlm1Id", "icon", "category", "subCategory", "123", null), USER1);
+    vsp2Id = vsp2.getId();
+  }
+
+  @Test
+  public void testListWhenNone() {
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity> networks =
+        vendorSoftwareProductManager.listNetworks(vsp1Id, null, USER1);
+    Assert.assertEquals(networks.size(), 0);
+  }
+
+  @Test
+  public void testCreateNonExistingVspId_negative() {
+    testCreate_negative(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity("non existing vsp id", null, null), USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test
+  public void testCreateOnLockedVsp_negative() {
+    testCreate_negative(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity(vsp1Id, null, null), USER2,
+        VersioningErrorCodes.EDIT_ON_ENTITY_LOCKED_BY_OTHER_USER);
+  }
+
+/*    @Test(dependsOnMethods = "testListWhenNone")
+    public void testCreate() {
+        networkId = testCreate(vsp1Id);
+    }
+
+    private String testCreate(String vspId) {
+        NetworkEntity expected = new NetworkEntity(vspId, null, null);
+        Network networkData = new Network();
+        networkData.setName("network1 name");
+        networkData.setDhcp(true);
+        expected.setNetworkCompositionData(networkData);
+
+
+        NetworkEntity created = vendorSoftwareProductManager.createNetwork(expected, USER1);
+        Assert.assertNotNull(created);
+        expected.setId(created.getId());
+        expected.setVersion(VERSION01);
+
+        NetworkEntity actual = vendorSoftwareProductDao.getNetwork(vspId, VERSION01, created.getId());
+
+        Assert.assertEquals(actual, expected);
+        return created.getId();
+    }
+
+    @Test(dependsOnMethods = {"testCreate"})
+    public void testCreateWithExistingName_negative() {
+        NetworkEntity network = new NetworkEntity(vsp1Id, null, null);
+        Network networkData = new Network();
+        networkData.setName("network1 name");
+        networkData.setDhcp(true);
+        network.setNetworkCompositionData(networkData);
+        testCreate_negative(network, USER1, UniqueValueUtil.UNIQUE_VALUE_VIOLATION);
+    }*/
+
+  @Test
+  public void testCreateOnUploadVsp_negative() {
+    testCreate_negative(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity(vsp1Id, null, null), USER1,
+        VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED);
+  }
+
+  /*    @Test(dependsOnMethods = {"testCreate"})
+      public void testCreateWithExistingNameUnderOtherVsp() {
+          testCreate(vsp2Id);
+      }
+  */
+  @Test(dependsOnMethods = "testListWhenNone")//"testCreate")
+  public void testGetNonExistingNetworkId_negative() {
+    testGet_negative(vsp1Id, null, "non existing network id", USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testListWhenNone")//"testCreate")
+  public void testGetNonExistingVspId_negative() {
+    testGet_negative("non existing vsp id", null, networkId, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test(dependsOnMethods = "testListWhenNone")//"testCreate")
+  public void testGet() {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity
+        expected = createNetwork(vsp1Id, VERSION01, networkId);
+    testGet(vsp1Id, VERSION01, networkId, USER1, expected);
+  }
+
+  @Test(dependsOnMethods = "testListWhenNone")//"testCreate")
+  public void testUpdateNonExistingNetworkId_negative() {
+    testUpdate_negative(vsp1Id, "non existing network id", USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testListWhenNone")//"testCreate")
+  public void testUpdateNonExistingVspId_negative() {
+    testUpdate_negative("non existing vsp id", networkId, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test(dependsOnMethods = {"testGet"})
+  public void testIllegalUpdateOnUploadVsp() {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity
+        expected = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity(vsp1Id, null, networkId);
+    org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network
+        networkData = new org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network();
+    networkData.setName(networkId + " name updated");
+    networkData.setDhcp(false);
+    expected.setNetworkCompositionData(networkData);
+
+    CompositionEntityValidationData validationData =
+        vendorSoftwareProductManager.updateNetwork(expected, USER1);
+    Assert.assertNotNull(validationData);
+    Assert.assertTrue(validationData.getErrors().size() > 0);
+  }
+
+  @Test(dependsOnMethods = {"testGet"})
+  public void testListNonExistingVspId_negative() {
+    testList_negative("non existing vsp id", null, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+    /*
+           @Test(dependsOnMethods = {"testUpdateOnUploadVsp", "testList"})
+           public void testCreateWithERemovedName() {
+               testCreate(vsp1Id);
+           }
+
+    @Test(dependsOnMethods = "testList")
+    public void testDeleteNonExistingNetworkId_negative() {
+        testDelete_negative(vsp1Id, "non existing network id", USER1, VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+    }*/
+
+  @Test(dependsOnMethods = {"testGet"})
+  public void testList() {
+    createNetwork(vsp1Id, VERSION01, "2");
+
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity> actual =
+        vendorSoftwareProductManager.listNetworks(vsp1Id, null, USER1);
+    Assert.assertEquals(actual.size(), 2);
+  }
+
+  @Test(dependsOnMethods = "testList")
+  public void testDeleteNonExistingVspId_negative() {
+    testDelete_negative("non existing vsp id", networkId, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+/*
+           @Test(dependsOnMethods = "testList")
+           public void testDelete() {
+               vendorSoftwareProductManager.deleteNetwork(vsp1Id, networkId, USER1);
+               NetworkEntity actual = vendorSoftwareProductDao.getNetwork(vsp1Id, VERSION01, networkId);
+               Assert.assertNull(actual);
+           }
+
+           @Test
+           public void testDeleteListNonExistingVspId_negative() {
+               testDeleteList_negative("non existing vsp id", USER1, VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+           }
+
+           @Test(dependsOnMethods = "testDelete")
+           public void testDeleteList() {
+               NetworkEntity network3 = new NetworkEntity(vsp1Id, null, null);
+               network3.setName("network3 name");
+               network3.setDescription("network3 desc");
+               vendorSoftwareProductManager.createNetwork(network3, USER1);
+
+               vendorSoftwareProductManager.deleteNetworks(vsp1Id, USER1);
+
+               Collection<NetworkEntity> actual = vendorSoftwareProductManager.listNetworks(vsp1Id, null, USER1);
+               Assert.assertEquals(actual.size(), 0);
+           }*/
+
+  @Test(dependsOnMethods = "testList")
+  public void testDeleteOnUploadVsp_negative() {
+    testDelete_negative(vsp1Id, networkId, USER1,
+        VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED);
+  }
+
+  private void testGet(String vspId, Version version, String networkId, String user,
+                       org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity expected) {
+    CompositionEntityResponse<org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network> response =
+        vendorSoftwareProductManager.getNetwork(vspId, null, networkId, user);
+    Assert.assertEquals(response.getId(), expected.getId());
+    Assert.assertEquals(response.getData(), expected.getNetworkCompositionData());
+    Assert.assertNotNull(response.getSchema());
+  }
+
+  private void testCreate_negative(
+      org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity network, String user, String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.createNetwork(network, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testGet_negative(String vspId, Version version, String networkId, String user,
+                                String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.getNetwork(vspId, version, networkId, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testUpdate_negative(String vspId, String networkId, String user,
+                                   String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.updateNetwork(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity(vspId, null, networkId), user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testList_negative(String vspId, Version version, String user,
+                                 String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.listNetworks(vspId, version, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testDelete_negative(String vspId, String networkId, String user,
+                                   String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.deleteNetwork(vspId, networkId, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/NicsTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/NicsTest.java
new file mode 100644
index 0000000..10ea7f7
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/NicsTest.java
@@ -0,0 +1,346 @@
+package org.openecomp.sdc.vendorsoftwareproduct;
+
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes;
+import org.openecomp.sdc.vendorsoftwareproduct.impl.VendorSoftwareProductManagerImpl;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityValidationData;
+import org.openecomp.core.utilities.CommonMethods;
+
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import java.util.Collection;
+
+public class NicsTest {
+
+  private static final String USER1 = "nicsTestUser1";
+  private static final String USER2 = "nicsTestUser2";
+  private static final org.openecomp.sdc.versioning.dao.types.Version
+      VERSION01 = new org.openecomp.sdc.versioning.dao.types.Version(0, 1);
+  private static final VendorSoftwareProductManager vendorSoftwareProductManager =
+      new VendorSoftwareProductManagerImpl();
+  private static final org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDao
+      vendorSoftwareProductDao =
+      org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDaoFactory.getInstance().createInterface();
+
+  private static String vsp1Id;
+  private static String vsp2Id;
+  private static org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity network1;
+  private static org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity network2;
+  private static String component11Id;
+  private static String component21Id;
+  private static String nic1Id = "nic1";
+
+  static org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity createNic(String vspId, org.openecomp.sdc.versioning.dao.types.Version version, String compId, String nicId,
+                                                                              String networkId) {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity
+        nicEntity = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity(vspId, version, compId, nicId);
+    org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic
+        nicData = new org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic();
+    nicData.setName(nicId + " name");
+    nicData.setDescription(nicId + " desc");
+    nicData.setNetworkId(networkId);
+    nicEntity.setNicCompositionData(nicData);
+    vendorSoftwareProductDao.createNic(nicEntity);
+    return nicEntity;
+  }
+
+  @BeforeClass
+  private void init() {
+    vsp1Id = vendorSoftwareProductManager.createNewVsp(VSPCommon
+        .createVspDetails(null, null, "VSP_" + CommonMethods.nextUuId(), "Test-vsp1", "vendorName1",
+            "vlm1Id", "icon", "category", "subCategory", "123", null), USER1).getId();
+    network1 = NetworksTest.createNetwork(vsp1Id, VERSION01, "network1");
+    component11Id = ComponentsTest.createComponent(vsp1Id, VERSION01, "component11").getId();
+
+    vsp2Id = vendorSoftwareProductManager.createNewVsp(VSPCommon
+        .createVspDetails(null, null, "VSP_" + CommonMethods.nextUuId(), "Test-vsp2", "vendorName1",
+            "vlm1Id", "icon", "category", "subCategory", "123", null), USER1).getId();
+    network2 = NetworksTest.createNetwork(vsp2Id, VERSION01, "network2");
+    component21Id = ComponentsTest.createComponent(vsp2Id, VERSION01, "component21").getId();
+  }
+
+/*    @Test
+    public void testCreateNonExistingComponentId_negative() {
+        testCreate_negative(new NicEntity(vsp1Id, null, "non existing component id", null), USER1, VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+    }*/
+
+  @Test
+  public void testListWhenNone() {
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity> nics =
+        vendorSoftwareProductManager.listNics(vsp1Id, null, component11Id, USER1);
+    Assert.assertEquals(nics.size(), 0);
+  }
+
+  @Test
+  public void testCreateNonExistingVspId_negative() {
+    testCreate_negative(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity("non existing vsp id", null, component11Id, null), USER1,
+        org.openecomp.sdc.versioning.errors.VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test
+  public void testCreateOnLockedVsp_negative() {
+    testCreate_negative(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity(vsp1Id, null, component11Id, null), USER2,
+        org.openecomp.sdc.versioning.errors.VersioningErrorCodes.EDIT_ON_ENTITY_LOCKED_BY_OTHER_USER);
+  }
+
+//    @Test(dependsOnMethods = "testListWhenNone")
+//    public void testCreate() {
+//        nic1Id = testCreate(vsp1Id, component11Id, network1.getId(), network1.getNetworkCompositionData().getName());
+//    }
+
+/*    @Test(dependsOnMethods = {"testCreate"})
+    public void testCreateWithExistingName_negative() {
+        NicEntity nic = new NicEntity(vsp1Id, null, component11Id, null);
+        Nic nicData = new Nic();
+        nicData.setName("nic1 name");
+        nic.setNicCompositionData(nicData);
+        testCreate_negative(nic, USER1, UniqueValueUtil.UNIQUE_VALUE_VIOLATION);
+    }*/
+
+//    @Test(dependsOnMethods = {"testCreate"})
+//    public void testCreateWithExistingNameUnderOtherComponent() {
+//        ComponentEntity component12 = new ComponentEntity(vsp1Id, null, null);
+//        ComponentData compData12 = new ComponentData();
+//        compData12.setName("comp12 name");
+//        compData12.setDescription("comp12 desc");
+//        component12.setComponentCompositionData(compData12);
+//
+//        String component12Id = vendorSoftwareProductManager.createComponent(component12, USER1).getId();
+//        testCreate(vsp1Id, component12Id, network1.getId(), network1.getNetworkCompositionData().getName());
+//    }
+
+//    @Test(dependsOnMethods = {"testCreate"})
+//    public void testCreateWithExistingNameUnderOtherVsp() {
+//        testCreate(vsp2Id, component21Id, network2.getId(), network2.getNetworkCompositionData().getName());
+//    }
+
+  @Test
+  public void testCreateOnUploadVsp_negative() {
+    testCreate_negative(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity(vsp1Id, null, component11Id, null), USER1,
+        VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED);
+  }
+
+  @Test
+  public void testGetNonExistingNicId_negative() {
+    testGet_negative(vsp1Id, null, component11Id, "non existing nic id", USER1,
+        org.openecomp.sdc.versioning.errors.VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testListWhenNone")//"testCreate")
+  public void testGetNonExistingComponentId_negative() {
+    testGet_negative(vsp1Id, null, "non existing component id", nic1Id, USER1,
+        org.openecomp.sdc.versioning.errors.VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testListWhenNone")//"testCreate")
+  public void testGetNonExistingVspId_negative() {
+    testGet_negative("non existing vsp id", null, component11Id, nic1Id, USER1,
+        org.openecomp.sdc.versioning.errors.VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test(dependsOnMethods = "testListWhenNone")//"testCreate")
+  public void testGet() {
+    createNic(vsp1Id, VERSION01, component11Id, nic1Id, network1.getId());
+    testGet(vsp1Id, VERSION01, component11Id, nic1Id, USER1);
+  }
+
+  @Test
+  public void testUpdateNonExistingNicId_negative() {
+    testUpdate_negative(vsp1Id, component11Id, "non existing nic id", USER1,
+        org.openecomp.sdc.versioning.errors.VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testListWhenNone")//"testCreate")
+  public void testUpdateNonExistingComponentId_negative() {
+    testUpdate_negative(vsp1Id, "non existing component id", nic1Id, USER1,
+        org.openecomp.sdc.versioning.errors.VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testListWhenNone")//"testCreate")
+  public void testUpdateNonExistingVspId_negative() {
+    testUpdate_negative("non existing vsp id", component11Id, nic1Id, USER1,
+        org.openecomp.sdc.versioning.errors.VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test(dependsOnMethods = {"testGet"})
+  public void testUpdateOnUploadVsp() {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity
+        expected = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity(vsp1Id, null, component11Id, nic1Id);
+    org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic
+        nicData = new org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic();
+    nicData.setName(nic1Id + " name");
+    nicData.setDescription(nic1Id + " desc updated");
+    nicData.setNetworkId(network1.getId());
+    expected.setNicCompositionData(nicData);
+
+    CompositionEntityValidationData validationData =
+        vendorSoftwareProductManager.updateNic(expected, USER1);
+    Assert.assertTrue(validationData == null || validationData.getErrors() == null);
+    expected.setVersion(VERSION01);
+
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity
+        actual = vendorSoftwareProductDao.getNic(vsp1Id, VERSION01, component11Id, nic1Id);
+    Assert.assertEquals(actual, expected);
+  }
+
+  @Test(dependsOnMethods = {"testGet"})
+  public void testIllegalUpdateOnUploadVsp() {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity
+        expected = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity(vsp1Id, null, component11Id, nic1Id);
+    org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic
+        nicData = new org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic();
+    nicData.setName(nic1Id + " name updated");
+    nicData.setDescription(nic1Id + " desc updated");
+    nicData.setNetworkId(network1.getId());
+    expected.setNicCompositionData(nicData);
+
+    CompositionEntityValidationData validationData =
+        vendorSoftwareProductManager.updateNic(expected, USER1);
+    Assert.assertNotNull(validationData);
+    Assert.assertTrue(validationData.getErrors().size() > 0);
+  }
+
+  @Test
+  public void testListNonExistingComponentId_negative() {
+    testList_negative(vsp1Id, null, "non existing component id", USER1,
+        org.openecomp.sdc.versioning.errors.VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test
+  public void testListNonExistingVspId_negative() {
+    testList_negative("non existing vsp id", null, component11Id, USER1,
+        org.openecomp.sdc.versioning.errors.VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+/*
+    @Test(dependsOnMethods = {"testUpdateOnUploadVsp", "testList"})
+    public void testCreateWithRemovedName() {
+        testCreate(vsp1Id, component11Id);
+    }
+
+    @Test
+    public void testDeleteNonExistingNicId_negative() {
+        testDelete_negative(vsp1Id, component11Id, "non existing nic id", USER1, VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+    }
+
+    @Test(dependsOnMethods = "testList")
+    public void testDeleteNonExistingComponentId_negative() {
+        testDelete_negative(vsp1Id, "non existing component id", nic1Id, USER1, VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+    }*/
+
+  @Test(dependsOnMethods = {"testGet"})
+  public void testList() {
+    createNic(vsp1Id, VERSION01, component11Id, "nic2", network1.getId());
+
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity> actual =
+        vendorSoftwareProductManager.listNics(vsp1Id, null, component11Id, USER1);
+    Assert.assertEquals(actual.size(), 2);
+  }
+
+  @Test(dependsOnMethods = "testList")
+  public void testDeleteNonExistingVspId_negative() {
+    testDelete_negative("non existing vsp id", component11Id, nic1Id, USER1,
+        org.openecomp.sdc.versioning.errors.VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+/*
+    @Test(dependsOnMethods = "testList")
+    public void testDelete() {
+        vendorSoftwareProductManager.deleteNic(vsp1Id, component11Id, nic1Id, USER1);
+        NicEntity actual = vendorSoftwareProductDao.getNic(vsp1Id, VERSION01, component11Id, nic1Id);
+        Assert.assertNull(actual);
+    }*/
+
+  @Test(dependsOnMethods = "testList")
+  public void testDeleteOnUploadVsp_negative() {
+    testDelete_negative(vsp1Id, component11Id, nic1Id, USER1,
+        VendorSoftwareProductErrorCodes.VSP_COMPOSITION_EDIT_NOT_ALLOWED);
+  }
+
+  private String testCreate(String vspId, String componentId, String networkId,
+                            String networkName) {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity
+        expected = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity(vspId, null, componentId, null);
+
+    org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic
+        nicData = new org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic();
+    nicData.setName("nic1 name");
+    nicData.setNetworkId(networkId);
+    //nicData.setNetworkName(networkName);
+    nicData.setNetworkType(org.openecomp.sdc.vendorsoftwareproduct.types.composition.NetworkType.External);
+    expected.setNicCompositionData(nicData);
+
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity created = vendorSoftwareProductManager.createNic(expected, USER1);
+    Assert.assertNotNull(created);
+    expected.setId(created.getId());
+    expected.setVersion(VERSION01);
+
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity actual =
+        vendorSoftwareProductDao.getNic(vspId, VERSION01, componentId, created.getId());
+
+    Assert.assertEquals(actual, expected);
+
+    return created.getId();
+  }
+
+  private void testGet(String vspId, org.openecomp.sdc.versioning.dao.types.Version version, String componentId, String nicId,
+                       String user) {
+    CompositionEntityResponse<org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic> response =
+        vendorSoftwareProductManager.getNic(vspId, null, componentId, nicId, user);
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity
+        expected = vendorSoftwareProductDao.getNic(vspId, version, componentId, nicId);
+    Assert.assertEquals(response.getId(), expected.getId());
+    Assert.assertEquals(response.getData(), expected.getNicCompositionData());
+    Assert.assertNotNull(response.getSchema());
+  }
+
+  private void testCreate_negative(org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity nic, String user, String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.createNic(nic, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testGet_negative(String vspId, org.openecomp.sdc.versioning.dao.types.Version version, String componentId, String nicId,
+                                String user, String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.getNic(vspId, version, componentId, nicId, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testUpdate_negative(String vspId, String componentId, String nicId, String user,
+                                   String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.updateNic(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity(vspId, null, componentId, nicId), user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testList_negative(String vspId, org.openecomp.sdc.versioning.dao.types.Version version, String componentId, String user,
+                                 String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.listNics(vspId, version, componentId, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testDelete_negative(String vspId, String componentId, String nicId, String user,
+                                   String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.deleteNic(vspId, componentId, nicId, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/ProcessesTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/ProcessesTest.java
new file mode 100644
index 0000000..8571088
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/ProcessesTest.java
@@ -0,0 +1,473 @@
+package org.openecomp.sdc.vendorsoftwareproduct;
+
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessArtifactEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.impl.VendorSoftwareProductManagerImpl;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.errors.VersioningErrorCodes;
+import org.openecomp.core.util.UniqueValueUtil;
+import org.openecomp.core.utilities.CommonMethods;
+
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.util.Collection;
+
+public class ProcessesTest {
+
+  protected static final String USER1 = "processesTestUser1";
+  protected static final VendorSoftwareProductManager vendorSoftwareProductManager =
+      new VendorSoftwareProductManagerImpl();
+  private static final String USER2 = "processesTestUser2";
+  private static final String ARTIFACT_NAME = "artifact.sh";
+  private static final Version VERSION01 = new Version(0, 1);
+  private static final VendorSoftwareProductDao vendorSoftwareProductDao =
+      VendorSoftwareProductDaoFactory.getInstance().createInterface();
+
+  protected String vsp1Id;
+  protected String vsp2Id;
+  protected String component11Id = VendorSoftwareProductConstants.GENERAL_COMPONENT_ID;
+  protected String component21Id = VendorSoftwareProductConstants.GENERAL_COMPONENT_ID;
+  private String p1Id;
+  private String p2Id;
+
+  @BeforeClass
+  protected void init() {
+    VspDetails vsp1 = vendorSoftwareProductManager.createNewVsp(VSPCommon
+        .createVspDetails(null, null, "VSP_" + CommonMethods.nextUuId(), "Test-vsp1", "vendorName1",
+            "vlm1Id", "icon", "category", "subCategory", "123", null), USER1);
+    vsp1Id = vsp1.getId();
+
+    VspDetails vsp2 = vendorSoftwareProductManager.createNewVsp(VSPCommon
+        .createVspDetails(null, null, "VSP_" + CommonMethods.nextUuId(), "Test-vsp2", "vendorName1",
+            "vlm1Id", "icon", "category", "subCategory", "123", null), USER1);
+    vsp2Id = vsp2.getId();
+  }
+
+  @Test
+  public void testListWhenNone() {
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity> processes =
+        vendorSoftwareProductManager.listProcesses(vsp1Id, null, component11Id, USER1);
+    Assert.assertEquals(processes.size(), 0);
+  }
+
+  @Test
+  public void testCreateNonExistingComponentId_negative() {
+    testCreate_negative(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity(vsp1Id, null, "non existing component id", null), USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test
+  public void testCreateNonExistingVspId_negative() {
+    testCreate_negative(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity("non existing vsp id", null, component11Id, null), USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test
+  public void testCreateOnLockedVsp_negative() {
+    testCreate_negative(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity(vsp1Id, null, component11Id, null), USER2,
+        VersioningErrorCodes.EDIT_ON_ENTITY_LOCKED_BY_OTHER_USER);
+  }
+
+  @Test(dependsOnMethods = "testListWhenNone")
+  public void testCreate() {
+    p1Id = testCreate(vsp1Id, component11Id);
+  }
+
+  @Test(dependsOnMethods = {"testCreate"})
+  public void testCreateWithExistingName_negative() {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity
+        process = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity(vsp1Id, null, component11Id, null);
+    process.setName("p1 name");
+    testCreate_negative(process, USER1, UniqueValueUtil.UNIQUE_VALUE_VIOLATION);
+  }
+
+  @Test(dependsOnMethods = {"testCreate"})
+  public void testCreateWithExistingNameUnderOtherComponent() {
+    // This method is implemented in the sub class ComponentProcessesTest, it is here in order to keep the tests sequence down there (using @Test).
+  }
+
+  @Test(dependsOnMethods = {"testCreate"})
+  public void testCreateWithExistingNameUnderOtherVsp() {
+    testCreate(vsp2Id, component21Id);
+  }
+
+  @Test
+  public void testGetNonExistingProcessId_negative() {
+    testGet_negative(vsp1Id, null, component11Id, "non existing process id", USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testCreate")
+  public void testGetNonExistingComponentId_negative() {
+    testGet_negative(vsp1Id, null, "non existing component id", p1Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testCreate")
+  public void testGetNonExistingVspId_negative() {
+    testGet_negative("non existing vsp id", null, component11Id, p1Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test(dependsOnMethods = "testCreate")
+  public void testGet() {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity
+        actual = testGet(vsp1Id, VERSION01, component11Id, p1Id, USER1);
+    Assert.assertNull(actual.getArtifactName());
+  }
+
+  @Test
+  public void testUpdateNonExistingProcessId_negative() {
+    testUpdate_negative(vsp1Id, component11Id, "non existing process id", USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testCreate")
+  public void testUpdateNonExistingComponentId_negative() {
+    testUpdate_negative(vsp1Id, "non existing component id", p1Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testCreate")
+  public void testUpdateNonExistingVspId_negative() {
+    testUpdate_negative("non existing vsp id", component11Id, p1Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test(dependsOnMethods = {"testGet"})
+  public void testUpdate() {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity
+        expected = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity(vsp1Id, null, component11Id, p1Id);
+    expected.setName("p1 name updated");
+    expected.setDescription("p1 desc updated");
+
+    vendorSoftwareProductManager.updateProcess(expected, USER1);
+    expected.setVersion(VERSION01);
+
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity actual =
+        vendorSoftwareProductDao.getProcess(vsp1Id, VERSION01, component11Id, p1Id);
+    Assert.assertEquals(actual, expected);
+  }
+
+  @Test
+  public void testListNonExistingComponentId_negative() {
+    testList_negative(vsp1Id, null, "non existing component id", USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test
+  public void testListNonExistingVspId_negative() {
+    testList_negative("non existing vsp id", null, component11Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test(dependsOnMethods = {"testGet"})
+  public void testList() {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity
+        p2 = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity(vsp1Id, null, component11Id, null);
+    p2.setName("p2 name");
+    p2.setDescription("p2 desc");
+
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity createdP2 = vendorSoftwareProductManager.createProcess(p2, USER1);
+    p2Id = createdP2.getId();
+
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity> actual =
+        vendorSoftwareProductManager.listProcesses(vsp1Id, null, component11Id, USER1);
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity> expected =
+        vendorSoftwareProductDao.listProcesses(vsp1Id, VERSION01, component11Id);
+    Assert.assertEquals(actual.size(), 2);
+    Assert.assertEquals(actual, expected);
+  }
+
+  @Test(dependsOnMethods = {"testUpdate", "testList"})
+  public void testCreateWithRemovedName() {
+    testCreate(vsp1Id, component11Id);
+  }
+
+  @Test
+  public void testDeleteNonExistingProcessId_negative() {
+    testDelete_negative(vsp1Id, component11Id, "non existing process id", USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testList")
+  public void testDeleteNonExistingComponentId_negative() {
+    testDelete_negative(vsp1Id, "non existing component id", p1Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testList")
+  public void testDeleteNonExistingVspId_negative() {
+    testDelete_negative("non existing vsp id", component11Id, p1Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test(dependsOnMethods = "testList")
+  public void testDelete() {
+    vendorSoftwareProductManager.deleteProcess(vsp1Id, component11Id, p1Id, USER1);
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity actual =
+        vendorSoftwareProductDao.getProcess(vsp1Id, VERSION01, component11Id, p1Id);
+    Assert.assertNull(actual);
+  }
+
+  @Test
+  public void testUploadFileNonExistingProcessId_negative() {
+    testUploadFile_negative(vsp1Id, component11Id, "non existing process id", USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testList")
+  public void testUploadFileNonExistingComponentId_negative() {
+    testUploadFile_negative(vsp1Id, "non existing component id", p2Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testList")
+  public void testUploadFileNonExistingVspId_negative() {
+    testUploadFile_negative("non existing vsp id", component11Id, p2Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test(dependsOnMethods = "testList")
+  public void testGetFileWhenNone_negative() {
+    testGetFile_negative(vsp1Id, null, component11Id, p2Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testList")
+  public void testDeleteFileWhenNone_negative() {
+    testDeleteFile_negative(vsp1Id, component11Id, p2Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = {"testGetFileWhenNone_negative", "testDeleteFileWhenNone_negative"})
+  public void testUploadFile() {
+    vendorSoftwareProductManager
+        .uploadProcessArtifact(new ByteArrayInputStream("bla bla".getBytes()), ARTIFACT_NAME,
+            vsp1Id, component11Id, p2Id, USER1);
+    ProcessArtifactEntity actual =
+        vendorSoftwareProductDao.getProcessArtifact(vsp1Id, VERSION01, component11Id, p2Id);
+    Assert.assertNotNull(actual);
+    Assert.assertNotNull(actual.getArtifact());
+    Assert.assertEquals(actual.getArtifactName(), ARTIFACT_NAME);
+  }
+
+  @Test(dependsOnMethods = "testUploadFile")
+  public void testGetAfterUploadFile() {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity
+        actual = testGet(vsp1Id, VERSION01, component11Id, p2Id, USER1);
+    Assert.assertEquals(actual.getArtifactName(), ARTIFACT_NAME);
+  }
+
+  @Test
+  public void testGetFileNonExistingProcessId_negative() {
+    testGetFile_negative(vsp1Id, null, component11Id, "non existing process id", USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testList")
+  public void testGetFileNonExistingComponentId_negative() {
+    testGetFile_negative(vsp1Id, null, "non existing component id", p2Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testList")
+  public void testGetFileNonExistingVspId_negative() {
+    testGetFile_negative("non existing vsp id", null, component11Id, p2Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test(dependsOnMethods = "testUploadFile")
+  public void testGetFile() {
+    File actual =
+        vendorSoftwareProductManager.getProcessArtifact(vsp1Id, null, component11Id, p2Id, USER1);
+    Assert.assertNotNull(actual);
+    ProcessArtifactEntity expected =
+        vendorSoftwareProductDao.getProcessArtifact(vsp1Id, VERSION01, component11Id, p2Id);
+    Assert.assertNotNull(expected);
+    Assert.assertNotNull(expected.getArtifact());
+  }
+
+  @Test
+  public void testDeleteFileNonExistingProcessId_negative() {
+    testDeleteFile_negative(vsp1Id, component11Id, "non existing process id", USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testList")
+  public void testDeleteFileNonExistingComponentId_negative() {
+    testDeleteFile_negative(vsp1Id, "non existing component id", p2Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test(dependsOnMethods = "testList")
+  public void testDeleteFileNonExistingVspId_negative() {
+    testDeleteFile_negative("non existing vsp id", component11Id, p2Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test(dependsOnMethods = "testGetFile")
+  public void testDeleteFile() {
+    vendorSoftwareProductManager.deleteProcessArtifact(vsp1Id, component11Id, p2Id, USER1);
+    ProcessArtifactEntity expected =
+        vendorSoftwareProductDao.getProcessArtifact(vsp1Id, VERSION01, component11Id, p2Id);
+    Assert.assertNull(expected.getArtifact());
+  }
+
+  @Test
+  public void testDeleteListNonExistingComponentId_negative() {
+    testDeleteList_negative(vsp1Id, "non existing component id", USER1,
+        VersioningErrorCodes.VERSIONABLE_SUB_ENTITY_NOT_FOUND);
+  }
+
+  @Test
+  public void testDeleteListNonExistingVspId_negative() {
+    testDeleteList_negative("non existing vsp id", component11Id, USER1,
+        VersioningErrorCodes.VERSIONABLE_ENTITY_NOT_EXIST);
+  }
+
+  @Test(dependsOnMethods = {"testDeleteFile"})
+  public void testDeleteList() {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity
+        p3 = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity(vsp1Id, null, component11Id, null);
+    p3.setName("p3 name");
+    p3.setDescription("p3 desc");
+    vendorSoftwareProductManager.createProcess(p3, USER1);
+
+    vendorSoftwareProductManager.deleteProcesses(vsp1Id, component11Id, USER1);
+
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity> actual =
+        vendorSoftwareProductManager.listProcesses(vsp1Id, null, component11Id, USER1);
+    Assert.assertEquals(actual.size(), 0);
+  }
+
+  protected String testCreate(String vspId, String componentId) {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity
+        expected = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity(vspId, null, componentId, null);
+    expected.setName("p1 name");
+    expected.setDescription("p1 desc");
+
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity created = vendorSoftwareProductManager.createProcess(expected, USER1);
+    Assert.assertNotNull(created);
+    expected.setId(created.getId());
+    expected.setVersion(VERSION01);
+
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity actual =
+        vendorSoftwareProductDao.getProcess(vspId, VERSION01, componentId, created.getId());
+
+    Assert.assertEquals(actual, expected);
+
+    return created.getId();
+  }
+
+  private org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity testGet(String vspId, Version version, String componentId, String processId,
+                                                                                 String user) {
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity actual =
+        vendorSoftwareProductManager.getProcess(vspId, null, componentId, processId, user);
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity expected =
+        vendorSoftwareProductDao.getProcess(vspId, version, componentId, processId);
+    Assert.assertEquals(actual, expected);
+    return actual;
+  }
+
+  private void testCreate_negative(
+      org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity process, String user, String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.createProcess(process, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testGet_negative(String vspId, Version version, String componentId, String processId,
+                                String user, String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.getProcess(vspId, version, componentId, processId, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testUpdate_negative(String vspId, String componentId, String processId, String user,
+                                   String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager
+          .updateProcess(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity(vspId, null, componentId, processId), user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testList_negative(String vspId, Version version, String componentId, String user,
+                                 String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.listProcesses(vspId, version, componentId, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testDeleteList_negative(String vspId, String componentId, String user,
+                                       String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.deleteProcesses(vspId, componentId, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testDelete_negative(String vspId, String componentId, String processId, String user,
+                                   String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.deleteProcess(vspId, componentId, processId, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testGetFile_negative(String vspId, Version version, String componentId,
+                                    String processId, String user, String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.getProcessArtifact(vspId, version, componentId, processId, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testUploadFile_negative(String vspId, String componentId, String processId,
+                                       String user, String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager
+          .uploadProcessArtifact(new ByteArrayInputStream("bla bla".getBytes()), "artifact.sh",
+              vspId, componentId, processId, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+  private void testDeleteFile_negative(String vspId, String componentId, String processId,
+                                       String user, String expectedErrorCode) {
+    try {
+      vendorSoftwareProductManager.deleteProcessArtifact(vspId, componentId, processId, user);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), expectedErrorCode);
+    }
+  }
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/VSPCommon.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/VSPCommon.java
new file mode 100644
index 0000000..4eaba77
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/VSPCommon.java
@@ -0,0 +1,78 @@
+package org.openecomp.sdc.vendorsoftwareproduct;
+
+import org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.core.utilities.file.FileUtils;
+
+import java.io.*;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+public class VSPCommon {
+
+  public static VspDetails createVspDetails(String id, Version version, String name, String desc,
+                                            String vendorName, String vlm, String icon,
+                                            String category, String subCategory,
+                                            String licenseAgreement, List<String> featureGroups) {
+    VspDetails vspDetails = new VspDetails(id, version);
+    vspDetails.setName(name);
+    vspDetails.setDescription(desc);
+    vspDetails.setIcon(icon);
+    vspDetails.setCategory(category);
+    vspDetails.setSubCategory(subCategory);
+    vspDetails.setVendorName(vendorName);
+    vspDetails.setVendorId(vlm);
+    vspDetails.setVlmVersion(new Version(1, 0));
+    vspDetails.setLicenseAgreement(licenseAgreement);
+    vspDetails.setFeatureGroups(featureGroups);
+    return vspDetails;
+  }
+
+
+  public static VendorLicenseModelEntity createVendorLicenseModel(String name, String desc,
+                                                                  String icon) {
+    VendorLicenseModelEntity vendorLicenseModel = new VendorLicenseModelEntity();
+    vendorLicenseModel.setVendorName(name);
+    vendorLicenseModel.setDescription(desc);
+    vendorLicenseModel.setIconRef(icon);
+    return vendorLicenseModel;
+  }
+
+  public static void zipDir(File file, String path, ZipOutputStream zos) {
+    zipDir(file, path, zos, false);
+  }
+
+  public static void zipDir(File file, String path, ZipOutputStream zos, boolean isRootDir) {
+    if (file.isDirectory()) {
+      path += File.separator + file.getName();
+      File[] files = file.listFiles();
+      if (files != null) {
+        for (File innerFile : files) {
+          if (isRootDir) {
+            zipDir(innerFile, "", zos, false);
+          } else {
+            zipDir(innerFile, path, zos, false);
+          }
+        }
+      }
+    } else {
+
+      try {
+        if (!path.isEmpty()) {
+          path += File.separator;
+        }
+        zos.putNextEntry(new ZipEntry(path + file.getName()));
+        InputStream is = new FileInputStream(file);
+        byte[] data = FileUtils.toByteArray(is);
+        zos.write(data);
+        zos.closeEntry();
+      } catch (IOException e) {
+        e.printStackTrace();
+      }
+    }
+  }
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/VSPFullTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/VSPFullTest.java
new file mode 100644
index 0000000..ebc4c3a
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/VSPFullTest.java
@@ -0,0 +1,194 @@
+package org.openecomp.sdc.vendorsoftwareproduct;
+
+import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
+import org.openecomp.sdc.tosca.datatypes.model.CapabilityDefinition;
+import org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity;
+import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacade;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.impl.VendorSoftwareProductManagerImpl;
+import org.openecomp.sdc.vendorsoftwareproduct.types.ValidationResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.VersionedVendorSoftwareProductInfo;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.core.model.dao.EnrichedServiceModelDaoFactory;
+import org.openecomp.core.util.UniqueValueUtil;
+import org.openecomp.core.utilities.CommonMethods;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.io.IOUtils;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.io.*;
+import java.net.URL;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+public class VSPFullTest {
+
+
+  public static final Version VERSION01 = new Version(0, 1);
+  private static final org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDao
+      vendorSoftwareProductDao =
+      VendorSoftwareProductDaoFactory.getInstance().createInterface();
+  private static final String USER1 = "vspTestUser1";
+  private static VendorSoftwareProductManager vendorSoftwareProductManager =
+      new VendorSoftwareProductManagerImpl();
+  private static VendorLicenseFacade vendorLicenseFacade =
+      org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacadeFactory.getInstance().createInterface();
+
+  @Test
+  public void testEnrichModelInSubmit() {
+    UniqueValueUtil
+        .deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+            "VSP_FullTest");
+
+    String vlm1Id = vendorLicenseFacade.createVendorLicenseModel(VSPCommon
+            .createVendorLicenseModel("vlmName " + CommonMethods.nextUuId(), "vlm1Id desc", "icon1"),
+        USER1).getId();
+    String entitlementPoolId = vendorLicenseFacade
+        .createEntitlementPool(new EntitlementPoolEntity(vlm1Id, null, null), USER1).getId();
+
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+        featureGroup = new org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity(vlm1Id, null, null);
+    featureGroup.getEntitlementPoolIds().add(entitlementPoolId);
+    String featureGroupId = vendorLicenseFacade.createFeatureGroup(featureGroup, USER1).getId();
+
+    org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity
+        licenseAgreement = new org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity(vlm1Id, null, null);
+    licenseAgreement.getFeatureGroupIds().add(featureGroupId);
+    String licenseAgreementId =
+        vendorLicenseFacade.createLicenseAgreement(licenseAgreement, USER1).getId();
+
+    vendorLicenseFacade.checkin(vlm1Id, USER1);
+    vendorLicenseFacade.submit(vlm1Id, USER1);
+
+    String vspId = createVsp(vlm1Id, licenseAgreementId, licenseAgreement.getFeatureGroupIds());
+
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity> components = uploadFullCompositionFile(vspId);
+
+
+    //check in
+    vendorSoftwareProductManager.checkin(vspId, USER1);
+    //submit
+    try {
+      ValidationResponse result = vendorSoftwareProductManager.submit(vspId, USER1);
+      //Assert.assertTrue(result.isValid());
+      //PackageInfo createPackageResult = vendorSoftwareProductManager.createPackage(vspId, USER1);
+
+    } catch (IOException e) {
+      Assert.fail();
+    }
+    VersionedVendorSoftwareProductInfo details =
+        vendorSoftwareProductManager.getVspDetails(vspId, null, USER1);
+
+
+    //File csar = vendorSoftwareProductManager.getTranslatedFile(vspId,details.getVersionInfo().getActiveVersion(),USER1);
+    // writeFile(csar);
+
+
+    ToscaServiceModel model =
+        (ToscaServiceModel) EnrichedServiceModelDaoFactory.getInstance().createInterface()
+            .getServiceModel(vspId, details.getVersionInfo().getActiveVersion());
+
+    Map<String, CapabilityDefinition> capabilities = new HashMap<>();
+    for (org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity component : components) {
+      model.getServiceTemplates().
+          entrySet().
+          stream().
+          filter(entryValue -> entryValue.getValue() != null &&
+              entryValue.getValue().getNode_types() != null &&
+              entryValue.getValue().
+                  getNode_types().
+                  containsKey(component.getComponentCompositionData().getName())).
+          forEach(entryValue -> entryValue.getValue().getNode_types().
+              values().
+              stream().
+              filter(type -> MapUtils.isNotEmpty(type.getCapabilities())).
+              forEach(type -> type.getCapabilities().
+                  entrySet().
+                  forEach(entry -> addCapability(entryValue.getKey(), capabilities, entry.getKey(),
+                      entry.getValue()))));
+
+    }
+
+    Assert.assertNotNull(capabilities);
+  }
+
+  private Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity> uploadFullCompositionFile(String vspId) {
+    vendorSoftwareProductManager
+        .uploadFile(vspId, getFileInputStream("/vspmanager/zips/fullComposition.zip"), USER1);
+
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity> components =
+        vendorSoftwareProductManager.listComponents(vspId, null, USER1);
+    Assert.assertFalse(components.isEmpty());
+
+    for (org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity component : components) {
+      Assert.assertNotNull(vendorSoftwareProductManager
+          .getComponentQuestionnaire(vspId, null, component.getId(), USER1).getData());
+
+      Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity> nics =
+          vendorSoftwareProductManager.listNics(vspId, null, component.getId(), USER1);
+      Assert.assertFalse(nics.isEmpty());
+      for (org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity nic : nics) {
+        Assert.assertNotNull(vendorSoftwareProductManager
+            .getNicQuestionnaire(vspId, null, component.getId(), nic.getId(), USER1).getData());
+      }
+    }
+
+    return components;
+  }
+
+  private String createVsp(String vlm1Id, String licenseAgreementId, Set<String> featureGroupIds) {
+    VspDetails expectedVsp = VSPCommon
+        .createVspDetails(null, null, "VSP_FullTest", "Test-vsp_fullTest", "vendorName", vlm1Id,
+            "icon", "category", "subCategory", licenseAgreementId,
+            featureGroupIds.stream().collect(Collectors.toList()));
+    String vspId = vendorSoftwareProductManager.createNewVsp(expectedVsp, USER1).getId();
+
+    VspDetails actualVsp =
+        vendorSoftwareProductDao.getVendorSoftwareProductInfo(new VspDetails(vspId, VERSION01));
+    expectedVsp.setId(vspId);
+    expectedVsp.setVersion(VERSION01);
+
+    VendorSoftwareProductManagerTest.assertVspsEquals(actualVsp, expectedVsp);
+    Assert.assertNotNull(
+        vendorSoftwareProductManager.getVspQuestionnaire(vspId, null, USER1).getData());
+    return vspId;
+  }
+
+  private void writeFile(File csar) {
+    try {
+      FileInputStream in = new FileInputStream(csar);
+      File output = new File("CSAR_vDNS.zip");
+
+      FileOutputStream out = new FileOutputStream(output);
+
+      IOUtils.copy(in, out);
+      in.close();
+      out.close();
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  private void addCapability(String entryValueKey, Map<String, CapabilityDefinition> capabilities,
+                             String key, CapabilityDefinition value) {
+
+    capabilities.put(entryValueKey + "_" + key, value);
+  }
+
+  private InputStream getFileInputStream(String fileName) {
+    URL url = this.getClass().getResource(fileName);
+    try {
+      return url.openStream();
+    } catch (IOException e) {
+      e.printStackTrace();
+      return null;
+    }
+  }
+
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/VendorSoftwareProductManagerTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/VendorSoftwareProductManagerTest.java
new file mode 100644
index 0000000..d94c868
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/VendorSoftwareProductManagerTest.java
@@ -0,0 +1,672 @@
+package org.openecomp.sdc.vendorsoftwareproduct;
+
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.common.errors.ValidationErrorBuilder;
+import org.openecomp.sdc.common.utils.AsdcCommon;
+import org.openecomp.sdc.heat.datatypes.structure.HeatStructureTree;
+import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
+import org.openecomp.sdc.tosca.datatypes.model.CapabilityDefinition;
+import org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity;
+import org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity;
+import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacade;
+
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.PackageInfo;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.UploadDataEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes;
+import org.openecomp.sdc.vendorsoftwareproduct.impl.VendorSoftwareProductManagerImpl;
+import org.openecomp.sdc.vendorsoftwareproduct.tree.UploadFileTest;
+import org.openecomp.sdc.vendorsoftwareproduct.types.UploadFileResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.ValidationResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.VersionedVendorSoftwareProductInfo;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.errors.VersioningErrorCodes;
+import org.openecomp.core.model.dao.EnrichedServiceModelDaoFactory;
+import org.openecomp.core.util.UniqueValueUtil;
+import org.openecomp.core.utilities.CommonMethods;
+import org.openecomp.core.validation.errors.Messages;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.io.IOUtils;
+import org.testng.Assert;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import java.io.*;
+import java.net.URL;
+import java.util.*;
+import java.util.stream.Collectors;
+
+public class VendorSoftwareProductManagerTest {
+  public static final Version VERSION01 = new Version(0, 1);
+  public static final Version VERSION10 = new Version(1, 0);
+  private static final String USER1 = "vspTestUser1";
+  private static final String USER2 = "vspTestUser2";
+  private static final String USER3 = "vspTestUser3";
+  public static String id001 = null;
+  public static String id002 = null;
+  public static String id003 = null;
+  public static String id004 = null;
+  public static String id005 = null;
+  public static String id006 = null;
+  public static String id007 = null;
+  public static Version activeVersion002 = null;
+  private static VendorSoftwareProductManager vendorSoftwareProductManager =
+      new VendorSoftwareProductManagerImpl();
+  private static org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDao
+      vendorSoftwareProductDao =
+      VendorSoftwareProductDaoFactory.getInstance().createInterface();
+  private static VendorLicenseFacade vendorLicenseFacade =
+      org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacadeFactory.getInstance().createInterface();
+  private static String vlm1Id;
+  private static String licenseAgreementId;
+  private static String featureGroupId;
+  private static VspDetails vsp1;
+  private static VspDetails vsp2;
+  UploadFileTest ut = new UploadFileTest();
+
+  static void assertVspsEquals(VspDetails actual, VspDetails expected) {
+    Assert.assertEquals(actual.getId(), expected.getId());
+    Assert.assertEquals(actual.getVersion(), expected.getVersion());
+    Assert.assertEquals(actual.getName(), expected.getName());
+    Assert.assertEquals(actual.getDescription(), expected.getDescription());
+    Assert.assertEquals(actual.getIcon(), expected.getIcon());
+    Assert.assertEquals(actual.getCategory(), expected.getCategory());
+    Assert.assertEquals(actual.getSubCategory(), expected.getSubCategory());
+    Assert.assertEquals(actual.getVendorName(), expected.getVendorName());
+    Assert.assertEquals(actual.getVendorId(), expected.getVendorId());
+    Assert.assertEquals(actual.getLicenseAgreement(), expected.getLicenseAgreement());
+    Assert.assertEquals(actual.getFeatureGroups(), expected.getFeatureGroups());
+  }
+
+  @BeforeTest
+  private void init() {
+    UniqueValueUtil
+        .deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+            "VSP1");
+    UniqueValueUtil
+        .deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+            "VSP3");
+    UniqueValueUtil
+        .deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+            "VSP4");
+    UniqueValueUtil
+        .deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+            "VSP5");
+    UniqueValueUtil
+        .deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+            "vsp1_test");
+    UniqueValueUtil
+        .deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+            "vsp2_test");
+    createVlm();
+  }
+
+  private void createVlm() {
+    vlm1Id = vendorLicenseFacade.createVendorLicenseModel(VSPCommon
+            .createVendorLicenseModel("vlmName " + CommonMethods.nextUuId(), "vlm1Id desc", "icon1"),
+        USER1).getId();
+
+    String entitlementPoolId = vendorLicenseFacade
+        .createEntitlementPool(new EntitlementPoolEntity(vlm1Id, null, null), USER1).getId();
+
+    org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity
+        featureGroup = new org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity(vlm1Id, null, null);
+    featureGroup.getEntitlementPoolIds().add(entitlementPoolId);
+    featureGroupId = vendorLicenseFacade.createFeatureGroup(featureGroup, USER1).getId();
+
+    LicenseAgreementEntity licenseAgreement = new LicenseAgreementEntity(vlm1Id, null, null);
+    licenseAgreement.getFeatureGroupIds().add(featureGroupId);
+    licenseAgreementId =
+        vendorLicenseFacade.createLicenseAgreement(licenseAgreement, USER1).getId();
+
+    vendorLicenseFacade.checkin(vlm1Id, USER1);
+    vendorLicenseFacade.submit(vlm1Id, USER1);
+  }
+
+  @Test
+  public void testHeatSet() {
+    Set<HeatStructureTree> set = new HashSet<>();
+    HeatStructureTree heatStructureTree1 = new HeatStructureTree();
+    HeatStructureTree heatStructureTree2 = new HeatStructureTree();
+
+    heatStructureTree1.setFileName("file");
+
+    HeatStructureTree env = new HeatStructureTree();
+    env.setFileName("env");
+    heatStructureTree1.setEnv(env);
+
+    heatStructureTree2.setFileName("file");
+    heatStructureTree2.setEnv(env);
+
+    set.add(heatStructureTree1);
+    set.add(heatStructureTree2);
+
+    Assert.assertEquals(set.size(), 1);
+  }
+
+  @Test(dependsOnMethods = {"testHeatSet"})
+  public void testCreateVSP() {
+    VspDetails expectedVsp = VSPCommon
+        .createVspDetails(null, null, "VSP1", "Test-vsp", "vendorName", vlm1Id, "icon", "category",
+            "subCategory", "123", null);
+
+    VspDetails createdVsp = vendorSoftwareProductManager.createNewVsp(expectedVsp, USER1);
+    id001 = createdVsp.getId();
+    Assert.assertNotNull(id001);
+    Assert.assertNotNull(createdVsp.getVersion());
+
+    VspDetails actualVsp =
+        vendorSoftwareProductDao.getVendorSoftwareProductInfo(new VspDetails(id001, VERSION01));
+    expectedVsp.setId(id001);
+    expectedVsp.setVersion(VERSION01);
+
+    assertVspsEquals(actualVsp, expectedVsp);
+    Assert.assertNotNull(
+        vendorSoftwareProductManager.getVspQuestionnaire(id001, null, USER1).getData());
+  }
+
+  @Test(dependsOnMethods = {"testCreateVSP"})
+  public void testCreateWithExistingName_negative() {
+    try {
+      VspDetails expectedVsp = VSPCommon
+          .createVspDetails(null, null, "Vsp1", "Test-vsp", "vendorName", vlm1Id, "icon",
+              "category", "subCategory", "123", null);
+      vendorSoftwareProductManager.createNewVsp(expectedVsp, USER1);
+      Assert.fail();
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), UniqueValueUtil.UNIQUE_VALUE_VIOLATION);
+    }
+  }
+
+  @Test(dependsOnMethods = {"testCreateWithExistingName_negative"})
+  public void testGetVSPDetails() {
+    VersionedVendorSoftwareProductInfo actualVsp =
+        vendorSoftwareProductManager.getVspDetails(id001, null, USER1);
+
+    VspDetails expectedVsp =
+        vendorSoftwareProductDao.getVendorSoftwareProductInfo(new VspDetails(id001, VERSION01));
+    assertVspsEquals(actualVsp.getVspDetails(), expectedVsp);
+    Assert.assertEquals(actualVsp.getVersionInfo().getActiveVersion(), VERSION01);
+    Assert.assertEquals(actualVsp.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Locked);
+    Assert.assertEquals(actualVsp.getVersionInfo().getLockingUser(), USER1);
+  }
+
+  @Test(dependsOnMethods = {"testGetVSPDetails"})
+  public void testUpdateVSP() {
+    VspDetails expectedVsp = VSPCommon
+        .createVspDetails(id001, VERSION01, "VSP1", null, "vendorName", vlm1Id, "icon", "category",
+            "subCategory", "456", null);
+    vendorSoftwareProductManager.updateVsp(expectedVsp, USER1);
+
+    VspDetails actualVsp =
+        vendorSoftwareProductDao.getVendorSoftwareProductInfo(new VspDetails(id001, VERSION01));
+
+    assertVspsEquals(actualVsp, expectedVsp);
+  }
+
+  @Test(dependsOnMethods = {"testUpdateVSP"})
+  public void testGetVSPDetailsAfterUpdate() {
+    VersionedVendorSoftwareProductInfo vspDetails =
+        vendorSoftwareProductManager.getVspDetails(id001, null, USER1);
+    Assert.assertEquals(vspDetails.getVspDetails().getName(), "VSP1");
+    Assert.assertEquals(vspDetails.getVspDetails().getCategory(), "category");
+    Assert.assertEquals(vspDetails.getVspDetails().getSubCategory(), "subCategory");
+    Assert.assertEquals(vspDetails.getVspDetails().getVendorId(), vlm1Id);
+    Assert.assertEquals(vspDetails.getVersionInfo().getActiveVersion(), VERSION01);
+    Assert.assertEquals(vspDetails.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Locked);
+    Assert.assertEquals(vspDetails.getVersionInfo().getLockingUser(), USER1);
+  }
+
+  @Test(dependsOnMethods = {"testGetVSPDetailsAfterUpdate"})
+  public void testGetVSPList() {
+    String licenseAgreementId = "bla bla";
+    VspDetails vspDetails = vendorSoftwareProductManager.createNewVsp(VSPCommon
+        .createVspDetails(null, null, "VSP3", "Test-vsp", "vendorName", vlm1Id, "icon", "category",
+            "subCategory", licenseAgreementId, null), USER1);
+    id002 = vspDetails.getId();
+    vspDetails = vendorSoftwareProductManager.createNewVsp(VSPCommon
+        .createVspDetails(null, null, "VSP4", "Test-vsp", "vendorName", vlm1Id, "icon", "category",
+            "subCategory", licenseAgreementId, null), USER1);
+    id003 = vspDetails.getId();
+
+    List<VersionedVendorSoftwareProductInfo> vspDetailsList =
+        vendorSoftwareProductManager.getVspList(null, USER1);
+    int foundCount = 0;
+    for (VersionedVendorSoftwareProductInfo vsp : vspDetailsList) {
+      if (vsp.getVspDetails().getId().equals(id001) || vsp.getVspDetails().getId().equals(id002) ||
+          vsp.getVspDetails().getId().equals(id003)) {
+        foundCount++;
+      }
+    }
+
+    Assert.assertEquals(foundCount, 3);
+  }
+
+  @Test(dependsOnMethods = {"testGetVSPList"})
+  // Unsupported operation for 1607 release.
+/*    public void testDeleteVSP() {
+        vendorSoftwareProductManager.deleteVsp(id001, USER1);
+
+        VspDetails vspDetails = vendorSoftwareProductDao.getVendorSoftwareProductInfo(new VspDetails(id001, VERSION01));
+        Assert.assertNull(vspDetails);
+
+        List<VersionedVendorSoftwareProductInfo> vspDetailsList = vendorSoftwareProductManager.getVspList(null, USER1);
+        boolean found001 = false;
+        for (VersionedVendorSoftwareProductInfo vsp : vspDetailsList) {
+            if (vsp.getVspDetails().getId().equals(id001)) {
+                found001 = true;
+            }
+        }
+
+        Assert.assertFalse(found001);
+    }
+
+
+    @Test(dependsOnMethods = {"testDeleteVSP"})*/
+  public void testCheckin() {
+    vendorSoftwareProductManager.checkin(id002, USER1);
+
+    VersionedVendorSoftwareProductInfo vsp2 =
+        vendorSoftwareProductManager.getVspDetails(id002, null, USER1);
+    Assert.assertEquals(vsp2.getVersionInfo().getActiveVersion(), VERSION01);
+    Assert.assertEquals(vsp2.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Available);
+    Assert.assertNull(vsp2.getVersionInfo().getLockingUser());
+  }
+
+  @Test(dependsOnMethods = {"testCheckin"})
+  public void testCheckout() {
+    vendorSoftwareProductManager.checkout(id002, USER2);
+
+    VersionedVendorSoftwareProductInfo vsp2 =
+        vendorSoftwareProductManager.getVspDetails(id002, null, USER2);
+    Assert.assertEquals(vsp2.getVersionInfo().getActiveVersion(), new Version(0, 2));
+    Assert.assertEquals(vsp2.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Locked);
+    Assert.assertEquals(vsp2.getVersionInfo().getLockingUser(), USER2);
+
+    vsp2 = vendorSoftwareProductManager.getVspDetails(id002, null, USER1);
+    Assert.assertEquals(vsp2.getVersionInfo().getActiveVersion(), VERSION01);
+    Assert.assertEquals(vsp2.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Locked);
+    Assert.assertEquals(vsp2.getVersionInfo().getLockingUser(), USER2);
+  }
+
+  @Test(dependsOnMethods = {"testCheckout"})
+  public void testUndoCheckout() {
+    vendorSoftwareProductManager.undoCheckout(id002, USER2);
+
+    VersionedVendorSoftwareProductInfo vsp2 =
+        vendorSoftwareProductManager.getVspDetails(id002, null, USER2);
+    Assert.assertEquals(vsp2.getVersionInfo().getActiveVersion(), VERSION01);
+    Assert.assertEquals(vsp2.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Available);
+    Assert.assertNull(vsp2.getVersionInfo().getLockingUser());
+  }
+
+  @Test(dependsOnMethods = {"testUndoCheckout"})
+  public void testListFinalVspsWhenNone() {
+    List<VersionedVendorSoftwareProductInfo> vspDetailsList =
+        vendorSoftwareProductManager.getVspList(
+            org.openecomp.sdc.versioning.dao.types.VersionStatus.Final.name(), USER1);
+    int nonFinalFoundCount = 0;
+    for (VersionedVendorSoftwareProductInfo vsp : vspDetailsList) {
+      if (vsp.getVspDetails().getId().equals(id001) || vsp.getVspDetails().getId().equals(id002) ||
+          vsp.getVspDetails().getId().equals(id003)) {
+        nonFinalFoundCount++;
+      }
+    }
+
+    Assert.assertEquals(nonFinalFoundCount, 0);
+  }
+
+  @Test(dependsOnMethods = "testListFinalVspsWhenNone")
+  public void testSubmitWithoutLicencingData() throws IOException {
+    ValidationResponse validationResponse = vendorSoftwareProductManager.submit(id002, USER2);
+    Assert.assertNotNull(validationResponse);
+    Assert.assertFalse(validationResponse.isValid());
+    List<String> errorIds = validationResponse.getVspErrors().stream().map(ErrorCode::id).distinct()
+        .collect(Collectors.toList());
+    Assert.assertTrue(errorIds.contains(ValidationErrorBuilder.FIELD_VALIDATION_ERROR_ERR_ID));
+    Assert.assertTrue(errorIds.contains(VendorSoftwareProductErrorCodes.VSP_INVALID));
+  }
+
+  @Test(dependsOnMethods = {"testSubmitWithoutLicencingData"})
+  public void testSubmitWithoutUploadData() throws IOException {
+    vendorSoftwareProductManager.checkout(id002, USER2);
+
+    VspDetails updatedVsp2 =
+        vendorSoftwareProductManager.getVspDetails(id002, null, USER2).getVspDetails();
+    updatedVsp2.setFeatureGroups(new ArrayList<>());
+    updatedVsp2.getFeatureGroups().add(featureGroupId);
+    updatedVsp2.setLicenseAgreement(licenseAgreementId);
+
+    vendorSoftwareProductManager.updateVsp(updatedVsp2, USER2);
+    activeVersion002 = vendorSoftwareProductManager.checkin(id002, USER2);
+
+    ValidationResponse validationResponse = vendorSoftwareProductManager.submit(id002, USER2);
+    Assert.assertNotNull(validationResponse);
+    Assert.assertFalse(validationResponse.isValid());
+    Assert.assertTrue(validationResponse.getVspErrors().size() > 0);
+  }
+
+  @Test(dependsOnMethods = {"testSubmitWithoutUploadData"})
+  public void testUploadFile() throws IOException {
+    activeVersion002 = vendorSoftwareProductManager.checkout(id002, USER1);
+    testLegalUpload(id002, activeVersion002,
+        getFileInputStream("/vspmanager/zips/emptyComposition.zip"), USER1);
+  }
+
+/*    @Test(dependsOnMethods = {"testUploadFile"})
+    public void testUploadFile2() throws IOException {
+        testLegalUpload(id002, activeVersion002, ut.getZipInputStream("/legalUpload2"), USER1);
+    }*/
+
+  @Test
+  public void testDownloadFile() throws IOException {
+    VspDetails expectedVsp = VSPCommon
+        .createVspDetails(null, null, String.format("VSP-test-%s", vlm1Id), "Test-vsp",
+            "vendorName", vlm1Id, "icon", "category", "subCategory", "123", null);
+    VspDetails createdVsp = vendorSoftwareProductManager.createNewVsp(expectedVsp, USER1);
+
+    id005 = createdVsp.getId();
+    Assert.assertNotNull(id005);
+    Assert.assertNotNull(createdVsp.getVersion());
+
+    //InputStream zipInputStream = getFileInputStream("/legalUpload/zip/legalUpload.zip")
+    try (InputStream zipInputStream = ut.getZipInputStream("/legalUpload")) {
+
+      UploadFileResponse resp =
+          vendorSoftwareProductManager.uploadFile(id005, zipInputStream, USER1);
+      File latestHeatPackage = vendorSoftwareProductManager.getLatestHeatPackage(id005, USER1);
+
+      zipInputStream.reset();
+      byte[] uploaded = IOUtils.toByteArray(zipInputStream);
+
+      byte[] downloaded;
+      try (BufferedInputStream fileStream = new BufferedInputStream(
+          new FileInputStream(latestHeatPackage))) {
+        downloaded = IOUtils.toByteArray(fileStream);
+      }
+
+      Assert.assertTrue(Arrays.equals(uploaded, downloaded));
+    }
+  }
+
+  @Test(dependsOnMethods = {"testUploadFile"})
+  public void testUploadNotExistingFile() throws IOException {
+    URL url = this.getClass().getResource("notExist.zip");
+    testLegalUpload(id002, activeVersion002, url == null ? null : url.openStream(), USER1);
+  }
+
+  @Test(dependsOnMethods = {"testUploadFile"}, expectedExceptions = CoreException.class)
+  public void negativeTestCreatePackageBeforeSubmit() throws IOException {
+    vendorSoftwareProductManager.createPackage(id002, USER1);
+  }
+
+  @Test(dependsOnMethods = {"negativeTestCreatePackageBeforeSubmit"})
+  public void negativeTestGetVSPDetailsNonExistingVersion() {
+    try {
+      vendorSoftwareProductManager.getVspDetails(id002, new Version(43, 8), USER1);
+      Assert.assertTrue(false);
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), VersioningErrorCodes.REQUESTED_VERSION_INVALID);
+    }
+  }
+
+  @Test(dependsOnMethods = {"negativeTestCreatePackageBeforeSubmit"})
+  public void negativeTestGetVSPDetailsCheckoutByOtherVersion() {
+    try {
+      vendorSoftwareProductManager.getVspDetails(id002, activeVersion002, USER2);
+      Assert.assertTrue(false);
+    } catch (CoreException e) {
+      Assert.assertEquals(e.code().id(), VersioningErrorCodes.REQUESTED_VERSION_INVALID);
+    }
+  }
+
+  @Test(dependsOnMethods = {"negativeTestCreatePackageBeforeSubmit"})
+  public void testGetVSPDetailsCandidateVersion() {
+    VersionedVendorSoftwareProductInfo actualVsp =
+        vendorSoftwareProductManager.getVspDetails(id002, new Version(0, 3), USER1);
+
+    VspDetails expectedVsp = vendorSoftwareProductDao
+        .getVendorSoftwareProductInfo(new VspDetails(id002, new Version(0, 3)));
+    assertVspsEquals(actualVsp.getVspDetails(), expectedVsp);
+    Assert.assertEquals(actualVsp.getVersionInfo().getActiveVersion(), new Version(0, 3));
+    Assert.assertEquals(actualVsp.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Locked);
+    Assert.assertEquals(actualVsp.getVersionInfo().getLockingUser(), USER1);
+  }
+
+  @Test(dependsOnMethods = {"negativeTestCreatePackageBeforeSubmit"})
+  public void testGetVSPDetailsOldVersion() {
+    VersionedVendorSoftwareProductInfo actualVsp =
+        vendorSoftwareProductManager.getVspDetails(id002, new Version(0, 1), USER2);
+
+    VspDetails expectedVsp = vendorSoftwareProductDao
+        .getVendorSoftwareProductInfo(new VspDetails(id002, new Version(0, 1)));
+    assertVspsEquals(actualVsp.getVspDetails(), expectedVsp);
+    Assert.assertEquals(actualVsp.getVersionInfo().getActiveVersion(), new Version(0, 2));
+    Assert.assertEquals(actualVsp.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Locked);
+    Assert.assertEquals(actualVsp.getVersionInfo().getLockingUser(), USER1);
+  }
+
+  @Test(dependsOnMethods = {"negativeTestGetVSPDetailsNonExistingVersion",
+      "negativeTestGetVSPDetailsCheckoutByOtherVersion", "testGetVSPDetailsCandidateVersion",
+      "testGetVSPDetailsOldVersion"})
+  public void testSubmit() throws IOException {
+    activeVersion002 = vendorSoftwareProductManager.checkin(id002, USER1);
+    ValidationResponse validationResponse = vendorSoftwareProductManager.submit(id002, USER1);
+    Assert.assertTrue(validationResponse.isValid());
+
+    VersionedVendorSoftwareProductInfo vsp2 =
+        vendorSoftwareProductManager.getVspDetails(id002, null, USER1);
+    Assert.assertEquals(vsp2.getVersionInfo().getActiveVersion(), VERSION10);
+    Assert.assertEquals(vsp2.getVersionInfo().getStatus(), org.openecomp.sdc.versioning.dao.types.VersionStatus.Final);
+    Assert.assertNull(vsp2.getVersionInfo().getLockingUser());
+  }
+
+  @Test(dependsOnMethods = {"testSubmit"})
+  public void testListFinalVspsWhenExist() {
+    List<VersionedVendorSoftwareProductInfo> vspDetailsList =
+        vendorSoftwareProductManager.getVspList(
+            org.openecomp.sdc.versioning.dao.types.VersionStatus.Final.name(), USER1);
+    int nonFinalFoundCount = 0;
+    boolean found002 = false;
+    for (VersionedVendorSoftwareProductInfo vsp : vspDetailsList) {
+      if (vsp.getVspDetails().getId().equals(id002)) {
+        found002 = true;
+      }
+      if (vsp.getVspDetails().getId().equals(id001) || vsp.getVspDetails().getId().equals(id003)) {
+        nonFinalFoundCount++;
+      }
+    }
+
+    Assert.assertEquals(nonFinalFoundCount, 0);
+    Assert.assertTrue(found002);
+  }
+
+  @Test(dependsOnMethods = {"testSubmit"})
+  public void testCreatePackage() throws IOException {
+    PackageInfo packageInfo = vendorSoftwareProductManager.createPackage(id002, USER1);
+    Assert.assertNotNull(packageInfo.getVspId());
+  }
+
+  @Test
+  public void testUploadFileWithoutManifest() {
+    InputStream zis = getFileInputStream("/vspmanager/zips/withoutManifest.zip");
+    VspDetails vspDetails = vendorSoftwareProductManager.createNewVsp(VSPCommon
+        .createVspDetails(null, null, "VSP5", "Test-vsp", "vendorName", vlm1Id, "icon", "category",
+            "subCategory", "456", null), USER1);
+    id004 = vspDetails.getId();
+
+    UploadFileResponse uploadFileResponse =
+        vendorSoftwareProductManager.uploadFile(id004, zis, USER1);
+
+    Assert.assertNotNull(uploadFileResponse.getErrors());
+    Assert.assertEquals(uploadFileResponse.getErrors().size(), 1);
+  }
+
+  @Test(dependsOnMethods = {"testUploadFileWithoutManifest"})
+  public void testUploadFileMissingFile() {
+    InputStream zis = getFileInputStream("/vspmanager/zips/missingYml.zip");
+
+    UploadFileResponse uploadFileResponse =
+        vendorSoftwareProductManager.uploadFile(id004, zis, USER1);
+
+    Assert.assertEquals(uploadFileResponse.getErrors().size(), 3);
+  }
+
+  @Test(dependsOnMethods = {"testUploadFileMissingFile"})
+  public void testUploadNotZipFile() throws IOException {
+    URL url = this.getClass().getResource("/notZipFile");
+    UploadFileResponse uploadFileResponse =
+        vendorSoftwareProductManager.uploadFile(id004, url.openStream(), USER1);
+
+    Assert.assertNotNull(uploadFileResponse.getErrors());
+    Assert.assertEquals(
+        uploadFileResponse.getErrors().get(AsdcCommon.UPLOAD_FILE).get(0).getMessage(),
+        Messages.INVALID_ZIP_FILE.getErrorMessage());
+  }
+
+  @Test
+  public void testEnrichModelInSubmit() {
+    UniqueValueUtil
+        .deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+            "VSP_syb");
+    VspDetails vspDetails = vendorSoftwareProductManager.createNewVsp(VSPCommon
+        .createVspDetails(null, null, "VSP_syb", "Test-vsp_syb", "vendorName", vlm1Id, "icon",
+            "category", "subCategory", "456", null), USER1);
+    String id = vspDetails.getId();
+
+    //upload file
+    InputStream zis = getFileInputStream("/vspmanager/zips/fullComposition.zip");
+    UploadFileResponse uploadFileResponse = vendorSoftwareProductManager.uploadFile(id, zis, USER1);
+
+    //check in
+    vendorSoftwareProductManager.checkin(id, USER1);
+    //submit
+    try {
+      ValidationResponse result = vendorSoftwareProductManager.submit(id, USER1);
+    } catch (IOException e) {
+      Assert.fail();
+    }
+    VersionedVendorSoftwareProductInfo details =
+        vendorSoftwareProductManager.getVspDetails(id, null, USER1);
+    Collection<org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity> components = vendorSoftwareProductManager
+        .listComponents(id, details.getVersionInfo().getActiveVersion(), USER1);
+
+    ToscaServiceModel model =
+        (ToscaServiceModel) EnrichedServiceModelDaoFactory.getInstance().createInterface()
+            .getServiceModel(id, details.getVersionInfo().getActiveVersion());
+
+    Map<String, CapabilityDefinition> capabilities = new HashMap<>();
+    for (org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity component : components) {
+      model.getServiceTemplates().
+          entrySet().
+          stream().
+          filter(entryValue -> entryValue.getValue() != null &&
+              entryValue.getValue().getNode_types() != null &&
+              entryValue.getValue().
+                  getNode_types().
+                  containsKey(component.getComponentCompositionData().getName())).
+          forEach(entryValue -> entryValue.getValue().getNode_types().
+              values().
+              stream().
+              filter(type -> MapUtils.isNotEmpty(type.getCapabilities())).
+              forEach(type -> type.getCapabilities().
+                  entrySet().
+                  forEach(entry -> addCapability(entryValue.getKey(), capabilities, entry.getKey(),
+                      entry.getValue()))));
+
+    }
+
+    Assert.assertNotNull(capabilities);
+  }
+
+  @Test(dependsOnMethods = {"testEnrichModelInSubmit"})
+  public void testVSPListSortedByModificationTimeDescOreder() {
+    vsp1 = VSPCommon
+        .createVspDetails(null, null, "vsp1_test", "Test-vsp", "vendorName", vlm1Id, "icon",
+            "category", "subCategory", "123", null);
+    id006 = vendorSoftwareProductManager.createNewVsp(vsp1, USER3).getId();
+
+    vsp2 = VSPCommon
+        .createVspDetails(null, null, "vsp2_test", "Test-vsp", "vendorName", vlm1Id, "icon",
+            "category", "subCategory", "123", null);
+    id007 = vendorSoftwareProductManager.createNewVsp(vsp2, USER3).getId();
+
+    assertVSPInWantedLocationInVSPList(id007, 0, USER3);
+    assertVSPInWantedLocationInVSPList(id006, 1, USER3);
+  }
+
+  @Test(dependsOnMethods = {"testVSPListSortedByModificationTimeDescOreder"})
+  public void testUpdatedVSPShouldBeInBeginningOfList() {
+    vendorSoftwareProductManager.updateVsp(vsp1, USER3);
+    assertVSPInWantedLocationInVSPList(id006, 0, USER3);
+
+    vendorSoftwareProductManager
+        .uploadFile(id007, getFileInputStream("/vspmanager/zips/emptyComposition.zip"), USER3);
+    assertVSPInWantedLocationInVSPList(id007, 0, USER3);
+  }
+
+  @Test(dependsOnMethods = {"testUpdatedVSPShouldBeInBeginningOfList"})
+  public void testVSPInBeginningOfListAfterCheckin() {
+    vendorSoftwareProductManager.checkin(id006, USER3);
+    assertVSPInWantedLocationInVSPList(id006, 0, USER3);
+
+    vendorSoftwareProductManager.checkin(id007, USER3);
+    assertVSPInWantedLocationInVSPList(id007, 0, USER3);
+  }
+
+  @Test(dependsOnMethods = {"testVSPInBeginningOfListAfterCheckin"})
+  public void testVSPInBeginningOfListAfterCheckout() {
+    vendorSoftwareProductManager.checkout(id006, USER3);
+    assertVSPInWantedLocationInVSPList(id006, 0, USER3);
+  }
+
+  @Test(dependsOnMethods = {"testVSPInBeginningOfListAfterCheckout"})
+  public void testVSPInBeginningOfListAfterUndoCheckout() {
+    vendorSoftwareProductManager.checkout(id007, USER3);
+    assertVSPInWantedLocationInVSPList(id007, 0, USER3);
+
+    vendorSoftwareProductManager.undoCheckout(id006, USER3);
+    assertVSPInWantedLocationInVSPList(id006, 0, USER3);
+  }
+
+  @Test(dependsOnMethods = {"testVSPInBeginningOfListAfterUndoCheckout"})
+  public void testVSPInBeginningOfListAfterSubmit() throws IOException {
+    vendorSoftwareProductManager.checkin(id007, USER3);
+    vendorSoftwareProductManager.submit(id007, USER3);
+
+    assertVSPInWantedLocationInVSPList(id007, 0, USER3);
+  }
+
+  private void testLegalUpload(String vspId, Version version, InputStream upload, String user) {
+    vendorSoftwareProductManager.uploadFile(vspId, upload, user);
+
+    UploadDataEntity uploadData =
+        vendorSoftwareProductDao.getUploadData(new UploadDataEntity(vspId, version));
+    Assert.assertNotNull(uploadData);
+    Assert.assertNotNull(uploadData.getContentData());
+  }
+
+  private void addCapability(String entryValueKey, Map<String, CapabilityDefinition> capabilities,
+                             String key, CapabilityDefinition value) {
+
+    capabilities.put(entryValueKey + "_" + key, value);
+  }
+
+  private InputStream getFileInputStream(String fileName) {
+    URL url = this.getClass().getResource(fileName);
+    try {
+      return url.openStream();
+    } catch (IOException e) {
+      e.printStackTrace();
+      return null;
+    }
+  }
+
+  private void assertVSPInWantedLocationInVSPList(String vspId, int location, String user) {
+    List<VersionedVendorSoftwareProductInfo> vspList =
+        vendorSoftwareProductManager.getVspList(null, user);
+    Assert.assertEquals(vspList.get(location).getVspDetails().getId(), vspId);
+  }
+}
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/CompositionDataExtractorTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/CompositionDataExtractorTest.java
new file mode 100644
index 0000000..55f30db
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/CompositionDataExtractorTest.java
@@ -0,0 +1,280 @@
+package org.openecomp.sdc.vendorsoftwareproduct.services;
+
+import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
+import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
+import org.openecomp.sdc.tosca.services.yamlutil.ToscaExtensionYamlUtil;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.io.*;
+import java.net.URL;
+import java.nio.file.NotDirectoryException;
+import java.util.HashMap;
+import java.util.Map;
+
+public class CompositionDataExtractorTest {
+
+
+  private static ToscaServiceModel loadToscaServiceModel(String serviceTemplatesPath,
+                                                         String globalServiceTemplatesPath,
+                                                         String entryDefinitionServiceTemplate)
+      throws IOException {
+    ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
+    Map<String, ServiceTemplate> serviceTemplates = new HashMap<>();
+    if (entryDefinitionServiceTemplate == null) {
+      entryDefinitionServiceTemplate = "MainServiceTemplate.yaml";
+    }
+
+    loadServiceTemplates(serviceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
+    if (globalServiceTemplatesPath != null) {
+      loadServiceTemplates(globalServiceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
+    }
+
+    return new ToscaServiceModel(null, serviceTemplates, entryDefinitionServiceTemplate);
+  }
+
+  private static void loadServiceTemplates(String serviceTemplatesPath,
+                                           ToscaExtensionYamlUtil toscaExtensionYamlUtil,
+                                           Map<String, ServiceTemplate> serviceTemplates)
+      throws IOException {
+    URL urlFile = CompositionDataExtractorTest.class.getResource(serviceTemplatesPath);
+    if (urlFile != null) {
+      File pathFile = new File(urlFile.getFile());
+      File[] files = pathFile.listFiles();
+      if (files != null) {
+        addServiceTemplateFiles(serviceTemplates, files, toscaExtensionYamlUtil);
+      } else {
+        throw new NotDirectoryException(serviceTemplatesPath);
+      }
+    } else {
+      throw new NotDirectoryException(serviceTemplatesPath);
+    }
+  }
+
+  private static void addServiceTemplateFiles(Map<String, ServiceTemplate> serviceTemplates,
+                                              File[] files,
+                                              ToscaExtensionYamlUtil toscaExtensionYamlUtil)
+      throws IOException {
+    for (File file : files) {
+      try (InputStream yamlFile = new FileInputStream(file)) {
+        ServiceTemplate serviceTemplateFromYaml =
+            toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
+        serviceTemplates.put(file.getName(), serviceTemplateFromYaml);
+        try {
+          yamlFile.close();
+        } catch (IOException ignore) {
+        }
+      } catch (FileNotFoundException e) {
+        throw e;
+      } catch (IOException e) {
+        throw e;
+      }
+    }
+  }
+
+  @Test
+  public void testExtractNetworks() throws Exception {
+    ToscaServiceModel toscaServiceModel =
+        loadToscaServiceModel("/extractServiceComposition/networks/",
+            "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
+    org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData compositionData =
+        CompositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
+    Assert.assertEquals(compositionData.getComponents().size(), 0);
+    Assert.assertEquals(compositionData.getNetworks().size(), 7);
+
+    for (org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network network : compositionData.getNetworks()) {
+      boolean dhcp = network.isDhcp();
+      switch (network.getName()) {
+        case "contail-net-default-true-dhcp":
+          Assert.assertEquals(dhcp, true);
+          break;
+        case "contail-net-dhcp-false-param":
+          Assert.assertEquals(dhcp, false);
+          break;
+        case "contail-net-dhcp-false":
+          Assert.assertEquals(dhcp, false);
+          break;
+        case "contail-net-dhcp-true-param":
+          Assert.assertEquals(dhcp, true);
+          break;
+        case "contail-net-dhcp-true":
+          Assert.assertEquals(dhcp, true);
+          break;
+        case "contail-net-dhcp-default-true-param":
+          Assert.assertEquals(dhcp, true);
+          break;
+        case "neutron-net-default-dhcp":
+          Assert.assertEquals(dhcp, true);
+          break;
+        default:
+          throw new Exception("Unexpected Network Name " + network.getName());
+      }
+
+    }
+  }
+
+  @Test
+  public void testExtractOnlyComponents() throws Exception {
+    ToscaServiceModel toscaServiceModel =
+        loadToscaServiceModel("/extractServiceComposition/onlyComponents/",
+            "/extractServiceComposition/toscaGlobalServiceTemplates/", "OnlyComponentsST.yaml");
+    org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData compositionData =
+        CompositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
+    Assert.assertEquals(compositionData.getComponents().size(), 3);
+    Assert.assertEquals(compositionData.getNetworks().size(), 0);
+
+    for (org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component component : compositionData.getComponents()) {
+      switch (component.getData().getName()) {
+        case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
+          Assert.assertNull(component.getNics());
+          Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
+          break;
+        case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
+          Assert.assertNull(component.getNics());
+          Assert.assertEquals(component.getData().getDisplayName(), "Server");
+          break;
+        case "org.openecomp.resource.vfc.nodes.heat.pcm":
+          Assert.assertNull(component.getNics());
+          Assert.assertEquals(component.getData().getDisplayName(), "pcm");
+          break;
+        default:
+          throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
+      }
+    }
+  }
+
+  @Test
+  public void testExtractComponentsWithPorts() throws Exception {
+
+    ToscaServiceModel toscaServiceModel =
+        loadToscaServiceModel("/extractServiceComposition/componentsWithPort/",
+            "/extractServiceComposition/toscaGlobalServiceTemplates/", "ComponentsWithPortST.yaml");
+    org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData compositionData =
+        CompositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
+
+    Assert.assertEquals(compositionData.getComponents().size(), 3);
+    Assert.assertEquals(compositionData.getNetworks().size(), 0);
+
+    for (org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component component : compositionData.getComponents()) {
+      switch (component.getData().getName()) {
+        case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
+          Assert.assertEquals(component.getNics().size(), 1);
+          Assert.assertEquals(component.getNics().get(0).getName(), "psm01_port_0");
+          Assert.assertNull(component.getNics().get(0).getNetworkName());
+          Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
+          break;
+        case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
+          Assert.assertEquals(component.getNics().size(), 1);
+          Assert.assertEquals(component.getNics().get(0).getName(), "FSB1_Internal2");
+          Assert.assertNull(component.getNics().get(0).getNetworkName());
+          Assert.assertEquals(component.getData().getDisplayName(), "Server");
+          break;
+        case "org.openecomp.resource.vfc.nodes.heat.pcm":
+          Assert.assertEquals(component.getNics().size(), 2);
+          Assert.assertEquals(component.getData().getDisplayName(), "pcm");
+          break;
+        default:
+          throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
+      }
+    }
+  }
+
+  @Test
+  public void testExtractFullComposition() throws Exception {
+
+    ToscaServiceModel toscaServiceModel =
+        loadToscaServiceModel("/extractServiceComposition/fullComposition/",
+            "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
+    org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData compositionData =
+        CompositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
+    Assert.assertEquals(compositionData.getComponents().size(), 3);
+    Assert.assertEquals(compositionData.getNetworks().size(), 3);
+
+    for (org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component component : compositionData.getComponents()) {
+      switch (component.getData().getName()) {
+        case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
+          Assert.assertEquals(component.getNics().size(), 1);
+          Assert.assertEquals(component.getNics().get(0).getName(), "psm01_port_0");
+          Assert.assertNull(component.getNics().get(0).getNetworkName());
+          Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
+          break;
+        case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
+          Assert.assertEquals(component.getNics().size(), 3);
+          Assert.assertEquals(component.getData().getDisplayName(), "Server");
+          for (org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic port : component.getNics()) {
+            switch (port.getName()) {
+              case "FSB1_Internal2_port":
+                Assert.assertEquals(port.getNetworkName(), "Internal2-net");
+                break;
+              case "FSB1_OAM_Port":
+                Assert.assertNull(port.getNetworkName());
+                break;
+              case "FSB1_Internal1_port":
+                Assert.assertEquals(port.getNetworkName(), "Internal1-net");
+                break;
+              default:
+                throw new Exception("Unexpected Nic " + port.getName());
+            }
+          }
+          break;
+        case "org.openecomp.resource.vfc.nodes.heat.pcm":
+          Assert.assertEquals(component.getNics().size(), 2);
+          Assert.assertEquals(component.getData().getDisplayName(), "pcm");
+          break;
+        default:
+          throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
+      }
+    }
+  }
+
+  @Test
+  public void testExtractSubstitutionComposition() throws Exception {
+
+    ToscaServiceModel toscaServiceModel =
+        loadToscaServiceModel("/extractServiceComposition/substitution/",
+            "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
+    org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData compositionData =
+        CompositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
+    Assert.assertEquals(compositionData.getComponents().size(), 2);
+    Assert.assertEquals(compositionData.getNetworks().size(), 4);
+
+    for (org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component component : compositionData.getComponents()) {
+      switch (component.getData().getName()) {
+        case "org.openecomp.resource.vfc.nodes.heat.cmaui_image":
+          Assert.assertEquals(component.getNics().size(), 1);
+          Assert.assertEquals(component.getNics().get(0).getName(), "cmaui_port_1");
+          Assert.assertEquals(component.getNics().get(0).getNetworkName(), "test_net1");
+          Assert.assertEquals(component.getData().getDisplayName(), "cmaui_image");
+          break;
+        case "org.openecomp.resource.vfc.nodes.heat.abc_image":
+          Assert.assertEquals(component.getNics().size(), 1);
+          Assert.assertEquals(component.getNics().get(0).getName(), "abc_port_1");
+          Assert.assertEquals(component.getNics().get(0).getNetworkName(), "test_net2");
+          Assert.assertEquals(component.getData().getDisplayName(), "abc_image");
+          break;
+        default:
+          throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
+      }
+    }
+    for (org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network network : compositionData.getNetworks()) {
+      boolean dhcp = network.isDhcp();
+      switch (network.getName()) {
+        case "test_net2":
+          Assert.assertEquals(dhcp, true);
+          break;
+        case "test_net1":
+          Assert.assertEquals(dhcp, true);
+          break;
+        case "Internal1-net": // same network display twice since define in 2 nested files with the same key
+          Assert.assertEquals(dhcp, true);
+          break;
+        default:
+          throw new Exception("Unexpected Network Name " + network.getName());
+      }
+
+    }
+  }
+
+
+}
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/CompositionEntityDataManagerTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/CompositionEntityDataManagerTest.java
new file mode 100644
index 0000000..e1ddcdc
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/CompositionEntityDataManagerTest.java
@@ -0,0 +1,141 @@
+package org.openecomp.sdc.vendorsoftwareproduct.services;
+
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspQuestionnaireEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityValidationData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.NetworkCompositionSchemaInput;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.apache.commons.collections.CollectionUtils;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.util.Collection;
+import java.util.Map;
+
+public class CompositionEntityDataManagerTest {
+
+  public static final String VSP1 = "vsp1";
+  public static final String COMPONENT1 = "component1";
+  public static final String NIC1 = "nic1";
+  private static CompositionEntityDataManager compositionEntityDataManager =
+      new CompositionEntityDataManager();
+  private static Map<CompositionEntityId, Collection<String>> errorsById;
+
+  private static void assertValidationData(CompositionEntityValidationData validationData,
+                                           String id, CompositionEntityType type,
+                                           boolean hasErrors) {
+    Assert.assertNotNull(validationData);
+    Assert.assertEquals(validationData.getEntityId(), id);
+    Assert.assertEquals(validationData.getEntityType(), type);
+    Assert.assertTrue(CollectionUtils.isNotEmpty(validationData.getErrors()) == hasErrors);
+  }
+
+  @Test(expectedExceptions = CoreException.class)
+  public void testAddNullEntity_negative() {
+    compositionEntityDataManager.addEntity(null, null);
+  }
+
+  @Test
+  public void testAddEntity() {
+    compositionEntityDataManager
+        .addEntity(new VspQuestionnaireEntity(VSP1, new Version(0, 1)), null);
+
+    String invalidQuestionnaireData = "{\"a\": \"b\"}";
+
+    ComponentEntity component = new ComponentEntity(VSP1, new Version(0, 1), COMPONENT1);
+    component.setQuestionnaireData(invalidQuestionnaireData);
+    compositionEntityDataManager.addEntity(component, null);
+
+    org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity
+        nic = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity(VSP1, new Version(0, 1), COMPONENT1, NIC1);
+    nic.setQuestionnaireData(invalidQuestionnaireData);
+    compositionEntityDataManager.addEntity(nic, null);
+  }
+
+  @Test(dependsOnMethods = "testAddEntity")
+  public void testValidateEntitiesQuestionnaire() {
+    errorsById = compositionEntityDataManager.validateEntitiesQuestionnaire();
+    Assert.assertNotNull(errorsById);
+    Assert.assertEquals(errorsById.size(), 2); // both component and nic data don't mach schemas
+    CompositionEntityId nicId =
+        new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity(VSP1, new Version(0, 1), COMPONENT1, NIC1).getCompositionEntityId();
+    Assert.assertTrue(errorsById.containsKey(nicId));
+    Assert.assertTrue(errorsById.containsKey(nicId.getParentId()));
+  }
+
+  @Test(dependsOnMethods = "testAddEntity")
+  public void testBuildTrees() {
+    compositionEntityDataManager.buildTrees();
+  }
+
+  @Test(dependsOnMethods = "testBuildTrees")
+  public void testAddErrorsToTrees() {
+    compositionEntityDataManager.addErrorsToTrees(errorsById);
+  }
+
+  @Test(dependsOnMethods = "testAddErrorsToTrees")
+  public void testGetTrees() {
+    Collection<CompositionEntityValidationData> trees = compositionEntityDataManager.getTrees();
+    Assert.assertNotNull(trees);
+    Assert.assertEquals(trees.size(), 1);
+
+    CompositionEntityValidationData vspValidationData = trees.iterator().next();
+    assertValidationData(vspValidationData, VSP1, CompositionEntityType.vsp, false);
+    Assert.assertEquals(vspValidationData.getSubEntitiesValidationData().size(), 1);
+
+    CompositionEntityValidationData componentValidationData =
+        vspValidationData.getSubEntitiesValidationData().iterator().next();
+    assertValidationData(componentValidationData, COMPONENT1, CompositionEntityType.component,
+        true);
+    Assert.assertEquals(componentValidationData.getSubEntitiesValidationData().size(), 1);
+
+    CompositionEntityValidationData nicValidationData =
+        componentValidationData.getSubEntitiesValidationData().iterator().next();
+    assertValidationData(nicValidationData, NIC1, CompositionEntityType.nic, true);
+    Assert.assertNull(nicValidationData.getSubEntitiesValidationData());
+  }
+
+  @Test
+  public void testValidateValidEntity() {
+    NetworkEntity networkEntity = new NetworkEntity(VSP1, new Version(0, 1), "network1");
+    Network network = new Network();
+    network.setName("network1 name");
+    network.setDhcp(true);
+    networkEntity.setNetworkCompositionData(network);
+
+    NetworkCompositionSchemaInput schemaTemplateInput = new NetworkCompositionSchemaInput();
+    schemaTemplateInput.setManual(false);
+    schemaTemplateInput.setNetwork(network);
+
+    CompositionEntityValidationData validationData = CompositionEntityDataManager
+        .validateEntity(networkEntity, SchemaTemplateContext.composition, schemaTemplateInput);
+    assertValidationData(validationData, "network1", CompositionEntityType.network, false);
+  }
+
+  @Test
+  public void testValidateInvalidEntity() {
+    NetworkEntity networkEntity = new NetworkEntity(VSP1, new Version(0, 1), "network1");
+    Network network = new Network();
+    network.setName("network1 name changed");
+    network.setDhcp(false);
+    networkEntity.setNetworkCompositionData(network);
+
+    NetworkCompositionSchemaInput schemaTemplateInput = new NetworkCompositionSchemaInput();
+    schemaTemplateInput.setManual(false);
+    Network origNetwork = new Network();
+    origNetwork.setName("network1 name");
+    origNetwork.setDhcp(true);
+    schemaTemplateInput.setNetwork(origNetwork);
+
+    CompositionEntityValidationData validationData = CompositionEntityDataManager
+        .validateEntity(networkEntity, SchemaTemplateContext.composition, schemaTemplateInput);
+    assertValidationData(validationData, "network1", CompositionEntityType.network, true);
+    Assert.assertEquals(validationData.getErrors().size(), 2);
+  }
+}
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/QuestionnaireSchemaTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/QuestionnaireSchemaTest.java
new file mode 100644
index 0000000..4d03b59
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/QuestionnaireSchemaTest.java
@@ -0,0 +1,64 @@
+package org.openecomp.sdc.vendorsoftwareproduct.services;
+
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspQuestionnaireEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.core.utilities.file.FileUtils;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+public class QuestionnaireSchemaTest {
+
+  public static final String VSP1 = "vsp1";
+  public static final String COMPONENT1 = "component1";
+  public static final String NIC1 = "nic1";
+  private static CompositionEntityDataManager compositionEntityDataManager =
+      new CompositionEntityDataManager();
+  private static Map<CompositionEntityId, Collection<String>> errorsById;
+  private static org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity componentEntity;
+  private static org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity nicEntity;
+
+  private static String loadFileToString(String path) {
+    return new String(FileUtils.toByteArray(FileUtils.loadFileToInputStream(path)));
+  }
+
+  @Test
+  public void testAddEntity() {
+    compositionEntityDataManager
+        .addEntity(new VspQuestionnaireEntity(VSP1, new Version(0, 1)), null);
+
+    componentEntity = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity(VSP1, new Version(0, 1), COMPONENT1);
+    nicEntity = new org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity(VSP1, new Version(0, 1), COMPONENT1, NIC1);
+    compositionEntityDataManager.addEntity(componentEntity, null);
+
+    componentEntity.setQuestionnaireData(loadFileToString("quesionnaire/validComponent.json"));
+    nicEntity.setQuestionnaireData(loadFileToString("quesionnaire/validNic.json"));
+    compositionEntityDataManager.addEntity(nicEntity, null);
+  }
+
+  @Test(dependsOnMethods = "testAddEntity")
+  public void testNicAndComponentValidQuestionnaire() {
+    errorsById = compositionEntityDataManager.validateEntitiesQuestionnaire();
+    Assert.assertEquals(errorsById.size(), 0);
+  }
+
+  @Test(dependsOnMethods = "testNicAndComponentValidQuestionnaire")
+  public void testComponentInvalidQuestionnaire() {
+    componentEntity.setQuestionnaireData(loadFileToString("quesionnaire/invalidComponent.json"));
+    compositionEntityDataManager.addEntity(componentEntity, null);
+
+    errorsById = compositionEntityDataManager.validateEntitiesQuestionnaire();
+    Assert.assertEquals(errorsById.size(), 1);
+
+    CompositionEntityId component = errorsById.keySet().iterator().next();
+    List<String> errors = (List<String>) errorsById.get(component);
+    Assert.assertEquals(errors.size(), 1);
+    Assert.assertEquals(errors.get(0),
+        "#/general/recovery/pointObjective: 20.0 is not lower or equal to 15");
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/QuestionnaireValidatorTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/QuestionnaireValidatorTest.java
new file mode 100644
index 0000000..0dedacb
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/QuestionnaireValidatorTest.java
@@ -0,0 +1,74 @@
+package org.openecomp.sdc.vendorsoftwareproduct.services;
+
+public class QuestionnaireValidatorTest {
+/*
+    public static QuestionnaireValidator validator = new QuestionnaireValidator();
+
+    @Test(expectedExceptions = CoreException.class)
+    public void testAddSubEntityBeforeRoot_negative() {
+        validator.addSubEntity(createComponent("componentId2"), CompositionEntityType.vsp);
+    }
+
+    @Test(dependsOnMethods = "testAddSubEntityBeforeRoot_negative")
+    public void testAddRootEntity() {
+        validator.addRootEntity(createVspQuestionnaireEntity());
+    }
+
+    @Test(dependsOnMethods = "testAddRootEntity", expectedExceptions = CoreException.class)
+    public void testAddRootEntityWhenAlreadyExist_negative() {
+        validator.addRootEntity(createVspQuestionnaireEntity());
+    }
+
+    @Test(dependsOnMethods = "testAddRootEntity")
+    public void testAddSubEntity() {
+        validator.addSubEntity(createComponent("componentId1"), CompositionEntityType.vsp);
+    }
+
+    @Test(dependsOnMethods = "testAddRootEntity", expectedExceptions = CoreException.class)
+    public void testAddSubEntityWithNonExistingParentType() {
+        validator.addSubEntity(new ComponentEntity("vspId1", new Version(0, 1), "componentId2"), CompositionEntityType.nic);
+    }
+
+    @Test(dependsOnMethods = "testAddSubEntity")
+    public void testAddSubEntities() throws Exception {
+        Collection<CompositionEntity> nics = new ArrayList<>();
+        nics.add(createNic("nicId1", "componentId1"));
+        nics.add(createNic("nicId2", "componentId1"));
+        nics.add(createNic("nicId3", "componentId1"));
+
+        validator.addSubEntities(nics, CompositionEntityType.component);
+    }
+
+
+    @Test(dependsOnMethods = "testAddSubEntities")
+    public void testValidate() throws Exception {
+        QuestionnaireValidationResult validationResult = validator.validate();
+        Assert.assertTrue(validationResult.isValid());
+    }
+
+    private static VspQuestionnaireEntity createVspQuestionnaireEntity() {
+        VspQuestionnaireEntity vspQuestionnaireEntity = new VspQuestionnaireEntity();
+        vspQuestionnaireEntity.setId("vspId1");
+        vspQuestionnaireEntity.setVersion(new Version(0, 1));
+        vspQuestionnaireEntity.setQuestionnaireData("{\n" +
+                "  \"name\": \"bla bla\"\n" +
+                "}");
+        return vspQuestionnaireEntity;
+    }
+
+    private static ComponentEntity createComponent(String componentId) {
+        ComponentEntity component = new ComponentEntity("vspId1", new Version(0, 1), componentId);
+        component.setQuestionnaireData("{\n" +
+                "  \"name\": \"bla bla\"\n" +
+                "}");
+        return component;
+    }
+
+    private static CompositionEntity createNic(String nicId, String componentId) {
+        NicEntity nic = new NicEntity("vspId1", new Version(0, 1), componentId, nicId);
+        nic.setQuestionnaireData("{\n" +
+                "  \"name\": \"bla bla\"\n" +
+                "}");
+        return nic;
+    }*/
+}
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/SchemaGeneratorTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/SchemaGeneratorTest.java
new file mode 100644
index 0000000..fd293c6
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/SchemaGeneratorTest.java
@@ -0,0 +1,244 @@
+package org.openecomp.sdc.vendorsoftwareproduct.services;
+
+import org.openecomp.core.utilities.json.JsonUtil;
+import org.everit.json.schema.EmptySchema;
+import org.everit.json.schema.loader.SchemaLoader;
+import org.json.JSONObject;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.NetworkType;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.ComponentCompositionSchemaInput;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.ComponentQuestionnaireSchemaInput;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.NetworkCompositionSchemaInput;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.NicCompositionSchemaInput;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.util.Arrays;
+import java.util.Map;
+
+public class SchemaGeneratorTest {
+
+  private static int getMinOfVmMax(JSONObject schemaJson) {
+    return schemaJson.getJSONObject("properties").getJSONObject("compute")
+        .getJSONObject("properties").getJSONObject("numOfVMs").getJSONObject("properties")
+        .getJSONObject("maximum").getInt("minimum");
+  }
+
+  private static JSONObject validateSchema(String schema) {
+    System.out.println(schema);
+    Assert.assertNotNull(schema);
+    Assert.assertTrue(JsonUtil.isValidJson(schema));
+    JSONObject schemaJson = new JSONObject(schema);
+    Assert.assertFalse(SchemaLoader.load(schemaJson) instanceof EmptySchema);
+    return schemaJson;
+  }
+
+  @Test
+  public void testGenerateVspQuestionnaire() {
+    String schema = SchemaGenerator
+        .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.vsp, null);
+    validateSchema(schema);
+  }
+
+  @Test
+  public void testGenerateNetworkCompositionUpload() {
+    Network network = new Network();
+    network.setName("upload network1 name");
+    network.setDhcp(true);
+
+    NetworkCompositionSchemaInput input = new NetworkCompositionSchemaInput();
+    input.setManual(false);
+    input.setNetwork(network);
+
+    String schema = SchemaGenerator
+        .generate(SchemaTemplateContext.composition, CompositionEntityType.network, input);
+    validateSchema(schema);
+  }
+
+  @Test
+  public void testGenerateNetworkCompositionManual() {
+    NetworkCompositionSchemaInput input = new NetworkCompositionSchemaInput();
+    input.setManual(true);
+
+    String schema = SchemaGenerator
+        .generate(SchemaTemplateContext.composition, CompositionEntityType.network, input);
+
+    validateSchema(schema);
+  }
+
+  @Test
+  public void testGenerateComponentQuestionnaireWithoutInput() {
+    String schema = SchemaGenerator
+        .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.component, null);
+    validateSchema(schema);
+  }
+
+  @Test
+  public void testGenerateComponentQuestionnaireWithMissingInput() {
+    ComponentQuestionnaireSchemaInput input =
+        new ComponentQuestionnaireSchemaInput(Arrays.asList("nic1", "nic2"),
+            JsonUtil.json2Object("{\n" +
+                "  \"compute\": {\n" +
+                "    \"numOfVMs\": {\n" +
+                "      \"blabla\": 70\n" + // no minimum
+                "    }\n" +
+                "  }\n" +
+                "}", Map.class));
+    String schema = SchemaGenerator
+        .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.component, input);
+    JSONObject schemaJson = validateSchema(schema);
+    //Assert.assertEquals(getMinOfVmMax(schemaJson), 0);
+  }
+
+  @Test
+  public void testGenerateComponentQuestionnaireWithInvalidTypeInput() {
+    ComponentQuestionnaireSchemaInput input =
+        new ComponentQuestionnaireSchemaInput(Arrays.asList("nic1", "nic2"),
+            JsonUtil.json2Object("{\n" +
+                "  \"compute\": {\n" +
+                "    \"numOfVMs\": {\n" +
+                "      \"minimum\": \"some string instead of integer\"\n" +
+                // invalid minimum - string
+                "    }\n" +
+                "  }\n" +
+                "}", Map.class));
+    String schema = SchemaGenerator
+        .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.component, input);
+    JSONObject schemaJson = validateSchema(schema);
+    Assert.assertEquals(getMinOfVmMax(schemaJson), 0);
+  }
+
+  @Test
+  public void testGenerateComponentQuestionnaireWithInvalidRangeInput() {
+    ComponentQuestionnaireSchemaInput input =
+        new ComponentQuestionnaireSchemaInput(Arrays.asList("nic1", "nic2"),
+            JsonUtil.json2Object("{\n" +
+                "  \"compute\": {\n" +
+                "    \"numOfVMs\": {\n" +
+                "      \"minimum\": 150\n" + // invalid minimum - integer out of range (0-100)
+                "    }\n" +
+                "  }\n" +
+                "}", Map.class));
+    String schema = SchemaGenerator
+        .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.component, input);
+    JSONObject schemaJson = validateSchema(schema);
+    Assert.assertEquals(getMinOfVmMax(schemaJson), 0);
+  }
+
+  @Test
+  public void testGenerateComponentQuestionnaireWithValidInput() {
+    ComponentQuestionnaireSchemaInput input =
+        new ComponentQuestionnaireSchemaInput(Arrays.asList("nic1", "nic2"),
+            JsonUtil.json2Object("{\n" +
+                "  \"compute\": {\n" +
+                "    \"numOfVMs\": {\n" +
+                "      \"minimum\": 30\n" + // valid minimum - integer at the correct range (0-100)
+                "    }\n" +
+                "  }\n" +
+                "}", Map.class));
+    String schema = SchemaGenerator
+        .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.component, input);
+    JSONObject schemaJson = validateSchema(schema);
+    Assert.assertEquals(getMinOfVmMax(schemaJson), 30);
+  }
+
+  @Test
+  public void testGenerateNicQuestionnaire() {
+    String schema = SchemaGenerator
+        .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.nic, null);
+    validateSchema(schema);
+  }
+
+  @Test
+  public void testGenerateComponentCompositionUpload() {
+    ComponentData component = new ComponentData();
+    component.setName("upload comp1 name");
+    component.setDescription("upload comp1 desc");
+
+    ComponentCompositionSchemaInput input = new ComponentCompositionSchemaInput();
+    input.setManual(false);
+    input.setComponent(component);
+
+    String schema = SchemaGenerator
+        .generate(SchemaTemplateContext.composition, CompositionEntityType.component, input);
+    validateSchema(schema);
+  }
+
+  @Test
+  public void testGenerateComponentCompositionManual() {
+    ComponentCompositionSchemaInput input = new ComponentCompositionSchemaInput();
+    input.setManual(true);
+
+    String schema = SchemaGenerator
+        .generate(SchemaTemplateContext.composition, CompositionEntityType.component, input);
+    validateSchema(schema);
+  }
+
+  @Test
+  public void testGenerateNicCompositionUpload() {
+    Nic nic = new Nic();
+    nic.setName("upload nic1 name");
+    nic.setDescription("upload nic1 desc");
+    nic.setNetworkId("upload nic1 networkId");
+    //nic.setNetworkName("upload nic1 networkName");
+    nic.setNetworkType(NetworkType.External);
+
+    NicCompositionSchemaInput input = new NicCompositionSchemaInput();
+    input.setManual(false);
+    input.setNic(nic);
+
+    String schema = SchemaGenerator
+        .generate(SchemaTemplateContext.composition, CompositionEntityType.nic, input);
+    validateSchema(schema);
+  }
+
+
+//    @Test
+//    public void testGenerateNicCompositionManualWithoutNetworkId() {
+//        Nic nic = new Nic();
+//        nic.setName("upload nic1 name");
+//        nic.setDescription("upload nic1 desc");
+//        //nic.setNetworkName("upload nic1 networkName");
+//        nic.setNetworkType(NetworkType.External);
+//
+//        NicCompositionSchemaInput input = new NicCompositionSchemaInput();
+//        input.setManual(true);
+//        input.setNic(nic);
+//
+//        String schema = SchemaGenerator.generate(SchemaTemplateContext.composition, CompositionEntityType.nic, input);
+//        validateSchema(schema);
+//    }
+
+  @Test
+  public void testGenerateNicCompositionUploadWithoutNetworkId() {
+    Nic nic = new Nic();
+    nic.setName("upload nic1 name");
+    nic.setDescription("upload nic1 desc");
+    //nic.setNetworkName("upload nic1 networkName");
+    nic.setNetworkType(NetworkType.External);
+
+    NicCompositionSchemaInput input = new NicCompositionSchemaInput();
+    input.setManual(false);
+    input.setNic(nic);
+
+    String schema = SchemaGenerator
+        .generate(SchemaTemplateContext.composition, CompositionEntityType.nic, input);
+    validateSchema(schema);
+  }
+
+  @Test
+  public void testGenerateNicCompositionManual() {
+    NicCompositionSchemaInput input = new NicCompositionSchemaInput();
+    input.setManual(true);
+    input.setNetworkIds(
+        Arrays.asList("manual networkId1", "manual networkId2", "manual networkId3"));
+
+    String schema = SchemaGenerator
+        .generate(SchemaTemplateContext.composition, CompositionEntityType.nic, input);
+    validateSchema(schema);
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/tree/HeatTreeManagerTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/tree/HeatTreeManagerTest.java
new file mode 100644
index 0000000..c926977
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/tree/HeatTreeManagerTest.java
@@ -0,0 +1,102 @@
+package org.openecomp.sdc.vendorsoftwareproduct.tree;
+
+import org.openecomp.sdc.datatypes.error.ErrorMessage;
+import org.openecomp.sdc.heat.datatypes.structure.HeatStructureTree;
+import org.openecomp.sdc.heat.services.tree.HeatTreeManager;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.*;
+
+
+public class HeatTreeManagerTest extends TreeBaseTest {
+
+  @Test
+  public void testHeatTreeManager() {
+
+    INPUT_DIR = "/tree/valid_tree/input/";
+    HeatTreeManager heatTreeManager = initHeatTreeManager();
+    heatTreeManager.createTree();
+    Map<String, List<ErrorMessage>> errorMap = new HashMap<>();
+
+    List<ErrorMessage> errorList = new ArrayList<>();
+    errorList.add(new ErrorMessage(org.openecomp.sdc.datatypes.error.ErrorLevel.ERROR, "Missing Artifact"));
+    errorMap.put("missing-artifact", errorList);
+    errorList = new ArrayList<>();
+    errorList.add(new ErrorMessage(org.openecomp.sdc.datatypes.error.ErrorLevel.WARNING, "Missing Nested File"));
+    errorMap.put("missingNested.yaml", errorList);
+    heatTreeManager.addErrors(errorMap);
+    HeatStructureTree tree = heatTreeManager.getTree();
+    Assert.assertNotNull(tree);
+  }
+
+  @Test
+  public void testHeatTreeManagerMissingManifest() {
+
+    INPUT_DIR = "/tree/missing_manifest/input/";
+    HeatTreeManager heatTreeManager = initHeatTreeManager();
+    heatTreeManager.createTree();
+    Map<String, List<ErrorMessage>> errorMap = new HashMap<>();
+
+    List<ErrorMessage> errorList = new ArrayList<>();
+    errorList.add(new ErrorMessage(org.openecomp.sdc.datatypes.error.ErrorLevel.ERROR, "Missing Artifact"));
+    errorMap.put("missing-artifact", errorList);
+    errorList = new ArrayList<>();
+    errorList.add(new ErrorMessage(org.openecomp.sdc.datatypes.error.ErrorLevel.WARNING, "Missing Nested File"));
+    errorMap.put("missingNested.yaml", errorList);
+    heatTreeManager.addErrors(errorMap);
+    HeatStructureTree tree = heatTreeManager.getTree();
+    Assert.assertNotNull(tree);
+    Assert.assertEquals(tree.getHEAT(), null);
+
+  }
+
+
+  @Test
+  public void testResourceGroupShowsAsNestedFileInTree() throws IOException {
+    INPUT_DIR = "/tree/nested_resource_group";
+    HeatTreeManager heatTreeManager = initHeatTreeManager();
+    heatTreeManager.createTree();
+    HeatStructureTree tree = heatTreeManager.getTree();
+
+    Set<HeatStructureTree> heat = tree.getHEAT();
+    Assert.assertNotNull(heat);
+
+    HeatStructureTree addOnHeatSubTree =
+        HeatStructureTree.getHeatStructureTreeByName(heat, "addOn.yml");
+    Assert.assertNotNull(addOnHeatSubTree);
+
+    Set<HeatStructureTree> addOnNestedFiles = addOnHeatSubTree.getNested();
+    Assert.assertNotNull(addOnNestedFiles);
+
+    HeatStructureTree nestedFile =
+        HeatStructureTree.getHeatStructureTreeByName(addOnNestedFiles, "nested.yml");
+    Assert.assertNotNull(nestedFile);
+  }
+
+
+  @Test
+  public void testVolumeNestedFileIsNotUnderVolumeSubTree() {
+    INPUT_DIR = "/tree/nested_volume";
+    HeatTreeManager heatTreeManager = initHeatTreeManager();
+    heatTreeManager.createTree();
+    HeatStructureTree tree = heatTreeManager.getTree();
+
+    Set<HeatStructureTree> heat = tree.getHEAT();
+    Set<HeatStructureTree> volume = tree.getVolume();
+    Assert.assertNotNull(heat);
+    Assert.assertNull(volume);
+
+    HeatStructureTree baseMobtSubTree =
+        HeatStructureTree.getHeatStructureTreeByName(heat, "base_mobt.yaml");
+    Assert.assertNotNull(baseMobtSubTree);
+
+    Set<HeatStructureTree> baseMobtNestedFiles = baseMobtSubTree.getNested();
+    Assert.assertNotNull(baseMobtNestedFiles);
+
+    HeatStructureTree nestedVolumeFile = HeatStructureTree
+        .getHeatStructureTreeByName(baseMobtNestedFiles, "hot_mobt_volume_attach_nested.yaml");
+    Assert.assertNotNull(nestedVolumeFile);
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/tree/TreeBaseTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/tree/TreeBaseTest.java
new file mode 100644
index 0000000..df6cf54
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/tree/TreeBaseTest.java
@@ -0,0 +1,33 @@
+package org.openecomp.sdc.vendorsoftwareproduct.tree;
+
+import org.openecomp.sdc.heat.services.tree.HeatTreeManager;
+import org.openecomp.core.utilities.file.FileUtils;
+
+import java.io.File;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+public class TreeBaseTest {
+
+  String INPUT_DIR;
+
+
+  HeatTreeManager initHeatTreeManager() {
+    HeatTreeManager heatTreeManager = new HeatTreeManager();
+
+    URL url = TreeBaseTest.class.getResource(INPUT_DIR);
+
+    File inputDir = null;
+    try {
+      inputDir = new File(url.toURI());
+    } catch (URISyntaxException e) {
+      e.printStackTrace();
+    }
+    File[] files = inputDir.listFiles();
+    for (File inputFile : files) {
+      heatTreeManager.addFile(inputFile.getName(), FileUtils.loadFileToInputStream(
+          INPUT_DIR.replace("/", File.separator) + File.separator + inputFile.getName()));
+    }
+    return heatTreeManager;
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/tree/UploadFileTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/tree/UploadFileTest.java
new file mode 100644
index 0000000..ee31ba4
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/tree/UploadFileTest.java
@@ -0,0 +1,90 @@
+package org.openecomp.sdc.vendorsoftwareproduct.tree;
+
+import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacade;
+import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacadeFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.VSPCommon;
+import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.UploadDataEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.impl.VendorSoftwareProductManagerImpl;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.io.*;
+import java.net.URL;
+import java.util.zip.ZipOutputStream;
+
+public class UploadFileTest {
+
+
+  public static final Version VERSION01 = new Version(0, 1);
+  private static final String USER1 = "vspTestUser1";
+  public static String id001 = null;
+  public static String id002 = null;
+  public static Version activeVersion002 = null;
+  private static VendorSoftwareProductManager vendorSoftwareProductManager =
+      new VendorSoftwareProductManagerImpl();
+  private static VendorSoftwareProductDao vendorSoftwareProductDao =
+      VendorSoftwareProductDaoFactory.getInstance().createInterface();
+  private static VendorLicenseFacade vendorLicenseFacade =
+      VendorLicenseFacadeFactory.getInstance().createInterface();
+  private static String vlm1Id;
+
+  @BeforeClass
+  static public void init() {
+
+    //testCreateVSP
+    vlm1Id = vendorLicenseFacade.createVendorLicenseModel(
+        VSPCommon.createVendorLicenseModel("vlmName", "vlm1Id desc", "icon1"), USER1).getId();
+    VspDetails expectedVsp = VSPCommon
+        .createVspDetails(null, null, "VSP1", "Test-vsp", "vendorName", vlm1Id, "icon", "category",
+            "subCategory", "123", null);
+
+    VspDetails createdVsp = vendorSoftwareProductManager.createNewVsp(expectedVsp, USER1);
+    id001 = createdVsp.getId();
+
+    VspDetails actualVsp =
+        vendorSoftwareProductDao.getVendorSoftwareProductInfo(new VspDetails(id001, VERSION01));
+    expectedVsp.setId(id001);
+    expectedVsp.setVersion(VERSION01);
+
+
+  }
+
+  @Test
+  public void testUploadFile() {
+    //vspActiveVersion = vendorSoftwareProductManager.checkout(id001, USER1);
+    vendorSoftwareProductManager.uploadFile(id001, getZipInputStream("/legalUpload"), USER1);
+    //testLegalUpload(id001, vspActiveVersion, getZipInputStream("/legalUpload"), USER1);
+  }
+
+
+  private void testLegalUpload(String vspId, Version version, InputStream upload, String user) {
+    vendorSoftwareProductManager.uploadFile(vspId, upload, user);
+
+    UploadDataEntity uploadData =
+        vendorSoftwareProductDao.getUploadData(new UploadDataEntity(vspId, version));
+
+  }
+
+  public InputStream getZipInputStream(String name) {
+    URL url = this.getClass().getResource(name);
+    File templateDir = new File(url.getFile());
+
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    ZipOutputStream zos = new ZipOutputStream(baos);
+
+    VSPCommon.zipDir(templateDir, "", zos, true);
+    try {
+      zos.close();
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+    return new ByteArrayInputStream(baos.toByteArray());
+  }
+
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/upload/HeatCleanup/HeatCleanupOnNewUploadTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/upload/HeatCleanup/HeatCleanupOnNewUploadTest.java
new file mode 100644
index 0000000..f1bf568
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/upload/HeatCleanup/HeatCleanupOnNewUploadTest.java
@@ -0,0 +1,167 @@
+package org.openecomp.sdc.vendorsoftwareproduct.upload.HeatCleanup;
+
+import org.openecomp.sdc.datatypes.error.ErrorLevel;
+import org.openecomp.sdc.vendorsoftwareproduct.VSPCommon;
+import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants;
+import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDaoFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.UploadDataEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.impl.VendorSoftwareProductManagerImpl;
+import org.openecomp.sdc.vendorsoftwareproduct.types.UploadFileResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.UploadFileStatus;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.core.model.dao.ServiceModelDao;
+import org.openecomp.core.model.dao.ServiceModelDaoFactory;
+import org.openecomp.core.util.UniqueValueUtil;
+import org.openecomp.core.validation.types.MessageContainerUtil;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.List;
+
+public class HeatCleanupOnNewUploadTest {
+  private static final String USER1 = "vspTestUser1";
+
+  private static final VendorSoftwareProductManager vendorSoftwareProductManager =
+      new VendorSoftwareProductManagerImpl();
+  private static final VendorSoftwareProductDao vendorSoftwareProductDao =
+      VendorSoftwareProductDaoFactory.getInstance().createInterface();
+  private static final ServiceModelDao serviceModelDao =
+      ServiceModelDaoFactory.getInstance().createInterface();
+
+  private static String vspId = null;
+  private static Version vspActiveVersion = null;
+
+  private static void validateUploadContentExistence(boolean exist) {
+    UploadDataEntity uploadDataEntity =
+        vendorSoftwareProductDao.getUploadData(new UploadDataEntity(vspId, vspActiveVersion));
+    Assert.assertTrue((uploadDataEntity.getContentData() != null) == exist);
+    Assert.assertTrue((uploadDataEntity.getValidationData() != null) == exist);
+    Assert.assertTrue((uploadDataEntity.getPackageName() != null) == exist);
+    Assert.assertTrue((uploadDataEntity.getPackageVersion() != null) == exist);
+    Assert.assertTrue((serviceModelDao.getServiceModel(vspId, vspActiveVersion) != null) == exist);
+  }
+
+  private static void validateCompositionDataExistence(boolean exist) {
+    Assert.assertTrue(CollectionUtils
+        .isNotEmpty(vendorSoftwareProductDao.listNetworks(vspId, vspActiveVersion)) == exist);
+    Assert.assertTrue(CollectionUtils
+        .isNotEmpty(vendorSoftwareProductDao.listComponents(vspId, vspActiveVersion)) == exist);
+    Assert.assertTrue(CollectionUtils
+        .isNotEmpty(vendorSoftwareProductDao.listNicsByVsp(vspId, vspActiveVersion)) == exist);
+  }
+
+  private static InputStream getFileInputStream(String fileName) {
+    URL url = HeatCleanupOnNewUploadTest.class.getResource(fileName);
+    try {
+      return url.openStream();
+    } catch (IOException e) {
+      e.printStackTrace();
+      return null;
+    }
+  }
+
+  @BeforeClass
+  private void init() {
+    UniqueValueUtil
+        .deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+            "VSPTestEmpty");
+
+    VspDetails vspDetails = vendorSoftwareProductManager.createNewVsp(VSPCommon
+        .createVspDetails(null, null, "VSPTestEmpty", "Test-vsp-empty", "vendorName", "vlm1Id",
+            "icon", "category", "subCategory", "123", null), USER1);
+    vspId = vspDetails.getId();
+    vspActiveVersion = vspDetails.getVersion();
+  }
+
+  @Test
+  public void testUploadWithComposition() {
+    InputStream zis = getFileInputStream("/vspmanager/zips/fullComposition.zip");
+
+    UploadFileResponse uploadFileResponse =
+        vendorSoftwareProductManager.uploadFile(vspId, zis, USER1);
+
+    Assert.assertEquals(uploadFileResponse.getStatus(), UploadFileStatus.Success);
+    Assert.assertTrue(MapUtils.isEmpty(
+        MessageContainerUtil.getMessageByLevel(ErrorLevel.ERROR, uploadFileResponse.getErrors())));
+
+    validateUploadContentExistence(true);
+    validateCompositionDataExistence(true);
+  }
+
+  @Test(dependsOnMethods = {"testUploadWithComposition"})
+  public void testProccesesMIBsDeletionAfterNewUpload() {
+    InputStream zis1 = getFileInputStream("/vspmanager/zips/fullComposition.zip");
+    InputStream zis2 = getFileInputStream("/vspmanager/zips/fullComposition.zip");
+    InputStream mib = getFileInputStream("/vspmanager/zips/vDNS.zip");
+
+    vendorSoftwareProductManager.uploadFile(vspId, zis1, USER1);
+    List<ComponentEntity> components =
+        (List<ComponentEntity>) vendorSoftwareProductDao.listComponents(vspId, vspActiveVersion);
+    String componentId = components.get(0).getId();
+
+    vendorSoftwareProductManager
+        .uploadComponentMib(mib, "vDNS.zip", vspId, componentId, true, USER1);
+    vendorSoftwareProductManager
+        .createProcess(new org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity(vspId, vspActiveVersion, componentId, null), USER1);
+
+    vendorSoftwareProductManager.uploadFile(vspId, zis2, USER1);
+    Assert.assertTrue(
+        vendorSoftwareProductManager.listMibFilenames(vspId, componentId, USER1).getSnmpTrap() ==
+            null);
+    Assert.assertTrue(CollectionUtils
+        .isEmpty(vendorSoftwareProductDao.listProcesses(vspId, vspActiveVersion, componentId)));
+  }
+
+  @Test(dependsOnMethods = {"testProccesesMIBsDeletionAfterNewUpload"})
+  public void testInvalidStructureUploadAfterFullComposition() {
+    InputStream zis = getFileInputStream("/vspmanager/zips/withoutManifest.zip");
+
+    UploadFileResponse uploadFileResponse =
+        vendorSoftwareProductManager.uploadFile(vspId, zis, USER1);
+    Assert.assertEquals(uploadFileResponse.getStatus(), UploadFileStatus.Failure);
+    Assert.assertTrue(MapUtils.isNotEmpty(
+        MessageContainerUtil.getMessageByLevel(ErrorLevel.ERROR, uploadFileResponse.getErrors())));
+
+    validateUploadContentExistence(true);
+    validateCompositionDataExistence(true);
+  }
+
+  @Test(dependsOnMethods = {"testInvalidStructureUploadAfterFullComposition"})
+  public void testInvalidUploadAfterFullComposition() {
+    InputStream zis = getFileInputStream("/vspmanager/zips/missingYml.zip");
+
+    UploadFileResponse uploadFileResponse =
+        vendorSoftwareProductManager.uploadFile(vspId, zis, USER1);
+    Assert.assertEquals(uploadFileResponse.getStatus(), UploadFileStatus.Success);
+    Assert.assertTrue(MapUtils.isNotEmpty(
+        MessageContainerUtil.getMessageByLevel(ErrorLevel.ERROR, uploadFileResponse.getErrors())));
+
+    validateUploadContentExistence(true);
+    validateCompositionDataExistence(false);
+  }
+
+  @Test(dependsOnMethods = {"testInvalidUploadAfterFullComposition"})
+  public void testEmptyCompositionUploadAfterFullComposition() throws IOException {
+    testUploadWithComposition();
+
+    InputStream zis = getFileInputStream("/vspmanager/zips/emptyComposition.zip");
+    UploadFileResponse uploadFileResponse =
+        vendorSoftwareProductManager.uploadFile(vspId, zis, USER1);
+    Assert.assertEquals(uploadFileResponse.getStatus(), UploadFileStatus.Success);
+    Assert.assertTrue(MapUtils.isEmpty(
+        MessageContainerUtil.getMessageByLevel(ErrorLevel.ERROR, uploadFileResponse.getErrors())));
+
+    validateUploadContentExistence(true);
+    validateCompositionDataExistence(false);
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/upload/validation/UploadFileValidationTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/upload/validation/UploadFileValidationTest.java
new file mode 100644
index 0000000..3ec8cb2
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/upload/validation/UploadFileValidationTest.java
@@ -0,0 +1,199 @@
+package org.openecomp.sdc.vendorsoftwareproduct.upload.validation;
+
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.utils.AsdcCommon;
+import org.openecomp.sdc.datatypes.error.ErrorMessage;
+
+import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.impl.VendorSoftwareProductManagerImpl;
+import org.openecomp.sdc.vendorsoftwareproduct.types.UploadFileResponse;
+import org.openecomp.core.util.UniqueValueUtil;
+import org.openecomp.core.utilities.CommonMethods;
+import org.openecomp.core.validation.errors.Messages;
+import org.openecomp.core.validation.types.MessageContainerUtil;
+import org.apache.commons.collections4.MapUtils;
+import org.testng.Assert;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import java.io.*;
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+
+public class UploadFileValidationTest {
+
+  private static final String USER1 = "UploadFileValidationTest";
+  private static final String EMPTY_ZIP_FILE = "/validation/zips/emptyZip.zip";
+  private static final String MISSING_MANIFEST_IN_ZIP_FILE =
+      "/validation/zips/missingManifestInZip.zip";
+  private static final String ZIP_FILE_WITH_FOLDER = "/validation/zips/zipFileWithFolder.zip";
+  private static VendorSoftwareProductManager vendorSoftwareProductManager =
+      new VendorSoftwareProductManagerImpl();
+  private static String vspId;
+
+  public static org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity createVendorLicenseModel(String name, String desc,
+                                                                                                            String icon) {
+    org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity
+        vendorLicenseModel = new org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity();
+    vendorLicenseModel.setVendorName(name);
+    vendorLicenseModel.setDescription(desc);
+    vendorLicenseModel.setIconRef(icon);
+    return vendorLicenseModel;
+  }
+
+  @BeforeTest
+  private void init() {
+    VspDetails vspDetails = new VspDetails();
+    vspDetails.setVendorName("vspName_" + CommonMethods.nextUuId());
+    vspId = vendorSoftwareProductManager.createNewVsp(vspDetails, USER1).getId();
+
+    UniqueValueUtil
+        .deleteUniqueValue(org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+            "VSP_syb_upload_various");
+    UniqueValueUtil
+        .deleteUniqueValue(org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+            "vsp_syb_upload_no_error");
+    UniqueValueUtil
+        .deleteUniqueValue(org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME,
+            "vsp_syb");
+  }
+
+  @Test
+  public void testUploadZipNull() {
+    UploadFileResponse response = vendorSoftwareProductManager.uploadFile(vspId, null, USER1);
+    Assert.assertEquals(response.getErrors().size(), 1);
+    Assert.assertTrue(response.getErrors().containsKey(AsdcCommon.UPLOAD_FILE));
+    Assert.assertEquals(response.getErrors().get(AsdcCommon.UPLOAD_FILE).get(0).getMessage(),
+        Messages.NO_ZIP_FILE_WAS_UPLOADED_OR_ZIP_NOT_EXIST.getErrorMessage());
+  }
+
+  @Test(dependsOnMethods = "testUploadZipNull")
+  public void testUploadEmptyFile() {
+    UploadFileResponse response = vendorSoftwareProductManager
+        .uploadFile(vspId, new ByteArrayInputStream("".getBytes()), USER1);
+    Assert.assertEquals(response.getErrors().size(), 1);
+    Assert.assertTrue(response.getErrors().containsKey(AsdcCommon.UPLOAD_FILE));
+    Assert.assertEquals(response.getErrors().get(AsdcCommon.UPLOAD_FILE).get(0).getMessage(),
+        Messages.NO_ZIP_FILE_WAS_UPLOADED_OR_ZIP_NOT_EXIST.getErrorMessage());
+  }
+
+  @Test(dependsOnMethods = "testUploadEmptyFile")
+  public void testUploadEmptyZip() {
+    UploadFileResponse response =
+        vendorSoftwareProductManager.uploadFile(vspId, getFileInputStream(EMPTY_ZIP_FILE), USER1);
+    Assert.assertEquals(response.getErrors().size(), 1);
+    Assert.assertTrue(response.getErrors().containsKey(AsdcCommon.UPLOAD_FILE));
+    Assert.assertEquals(response.getErrors().get(AsdcCommon.UPLOAD_FILE).get(0).getMessage(),
+        Messages.INVALID_ZIP_FILE.getErrorMessage());
+  }
+
+  @Test(dependsOnMethods = "testUploadEmptyZip")
+  public void testUploadMissingManifestInZip() {
+    UploadFileResponse response = vendorSoftwareProductManager
+        .uploadFile(vspId, getFileInputStream(MISSING_MANIFEST_IN_ZIP_FILE), USER1);
+    Assert.assertEquals(response.getErrors().size(), 1);
+    Assert.assertTrue(response.getErrors().containsKey(AsdcCommon.MANIFEST_NAME));
+    Assert.assertEquals(response.getErrors().get(AsdcCommon.MANIFEST_NAME).get(0).getMessage(),
+        Messages.MANIFEST_NOT_EXIST.getErrorMessage());
+  }
+
+  @Test(dependsOnMethods = "testUploadMissingManifestInZip")
+  public void testUploadZipWithFolder() {
+    UploadFileResponse response = vendorSoftwareProductManager
+        .uploadFile(vspId, getFileInputStream(ZIP_FILE_WITH_FOLDER), USER1);
+    Assert.assertEquals(response.getErrors().size(), 1);
+    Assert.assertTrue(response.getErrors().containsKey(AsdcCommon.UPLOAD_FILE));
+    Assert.assertEquals(response.getErrors().get(AsdcCommon.UPLOAD_FILE).get(0).getMessage(),
+        Messages.ZIP_SHOULD_NOT_CONTAIN_FOLDERS.getErrorMessage());
+  }
+
+  @Test(dependsOnMethods = "testUploadZipWithFolder")
+  public void testUploadVariousZips() {
+
+    File[] files = getFileList("/validation/zips/various");
+    InputStream is;
+    for (File file : files) {
+      if (file.isFile()) {
+        UploadFileResponse response = null;
+        try {
+
+          is = new FileInputStream(file);
+          response = vendorSoftwareProductManager.uploadFile(vspId, is, USER1);
+
+        } catch (FileNotFoundException e) {
+          throw new RuntimeException(e);
+        } catch (CoreException ce) {
+          throw new RuntimeException("failed upload:" + file.getName(), ce);
+        } catch (RuntimeException re) {
+
+          throw new RuntimeException("failed upload:" + file.getName(), re);
+        }
+        System.out.println("zip:" + file.getName() + " Errors:" + calculateNumberOfMessages(
+            MessageContainerUtil.getMessageByLevel(org.openecomp.sdc.datatypes.error.ErrorLevel.ERROR, response.getErrors())) +
+            " Warnings:" + calculateNumberOfMessages(
+            MessageContainerUtil.getMessageByLevel(org.openecomp.sdc.datatypes.error.ErrorLevel.WARNING, response.getErrors())));
+      }
+    }
+  }
+
+  @Test(dependsOnMethods = "testUploadVariousZips")
+  public void testUploadNoErrorVariousZips() {
+
+
+    File[] files = getFileList("/validation/zips/various/noError");
+    InputStream is;
+    for (File file : files) {
+      if (file.isFile()) {
+        try {
+          is = new FileInputStream(file);
+          UploadFileResponse response = vendorSoftwareProductManager.uploadFile(vspId, is, USER1);
+          Map<String, List<ErrorMessage>> errors = response.getErrors();
+          Assert.assertTrue(
+              MapUtils.isEmpty(MessageContainerUtil.getMessageByLevel(
+                  org.openecomp.sdc.datatypes.error.ErrorLevel.ERROR, errors)));
+
+
+        } catch (FileNotFoundException e) {
+          throw new RuntimeException(e);
+        } catch (CoreException ce) {
+          Assert.fail("failed upload:" + file.getName() + " exception:" + ce.getMessage());
+
+        } catch (RuntimeException re) {
+          Assert.fail("failed upload:" + file.getName() + " exception:" + re.getMessage());
+        }
+      }
+    }
+  }
+
+  private InputStream getFileInputStream(String fileName) {
+    URL url = this.getClass().getResource(fileName);
+    try {
+      return url.openStream();
+    } catch (IOException e) {
+      e.printStackTrace();
+      return null;
+    }
+  }
+
+  private File[] getFileList(String dir) {
+    URL url = UploadFileValidationTest.class.getResource(dir);
+
+    String path = url.getPath();
+    File pathFile = new File(path);
+    return pathFile.listFiles();
+
+
+  }
+
+  private int calculateNumberOfMessages(Map<String, List<ErrorMessage>> messages) {
+    int sum = 0;
+    for (List<ErrorMessage> errors : messages.values()) {
+      sum += errors.size();
+    }
+    return sum;
+  }
+
+
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/emptyComposition/MANIFEST.json b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/emptyComposition/MANIFEST.json
new file mode 100644
index 0000000..af1e3fb
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/emptyComposition/MANIFEST.json
@@ -0,0 +1,11 @@
+{
+  "name": "vEP_JSA_Net",
+  "description": "Version 2.0 02-09-2016 (Authors: John Doe, user PROD)",
+  "version": "2013-05-23",
+  "data": [
+    {
+      "file": "ep-jsa_net.yaml",
+      "type": "HEAT"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/emptyComposition/ep-jsa_net.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/emptyComposition/ep-jsa_net.yaml
new file mode 100644
index 0000000..f0773b7
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/emptyComposition/ep-jsa_net.yaml
@@ -0,0 +1,21 @@
+heat_template_version: 2013-05-23
+
+description: >
+  Version 2.0 02-09-2016 (Authors: John Doe, user PROD)
+
+parameters:      
+      snapshot02:
+        type: string
+        description: prop
+      network_name:
+        type: string
+        description: prop
+
+resources:
+
+  pcrf_server_init:
+    type: OS::Heat::MultipartMime
+    properties:
+      parts:
+      - config: { get_param: network_name}
+      - config: { get_param: snapshot02}
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/componentsWithPort/ComponentsWithPortST.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/componentsWithPort/ComponentsWithPortST.yaml
new file mode 100644
index 0000000..1446e98
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/componentsWithPort/ComponentsWithPortST.yaml
@@ -0,0 +1,428 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Main
+imports:
+  NeutronPortGlobalTypes:
+    file: NeutronPortGlobalTypesServiceTemplate.yaml
+  NeutronNetGlobalTypes:
+    file: NeutronNetGlobalTypesServiceTemplate.yaml
+  CommonGlobalTypes:
+    file: CommonGlobalTypesServiceTemplate.yaml
+  CinderVolumeGlobalTypes:
+    file: CinderVolumeGlobalTypesServiceTemplate.yaml
+  ContrailNetworkRuleGlobalType:
+    file: ContrailNetworkRuleGlobalTypeServiceTemplate.yaml
+  NeutronSecurityRulesGlobalTypes:
+    file: NeutronSecurityRulesGlobalTypesServiceTemplate.yaml
+  NovaServerGlobalTypes:
+    file: NovaServerGlobalTypesServiceTemplate.yaml
+  ContrailVirtualNetworkGlobalType:
+    file: ContrailVirtualNetworkGlobalTypeServiceTemplate.yaml
+  AbstractSubstituteGlobalTypes:
+    file: AbstractSubstituteGlobalTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.pcrf_psm:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+  org.openecomp.resource.vfc.nodes.heat.pcm:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    Internal2_name:
+      label: Internal2_name
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal2_name
+    Internal1_shared:
+      label: Internal1_shared
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal1_shared
+    FSB1_volume_name:
+      label: FSB1_volume
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_volume_1
+    jsa_cidr:
+      label: jsa_cidr
+      hidden: false
+      immutable: false
+      type: string
+      description: jsa_cidr
+      default: 107.243.7.128/26
+    availabilityzone_name:
+      label: availabilityzone_name
+      hidden: false
+      immutable: false
+      type: string
+      description: availabilityzone_name
+    fsb1-name:
+      label: FSB1_name
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_name
+    pcm_image_name:
+      label: pcm_image_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcm_image_name
+    Internal2_external:
+      label: Internal2_external
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal2_external
+    Internal2_forwarding_mode:
+      label: Internal2_forwarding_mode
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal2_forwarding_mode
+    pcrf_psm_flavor_name:
+      label: pcrf_psm_flavor_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcrf_psm_flavor_name
+    pcrf_psm_image_name:
+      label: pcrf_psm_image_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcrf_psm_image_name
+    FSB_1_image:
+      label: MME_FSB1
+      hidden: false
+      immutable: false
+      type: string
+      description: MME_FSB1_15B-CP04-r5a01
+    volume_size:
+      label: volume size
+      hidden: false
+      immutable: false
+      type: float
+      description: my volume size 320GB
+    fsb1-Internal1-mac:
+      label: FSB1_internal_mac
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_internal_mac
+    Internal2_shared:
+      label: Internal2_shared
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal2_shared
+    pcm_server_name:
+      label: pcm_server_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcm_server_name
+    Internal1_net_name:
+      label: Internal1_net_name
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal1_net_name
+    oam_net_name:
+      label: oam_net_name
+      hidden: false
+      immutable: false
+      type: string
+      description: oam_net_name
+    fsb1-flavor:
+      label: FSB1_flavor
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_flavor
+    fsb1-Internal2-mac:
+      label: FSB1_internal_mac
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_internal_mac
+    volume_type:
+      label: volume type
+      hidden: false
+      immutable: false
+      type: string
+      description: volume type Gold
+    fsb1-zone:
+      label: FSB1_zone
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_zone
+    fsb_zone:
+      label: FSB1_zone
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_zone
+    security_group_name:
+      hidden: false
+      immutable: false
+      type: list
+      description: CMAUI1, CMAUI2 server names
+      entry_schema:
+        type: String
+    jsa_net_name:
+      label: jsa_net_name
+      hidden: false
+      immutable: false
+      type: string
+      description: jsa_net_name
+      default: jsa_log_net_0
+    pcrf_psm_server_name:
+      label: pcrf_psm_server_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcrf_psm_server_name
+    pcm_flavor_name:
+      label: pcm_flavor_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcm_flavor_name
+    oam_net_id:
+      label: oam_net_id
+      hidden: false
+      immutable: false
+      type: string
+      description: oam_net_id
+    fsb2-Internal1-mac:
+      label: FSB1_internal_mac
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_internal_mac
+    Internal1_forwarding_mode:
+      label: Internal1_forwarding_mode
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal1_forwarding_mode
+    pcrf_cps_net_name:
+      label: pcrf_cps_net_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcrf_cps_net_name
+    cps_net_name:
+      label: cps_net_name
+      hidden: false
+      immutable: false
+      type: string
+      description: cps_net_name
+    pcrf_security_group_name:
+      hidden: false
+      immutable: false
+      type: list
+      description: CMAUI1, CMAUI2 server names
+      entry_schema:
+        type: String
+    Internal1_external:
+      label: Internal1_external
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal1_external
+  node_templates:
+    pcm_port_1:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        security_groups:
+        - get_input: security_group_name
+        fixed_ips:
+        - ip_address:
+            get_input: oam_net_ip
+        network:
+          get_input: oam_net_name
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: server_pcm
+          relationship: tosca.relationships.network.BindsTo
+    FSB1_Internal2:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        mac_address:
+          get_input: fsb1-Internal2-mac
+        network: Internal2-net
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: FSB2
+          relationship: tosca.relationships.network.BindsTo
+    FSB1_Internal1:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        mac_address:
+          get_input: fsb1-Internal1-mac
+        network: Internal1-net
+      requirements:
+      - link:
+          capability: tosca.capabilities.network.Linkable
+          node: Internal1-net
+          relationship: tosca.relationships.network.LinksTo
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: FSB1
+          relationship: tosca.relationships.network.BindsTo
+    FSB1_OAM:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        fixed_ips:
+        - ip_address:
+            get_input: fsb1-oam-ip
+        network:
+          get_input: oam_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: FSB1
+          relationship: tosca.relationships.network.BindsTo
+    psm01_port_0:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        security_groups:
+        - get_input: pcrf_security_group_name
+        fixed_ips:
+        - ip_address:
+            get_input: pcrf_cps_net_ip
+        network:
+          get_input: pcrf_cps_net_name
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: pcrf_server_psm
+          relationship: tosca.relationships.network.BindsTo
+    pcm_port_0:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        security_groups:
+        - get_input: security_group_name
+        fixed_ips:
+        - ip_address:
+            get_input: cps_net_ip
+        network:
+          get_input: cps_net_name
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: server_pcm
+          relationship: tosca.relationships.network.BindsTo
+    server_pcm:
+      type: org.openecomp.resource.vfc.nodes.heat.pcm
+      properties:
+        flavor:
+          get_input: pcm_flavor_name
+        availability_zone:
+          get_input: availabilityzone_name
+        image:
+          get_input: pcm_image_name
+        config_drive: 'True'
+        user_data_format: RAW
+        name:
+          get_input: pcm_server_name
+        user_data: UNSUPPORTED_RESOURCE_server_init
+    pcrf_server_psm:
+      type: org.openecomp.resource.vfc.nodes.heat.pcrf_psm
+      properties:
+        flavor:
+          get_input: pcrf_psm_flavor_name
+        availability_zone:
+          get_input: availabilityzone_name
+        image:
+          get_input: pcrf_psm_image_name
+        config_drive: 'True'
+        metadata:
+          vnf_id:
+            get_input: pcrf_vnf_id
+        user_data_format: RAW
+        name:
+          get_input: pcrf_psm_server_name
+        user_data: UNSUPPORTED_RESOURCE_pcrf_server_init
+    FSB2:
+      type: org.openecomp.resource.vfc.nodes.heat.nova.Server
+      properties:
+        flavor:
+          get_input: fsb1-flavor
+        availability_zone:
+          get_input: fsb_zone
+        name:
+          get_input: fsb1-name
+    FSB1:
+      type: org.openecomp.resource.vfc.nodes.heat.nova.Server
+      properties:
+        flavor:
+          get_input: fsb1-flavor
+        availability_zone:
+          get_input: fsb_zone
+        metadata:
+          write_files:
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth0
+            permissions: '0644'
+            content:
+              str_replace:
+                template:
+                  get_artifact:
+                  - SELF
+                  - nimbus-ethernet
+                params:
+                  $dev: eth0
+                  $netmask:
+                    get_input: cps_net_mask
+                  $ip:
+                    get_input: cps_net_ip
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth1
+            permissions: '0644'
+            content:
+              str_replace:
+                template:
+                  get_artifact:
+                  - SELF
+                  - nimbus-ethernet-gw
+                params:
+                  $dev: eth1
+                  $netmask:
+                    get_input: oam_net_mask
+                  $gateway:
+                    get_input: oam_net_gw
+                  $ip:
+                    get_input: oam_net_ip
+        name:
+          get_input: fsb1-name
+      artifacts:
+        nimbus-ethernet-gw:
+          type: tosca.artifacts.Deployment
+          file: ../Artifacts/nimbus-ethernet-gw
+        nimbus-ethernet:
+          type: tosca.artifacts.Deployment
+          file: ../Artifacts/nimbus-ethernet
+  groups:
+    ep-jsa_net:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/ep-jsa_net.yaml
+        description: |
+          Version 2.0 02-09-2016 (Authors: John Doe, user PROD)
+      members:
+      - pcm_port_1
+      - FSB1_Internal2
+      - FSB1_Internal1
+      - FSB1_OAM
+      - psm01_port_0
+      - pcm_port_0
+      - server_pcm
+      - pcrf_server_psm
+      - FSB2
+      - FSB1
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/fullComposition/MainServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/fullComposition/MainServiceTemplate.yaml
new file mode 100644
index 0000000..62865b3
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/fullComposition/MainServiceTemplate.yaml
@@ -0,0 +1,473 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Main
+imports:
+  NeutronPortGlobalTypes:
+    file: NeutronPortGlobalTypesServiceTemplate.yaml
+  NeutronNetGlobalTypes:
+    file: NeutronNetGlobalTypesServiceTemplate.yaml
+  CommonGlobalTypes:
+    file: CommonGlobalTypesServiceTemplate.yaml
+  CinderVolumeGlobalTypes:
+    file: CinderVolumeGlobalTypesServiceTemplate.yaml
+  ContrailNetworkRuleGlobalType:
+    file: ContrailNetworkRuleGlobalTypeServiceTemplate.yaml
+  NeutronSecurityRulesGlobalTypes:
+    file: NeutronSecurityRulesGlobalTypesServiceTemplate.yaml
+  NovaServerGlobalTypes:
+    file: NovaServerGlobalTypesServiceTemplate.yaml
+  ContrailVirtualNetworkGlobalType:
+    file: ContrailVirtualNetworkGlobalTypeServiceTemplate.yaml
+  AbstractSubstituteGlobalTypes:
+    file: AbstractSubstituteGlobalTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.pcrf_psm:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+  org.openecomp.resource.vfc.nodes.heat.pcm:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    Internal2_name:
+      label: Internal2_name
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal2_name
+    Internal1_shared:
+      label: Internal1_shared
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal1_shared
+    FSB1_volume_name:
+      label: FSB1_volume
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_volume_1
+    jsa_cidr:
+      label: jsa_cidr
+      hidden: false
+      immutable: false
+      type: string
+      description: jsa_cidr
+      default: 107.243.7.128/26
+    availabilityzone_name:
+      label: availabilityzone_name
+      hidden: false
+      immutable: false
+      type: string
+      description: availabilityzone_name
+    fsb1-name:
+      label: FSB1_name
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_name
+    pcm_image_name:
+      label: pcm_image_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcm_image_name
+    Internal2_external:
+      label: Internal2_external
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal2_external
+    Internal2_forwarding_mode:
+      label: Internal2_forwarding_mode
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal2_forwarding_mode
+    pcrf_psm_flavor_name:
+      label: pcrf_psm_flavor_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcrf_psm_flavor_name
+    pcrf_psm_image_name:
+      label: pcrf_psm_image_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcrf_psm_image_name
+    FSB_1_image:
+      label: MME_FSB1
+      hidden: false
+      immutable: false
+      type: string
+      description: MME_FSB1_15B-CP04-r5a01
+    volume_size:
+      label: volume size
+      hidden: false
+      immutable: false
+      type: float
+      description: my volume size 320GB
+    fsb1-Internal1-mac:
+      label: FSB1_internal_mac
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_internal_mac
+    Internal2_shared:
+      label: Internal2_shared
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal2_shared
+    pcm_server_name:
+      label: pcm_server_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcm_server_name
+    Internal1_net_name:
+      label: Internal1_net_name
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal1_net_name
+    oam_net_name:
+      label: oam_net_name
+      hidden: false
+      immutable: false
+      type: string
+      description: oam_net_name
+    fsb1-flavor:
+      label: FSB1_flavor
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_flavor
+    fsb1-Internal2-mac:
+      label: FSB1_internal_mac
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_internal_mac
+    volume_type:
+      label: volume type
+      hidden: false
+      immutable: false
+      type: string
+      description: volume type Gold
+    fsb1-zone:
+      label: FSB1_zone
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_zone
+    fsb_zone:
+      label: FSB1_zone
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_zone
+    security_group_name:
+      hidden: false
+      immutable: false
+      type: list
+      description: CMAUI1, CMAUI2 server names
+      entry_schema:
+        type: String
+    jsa_net_name:
+      label: jsa_net_name
+      hidden: false
+      immutable: false
+      type: string
+      description: jsa_net_name
+      default: jsa_log_net_0
+    pcrf_psm_server_name:
+      label: pcrf_psm_server_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcrf_psm_server_name
+    pcm_flavor_name:
+      label: pcm_flavor_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcm_flavor_name
+    oam_net_id:
+      label: oam_net_id
+      hidden: false
+      immutable: false
+      type: string
+      description: oam_net_id
+    fsb2-Internal1-mac:
+      label: FSB1_internal_mac
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_internal_mac
+    Internal1_forwarding_mode:
+      label: Internal1_forwarding_mode
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal1_forwarding_mode
+    pcrf_cps_net_name:
+      label: pcrf_cps_net_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcrf_cps_net_name
+    cps_net_name:
+      label: cps_net_name
+      hidden: false
+      immutable: false
+      type: string
+      description: cps_net_name
+    pcrf_security_group_name:
+      hidden: false
+      immutable: false
+      type: list
+      description: CMAUI1, CMAUI2 server names
+      entry_schema:
+        type: String
+    Internal1_external:
+      label: Internal1_external
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal1_external
+  node_templates:
+    pcm_vol_02:
+      type: org.openecomp.resource.vfc.nodes.heat.cinder.Volume
+      properties:
+        image:
+          get_input: FSB_1_image
+        volume_type:
+          get_input: volume_type
+        size: '(get_input : volume_size) * 1024'
+        read_only: true
+        name:
+          get_input: FSB1_volume_name
+    Internal2-net:
+      type: org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork
+      properties:
+        shared:
+          get_input: Internal2_shared
+        forwarding_mode:
+          get_input: Internal2_forwarding_mode
+        external:
+          get_input: Internal2_external
+        network_name:
+          get_input: Internal2_name
+    pcm_port_1:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        security_groups:
+        - get_input: security_group_name
+        fixed_ips:
+        - ip_address:
+            get_input: oam_net_ip
+        network:
+          get_input: oam_net_name
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: server_pcm
+          relationship: tosca.relationships.network.BindsTo
+    server_VolumeTest_snapshot02:
+      type: org.openecomp.resource.vfc.nodes.heat.cinder.Volume
+      properties:
+        snapshot_id:
+          get_input: snapshot02
+    FSB1_Internal2_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        mac_address:
+          get_input: fsb1-Internal2-mac
+        network: Internal2-net
+      requirements:
+      - link:
+          capability: tosca.capabilities.network.Linkable
+          node: Internal2-net
+          relationship: tosca.relationships.network.LinksTo
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: FSB1
+          relationship: tosca.relationships.network.BindsTo
+    server_VolumeTest_snapshot01:
+      type: org.openecomp.resource.vfc.nodes.heat.cinder.Volume
+      properties:
+        snapshot_id:
+          get_input: snapshot01
+    FSB1_Internal1_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        mac_address:
+          get_input: fsb1-Internal1-mac
+        network: Internal1-net
+      requirements:
+      - link:
+          capability: tosca.capabilities.network.Linkable
+          node: Internal1-net
+          relationship: tosca.relationships.network.LinksTo
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: FSB1
+          relationship: tosca.relationships.network.BindsTo
+    FSB1_OAM_Port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        fixed_ips:
+        - ip_address:
+            get_input: fsb1-oam-ip
+        network:
+          get_input: oam_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: FSB1
+          relationship: tosca.relationships.network.BindsTo
+    psm01_port_0:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        security_groups:
+        - get_input: pcrf_security_group_name
+        fixed_ips:
+        - ip_address:
+            get_input: pcrf_cps_net_ip
+        network:
+          get_input: pcrf_cps_net_name
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: pcrf_server_psm
+          relationship: tosca.relationships.network.BindsTo
+    pcm_port_0:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        security_groups:
+        - get_input: security_group_name
+        fixed_ips:
+        - ip_address:
+            get_input: cps_net_ip
+        network:
+          get_input: cps_net_name
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: server_pcm
+          relationship: tosca.relationships.network.BindsTo
+    network:
+      type: org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork
+      properties:
+        network_name:
+          get_input: Internal1_net_name
+    server_pcm:
+      type: org.openecomp.resource.vfc.nodes.heat.pcm
+      properties:
+        flavor:
+          get_input: pcm_flavor_name
+        availability_zone:
+          get_input: availabilityzone_name
+        image:
+          get_input: pcm_image_name
+        config_drive: 'True'
+        user_data_format: RAW
+        name:
+          get_input: pcm_server_name
+        user_data: UNSUPPORTED_RESOURCE_server_init
+    Internal1-net:
+      type: org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork
+      properties:
+        shared:
+          get_input: Internal1_shared
+        forwarding_mode:
+          get_input: Internal1_forwarding_mode
+        external:
+          get_input: Internal1_external
+        network_name:
+          get_input: Internal1_net_name
+    pcrf_server_psm:
+      type: org.openecomp.resource.vfc.nodes.heat.pcrf_psm
+      properties:
+        flavor:
+          get_input: pcrf_psm_flavor_name
+        availability_zone:
+          get_input: availabilityzone_name
+        image:
+          get_input: pcrf_psm_image_name
+        config_drive: 'True'
+        metadata:
+          vnf_id:
+            get_input: pcrf_vnf_id
+        user_data_format: RAW
+        name:
+          get_input: pcrf_psm_server_name
+        user_data: UNSUPPORTED_RESOURCE_pcrf_server_init
+    FSB1:
+      type: org.openecomp.resource.vfc.nodes.heat.nova.Server
+      properties:
+        flavor:
+          get_input: fsb1-flavor
+        availability_zone:
+          get_input: fsb_zone
+        metadata:
+          write_files:
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth0
+            permissions: '0644'
+            content:
+              str_replace:
+                template:
+                  get_artifact:
+                  - SELF
+                  - nimbus-ethernet
+                params:
+                  $dev: eth0
+                  $netmask:
+                    get_input: cps_net_mask
+                  $ip:
+                    get_input: cps_net_ip
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth1
+            permissions: '0644'
+            content:
+              str_replace:
+                template:
+                  get_artifact:
+                  - SELF
+                  - nimbus-ethernet-gw
+                params:
+                  $dev: eth1
+                  $netmask:
+                    get_input: oam_net_mask
+                  $gateway:
+                    get_input: oam_net_gw
+                  $ip:
+                    get_input: oam_net_ip
+        name:
+          get_input: fsb1-name
+      artifacts:
+        nimbus-ethernet-gw:
+          type: tosca.artifacts.Deployment
+          file: ../Artifacts/nimbus-ethernet-gw
+        nimbus-ethernet:
+          type: tosca.artifacts.Deployment
+          file: ../Artifacts/nimbus-ethernet
+  groups:
+    ep-jsa_net:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/ep-jsa_net.yaml
+        description: |
+          Version 2.0 02-09-2016 (Authors: John Doe, user PROD)
+      members:
+      - pcm_vol_02
+      - Internal2-net
+      - pcm_port_1
+      - FSB1_Internal2_port
+      - FSB1_Internal1_port
+      - FSB1_OAM_Port
+      - psm01_port_0
+      - pcm_port_0
+      - server_pcm
+      - Internal1-net
+      - pcrf_server_psm
+      - FSB1
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/networks/MainServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/networks/MainServiceTemplate.yaml
new file mode 100644
index 0000000..e5c68b6
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/networks/MainServiceTemplate.yaml
@@ -0,0 +1,829 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Main
+imports:
+  NeutronPortGlobalTypes:
+    file: NeutronPortGlobalTypesServiceTemplate.yaml
+  NeutronNetGlobalTypes:
+    file: NeutronNetGlobalTypesServiceTemplate.yaml
+  CommonGlobalTypes:
+    file: CommonGlobalTypesServiceTemplate.yaml
+  CinderVolumeGlobalTypes:
+    file: CinderVolumeGlobalTypesServiceTemplate.yaml
+  ContrailNetworkRuleGlobalType:
+    file: ContrailNetworkRuleGlobalTypeServiceTemplate.yaml
+  NeutronSecurityRulesGlobalTypes:
+    file: NeutronSecurityRulesGlobalTypesServiceTemplate.yaml
+  NovaServerGlobalTypes:
+    file: NovaServerGlobalTypesServiceTemplate.yaml
+  ContrailVirtualNetworkGlobalType:
+    file: ContrailVirtualNetworkGlobalTypeServiceTemplate.yaml
+  AbstractSubstituteGlobalTypes:
+    file: AbstractSubstituteGlobalTypesServiceTemplate.yaml
+topology_template:
+  inputs:
+    Internal2_name:
+      hidden: false
+      immutable: false
+      type: string
+      default: Internal2-subnet
+    vlc2-Internal2-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to vlc2-Internal2
+      default: 00:81:37:0E:02:12
+    epc-sctp-a-net-rt:
+      hidden: false
+      immutable: false
+      type: string
+      description: epc-sctp-a route target
+      default: 13979:105717
+    epc-sctp-b-net-rt:
+      hidden: false
+      immutable: false
+      type: string
+      description: epc-sctp-b route target
+      default: 13979:105719
+    gpb-flavor:
+      hidden: false
+      immutable: false
+      type: string
+      description: Flavor to use for servers gpb
+      default: m4.xlarge4
+    Internal1_cidr:
+      hidden: false
+      immutable: false
+      type: string
+      default: 169.253.0.0/17
+    epc-sctp-a-pool-start:
+      hidden: false
+      immutable: false
+      type: string
+      description: epc-sctp-a-net network ip pool start IP address
+      default: 107.243.37.3
+    Internal2_subnet_name:
+      hidden: false
+      immutable: false
+      type: string
+      default: vmme_int_int_sub_2
+    Internal1_subnet_name:
+      hidden: false
+      immutable: false
+      type: string
+      default: vmme_int_int_sub_1
+    gpb1-Internal1-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to gpb1-Internal1
+      default: 00:80:37:0E:01:22
+    gpb1-Internal1-ip:
+      hidden: false
+      immutable: false
+      type: string
+      default: 169.254.0.101
+    FSB_1_image:
+      hidden: false
+      immutable: false
+      type: string
+      description: image name
+    fsb1-Internal2-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to fsb1-Internal2
+      default: 00:81:37:0E:0B:12
+    ncb_zone:
+      hidden: false
+      immutable: false
+      type: string
+      description: cluster for spawnning ncb instances
+      default: nova
+    Internal2_net_name:
+      hidden: false
+      immutable: false
+      type: string
+      default: vmme_int_int_2
+    epc-sctp-a-pool-end:
+      hidden: false
+      immutable: false
+      type: string
+      description: epc-sctp-a-net network ip pool end IP address
+      default: 107.243.37.30
+    Internal1_name:
+      hidden: false
+      immutable: false
+      type: string
+      default: Internal1-subnet
+    gpb2-name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of gpb2
+      default: ZRDM1MMEX33GPB002
+    fsb2-Internal1-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to fsb2-Internal1
+      default: 00:80:37:0E:0D:12
+    fsb2-name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of fsb1
+      default: ZRDM1MMEX33FSB002
+    static_prefix_sctp_b_1:
+      hidden: false
+      immutable: false
+      type: string
+      description: Static Prefix
+      default: 107.239.40.64/30
+    fsb2-oam-ip:
+      hidden: false
+      immutable: false
+      type: string
+      default: 107.250.172.222
+    fsb2-flavor:
+      hidden: false
+      immutable: false
+      type: string
+      description: Flavor to use for servers  fsb2
+      default: m4.xlarge4
+    fsb2-Internal2-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to fsb2-Internal2
+      default: 00:81:37:0E:0D:12
+    ncb2-Internal1-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to ncb2-Internal1
+      default: 00:80:37:0E:0F:12
+    ncb2-name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of ncb2
+      default: ZRDM1MMEX33NCB002
+    epc-sctp-b-pool-end:
+      hidden: false
+      immutable: false
+      type: string
+      description: epc-sctp-b-net network ip pool end IP address
+      default: 107.243.37.62
+    vlc1-gtp-ip:
+      hidden: false
+      immutable: false
+      type: string
+      default: 107.243.37.67
+    epc-sctp-b-pool-start:
+      hidden: false
+      immutable: false
+      type: string
+      description: epc-sctp-b-net network ip pool start IP address
+      default: 107.243.37.35
+    my_instance:
+      hidden: false
+      immutable: false
+      type: string
+      description: instance
+    Internal2_shared:
+      hidden: false
+      immutable: false
+      type: string
+      default: 'False'
+    Internal1_net_name:
+      hidden: false
+      immutable: false
+      type: string
+      default: vmme_int_int_1
+    vlc2-name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of vlc2
+      default: ZRDM1MMEX33VLC002
+    Internal2_ipam_name:
+      hidden: false
+      immutable: false
+      type: string
+      default: vmme_ipam_int2
+    vlc1-sctp-b-ip:
+      hidden: false
+      immutable: false
+      type: string
+      default: 107.243.37.35
+    Internal1_net_pool_end:
+      hidden: false
+      immutable: false
+      type: string
+      default: 169.253.0.254
+    Internal1_default_gateway:
+      hidden: false
+      immutable: false
+      type: string
+      default: 169.253.0.3
+    ncb1-Internal1-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to ncb1-Internal1
+      default: 00:80:37:0E:09:12
+    epc-gtp-net-name:
+      hidden: false
+      immutable: false
+      type: string
+      description: gtp net name
+      default: EPC-GTP
+    vlc1-Internal1-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to vlc1-Internal1
+      default: 00:80:37:0E:01:12
+    gpb2-Internal1-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to gpb2-Internal1
+      default: 00:80:37:0E:02:22
+    epc-gtp-net-cidr:
+      hidden: false
+      immutable: false
+      type: string
+      description: gtp stubnet
+      default: 107.243.37.64/27
+    oam_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: uuid of oam network
+      default: 47bf4cca-0961-422f-bcd6-d5a4fbb1a351
+    vlc_zone:
+      hidden: false
+      immutable: false
+      type: string
+      description: cluster for spawnning vlc instances
+      default: nova
+    vlc2-Internal1-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to vlc2-Internal1
+      default: 00:80:37:0E:02:12
+    epc-sctp-a-net-cidr:
+      hidden: false
+      immutable: false
+      type: string
+      description: epc-sctp-a subnet
+      default: 107.243.37.0/27
+    Internal1_forwarding_mode:
+      hidden: false
+      immutable: false
+      type: string
+      default: l2
+    Internal2_dhcp:
+      hidden: false
+      immutable: false
+      type: string
+      default: 'False'
+    Internal4_dhcp:
+      hidden: false
+      immutable: false
+      type: string
+    fsb1-oam-ip:
+      hidden: false
+      immutable: false
+      type: string
+      default: 107.250.172.221
+    FSB_2_image:
+      hidden: false
+      immutable: false
+      type: string
+      description: image name
+    vlc1-oam-ip:
+      hidden: false
+      immutable: false
+      type: string
+      default: 107.250.172.227
+    epc-sctp-a-net-name:
+      hidden: false
+      immutable: false
+      type: string
+      description: epc-sctp-a net name
+      default: EPC-SCTP-A
+    vlc2-oam-ip:
+      hidden: false
+      immutable: false
+      type: string
+      default: 107.250.172.228
+    Internal2_net_pool_start:
+      hidden: false
+      immutable: false
+      type: string
+      default: 169.255.0.100
+    FSB1_volume_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: volume name
+    vlc1-sctp-a-ip:
+      hidden: false
+      immutable: false
+      type: string
+      default: 107.243.37.3
+    Internal1_ipam_name:
+      hidden: false
+      immutable: false
+      type: string
+      default: vmme_ipam_int1
+    Internal1_dhcp:
+      hidden: false
+      immutable: false
+      type: string
+      default: 'False'
+    Internal3_dhcp:
+      hidden: false
+      immutable: false
+      type: string
+      default: 'True'
+    Internal2_external:
+      hidden: false
+      immutable: false
+      type: string
+      default: 'False'
+    Internal2_forwarding_mode:
+      hidden: false
+      immutable: false
+      type: string
+      default: l2
+    vlc1-name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of vlc1
+      default: ZRDM1MMEX33VLC002
+    vlc-flavor:
+      hidden: false
+      immutable: false
+      type: string
+      description: Flavor to use for servers vlc
+      default: m4.xlarge4
+    epc-gtp-net-rt:
+      hidden: false
+      immutable: false
+      type: string
+      description: gtp route target
+      default: 13979:105715
+    gpb_zone:
+      hidden: false
+      immutable: false
+      type: string
+      description: cluster for spawnning gpb instances
+      default: nova
+    Internal1-net:
+      hidden: false
+      immutable: false
+      type: string
+      description: net
+    gpb1-Internal2-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to gpb1-Internal2
+      default: 00:81:37:0E:01:22
+    fsb1-Internal1-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to fsb1-Internal1
+      default: 00:80:37:0E:0B:12
+    FSB2_volume_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: volume name
+    VMME_FSB2_boot_volume:
+      hidden: false
+      immutable: false
+      type: string
+      default: 089a0d11-4b15-4370-8343-3f90907b1221
+    fsb_zone:
+      hidden: false
+      immutable: false
+      type: string
+      description: cluster for spawnning fsb instances
+      default: nova
+    VMME_FSB1_boot_volume:
+      hidden: false
+      immutable: false
+      type: string
+      default: 8248e794-6173-4b49-b9c3-8219b0b56f4e
+    Internal2_default_gateway:
+      hidden: false
+      immutable: false
+      type: string
+      default: 169.255.0.3
+    Internal1_external:
+      hidden: false
+      immutable: false
+      type: string
+      default: 'False'
+    vlc2-sctp-a-ip:
+      hidden: false
+      immutable: false
+      type: string
+      default: 107.243.37.4
+    ncb-flavor:
+      hidden: false
+      immutable: false
+      type: string
+      description: Flavor to use for servers ncb
+      default: m4.xlarge4
+    Internal1_shared:
+      hidden: false
+      immutable: false
+      type: string
+      default: 'False'
+    fsb1-name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of fsb1
+      default: ZRDM1MMEX33FSB001
+    static_prefix_gtp_1:
+      hidden: false
+      immutable: false
+      type: string
+      description: Static Prefix
+      default: 107.239.40.96/30
+    epc-sctp-b-net-gateway:
+      hidden: false
+      immutable: false
+      type: string
+      description: epc-sctp-b-net network gateway
+      default: 107.243.37.33
+    epc-sctp-b-net-cidr:
+      hidden: false
+      immutable: false
+      type: string
+      description: epc-sctp-b subnet
+      default: 107.243.37.32/24
+    epc-gtp-pool-end:
+      hidden: false
+      immutable: false
+      type: string
+      description: gtp network ip pool end IP address
+      default: 107.243.37.94
+    epc-sctp-a-net-gateway:
+      hidden: false
+      immutable: false
+      type: string
+      description: epc-sctp-a-net network gateway
+      default: 107.243.37.1
+    vlc2-gtp-ip:
+      hidden: false
+      immutable: false
+      type: string
+      default: 107.243.37.68
+    vlc2-sctp-b-ip:
+      hidden: false
+      immutable: false
+      type: string
+      default: 107.243.37.36
+    Internal1_net_pool_start:
+      hidden: false
+      immutable: false
+      type: string
+      default: 169.253.0.100
+    volume_size:
+      hidden: false
+      immutable: false
+      type: string
+      description: volume
+    fsb2-image:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of image to use for server fsb2
+      default: MME_FSB2_15B-CP04-r5a01
+    ncb2-Internal2-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to ncb2-Internal2
+      default: 00:81:37:0E:0F:12
+    ncb1-name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of ncb1
+      default: ZRDM1MMEX33NCB001
+    fsb1-image:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of image to use for server fsb1
+      default: MME_FSB1_15B-CP04-r5a01
+    fsb1-flavor:
+      hidden: false
+      immutable: false
+      type: string
+      description: Flavor to use for servers  fsb1
+      default: m4.xlarge4
+    volume_type:
+      hidden: false
+      immutable: false
+      type: string
+      description: volume
+    Internal2_net_pool_end:
+      hidden: false
+      immutable: false
+      type: string
+      default: 169.255.0.254
+    epc-sctp-b-net-name:
+      hidden: false
+      immutable: false
+      type: string
+      description: epc-sctp-b net name
+      default: EPC-SCTP-B
+    Internal2_cidr:
+      hidden: false
+      immutable: false
+      type: string
+      default: 169.255.0.0/17
+    epc-gtp-net-gateway:
+      hidden: false
+      immutable: false
+      type: string
+      description: gtp network gateway
+      default: 107.243.37.65
+    gpb2-Internal2-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to gpb2-Internal2
+      default: 00:81:37:0E:02:22
+    ncb1-Internal2-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to ncb1-Internal2
+      default: 00:81:37:0E:09:12
+    epc-gtp-pool-start:
+      hidden: false
+      immutable: false
+      type: string
+      description: gtp network ip pool start IP address
+      default: 107.243.37.67
+    static_prefix_sctp_a_1:
+      hidden: false
+      immutable: false
+      type: string
+      description: Static Prefix
+      default: 107.239.40.32/30
+    gpb1-name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of gpb1
+      default: ZRDM1MMEX33GPB001
+    pxe-image:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of image to use for server ncb
+      default: MME_PXE-BOOT_cxp9025898_2r5a01.qcow2
+    vlc1-Internal2-mac:
+      hidden: false
+      immutable: false
+      type: string
+      description: static mac address assigned to vlc1-Internal2
+      default: 00:81:37:0E:01:12
+  node_templates:
+    contail-net-default-true-dhcp:
+      type: org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork
+      properties:
+        route_targets:
+        - get_input: epc-gtp-net-rt
+        network_name:
+          get_input: epc-gtp-net-name
+        subnets:
+          epc-gtp-subnet:
+            cidr:
+              get_input: epc-gtp-net-cidr
+            gateway_ip:
+              get_input: epc-gtp-net-gateway
+            allocation_pools:
+            - start:
+                get_input: epc-gtp-pool-start
+              end:
+                get_input: epc-gtp-pool-end
+    contail-net-dhcp-false-param:
+      type: org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork
+      properties:
+        shared:
+          get_input: Internal1_shared
+        forwarding_mode:
+          get_input: Internal1_forwarding_mode
+        external: true
+        route_targets:
+          get_artifact:
+          - SELF
+          - nimbus-ethernet
+        network_name:
+          get_input: Internal1_net_name
+        subnets:
+          Internal3-subnet:
+            enable_dhcp:
+              get_input: Internal2_dhcp
+            cidr:
+              get_input: Internal2_cidr
+            gateway_ip:
+              get_input: Internal2_default_gateway
+          Internal1-subnet:
+            enable_dhcp:
+              get_input: Internal1_dhcp
+            cidr:
+              get_input: Internal1_cidr
+            gateway_ip:
+              get_input: Internal1_default_gateway
+        dhcp_enabled:
+          get_input: Internal1_dhcp
+      artifacts:
+        nimbus-ethernet:
+          type: tosca.artifacts.Deployment
+          file: ../Artifacts/nimbus-ethernet.sh
+    contail-net-dhcp-false:
+      type: org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork
+      properties:
+        shared:
+          get_input: Internal1_shared
+        forwarding_mode:
+          get_input: Internal1_forwarding_mode
+        external: true
+        route_targets:
+          get_artifact:
+          - SELF
+          - nimbus-ethernet
+        network_name:
+          get_input: Internal1_net_name
+        subnets:
+          Internal3-subnet:
+            enable_dhcp:
+              get_input: Internal2_dhcp
+            cidr:
+              get_input: Internal2_cidr
+            gateway_ip:
+              get_input: Internal2_default_gateway
+          Internal1-subnet:
+            enable_dhcp:
+              get_input: Internal1_dhcp
+            cidr:
+              get_input: Internal1_cidr
+            gateway_ip:
+              get_input: Internal1_default_gateway
+        dhcp_enabled: false
+      artifacts:
+        nimbus-ethernet:
+          type: tosca.artifacts.Deployment
+          file: ../Artifacts/nimbus-ethernet.sh
+    contail-net-dhcp-true-param:
+      type: org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork
+      properties:
+        shared:
+          get_input: Internal1_shared
+        forwarding_mode:
+          get_input: Internal1_forwarding_mode
+        external: true
+        route_targets:
+          get_artifact:
+          - SELF
+          - nimbus-ethernet
+        network_name:
+          get_input: Internal1_net_name
+        subnets:
+          Internal3-subnet:
+            enable_dhcp:
+              get_input: Internal2_dhcp
+            cidr:
+              get_input: Internal2_cidr
+            gateway_ip:
+              get_input: Internal2_default_gateway
+          Internal1-subnet:
+            enable_dhcp:
+              get_input: Internal1_dhcp
+            cidr:
+              get_input: Internal1_cidr
+            gateway_ip:
+              get_input: Internal1_default_gateway
+        dhcp_enabled:
+          get_input: Internal3_dhcp
+      artifacts:
+        nimbus-ethernet:
+          type: tosca.artifacts.Deployment
+          file: ../Artifacts/nimbus-ethernet.sh
+    contail-net-dhcp-true:
+      type: org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork
+      properties:
+        shared:
+          get_input: Internal1_shared
+        forwarding_mode:
+          get_input: Internal1_forwarding_mode
+        external: true
+        route_targets:
+          get_artifact:
+          - SELF
+          - nimbus-ethernet
+        network_name:
+          get_input: Internal1_net_name
+        subnets:
+          Internal3-subnet:
+            enable_dhcp:
+              get_input: Internal2_dhcp
+            cidr:
+              get_input: Internal2_cidr
+            gateway_ip:
+              get_input: Internal2_default_gateway
+          Internal1-subnet:
+            enable_dhcp:
+              get_input: Internal1_dhcp
+            cidr:
+              get_input: Internal1_cidr
+            gateway_ip:
+              get_input: Internal1_default_gateway
+        dhcp_enabled: true
+      artifacts:
+        nimbus-ethernet:
+          type: tosca.artifacts.Deployment
+          file: ../Artifacts/nimbus-ethernet.sh
+    contail-net-dhcp-default-true-param:
+      type: org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork
+      properties:
+        shared:
+          get_input: Internal1_shared
+        forwarding_mode:
+          get_input: Internal1_forwarding_mode
+        external: true
+        route_targets:
+          get_artifact:
+          - SELF
+          - nimbus-ethernet
+        network_name:
+          get_input: Internal1_net_name
+        subnets:
+          Internal3-subnet:
+            enable_dhcp:
+              get_input: Internal2_dhcp
+            cidr:
+              get_input: Internal2_cidr
+            gateway_ip:
+              get_input: Internal2_default_gateway
+          Internal1-subnet:
+            enable_dhcp:
+              get_input: Internal1_dhcp
+            cidr:
+              get_input: Internal1_cidr
+            gateway_ip:
+              get_input: Internal1_default_gateway
+        dhcp_enabled:
+          get_input: Internal4_dhcp
+      artifacts:
+        nimbus-ethernet:
+          type: tosca.artifacts.Deployment
+          file: ../Artifacts/nimbus-ethernet.sh
+    neutron-net-default-dhcp:
+      type: org.openecomp.resource.vl.nodes.heat.network.neutron.Net
+      properties:
+        network_name:
+          get_input: private_net_2_name
+        subnets:
+          private_subnet_2:
+            cidr:
+              get_input: private_net_2_cidr
+            gateway_ip:
+              get_input: private_net_2_gateway
+            allocation_pools:
+            - start:
+                get_input: private_net_2_pool_start
+              end:
+                get_input: private_net_2_pool_end
+  groups:
+    vmme_small:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/vmme_small.yml
+        description: |
+          HOT template to create vmme 2 fsb 2 ncb 2 gbp 2 vlc
+      members:
+      - contail-net-default-true-dhcp
+      - contail-net-dhcp-false-param
+      - contail-net-dhcp-false
+      - contail-net-dhcp-true-param
+      - contail-net-dhcp-true
+      - contail-net-dhcp-default-true-param
+      - neutron-net-default-dhcp
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/onlyComponents/OnlyComponentsST.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/onlyComponents/OnlyComponentsST.yaml
new file mode 100644
index 0000000..54f39e4
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/onlyComponents/OnlyComponentsST.yaml
@@ -0,0 +1,350 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Main
+imports:
+  NeutronPortGlobalTypes:
+    file: NeutronPortGlobalTypesServiceTemplate.yaml
+  NeutronNetGlobalTypes:
+    file: NeutronNetGlobalTypesServiceTemplate.yaml
+  CommonGlobalTypes:
+    file: CommonGlobalTypesServiceTemplate.yaml
+  CinderVolumeGlobalTypes:
+    file: CinderVolumeGlobalTypesServiceTemplate.yaml
+  ContrailNetworkRuleGlobalType:
+    file: ContrailNetworkRuleGlobalTypeServiceTemplate.yaml
+  NeutronSecurityRulesGlobalTypes:
+    file: NeutronSecurityRulesGlobalTypesServiceTemplate.yaml
+  NovaServerGlobalTypes:
+    file: NovaServerGlobalTypesServiceTemplate.yaml
+  ContrailVirtualNetworkGlobalType:
+    file: ContrailVirtualNetworkGlobalTypeServiceTemplate.yaml
+  AbstractSubstituteGlobalTypes:
+    file: AbstractSubstituteGlobalTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.pcrf_psm:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+  org.openecomp.resource.vfc.nodes.heat.pcm:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    Internal2_name:
+      label: Internal2_name
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal2_name
+    Internal1_shared:
+      label: Internal1_shared
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal1_shared
+    FSB1_volume_name:
+      label: FSB1_volume
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_volume_1
+    jsa_cidr:
+      label: jsa_cidr
+      hidden: false
+      immutable: false
+      type: string
+      description: jsa_cidr
+      default: 107.243.7.128/26
+    availabilityzone_name:
+      label: availabilityzone_name
+      hidden: false
+      immutable: false
+      type: string
+      description: availabilityzone_name
+    fsb1-name:
+      label: FSB1_name
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_name
+    pcm_image_name:
+      label: pcm_image_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcm_image_name
+    Internal2_external:
+      label: Internal2_external
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal2_external
+    Internal2_forwarding_mode:
+      label: Internal2_forwarding_mode
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal2_forwarding_mode
+    pcrf_psm_flavor_name:
+      label: pcrf_psm_flavor_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcrf_psm_flavor_name
+    pcrf_psm_image_name:
+      label: pcrf_psm_image_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcrf_psm_image_name
+    FSB_1_image:
+      label: MME_FSB1
+      hidden: false
+      immutable: false
+      type: string
+      description: MME_FSB1_15B-CP04-r5a01
+    volume_size:
+      label: volume size
+      hidden: false
+      immutable: false
+      type: float
+      description: my volume size 320GB
+    fsb1-Internal1-mac:
+      label: FSB1_internal_mac
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_internal_mac
+    Internal2_shared:
+      label: Internal2_shared
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal2_shared
+    pcm_server_name:
+      label: pcm_server_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcm_server_name
+    Internal1_net_name:
+      label: Internal1_net_name
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal1_net_name
+    oam_net_name:
+      label: oam_net_name
+      hidden: false
+      immutable: false
+      type: string
+      description: oam_net_name
+    fsb1-flavor:
+      label: FSB1_flavor
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_flavor
+    fsb1-Internal2-mac:
+      label: FSB1_internal_mac
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_internal_mac
+    volume_type:
+      label: volume type
+      hidden: false
+      immutable: false
+      type: string
+      description: volume type Gold
+    fsb1-zone:
+      label: FSB1_zone
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_zone
+    fsb_zone:
+      label: FSB1_zone
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_zone
+    security_group_name:
+      hidden: false
+      immutable: false
+      type: list
+      description: CMAUI1, CMAUI2 server names
+      entry_schema:
+        type: String
+    jsa_net_name:
+      label: jsa_net_name
+      hidden: false
+      immutable: false
+      type: string
+      description: jsa_net_name
+      default: jsa_log_net_0
+    pcrf_psm_server_name:
+      label: pcrf_psm_server_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcrf_psm_server_name
+    pcm_flavor_name:
+      label: pcm_flavor_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcm_flavor_name
+    oam_net_id:
+      label: oam_net_id
+      hidden: false
+      immutable: false
+      type: string
+      description: oam_net_id
+    fsb2-Internal1-mac:
+      label: FSB1_internal_mac
+      hidden: false
+      immutable: false
+      type: string
+      description: FSB1_internal_mac
+    Internal1_forwarding_mode:
+      label: Internal1_forwarding_mode
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal1_forwarding_mode
+    pcrf_cps_net_name:
+      label: pcrf_cps_net_name
+      hidden: false
+      immutable: false
+      type: string
+      description: pcrf_cps_net_name
+    cps_net_name:
+      label: cps_net_name
+      hidden: false
+      immutable: false
+      type: string
+      description: cps_net_name
+    pcrf_security_group_name:
+      hidden: false
+      immutable: false
+      type: list
+      description: CMAUI1, CMAUI2 server names
+      entry_schema:
+        type: String
+    Internal1_external:
+      label: Internal1_external
+      hidden: false
+      immutable: false
+      type: string
+      description: Internal1_external
+  node_templates:
+    nova_local_type_pcm1:
+      type: org.openecomp.resource.vfc.nodes.heat.pcm
+      properties:
+        flavor:
+          get_input: pcm_flavor_name
+        availability_zone:
+          get_input: availabilityzone_name
+        image:
+          get_input: pcm_image_name
+        config_drive: 'True'
+        user_data_format: RAW
+        name:
+          get_input: pcm_server_name
+        user_data: UNSUPPORTED_RESOURCE_server_init
+    nova_local_type_pcm2:
+      type: org.openecomp.resource.vfc.nodes.heat.pcm
+      properties:
+        flavor:
+          get_input: pcm_flavor_name
+        availability_zone:
+          get_input: availabilityzone_name
+        image:
+          get_input: pcm_image_name
+        config_drive: 'True'
+        user_data_format: RAW
+        name:
+          get_input: pcm_server_name
+        user_data: UNSUPPORTED_RESOURCE_server_init
+    nova_local_type_pcrf_psm:
+      type: org.openecomp.resource.vfc.nodes.heat.pcrf_psm
+      properties:
+        flavor:
+          get_input: pcm_flavor_name
+        availability_zone:
+          get_input: availabilityzone_name
+        image:
+          get_input: pcm_image_name
+        config_drive: 'True'
+        user_data_format: RAW
+        name:
+          get_input: pcm_server_name
+        user_data: UNSUPPORTED_RESOURCE_server_init
+    nova_global_type1:
+      type: org.openecomp.resource.vfc.nodes.heat.nova.Server
+      properties:
+        flavor:
+          get_input: fsb1-flavor
+        availability_zone:
+          get_input: fsb_zone
+        name:
+          get_input: fsb1-name
+    nova_global_type2:
+      type: org.openecomp.resource.vfc.nodes.heat.nova.Server
+      properties:
+        flavor:
+          get_input: fsb1-flavor
+        availability_zone:
+          get_input: fsb_zone
+        metadata:
+          write_files:
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth0
+            permissions: '0644'
+            content:
+              str_replace:
+                template:
+                  get_artifact:
+                  - SELF
+                  - nimbus-ethernet
+                params:
+                  $dev: eth0
+                  $netmask:
+                    get_input: cps_net_mask
+                  $ip:
+                    get_input: cps_net_ip
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth1
+            permissions: '0644'
+            content:
+              str_replace:
+                template:
+                  get_artifact:
+                  - SELF
+                  - nimbus-ethernet-gw
+                params:
+                  $dev: eth1
+                  $netmask:
+                    get_input: oam_net_mask
+                  $gateway:
+                    get_input: oam_net_gw
+                  $ip:
+                    get_input: oam_net_ip
+        name:
+          get_input: fsb1-name
+      artifacts:
+        nimbus-ethernet-gw:
+          type: tosca.artifacts.Deployment
+          file: ../Artifacts/nimbus-ethernet-gw
+        nimbus-ethernet:
+          type: tosca.artifacts.Deployment
+          file: ../Artifacts/nimbus-ethernet
+  groups:
+    ep-jsa_net:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/ep-jsa_net.yaml
+        description: |
+          Version 2.0 02-09-2016 (Authors: John Doe, user PROD)
+      members:
+      - nova_local_type_pcm1
+      - nova_local_type_pcm2
+      - nova_local_type_pcrf_psm
+      - nova_global_type1
+      - nova_global_type2
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/substitution/GlobalSubstitutionTypesServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/substitution/GlobalSubstitutionTypesServiceTemplate.yaml
new file mode 100644
index 0000000..06e6fb0
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/substitution/GlobalSubstitutionTypesServiceTemplate.yaml
@@ -0,0 +1,235 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: GlobalSubstitutionTypes
+imports:
+  NeutronPortGlobalTypes:
+    file: NeutronPortGlobalTypesServiceTemplate.yaml
+  NeutronNetGlobalTypes:
+    file: NeutronNetGlobalTypesServiceTemplate.yaml
+  CommonGlobalTypes:
+    file: CommonGlobalTypesServiceTemplate.yaml
+  CinderVolumeGlobalTypes:
+    file: CinderVolumeGlobalTypesServiceTemplate.yaml
+  ContrailNetworkRuleGlobalType:
+    file: ContrailNetworkRuleGlobalTypeServiceTemplate.yaml
+  NeutronSecurityRulesGlobalTypes:
+    file: NeutronSecurityRulesGlobalTypesServiceTemplate.yaml
+  NovaServerGlobalTypes:
+    file: NovaServerGlobalTypesServiceTemplate.yaml
+  ContrailVirtualNetworkGlobalType:
+    file: ContrailVirtualNetworkGlobalTypeServiceTemplate.yaml
+  AbstractSubstituteGlobalTypes:
+    file: AbstractSubstituteGlobalTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.abstract.nodes.heat.nested1:
+    derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute
+    properties:
+      cmaui_names:
+        type: list
+        description: CMAUI1, CMAUI2 server names
+        entry_schema:
+          type: String
+      p1:
+        type: string
+        description: UID of OAM network
+      p2:
+        type: string
+        description: UID of OAM network
+      abc_flavor:
+        type: string
+        description: Flavor for CMAUI server
+      cmaui_image:
+        type: string
+        description: Image for CMAUI server
+      cmaui_flavor:
+        type: string
+        description: Flavor for CMAUI server
+      abc_names:
+        type: list
+        description: CMAUI1, CMAUI2 server names
+        entry_schema:
+          type: String
+      security_group_name:
+        description: not impotrtant
+      availability_zone_0:
+        type: string
+        description: availabilityzone name
+      abc_image:
+        type: string
+        description: Image for CMAUI server
+    requirements:
+    - link_cmaui_port_2:
+        capability: tosca.capabilities.network.Linkable
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - local_storage_server_cmaui:
+        capability: tosca.capabilities.Attachment
+        node: tosca.nodes.BlockStorage
+        relationship: tosca.relationships.AttachesTo
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - local_storage_server_abc:
+        capability: tosca.capabilities.Attachment
+        node: tosca.nodes.BlockStorage
+        relationship: tosca.relationships.AttachesTo
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_abc_port_1:
+        capability: tosca.capabilities.network.Linkable
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - link_cmaui_port_1:
+        capability: tosca.capabilities.network.Linkable
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    capabilities:
+      scalable_server_abc:
+        type: tosca.capabilities.Scalable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      os_server_cmaui:
+        type: tosca.capabilities.OperatingSystem
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_abc_port_1:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      host_server_abc:
+        type: tosca.capabilities.Container
+        valid_source_types:
+        - tosca.nodes.SoftwareComponent
+        occurrences:
+        - 1
+        - UNBOUNDED
+      scalable_server_cmaui:
+        type: tosca.capabilities.Scalable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      os_server_abc:
+        type: tosca.capabilities.OperatingSystem
+        occurrences:
+        - 1
+        - UNBOUNDED
+      host_server_cmaui:
+        type: tosca.capabilities.Container
+        valid_source_types:
+        - tosca.nodes.SoftwareComponent
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_server_abc:
+        type: tosca.capabilities.network.Bindable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      endpoint_server_cmaui:
+        type: tosca.capabilities.Endpoint.Admin
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_server_cmaui:
+        type: tosca.capabilities.network.Bindable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      endpoint_server_abc:
+        type: tosca.capabilities.Endpoint.Admin
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_cmaui_port_2:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_cmaui_port_1:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+  org.openecomp.resource.abstract.nodes.heat.nested2:
+    derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute
+    properties:
+      cmaui_names:
+        type: list
+        description: CMAUI1, CMAUI2 server names
+        entry_schema:
+          type: String
+      p1:
+        type: string
+        description: UID of OAM network
+      cmaui_image:
+        type: string
+        description: Image for CMAUI server
+      cmaui_flavor:
+        type: string
+        description: Flavor for CMAUI server
+      security_group_name:
+        description: not impotrtant
+      availability_zone_0:
+        type: string
+        description: availabilityzone name
+    requirements:
+    - local_storage_server_cmaui:
+        capability: tosca.capabilities.Attachment
+        node: tosca.nodes.BlockStorage
+        relationship: tosca.relationships.AttachesTo
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_cmaui_port_1:
+        capability: tosca.capabilities.network.Linkable
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    capabilities:
+      host_server_cmaui:
+        type: tosca.capabilities.Container
+        valid_source_types:
+        - tosca.nodes.SoftwareComponent
+        occurrences:
+        - 1
+        - UNBOUNDED
+      os_server_cmaui:
+        type: tosca.capabilities.OperatingSystem
+        occurrences:
+        - 1
+        - UNBOUNDED
+      endpoint_server_cmaui:
+        type: tosca.capabilities.Endpoint.Admin
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_server_cmaui:
+        type: tosca.capabilities.network.Bindable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      scalable_server_cmaui:
+        type: tosca.capabilities.Scalable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_cmaui_port_1:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/substitution/MainServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/substitution/MainServiceTemplate.yaml
new file mode 100644
index 0000000..6dd5577
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/substitution/MainServiceTemplate.yaml
@@ -0,0 +1,139 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Main
+imports:
+  NeutronPortGlobalTypes:
+    file: NeutronPortGlobalTypesServiceTemplate.yaml
+  NeutronNetGlobalTypes:
+    file: NeutronNetGlobalTypesServiceTemplate.yaml
+  CommonGlobalTypes:
+    file: CommonGlobalTypesServiceTemplate.yaml
+  CinderVolumeGlobalTypes:
+    file: CinderVolumeGlobalTypesServiceTemplate.yaml
+  ContrailNetworkRuleGlobalType:
+    file: ContrailNetworkRuleGlobalTypeServiceTemplate.yaml
+  NeutronSecurityRulesGlobalTypes:
+    file: NeutronSecurityRulesGlobalTypesServiceTemplate.yaml
+  NovaServerGlobalTypes:
+    file: NovaServerGlobalTypesServiceTemplate.yaml
+  ContrailVirtualNetworkGlobalType:
+    file: ContrailVirtualNetworkGlobalTypeServiceTemplate.yaml
+  AbstractSubstituteGlobalTypes:
+    file: AbstractSubstituteGlobalTypesServiceTemplate.yaml
+topology_template:
+  inputs:
+    shared_network_id1:
+      hidden: false
+      immutable: false
+      type: string
+      description: network name of jsa log network
+    shared_network_id2:
+      hidden: false
+      immutable: false
+      type: string
+      description: network name of jsa log network
+    jsa_net_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: network name of jsa log network
+  node_templates:
+    test_net2:
+      type: org.openecomp.resource.vl.nodes.heat.network.neutron.Net
+      properties:
+        shared: true
+        network_name:
+          get_input: jsa_net_name
+    test_nested2:
+      type: org.openecomp.resource.abstract.nodes.heat.nested2
+      directives:
+      - substitutable
+      properties:
+        p1:
+          get_input: shared_network_id1
+        service_template_filter:
+          substitute_service_template: nested2ServiceTemplate.yaml
+      requirements:
+      - link_cmaui_port_1:
+          capability: tosca.capabilities.network.Linkable
+          node: test_net1
+          relationship: tosca.relationships.network.LinksTo
+    test_nested3:
+      type: org.openecomp.resource.abstract.nodes.heat.nested1
+      directives:
+      - substitutable
+      properties:
+        p1:
+          get_input: shared_network_id1
+        service_template_filter:
+          substitute_service_template: nested1ServiceTemplate.yaml
+        p2:
+          get_input: shared_network_id2
+      requirements:
+      - link_cmaui_port_2:
+          capability: tosca.capabilities.network.Linkable
+          node: test_net2
+          relationship: tosca.relationships.network.LinksTo
+      - link_abc_port_1:
+          capability: tosca.capabilities.network.Linkable
+          node: test_net2
+          relationship: tosca.relationships.network.LinksTo
+      - link_cmaui_port_1:
+          capability: tosca.capabilities.network.Linkable
+          node: test_net1
+          relationship: tosca.relationships.network.LinksTo
+    test_net1:
+      type: org.openecomp.resource.vl.nodes.heat.network.neutron.Net
+      properties:
+        shared: true
+        network_name:
+          get_input: jsa_net_name
+    test_nested1:
+      type: org.openecomp.resource.abstract.nodes.heat.nested1
+      directives:
+      - substitutable
+      properties:
+        p1:
+          get_input: shared_network_id1
+        service_template_filter:
+          substitute_service_template: nested1ServiceTemplate.yaml
+        p2:
+          get_input: shared_network_id2
+      requirements:
+      - link_cmaui_port_2:
+          capability: tosca.capabilities.network.Linkable
+          node: test_net2
+          relationship: tosca.relationships.network.LinksTo
+      - link_abc_port_1:
+          capability: tosca.capabilities.network.Linkable
+          node: test_net2
+          relationship: tosca.relationships.network.LinksTo
+      - link_cmaui_port_1:
+          capability: tosca.capabilities.network.Linkable
+          node: test_net1
+          relationship: tosca.relationships.network.LinksTo
+  groups:
+    addOn:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/addOn.yml
+        description: |
+          Version 2.0 02-09-2016 (Authors: John Doe, user PROD)
+      members:
+      - test_nested2
+      - test_nested3
+      - test_nested1
+    main:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/main.yml
+        description: |
+          Version 2.0 02-09-2016 (Authors: John Doe, user PROD)
+      members:
+      - test_net2
+      - test_net1
+  outputs:
+    shared_network_id1:
+      value: test_net1
+    shared_network_id2:
+      value: test_net2
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/substitution/nested1ServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/substitution/nested1ServiceTemplate.yaml
new file mode 100644
index 0000000..1eb0796
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/substitution/nested1ServiceTemplate.yaml
@@ -0,0 +1,241 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: nested1
+imports:
+  NeutronPortGlobalTypes:
+    file: NeutronPortGlobalTypesServiceTemplate.yaml
+  NeutronNetGlobalTypes:
+    file: NeutronNetGlobalTypesServiceTemplate.yaml
+  CommonGlobalTypes:
+    file: CommonGlobalTypesServiceTemplate.yaml
+  CinderVolumeGlobalTypes:
+    file: CinderVolumeGlobalTypesServiceTemplate.yaml
+  ContrailNetworkRuleGlobalType:
+    file: ContrailNetworkRuleGlobalTypeServiceTemplate.yaml
+  NeutronSecurityRulesGlobalTypes:
+    file: NeutronSecurityRulesGlobalTypesServiceTemplate.yaml
+  NovaServerGlobalTypes:
+    file: NovaServerGlobalTypesServiceTemplate.yaml
+  nested1:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+  ContrailVirtualNetworkGlobalType:
+    file: ContrailVirtualNetworkGlobalTypeServiceTemplate.yaml
+  AbstractSubstituteGlobalTypes:
+    file: AbstractSubstituteGlobalTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.cmaui_image:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+  org.openecomp.resource.vfc.nodes.heat.abc_image:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    cmaui_names:
+      hidden: false
+      immutable: false
+      type: list
+      description: CMAUI1, CMAUI2 server names
+      entry_schema:
+        type: String
+    p1:
+      hidden: false
+      immutable: false
+      type: string
+      description: UID of OAM network
+    p2:
+      hidden: false
+      immutable: false
+      type: string
+      description: UID of OAM network
+    abc_flavor:
+      hidden: false
+      immutable: false
+      type: string
+      description: Flavor for CMAUI server
+    cmaui_image:
+      hidden: false
+      immutable: false
+      type: string
+      description: Image for CMAUI server
+    cmaui_flavor:
+      hidden: false
+      immutable: false
+      type: string
+      description: Flavor for CMAUI server
+    abc_names:
+      hidden: false
+      immutable: false
+      type: list
+      description: CMAUI1, CMAUI2 server names
+      entry_schema:
+        type: String
+    security_group_name:
+      hidden: false
+      immutable: false
+      description: not impotrtant
+    availability_zone_0:
+      label: availabilityzone name
+      hidden: false
+      immutable: false
+      type: string
+      description: availabilityzone name
+    abc_image:
+      hidden: false
+      immutable: false
+      type: string
+      description: Image for CMAUI server
+  node_templates:
+    cmaui_port_2:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        replacement_policy: AUTO
+        security_groups:
+        - get_input: security_group_name
+        fixed_ips:
+        - ip_address:
+            get_input:
+            - cmaui_oam_ips
+            - 0
+        network:
+          get_input: p2
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: server_cmaui
+          relationship: tosca.relationships.network.BindsTo
+    server_cmaui:
+      type: org.openecomp.resource.vfc.nodes.heat.cmaui_image
+      properties:
+        flavor:
+          get_input: cmaui_flavor
+        availability_zone:
+          get_input: availability_zone_0
+        image:
+          get_input: cmaui_image
+        name:
+          get_input:
+          - cmaui_names
+          - 0
+    server_abc:
+      type: org.openecomp.resource.vfc.nodes.heat.abc_image
+      properties:
+        flavor:
+          get_input: abc_flavor
+        availability_zone:
+          get_input: availability_zone_0
+        image:
+          get_input: abc_image
+        name:
+          get_input:
+          - abc_names
+          - 0
+    abc_port_1:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        replacement_policy: AUTO
+        security_groups:
+        - get_input: security_group_name
+        fixed_ips:
+        - ip_address:
+            get_input:
+            - abc_oam_ips
+            - 0
+        network:
+          get_input: p2
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: server_abc
+          relationship: tosca.relationships.network.BindsTo
+    cmaui_port_1:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        replacement_policy: AUTO
+        security_groups:
+        - get_input: security_group_name
+        fixed_ips:
+        - ip_address:
+            get_input:
+            - cmaui_oam_ips
+            - 0
+        network:
+          get_input: p1
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: server_cmaui
+          relationship: tosca.relationships.network.BindsTo
+    Internal1-net:
+      type: org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork
+      properties:
+        network_name:
+          get_input: Internal1_net_name
+  groups:
+    nested1:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/nested1.yml
+        description: cmaui server template for vMMSC
+      members:
+      - cmaui_port_2
+      - server_cmaui
+      - server_abc
+      - abc_port_1
+      - cmaui_port_1
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.heat.nested1
+    capabilities:
+      scalable_server_abc:
+      - server_abc
+      - scalable
+      os_server_cmaui:
+      - server_cmaui
+      - os
+      attachment_abc_port_1:
+      - abc_port_1
+      - attachment
+      host_server_abc:
+      - server_abc
+      - host
+      scalable_server_cmaui:
+      - server_cmaui
+      - scalable
+      os_server_abc:
+      - server_abc
+      - os
+      host_server_cmaui:
+      - server_cmaui
+      - host
+      binding_server_abc:
+      - server_abc
+      - binding
+      endpoint_server_cmaui:
+      - server_cmaui
+      - endpoint
+      binding_server_cmaui:
+      - server_cmaui
+      - binding
+      endpoint_server_abc:
+      - server_abc
+      - endpoint
+      attachment_cmaui_port_2:
+      - cmaui_port_2
+      - attachment
+      attachment_cmaui_port_1:
+      - cmaui_port_1
+      - attachment
+    requirements:
+      local_storage_server_cmaui:
+      - server_cmaui
+      - local_storage
+      link_abc_port_1:
+      - abc_port_1
+      - link
+      link_cmaui_port_2:
+      - cmaui_port_2
+      - link
+      link_cmaui_port_1:
+      - cmaui_port_1
+      - link
+      local_storage_server_abc:
+      - server_abc
+      - local_storage
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/substitution/nested2ServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/substitution/nested2ServiceTemplate.yaml
new file mode 100644
index 0000000..3545683
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/substitution/nested2ServiceTemplate.yaml
@@ -0,0 +1,135 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: nested2
+imports:
+  NeutronPortGlobalTypes:
+    file: NeutronPortGlobalTypesServiceTemplate.yaml
+  NeutronNetGlobalTypes:
+    file: NeutronNetGlobalTypesServiceTemplate.yaml
+  CommonGlobalTypes:
+    file: CommonGlobalTypesServiceTemplate.yaml
+  CinderVolumeGlobalTypes:
+    file: CinderVolumeGlobalTypesServiceTemplate.yaml
+  ContrailNetworkRuleGlobalType:
+    file: ContrailNetworkRuleGlobalTypeServiceTemplate.yaml
+  NeutronSecurityRulesGlobalTypes:
+    file: NeutronSecurityRulesGlobalTypesServiceTemplate.yaml
+  nested2:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+  NovaServerGlobalTypes:
+    file: NovaServerGlobalTypesServiceTemplate.yaml
+  ContrailVirtualNetworkGlobalType:
+    file: ContrailVirtualNetworkGlobalTypeServiceTemplate.yaml
+  AbstractSubstituteGlobalTypes:
+    file: AbstractSubstituteGlobalTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.cmaui_image:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    cmaui_names:
+      hidden: false
+      immutable: false
+      type: list
+      description: CMAUI1, CMAUI2 server names
+      entry_schema:
+        type: String
+    p1:
+      hidden: false
+      immutable: false
+      type: string
+      description: UID of OAM network
+    cmaui_image:
+      hidden: false
+      immutable: false
+      type: string
+      description: Image for CMAUI server
+    cmaui_flavor:
+      hidden: false
+      immutable: false
+      type: string
+      description: Flavor for CMAUI server
+    security_group_name:
+      hidden: false
+      immutable: false
+      description: not impotrtant
+    availability_zone_0:
+      label: availabilityzone name
+      hidden: false
+      immutable: false
+      type: string
+      description: availabilityzone name
+  node_templates:
+    server_cmaui:
+      type: org.openecomp.resource.vfc.nodes.heat.cmaui_image
+      properties:
+        flavor:
+          get_input: cmaui_flavor
+        availability_zone:
+          get_input: availability_zone_0
+        image:
+          get_input: cmaui_image
+        name:
+          get_input:
+          - cmaui_names
+          - 0
+    cmaui_port_1:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        replacement_policy: AUTO
+        security_groups:
+        - get_input: security_group_name
+        fixed_ips:
+        - ip_address:
+            get_input:
+            - cmaui_oam_ips
+            - 0
+        network:
+          get_input: p1
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: server_cmaui
+          relationship: tosca.relationships.network.BindsTo
+    Internal1-net:
+      type: org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork
+      properties:
+        network_name:
+          get_input: Internal1_net_name
+  groups:
+    nested2:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/nested2.yml
+        description: cmaui server template for vMMSC
+      members:
+      - server_cmaui
+      - cmaui_port_1
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.heat.nested2
+    capabilities:
+      host_server_cmaui:
+      - server_cmaui
+      - host
+      os_server_cmaui:
+      - server_cmaui
+      - os
+      endpoint_server_cmaui:
+      - server_cmaui
+      - endpoint
+      binding_server_cmaui:
+      - server_cmaui
+      - binding
+      scalable_server_cmaui:
+      - server_cmaui
+      - scalable
+      attachment_cmaui_port_1:
+      - cmaui_port_1
+      - attachment
+    requirements:
+      local_storage_server_cmaui:
+      - server_cmaui
+      - local_storage
+      link_cmaui_port_1:
+      - cmaui_port_1
+      - link
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/AbstractSubstituteGlobalTypesServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/AbstractSubstituteGlobalTypesServiceTemplate.yaml
new file mode 100644
index 0000000..8813b0a
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/AbstractSubstituteGlobalTypesServiceTemplate.yaml
@@ -0,0 +1,47 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: AbstractSubstituteGlobalTypes
+  template_version: 1.0.0
+description: Abstract Substitute Global Types
+imports:
+  common_definitions:
+    file: CommonGlobalTypesServiceTemplate.yaml
+data_types:
+  org.openecomp.datatypes.heat.substitution.SubstitutionFilter:
+    derived_from: tosca.datatypes.Root
+    description: Substitution Filter
+    properties:
+      substitute_service_template:
+        type: string
+        description: Substitute Service Template
+        required: true
+        status: SUPPORTED
+      index_variable:
+        type: string
+        description: Index variable
+        required: false
+        default: '%index%'
+        status: SUPPORTED
+        constraints:
+        - min_length: 3
+      count:
+        type: string
+        description: Count
+        required: false
+        default: 1
+        status: SUPPORTED
+      mandatory:
+        type: boolean
+        description: Mandatory
+        required: false
+        default: true
+        status: SUPPORTED
+node_types:
+  org.openecomp.resource.abstract.nodes.AbstractSubstitute:
+    derived_from: tosca.nodes.Root
+    properties:
+      service_template_filter:
+        type: org.openecomp.datatypes.heat.substitution.SubstitutionFilter
+        description: Substitution Filter
+        required: true
+        status: SUPPORTED
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/CinderVolumeGlobalTypesServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/CinderVolumeGlobalTypesServiceTemplate.yaml
new file mode 100644
index 0000000..3ef94f2
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/CinderVolumeGlobalTypesServiceTemplate.yaml
@@ -0,0 +1,176 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: CinderVolumeGlobalTypes
+  template_version: 1.0.0
+description: Cinder Volume TOSCA Global Types
+relationship_types:
+  org.openecomp.relationships.heat.cinder.VolumeAttachesTo:
+    derived_from: tosca.relationships.AttachesTo
+    description: This type represents an attachment relationship for associating volume
+    properties:
+      volume_id:
+        type: string
+        description: The ID of the volume to be attached
+        required: true
+        status: SUPPORTED
+      location:
+        type: string
+        description: The location where the volume is exposed on the instance, mountpoint
+        required: false
+        status: SUPPORTED
+      instance_uuid:
+        type: string
+        description: The ID of the server to which the volume attaches
+        required: true
+        status: SUPPORTED
+    attributes:
+      show:
+        type: string
+        description: Detailed information about resource
+        status: SUPPORTED
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.cinder.Volume:
+    derived_from: tosca.nodes.BlockStorage
+    properties:
+      availability_zone:
+        type: string
+        description: The availability zone in which the volume will be created
+        required: false
+        status: SUPPORTED
+      image:
+        type: string
+        description: If specified, the name or ID of the image to create the volume from
+        required: false
+        status: SUPPORTED
+      metadata:
+        type: map
+        description: Key/value pairs to associate with the volume
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      volume_type:
+        type: string
+        description: If specified, the type of volume to use, mapping to a specific backend
+        required: false
+        status: SUPPORTED
+      description:
+        type: string
+        description: A description of the volume
+        required: false
+        status: SUPPORTED
+      device_type:
+        type: string
+        description: Device type
+        required: false
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - cdrom
+          - disk
+      disk_bus:
+        type: string
+        description: 'Bus of the device: hypervisor driver chooses a suitable default
+          if omitted'
+        required: false
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - ide
+          - lame_bus
+          - scsi
+          - usb
+          - virtio
+      backup_id:
+        type: string
+        description: If specified, the backup to create the volume from
+        required: false
+        status: SUPPORTED
+      source_volid:
+        type: string
+        description: If specified, the volume to use as source
+        required: false
+        status: SUPPORTED
+      boot_index:
+        type: integer
+        description: Integer used for ordering the boot disks
+        required: false
+        status: SUPPORTED
+      size:
+        type: scalar-unit.size
+        description: The requested storage size (default unit is MB)
+        required: false
+        status: SUPPORTED
+        constraints:
+        - greater_or_equal: 1 GB
+      read_only:
+        type: boolean
+        description: Enables or disables read-only access mode of volume
+        required: false
+        status: SUPPORTED
+      name:
+        type: string
+        description: A name used to distinguish the volume
+        required: false
+        status: SUPPORTED
+      scheduler_hints:
+        type: map
+        description: Arbitrary key-value pairs specified by the client to help the Cinder scheduler creating a volume
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      swap_size:
+        type: scalar-unit.size
+        description: The size of the swap, in MB
+        required: false
+        status: SUPPORTED
+      delete_on_termination:
+        type: boolean
+        description: Indicate whether the volume should be deleted when the server is terminated
+        required: false
+        status: SUPPORTED
+      multiattach:
+        type: boolean
+        description: Whether allow the volume to be attached more than once
+        required: false
+        status: SUPPORTED
+    attributes:
+      display_description:
+        type: string
+        description: Description of the volume
+        status: SUPPORTED
+      attachments:
+        type: string
+        description: The list of attachments of the volume
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      encrypted:
+        type: boolean
+        description: Boolean indicating if the volume is encrypted or not
+        status: SUPPORTED
+      show:
+        type: string
+        description: Detailed information about resource
+        status: SUPPORTED
+      created_at:
+        type: timestamp
+        description: The timestamp indicating volume creation
+        status: SUPPORTED
+      display_name:
+        type: string
+        description: Name of the volume
+        status: SUPPORTED
+      metadata_values:
+        type: map
+        description: Key/value pairs associated with the volume in raw dict form
+        status: SUPPORTED
+      bootable:
+        type: boolean
+        description: Boolean indicating if the volume can be booted or not
+        status: SUPPORTED
+      status:
+        type: string
+        description: The current status of the volume
+        status: SUPPORTED
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/CommonGlobalTypesServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/CommonGlobalTypesServiceTemplate.yaml
new file mode 100644
index 0000000..3388d5a
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/CommonGlobalTypesServiceTemplate.yaml
@@ -0,0 +1,213 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: CommonGlobalTypes
+  template_version: 1.0.0
+description: TOSCA Global Types
+imports:
+  NativeTypesServiceTemplate:
+    file: NativeTypesServiceTemplateServiceTemplate.yaml
+data_types:
+  org.openecomp.datatypes.heat.network.AddressPair:
+    derived_from: tosca.datatypes.Root
+    description: MAC/IP address pairs
+    properties:
+      mac_address:
+        type: string
+        description: MAC address
+        required: false
+        status: SUPPORTED
+      ip_address:
+        type: string
+        description: IP address
+        required: false
+        status: SUPPORTED
+  org.openecomp.datatypes.heat.network.subnet.HostRoute:
+    derived_from: tosca.datatypes.Root
+    description: Host route info for the subnet
+    properties:
+      destination:
+        type: string
+        description: The destination for static route
+        required: false
+        status: SUPPORTED
+      nexthop:
+        type: string
+        description: The next hop for the destination
+        required: false
+        status: SUPPORTED
+  org.openecomp.datatypes.heat.network.neutron.Subnet:
+    derived_from: tosca.datatypes.Root
+    description: A subnet represents an IP address block that can be used for assigning IP addresses to virtual instances
+    properties:
+      tenant_id:
+        type: string
+        description: The ID of the tenant who owns the network
+        required: false
+        status: SUPPORTED
+      enable_dhcp:
+        type: boolean
+        description: Set to true if DHCP is enabled and false if DHCP is disabled
+        required: false
+        default: true
+        status: SUPPORTED
+      ipv6_address_mode:
+        type: string
+        description: IPv6 address mode
+        required: false
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - dhcpv6-stateful
+          - dhcpv6-stateless
+          - slaac
+      ipv6_ra_mode:
+        type: string
+        description: IPv6 RA (Router Advertisement) mode
+        required: false
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - dhcpv6-stateful
+          - dhcpv6-stateless
+          - slaac
+      value_specs:
+        type: map
+        description: Extra parameters to include in the request
+        required: false
+        default: {
+          }
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      allocation_pools:
+        type: list
+        description: The start and end addresses for the allocation pools
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.network.AllocationPool
+      subnetpool:
+        type: string
+        description: The name or ID of the subnet pool
+        required: false
+        status: SUPPORTED
+      dns_nameservers:
+        type: list
+        description: A specified set of DNS name servers to be used
+        required: false
+        default: [
+          ]
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      host_routes:
+        type: list
+        description: The gateway IP address
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.network.subnet.HostRoute
+      ip_version:
+        type: integer
+        description: The gateway IP address
+        required: false
+        default: 4
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - '4'
+          - '6'
+      name:
+        type: string
+        description: The name of the subnet
+        required: false
+        status: SUPPORTED
+      prefixlen:
+        type: integer
+        description: Prefix length for subnet allocation from subnet pool
+        required: false
+        status: SUPPORTED
+        constraints:
+        - greater_or_equal: 0
+      cidr:
+        type: string
+        description: The CIDR
+        required: false
+        status: SUPPORTED
+      gateway_ip:
+        type: string
+        description: The gateway IP address
+        required: false
+        status: SUPPORTED
+  org.openecomp.datatypes.heat.network.AllocationPool:
+    derived_from: tosca.datatypes.Root
+    description: The start and end addresses for the allocation pool
+    properties:
+      start:
+        type: string
+        description: Start address for the allocation pool
+        required: false
+        status: SUPPORTED
+      end:
+        type: string
+        description: End address for the allocation pool
+        required: false
+        status: SUPPORTED
+relationship_types:
+  org.openecomp.relationships.AttachesTo:
+    derived_from: tosca.relationships.Root
+    description: This type represents an attachment relationship
+group_types:
+  org.openecomp.groups.heat.HeatStack:
+    derived_from: tosca.groups.Root
+    description: Grouped all heat resources which are in the same heat stack
+    properties:
+      heat_file:
+        type: string
+        description: Heat file which associate to this group/heat stack
+        required: true
+        status: SUPPORTED
+      description:
+        type: string
+        description: Heat file description
+        required: false
+        status: SUPPORTED
+policy_types:
+  org.openecomp.policies.placement.Colocate:
+    derived_from: tosca.policy.placement
+    description: Keep associated nodes (groups of nodes) based upon affinity value
+    properties:
+      name:
+        type: string
+        description: The name of the policy
+        required: false
+        status: SUPPORTED
+      affinity:
+        type: string
+        description: affinity
+        required: true
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - host
+          - region
+          - compute
+  org.openecomp.policies.placement.Antilocate:
+    derived_from: tosca.policy.placement
+    description: My placement policy for separation based upon container type value
+    properties:
+      name:
+        type: string
+        description: The name of the policy
+        required: false
+        status: SUPPORTED
+      container_type:
+        type: string
+        description: container type
+        required: false
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - host
+          - region
+          - compute
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/ContrailNetworkRuleGlobalTypeServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/ContrailNetworkRuleGlobalTypeServiceTemplate.yaml
new file mode 100644
index 0000000..9831731
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/ContrailNetworkRuleGlobalTypeServiceTemplate.yaml
@@ -0,0 +1,117 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: ContrailNetworkRuleGlobalType
+  template_version: 1.0.0
+description: Contrail Network Rule Global Types
+imports:
+  common_definitions:
+    file: CommonGlobalTypesServiceTemplate.yaml
+data_types:
+  org.openecomp.datatypes.heat.contrail.network.rule.PortPairs:
+    derived_from: tosca.datatypes.Root
+    description: source and destination port pairs
+    properties:
+      start_port:
+        type: string
+        description: Start port
+        required: false
+        status: SUPPORTED
+      end_port:
+        type: string
+        description: End port
+        required: false
+        status: SUPPORTED
+  org.openecomp.datatypes.heat.contrail.network.rule.Rule:
+    derived_from: tosca.datatypes.Root
+    description: policy rule
+    properties:
+      src_ports:
+        type: list
+        description: Source ports
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.contrail.network.rule.PortPairs
+      protocol:
+        type: string
+        description: Protocol
+        required: false
+        status: SUPPORTED
+      dst_addresses:
+        type: list
+        description: Destination addresses
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork
+      apply_service:
+        type: string
+        description: Service to apply
+        required: false
+        status: SUPPORTED
+      dst_ports:
+        type: list
+        description: Destination ports
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.contrail.network.rule.PortPairs
+      src_addresses:
+        type: list
+        description: Source addresses
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork
+      direction:
+        type: string
+        description: Direction
+        required: false
+        status: SUPPORTED
+  org.openecomp.datatypes.heat.contrail.network.rule.RuleList:
+    derived_from: tosca.datatypes.Root
+    description: list of policy rules
+    properties:
+      policy_rule:
+        type: list
+        description: Contrail network rule
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.contrail.network.rule.Rule
+  org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork:
+    derived_from: tosca.datatypes.Root
+    description: source and destination addresses
+    properties:
+      virtual_network:
+        type: string
+        description: Virtual network
+        required: false
+        status: SUPPORTED
+node_types:
+  org.openecomp.resource.nodes.heat.network.contrail.NetworkRules:
+    derived_from: tosca.nodes.Root
+    properties:
+      entries:
+        type: org.openecomp.datatypes.heat.contrail.network.rule.RuleList
+        description: A symbolic name for this contrail network rule
+        required: false
+        status: SUPPORTED
+      name:
+        type: string
+        description: A symbolic name for this contrail network rule
+        required: false
+        status: SUPPORTED
+    attributes:
+      fq_name:
+        type: string
+        description: fq_name
+        status: SUPPORTED
+    requirements:
+    - network:
+        capability: tosca.capabilities.Attachment
+        node: tosca.nodes.network.Network
+        relationship: org.openecomp.relationships.AttachesTo
+        occurrences:
+        - 0
+        - UNBOUNDED
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/ContrailVirtualNetworkGlobalTypeServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/ContrailVirtualNetworkGlobalTypeServiceTemplate.yaml
new file mode 100644
index 0000000..0927e3d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/ContrailVirtualNetworkGlobalTypeServiceTemplate.yaml
@@ -0,0 +1,71 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: ContrailVirtualNetworkGlobalType
+  template_version: 1.0.0
+description: Contrail Virtual Network Global Types
+imports:
+  common_definitions:
+    file: CommonGlobalTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork:
+    derived_from: tosca.nodes.network.Network
+    properties:
+      shared:
+        type: string
+        description: Is virtual network shared
+        required: false
+        status: SUPPORTED
+      forwarding_mode:
+        type: string
+        description: forwarding mode of the virtual network
+        required: false
+        status: SUPPORTED
+      external:
+        type: string
+        description: Is virtual network external
+        required: false
+        status: SUPPORTED
+      flood_unknown_unicast:
+        type: string
+        description: flood L2 packets on network
+        required: false
+        status: SUPPORTED
+      route_targets:
+        type: list
+        description: route targets associated with the virtual network
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      subnets:
+        type: map
+        description: Network related subnets
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.network.neutron.Subnet
+    attributes:
+      subnets_name:
+        type: list
+        description: Subnets name of this network
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      subnets_show:
+        type: map
+        description: Detailed information about each subnet
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      subnets:
+        type: map
+        description: Network related subnets
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.network.neutron.Subnet
+    capabilities:
+      attachment:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/GlobalSubstitutionTypesServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/GlobalSubstitutionTypesServiceTemplate.yaml
new file mode 100644
index 0000000..08c47bc
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/GlobalSubstitutionTypesServiceTemplate.yaml
@@ -0,0 +1,93 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: GlobalSubstitutionTypes
+imports:
+  NeutronPortGlobalTypes:
+    file: NeutronPortGlobalTypesServiceTemplate.yaml
+  NeutronNetGlobalTypes:
+    file: NeutronNetGlobalTypesServiceTemplate.yaml
+  CommonGlobalTypes:
+    file: CommonGlobalTypesServiceTemplate.yaml
+  CinderVolumeGlobalTypes:
+    file: CinderVolumeGlobalTypesServiceTemplate.yaml
+  ContrailNetworkRuleGlobalType:
+    file: ContrailNetworkRuleGlobalTypeServiceTemplate.yaml
+  NeutronSecurityRulesGlobalTypes:
+    file: NeutronSecurityRulesGlobalTypesServiceTemplate.yaml
+  NovaServerGlobalTypes:
+    file: NovaServerGlobalTypesServiceTemplate.yaml
+  ContrailVirtualNetworkGlobalType:
+    file: ContrailVirtualNetworkGlobalTypeServiceTemplate.yaml
+  AbstractSubstituteGlobalTypes:
+    file: AbstractSubstituteGlobalTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.abstract.nodes.heat.nested:
+    derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute
+    properties:
+      cmaui_names:
+        type: list
+        description: CMAUI1, CMAUI2 server names
+        entry_schema:
+          type: String
+      p1:
+        type: string
+        description: UID of OAM network
+      cmaui_image:
+        type: string
+        description: Image for CMAUI server
+      cmaui_flavor:
+        type: string
+        description: Flavor for CMAUI server
+      security_group_name:
+        description: not impotrtant
+      availability_zone_0:
+        type: string
+        description: availabilityzone name
+    requirements:
+    - local_storage_server_cmaui:
+        capability: tosca.capabilities.Attachment
+        node: tosca.nodes.BlockStorage
+        relationship: tosca.relationships.AttachesTo
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_cmaui_port_0:
+        capability: tosca.capabilities.network.Linkable
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    capabilities:
+      host_server_cmaui:
+        type: tosca.capabilities.Container
+        valid_source_types:
+        - tosca.nodes.SoftwareComponent
+        occurrences:
+        - 1
+        - UNBOUNDED
+      os_server_cmaui:
+        type: tosca.capabilities.OperatingSystem
+        occurrences:
+        - 1
+        - UNBOUNDED
+      endpoint_server_cmaui:
+        type: tosca.capabilities.Endpoint.Admin
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_server_cmaui:
+        type: tosca.capabilities.network.Bindable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      scalable_server_cmaui:
+        type: tosca.capabilities.Scalable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_cmaui_port_0:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/NativeTypesServiceTemplateServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/NativeTypesServiceTemplateServiceTemplate.yaml
new file mode 100644
index 0000000..e7dfd49
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/NativeTypesServiceTemplateServiceTemplate.yaml
@@ -0,0 +1,194 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: NativeTypesServiceTemplate
+  template_version: 1.0.0
+description: TOSCA Native Node Types
+node_types:
+  tosca.nodes.Compute:
+    derived_from: tosca.nodes.Root
+    attributes:
+      private_address:
+        type: string
+        description: private address
+        status: SUPPORTED
+      public_address:
+        type: string
+        description: public_address
+        status: SUPPORTED
+      networks:
+        type: map
+        description: networks
+        status: SUPPORTED
+        entry_schema:
+          type: tosca.datatypes.network.NetworkInfo
+      ports:
+        type: map
+        description: ports
+        status: SUPPORTED
+        entry_schema:
+          type: tosca.datatypes.network.PortInfo
+    requirements:
+    - local_storage:
+        capability: tosca.capabilities.Attachment
+        node: tosca.nodes.BlockStorage
+        relationship: tosca.relationships.AttachesTo
+        occurrences:
+        - 0
+        - UNBOUNDED
+    capabilities:
+      scalable:
+        type: tosca.capabilities.Scalable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      endpoint:
+        type: tosca.capabilities.Endpoint.Admin
+        occurrences:
+        - 1
+        - UNBOUNDED
+      os:
+        type: tosca.capabilities.OperatingSystem
+        occurrences:
+        - 1
+        - UNBOUNDED
+      host:
+        type: tosca.capabilities.Container
+        valid_source_types:
+        - tosca.nodes.SoftwareComponent
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding:
+        type: tosca.capabilities.network.Bindable
+        occurrences:
+        - 1
+        - UNBOUNDED
+  tosca.nodes.network.Port:
+    derived_from: tosca.nodes.Root
+    properties:
+      ip_range_end:
+        type: string
+        required: false
+        status: SUPPORTED
+      ip_range_start:
+        type: string
+        required: false
+        status: SUPPORTED
+      ip_address:
+        type: string
+        required: false
+        status: SUPPORTED
+      is_default:
+        type: boolean
+        required: false
+        default: false
+        status: SUPPORTED
+      order:
+        type: integer
+        required: true
+        default: 0
+        status: SUPPORTED
+        constraints:
+        - greater_or_equal: 0
+    requirements:
+    - link:
+        capability: tosca.capabilities.network.Linkable
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.network.LinksTo
+    - binding:
+        capability: tosca.capabilities.network.Bindable
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.network.BindsTo
+  tosca.nodes.Root:
+    attributes:
+      tosca_name:
+        type: string
+        description: tosca name
+        status: SUPPORTED
+      state:
+        type: string
+        description: state
+        status: SUPPORTED
+      tosca_id:
+        type: string
+        description: tosca id
+        status: SUPPORTED
+    interfaces: {
+      }
+  tosca.nodes.network.Network:
+    derived_from: tosca.nodes.Root
+    properties:
+      physical_network:
+        type: string
+        required: false
+        status: SUPPORTED
+      segmentation_id:
+        type: string
+        required: false
+        status: SUPPORTED
+      network_id:
+        type: string
+        required: false
+        status: SUPPORTED
+      ip_version:
+        type: integer
+        required: false
+        default: 4
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - 4
+          - 6
+      start_ip:
+        type: string
+        required: false
+        status: SUPPORTED
+      network_name:
+        type: string
+        required: false
+        status: SUPPORTED
+      cidr:
+        type: string
+        required: false
+        status: SUPPORTED
+      gateway_ip:
+        type: string
+        required: false
+        status: SUPPORTED
+      network_type:
+        type: string
+        required: false
+        status: SUPPORTED
+      end_ip:
+        type: string
+        required: false
+        status: SUPPORTED
+    capabilities:
+      link:
+        type: tosca.capabilities.network.Linkable
+        occurrences:
+        - 1
+        - UNBOUNDED
+  tosca.nodes.BlockStorage:
+    derived_from: tosca.nodes.Root
+    properties:
+      size:
+        type: scalar-unit.size
+        required: false
+        status: SUPPORTED
+        constraints:
+        - greater_or_equal: 1 MB
+      volume_id:
+        type: string
+        required: false
+        status: SUPPORTED
+      snapshot_id:
+        type: string
+        required: false
+        status: SUPPORTED
+    capabilities:
+      attachment:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/NeutronNetGlobalTypesServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/NeutronNetGlobalTypesServiceTemplate.yaml
new file mode 100644
index 0000000..e80e272
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/NeutronNetGlobalTypesServiceTemplate.yaml
@@ -0,0 +1,97 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: NeutronNetGlobalTypes
+  template_version: 1.0.0
+description: Neutron Network TOSCA Global Types
+imports:
+  common_definitions:
+    file: CommonGlobalTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vl.nodes.heat.network.neutron.Net:
+    derived_from: tosca.nodes.network.Network
+    properties:
+      dhcp_agent_ids:
+        type: list
+        description: The IDs of the DHCP agent to schedule the network
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      tenant_id:
+        type: string
+        description: The ID of the tenant which will own the network
+        required: false
+        status: SUPPORTED
+      port_security_enabled:
+        type: boolean
+        description: Flag to enable/disable port security on the network
+        required: false
+        status: SUPPORTED
+      shared:
+        type: boolean
+        description: Whether this network should be shared across all tenants
+        required: false
+        default: false
+        status: SUPPORTED
+      admin_state_up:
+        type: boolean
+        description: A boolean value specifying the administrative status of the network
+        required: false
+        default: true
+        status: SUPPORTED
+      qos_policy:
+        type: string
+        description: The name or ID of QoS policy to attach to this network
+        required: false
+        status: SUPPORTED
+      subnets:
+        type: map
+        description: Network related subnets
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.network.neutron.Subnet
+      value_specs:
+        type: map
+        description: Extra parameters to include in the request
+        required: false
+        default: {
+          }
+        status: SUPPORTED
+        entry_schema:
+          type: string
+    attributes:
+      qos_policy_id:
+        type: string
+        description: The QoS policy ID attached to this network
+        status: SUPPORTED
+      show:
+        type: string
+        description: Detailed information about resource
+        status: SUPPORTED
+      subnets_name:
+        type: list
+        description: Subnets name of this network
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      subnets:
+        type: map
+        description: Network related subnets
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.network.neutron.Subnet
+      mtu:
+        type: scalar-unit.size
+        description: The maximum transmission unit size(in bytes) for the network
+        status: SUPPORTED
+      status:
+        type: string
+        description: The status of the network
+        status: SUPPORTED
+    capabilities:
+      attachment:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/NeutronPortGlobalTypesServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/NeutronPortGlobalTypesServiceTemplate.yaml
new file mode 100644
index 0000000..a337d6e
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/NeutronPortGlobalTypesServiceTemplate.yaml
@@ -0,0 +1,151 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: NeutronPortGlobalTypes
+  template_version: 1.0.0
+description: Neutron Port TOSCA Global Types
+imports:
+  common_definitions:
+    file: CommonGlobalTypesServiceTemplate.yaml
+data_types:
+  org.openecomp.datatypes.heat.neutron.port.FixedIps:
+    derived_from: tosca.datatypes.Root
+    description: subnet/ip_address
+    properties:
+      subnet:
+        type: string
+        description: Subnet in which to allocate the IP address for this port
+        required: false
+        status: SUPPORTED
+      ip_address:
+        type: string
+        description: IP address desired in the subnet for this port
+        required: false
+        status: SUPPORTED
+node_types:
+  org.openecomp.resource.cp.nodes.heat.network.neutron.Port:
+    derived_from: tosca.nodes.network.Port
+    properties:
+      port_security_enabled:
+        type: boolean
+        description: Flag to enable/disable port security on the network
+        required: false
+        status: SUPPORTED
+      device_id:
+        type: string
+        description: Device ID of this port
+        required: false
+        status: SUPPORTED
+      qos_policy:
+        type: string
+        description: The name or ID of QoS policy to attach to this network
+        required: false
+        status: SUPPORTED
+      allowed_address_pairs:
+        type: list
+        description: Additional MAC/IP address pairs allowed to pass through the port
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.network.AddressPair
+      binding:vnic_type:
+        type: string
+        description: The vnic type to be bound on the neutron port
+        required: false
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - macvtap
+          - direct
+          - normal
+      value_specs:
+        type: map
+        description: Extra parameters to include in the request
+        required: false
+        default: {
+          }
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      device_owner:
+        type: string
+        description: Name of the network owning the port
+        required: false
+        status: SUPPORTED
+      network:
+        type: string
+        description: Network this port belongs to
+        required: false
+        status: SUPPORTED
+      replacement_policy:
+        type: string
+        description: Policy on how to respond to a stack-update for this resource
+        required: false
+        default: AUTO
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - REPLACE_ALWAYS
+          - AUTO
+      security_groups:
+        type: list
+        description: List of security group names or IDs
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      fixed_ips:
+        type: list
+        description: Desired IPs for this port
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.neutron.port.FixedIps
+      mac_address:
+        type: string
+        description: MAC address to give to this port
+        required: false
+        status: SUPPORTED
+      admin_state_up:
+        type: boolean
+        description: A boolean value specifying the administrative status of the network
+        required: false
+        default: true
+        status: SUPPORTED
+      name:
+        type: string
+        description: A symbolic name for this port
+        required: false
+        status: SUPPORTED
+    attributes:
+      tenant_id:
+        type: string
+        description: Tenant owning the port
+        status: SUPPORTED
+      network_id:
+        type: string
+        description: Unique identifier for the network owning the port
+        status: SUPPORTED
+      qos_policy_id:
+        type: string
+        description: The QoS policy ID attached to this network
+        status: SUPPORTED
+      show:
+        type: string
+        description: Detailed information about resource
+        status: SUPPORTED
+      subnets:
+        type: list
+        description: Subnets of this network
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      status:
+        type: string
+        description: The status of the network
+        status: SUPPORTED
+    capabilities:
+      attachment:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/NeutronSecurityRulesGlobalTypesServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/NeutronSecurityRulesGlobalTypesServiceTemplate.yaml
new file mode 100644
index 0000000..49c9a10
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/NeutronSecurityRulesGlobalTypesServiceTemplate.yaml
@@ -0,0 +1,116 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: NeutronSecurityRulesGlobalTypes
+  template_version: 1.0.0
+description: Neutron Security Rules TOSCA Global Types
+imports:
+  common_definitions:
+    file: CommonGlobalTypesServiceTemplate.yaml
+data_types:
+  org.openecomp.datatypes.heat.network.neutron.SecurityRules.Rule:
+    derived_from: tosca.datatypes.Root
+    description: Rules Pairs
+    properties:
+      remote_group_id:
+        type: string
+        description: The remote group ID to be associated with this security group rule
+        required: false
+        status: SUPPORTED
+      protocol:
+        type: string
+        description: The protocol that is matched by the security group rule
+        required: false
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - tcp
+          - udp
+          - icmp
+      ethertype:
+        type: string
+        description: Ethertype of the traffic
+        required: false
+        default: IPv4
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - IPv4
+          - IPv6
+      port_range_max:
+        type: integer
+        description: 'The maximum port number in the range that is matched by the
+          security group rule. '
+        required: false
+        status: SUPPORTED
+        constraints:
+        - in_range:
+          - 0
+          - 65535
+      remote_ip_prefix:
+        type: string
+        description: The remote IP prefix (CIDR) to be associated with this security group rule
+        required: false
+        status: SUPPORTED
+      remote_mode:
+        type: string
+        description: Whether to specify a remote group or a remote IP prefix
+        required: false
+        default: remote_ip_prefix
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - remote_ip_prefix
+          - remote_group_id
+      direction:
+        type: string
+        description: The direction in which the security group rule is applied
+        required: false
+        default: ingress
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - egress
+          - ingress
+      port_range_min:
+        type: integer
+        description: The minimum port number in the range that is matched by the security group rule.
+        required: false
+        status: SUPPORTED
+        constraints:
+        - in_range:
+          - 0
+          - 65535
+node_types:
+  org.openecomp.resource.nodes.heat.network.neutron.SecurityRules:
+    derived_from: tosca.nodes.Root
+    properties:
+      description:
+        type: string
+        description: Description of the security group
+        required: false
+        status: SUPPORTED
+      name:
+        type: string
+        description: A symbolic name for this security group, which is not required to be unique.
+        required: false
+        status: SUPPORTED
+      rules:
+        type: list
+        description: List of security group rules
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.network.neutron.SecurityRules.Rule
+    attributes:
+      show:
+        type: string
+        description: Detailed information about resource
+        status: SUPPORTED
+    requirements:
+    - port:
+        capability: tosca.capabilities.Attachment
+        node: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+        relationship: org.openecomp.relationships.AttachesTo
+        occurrences:
+        - 0
+        - UNBOUNDED
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/NovaServerGlobalTypesServiceTemplate.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/NovaServerGlobalTypesServiceTemplate.yaml
new file mode 100644
index 0000000..2253a1e
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/extractServiceComposition/toscaGlobalServiceTemplates/NovaServerGlobalTypesServiceTemplate.yaml
@@ -0,0 +1,249 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: NovaServerGlobalTypes
+  template_version: 1.0.0
+description: Nova Server TOSCA Global Types
+imports:
+  common_definitions:
+    file: CommonGlobalTypesServiceTemplate.yaml
+data_types:
+  org.openecomp.datatypes.heat.novaServer.network.PortExtraProperties:
+    derived_from: tosca.datatypes.Root
+    description: Nova server network expand properties for port
+    properties:
+      port_security_enabled:
+        type: boolean
+        description: Flag to enable/disable port security on the port
+        required: false
+        status: SUPPORTED
+      mac_address:
+        type: string
+        description: MAC address to give to this port
+        required: false
+        status: SUPPORTED
+      admin_state_up:
+        type: boolean
+        description: The administrative state of this port
+        required: false
+        default: true
+        status: SUPPORTED
+      qos_policy:
+        type: string
+        description: The name or ID of QoS policy to attach to this port
+        required: false
+        status: SUPPORTED
+      allowed_address_pairs:
+        type: list
+        description: Additional MAC/IP address pairs allowed to pass through the port
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.network.AddressPair
+      binding:vnic_type:
+        type: string
+        description: The vnic type to be bound on the neutron port
+        required: false
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - macvtap
+          - direct
+          - normal
+      value_specs:
+        type: map
+        description: Extra parameters to include in the request
+        required: false
+        default: {
+          }
+        status: SUPPORTED
+        entry_schema:
+          type: string
+  org.openecomp.datatypes.heat.novaServer.network.AddressInfo:
+    derived_from: tosca.datatypes.network.NetworkInfo
+    description: Network addresses with corresponding port id
+    properties:
+      port_id:
+        type: string
+        description: Port id
+        required: false
+        status: SUPPORTED
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.nova.Server:
+    derived_from: tosca.nodes.Compute
+    properties:
+      admin_pass:
+        type: string
+        description: The administrator password for the server
+        required: false
+        status: SUPPORTED
+      availability_zone:
+        type: string
+        description: Availability zone to create servers in
+        required: false
+        status: SUPPORTED
+      image:
+        type: string
+        description: The ID or name of the image to boot with
+        required: false
+        status: SUPPORTED
+      image_update_policy:
+        type: string
+        description: Policy on how to apply an image-id update
+        required: false
+        default: REBUILD
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - REBUILD_PRESERVE_EPHEMERAL
+          - REPLACE
+          - REBUILD
+      metadata:
+        type: map
+        description: Arbitrary key/value metadata to store for this server
+        required: false
+        status: SUPPORTED
+        constraints:
+        - max_length: 255
+        entry_schema:
+          type: string
+          constraints:
+          - max_length: 255
+      user_data_update_policy:
+        type: string
+        description: Policy on how to apply a user_data update
+        required: false
+        default: REPLACE
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - REPLACE
+          - IGNORE
+      flavor_update_policy:
+        type: string
+        description: Policy on how to apply a flavor update
+        required: false
+        default: RESIZE
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - RESIZE
+          - REPLACE
+      user_data:
+        type: string
+        description: User data script to be executed by cloud-init
+        required: false
+        default: ''
+        status: SUPPORTED
+      flavor:
+        type: string
+        description: The ID or name of the flavor to boot onto
+        required: true
+        status: SUPPORTED
+      key_name:
+        type: string
+        description: Name of keypair to inject into the server
+        required: false
+        status: SUPPORTED
+      reservation_id:
+        type: string
+        description: A UUID for the set of servers being requested
+        required: false
+        status: SUPPORTED
+      security_groups:
+        type: list
+        description: List of security group names or IDs
+        required: false
+        default: [
+          ]
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      config_drive:
+        type: boolean
+        description: enable config drive on the server
+        required: false
+        status: SUPPORTED
+      personality:
+        type: map
+        description: A map of files to create/overwrite on the server upon boot
+        required: false
+        default: {
+          }
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      software_config_transport:
+        type: string
+        description: How the server should receive the metadata required for software configuration
+        required: false
+        default: POLL_SERVER_CFN
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - POLL_SERVER_CFN
+          - POLL_SERVER_HEAT
+          - POLL_TEMP_URL
+          - ZAQAR_MESSAGE
+      user_data_format:
+        type: string
+        description: How the user_data should be formatted for the server
+        required: false
+        default: HEAT_CFNTOOLS
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - SOFTWARE_CONFIG
+          - RAW
+          - HEAT_CFNTOOLS
+      diskConfig:
+        type: string
+        description: Control how the disk is partitioned when the server is created
+        required: false
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - AUTO
+          - MANUAL
+      name:
+        type: string
+        description: Server name
+        required: false
+        status: SUPPORTED
+      scheduler_hints:
+        type: map
+        description: Arbitrary key-value pairs specified by the client to help boot a server
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: string
+    attributes:
+      accessIPv4:
+        type: string
+        description: The manually assigned alternative public IPv4 address of the server
+        status: SUPPORTED
+      addresses:
+        type: map
+        description: A dict of all network addresses with corresponding port_id
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.novaServer.network.AddressInfo
+      accessIPv6:
+        type: string
+        description: The manually assigned alternative public IPv6 address of the server
+        status: SUPPORTED
+      instance_name:
+        type: string
+        description: AWS compatible instance name
+        status: SUPPORTED
+      name:
+        type: string
+        description: Name of the server
+        status: SUPPORTED
+      show:
+        type: string
+        description: Detailed information about resource
+        status: SUPPORTED
+      console_urls:
+        type: string
+        description: URLs of servers consoles
+        status: SUPPORTED
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/fullComposition/MANIFEST.json b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/fullComposition/MANIFEST.json
new file mode 100644
index 0000000..40c2b4c
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/fullComposition/MANIFEST.json
@@ -0,0 +1,17 @@
+{
+  "name": "hot-mog",
+  "description": "HOT template to create hot mog server",
+  "version": "2013-05-23",
+  "data": [
+    {
+      "file": "hot-mog-0108-bs1271.yml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "hot-mog-0108-bs1271.env",
+          "type": "HEAT_ENV"
+        }
+      ]
+    }
+  ]
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/fullComposition/hot-mog-0108-bs1271.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/fullComposition/hot-mog-0108-bs1271.env
new file mode 100644
index 0000000..407bc8d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/fullComposition/hot-mog-0108-bs1271.env
@@ -0,0 +1,60 @@
+parameters:
+  pd_server_names: ZRDM1MOGX01MPD001,ZRDM1MOGX01MPD002
+  pd_image_name: MOG_BASE_8.0
+  pd_flavor_name: m3.xlarge
+  oam_server_names: ZRDM1MOGX01OAM001,ZRDM1MOGX01OAM002
+  oam_image_name: MOG_BASE_8.0
+  oam_flavor_name: m3.xlarge
+  sm_server_names: ZRDM1MOGX01MSM001,ZRDM1MOGX01MSM002
+  sm_image_name: MOG_BASE_8.0
+  sm_flavor_name: m2.xlarge4
+  ps_server_names: ZRDM1MOGX01MPS001,ZRDM1MOGX01MPS002,ZRDM1MOGX01MPS003,ZRDM1MOGX01MPS004
+  ps_image_name: MOG_BASE_8.0
+  ps_flavor_name: m3.xlarge
+  cm_server_names: ZRDM1MOGX01MCM001
+  cm_image_name: MOG_BASE_8.0
+  cm_flavor_name: m3.xlarge
+  availabilityzone_name: nova
+  oam_net_name: oam_protected_net_0
+  oam_net_ips: 107.250.172.213,107.250.172.214,107.250.172.215,107.250.172.216,107.250.172.217
+  #internet_net_name: dmz_protected_net_0
+  #internet_net_ips: 107.239.53.4,107.239.53.5
+ # internet_net_floating_ip: 107.239.53.6
+  sl_net_name: exn_protected_net_0
+  sl_net_ips: 107.239.45.4,107.239.45.5
+  sl_net_floating_ip: 107.239.45.6
+  repl_net_name: cor_direct_net_0
+  repl_net_ips: 107.239.33.57,107.239.33.58
+  rx_net_name: cor_direct_net_1
+  rx_net_ips: 107.239.34.3,107.239.34.4
+  rx_net_floating_ip: 107.239.34.5
+  ran_net_name: gn_direct_net_0
+  ran_net_ips: 107.239.36.3,107.239.36.4
+  ran_net_floating_ip: 107.239.36.5
+  dummy_net_name_0: mog_dummy_0
+  dummy_net_start_0: 169.254.1.4
+  dummy_net_end_0: 169.254.1.254
+  dummy_net_cidr_0: 169.254.1.0/24
+  dummy_net_netmask_0: 255.255.255.0
+  dummy_net_name_1: mog_dummy_1
+  dummy_net_start_1: 169.254.2.4
+  dummy_net_end_1: 169.254.2.254
+  dummy_net_cidr_1: 169.254.2.0/24
+  dummy_net_netmask_1: 255.255.255.0
+  csb_net_name: int_mog_csb_net
+  csb_net_ips: 172.26.0.10,172.26.0.11,172.26.0.12,172.26.0.13,172.26.0.14,172.26.0.15,172.26.0.16,172.26.0.17,172.26.0.18,172.26.0.19,172.26.0.20
+  csb_net_start: 172.26.0.1
+  csb_net_end: 172.26.0.254
+  csb_net_cidr: 172.26.0.0/24
+  csb_net_netmask: 255.255.255.0
+  security_group_name: mog_security_group
+  mog_swift_container: http://10.147.38.210:8080/v1/AUTH_8e501b8121f34a6eaaf526d3305985cc/mogtestcontainer
+  mog_script_dir: /root
+  mog_script_name: http://10.147.38.210:8080/v1/AUTH_8e501b8121f34a6eaaf526d3305985cc/mogtestcontainer/mog-cloudinit.sh
+  mog_parameter_name: http://10.147.38.210:8080/v1/AUTH_8e501b8121f34a6eaaf526d3305985cc/mogtestcontainer
+  cluster-manager-vol-1: 43ccf5ba-2d50-427b-a38f-e8c7d8670eee
+  session-manager-vol-1: 49201898-333d-4c88-b58d-cf573b091633
+  session-manager-vol-2: 4c35b5f1-ce99-4220-a6e2-cda6e2d713a0
+  oam-vol-1: 0a7fcd9e-2624-401d-ac21-b0191f85ec77
+  oam-vol-2: 6d169cb6-6ddc-41dc-920c-2839898a2924
+  cluster-manager-vol-2: 6f92e211-2d61-487d-8f84-d2d00cea3698
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/fullComposition/hot-mog-0108-bs1271.yml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/fullComposition/hot-mog-0108-bs1271.yml
new file mode 100644
index 0000000..85ca654
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/fullComposition/hot-mog-0108-bs1271.yml
@@ -0,0 +1,733 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates MOG stack
+
+parameters:
+  pd_server_names:
+    type: comma_delimited_list
+    label: PD server names
+    description: name of the PD instance
+  pd_image_name:
+    type: string
+    label: image name
+    description: PD image name
+  pd_flavor_name:
+    type: string
+    label: PD flavor name
+    description: flavor name of PD instance
+  oam_server_names:
+    type: comma_delimited_list
+    label: OAM server names
+    description: name of the OAM instance
+  oam_image_name:
+    type: string
+    label: image name
+    description: OAM image name
+  oam_flavor_name:
+    type: string
+    label: OAM flavor name
+    description: flavor name of OAM instance
+  sm_server_names:
+    type: comma_delimited_list
+    label: SM server names
+    description: name of the SM instance
+  sm_image_name:
+    type: string
+    label: image name
+    description: SM image name
+  sm_flavor_name:
+    type: string
+    label: SM flavor name
+    description: flavor name of SM instance
+  ps_server_names:
+    type: comma_delimited_list
+    label: PS server names
+    description: name of the PS instance
+  ps_image_name:
+    type: string
+    label: PS image name
+    description: PS image name
+  ps_flavor_name:
+    type: string
+    label: PS flavor name
+    description: flavor name of PS instance
+  cm_server_names:
+    type: comma_delimited_list
+    label: CM server names
+    description: name of the CM instance
+  cm_image_name:
+    type: string
+    label: image name
+    description: CM image name
+  cm_flavor_name:
+    type: string
+    label: CM flavor name
+    description: flavor name of CM instance
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  oam_net_name:
+    type: string
+    label: oam network name
+    description: name of the oam network
+  oam_net_ips:
+    type: comma_delimited_list
+    label: internet network ips
+    description: ip of the OAM network
+ # internet_net_name:
+ #   type: string
+ #   label: internet network name
+ #   description: id of the internet network
+ # internet_net_ips:
+ #   type: comma_delimited_list
+ #   label: internet network ips
+ #   description: ip of the internet network
+ # internet_net_floating_ip:
+ #   type: string
+ #   label: mog internet virtual ip
+ #   description: mog internet virtual ip
+  sl_net_name:
+    type: string
+    label: silver lining network name
+    description: id of the sl network
+  sl_net_ips:
+    type: comma_delimited_list
+    label: silver lining network ips
+    description: ips of the sl network
+  sl_net_floating_ip:
+    type: string
+    label: mog sl net virtual ip
+    description: mog sl net virtual ip
+  repl_net_name:
+    type: string
+    label: Replication network name
+    description: name of the replication network
+  repl_net_ips:
+    type: comma_delimited_list
+    label: repl network ips
+    description: ips of repl network
+  rx_net_name:
+    type: string
+    label: Rx network name
+    description: Rx network name
+  rx_net_ips:
+    type: comma_delimited_list
+    label: Rx network ips
+    description: Rx network ips
+  rx_net_floating_ip:
+    type: string
+    label: mog rx net virtual ip
+    description: mog rx net virtual ip
+  ran_net_name:
+    type: string
+    label: RAN network name
+    description: RAN network name
+  ran_net_ips:
+    type: comma_delimited_list
+    label: RAN network ips
+    description: RAN network ip
+  ran_net_floating_ip:
+    type: string
+    label: mog ran net virtual ip
+    description: mog ran net virtual ip
+  csb_net_name:
+    type: string
+    label: csb internal network name
+    description: csb internal network name
+  csb_net_start:
+    type: string
+    label: csb internal start
+    description: csb internal start
+  csb_net_end:
+    type: string
+    label: csb internal end
+    description: csb internal end
+  csb_net_cidr:
+    type: string
+    label: csb ineternal cidr
+    description: csb internal cidr
+  csb_net_netmask:
+    type: string
+    description: CSB internal network subnet mask
+  csb_net_ips:
+    type: comma_delimited_list
+    description: mog_csb_net IP addresses
+  dummy_net_name_0:
+    type: string
+    label: csb internal network name
+    description: csb internal network name
+  dummy_net_start_0:
+    type: string
+    label: csb internal start
+    description: csb internal start
+  dummy_net_end_0:
+    type: string
+    label: csb internal end
+    description: csb internal end
+  dummy_net_cidr_0:
+    type: string
+    label: csb ineternal cidr
+    description: csb internal cidr
+  dummy_net_netmask_0:
+    type: string
+    description: CSB internal network subnet mask
+  dummy_net_name_1:
+    type: string
+    label: csb internal network name
+    description: csb internal network name
+  dummy_net_start_1:
+    type: string
+    label: csb internal start
+    description: csb internal start
+  dummy_net_end_1:
+    type: string
+    label: csb internal end
+    description: csb internal end
+  dummy_net_cidr_1:
+    type: string
+    label: csb ineternal cidr
+    description: csb internal cidr
+  dummy_net_netmask_1:
+    type: string
+    description: CSB internal network subnet mask
+
+  security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  cluster-manager-vol-1:
+    type: string
+    label: mog-cm-vol-1
+    description: Cluster Manager volume 1
+  session-manager-vol-1:
+    type: string
+    label: mog-sm-vol-1
+    description: Session Manager volume 1
+  session-manager-vol-2:
+    type: string
+    label: mog-sm-vol-2
+    description: Session Manager volume 2
+  oam-vol-1:
+    type: string
+    label: mog-oam-vol-1
+    description: OAM volume 1
+  oam-vol-2:
+    type: string
+    label: mog-oam-vol-2
+    description: OAM volume 2
+  mog_swift_container:
+    type: string
+    label: mog Config URL
+    description: Config URL
+  mog_script_dir:
+    type: string
+    label: mog Config script directory
+    description: Config script directory
+  mog_script_name:
+    type: string
+    label: mog Config script name
+    description: Config script name
+  mog_parameter_name:
+    type: string
+    label: mog script parameter name
+    description: Config script parameter csv file name
+  cluster-manager-vol-2:
+    type: string
+    label: mog-cm-vol-2
+    description: Cluster Manager volume 2 with ISO image
+
+resources:
+  mog_security_group:
+    type: OS::Neutron::SecurityGroup
+    properties:
+      description: mog security group
+      name: {get_param: security_group_name}
+      rules: [{"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": egress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0}
+              ]
+
+  csb_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: csb_net_name}
+
+  csb_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: csb_net_name}
+      network_id: { get_resource: csb_net }
+      cidr: { get_param: csb_net_cidr }
+      allocation_pools: [{"start": {get_param: csb_net_start}, "end": {get_param: csb_net_end}}]
+      enable_dhcp: true
+
+  dummy_net_0:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: dummy_net_name_0}
+
+  dummy_ip_subnet_0:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: dummy_net_name_0}
+      network_id: { get_resource: dummy_net_0 }
+      cidr: { get_param: dummy_net_cidr_0 }
+      allocation_pools: [{"start": {get_param: dummy_net_start_0}, "end": {get_param: dummy_net_end_0}}]
+      enable_dhcp: true
+
+  dummy_net_1:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: dummy_net_name_1}
+
+  dummy_ip_subnet_1:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: dummy_net_name_1}
+      network_id: { get_resource: dummy_net_1 }
+      cidr: { get_param: dummy_net_cidr_1 }
+      allocation_pools: [{"start": {get_param: dummy_net_start_1}, "end": {get_param: dummy_net_end_1}}]
+      enable_dhcp: true
+
+
+  mogconfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: ungrouped
+      config:
+        str_replace:
+          template: |
+            #!/bin/bash
+            wget -P script_dir swift_container/script_name
+            wget -P script_dir swift_container/parameter_name
+            chmod 755 script_dir/script_name
+            script_dir/script_name
+          params:
+            swift_container: {get_param: mog_swift_container}
+            script_dir: {get_param: mog_script_dir}
+            script_name: {get_param: mog_script_name}
+            #parameter_name: {get_param: mog_parameter_name}
+
+
+  servergroup_mog01:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies:
+        - anti-affinity
+  server_pd_01:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [pd_server_names, 0]}
+      image: {get_param: pd_image_name}
+      flavor: {get_param: pd_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: pd01_port_0}
+        - port: {get_resource: pd01_port_1}
+        - port: {get_resource: pd01_port_2}
+        - port: {get_resource: pd01_port_3}
+        - port: {get_resource: pd01_port_4}
+        - port: {get_resource: pd01_port_5}
+        - port: {get_resource: pd01_port_6}
+     #   - port: {get_resource: pd01_port_7}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog01}}
+      user_data_format:  RAW
+
+
+  pd01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+  pd01_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [oam_net_ips, 0]}}]
+      security_groups: [{get_resource: mog_security_group}]
+  pd01_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_0}
+      security_groups: [{get_resource: mog_security_group}]
+  pd01_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: rx_net_name}
+      fixed_ips: [{"ip_address": {get_param: [rx_net_ips, 0]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: rx_net_floating_ip} }]
+      security_groups: [{get_resource: mog_security_group}]
+  pd01_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_1}
+      security_groups: [{get_resource: mog_security_group}]
+  pd01_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: ran_net_name}
+      fixed_ips: [{"ip_address": {get_param: [ran_net_ips, 0]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: ran_net_floating_ip} }]
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd01_port_6:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: sl_net_name}
+      fixed_ips: [{"ip_address": {get_param: [sl_net_ips, 0]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: sl_net_floating_ip}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+ # pd01_port_7:
+ #j   type: OS::Neutron::Port
+ #   properties:
+ #     network: {get_param: internet_net_name}
+ #     fixed_ips: [{"ip_address": {get_param: [internet_net_ips, 0]}}]
+ #     allowed_address_pairs: [{"ip_address": {get_param: internet_net_floating_ip} }]
+ #    security_groups: [{get_resource: mog_security_group}]
+
+  server_pd_02:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [pd_server_names, 1]}
+      image: {get_param: pd_image_name}
+      flavor: {get_param: pd_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: pd02_port_0}
+        - port: {get_resource: pd02_port_1}
+        - port: {get_resource: pd02_port_2}
+        - port: {get_resource: pd02_port_3}
+        - port: {get_resource: pd02_port_4}
+        - port: {get_resource: pd02_port_5}
+        - port: {get_resource: pd02_port_6}
+      #  - port: {get_resource: pd02_port_7}
+
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog01}}
+      user_data_format:  RAW
+
+  pd02_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [oam_net_ips, 1]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_0}
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: rx_net_name}
+      fixed_ips: [{"ip_address": {get_param: [rx_net_ips, 1]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: rx_net_floating_ip} }]
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_1}
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: ran_net_name}
+      fixed_ips: [{"ip_address": {get_param: [ran_net_ips, 1]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: ran_net_floating_ip} }]
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_6:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: sl_net_name}
+      fixed_ips: [{"ip_address": {get_param: [sl_net_ips, 1]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: sl_net_floating_ip}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+ # pd02_port_7:
+ #   type: OS::Neutron::Port
+ #   properties:
+    #  network: {get_param: internet_net_name}
+    #  fixed_ips: [{"ip_address": {get_param: [internet_net_ips, 1]}}]
+   #   allowed_address_pairs: [{"ip_address": {get_param: internet_net_floating_ip} }]
+   #   security_groups: [{get_resource: mog_security_group}]
+
+  servergroup_mog02:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies:
+        - anti-affinity
+  server_oam01:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [oam_server_names, 0]}
+      image: {get_param: oam_image_name}
+      flavor: {get_param: oam_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: oam01_port_0}
+        - port: {get_resource: oam01_port_1}
+#      block_device_mapping:
+#        - device_name: vdd
+#          volume_id: { get_param: oam-vol-1 }
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog02}}
+      user_data_format:  RAW
+
+  oam01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  oam01_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [oam_net_ips, 2]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+
+  server_oam02:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [oam_server_names, 1]}
+      image: {get_param: oam_image_name}
+      flavor: {get_param: oam_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: oam02_port_0}
+        - port: {get_resource: oam02_port_1}
+#      block_device_mapping:
+#        - device_name: vdd
+#          volume_id: { get_param: oam-vol-2 }
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog02}}
+      user_data_format:  RAW
+
+  oam02_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  oam02_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [oam_net_ips, 3]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+
+  server_sm01:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [sm_server_names, 0]}
+      image: {get_param: sm_image_name}
+      flavor: {get_param: sm_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: sm01_port_0}
+        - port: {get_resource: sm01_port_1}
+#      block_device_mapping:
+#        - device_name: vdd
+#          volume_id: { get_param: session-manager-vol-1 }
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog02}}
+      user_data_format:  RAW
+
+  sm01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  sm01_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_0}
+      security_groups: [{get_resource: mog_security_group}]
+
+  sm01_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: repl_net_name}
+      fixed_ips: [{"ip_address": {get_param: [repl_net_ips, 0]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+  server_sm02:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [sm_server_names, 1]}
+      image: {get_param: sm_image_name}
+      flavor: {get_param: sm_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+#      block_device_mapping:
+#        - device_name: vdd
+#          volume_id: { get_param: session-manager-vol-2 }
+      networks:
+        - port: {get_resource: sm02_port_0}
+        - port: {get_resource: sm02_port_1}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog02}}
+      user_data_format:  RAW
+
+  sm02_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  sm02_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_0}
+      security_groups: [{get_resource: mog_security_group}]
+
+  sm02_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: repl_net_name}
+      fixed_ips: [{"ip_address": {get_param: [repl_net_ips, 1]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+  servergroup_mog03:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies:
+        - anti-affinity
+  server_ps01:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [ps_server_names, 0]}
+      image: {get_param: ps_image_name}
+      flavor: {get_param: ps_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: ps01_port_0}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog03}}
+      user_data_format:  RAW
+
+  ps01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  server_ps02:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [ps_server_names, 1]}
+      image: {get_param: ps_image_name}
+      flavor: {get_param: ps_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: ps02_port_0}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog03}}
+      user_data_format:  RAW
+
+  ps02_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  server_ps03:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: [ps_server_names, 2]}
+      image: {get_param: ps_image_name}
+      flavor: {get_param: ps_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: ps03_port_0}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog03}}
+      user_data_format:  RAW
+
+  ps03_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  server_ps04:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: [ps_server_names, 3]}
+      image: {get_param: ps_image_name}
+      flavor: {get_param: ps_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: ps04_port_0}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog03}}
+      user_data_format:  RAW
+
+  ps04_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  server_cm01:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [cm_server_names, 0]}
+      image: {get_param: cm_image_name}
+      flavor: {get_param: cm_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: cm01_port_0}
+        - port: {get_resource: cm01_port_1}
+#      block_device_mapping:
+#        - device_name: vdd
+#          volume_id: { get_param: cluster-manager-vol-2 }
+#        - device_name: vde
+#          volume_id: { get_param: cluster-manager-vol-1 }
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog03}}
+      user_data_format:  RAW
+
+  cm01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      fixed_ips: [{"ip_address": {get_param: [csb_net_ips, 10]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+  cm01_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [oam_net_ips, 4]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/MANIFEST.json b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/MANIFEST.json
new file mode 100644
index 0000000..6b48646
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/MANIFEST.json
@@ -0,0 +1,42 @@
+{
+	"name": "multiple_not_nested",
+	"description": "multiple heat files in zip, no nesting",
+	"version": "2013-05-23",
+	"data": [{
+		"file": "cmaui.yml",
+		"type": "HEAT",
+		"data": [{
+			"file": "cmaui.env",
+			"type": "HEAT_ENV"
+		}]
+	},
+	{
+		"file": "eca_oam.yaml",
+		"type": "AAA",
+		"data": [{
+			"file": "eca_oam.env",
+			"type": "AAA"
+		}]
+	},
+	{
+		"file": "eca_oam_2.yaml",
+		"type": "AAA"
+	},		
+	{
+		"file": "MMSC_Capacity_Line.yml",
+		"type": "HEAT",
+		"data": [{
+			"file": "MMSC_Capacity_Line_1.env",
+			"type": "HEAT_ENV"
+		}]
+	},
+	{
+		"file": "SG_ECA_MGMT.yaml",
+		"type": "HEAT",
+		"data": [{
+			"file": "sg_eca_mgmt.env",
+			"type": "HEAT_ENV"
+		}]
+	}
+	]
+}
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/MMSC_Capacity_Line.yml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/MMSC_Capacity_Line.yml
new file mode 100644
index 0000000..3b0bc56
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/MMSC_Capacity_Line.yml
@@ -0,0 +1,3223 @@
+heat_template_version: 2013-05-23
+
+description: >
+  HOT template that creates internal networks, load balancers and servers for vMMSC capacity Line 1.
+  #11/23: updated the network definition to meet the juniper best practices way of defining the gateway, DHCP enable for internal networks (L457-L547)
+
+parameters:
+  vnf_id:
+    type: string
+    description: Unique ID for this VNF instance
+    default: This_is_the_MMSC_id
+  oam_net_name:
+    type: string
+    label: UID of OAM network
+    description: UID of OAM network
+  oam_network_netmask:
+    type: string
+    label: oam network netmask
+    description: oam network gateway
+  oam_network_gateway:
+    type: string
+    label: oam network gateway
+    description: oam network gateway
+  oam_network_route_1:
+    type: string
+    label: oam network route 1
+    description: oam network route 1
+  oam_network_route_2:
+    type: string
+    label: oam network route 2
+    description:  oam network route 2
+  external_dns:
+    type: string
+    label: dns server
+    description: dns server for MMSC
+  external_ntp:
+    type: string
+    label: ntp server 
+    description: ntp server for MMSC
+  lb_oam_ips:
+    type: comma_delimited_list
+    label: management network ips for mmsc lb
+    description: the ips of the management network for mmsc lb
+  dmz_protected_net_name:
+    type: string
+    label: UID of dmz_protected network
+    description: UID of dmz_protected network
+  lb_dmz_protected_ips:
+    type: comma_delimited_list
+    label: dmz protected network local ips for lb VM
+    description: local ips of the dmz protected network for lb VM
+  cor_direct_net_name:
+    type: string
+    label: cor direct net UID
+    description: cor direct net
+  lb_cor_direct_ips:
+    type: comma_delimited_list
+    label:  cor direct network local ips for lb VM
+    description: local ips of cor direct network for lb VM
+  mms_traffic_net_name:
+    type: string
+    label: Name of MMS traffic network
+    description: Name of MMS traffic network
+  mms_traffic_net_cidr:
+    type: string
+    label: MMS traffic network address (CIDR notation)
+    description: MMS traffic network address (CIDR notation)
+  mms_traffic_netmask:
+    type: string
+    label: MMS traffic network subnet mask
+    description: MMS traffic network subnet mask  
+  mms_traffic_net_gateway:
+    type: string
+    label: MMS traffic network gateway address
+    description: MMS traffic network gateway address
+  mms_traffic_start:
+    type: string
+    label: mmsc traffic start IP
+    description: mmsc traffic start IP
+  mms_traffic_end:
+    type: string
+    label: mmsc traffic end IP
+    description: mmsc traffic end IP
+  mms_traffic_net_cidr:
+    type: string
+    label: mmsc traffic cidr
+    description: mmsc traffic cidr
+  mms_traffic_net_local_ip1:
+    type: string
+    label: mmsc traffic network local ip1
+    description: the local ip1 of the mmsc traffic network
+  mms_traffic_net_local_ip2:
+    type: string
+    label: mmsc traffic network local ip2
+    description: the local ip2 of the mmsc traffic network
+  mms_traffic_net_floating_ip:
+    type: string
+    label: mmsc traffic floating ip
+    description: mmsc traffic floating ip
+  nems_internal_name:
+    type: string
+    label: nems internal network name
+    description: nems internal network name
+  nems_internal_start:
+    type: string
+    label: nems internal start
+    description: nems internal start
+  nems_internal_end:
+    type: string
+    label: nems internal end
+    description: nems internal end
+  nems_internal_cidr:
+    type: string
+    label: nems ineternal cidr
+    description: nems internal cidr
+  nems_internal_netmask:
+    type: string
+    label: NEMS internal network subnet mask
+    description: NEMS internal network subnet mask
+  nems_internal_gateway:
+    type: string
+    label: nems internal gw
+    description: nems internal gw
+  nems_traffic_name:
+    type: string
+    label: nems traffic name
+    description: nems traffic name
+  nems_traffic_start:
+    type: string
+    label: nems traffic start
+    description: nems traffic start
+  nems_traffic_end:
+    type: string
+    label: nems traffic end
+    description: nems traffic end
+  nems_traffic_cidr:
+    type: string
+    label: nems traffic cidr
+    description: nems traffic cidr
+  nems_traffic_netmask:
+    type: string
+    label: NEMS traffic network subnet mask
+    description: NEMS traffic network subnet mask
+  nems_traffic_gateway:
+    type: string
+    label: NEMS traffic network gateway
+    description: NEMS traffic network gateway  
+  nems_traffic_net_local_ip1:
+    type: string
+    label: nems traffic network local ip1
+    description: the local ip1 of the nems traffic network
+  nems_traffic_net_local_ip2:
+    type: string
+    label: nems traffic network local ip2
+    description: the local ip2 of the nems traffic network
+  nems_traffic_net_floating_ip:
+    type: string
+    label: nems traffic floating ip
+    description: nems traffic floating ip
+  nems_user_web_name:
+    type: string
+    label: nems user web name
+    description: nems user web name
+  nems_user_web_start:
+    type: string
+    label: nems user web start
+    description: nems user web end
+  nems_user_web_end:
+    type: string
+    label: nems user web end
+    description: nems user web end
+  nems_user_web_cidr:
+    type: string
+    label: nems user web cidr
+    description: nems user web cidr
+  nems_user_web_netmask:
+    type: string
+    label: NEMS user web network subnet mask
+    description: NEMS user web network subnet mask
+  nems_user_web_gateway:
+    type: string
+    label: NEMS user web network gateway
+    description: NEMS user web network gateway
+  nems_user_web_net_local_ip1:
+    type: string
+    label: nems user web network local ip1
+    description: the local ip1 of the nems user web network
+  nems_user_web_net_local_ip2:
+    type: string
+    label: nems user web network local ip2
+    description: the local ip2 of the nems user web network
+  nems_user_web_net_floating_ip:
+    type: string
+    label: nems user web floating ip
+    description: nems user web floating ip 
+  nems_imap_name:
+    type: string
+    label: nems imap name
+    description: nems imap name
+  nems_imap_netmask:
+    type: string
+    label: nems imap subnet mask
+    description: nems imap subnet mask  
+  nems_imap_start:
+    type: string
+    label: nems imap start
+    description: nems imap start
+  nems_imap_end:
+    type: string
+    label: nems imap end
+    description: nems imap end
+  nems_imap_cidr:
+    type: string
+    label: nems imap cidr
+    description: nems imap cidr
+  nems_imap_gateway:
+    type: string
+    label: nems imap gateway
+    description: nems imap gateway  
+  eca_traffic_name:
+    type: string
+    label: eca traffic name
+    description: eca traffic name
+  eca_traffic_start:
+    type: string
+    label: eca traffic start
+    description: eca traffic start
+  eca_traffic_end:
+    type: string
+    label: eca traffic end
+    description: eca traffic end
+  eca_traffic_cidr:
+    type: string
+    label: eca traffic cidr
+    description: eca traffic cidr
+  eca_traffic_netmask:
+    type: string
+    label: ECA traffic network subnet mask
+    description: ECA traffic network subnet mask
+  eca_traffic_net_gateway:
+    type: string
+    label: eca_traffic network gateway
+    description: eca_traffic network gateway  
+  eca_traffic_net_local_ip1:
+    type: string
+    label: eca traffic network local ip1
+    description: the local ip1 of the eca traffic network
+  eca_traffic_net_local_ip2:
+    type: string
+    label: eca traffic network local ip2
+    description: the local ip2 of the eca traffic network
+  eca_traffic_net_floating_ip:
+    type: string
+    label: eca traffic floating ip
+    description: eca traffic floating ip
+  ha_net_name:
+    type: string
+    label: ha_failover network name
+    description: ha_failover network name
+  ha_net_start:
+    type: string
+    label: ha net start
+    description: ha net start
+  ha_net_end:
+    type: string
+    label: ha net end
+    description: ha net end
+  ha_net_cidr:
+    type: string
+    label: ha net cidr
+    description: ha net cidr
+  ha_net_local_ip1:
+    type: string
+    label: ha net network local ip1
+    description: the local ip1 of the ha network
+  ha_net_local_ip2:
+    type: string
+    label: ha net network local ip2
+    description: the local ip2 of the ha network
+  lb_names:
+    type: comma_delimited_list
+    label: MMSC load balancer instance names
+    description: MMSC load balancer instance names
+  lb_image_name:
+    type: string
+    label: MMSC load balancer image name
+    description: MMSC load balancer image name
+  lb_flavor_name:
+    type: string
+    label: Load balancer flavor name
+    description: the flavor name of MMSC load balancer instance
+  availability_zone_0:
+    type: string
+    label: MMSC availabilityzone name
+    description: MMSC availabilityzone name
+  security_group_name:
+    type: string
+    label: MMSC security group name
+    description: MMSC security group name
+  mmsc_image:
+    type: string
+    label: Image for MMSC server
+    description: Image for MMSC server
+  mmsc_flavor:
+    type: string
+    label: Flavor for MMSC server
+    description: Flavor for MMSC server
+  mmsc_cinder_volume_size:
+    type: number
+    label: MMSC Cinder volume size
+    description: the size of the MMSC Cinder volume
+  nems_fe_image:
+    type: string
+    label: Image for NEMS FE server
+    description: Image for NEMS FE server
+  nems_fe_flavor:
+    type: string
+    label: Flavor for NEMS FE server
+    description: Flavor for NEMS FE server
+  nems_be_image:
+    type: string
+    label: Image for NEMS BE server
+    description: Image for NEMS BE server
+  nems_be_flavor:
+    type: string
+    label: Flavor for NEMS BE server
+    description: Flavor for NEMS BE server
+  eca_trx_image:
+    type: string
+    label: Image for ECA TRX server
+    description: Image for ECA TRX server
+  eca_trx_flavor:
+    type: string
+    label: Flavor for ECA TRX server
+    description: Flavor for ECA TRX server
+  mmsc_oam_ips:
+    type: comma_delimited_list
+    label: MMSC oam_net IP addresses
+    description: MMSC oam_net IP addresses
+  mmsc_mms_traffic_net_ips:
+    type: comma_delimited_list
+    label: MMSC mms_traffic_net IP addresses
+    description: MMSC mms_traffic_net IP addresses
+  nems_fe_names:
+    type: comma_delimited_list
+    label: NEMS_FE server names
+    description: NEMS_FE server names
+  nems_fe_node_roles:
+    type: comma_delimited_list
+    label: nems fe node roles
+    description: nems fe node roles
+  nems_fe_oam_ips:
+    type: comma_delimited_list
+    label: OAM_net IP for NEMS_FE
+    description: OAM_net IP for NEMS_FE
+  nems_fe_nems_traffic_net_ips:
+    type: comma_delimited_list
+    label: nems_traffic_net IPs for NEMS_FE
+    description: nems_traffic_net IPs for NEMS_FE
+  nems_fe_nems_user_web_net_ips:
+    type: comma_delimited_list
+    label: nems_web_user_net IPs for NEMS_FE
+    description: nems_web_user_net IPs for NEMS_FE
+  nems_fe_nems_internal_net_ips:
+    type: comma_delimited_list
+    label: nems_internal_net IPs for NEMS_FE
+    description: nems_internal_net IPs for NEMS_FE
+  nems_fe_nems_imap_net_ips:
+    type: comma_delimited_list
+    label: nems_imap_net IPs for NEMS_FE
+    description: nems_imap_net IPs for NEMS_FE  
+  nems_be_names:
+    type: string
+    label: NEMS_BE server names
+    description: NEMS_BE server names
+  nems_be_node_roles:
+    type: string
+    label: nems node roles
+    description: nems node roles
+  nems_be_oam_ips:
+    type: string
+    label: OAM net IPs for NEMS_BE
+    description: OAM net IPs for NEMS_BE
+  nems_be_nems_internal_net_ips:
+    type: string
+    label: nems internal net IPs for NEMS_BE
+    description: nems internal net IPs for NEMS_BE
+  nems_be_nems_imap_net_ips:
+    type: string
+    label: nems imap_net IPs for NEMS_BE
+    description: nems imap net IPs for NEMS_BE 
+  eca_trx_oam_ips:
+    type: comma_delimited_list
+    label: OAM net IP for ECA_TRX
+    description: OAM net IP for ECA_TRX
+  eca_trx_mgmt_ips:
+    type: comma_delimited_list
+    label: eca mgmt net IP for ECA_TRX
+    description: eca mgmt net IP for ECA_TRX
+  timezone:
+    type: string
+    label: timezone
+    description: timezone
+  eca_trx_names:
+    type: comma_delimited_list
+    label: ECA_TRX server names
+    description: ECA_TRX server names
+  eca_trx_eca_traffic_net_ips:
+    type: comma_delimited_list
+    label: eca traffic net IPs for ECA_TRX
+    description: eca traffic net IPs for ECA_TRX
+  mmsc_names:
+    type: comma_delimited_list
+    label: MMSC server names
+    description: MMSC server names
+  nems_volume_size:
+    type: number
+    label: nems fe volume size
+    description: nems fe volume size
+  nems_be_volume_size:
+    type: number
+    label: nems be volume size
+    description: nems be volume size
+  MMSC_volume_type:
+    type: string
+    label: MMSC vm volume type
+    description: the name of the target volume backend
+  NEMS_FE_volume_type:
+    type: string
+    label: nems fe vm volume type
+    description: the name of the target volume backend
+  NEMS_BE_volume_type:
+    type: string
+    label: nems be vm volume type
+    description: the name of the target volume backend
+  mmsc_core_virtual_server_ips:
+    type: comma_delimited_list
+    label: mmsc core virtual server ips
+    description: mmsc core virtual server ips
+  mmsc_core_snat_ips:
+    type: comma_delimited_list
+    label: mmsc core snat ips
+    description: mmsc core snat ips
+  mmsc_dmz_protected_virtual_server_ips:
+    type: comma_delimited_list
+    label: mmsc dmz_protected virtual server ips
+    description: mmsc dmz_protected virtual server ips
+  mmsc_dmz_protected_snat_ips:
+    type: comma_delimited_list
+    label: mmsc dmz_protected snat ips
+    description: mmsc dmz_protected snat ips
+  eca_mgmt_net_name:
+    type: string
+    label: eca management network ID
+    description: Network ID for eca management
+
+resources:
+  mms_traffic_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: mms_traffic_net_name }
+
+  mms_traffic_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: mms_traffic_net_name}      
+      network_id: { get_resource: mms_traffic_net }
+      cidr: { get_param: mms_traffic_net_cidr }
+      allocation_pools: [{"start": {get_param: mms_traffic_start}, "end": {get_param: mms_traffic_end}}]
+
+  nems_internal_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: {get_param: nems_internal_name}
+
+  nems_internal_network_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: nems_internal_name}
+      allocation_pools: [{"start": {get_param: nems_internal_start}, "end": {get_param: nems_internal_end}}]
+      cidr: {get_param: nems_internal_cidr}
+      network_id: {get_resource: nems_internal_net}
+
+  nems_traffic_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: {get_param: nems_traffic_name}
+
+  nems_traffic_network_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: nems_traffic_name}
+      allocation_pools: [{"start": {get_param: nems_traffic_start}, "end": {get_param: nems_traffic_end}}]
+      cidr: {get_param: nems_traffic_cidr}
+      network_id: {get_resource: nems_traffic_net}
+
+  nems_user_web_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: {get_param: nems_user_web_name}
+
+  nems_user_web_network_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: nems_user_web_name}
+      allocation_pools: [{"start": {get_param: nems_user_web_start}, "end": {get_param: nems_user_web_end}}]
+      cidr: {get_param: nems_user_web_cidr}
+      network_id: {get_resource: nems_user_web_net}
+
+  nems_imap_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: {get_param: nems_imap_name}
+
+  nems_imap_network_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: nems_imap_name}
+      allocation_pools: [{"start": {get_param: nems_imap_start}, "end": {get_param: nems_imap_end}}]
+      cidr: {get_param: nems_imap_cidr}
+      network_id: {get_resource: nems_imap_net}
+
+  eca_traffic_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: {get_param: eca_traffic_name}
+
+  eca_traffic_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: eca_traffic_name}
+      allocation_pools: [{"start": {get_param: eca_traffic_start}, "end": {get_param: eca_traffic_end}}]
+      cidr: {get_param: eca_traffic_cidr}
+      network_id: {get_resource: eca_traffic_net}
+
+  ha_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: {get_param: ha_net_name}
+
+  ha_net_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: ha_net_name}
+      allocation_pools: [{"start": {get_param: ha_net_start}, "end": {get_param: ha_net_end}}]
+      cidr: {get_param: ha_net_cidr}
+      network_id: {get_resource: ha_net}
+
+  lb1_instance:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: [lb_names, 0]}
+      image: {get_param: lb_image_name}
+      flavor: {get_param: lb_flavor_name}
+      availability_zone: {get_param: availability_zone_0}
+      networks:
+        - port: {get_resource: lb1_mgmt_port}
+        - port: {get_resource: lb1_dmz_protected_port}
+        - port: {get_resource: lb1_cor_direct_port}
+        - port: {get_resource: lb1_mms_traffic_port}
+        - port: {get_resource: lb1_nems_traffic_port}
+        - port: {get_resource: lb1_nems_user_web_port}
+        - port: {get_resource: lb1_eca_traffic_port}
+        - port: {get_resource: lb1_ha_net_port}
+      metadata:
+        vnf_id: { get_param: vnf_id }
+
+  lb1_mgmt_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [lb_oam_ips, 0]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  lb1_mms_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: mms_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: mms_traffic_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: mms_traffic_net_floating_ip} }]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  lb1_dmz_protected_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: dmz_protected_net_name}
+      fixed_ips: [{"ip_address": {get_param: [lb_dmz_protected_ips, 0]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: [mmsc_dmz_protected_virtual_server_ips, 0]}}, {"ip_address": {get_param: [mmsc_dmz_protected_virtual_server_ips, 1]}}, {"ip_address": {get_param: [mmsc_dmz_protected_virtual_server_ips, 2]}}, {"ip_address": {get_param: [mmsc_dmz_protected_snat_ips, 0]}}, {"ip_address": {get_param: [mmsc_dmz_protected_snat_ips, 1]}}, {"ip_address": {get_param: [mmsc_dmz_protected_snat_ips, 2]}}, {"ip_address": {get_param: [mmsc_dmz_protected_snat_ips, 3]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  lb1_cor_direct_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: cor_direct_net_name}
+      fixed_ips: [{"ip_address": {get_param: [lb_cor_direct_ips, 0]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: [mmsc_core_virtual_server_ips, 0]}}, {"ip_address": {get_param: [mmsc_core_virtual_server_ips, 1]}}, {"ip_address": {get_param: [mmsc_core_snat_ips, 0]}}, {"ip_address": {get_param: [mmsc_core_snat_ips, 1]}}, {"ip_address": {get_param: [mmsc_core_snat_ips, 2]}}, {"ip_address": {get_param: [mmsc_core_snat_ips, 3]}}, {"ip_address": {get_param: [mmsc_core_snat_ips, 4]}} ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  lb1_nems_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: nems_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: nems_traffic_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: nems_traffic_net_floating_ip} }]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  lb1_nems_user_web_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: nems_user_web_net}
+      fixed_ips: [{"ip_address": {get_param: nems_user_web_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: nems_user_web_net_floating_ip} }]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  lb1_ha_net_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: ha_net}
+      fixed_ips: [{"ip_address": {get_param: ha_net_local_ip1}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  lb1_eca_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: eca_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: eca_traffic_net_local_ip1}}]
+      allowed_address_pairs: [{"ip_address": {get_param: eca_traffic_net_floating_ip} }]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  lb2_instance:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: [lb_names, 1]}
+      image: {get_param: lb_image_name}
+      flavor: {get_param: lb_flavor_name}
+      availability_zone: {get_param: availability_zone_0}
+      networks:
+        - port: {get_resource: lb2_mgmt_port}
+        - port: {get_resource: lb2_dmz_protected_port}
+        - port: {get_resource: lb2_cor_direct_port}
+        - port: {get_resource: lb2_mms_traffic_port}
+        - port: {get_resource: lb2_nems_traffic_port}
+        - port: {get_resource: lb2_nems_user_web_port}
+        - port: {get_resource: lb2_eca_traffic_port}
+        - port: {get_resource: lb2_ha_net_port}
+      metadata:
+        vnf_id: { get_param: vnf_id }
+
+  lb2_mgmt_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [lb_oam_ips, 1]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  lb2_mms_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: mms_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: mms_traffic_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: mms_traffic_net_floating_ip}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  lb2_dmz_protected_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: dmz_protected_net_name}
+      fixed_ips: [{"ip_address": {get_param: [lb_dmz_protected_ips, 1]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: [mmsc_dmz_protected_virtual_server_ips, 0]}}, {"ip_address": {get_param: [mmsc_dmz_protected_virtual_server_ips, 1]}}, {"ip_address": {get_param: [mmsc_dmz_protected_virtual_server_ips, 2]}}, {"ip_address": {get_param: [mmsc_dmz_protected_snat_ips, 0]}}, {"ip_address": {get_param: [mmsc_dmz_protected_snat_ips, 1]}}, {"ip_address": {get_param: [mmsc_dmz_protected_snat_ips, 2]}}, {"ip_address": {get_param: [mmsc_dmz_protected_snat_ips, 3]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  lb2_cor_direct_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: cor_direct_net_name}
+      fixed_ips: [{"ip_address": {get_param: [lb_cor_direct_ips, 1]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: [mmsc_core_virtual_server_ips, 0]}}, {"ip_address": {get_param: [mmsc_core_virtual_server_ips, 1]}}, {"ip_address": {get_param: [mmsc_core_snat_ips, 0]}}, {"ip_address": {get_param: [mmsc_core_snat_ips, 1]}}, {"ip_address": {get_param: [mmsc_core_snat_ips, 2]}}, {"ip_address": {get_param: [mmsc_core_snat_ips, 3]}}, {"ip_address": {get_param: [mmsc_core_snat_ips, 4]}} ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  lb2_nems_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: nems_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: nems_traffic_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: nems_traffic_net_floating_ip}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  lb2_nems_user_web_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: nems_user_web_net}
+      fixed_ips: [{"ip_address": {get_param: nems_user_web_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: nems_user_web_net_floating_ip}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  lb2_ha_net_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: ha_net}
+      fixed_ips: [{"ip_address": {get_param: ha_net_local_ip2}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  lb2_eca_traffic_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: eca_traffic_net}
+      fixed_ips: [{"ip_address": {get_param: eca_traffic_net_local_ip2}}]
+      allowed_address_pairs: [{"ip_address": {get_param: eca_traffic_net_floating_ip} }]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_mmsc1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [mmsc_names, 0]}
+      image: { get_param: mmsc_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: mmsc_flavor }
+      networks:
+      - port: { get_resource: mmsc1_port_0 }
+      - port: { get_resource: mmsc1_port_1 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            mmsc.mgmt.ip=${mmsc.mgmt.ip}
+            mmsc.mgmt.netmask=${mmsc.mgmt.netmask}
+            mmsc.mgmt.gateway=${mmsc.mgmt.gateway}
+            mmsc.traffic.ip=${mmsc.traffic.ip}
+            mmsc.traffic.netmask=${mmsc.traffic.netmask}
+            mmsc.traffic.gateway=${mmsc.traffic.gateway}
+            mmsc.mgmt.route.1=${mmsc.mgmt.route.1}
+            mmsc.mgmt.route.2=${mmsc.mgmt.route.2}
+            mmsc.external.dns=${mmsc.external.dns}
+            mmsc.external.ntp=${mmsc.external.ntp}
+            mmsc.hostname=${mmsc.hostname}
+            mmsc.timezone=${mmsc.timezone}
+          params:
+            ${mmsc.mgmt.ip}: {get_param: [mmsc_oam_ips, 0]}
+            ${mmsc.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${mmsc.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${mmsc.traffic.ip}: {get_param:  [mmsc_mms_traffic_net_ips, 0]}
+            ${mmsc.traffic.netmask}: {get_param: mms_traffic_netmask}
+            ${mmsc.traffic.gateway}: {get_param: mms_traffic_net_gateway}
+            ${mmsc.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${mmsc.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${mmsc.external.dns}: {get_param: external_dns}
+            ${mmsc.external.ntp}: {get_param: external_ntp}
+            ${mmsc.hostname}: {get_param: [mmsc_names, 0]}
+            ${mmsc.timezone}: {get_param: timezone}
+      user_data_format: RAW
+
+  mmsc1_volume:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: mmsc_cinder_volume_size}
+      volume_type: {get_param: MMSC_volume_type}
+
+  mmsc1_volume_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: {get_resource: mmsc1_volume}
+      instance_uuid: {get_resource: server_mmsc1}
+
+  mmsc1_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [
+        "ip_address": {get_param: [mmsc_oam_ips, 0]}
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  mmsc1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: mms_traffic_net}
+      fixed_ips: [
+        "ip_address": {get_param: [mmsc_mms_traffic_net_ips, 0]}
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+  
+  server_mmsc2:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [mmsc_names, 1]}
+      image: { get_param: mmsc_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: mmsc_flavor }
+      networks:
+      - port: { get_resource: mmsc2_port_0 }
+      - port: { get_resource: mmsc2_port_1 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            mmsc.mgmt.ip=${mmsc.mgmt.ip}
+            mmsc.mgmt.netmask=${mmsc.mgmt.netmask}
+            mmsc.mgmt.gateway=${mmsc.mgmt.gateway}
+            mmsc.traffic.ip=${mmsc.traffic.ip}
+            mmsc.traffic.netmask=${mmsc.traffic.netmask}
+            mmsc.traffic.gateway=${mmsc.traffic.gateway}
+            mmsc.mgmt.route.1=${mmsc.mgmt.route.1}
+            mmsc.mgmt.route.2=${mmsc.mgmt.route.2}
+            mmsc.external.dns=${mmsc.external.dns}
+            mmsc.external.ntp=${mmsc.external.ntp}
+            mmsc.hostname=${mmsc.hostname}
+            mmsc.timezone=${mmsc.timezone}
+          params:
+            ${mmsc.mgmt.ip}: {get_param: [mmsc_oam_ips, 1]}
+            ${mmsc.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${mmsc.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${mmsc.traffic.ip}: {get_param: [mmsc_mms_traffic_net_ips, 1]}
+            ${mmsc.traffic.netmask}: {get_param: mms_traffic_netmask}
+            ${mmsc.traffic.gateway}: {get_param: mms_traffic_net_gateway}
+            ${mmsc.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${mmsc.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${mmsc.external.dns}: {get_param: external_dns}
+            ${mmsc.external.ntp}: {get_param: external_ntp} 
+            ${mmsc.hostname}: {get_param: [mmsc_names, 1]}
+            ${mmsc.timezone}: {get_param: timezone}
+      user_data_format: RAW
+
+  mmsc2_volume:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: mmsc_cinder_volume_size}
+      volume_type: {get_param: MMSC_volume_type}
+
+  mmsc2_volume_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: {get_resource: mmsc2_volume}
+      instance_uuid: {get_resource: server_mmsc2}
+
+  mmsc2_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [
+        "ip_address": {get_param: [mmsc_oam_ips, 1]}
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+ 
+  mmsc2_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: mms_traffic_net}
+      fixed_ips: [
+        "ip_address": {get_param: [mmsc_mms_traffic_net_ips, 1]}
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_mmsc3:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [mmsc_names, 2]}
+      image: { get_param: mmsc_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: mmsc_flavor }
+      networks:
+      - port: { get_resource: mmsc3_port_0 }
+      - port: { get_resource: mmsc3_port_1 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            mmsc.mgmt.ip=${mmsc.mgmt.ip}
+            mmsc.mgmt.netmask=${mmsc.mgmt.netmask}
+            mmsc.mgmt.gateway=${mmsc.mgmt.gateway}
+            mmsc.traffic.ip=${mmsc.traffic.ip}
+            mmsc.traffic.netmask=${mmsc.traffic.netmask}
+            mmsc.traffic.gateway=${mmsc.traffic.gateway}
+            mmsc.mgmt.route.1=${mmsc.mgmt.route.1}
+            mmsc.mgmt.route.2=${mmsc.mgmt.route.2}
+            mmsc.external.dns=${mmsc.external.dns}
+            mmsc.external.ntp=${mmsc.external.ntp}
+            mmsc.hostname=${mmsc.hostname}
+            mmsc.timezone=${mmsc.timezone}
+          params:
+            ${mmsc.mgmt.ip}: {get_param: [mmsc_oam_ips, 2]}
+            ${mmsc.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${mmsc.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${mmsc.traffic.ip}: {get_param:  [mmsc_mms_traffic_net_ips, 2]}
+            ${mmsc.traffic.netmask}: {get_param: mms_traffic_netmask}
+            ${mmsc.traffic.gateway}: {get_param: mms_traffic_net_gateway}
+            ${mmsc.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${mmsc.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${mmsc.external.dns}: {get_param: external_dns}
+            ${mmsc.external.ntp}: {get_param: external_ntp}
+            ${mmsc.hostname}: {get_param: [mmsc_names, 2]}
+            ${mmsc.timezone}: {get_param: timezone}
+      user_data_format: RAW
+
+  mmsc3_volume:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: mmsc_cinder_volume_size}
+      volume_type: {get_param: MMSC_volume_type}
+
+  mmsc3_volume_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: {get_resource: mmsc3_volume}
+      instance_uuid: {get_resource: server_mmsc3}
+
+  mmsc3_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [
+        "ip_address": {get_param: [mmsc_oam_ips, 2]}
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  mmsc3_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: mms_traffic_net}
+      fixed_ips: [
+        "ip_address": {get_param: [mmsc_mms_traffic_net_ips, 2]}
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+  
+  server_mmsc4:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [mmsc_names, 3]}
+      image: { get_param: mmsc_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: mmsc_flavor }
+      networks:
+      - port: { get_resource: mmsc4_port_0 }
+      - port: { get_resource: mmsc4_port_1 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            mmsc.mgmt.ip=${mmsc.mgmt.ip}
+            mmsc.mgmt.netmask=${mmsc.mgmt.netmask}
+            mmsc.mgmt.gateway=${mmsc.mgmt.gateway}
+            mmsc.traffic.ip=${mmsc.traffic.ip}
+            mmsc.traffic.netmask=${mmsc.traffic.netmask}
+            mmsc.traffic.gateway=${mmsc.traffic.gateway}
+            mmsc.mgmt.route.1=${mmsc.mgmt.route.1}
+            mmsc.mgmt.route.2=${mmsc.mgmt.route.2}
+            mmsc.external.dns=${mmsc.external.dns}
+            mmsc.external.ntp=${mmsc.external.ntp}
+            mmsc.hostname=${mmsc.hostname}
+            mmsc.timezone=${mmsc.timezone}
+          params:
+            ${mmsc.mgmt.ip}: {get_param: [mmsc_oam_ips, 3]}
+            ${mmsc.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${mmsc.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${mmsc.traffic.ip}: {get_param: [mmsc_mms_traffic_net_ips, 3]}
+            ${mmsc.traffic.netmask}: {get_param: mms_traffic_netmask}
+            ${mmsc.traffic.gateway}: {get_param: mms_traffic_net_gateway}
+            ${mmsc.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${mmsc.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${mmsc.external.dns}: {get_param: external_dns}
+            ${mmsc.external.ntp}: {get_param: external_ntp} 
+            ${mmsc.hostname}: {get_param: [mmsc_names, 3]}
+            ${mmsc.timezone}: {get_param: timezone}
+      user_data_format: RAW
+
+  mmsc4_volume:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: mmsc_cinder_volume_size}
+      volume_type: {get_param: MMSC_volume_type}
+
+  mmsc4_volume_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: {get_resource: mmsc4_volume}
+      instance_uuid: {get_resource: server_mmsc4}
+
+  mmsc4_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [
+        "ip_address": {get_param: [mmsc_oam_ips, 3]}
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+ 
+  mmsc4_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: mms_traffic_net}
+      fixed_ips: [
+        "ip_address": {get_param: [mmsc_mms_traffic_net_ips, 3]}
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_mmsc5:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [mmsc_names, 4]}
+      image: { get_param: mmsc_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: mmsc_flavor }
+      networks:
+      - port: { get_resource: mmsc5_port_0 }
+      - port: { get_resource: mmsc5_port_1 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            mmsc.mgmt.ip=${mmsc.mgmt.ip}
+            mmsc.mgmt.netmask=${mmsc.mgmt.netmask}
+            mmsc.mgmt.gateway=${mmsc.mgmt.gateway}
+            mmsc.traffic.ip=${mmsc.traffic.ip}
+            mmsc.traffic.netmask=${mmsc.traffic.netmask}
+            mmsc.traffic.gateway=${mmsc.traffic.gateway}
+            mmsc.mgmt.route.1=${mmsc.mgmt.route.1}
+            mmsc.mgmt.route.2=${mmsc.mgmt.route.2}
+            mmsc.external.dns=${mmsc.external.dns}
+            mmsc.external.ntp=${mmsc.external.ntp}
+            mmsc.hostname=${mmsc.hostname}
+            mmsc.timezone=${mmsc.timezone}
+          params:
+            ${mmsc.mgmt.ip}: {get_param: [mmsc_oam_ips, 4]}
+            ${mmsc.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${mmsc.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${mmsc.traffic.ip}: {get_param: [mmsc_mms_traffic_net_ips, 4]}
+            ${mmsc.traffic.netmask}: {get_param: mms_traffic_netmask}
+            ${mmsc.traffic.gateway}: {get_param: mms_traffic_net_gateway}
+            ${mmsc.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${mmsc.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${mmsc.external.dns}: {get_param: external_dns}
+            ${mmsc.external.ntp}: {get_param: external_ntp} 
+            ${mmsc.hostname}: {get_param: [mmsc_names, 4]}
+            ${mmsc.timezone}: {get_param: timezone}
+      user_data_format: RAW
+
+  mmsc5_volume:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: mmsc_cinder_volume_size}
+      volume_type: {get_param: MMSC_volume_type}
+
+  mmsc5_volume_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: {get_resource: mmsc5_volume}
+      instance_uuid: {get_resource: server_mmsc5}
+
+  mmsc5_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [
+        "ip_address": {get_param: [mmsc_oam_ips, 4]}
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+ 
+  mmsc5_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: {get_resource: mms_traffic_net}
+      fixed_ips: [
+        "ip_address": {get_param: [mmsc_mms_traffic_net_ips, 4]}
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_nems_fe1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [nems_fe_names, 0] }
+      image: { get_param: nems_fe_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: nems_fe_flavor }
+      networks:
+      - port: { get_resource: nems_fe1_port_0 }
+      - port: { get_resource: nems_fe1_port_1 }
+      - port: { get_resource: nems_fe1_port_2 }
+      - port: { get_resource: nems_fe1_port_3 }
+      - port: { get_resource: nems_fe1_port_4 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            nems.mgmt.ip=${nems.mgmt.ip}
+            nems.mgmt.netmask=${nems.mgmt.netmask}
+            nems.mgmt.gateway=${nems.mgmt.gateway}
+            nems.traffic.ip=${nems.traffic.ip}
+            nems.traffic.netmask=${nems.traffic.netmask}
+            nems.traffic.gateway=${nems.traffic.gateway}
+            nems.fe0.internal.ip=${nems.fe0.internal.ip}
+            nems.fe1.internal.ip=${nems.fe1.internal.ip}
+            nems.internal.netmask=${nems.internal.netmask}
+            nems.userweb.ip=${nems.userweb.ip}
+            nems.userweb.netmask=${nems.userweb.netmask}
+            nems.userweb.gateway=${nems.userweb.gateway}
+            nems.imap.ip=${nems.imap.ip}
+            nems.imap.netmask=${nems.imap.netmask}
+            nems.be.internal.ip=${nems.be.internal.ip}
+            nems.be.imap.ip=${nems.be.imap.ip}
+            nems.mgmt.route.1=${nems.mgmt.route.1}
+            nems.mgmt.route.2=${nems.mgmt.route.2}
+            nems.external.dns=${nems.external.dns}
+            nems.external.ntp=${nems.external.ntp}
+            nems.node=${nems.node}
+            nems.be0.host.name=${nems.be0.host.name}
+            nems.fe0.host.name=${nems.fe0.host.name}
+            nems.fe1.host.name=${nems.fe1.host.name}
+            nems.timezone=${nems.timezone}
+          params:
+            ${nems.mgmt.ip}: {get_param: [nems_fe_oam_ips, 0]}
+            ${nems.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${nems.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${nems.traffic.ip}: {get_param: [nems_fe_nems_traffic_net_ips, 0]}
+            ${nems.traffic.netmask}: {get_param: nems_traffic_netmask}
+            ${nems.traffic.gateway}: {get_param: nems_traffic_gateway}
+            ${nems.fe0.internal.ip}: {get_param: [nems_fe_nems_internal_net_ips, 0]}
+            ${nems.fe1.internal.ip}: {get_param: [nems_fe_nems_internal_net_ips, 1]}
+            ${nems.internal.netmask}: {get_param: nems_internal_netmask}
+            ${nems.userweb.ip}: {get_param: [nems_fe_nems_user_web_net_ips, 0]}
+            ${nems.userweb.netmask}: {get_param: nems_user_web_netmask}
+            ${nems.userweb.gateway}: {get_param: nems_user_web_gateway}
+            ${nems.imap.ip}: {get_param: [nems_fe_nems_imap_net_ips, 0]}
+            ${nems.imap.netmask}: {get_param: nems_imap_netmask}       
+            ${nems.be.internal.ip}: {get_param: nems_be_nems_internal_net_ips}
+            ${nems.be.imap.ip}: {get_param: nems_be_nems_imap_net_ips}
+            ${nems.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${nems.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${nems.external.dns}: {get_param: external_dns}
+            ${nems.external.ntp}: {get_param: external_ntp}
+            ${nems.node}: {get_param: [nems_fe_node_roles, 0]} 
+            ${nems.fe0.host.name}: {get_param: [nems_fe_names, 0]}
+            ${nems.fe1.host.name}: {get_param: [nems_fe_names, 1]}
+            ${nems.be0.host.name}: {get_param: nems_be_names}
+            ${nems.timezone}: {get_param: timezone}
+      user_data_format: RAW
+ 
+  nems1_fe_volume:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: nems_volume_size}
+      volume_type: {get_param: NEMS_FE_volume_type}
+ 
+  nems1_fe_volume_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: {get_resource: nems1_fe_volume}
+      instance_uuid: {get_resource: server_nems_fe1}
+
+  nems_fe1_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [
+        "ip_address": { get_param: [nems_fe_oam_ips, 0] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  nems_fe1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [nems_fe_nems_traffic_net_ips, 0] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  nems_fe1_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_user_web_net }
+      fixed_ips: [
+        "ip_address": { get_param: [nems_fe_nems_user_web_net_ips, 0] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  nems_fe1_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_internal_net }
+      fixed_ips: [
+        "ip_address": { get_param: [nems_fe_nems_internal_net_ips, 0] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  nems_fe1_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_imap_net }
+      fixed_ips: [
+        "ip_address": { get_param: [nems_fe_nems_imap_net_ips, 0] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_nems_fe2:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [nems_fe_names, 1] }
+      image: { get_param: nems_fe_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: nems_fe_flavor }
+      networks:
+      - port: { get_resource: nems_fe2_port_0 }
+      - port: { get_resource: nems_fe2_port_1 }
+      - port: { get_resource: nems_fe2_port_2 }
+      - port: { get_resource: nems_fe2_port_3 }
+      - port: { get_resource: nems_fe2_port_4 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            nems.mgmt.ip=${nems.mgmt.ip}
+            nems.mgmt.netmask=${nems.mgmt.netmask}
+            nems.mgmt.gateway=${nems.mgmt.gateway}
+            nems.traffic.ip=${nems.traffic.ip}
+            nems.traffic.netmask=${nems.traffic.netmask}
+            nems.traffic.gateway=${nems.traffic.gateway}
+            nems.fe0.internal.ip=${nems.fe0.internal.ip}
+            nems.fe1.internal.ip=${nems.fe1.internal.ip}
+            nems.internal.netmask=${nems.internal.netmask}
+            nems.userweb.ip=${nems.userweb.ip}
+            nems.userweb.netmask=${nems.userweb.netmask}
+            nems.userweb.gateway=${nems.userweb.gateway}
+            nems.imap.ip=${nems.imap.ip}
+            nems.imap.netmask=${nems.imap.netmask}
+            nems.be.internal.ip=${nems.be.internal.ip}
+            nems.be.imap.ip=${nems.be.imap.ip}
+            nems.mgmt.route.1=${nems.mgmt.route.1}
+            nems.mgmt.route.2=${nems.mgmt.route.2}
+            nems.external.dns=${nems.external.dns}
+            nems.external.ntp=${nems.external.ntp}
+            nems.node=${nems.node}
+            nems.be0.host.name=${nems.be0.host.name}
+            nems.fe0.host.name=${nems.fe0.host.name}
+            nems.fe1.host.name=${nems.fe1.host.name}
+            nems.timezone=${nems.timezone}
+          params:
+            ${nems.mgmt.ip}: {get_param: [nems_fe_oam_ips, 1]}
+            ${nems.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${nems.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${nems.traffic.ip}: {get_param: [nems_fe_nems_traffic_net_ips, 1]}
+            ${nems.traffic.netmask}: {get_param: nems_traffic_netmask}
+            ${nems.traffic.gateway}: {get_param: nems_traffic_gateway}
+            ${nems.fe0.internal.ip}: {get_param: [nems_fe_nems_internal_net_ips, 0]}
+            ${nems.fe1.internal.ip}: {get_param: [nems_fe_nems_internal_net_ips, 1]}
+            ${nems.internal.netmask}: {get_param: nems_internal_netmask}
+            ${nems.userweb.ip}: {get_param: [nems_fe_nems_user_web_net_ips, 1]}
+            ${nems.userweb.netmask}: {get_param: nems_user_web_netmask}
+            ${nems.userweb.gateway}: {get_param: nems_user_web_gateway}
+            ${nems.imap.ip}: {get_param: [nems_fe_nems_imap_net_ips, 1]}
+            ${nems.imap.netmask}: {get_param: nems_imap_netmask}
+            ${nems.be.internal.ip}: {get_param: nems_be_nems_internal_net_ips}
+            ${nems.be.imap.ip}: {get_param: nems_be_nems_imap_net_ips}
+            ${nems.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${nems.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${nems.external.dns}: {get_param: external_dns}
+            ${nems.external.ntp}: {get_param: external_ntp}
+            ${nems.node}: {get_param: [nems_fe_node_roles, 1]}
+            ${nems.fe0.host.name}: {get_param: [nems_fe_names, 0]}
+            ${nems.fe1.host.name}: {get_param: [nems_fe_names, 1]}
+            ${nems.be0.host.name}: {get_param: nems_be_names}
+            ${nems.timezone}: {get_param: timezone}
+      user_data_format: RAW
+
+  nems2_fe_volume:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: nems_volume_size}
+      volume_type: {get_param: NEMS_FE_volume_type}
+ 
+  nems2_fe_volume_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: {get_resource: nems2_fe_volume}
+      instance_uuid: {get_resource: server_nems_fe2}
+
+  nems_fe2_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [
+        "ip_address": {get_param: [nems_fe_oam_ips, 1]}
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  nems_fe2_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [nems_fe_nems_traffic_net_ips, 1] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  nems_fe2_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_user_web_net }
+      fixed_ips: [
+        "ip_address": { get_param: [nems_fe_nems_user_web_net_ips, 1] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  nems_fe2_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_internal_net }
+      fixed_ips: [
+        "ip_address": { get_param: [nems_fe_nems_internal_net_ips, 1] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+
+  nems_fe2_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_imap_net }
+      fixed_ips: [
+        "ip_address": { get_param: [nems_fe_nems_imap_net_ips, 1] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_nems_be1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: nems_be_names }
+      image: { get_param: nems_be_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: nems_be_flavor }
+      networks:
+      - port: { get_resource: nems_be1_port_0 }
+      - port: { get_resource: nems_be1_port_1 }
+      - port: { get_resource: nems_be1_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            nems.be.mgmt.ip=${nems.be.mgmt.ip}
+            nems.mgmt.netmask=${nems.mgmt.netmask}
+            nems.mgmt.gateway=${nems.mgmt.gateway}
+            nems.be.internal.ip=${nems.be.internal.ip}
+            nems.internal.netmask=${nems.internal.netmask}
+            nems.imap.netmask=${nems.imap.netmask}
+            nems.fe0.internal.ip=${nems.fe0.internal.ip}
+            nems.fe1.internal.ip=${nems.fe1.internal.ip}
+            nems.be.imap.ip=${nems.be.imap.ip}
+            nems.mgmt.route.1=${nems.mgmt.route.1}
+            nems.mgmt.route.2=${nems.mgmt.route.2}
+            nems.external.dns=${nems.external.dns}
+            nems.external.ntp=${nems.external.ntp}
+            nems.node=${nems.node}
+            nems.be0.host.name=${nems.be0.host.name}
+            nems.fe0.host.name=${nems.fe0.host.name}
+            nems.fe1.host.name=${nems.fe1.host.name}
+            nems.timezone=${nems.timezone}
+          params:
+            ${nems.be.mgmt.ip}: {get_param: nems_be_oam_ips}
+            ${nems.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${nems.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${nems.fe0.internal.ip}: {get_param: [nems_fe_nems_internal_net_ips, 0]}
+            ${nems.fe1.internal.ip}: {get_param: [nems_fe_nems_internal_net_ips, 1]}
+            ${nems.be.internal.ip}: {get_param: nems_be_nems_internal_net_ips}
+            ${nems.internal.netmask}: {get_param: nems_internal_netmask}
+            ${nems.imap.netmask}: {get_param: nems_imap_netmask}
+            ${nems.be.imap.ip}: {get_param: nems_be_nems_imap_net_ips}
+            ${nems.mgmt.route.1}: {get_param: oam_network_route_1}
+            ${nems.mgmt.route.2}: {get_param: oam_network_route_2}
+            ${nems.external.dns}: {get_param: external_dns}
+            ${nems.external.ntp}: {get_param: external_ntp}
+            ${nems.node}: {get_param: nems_be_node_roles}
+            ${nems.be0.host.name}: {get_param: nems_be_names}
+            ${nems.fe0.host.name}: {get_param: [nems_fe_names, 0]}
+            ${nems.fe1.host.name}: {get_param: [nems_fe_names, 1]}
+            ${nems.timezone}: {get_param: timezone} 
+      user_data_format: RAW
+
+  nems_be_volume:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: nems_be_volume_size}
+      volume_type: {get_param: NEMS_BE_volume_type}
+
+  nems_volume_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties: 
+      volume_id: {get_resource: nems_be_volume}
+      instance_uuid: {get_resource: server_nems_be1} 
+
+
+  nems_be1_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [
+        "ip_address": { get_param: nems_be_oam_ips}
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  nems_be1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_internal_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_be_nems_internal_net_ips}
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  nems_be1_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: nems_imap_net }
+      fixed_ips: [
+        "ip_address": { get_param: nems_be_nems_imap_net_ips}
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 0]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx1_port_0 }
+      - port: { get_resource: eca_trx1_port_1 }
+      - port: { get_resource: eca_trx1_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 0]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 0]}
+  
+  eca_trx1_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 0] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 0] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx1_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 0] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+      
+
+  server_eca_trx2:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 1]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx2_port_0 }
+      - port: { get_resource: eca_trx2_port_1 }
+      - port: { get_resource: eca_trx2_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 1]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 1]}
+
+  eca_trx2_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 1] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx2_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 1] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx2_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 1] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx3:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 2]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx3_port_0 }
+      - port: { get_resource: eca_trx3_port_1 }
+      - port: { get_resource: eca_trx3_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 2]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 2]}
+  
+  eca_trx3_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 2] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx3_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 2] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx3_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 2] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx4:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 3]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx4_port_0 }
+      - port: { get_resource: eca_trx4_port_1 }
+      - port: { get_resource: eca_trx4_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 3]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 3]}
+  
+  eca_trx4_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 3] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx4_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 3] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx4_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 3] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx5:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 4]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx5_port_0 }
+      - port: { get_resource: eca_trx5_port_1 }
+      - port: { get_resource: eca_trx5_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 4]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 4]}
+  
+  eca_trx5_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 4] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx5_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 4] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx5_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 4] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx6:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 5]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx6_port_0 }
+      - port: { get_resource: eca_trx6_port_1 }
+      - port: { get_resource: eca_trx6_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 5]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 5]}
+  
+  eca_trx6_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 5] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx6_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 5] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx6_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 5] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO   
+
+  server_eca_trx7:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 6]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx7_port_0 }
+      - port: { get_resource: eca_trx7_port_1 }
+      - port: { get_resource: eca_trx7_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 6]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 6]}
+
+  eca_trx7_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 6] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx7_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 6] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx7_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 6] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx8:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 7]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx8_port_0 }
+      - port: { get_resource: eca_trx8_port_1 }
+      - port: { get_resource: eca_trx8_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 7]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 7]}
+  
+  eca_trx8_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 7] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx8_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 7] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx8_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 7] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx9:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 8]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx9_port_0 }
+      - port: { get_resource: eca_trx9_port_1 }
+      - port: { get_resource: eca_trx9_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 8]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 8]}
+  
+  eca_trx9_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 8] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx9_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 8] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx9_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 8] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx10:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 9]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx10_port_0 }
+      - port: { get_resource: eca_trx10_port_1 }
+      - port: { get_resource: eca_trx10_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 9]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 9]}
+  
+  eca_trx10_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 9] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx10_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 9] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx10_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 9] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx11:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 10]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx11_port_0 }
+      - port: { get_resource: eca_trx11_port_1 }
+      - port: { get_resource: eca_trx11_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 10]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 10]}
+  
+  eca_trx11_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 10] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx11_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 10] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx11_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 10] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+      
+
+  server_eca_trx12:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 11]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx12_port_0 }
+      - port: { get_resource: eca_trx12_port_1 }
+      - port: { get_resource: eca_trx12_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 11]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 11]}
+
+  eca_trx12_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 11] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx12_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 11] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx12_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 11] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx13:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 12]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx13_port_0 }
+      - port: { get_resource: eca_trx13_port_1 }
+      - port: { get_resource: eca_trx13_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 12]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 12]}
+  
+  eca_trx13_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 12] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx13_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 12] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx13_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 12] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx14:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 13]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx14_port_0 }
+      - port: { get_resource: eca_trx14_port_1 }
+      - port: { get_resource: eca_trx14_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 13]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 13]}
+  
+  eca_trx14_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 13] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx14_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 13] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx14_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 13] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx15:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 14]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx15_port_0 }
+      - port: { get_resource: eca_trx15_port_1 }
+      - port: { get_resource: eca_trx15_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 14]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 14]}
+  
+  eca_trx15_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 14] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx15_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 14] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx15_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 14] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx16:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 15]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx16_port_0 }
+      - port: { get_resource: eca_trx16_port_1 }
+      - port: { get_resource: eca_trx16_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 15]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 15]}
+  
+  eca_trx16_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 15] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx16_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 15] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx16_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 15] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+      
+
+  server_eca_trx17:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 16]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx17_port_0 }
+      - port: { get_resource: eca_trx17_port_1 }
+      - port: { get_resource: eca_trx17_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 16]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 16]}
+
+  eca_trx17_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 16] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx17_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 16] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx17_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 16] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx18:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 17]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx18_port_0 }
+      - port: { get_resource: eca_trx18_port_1 }
+      - port: { get_resource: eca_trx18_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 17]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 17]}
+  
+  eca_trx18_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 17] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx18_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 17] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx18_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 17] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx19:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 18]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx19_port_0 }
+      - port: { get_resource: eca_trx19_port_1 }
+      - port: { get_resource: eca_trx19_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 8]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 18]}
+  
+  eca_trx19_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 18] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx19_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 18] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx19_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 18] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_eca_trx20:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [eca_trx_names, 19]}
+      image: { get_param: eca_trx_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: eca_trx_flavor }
+      networks:
+      - port: { get_resource: eca_trx20_port_0 }
+      - port: { get_resource: eca_trx20_port_1 }
+      - port: { get_resource: eca_trx20_port_2 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            touch /tmp/user_data.log
+            sed -i s/HOSTNAME.*/"HOSTNAME=trx_hostname"/g /etc/sysconfig/network
+            echo "172.26.8.6 puppet" > /etc/hosts
+            eth0_ip_address='trx_traf_ip_address'
+            eth0_gateway='172.26.5.3'
+            echo "$eth0_ip_address" >>/tmp/user_data.log
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address" 
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"  
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            puppet agent -t > /root/puppet-agent-t.out
+          params:
+            trx_hostname: {get_param: [eca_trx_names, 19]}
+            trx_traf_ip_address: {get_param: [eca_trx_eca_traffic_net_ips, 19]}
+  
+  eca_trx20_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_oam_ips, 19] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx20_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: eca_mgmt_net_name }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_mgmt_ips, 19] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  eca_trx20_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: eca_traffic_net }
+      fixed_ips: [
+        "ip_address": { get_param: [eca_trx_eca_traffic_net_ips, 19] }
+      ]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/MMSC_Capacity_Line_1.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/MMSC_Capacity_Line_1.env
new file mode 100644
index 0000000..b346d67
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/MMSC_Capacity_Line_1.env
@@ -0,0 +1,111 @@
+parameters:
+  oam_net_name: oam_protected_net_0
+  oam_network_netmask: 255.255.254.0
+  oam_network_gateway: 107.250.172.1
+  oam_network_route_1: 155.165.201.250/32,107.250.172.1
+  oam_network_route_2: 155.165.194.100/32,107.250.172.1
+  external_dns: 155.165.194.100
+  external_ntp: 155.165.201.250
+  lb_oam_ips: 107.250.172.50,107.250.172.51
+  dmz_protected_net_name: dmz_protected_net_0
+  lb_dmz_protected_ips: 107.239.14.19,107.239.14.20
+  cor_direct_net_name: cor_direct_net_0
+  lb_cor_direct_ips: 172.31.10.19,172.31.10.20
+  mms_traffic_net_name: int_mms_mms_traffic_net_2
+  mms_traffic_net_cidr: 172.26.2.0/24
+  mms_traffic_netmask: 255.255.255.0
+  mms_traffic_net_gateway: 172.26.2.1
+  mms_traffic_start: 172.26.2.3
+  mms_traffic_end: 172.26.2.254
+  mms_traffic_net_local_ip1: 172.26.2.3
+  mms_traffic_net_local_ip2: 172.26.2.4
+  mms_traffic_net_floating_ip: 172.26.2.5
+  nems_internal_name: int_mms_nems_internal_net_2
+  nems_internal_start: 172.26.6.3
+  nems_internal_end: 172.26.6.254
+  nems_internal_cidr: 172.26.6.0/24
+  nems_internal_netmask: 255.255.255.0
+  nems_internal_gateway: 172.26.6.1
+  nems_traffic_name: int_mms_nems_traffic_net_2
+  nems_traffic_start: 172.26.3.3
+  nems_traffic_end: 172.26.3.254
+  nems_traffic_cidr: 172.26.3.0/24
+  nems_traffic_netmask: 255.255.255.0
+  nems_traffic_gateway: 172.26.3.1
+  nems_traffic_net_local_ip1: 172.26.3.3
+  nems_traffic_net_local_ip2: 172.26.3.4
+  nems_traffic_net_floating_ip: 172.26.3.5
+  nems_user_web_name: int_mms_nems_web_net_2
+  nems_user_web_start: 172.26.4.3
+  nems_user_web_end: 172.26.4.254
+  nems_user_web_cidr: 172.26.4.0/24
+  nems_user_web_netmask: 255.255.255.0
+  nems_user_web_gateway: 172.26.4.1
+  nems_user_web_net_local_ip1: 172.26.4.3
+  nems_user_web_net_local_ip2: 172.26.4.4
+  nems_user_web_net_floating_ip: 172.26.4.5
+  nems_imap_name: int_mms_nems_imap_net_2
+  nems_imap_start: 172.26.7.3
+  nems_imap_end: 172.26.7.254
+  nems_imap_cidr: 172.26.7.0/24
+  nems_imap_netmask: 255.255.255.0
+  nems_imap_gateway: 172.26.7.1
+  eca_traffic_name: int_mms_eca_traffic_net_2
+  eca_traffic_cidr: 172.26.5.0/24
+  eca_traffic_netmask: 255.255.255.0
+  eca_traffic_net_gateway: 172.26.5.1
+  eca_traffic_start: 172.26.5.3
+  eca_traffic_end: 172.26.5.254
+  eca_traffic_net_local_ip1: 172.26.5.3
+  eca_traffic_net_local_ip2: 172.26.5.4
+  eca_traffic_net_floating_ip: 172.26.5.5
+  ha_net_name: int_mms_ha_net_2
+  ha_net_cidr: 172.26.1.0/24
+  ha_net_start: 172.26.1.3
+  ha_net_end: 172.26.1.254
+  ha_net_local_ip1: 172.26.1.3 
+  ha_net_local_ip2: 172.26.1.4
+  lb_names: ZRDM1MMSC03ALB001,ZRDM1MMSC03ALB002
+  lb_image_name: BIGIP-11.5.3.0.0.163
+  lb_flavor_name: m1.xlarge
+  security_group_name: mmsc_security_group_1
+  availability_zone_0: nova
+  mmsc_mms_traffic_net_ips: 172.26.2.11,172.26.2.12,172.26.2.13,172.26.2.14,172.26.2.15
+  mmsc_oam_ips: 107.250.172.54,107.250.172.55,107.250.172.56,107.250.172.57,107.250.172.58
+  mmsc_flavor: lc.4xlarge4
+  mmsc_image: mmsc-6.0.2_v5
+  mmsc_cinder_volume_size: 480
+  nems_fe_flavor: m1.large2
+  nems_fe_image: nems-2.1.2_v29
+  nems_fe_names: ZRDM1MMSC03NFE001,ZRDM1MMSC03NFE002
+  nems_fe_node_roles: FE0,FE1
+  nems_fe_oam_ips: 107.250.172.64,107.250.172.65
+  nems_fe_nems_traffic_net_ips: 172.26.3.11,172.26.3.12
+  nems_fe_nems_user_web_net_ips: 172.26.4.11,172.26.4.12 
+  nems_fe_nems_internal_net_ips: 172.26.6.11,172.26.6.12
+  nems_fe_nems_imap_net_ips: 172.26.7.11,172.26.7.12
+  nems_be_names: ZRDM1MMSC03NBE001
+  nems_be_node_roles: BE0
+  nems_be_oam_ips: 107.250.172.66
+  nems_be_nems_internal_net_ips: 172.26.6.13
+  nems_be_nems_imap_net_ips: 172.26.7.13
+  nems_be_flavor: m1.large2
+  nems_be_image: nems-2.1.2_v29
+  eca_trx_oam_ips: 107.250.172.70,107.250.172.71,107.250.172.72,107.250.172.73,107.250.172.74,107.250.172.75,107.250.172.76,107.250.172.77,107.250.172.78,107.250.172.79,107.250.172.80,107.250.172.81,107.250.172.82,107.250.172.83,107.250.172.84,107.250.172.85,107.250.172.86,107.250.172.87,107.250.172.88,107.250.172.89
+  eca_trx_mgmt_ips: 172.25.137.202,172.25.137.203,172.25.137.204,172.25.137.205,172.25.137.206,172.25.137.207,172.25.137.208,172.25.137.209,172.25.137.210,172.25.137.211,172.25.137.212,172.25.137.213,172.25.137.214,172.25.137.215,172.25.137.216,172.25.137.217,172.25.137.218,172.25.137.219,172.25.137.220,172.25.137.221
+  eca_trx_flavor: m1.xlarge
+  eca_trx_image: ECABASE
+  timezone: UTC
+  eca_trx_names: ZRDM1MMSC03TRX001,ZRDM1MMSC03TRX002,ZRDM1MMSC03TRX003,ZRDM1MMSC03TRX004,ZRDM1MMSC03TRX005,ZRDM1MMSC03TRX006,ZRDM1MMSC03TRX007,ZRDM1MMSC03TRX008,ZRDM1MMSC03TRX009,ZRDM1MMSC03TRX010,ZRDM1MMSC03TRX011,ZRDM1MMSC03TRX012,ZRDM1MMSC03TRX013,ZRDM1MMSC03TRX014,ZRDM1MMSC03TRX015,ZRDM1MMSC03TRX016,ZRDM1MMSC03TRX017,ZRDM1MMSC03TRX018,ZRDM1MMSC03TRX019,ZRDM1MMSC03TRX020
+  eca_trx_eca_traffic_net_ips: 172.26.5.11,172.26.5.12,172.26.5.13,172.26.5.14,172.26.5.15,172.26.5.16,172.26.5.17,172.26.5.18,172.26.5.19,172.26.5.20,172.26.5.21,172.26.5.22,172.26.5.23,172.26.5.24,172.26.5.25,172.26.5.26,172.26.5.27,172.26.5.28,172.26.5.29,172.26.5.30
+  mmsc_names: ZRDM1MMSC03MMS001,ZRDM1MMSC03MMS002,ZRDM1MMSC03MMS003,ZRDM1MMSC03MMS004,ZRDM1MMSC03MMS005
+  nems_volume_size: 50
+  nems_be_volume_size: 610
+  MMSC_volume_type: Platinum
+  NEMS_FE_volume_type: Platinum
+  NEMS_BE_volume_type: Platinum
+  mmsc_core_virtual_server_ips: 172.31.10.21,172.31.10.22
+  mmsc_core_snat_ips: 172.31.10.23,172.31.10.24,172.31.10.25,172.31.10.26,172.31.10.27
+  mmsc_dmz_protected_virtual_server_ips: 107.239.14.21,107.239.14.22,107.239.14.23
+  mmsc_dmz_protected_snat_ips: 107.239.14.24,107.239.14.25,107.239.14.26,107.239.14.27
+  eca_mgmt_net_name: int_eca_mgmt_net_1
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/SG_ECA_MGMT.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/SG_ECA_MGMT.yaml
new file mode 100644
index 0000000..53efc5e
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/SG_ECA_MGMT.yaml
@@ -0,0 +1,76 @@
+heat_template_version: 2013-05-23
+
+#################################
+#
+#  Changes from MSO - 11/5/2015
+#  - Parameter changes as below
+#  - CDLs for vmNames, IPs 
+#  - aZone->availability_zone_0
+#  - nwName->{nwRole}_net_name
+#  - nwID->{nwRole}_net_id
+#  - vmName->{vmType}_names
+# -  ips ->{vmType}_{nwRole}_ips
+# -  fips->{vmType}_{nwRole}_floating_ip
+#  - added replacement_policy: AUTO to all ports
+#  - added vnf_id for metadata to all servers
+#  - externalized security group resource
+#  - externalized eca_mgmt network
+#
+#################################
+
+description: >
+  HOT template that creates Security Group and ECA network
+
+parameters:
+  eca_mgmt_name:
+    type: string
+    label: eca management name
+    description: eca management name
+  eca_mgmt_start:
+    type: string
+    label: eca management start
+    description: eca management start
+  eca_mgmt_end:
+    type: string
+    label: eca management end
+    description: eca management end
+  eca_mgmt_cidr:
+    type: string
+    label: eca management cidr
+    description: eca management cidr
+  eca_mgmt_netmask:
+    type: string
+    label: ECA mgmt network subnet mask
+    description: ECA mgmt network subnet mask
+  security_group_name:
+    type: string
+    label: MMSC security group name
+    description: MMSC security group name
+
+resources:
+  mms_security_group:
+    type: OS::Neutron::SecurityGroup
+    properties:
+      description: mmsc security group
+      name: {get_param: security_group_name}
+      rules: [{"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": egress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0}
+              ]
+  eca_mgmt_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: {get_param: eca_mgmt_name}
+
+  eca_mgmt_network_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: eca_mgmt_name}
+      allocation_pools: [{"start": {get_param: eca_mgmt_start}, "end": {get_param: eca_mgmt_end}}]
+      cidr: {get_param: eca_mgmt_cidr}
+      #enable_dhcp: false
+      #gateway_ip: null
+      network_id: {get_resource: eca_mgmt_net}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/cmaui.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/cmaui.env
new file mode 100644
index 0000000..d37e1ee
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/cmaui.env
@@ -0,0 +1,17 @@
+parameters:
+  cmaui_names: ZRDM1MMSC02CMI001,ZRDM1MMSC02CMI002 
+  cmaui_flavor: m1.large
+  cmaui_image: cmaui-5.0.2.5_v25
+  cmaui_cinder_volume_size: 55
+  oam_net_name: oam_protected_net_0
+  oam_network_netmask: 255.255.254.0
+  oam_network_gateway: 107.250.172.1
+  oam_network_netmask: 255.255.255.192
+  oam_network_gateway: 10.20.30.1
+  external_dns: 155.165.201.250
+  external_ntp: 155.165.194.100
+  security_group_name: mmsc_security_group_1
+  availability_zone_0: nova
+  timezone: UTC
+  cmaui_oam_ips: 107.250.172.42,107.250.172.43
+  CMAUI_volume_type: Platinum
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/cmaui.yml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/cmaui.yml
new file mode 100644
index 0000000..0b925e2
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/cmaui.yml
@@ -0,0 +1,202 @@
+heat_template_version: 2013-05-23
+
+#################################
+#
+#  Changes from MSO 01/26/2016
+#  Updated per ECOMP feedback
+#
+#################################
+
+description: cmaui server template for vMMSC
+
+parameters:
+  vnf_id:
+    type: string
+    description: Unique ID for this VNF instance
+    default: This_is_ths_MMSC-CMAUI_id
+  cmaui_names:
+    type: comma_delimited_list
+    description: CMAUI1, CMAUI2 server names
+  cmaui_image:
+    type: string
+    description: Image for CMAUI server
+  cmaui_flavor:
+    type: string
+    description: Flavor for CMAUI server
+  cmaui_cinder_volume_size:
+     type: number
+     label: CMAUI Cinder volume size
+     description: the size of the CMAUI Cinder volume
+  availability_zone_0:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  oam_net_name:
+    type: string
+    description: UID of OAM network
+  oam_network_netmask:
+    type: string
+    label: oam network netmask
+    description: oam network gateway
+  oam_network_gateway:
+    type: string
+    label: oam network gateway
+    description: oam network gateway
+  external_dns:
+    type: string
+    label: dns server
+    description: dns server
+  external_ntp:
+    type: string
+    label: ntp server 
+    description: ntp server
+  security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  timezone:
+    type: string
+    label: timezone
+    description: timezone
+  cmaui_oam_ips:
+    type: comma_delimited_list
+    label: CMAUI oam_net IP addresses
+    description: CMAUI oam_net IP addresses
+  CMAUI_volume_type:
+    type: string
+    label: CMAUI vm volume type
+    description: the name of the target volume backend
+
+resources:
+  server_cmaui:
+    type: eca_oam.yaml
+    properties:
+      name: { get_param: [cmaui_names, 0]}
+      image: { get_param: cmaui_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: cmaui_flavor }
+      networks:
+      - port: { get_resource: cmaui_port_0 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            cmaui.mgmt.ip=${cmaui.mgmt.ip}
+            cmaui.mgmt.netmask=${cmaui.mgmt.netmask}
+            cmaui.mgmt.gateway=${cmaui.mgmt.gateway}
+            cmaui.external.dns=${cmaui.external.dns}
+            cmaui.external.ntp=${cmaui.external.ntp}
+            cmaui.node=${cmaui.node}
+            cmaui.timezone=${cmaui.timezone}
+          params:
+            ${cmaui.mgmt.ip}: {get_param: [cmaui_oam_ips, 0]} 
+            ${cmaui.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${cmaui.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${cmaui.external.dns}: {get_param: external_dns}
+            ${cmaui.external.ntp}: {get_param: external_ntp}
+            ${cmaui.node}: {get_param: [cmaui_names, 0]} 
+            ${cmaui.timezone}: {get_param: timezone}
+      user_data_format: RAW 
+
+  server_cmaui_2:
+    type: eca_oam_2.yaml
+    properties:
+      name: { get_param: [cmaui_names, 0]}
+      image: { get_param: cmaui_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: cmaui_flavor }
+      networks:
+      - port: { get_resource: cmaui_port_0 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            cmaui.mgmt.ip=${cmaui.mgmt.ip}
+            cmaui.mgmt.netmask=${cmaui.mgmt.netmask}
+            cmaui.mgmt.gateway=${cmaui.mgmt.gateway}
+            cmaui.external.dns=${cmaui.external.dns}
+            cmaui.external.ntp=${cmaui.external.ntp}
+            cmaui.node=${cmaui.node}
+            cmaui.timezone=${cmaui.timezone}
+          params:
+            ${cmaui.mgmt.ip}: {get_param: [cmaui_oam_ips, 0]} 
+            ${cmaui.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${cmaui.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${cmaui.external.dns}: {get_param: external_dns}
+            ${cmaui.external.ntp}: {get_param: external_ntp}
+            ${cmaui.node}: {get_param: [cmaui_names, 0]} 
+            ${cmaui.timezone}: {get_param: timezone}
+      user_data_format: RAW 
+
+  cmaui_volume:
+     type: OS::Cinder::Volume
+     properties:
+       size: {get_param: cmaui_cinder_volume_size}
+       volume_type: {get_param: CMAUI_volume_type}
+
+  cmaui_volume_attachment:
+     type: OS::Cinder::VolumeAttachment
+     properties:
+       volume_id: {get_resource: cmaui_volume}
+       instance_uuid: {get_resource: server_cmaui}
+
+  cmaui_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [{"ip_address": {get_param: [cmaui_oam_ips, 0]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  server_cmaui1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [cmaui_names, 1]}
+      image: { get_param: cmaui_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: cmaui_flavor }
+      networks:
+      - port: { get_resource: cmaui1_port_0 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            cmaui.mgmt.ip=${cmaui.mgmt.ip}
+            cmaui.mgmt.netmask=${cmaui.mgmt.netmask}
+            cmaui.mgmt.gateway=${cmaui.mgmt.gateway}
+            cmaui.external.dns=${cmaui.external.dns}
+            cmaui.external.ntp=${cmaui.external.ntp}
+            cmaui.node=${cmaui.node}
+            cmaui.timezone=${cmaui.timezone}
+          params:
+            ${cmaui.mgmt.ip}: {get_param: [cmaui_oam_ips, 1]} 
+            ${cmaui.mgmt.netmask}: {get_param: oam_network_netmask}
+            ${cmaui.mgmt.gateway}: {get_param: oam_network_gateway}
+            ${cmaui.external.dns}: {get_param: external_dns}
+            ${cmaui.external.ntp}: {get_param: external_ntp}
+            ${cmaui.node}: {get_param: [cmaui_names, 1]} 
+            ${cmaui.timezone}: {get_param: timezone}
+      user_data_format: RAW 
+
+  cmaui1_volume:
+     type: OS::Cinder::Volume
+     properties:
+       size: {get_param: cmaui_cinder_volume_size}
+       volume_type: {get_param: CMAUI_volume_type}
+
+  cmaui1_volume_attachment:
+     type: OS::Cinder::VolumeAttachment
+     properties:
+       volume_id: {get_resource: cmaui1_volume}
+       instance_uuid: {get_resource: server_cmaui1}
+
+  cmaui1_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: oam_net_name }
+      fixed_ips: [{"ip_address": {get_param: [cmaui_oam_ips, 1]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/eca_oam.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/eca_oam.env
new file mode 100644
index 0000000..f999172
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/eca_oam.env
@@ -0,0 +1,20 @@
+parameters:
+  eca_names: ZRDM1MMSC02OAM001,ZRDM1MMSC02OAM002
+  arb_names: ZRDM1MMSC02ARB001
+  oam_image_name: ECABASE
+  oam_flavor: lc.xlarge4
+  arbiter_flavor: m1.large2
+  availability_zone_0: nova
+  oam_net_name: oam_protected_net_0
+  eca_mgmt_net_name: int_mms_eca_mgmt_net_1
+  eca_oam_ips: 107.250.172.44,107.250.172.45
+  eca_eca_mgmt_ips: 172.25.137.242,172.25.137.243
+  eca_oam_gateway: 107.250.172.1
+  arb_oam_ips: 107.250.172.46
+  arb_eca_mgmt_ips: 172.25.137.244
+  security_group_name: mmsc_security_group_1
+  oam_volume_size: 1800
+  arb_volume_size: 40
+  swift_eca_url: http://object-store.rdm2.cci.com:8080/v1/AUTH_1bbab536a19b4756926e7d0ec1eb543c/eca
+  ECA_OAM_volume_type: Platinum
+  ARB_volume_type: Platinum
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/eca_oam.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/eca_oam.yaml
new file mode 100644
index 0000000..b9fa486
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/eca_oam.yaml
@@ -0,0 +1,383 @@
+heat_template_version: 2013-05-23
+
+##########################################################
+#
+#  Changes from MSO 
+#  - Updated per ECOMP Feedback
+#  
+#
+##########################################################
+
+description: This stack creates two ECA OAM VM and one ARB VM
+
+parameters:
+  vnf_id:
+    type: string
+    description: Unique ID for this VNF instance
+    default: This_is_ths_MMSC-ECA_id
+  eca_names:
+    type: comma_delimited_list
+    label: oam servers names
+    description: the names of the OAM1,OAM2 VM instances
+  arb_names:
+    type: comma_delimited_list
+    label: arbiter server names
+    description: the names of the arbiter VM instances
+  oam_image_name:
+    type: string
+    label: image name
+    description: the OAM image name
+  oam_flavor:
+    type: string
+    label: flavor name
+    description: OAM flavor name
+  arbiter_flavor:
+    type: string
+    label: flavor name
+    description: arbiter flavor name
+  availability_zone_0:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  oam_net_name:
+    type: string
+    label: oam network name
+    description: the name of the oam network
+  eca_mgmt_net_name:
+    type: string
+    label: internal network name
+    description: the name of the internal network
+  eca_oam_ips:
+    type: comma_delimited_list
+    label: oam network ips
+    description: the ips of oam networks for eca VM
+  eca_oam_gateway:
+    type: string
+    label: oam1 oam gateway
+    description: the ip of oam gateway
+  eca_eca_mgmt_ips:
+    type: comma_delimited_list
+    label: eca_mgmt network ips for eca VM
+    description: internal eca_mgmt network ips for eca VM
+  arb_oam_ips:
+    type: comma_delimited_list
+    label: oam network ips for arb VM
+    description: oam network ips for eca VM
+  arb_eca_mgmt_ips:
+    type: comma_delimited_list
+    label: eca_mgmt network ips 
+    description:  internal eca_mgmt network ips for arb VM
+  eca_oam_gateway:
+    type: string
+    label: oam network gateway
+    description: oam network gateway
+  security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  oam_volume_size:
+    type: number
+    label: volume size
+    description: the size of the OAM volume
+  arb_volume_size:
+    type: number
+    label: volume size
+    description: the size of the ARB volume
+  swift_eca_url:
+    type: string
+    label: Swift URL
+    description: Base URL for eca swift object store
+  ECA_OAM_volume_type:
+    type: string
+    label: eca oam vm volume type
+    description: the name of the target volume backend
+  ARB_volume_type:
+    type: string
+    label: arb vm volume type
+    description: the name of the target volume backend
+
+resources:
+  oam1_instance:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: [eca_names, 0]}
+      image: {get_param: oam_image_name}
+      flavor: {get_param: oam_flavor}
+      availability_zone: {get_param: availability_zone_0}
+      networks:
+        - port: {get_resource: oam1_int_port}
+        - port: {get_resource: oam1_mgmt_port}
+      metadata:
+        vnf_id: { get_param: vnf_id }  
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            sed -i s/HOSTNAME.*/"HOSTNAME=oam1_hostname"/g /etc/sysconfig/network
+            eth1_ip_address='oam1_mgt_ip'
+            eth1_gateway='oam_gateway'
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address"
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            mkdir /etc/puppet/files/roles/transcoder
+            mkdir /etc/puppet/files/roles/oam_primary
+            curl swift_url/etc/puppet/manifests/roles/oam_primary.pp > /etc/puppet/manifests/roles/oam_primary.pp
+            curl swift_url/etc/puppet/manifests/roles/transcoder.pp > /etc/puppet/manifests/roles/transcoder.pp
+            curl swift_url/etc/puppet/files/roles/oam_primary/config.yaml > /etc/puppet/files/roles/oam_primary/config.yaml
+            curl swift_url/etc/puppet/files/roles/transcoder/config.yaml > /etc/puppet/files/roles/transcoder/config.yaml
+            curl swift_url/etc/puppet/files/roles/transcoder/hpm.conf > /etc/puppet/files/roles/transcoder/hpm.conf
+            curl swift_url/etc/puppet/files/roles/transcoder/trx.conf > /etc/puppet/files/roles/transcoder/trx.conf
+            curl swift_url/etc/puppet/files/roles/transcoder/plugins-mo.conf > /etc/puppet/files/roles/transcoder/plugins-mo.conf
+            curl swift_url/etc/puppet/files/global/11-customer.conf > /etc/puppet/files/global/11-customer.conf
+            curl swift_url/etc/puppet/manifests/site.pp > /etc/puppet/manifests/site.pp
+            curl swift_url/scripts/van-init-replicaset > /usr/sbin/van-init-replicaset
+            van-role oam_primary > /root/startup-van-role.out
+            curl swift_url/scripts/fdisk-keystrokes > /root/fdisk-keystrokes 
+            fdisk /dev/vdb < /root/fdisk-keystrokes 
+            curl swift_url/scripts/os-conf-cinder-vol > /root/os-conf-cinder-vol
+            chmod 755 /root/os-conf-cinder-vol
+            /root/os-conf-cinder-vol 2>> /tmp/cinder_volume.log
+          params:
+            oam1_mgt_ip: {get_param: [eca_oam_ips, 0] }
+            oam_gateway: {get_param: eca_oam_gateway }
+            oam1_hostname: {get_param: [eca_names, 0]}
+            swift_url: {get_param: swift_eca_url}
+
+  oam1_mgmt_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [eca_oam_ips, 0]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  oam1_int_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: eca_mgmt_net_name}
+      fixed_ips: [{"ip_address": {get_param: [eca_eca_mgmt_ips, 0]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  oam1_volume:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: oam_volume_size}
+      volume_type: {get_param: ECA_OAM_volume_type}
+
+  oam1_volume_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: {get_resource: oam1_volume}
+      instance_uuid: {get_resource: oam1_instance}
+
+  oam2_instance:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: [eca_names, 1]}
+      image: {get_param: oam_image_name}
+      flavor: {get_param: oam_flavor}
+      availability_zone: {get_param: availability_zone_0}
+      networks:
+        - port: {get_resource: oam2_int_port}
+        - port: {get_resource: oam2_mgmt_port}
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            sed -i s/HOSTNAME.*/"HOSTNAME=oam2_hostname"/g /etc/sysconfig/network
+            eth1_ip_address='oam2_mgt_ip'
+            eth1_gateway='oam_gateway'
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address"
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            curl swift_url/etc/puppet/manifests/roles/oam_secondary.pp > /etc/puppet/manifests/roles/oam_secondary.pp
+            curl swift_url/etc/puppet/files/global/config.yaml > /etc/puppet/files/global/config.yaml
+            curl swift_url/etc/puppet/files/global/11-customer.conf > /etc/puppet/files/global/11-customer.conf
+            van-role oam_secondary > /root/startup-van-role.out
+            curl swift_url/scripts/fdisk-keystrokes > /root/fdisk-keystrokes 
+            fdisk /dev/vdb < /root/fdisk-keystrokes 
+            curl swift_url/scripts/os-conf-cinder-vol > /root/os-conf-cinder-vol
+            chmod 755 /root/os-conf-cinder-vol
+            /root/os-conf-cinder-vol 2>> /tmp/cinder_volume.log
+            
+          params:
+            oam2_mgt_ip: {get_param: [eca_oam_ips, 1] }
+            oam2_hostname: {get_param: [eca_names, 1]}
+            swift_url: {get_param: swift_eca_url}
+            oam_gateway: {get_param: eca_oam_gateway }
+
+  oam2_mgmt_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [eca_oam_ips, 1]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  oam2_int_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: eca_mgmt_net_name}
+      fixed_ips: [{"ip_address": {get_param: [eca_eca_mgmt_ips, 1]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  oam2_volume:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: oam_volume_size}
+      volume_type: {get_param: ECA_OAM_volume_type}
+
+  oam2_volume_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: {get_resource: oam2_volume}
+      instance_uuid: {get_resource: oam2_instance}
+
+  arb_instance:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: [arb_names, 0]}
+      image: {get_param: oam_image_name}
+      flavor: {get_param: arbiter_flavor}
+      availability_zone: {get_param: availability_zone_0}
+      networks:
+        - port: {get_resource: arb_int_port}
+        - port: {get_resource: arb_mgmt_port}
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            sed -i s/HOSTNAME.*/"HOSTNAME=arb_hostname"/g /etc/sysconfig/network
+            eth1_ip_address='arb_mgt_ip'
+            eth1_gateway='oam_gateway'
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address"
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            curl swift_url/etc/puppet/manifests/roles/oam_arbiter.pp > /etc/puppet/manifests/roles/oam_arbiter.pp
+            curl swift_url/etc/puppet/files/global/config.yaml > /etc/puppet/files/global/config.yaml
+            curl swift_url/etc/puppet/files/global/11-customer.conf > /etc/puppet/files/global/11-customer.conf
+            van-role oam_arbiter > /root/startup-van-role.out
+            curl swift_url/scripts/fdisk-keystrokes > /root/fdisk-keystrokes 
+            fdisk /dev/vdb < /root/fdisk-keystrokes 
+            curl swift_url/scripts/os-conf-cinder-vol > /root/os-conf-cinder-vol
+            chmod 755 /root/os-conf-cinder-vol
+            /root/os-conf-cinder-vol 2>> /tmp/cinder_volume.log
+          params:
+            arb_mgt_ip: {get_param: [arb_oam_ips, 0] }
+            arb_hostname: {get_param: [arb_names, 0]}
+            swift_url: {get_param: swift_eca_url}
+            oam_gateway: {get_param: eca_oam_gateway }
+
+  arb_mgmt_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [arb_oam_ips, 0]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  arb_int_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: eca_mgmt_net_name}
+      fixed_ips: [{"ip_address": {get_param: [arb_eca_mgmt_ips, 0]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  arb_volume:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: arb_volume_size}
+      volume_type: {get_param: ARB_volume_type}
+  arb_volume_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: {get_resource: arb_volume}
+      instance_uuid: {get_resource: arb_instance}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/eca_oam_2.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/eca_oam_2.yaml
new file mode 100644
index 0000000..b9fa486
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/eca_oam_2.yaml
@@ -0,0 +1,383 @@
+heat_template_version: 2013-05-23
+
+##########################################################
+#
+#  Changes from MSO 
+#  - Updated per ECOMP Feedback
+#  
+#
+##########################################################
+
+description: This stack creates two ECA OAM VM and one ARB VM
+
+parameters:
+  vnf_id:
+    type: string
+    description: Unique ID for this VNF instance
+    default: This_is_ths_MMSC-ECA_id
+  eca_names:
+    type: comma_delimited_list
+    label: oam servers names
+    description: the names of the OAM1,OAM2 VM instances
+  arb_names:
+    type: comma_delimited_list
+    label: arbiter server names
+    description: the names of the arbiter VM instances
+  oam_image_name:
+    type: string
+    label: image name
+    description: the OAM image name
+  oam_flavor:
+    type: string
+    label: flavor name
+    description: OAM flavor name
+  arbiter_flavor:
+    type: string
+    label: flavor name
+    description: arbiter flavor name
+  availability_zone_0:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  oam_net_name:
+    type: string
+    label: oam network name
+    description: the name of the oam network
+  eca_mgmt_net_name:
+    type: string
+    label: internal network name
+    description: the name of the internal network
+  eca_oam_ips:
+    type: comma_delimited_list
+    label: oam network ips
+    description: the ips of oam networks for eca VM
+  eca_oam_gateway:
+    type: string
+    label: oam1 oam gateway
+    description: the ip of oam gateway
+  eca_eca_mgmt_ips:
+    type: comma_delimited_list
+    label: eca_mgmt network ips for eca VM
+    description: internal eca_mgmt network ips for eca VM
+  arb_oam_ips:
+    type: comma_delimited_list
+    label: oam network ips for arb VM
+    description: oam network ips for eca VM
+  arb_eca_mgmt_ips:
+    type: comma_delimited_list
+    label: eca_mgmt network ips 
+    description:  internal eca_mgmt network ips for arb VM
+  eca_oam_gateway:
+    type: string
+    label: oam network gateway
+    description: oam network gateway
+  security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  oam_volume_size:
+    type: number
+    label: volume size
+    description: the size of the OAM volume
+  arb_volume_size:
+    type: number
+    label: volume size
+    description: the size of the ARB volume
+  swift_eca_url:
+    type: string
+    label: Swift URL
+    description: Base URL for eca swift object store
+  ECA_OAM_volume_type:
+    type: string
+    label: eca oam vm volume type
+    description: the name of the target volume backend
+  ARB_volume_type:
+    type: string
+    label: arb vm volume type
+    description: the name of the target volume backend
+
+resources:
+  oam1_instance:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: [eca_names, 0]}
+      image: {get_param: oam_image_name}
+      flavor: {get_param: oam_flavor}
+      availability_zone: {get_param: availability_zone_0}
+      networks:
+        - port: {get_resource: oam1_int_port}
+        - port: {get_resource: oam1_mgmt_port}
+      metadata:
+        vnf_id: { get_param: vnf_id }  
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            sed -i s/HOSTNAME.*/"HOSTNAME=oam1_hostname"/g /etc/sysconfig/network
+            eth1_ip_address='oam1_mgt_ip'
+            eth1_gateway='oam_gateway'
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address"
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            mkdir /etc/puppet/files/roles/transcoder
+            mkdir /etc/puppet/files/roles/oam_primary
+            curl swift_url/etc/puppet/manifests/roles/oam_primary.pp > /etc/puppet/manifests/roles/oam_primary.pp
+            curl swift_url/etc/puppet/manifests/roles/transcoder.pp > /etc/puppet/manifests/roles/transcoder.pp
+            curl swift_url/etc/puppet/files/roles/oam_primary/config.yaml > /etc/puppet/files/roles/oam_primary/config.yaml
+            curl swift_url/etc/puppet/files/roles/transcoder/config.yaml > /etc/puppet/files/roles/transcoder/config.yaml
+            curl swift_url/etc/puppet/files/roles/transcoder/hpm.conf > /etc/puppet/files/roles/transcoder/hpm.conf
+            curl swift_url/etc/puppet/files/roles/transcoder/trx.conf > /etc/puppet/files/roles/transcoder/trx.conf
+            curl swift_url/etc/puppet/files/roles/transcoder/plugins-mo.conf > /etc/puppet/files/roles/transcoder/plugins-mo.conf
+            curl swift_url/etc/puppet/files/global/11-customer.conf > /etc/puppet/files/global/11-customer.conf
+            curl swift_url/etc/puppet/manifests/site.pp > /etc/puppet/manifests/site.pp
+            curl swift_url/scripts/van-init-replicaset > /usr/sbin/van-init-replicaset
+            van-role oam_primary > /root/startup-van-role.out
+            curl swift_url/scripts/fdisk-keystrokes > /root/fdisk-keystrokes 
+            fdisk /dev/vdb < /root/fdisk-keystrokes 
+            curl swift_url/scripts/os-conf-cinder-vol > /root/os-conf-cinder-vol
+            chmod 755 /root/os-conf-cinder-vol
+            /root/os-conf-cinder-vol 2>> /tmp/cinder_volume.log
+          params:
+            oam1_mgt_ip: {get_param: [eca_oam_ips, 0] }
+            oam_gateway: {get_param: eca_oam_gateway }
+            oam1_hostname: {get_param: [eca_names, 0]}
+            swift_url: {get_param: swift_eca_url}
+
+  oam1_mgmt_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [eca_oam_ips, 0]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  oam1_int_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: eca_mgmt_net_name}
+      fixed_ips: [{"ip_address": {get_param: [eca_eca_mgmt_ips, 0]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  oam1_volume:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: oam_volume_size}
+      volume_type: {get_param: ECA_OAM_volume_type}
+
+  oam1_volume_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: {get_resource: oam1_volume}
+      instance_uuid: {get_resource: oam1_instance}
+
+  oam2_instance:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: [eca_names, 1]}
+      image: {get_param: oam_image_name}
+      flavor: {get_param: oam_flavor}
+      availability_zone: {get_param: availability_zone_0}
+      networks:
+        - port: {get_resource: oam2_int_port}
+        - port: {get_resource: oam2_mgmt_port}
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            sed -i s/HOSTNAME.*/"HOSTNAME=oam2_hostname"/g /etc/sysconfig/network
+            eth1_ip_address='oam2_mgt_ip'
+            eth1_gateway='oam_gateway'
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address"
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            curl swift_url/etc/puppet/manifests/roles/oam_secondary.pp > /etc/puppet/manifests/roles/oam_secondary.pp
+            curl swift_url/etc/puppet/files/global/config.yaml > /etc/puppet/files/global/config.yaml
+            curl swift_url/etc/puppet/files/global/11-customer.conf > /etc/puppet/files/global/11-customer.conf
+            van-role oam_secondary > /root/startup-van-role.out
+            curl swift_url/scripts/fdisk-keystrokes > /root/fdisk-keystrokes 
+            fdisk /dev/vdb < /root/fdisk-keystrokes 
+            curl swift_url/scripts/os-conf-cinder-vol > /root/os-conf-cinder-vol
+            chmod 755 /root/os-conf-cinder-vol
+            /root/os-conf-cinder-vol 2>> /tmp/cinder_volume.log
+            
+          params:
+            oam2_mgt_ip: {get_param: [eca_oam_ips, 1] }
+            oam2_hostname: {get_param: [eca_names, 1]}
+            swift_url: {get_param: swift_eca_url}
+            oam_gateway: {get_param: eca_oam_gateway }
+
+  oam2_mgmt_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [eca_oam_ips, 1]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  oam2_int_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: eca_mgmt_net_name}
+      fixed_ips: [{"ip_address": {get_param: [eca_eca_mgmt_ips, 1]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  oam2_volume:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: oam_volume_size}
+      volume_type: {get_param: ECA_OAM_volume_type}
+
+  oam2_volume_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: {get_resource: oam2_volume}
+      instance_uuid: {get_resource: oam2_instance}
+
+  arb_instance:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: [arb_names, 0]}
+      image: {get_param: oam_image_name}
+      flavor: {get_param: arbiter_flavor}
+      availability_zone: {get_param: availability_zone_0}
+      networks:
+        - port: {get_resource: arb_int_port}
+        - port: {get_resource: arb_mgmt_port}
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            sed -i s/HOSTNAME.*/"HOSTNAME=arb_hostname"/g /etc/sysconfig/network
+            eth1_ip_address='arb_mgt_ip'
+            eth1_gateway='oam_gateway'
+            for interface in $(ip addr show|perl -nle 's/\d:\s([a-z0-9]*?):/print $1/e') ; do
+              if [ "$interface" != "lo" ]; then
+                DEVICE_NAME=$interface
+                interface_ip_var="${DEVICE_NAME}_ip_address"
+                gateway_var="${DEVICE_NAME}_gateway"
+                var_name="$interface_ip_var"
+                var_gateway="$gateway_var"
+                if [ ! -z ${!var_name} ]; then
+                  IPADDR=${!var_name}
+                  BOOTPROTO="static"
+                  GATEWAY=${!var_gateway}
+                  IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes\nUSERCTL=no"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=$BOOTPROTO"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nIPADDR=$IPADDR"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nNETMASK=255.255.255.0"
+                  IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nGATEWAY=$GATEWAY"
+                  printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                else
+                  if [ ! -f /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME ]; then
+                    echo "Configuring $DEVICE_NAME to use DHCP"
+                    IFCFG_TEMPLATE="DEVICE=$DEVICE_NAME\nNM_CONTROLLED=no\nONBOOT=yes"
+                    IFCFG_TEMPLATE="$IFCFG_TEMPLATE\nBOOTPROTO=dhcp\nUSERCTL=no"
+                    printf $IFCFG_TEMPLATE > /etc/sysconfig/network-scripts/ifcfg-$DEVICE_NAME
+                  fi
+                fi
+                ifdown $DEVICE_NAME
+                ifup $DEVICE_NAME
+                printf "$DEVICE_NAME\n" >> /tmp/network_config
+              fi
+            done
+            curl swift_url/etc/puppet/manifests/roles/oam_arbiter.pp > /etc/puppet/manifests/roles/oam_arbiter.pp
+            curl swift_url/etc/puppet/files/global/config.yaml > /etc/puppet/files/global/config.yaml
+            curl swift_url/etc/puppet/files/global/11-customer.conf > /etc/puppet/files/global/11-customer.conf
+            van-role oam_arbiter > /root/startup-van-role.out
+            curl swift_url/scripts/fdisk-keystrokes > /root/fdisk-keystrokes 
+            fdisk /dev/vdb < /root/fdisk-keystrokes 
+            curl swift_url/scripts/os-conf-cinder-vol > /root/os-conf-cinder-vol
+            chmod 755 /root/os-conf-cinder-vol
+            /root/os-conf-cinder-vol 2>> /tmp/cinder_volume.log
+          params:
+            arb_mgt_ip: {get_param: [arb_oam_ips, 0] }
+            arb_hostname: {get_param: [arb_names, 0]}
+            swift_url: {get_param: swift_eca_url}
+            oam_gateway: {get_param: eca_oam_gateway }
+
+  arb_mgmt_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [arb_oam_ips, 0]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  arb_int_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: eca_mgmt_net_name}
+      fixed_ips: [{"ip_address": {get_param: [arb_eca_mgmt_ips, 0]}}]
+      security_groups: [{get_param: security_group_name}]
+      replacement_policy: AUTO
+
+  arb_volume:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: arb_volume_size}
+      volume_type: {get_param: ARB_volume_type}
+  arb_volume_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: {get_resource: arb_volume}
+      instance_uuid: {get_resource: arb_instance}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/sg_eca_mgmt.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/sg_eca_mgmt.env
new file mode 100644
index 0000000..8012063
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/invalidTypes/sg_eca_mgmt.env
@@ -0,0 +1,7 @@
+parameters:
+  eca_mgmt_name: int_eca_mgmt_net_1
+  eca_mgmt_cidr: 172.25.137.192/26
+  eca_mgmt_netmask: 255.255.255.192
+  eca_mgmt_start: 172.25.137.195
+  eca_mgmt_end: 172.25.137.254
+  security_group_name: mmsc_security_group_1 
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload/MANIFEST.json b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload/MANIFEST.json
new file mode 100644
index 0000000..2ff7eec
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload/MANIFEST.json
@@ -0,0 +1,20 @@
+{
+  "name": "vMME_Small",
+  "description": "HOT template to create vmme 2 fsb 2 ncb 2 gbp 2 vlc",
+  "version": "2013-05-23",
+  "data": [
+    {
+      "file": "vmme_small_create_fsb.yml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "vmme_small_create_fsb.env",
+          "type": "HEAT_ENV"
+        }
+      ]
+    },{
+      "file": "create_stack.sh",
+      "type": "SHELL"
+    }
+  ]
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload/create_stack.sh b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload/create_stack.sh
new file mode 100644
index 0000000..186d1c3
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload/create_stack.sh
@@ -0,0 +1 @@
+heat stack-create vMME -e vmme_small.env -f vmme_small.yml
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload/vmme_small_create_fsb.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload/vmme_small_create_fsb.env
new file mode 100644
index 0000000..750bb2d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload/vmme_small_create_fsb.env
@@ -0,0 +1,8 @@
+parameters:
+  volume_type: Gold
+  volume_size: 320
+  FSB_1_image: MME_FSB1_15B-CP04-r5a01 
+  FSB_2_image: MME_FSB2_15B-CP04-r5a01
+  FSB1_volume_name: vFSB1_1_Vol_1
+  FSB2_volume_name: vFSB2_1_Vol_1
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload/vmme_small_create_fsb.yml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload/vmme_small_create_fsb.yml
new file mode 100644
index 0000000..2d695a5
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload/vmme_small_create_fsb.yml
@@ -0,0 +1,54 @@
+heat_template_version:  2013-05-23
+
+description: server template for vMME
+
+parameters:
+
+      volume_type:
+        type: string
+        label:  volume type
+        description: volume type Gold
+
+      volume_size:
+        type: number
+        label:  volume size
+        description: my volume size 320GB
+
+      FSB_1_image:
+        type: string
+        label: MME_FSB1
+        description: MME_FSB1_15B-CP04-r5a01
+
+      FSB_2_image:
+        type: string
+        label: MME_FSB2
+        description: MME_FSB2_15B-CP04-r5a01
+
+      FSB1_volume_name:
+        type: string
+        label: FSB1_volume
+        description: FSB1_volume_1
+
+      FSB2_volume_name:
+        type: string
+        label: FSB2_volume
+        description: FSB2_volume_1
+
+resources:
+
+    FSB1_volume:
+      type: OS::Cinder::Volume
+      properties:
+        size: {get_param: volume_size}
+        volume_type: {get_param: volume_type}
+        name: {get_param: FSB1_volume_name}
+        image: {get_param: FSB_1_image}
+
+    FSB2_volume:
+      type: OS::Cinder::Volume
+      properties:
+        size: {get_param: volume_size}
+        volume_type: {get_param: volume_type}
+        name: {get_param: FSB2_volume_name}
+        image: {get_param: FSB_2_image}
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/MANIFEST.json b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/MANIFEST.json
new file mode 100644
index 0000000..02733a6
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/MANIFEST.json
@@ -0,0 +1,29 @@
+{
+  "name": "vMME_Small",
+  "description": "HOT template to create vmme 2 fsb 2 ncb 2 gbp 2 vlc",
+  "version": "2013-05-23",
+  "data": [
+    {
+      "file": "vmme_small.yml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "vmme_small.env",
+          "type": "HEAT_ENV"
+        },{
+          "file": "vmme_small_create_fsb.yml",
+          "type": "HEAT_NET",
+          "data":[
+            {
+              "file": "vmme_small_create_fsb.env",
+              "type": "HEAT_ENV"
+            }
+          ]
+        }
+      ]
+    },{
+      "file": "create_stack.sh",
+      "type": "SHELL"
+    }
+  ]
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/create_stack.sh b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/create_stack.sh
new file mode 100644
index 0000000..186d1c3
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/create_stack.sh
@@ -0,0 +1 @@
+heat stack-create vMME -e vmme_small.env -f vmme_small.yml
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/vmme_small.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/vmme_small.env
new file mode 100644
index 0000000..e46cfd2
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/vmme_small.env
@@ -0,0 +1,97 @@
+parameters:
+  oam_net_id: 47bf4cca-0961-422f-bcd6-d5a4fbb1a351
+  fsb1-name: ZRDM1MMEX33FSB001
+  fsb2-name: ZRDM1MMEX33FSB002
+  ncb1-name: ZRDM1MMEX33NCB001
+  ncb2-name: ZRDM1MMEX33NCB002
+  vlc1-name: ZRDM1MMEX33VLC002
+  vlc2-name: ZRDM1MMEX33VLC002
+  gpb1-name: ZRDM1MMEX33GPB001
+  gpb2-name: ZRDM1MMEX33GPB002
+  epc-sctp-a-net-name: EPC-SCTP-A
+  epc-sctp-a-net-rt: 13979:105717
+  epc-sctp-a-net-cidr: 107.243.37.0/27
+  epc-sctp-a-net-gateway: 107.243.37.1
+  epc-sctp-a-pool-start: 107.243.37.3
+  epc-sctp-a-pool-end: 107.243.37.30
+  epc-sctp-b-net-name: EPC-SCTP-B
+  epc-sctp-b-net-rt: 13979:105719
+  epc-sctp-b-net-cidr: 107.243.37.32/24
+  epc-sctp-b-net-gateway: 107.243.37.33
+  epc-sctp-b-pool-start: 107.243.37.35
+  epc-sctp-b-pool-end: 107.243.37.62
+  epc-gtp-net-name: EPC-GTP
+  epc-gtp-net-rt: 13979:105715
+  epc-gtp-net-cidr:  107.243.37.64/27
+  epc-gtp-net-gateway:  107.243.37.65
+  epc-gtp-pool-start: 107.243.37.67
+  epc-gtp-pool-end: 107.243.37.94
+  fsb1-image: MME_FSB1_15B-CP04-r5a01
+  fsb2-image: MME_FSB2_15B-CP04-r5a01
+  fsb1-flavor: m4.xlarge4
+  fsb2-flavor: m4.xlarge4
+  fsb_zone:  nova
+  fsb1-Internal1-mac: 00:80:37:0E:0B:12
+  fsb1-Internal2-mac: 00:81:37:0E:0B:12
+  fsb1-oam-ip: 107.250.172.221 
+  fsb2-Internal1-mac: 00:80:37:0E:0D:12
+  fsb2-Internal2-mac: 00:81:37:0E:0D:12
+  fsb2-oam-ip: 107.250.172.222 
+  pxe-image:  MME_PXE-BOOT_cxp9025898_2r5a01.qcow2
+  ncb-flavor: m4.xlarge4
+  ncb_zone:  nova
+  ncb1-Internal1-mac: 00:80:37:0E:09:12
+  ncb1-Internal2-mac: 00:81:37:0E:09:12
+  ncb2-Internal1-mac: 00:80:37:0E:0F:12
+  ncb2-Internal2-mac: 00:81:37:0E:0F:12
+  gpb-flavor: m4.xlarge4
+  gpb_zone:  nova
+  gpb1-Internal1-mac: 00:80:37:0E:01:22
+  gpb1-Internal1-ip: 169.254.0.101
+  gpb1-Internal2-mac: 00:81:37:0E:01:22
+  gpb2-Internal1-mac: 00:80:37:0E:02:22
+  gpb2-Internal2-mac: 00:81:37:0E:02:22
+  vlc-flavor: m4.xlarge4
+  vlc_zone:  nova
+  vlc1-sctp-a-ip: 107.243.37.3
+  vlc1-sctp-b-ip: 107.243.37.35
+  vlc1-gtp-ip: 107.243.37.67
+  vlc1-oam-ip: 107.250.172.227 
+  vlc2-sctp-a-ip: 107.243.37.4
+  vlc2-sctp-b-ip: 107.243.37.36
+  vlc2-gtp-ip: 107.243.37.68
+  vlc2-oam-ip: 107.250.172.228
+  vlc1-Internal1-mac: 00:80:37:0E:01:12
+  vlc1-Internal2-mac: 00:81:37:0E:01:12
+  vlc2-Internal1-mac: 00:80:37:0E:02:12
+  vlc2-Internal2-mac: 00:81:37:0E:02:12
+  Internal1_net_name: vmme_int_int_1
+  Internal1_subnet_name: vmme_int_int_sub_1
+  Internal1_ipam_name: vmme_ipam_int1
+  Internal1_cidr: 169.253.0.0/17
+  Internal1_forwarding_mode: "l2"
+  Internal1_dhcp: "False"
+  Internal1_shared: "False"
+  Internal1_external: "False"
+  Internal1_name: "Internal1-subnet"
+  Internal1_default_gateway: 169.253.0.3
+  Internal1_net_pool_start: 169.253.0.100
+  Internal1_net_pool_end: 169.253.0.254
+  Internal2_net_name: vmme_int_int_2
+  Internal2_subnet_name: vmme_int_int_sub_2
+  Internal2_ipam_name: vmme_ipam_int2
+  Internal2_cidr: 169.255.0.0/17
+  Internal2_shared: "False"
+  Internal2_external: "False"
+  Internal2_forwarding_mode: "l2"
+  Internal2_dhcp: "False"
+  Internal2_name: "Internal2-subnet"
+  Internal2_default_gateway: 169.255.0.3
+  Internal2_net_pool_start: 169.255.0.100
+  Internal2_net_pool_end: 169.255.0.254
+  static_prefix_sctp_a_1: 107.239.40.32/30
+  static_prefix_gtp_1: 107.239.40.96/30
+  static_prefix_sctp_b_1: 107.239.40.64/30
+  VMME_FSB1_boot_volume: 8248e794-6173-4b49-b9c3-8219b0b56f4e
+  VMME_FSB2_boot_volume: 089a0d11-4b15-4370-8343-3f90907b1221
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/vmme_small.yml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/vmme_small.yml
new file mode 100644
index 0000000..ab76c1c
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/vmme_small.yml
@@ -0,0 +1,661 @@
+heat_template_version: 2013-05-23
+
+description: >
+  HOT template to create vmme 2 fsb 2 ncb 2 gbp 2 vlc
+
+parameters:
+  fsb1-oam-ip:
+    type: string
+  fsb2-oam-ip:
+    type: string
+  vlc1-oam-ip:
+    type: string
+  vlc2-oam-ip:
+    type: string
+  Internal1_net_pool_start:
+    type: string
+  Internal1_net_pool_end:
+    type: string
+  Internal2_net_pool_start:
+    type: string
+  Internal2_net_pool_end:
+    type: string
+  Internal1_default_gateway:
+    type: string
+  Internal2_default_gateway:
+    type: string
+  Internal1_shared:
+    type: string
+  Internal1_external:
+    type: string
+  Internal1_net_name:
+    type: string
+  Internal1_subnet_name:
+    type: string
+  Internal1_ipam_name:
+    type: string
+  Internal1_cidr:
+    type: string
+  Internal1_forwarding_mode:
+    type: string
+  Internal1_dhcp:
+    type: string
+  Internal1_name:
+    type: string
+  Internal2_net_name:
+    type: string
+  Internal2_subnet_name:
+    type: string
+  Internal2_ipam_name:
+    type: string
+  Internal2_cidr:
+    type: string
+  Internal2_forwarding_mode:
+    type: string
+  Internal2_dhcp:
+    type: string
+  Internal2_name:
+    type: string
+  Internal2_shared:
+    type: string
+  Internal2_external:
+    type: string
+  vlc1-sctp-a-ip:
+    type: string
+  vlc1-sctp-b-ip:
+    type: string
+  vlc1-gtp-ip:
+    type: string
+  vlc2-sctp-a-ip:
+    type: string
+  vlc2-sctp-b-ip:
+    type: string
+  vlc2-gtp-ip:
+    type: string
+  fsb1-name:
+    type: string
+    description: Name of fsb1
+  fsb2-name:
+    type: string
+    description: Name of fsb1
+  ncb1-name:
+    type: string
+    description: Name of ncb1
+  ncb2-name:
+    type: string
+    description: Name of ncb2
+  vlc1-name:
+    type: string
+    description: Name of vlc1
+  vlc2-name:
+    type: string
+    description: Name of vlc2
+  gpb1-name:
+    type: string
+    description: Name of gpb1
+  gpb2-name:
+    type: string
+    description: Name of gpb2
+  fsb_zone:
+    type: string
+    description: cluster for spawnning fsb instances
+  fsb1-image:
+    type: string
+    description: Name of image to use for server fsb1
+  fsb1-flavor:
+    type: string
+    description: Flavor to use for servers  fsb1
+  oam_net_id:
+    type: string
+    description: uuid of oam network
+  fsb1-Internal1-mac:
+    type: string
+    description: static mac address assigned to fsb1-Internal1
+  fsb1-Internal2-mac:
+    type: string
+    description: static mac address assigned to fsb1-Internal2
+  fsb2-image:
+    type: string
+    description: Name of image to use for server fsb2
+  fsb2-flavor:
+    type: string
+    description: Flavor to use for servers  fsb2
+  fsb2-Internal1-mac:
+    type: string
+    description: static mac address assigned to fsb2-Internal1
+  fsb2-Internal2-mac:
+    type: string
+    description: static mac address assigned to fsb2-Internal2
+  pxe-image:
+    type: string
+    description: Name of image to use for server ncb
+  ncb-flavor:
+    type: string
+    description: Flavor to use for servers ncb
+  ncb_zone:
+    type: string
+    description: cluster for spawnning ncb instances
+  ncb1-Internal1-mac:
+    type: string
+    description: static mac address assigned to ncb1-Internal1
+  ncb1-Internal2-mac:
+    type: string
+    description: static mac address assigned to ncb1-Internal2
+  ncb2-Internal1-mac:
+    type: string
+    description: static mac address assigned to ncb2-Internal1
+  ncb2-Internal2-mac:
+    type: string
+    description: static mac address assigned to ncb2-Internal2
+  gpb-flavor:
+    type: string
+    description: Flavor to use for servers gpb
+  gpb_zone:
+    type: string
+    description: cluster for spawnning gpb instances
+  gpb1-Internal1-ip:
+    type: string
+  gpb1-Internal1-mac:
+    type: string
+    description: static mac address assigned to gpb1-Internal1
+  gpb1-Internal2-mac:
+    type: string
+    description: static mac address assigned to gpb1-Internal2
+  gpb2-Internal1-mac:
+    type: string
+    description: static mac address assigned to gpb2-Internal1
+  gpb2-Internal2-mac:
+    type: string
+    description: static mac address assigned to gpb2-Internal2
+  vlc-flavor:
+    type: string
+    description: Flavor to use for servers vlc
+  vlc_zone:
+    type: string
+    description: cluster for spawnning vlc instances
+  vlc1-Internal1-mac:
+    type: string
+    description: static mac address assigned to vlc1-Internal1
+  vlc1-Internal2-mac:
+    type: string
+    description: static mac address assigned to vlc1-Internal2
+  vlc2-Internal1-mac:
+    type: string
+    description: static mac address assigned to vlc2-Internal1
+  vlc2-Internal2-mac:
+    type: string
+    description: static mac address assigned to vlc2-Internal2
+  epc-sctp-a-net-name:
+    type: string
+    description: epc-sctp-a net name
+  epc-sctp-a-net-rt:
+    type: string
+    description: epc-sctp-a route target
+  epc-sctp-a-net-cidr:
+    type: string
+    description: epc-sctp-a subnet
+  epc-sctp-a-net-gateway:
+    type: string
+    description: epc-sctp-a-net network gateway
+  epc-sctp-a-pool-start:
+    type: string
+    description: epc-sctp-a-net network ip pool start IP address
+  epc-sctp-a-pool-end:
+    type: string
+    description: epc-sctp-a-net network ip pool end IP address
+  epc-sctp-b-net-name:
+    type: string
+    description: epc-sctp-b net name
+  epc-sctp-b-net-rt:
+    type: string
+    description: epc-sctp-b route target
+  epc-sctp-b-net-cidr:
+    type: string
+    description: epc-sctp-b subnet
+  epc-sctp-b-net-gateway:
+    type: string
+    description: epc-sctp-b-net network gateway
+  epc-sctp-b-pool-start:
+    type: string
+    description: epc-sctp-b-net network ip pool start IP address
+  epc-sctp-b-pool-end:
+    type: string
+    description: epc-sctp-b-net network ip pool end IP address
+  epc-gtp-net-name:
+    type: string
+    description:  gtp net name
+  epc-gtp-net-rt:
+    type: string
+    description:  gtp route target
+  epc-gtp-net-cidr:
+    type: string
+    description:  gtp stubnet
+  epc-gtp-net-gateway:
+    type: string
+    description:  gtp network gateway
+  epc-gtp-pool-start:
+    type: string
+    description:  gtp network ip pool start IP address
+  epc-gtp-pool-end:
+    type: string
+    description: gtp network ip pool end IP address
+  static_prefix_sctp_a_1:
+    type: string
+    description: Static Prefix
+  static_prefix_sctp_b_1:
+    type: string
+    description: Static Prefix
+  static_prefix_gtp_1:
+    type: string
+    description: Static Prefix
+  VMME_FSB1_boot_volume:
+    type: string
+  VMME_FSB2_boot_volume:
+    type: string 
+
+resources:
+  Internal1_ipam:
+    type: OS::Contrail::NetworkIpam
+    properties:
+      name: { get_param: Internal1_ipam_name }
+
+  Internal2_ipam:
+    type: OS::Contrail::NetworkIpam
+    properties:
+      name: { get_param: Internal2_ipam_name }
+
+  Internal1-net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: Internal1_net_name }
+      template: { get_file: create_stack.sh }
+      forwarding_mode: { get_param: Internal1_forwarding_mode }
+      shared: { get_param: Internal1_shared }
+      external: true
+#      route_targets: { "Fn::Split" : [ ",", Ref: route_targets ] }
+  testConvertGetParamFunctions:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: Internal1_net_name }
+      forwarding_mode: { get_param: Internal1_forwarding_mode }
+      shared: { get_param: Internal1_shared }
+
+#      route_targets: { "Fn::Split" : [ ",", Ref: route_targets ] }
+  testConvertGetAttributeFunctions:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: Internal1_net_name }
+      forwarding_mode: { get_param: Internal1_forwarding_mode }
+      shared: { get_param: Internal1_shared }
+      external: { get_param: Internal1_external }
+#      route_targets: { "Fn::Split" : [ ",", Ref: route_targets ] }
+
+  Internal1-subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: Internal1-net }
+      cidr: { get_param: Internal1_cidr }
+      gateway_ip: { get_param: Internal1_default_gateway }
+      enable_dhcp: { get_param: Internal1_dhcp }
+
+
+#  Internal1-subnet:
+#    type: OS::Contrail::VnSubnet
+#    properties:
+#      name: { get_param: Internal1_subnet_name  }
+#      network: { get_resource: Internal1-net }
+#      ip_prefix: { get_param: Internal1_cidr }
+ #     ipam: { get_resource: Internal1_ipam }
+ #     enable_dhcp: { get_param: Internal1_dhcp }
+ #     default_gateway: { get_param: Internal1_default_gateway }
+ #     allocation_pools:
+  #      - start: { get_param: Internal1_net_pool_start }
+  #        end: { get_param: Internal1_net_pool_end }
+
+
+
+  Internal2-net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: Internal2_name }
+      forwarding_mode: { get_param: Internal2_forwarding_mode }
+      shared: { get_param: Internal2_shared }
+      external: { get_param: Internal2_external }
+#      route_targets: { "Fn::Split" : [ ",", Ref: route_targets ] }
+
+#  Internal2-subnet:
+#    type: OS::Contrail::VnSubnet
+#    properties:
+#      name: { get_param: Internal2_subnet_name  }
+#      network: { get_resource: Internal2-net }
+#      ip_prefix: { get_param: Internal2_cidr }
+#      ipam: { get_resource: Internal2_ipam }
+#      enable_dhcp: { get_param: Internal2_dhcp }
+#      default_gateway: { get_param: Internal2_default_gateway }
+#      allocation_pools:
+#        - start: { get_param: Internal2_net_pool_start }
+#          end: { get_param: Internal2_net_pool_end }
+
+  Internal2-subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: Internal2-net }
+      cidr: { get_param: Internal2_cidr }
+      gateway_ip: { get_param: Internal2_default_gateway }
+      enable_dhcp: { get_param: Internal2_dhcp }
+
+  epc-sctp-a-net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: epc-sctp-a-net-name }
+      route_targets: [ get_param: epc-sctp-a-net-rt ]
+
+
+  epc-sctp-a-subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: epc-sctp-a-net }
+      cidr: { get_param: epc-sctp-a-net-cidr }
+      gateway_ip: { get_param: epc-sctp-a-net-gateway }
+      allocation_pools:
+        - start: { get_param: epc-sctp-a-pool-start }
+          end: { get_param: epc-sctp-a-pool-end }
+
+  epc-sctp-b-net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: epc-sctp-b-net-name }
+      route_targets: [ get_param: epc-sctp-b-net-rt ]
+
+  epc-sctp-b-subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: epc-sctp-b-net }
+      cidr: { get_param: epc-sctp-b-net-cidr }
+      gateway_ip: { get_param: epc-sctp-b-net-gateway }
+      allocation_pools:
+        - start: { get_param: epc-sctp-b-pool-start }
+          end: { get_param: epc-sctp-b-pool-end }
+
+  epc-gtp-net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: epc-gtp-net-name }
+      route_targets: [ get_param: epc-gtp-net-rt ]
+
+  epc-gtp-subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: epc-gtp-net }
+      cidr: { get_param: epc-gtp-net-cidr }
+      gateway_ip: { get_param: epc-gtp-net-gateway }
+      allocation_pools:
+        - start: { get_param: epc-gtp-pool-start }
+          end: { get_param: epc-gtp-pool-end }
+
+  FSB1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: fsb1-name }
+      block_device_mapping: [{device_name: "vda", volume_id : {get_param: VMME_FSB1_boot_volume }, delete_on_termination: "false" }]
+      flavor: { get_param: fsb1-flavor }
+      availability_zone: { get_param: fsb_zone }
+      networks:
+        - port: { get_resource: FSB1_Internal1 }
+        - port: { get_resource: FSB1_Internal2 }
+        - port: { get_resource: FSB1_OAM }
+
+  FSB1_Internal1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal1-net }
+      mac_address: { get_param: fsb1-Internal1-mac }
+
+  FSB1_Internal2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal2-net }
+      mac_address: { get_param: fsb1-Internal2-mac }
+
+  FSB1_OAM:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_id }
+      fixed_ips:
+        - ip_address: { get_param: fsb1-oam-ip }
+
+  FSB2:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: fsb2-name }
+      block_device_mapping: [{device_name: "vda", volume_id : {get_param: VMME_FSB2_boot_volume }, delete_on_termination: "false" }]
+      flavor: { get_param: fsb2-flavor }
+      availability_zone: { get_param: fsb_zone }
+      networks:
+        - port: { get_resource: FSB2_Internal1 }
+        - port: { get_resource: FSB2_Internal2 }
+        - port: { get_resource: FSB2_OAM }
+
+  FSB2_Internal1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal1-net }
+      mac_address: { get_param: fsb2-Internal1-mac }
+
+
+  FSB2_Internal2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal2-net }
+      mac_address: { get_param: fsb2-Internal2-mac }
+
+  FSB2_OAM:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_id }
+      fixed_ips:
+        - ip_address: { get_param: fsb2-oam-ip }
+
+  NCB1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: ncb1-name }
+      image: { get_param: pxe-image }
+      flavor: { get_param: ncb-flavor }
+      availability_zone: { get_param: ncb_zone }
+      networks:
+        - port: { get_resource: NCB1_Internal1 }
+        - port: { get_resource: NCB1_Internal2 }
+
+  NCB1_Internal1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal1-net }
+      mac_address: { get_param: ncb1-Internal1-mac }
+
+  NCB1_Internal2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal2-net }
+      mac_address: { get_param: ncb1-Internal2-mac }
+
+  NCB2:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: ncb2-name }
+      image: { get_param: pxe-image }
+      flavor: { get_param: ncb-flavor }
+      availability_zone: { get_param: ncb_zone }
+      networks:
+        - port: { get_resource: NCB2_Internal1 }
+        - port: { get_resource: NCB2_Internal2 }
+
+  NCB2_Internal1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal1-net }
+      mac_address: { get_param: ncb2-Internal1-mac }
+
+  NCB2_Internal2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal2-net }
+      mac_address: { get_param: ncb2-Internal2-mac }
+
+  GPB1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: gpb1-name }
+      image: { get_param: pxe-image }
+      flavor: { get_param: gpb-flavor }
+      availability_zone: { get_param: gpb_zone }
+      networks:
+        - port: { get_resource: GPB1_Internal1 }
+        - port: { get_resource: GPB1_Internal2 }
+
+  GPB1_Internal1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal1-net }
+      mac_address: { get_param: gpb1-Internal1-mac }
+
+  GPB1_Internal2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal2-net }
+      mac_address: { get_param: gpb1-Internal2-mac }
+
+  GPB2:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: gpb2-name }
+      image: { get_param: pxe-image }
+      flavor: { get_param: gpb-flavor }
+      availability_zone: { get_param: gpb_zone }
+      networks:
+        - port: { get_resource: GPB2_Internal1 }
+        - port: { get_resource: GPB2_Internal2 }
+
+  GPB2_Internal1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal1-net }
+      mac_address: { get_param: gpb2-Internal1-mac }
+
+  GPB2_Internal2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal2-net }
+      mac_address: { get_param: gpb2-Internal2-mac }
+
+  VLC1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: vlc1-name }
+      image: { get_param: pxe-image }
+      flavor: { get_param: vlc-flavor }
+      availability_zone: { get_param: vlc_zone }
+      networks:
+        - port: { get_resource: VLC1_Internal1 }
+        - port: { get_resource: VLC1_Internal2 }
+        - port: { get_resource: VLC1_OAM }
+        - port: { get_resource: VLC1_SCTP_A }
+        - port: { get_resource: VLC1_SCTP_B }
+        - port: { get_resource: VLC1_GTP }
+
+  VLC1_Internal1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal1-net }
+      mac_address: { get_param: vlc1-Internal1-mac }
+
+  VLC1_Internal2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal2-net }
+      mac_address: { get_param: vlc1-Internal2-mac }
+
+  VLC1_OAM:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_id }
+      fixed_ips:
+        - ip_address: { get_param: vlc1-oam-ip }
+
+  VLC1_SCTP_A:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: epc-sctp-a-net }
+      fixed_ips:
+        - ip_address: { get_param: vlc1-sctp-a-ip }
+
+  VLC1_SCTP_B:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: epc-sctp-b-net }
+      fixed_ips:
+        - ip_address: { get_param: vlc1-sctp-b-ip }
+
+  VLC1_GTP:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: epc-gtp-net }
+      fixed_ips:
+        - ip_address: { get_param: vlc1-gtp-ip }
+
+  VLC2:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: vlc2-name }
+      image: { get_param: pxe-image }
+      flavor: { get_param: vlc-flavor }
+      availability_zone: { get_param: vlc_zone }
+      networks:
+        - port: { get_resource: VLC2_Internal1 }
+        - port: { get_resource: VLC2_Internal2 }
+        - port: { get_resource: VLC2_OAM }
+        - port: { get_resource: VLC2_SCTP_A }
+        - port: { get_resource: VLC2_SCTP_B }
+        - port: { get_resource: VLC2_GTP }
+
+
+  VLC2_Internal1:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal1-net }
+      mac_address: { get_param: vlc2-Internal1-mac }
+
+  VLC2_OAM:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: oam_net_id }
+      fixed_ips:
+        - ip_address: { get_param: vlc2-oam-ip }
+
+  VLC2_Internal2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Internal2-net }
+      mac_address: { get_param: vlc2-Internal2-mac }
+
+  VLC2_SCTP_A:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: epc-sctp-a-net }
+      fixed_ips:
+        - ip_address: { get_param: vlc2-sctp-a-ip }
+
+  VLC2_SCTP_B:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: epc-sctp-b-net }
+      fixed_ips:
+        - ip_address: { get_param: vlc2-sctp-b-ip }
+
+  VLC2_GTP:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: epc-gtp-net }
+      fixed_ips:
+        - ip_address: { get_param: vlc2-gtp-ip }
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/vmme_small_create_fsb.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/vmme_small_create_fsb.env
new file mode 100644
index 0000000..750bb2d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/vmme_small_create_fsb.env
@@ -0,0 +1,8 @@
+parameters:
+  volume_type: Gold
+  volume_size: 320
+  FSB_1_image: MME_FSB1_15B-CP04-r5a01 
+  FSB_2_image: MME_FSB2_15B-CP04-r5a01
+  FSB1_volume_name: vFSB1_1_Vol_1
+  FSB2_volume_name: vFSB2_1_Vol_1
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/vmme_small_create_fsb.yml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/vmme_small_create_fsb.yml
new file mode 100644
index 0000000..2d695a5
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/legalUpload2/vmme_small_create_fsb.yml
@@ -0,0 +1,54 @@
+heat_template_version:  2013-05-23
+
+description: server template for vMME
+
+parameters:
+
+      volume_type:
+        type: string
+        label:  volume type
+        description: volume type Gold
+
+      volume_size:
+        type: number
+        label:  volume size
+        description: my volume size 320GB
+
+      FSB_1_image:
+        type: string
+        label: MME_FSB1
+        description: MME_FSB1_15B-CP04-r5a01
+
+      FSB_2_image:
+        type: string
+        label: MME_FSB2
+        description: MME_FSB2_15B-CP04-r5a01
+
+      FSB1_volume_name:
+        type: string
+        label: FSB1_volume
+        description: FSB1_volume_1
+
+      FSB2_volume_name:
+        type: string
+        label: FSB2_volume
+        description: FSB2_volume_1
+
+resources:
+
+    FSB1_volume:
+      type: OS::Cinder::Volume
+      properties:
+        size: {get_param: volume_size}
+        volume_type: {get_param: volume_type}
+        name: {get_param: FSB1_volume_name}
+        image: {get_param: FSB_1_image}
+
+    FSB2_volume:
+      type: OS::Cinder::Volume
+      properties:
+        size: {get_param: volume_size}
+        volume_type: {get_param: volume_type}
+        name: {get_param: FSB2_volume_name}
+        image: {get_param: FSB_2_image}
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/missingYml/MANIFEST.json b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/missingYml/MANIFEST.json
new file mode 100644
index 0000000..2ff7eec
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/missingYml/MANIFEST.json
@@ -0,0 +1,20 @@
+{
+  "name": "vMME_Small",
+  "description": "HOT template to create vmme 2 fsb 2 ncb 2 gbp 2 vlc",
+  "version": "2013-05-23",
+  "data": [
+    {
+      "file": "vmme_small_create_fsb.yml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "vmme_small_create_fsb.env",
+          "type": "HEAT_ENV"
+        }
+      ]
+    },{
+      "file": "create_stack.sh",
+      "type": "SHELL"
+    }
+  ]
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/missingYml/create_stack.sh b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/missingYml/create_stack.sh
new file mode 100644
index 0000000..186d1c3
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/missingYml/create_stack.sh
@@ -0,0 +1 @@
+heat stack-create vMME -e vmme_small.env -f vmme_small.yml
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/missingYml/vmme_small_create_fsb.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/missingYml/vmme_small_create_fsb.env
new file mode 100644
index 0000000..750bb2d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/missingYml/vmme_small_create_fsb.env
@@ -0,0 +1,8 @@
+parameters:
+  volume_type: Gold
+  volume_size: 320
+  FSB_1_image: MME_FSB1_15B-CP04-r5a01 
+  FSB_2_image: MME_FSB2_15B-CP04-r5a01
+  FSB1_volume_name: vFSB1_1_Vol_1
+  FSB2_volume_name: vFSB2_1_Vol_1
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/HEAT.meta b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/HEAT.meta
new file mode 100644
index 0000000..3981576
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/HEAT.meta
@@ -0,0 +1,215 @@
+{
+  "importStructure": [
+    {
+      "HEAT": [
+        {
+          "fileName": "hot-nimbus-oam_v1.0.yaml",
+          "env": "hot-nimbus-oam_v1.0.env",
+          "volume": [
+            {
+              "fileName": "hot-nimbus-oam-volumes_v1.0.yaml",
+              "env": "hot-nimbus-oam-volumes_v1.0.env"
+            }
+          ],
+          "nested": [
+            {
+              "fileName": "nested-oam_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-oam_v1.0.yaml"
+            }
+          ],
+          "artifacts": [
+            {
+              "name": "mount_iso_script.sh",
+              "status": "OK"
+            },
+            {
+              "name": "cloud-nimbus.sh",
+              "status": "OK"
+            },
+            {
+              "name": "nimbus-ethernet",
+              "status": "OK"
+            },
+            {
+              "name": "nimbus-ethernet-gw",
+              "status": "OK"
+            }
+          ]
+        },
+        {
+          "fileName": "hot-nimbus-pps_v1.0.yaml",
+          "env": "hot-nimbus-pps_v1.0.env",
+          "nested": [
+            {
+              "fileName": "nested-pps_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-pps_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-pps_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-pps_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-pps_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-pps_v1.0.yaml"
+            }
+          ],
+          "artifacts": [
+            {
+              "name": "mount_iso_script.sh",
+              "status": "OK"
+            },
+            {
+              "name": "cloud-nimbus.sh",
+              "status": "OK"
+            },
+            {
+              "name": "nimbus-ethernet",
+              "status": "OK"
+            },
+            {
+              "name": "nimbus-ethernet-gw",
+              "status": "OK"
+            }
+          ]
+        },
+        {
+          "fileName": "hot-nimbus-psm_v1.0.yaml",
+          "env": "hot-nimbus-psm_v1.0.env",
+          "nested": [
+            {
+              "fileName": "nested-psm_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-psm_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-psm_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-psm_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-psm_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-psm_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-psm_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-psm_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-psm_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-psm_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-psm_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-psm_v1.0.yaml"
+            }
+          ],
+          "artifacts": [
+            {
+              "name": "mount_iso_script.sh",
+              "status": "OK"
+            },
+            {
+              "name": "cloud-nimbus.sh",
+              "status": "OK"
+            },
+            {
+              "name": "nimbus-ethernet",
+              "status": "OK"
+            },
+            {
+              "name": "nimbus-ethernet-gw",
+              "status": "OK"
+            }
+          ]
+        },
+        {
+          "fileName": "hot-nimbus-ppd_v1.0.yaml",
+          "env": "hot-nimbus-ppd_v1.1.env",
+          "nested": [
+            {
+              "fileName": "nested-ppd_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-ppd_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-ppd_v1.0.yaml"
+            },
+            {
+              "fileName": "nested-ppd_v1.0.yaml"
+            }
+          ],
+          "artifacts": [
+            {
+              "name": "mount_iso_script.sh",
+              "status": "OK"
+            },
+            {
+              "name": "cloud-nimbus.sh",
+              "status": "OK"
+            },
+            {
+              "name": "nimbus-ethernet",
+              "status": "OK"
+            },
+            {
+              "name": "nimbus-ethernet-gw",
+              "status": "OK"
+            }
+          ]
+        },
+        {
+          "fileName": "hot-nimbus-pcm_v1.0.yaml",
+          "env": "hot-nimbus-pcm_v1.0.env",
+          "volume": [
+            {
+              "fileName": "hot-nimbus-pcm-volumes_v1.0.yaml",
+              "env": "hot-nimbus-pcm-volumes_v1.0.env"
+            }
+          ],
+          "nested": [
+            {
+              "fileName": "nested-pcm_v1.0.yaml"
+            }
+          ],
+          "artifacts": [
+            {
+              "name": "mount_iso_script.sh",
+              "status": "OK"
+            },
+            {
+              "name": "cloud-nimbus.sh",
+              "status": "OK"
+            },
+            {
+              "name": "nimbus-ethernet",
+              "status": "OK"
+            },
+            {
+              "name": "nimbus-ethernet-gw",
+              "status": "OK"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/MANIFEST.json b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/MANIFEST.json
new file mode 100644
index 0000000..d85265d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/MANIFEST.json
@@ -0,0 +1,113 @@
+{
+  "name": "hot-mog",
+  "description": "HOT template to create hot mog server",
+  "version": "2013-05-23",
+  "data": [
+    {
+      "file": "hot-nimbus-oam_v1.0.yaml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "hot-nimbus-oam_v1.0.env",
+          "type": "HEAT_ENV"
+        },
+        {
+          "file": "hot-nimbus-oam-volumes_v1.0.yaml",
+          "type": "HEAT_VOL",
+          "data": [
+            {
+              "file": "hot-nimbus-oam-volumes_v1.0.env",
+              "type": "HEAT_ENV"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "file": "hot-nimbus-pcm_v1.0.yaml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "hot-nimbus-pcm_v1.0.env",
+          "type": "HEAT_ENV"
+        },
+        {
+          "file": "hot-nimbus-pcm-volumes_v1.0.yaml",
+          "type": "HEAT_VOL",
+          "data": [
+            {
+              "file": "hot-nimbus-pcm-volumes_v1.0.env",
+              "type": "HEAT_ENV"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "file": "hot-nimbus-ppd_v1.0.yaml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "hot-nimbus-ppd_v1.1.env",
+          "type": "HEAT_ENV"
+        }
+      ]
+    },
+    {
+      "file": "hot-nimbus-pps_v1.0.yaml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "hot-nimbus-pps_v1.0.env",
+          "type": "HEAT_ENV"
+        }
+      ]
+    },
+    {
+      "file": "hot-nimbus-psm_v1.0.yaml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "hot-nimbus-psm_v1.0.env",
+          "type": "HEAT_ENV"
+        }
+      ]
+    },
+    {
+      "file": "nested-oam_v1.0.yaml",
+      "type": "HEAT"
+    },
+    {
+      "file": "nested-pcm_v1.0.yaml",
+      "type": "HEAT"
+    },
+    {
+      "file": "nested-ppd_v1.0.yaml",
+      "type": "HEAT"
+    },
+    {
+      "file": "nested-pps_v1.0.yaml",
+      "type": "HEAT"
+    },
+    {
+      "file": "nested-psm_v1.0.yaml",
+      "type": "HEAT"
+    },
+    {
+      "file": "mount_iso_script.sh",
+      "type": "SHELL"
+    },
+    {
+      "file": "cloud-nimbus.sh",
+      "type": "SHELL"
+    },
+    {
+      "file": "nimbus-ethernet",
+      "type": "OTHER"
+    },
+    {
+      "file": "nimbus-ethernet-gw",
+      "type": "OTHER"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/cloud-nimbus.sh b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/cloud-nimbus.sh
new file mode 100644
index 0000000..8e5a486
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/cloud-nimbus.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+echo "Running first-boot script"
+FLAG="first-boot.sh"
+echo "First boot run" > ${FLAG}
+echo "$vm_name" >> ${FLAG}
+touch /var/lib/cloud/instance/payload/launch-params
+chmod 644 /var/lib/cloud/instance/payload/launch-params
+#for i in $(ls /sys/class/net); do
+#  echo "Restart $i" >> ${FLAG}
+#  ifdown ${i}
+#  ifup ${i}
+#done
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-oam-volumes_v1.0.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-oam-volumes_v1.0.env
new file mode 100644
index 0000000..b494d8c
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-oam-volumes_v1.0.env
@@ -0,0 +1,6 @@
+parameters:
+  pcrf_oam_vol_size: 500
+  pcrf_oam_volume_silver-1: Silver
+  pcrf_oam_volume_silver-2: Silver
+  pcrf_oam_vol_name_1: sde1-pcrfx01-oam001-vol-1
+  pcrf_oam_vol_name_2: sde1-pcrfx01-oam001-vol-2
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-oam-volumes_v1.0.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-oam-volumes_v1.0.yaml
new file mode 100644
index 0000000..9e12054
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-oam-volumes_v1.0.yaml
@@ -0,0 +1,45 @@
+heat_template_version:  2013-05-23
+
+parameters:
+    pcrf_oam_vol_size:
+     type: number
+     label: Cinder volume size
+     description: the size of the Cinder volume
+    pcrf_oam_vol_name_1:
+     type: string
+     label: OAM volume name 1
+     description: Assigning name to volume
+    pcrf_oam_vol_name_2:
+     type: string
+     label: OAM volume name 2
+     description: Assigning name to volume
+    pcrf_oam_volume_silver-1:
+     type: string
+     label: vm volume type
+     description: the name of the target volume backend for OAM1
+    pcrf_oam_volume_silver-2:
+     type: string
+     label: vm volume type
+     description: the name of the target volume backend for OAM2
+
+resources:
+  pcrf_oam_volume_1:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: pcrf_oam_vol_size}
+      volume_type: {get_param: pcrf_oam_volume_silver-1}
+      name: {get_param: pcrf_oam_vol_name_1}
+
+  pcrf_oam_volume_2:
+    type: OS::Cinder::Volume
+    properties:
+      size: {get_param: pcrf_oam_vol_size}
+      volume_type: {get_param: pcrf_oam_volume_silver-2}
+      name: {get_param: pcrf_oam_vol_name_2}
+outputs:
+  pcrf_oam_volume_id_1:
+    description: the oam 001 volume id
+    value: { get_resource: pcrf_oam_volume_1 }
+  pcrf_oam_volume_id_2:
+    description: the oam 002 volume id
+    value: { get_resource: pcrf_oam_volume_2 }
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-oam_v1.0.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-oam_v1.0.env
new file mode 100644
index 0000000..138feb5
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-oam_v1.0.env
@@ -0,0 +1,18 @@
+parameters:
+  pcrf_oam_server_names: ZRDM1PCRF01OAM001,ZRDM1PCRF01OAM002
+  pcrf_oam_image_name: PCRF_8.995-ATTM1.0.3.qcow2
+  pcrf_oam_flavor_name: lc.4xlarge4
+  availabilityzone_name: nova
+  pcrf_cps_net_name: Mobisupport-25193-I-INT1_int_pcrf_net_0
+  pcrf_cps_net_ips: 172.26.16.111,172.26.16.112
+  pcrf_arbiter_vip: 172.26.16.115
+  pcrf_cps_net_mask: 255.255.255.0
+  pcrf_oam_net_name: MNS-25180-L-01_oam_protected_net_0
+  pcrf_oam_net_ips: 107.239.64.117,107.239.64.118
+  pcrf_oam_net_gw: 107.239.64.1
+  pcrf_oam_net_mask: 255.255.248.0
+  pcrf_oam_volume_id_1: a4aa05fb-fcdc-457b-8077-6845fdfc3257
+  pcrf_oam_volume_id_2: 93d8fc1f-f1c3-4933-86b2-039881ee910f
+  pcrf_security_group_name: nimbus_security_group
+  pcrf_vnf_id: 730797234b4a40aa99335157b02871cd
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-oam_v1.0.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-oam_v1.0.yaml
new file mode 100644
index 0000000..2aa1235
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-oam_v1.0.yaml
@@ -0,0 +1,109 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates multiple PCRF OAM nodes stack
+
+parameters:
+  pcrf_oam_server_names:
+    type: comma_delimited_list
+    label: PCRF OAM server names
+    description: name of the PCRF OAM instance
+  pcrf_oam_image_name:
+    type: string
+    label: PCRF OAM image name
+    description: PCRF OAM image name
+  pcrf_oam_flavor_name:
+    type: string
+    label: PCRF OAM flavor name
+    description: flavor name of PCRF OAM instance
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ips:
+    type: comma_delimited_list
+    label: CPS network ips
+    description: CPS network ips
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_arbiter_vip:
+    type: string
+    label: OAM Arbiter LB VIP
+    description: OAM Arbiter LB VIP
+  pcrf_oam_net_name:
+    type: string
+    label: OAM network name
+    description: OAM network name
+  pcrf_oam_net_ips:
+    type: comma_delimited_list
+    label: OAM network ips
+    description: OAM network ips
+  pcrf_oam_net_gw:
+    type: string
+    label: CPS network gateway
+    description: CPS network gateway
+  pcrf_oam_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_oam_volume_id_1:
+    type: string
+    label: CPS OAM 001 Cinder Volume
+    description: CPS OAM 001 Cinder Volumes
+  pcrf_oam_volume_id_2:
+    type: string
+    label: CPS OAM 002 Cinder Volume
+    description: CPS OAM 002 Cinder Volumes
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+
+resources:
+  server_pcrf_oam_001:
+    type: nested-oam_v1.0.yaml
+    properties:
+      pcrf_oam_server_name: { get_param: [pcrf_oam_server_names, 0] }
+      pcrf_oam_image_name: { get_param: pcrf_oam_image_name }
+      pcrf_oam_flavor_name: { get_param: pcrf_oam_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_oam_volume_id: { get_param: pcrf_oam_volume_id_1 }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 0] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_oam_net_name: { get_param: pcrf_oam_net_name }
+      pcrf_oam_net_ip: { get_param: [pcrf_oam_net_ips, 0] }
+      pcrf_oam_net_mask: { get_param: pcrf_oam_net_mask }
+      pcrf_oam_net_gw: { get_param: pcrf_oam_net_gw }
+      pcrf_arbiter_vip: { get_param: pcrf_arbiter_vip }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_oam_002:
+    type: nested-oam_v1.0.yaml
+    depends_on: [server_pcrf_oam_001]
+    properties:
+      pcrf_oam_server_name: { get_param: [pcrf_oam_server_names, 1] }
+      pcrf_oam_image_name: { get_param: pcrf_oam_image_name }
+      pcrf_oam_flavor_name: { get_param: pcrf_oam_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_oam_volume_id: { get_param: pcrf_oam_volume_id_2 }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 1] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_oam_net_name: { get_param: pcrf_oam_net_name }
+      pcrf_oam_net_ip: { get_param: [pcrf_oam_net_ips, 1] }
+      pcrf_oam_net_mask: { get_param: pcrf_oam_net_mask }
+      pcrf_oam_net_gw: { get_param: pcrf_oam_net_gw }
+      pcrf_arbiter_vip: { get_param: pcrf_arbiter_vip }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pcm-volumes_v1.0.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pcm-volumes_v1.0.env
new file mode 100644
index 0000000..788365d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pcm-volumes_v1.0.env
@@ -0,0 +1,4 @@
+parameters:
+  pcrf_pcm_vol_size: 50
+  pcrf_pcm_volume_silver: Silver
+  pcrf_pcm_vol_name_1: sde1-pcrfx01-pcm001-vol-1
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pcm-volumes_v1.0.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pcm-volumes_v1.0.yaml
new file mode 100644
index 0000000..bcc3e89
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pcm-volumes_v1.0.yaml
@@ -0,0 +1,28 @@
+heat_template_version:  2013-05-23
+
+parameters:
+   pcrf_pcm_vol_size:
+     type: number
+     label: Cinder volume size
+     description: the size of the Cinder volume
+   pcrf_pcm_vol_name_1:
+     type: string
+     label: PCM volume name
+     description: Assigning name to volume
+   pcrf_pcm_volume_silver:
+     type: string
+     label: vm volume type
+     description: the name of the target volume backend for PCM
+
+resources: 
+  pcrf_pcm_volume_1:
+     type: OS::Cinder::Volume
+     properties:
+      size: { get_param: pcrf_pcm_vol_size }
+      volume_type: { get_param: pcrf_pcm_volume_silver }
+      name: { get_param: pcrf_pcm_vol_name_1 }
+
+outputs:
+  pcrf_pcm_volume_id_1:
+    description: the pcrf_pcm_volume_id
+    value: { get_resource: pcrf_pcm_volume_1 }
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pcm_v1.0.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pcm_v1.0.env
new file mode 100644
index 0000000..82fb510
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pcm_v1.0.env
@@ -0,0 +1,16 @@
+parameters:
+  pcrf_pcm_server_names: ZRDM1PCRF01PCM001
+  pcrf_pcm_image_name: PCRF_8.995-ATTM1.0.3.qcow2
+  pcrf_pcm_flavor_name: lc.2xlarge4
+  availabilityzone_name: nova
+  pcrf_cps_net_name: Mobisupport-25193-I-INT1_int_pcrf_net_0
+  pcrf_cps_net_ips: 172.26.16.113
+  pcrf_cps_net_mask: 255.255.255.0
+  pcrf_oam_net_name: MNS-25180-L-01_oam_protected_net_0
+  pcrf_oam_net_ips: 107.239.64.121
+  pcrf_oam_net_gw: 107.239.64.1
+  pcrf_oam_net_mask: 255.255.248.0
+  pcrf_pcm_volume_id_1: 3438a3fe-1241-4390-80f2-d0b86238c40e
+  pcrf_security_group_name: nimbus_security_group
+  pcrf_vnf_id: 730797234b4a40aa99335157b02871cd
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pcm_v1.0.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pcm_v1.0.yaml
new file mode 100644
index 0000000..2dd7480
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pcm_v1.0.yaml
@@ -0,0 +1,80 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates PCRF Cluman stack
+
+parameters:
+  pcrf_pcm_server_names:
+    type: comma_delimited_list
+    label: PCRF CM server names
+    description: name of the PCRF CM instance
+  pcrf_pcm_image_name:
+    type: string
+    label: PCRF CM image name
+    description: PCRF CM image name
+  pcrf_pcm_flavor_name:
+    type: string
+    label: PCRF CM flavor name
+    description: flavor name of PCRF CM instance
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ips:
+    type: comma_delimited_list
+    label: CPS network ips
+    description: CPS network ips
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_oam_net_name:
+    type: string
+    label: OAM network name
+    description: OAM network name
+  pcrf_oam_net_ips:
+    type: comma_delimited_list
+    label: OAM network ips
+    description: OAM network ips
+  pcrf_oam_net_gw:
+    type: string
+    label: CPS network gateway
+    description: CPS network gateway
+  pcrf_oam_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_pcm_volume_id_1:
+    type: string
+    label: CPS Cluman Cinder Volume
+    description: CPS Cluman Cinder Volume
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+
+resources:
+  server_pcrf_pcm_001:
+    type: nested-pcm_v1.0.yaml
+    properties:
+      pcrf_pcm_server_name: { get_param: [pcrf_pcm_server_names, 0] }
+      pcrf_pcm_image_name: { get_param: pcrf_pcm_image_name }
+      pcrf_pcm_flavor_name: { get_param: pcrf_pcm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_pcm_volume_id: { get_param: pcrf_pcm_volume_id_1 }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 0] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_oam_net_name: { get_param: pcrf_oam_net_name }
+      pcrf_oam_net_ip: { get_param: [pcrf_oam_net_ips, 0] }
+      pcrf_oam_net_mask: { get_param: pcrf_oam_net_mask }
+      pcrf_oam_net_gw: { get_param: pcrf_oam_net_gw }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-ppd_v1.0.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-ppd_v1.0.yaml
new file mode 100644
index 0000000..2fffa0d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-ppd_v1.0.yaml
@@ -0,0 +1,286 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates PCRF Policy Director stack
+
+parameters:
+  pcrf_ppd_server_names:
+    type: comma_delimited_list
+    label: PCRF PD server names
+    description: name of the PCRF PD instance
+  pcrf_ppd_image_name:
+    type: string
+    label: PCRF PD image name
+    description: PCRF PD image name
+  pcrf_ppd_flavor_name:
+    type: string
+    label: PCRF PD flavor name
+    description: flavor name of PCRF PD instance
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ips:
+    type: comma_delimited_list
+    label: CPS network ips
+    description: CPS network ips
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_lb_internal_vip:
+    type: string
+    label: CPS Internal LB VIP
+    description: CPS Internal LB VIP
+  pcrf_oam_net_name:
+    type: string
+    label: OAM network name
+    description: OAM network name
+  pcrf_oam_net_ips:
+    type: comma_delimited_list
+    label: OAM network ips
+    description: OAM network ips
+  pcrf_oam_net_gw:
+    type: string
+    label: CPS network gateway
+    description: CPS network gateway
+  pcrf_oam_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_lb_management_vip:
+    type: string
+    label: CPS OAM LB VIP
+    description: CPS OAM LB VIP
+  pcrf_gx_net_name:
+    type: string
+    label: Gx network name
+    description: Gx network name
+  pcrf_gx_net_ips:
+    type: comma_delimited_list
+    label: Gx network ips
+    description: Gx network ips
+  pcrf_gx_net_mask:
+    type: string
+    label: Gx network mask
+    description: Gx network mask
+  pcrf_sp_net_name:
+    type: string
+    label: Sp network name
+    description: Sp network name
+  pcrf_sp_net_ips:
+    type: comma_delimited_list
+    label: Sp network ips
+    description: Sp network ips
+  pcrf_sp_net_mask:
+    type: string
+    label: Sp network mask
+    description: Sp network mask
+  pcrf_sy_net_name:
+    type: string
+    label: Sy network name
+    description: Sy network name
+  pcrf_sy_net_ips:
+    type: comma_delimited_list
+    label: Sy network ips
+    description: Sy network ips
+  pcrf_sy_net_mask:
+    type: string
+    label: Sy network mask
+    description: Sy network mask
+  pcrf_rx_net_name:
+    type: string
+    label: Rx network name
+    description: Rx network name
+  pcrf_rx_net_ips:
+    type: comma_delimited_list
+    label: Rx network ips
+    description: Rx network ips
+  pcrf_rx_net_mask:
+    type: string
+    label: Rx network mask
+    description: Rx network mask
+  pcrf_sd_net_name:
+    type: string
+    label: Sd network name
+    description: Sd network name
+  pcrf_sd_net_ips:
+    type: comma_delimited_list
+    label: Sd network ips
+    description: Sd network ips
+  pcrf_sd_net_mask:
+    type: string
+    label: Sd network mask
+    description: Sd network mask
+  pcrf_sgi_sy_net_name:
+    type: string
+    label: Sgi Sy network name
+    description: Sgi Sy network name
+  pcrf_sgi_sy_net_ips:
+    type: comma_delimited_list
+    label: Sgi Sy network ips
+    description: Sgi Sy network ips
+  pcrf_sgi_sy_net_mask:
+    type: string
+    label: Sgi Sy network mask
+    description: Sgi Sy network mask
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+
+resources:
+  server_pcrf_ppd_001:
+    type: nested-ppd_v1.0.yaml
+    properties:
+      pcrf_ppd_server_name: { get_param: [pcrf_ppd_server_names, 0] }
+      pcrf_ppd_image_name: { get_param: pcrf_ppd_image_name }
+      pcrf_ppd_flavor_name: { get_param: pcrf_ppd_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 0] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_lb_internal_vip: { get_param: pcrf_lb_internal_vip }
+      pcrf_oam_net_name: { get_param: pcrf_oam_net_name }
+      pcrf_oam_net_ip: { get_param: [pcrf_oam_net_ips, 0] }
+      pcrf_oam_net_mask: { get_param: pcrf_oam_net_mask }
+      pcrf_oam_net_gw: { get_param: pcrf_oam_net_gw }
+      pcrf_lb_management_vip: { get_param: pcrf_lb_management_vip }
+      pcrf_gx_net_name: { get_param: pcrf_gx_net_name }
+      pcrf_gx_net_ip: { get_param: [pcrf_gx_net_ips, 0] }
+      pcrf_gx_net_mask: { get_param: pcrf_gx_net_mask }
+      pcrf_sp_net_name: { get_param: pcrf_sp_net_name }
+      pcrf_sp_net_ip: { get_param: [pcrf_sp_net_ips, 0] }
+      pcrf_sp_net_mask: { get_param: pcrf_sp_net_mask }
+      pcrf_sy_net_name: { get_param: pcrf_sy_net_name }
+      pcrf_sy_net_ip: { get_param: [pcrf_sy_net_ips, 0] }
+      pcrf_sy_net_mask: { get_param: pcrf_sy_net_mask }
+      pcrf_rx_net_name: { get_param: pcrf_rx_net_name }
+      pcrf_rx_net_ip: { get_param: [pcrf_rx_net_ips, 0] }
+      pcrf_rx_net_mask: { get_param: pcrf_rx_net_mask }
+      pcrf_sd_net_name: { get_param: pcrf_sd_net_name }
+      pcrf_sd_net_ip: { get_param: [pcrf_sd_net_ips, 0] }
+      pcrf_sd_net_mask: { get_param: pcrf_sd_net_mask }
+      pcrf_sgi_sy_net_name: { get_param: pcrf_sgi_sy_net_name }
+      pcrf_sgi_sy_net_ip: { get_param: [pcrf_sgi_sy_net_ips, 0] }
+      pcrf_sgi_sy_net_mask: { get_param: pcrf_sgi_sy_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_ppd_002:
+    type: nested-ppd_v1.0.yaml
+    properties:
+      pcrf_ppd_server_name: { get_param: [pcrf_ppd_server_names, 1] }
+      pcrf_ppd_image_name: { get_param: pcrf_ppd_image_name }
+      pcrf_ppd_flavor_name: { get_param: pcrf_ppd_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 1] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_lb_internal_vip: { get_param: pcrf_lb_internal_vip }
+      pcrf_oam_net_name: { get_param: pcrf_oam_net_name }
+      pcrf_oam_net_ip: { get_param: [pcrf_oam_net_ips, 1] }
+      pcrf_oam_net_mask: { get_param: pcrf_oam_net_mask }
+      pcrf_oam_net_gw: { get_param: pcrf_oam_net_gw }
+      pcrf_lb_management_vip: { get_param: pcrf_lb_management_vip }
+      pcrf_gx_net_name: { get_param: pcrf_gx_net_name }
+      pcrf_gx_net_ip: { get_param: [pcrf_gx_net_ips, 1] }
+      pcrf_gx_net_mask: { get_param: pcrf_gx_net_mask }
+      pcrf_sp_net_name: { get_param: pcrf_sp_net_name }
+      pcrf_sp_net_ip: { get_param: [pcrf_sp_net_ips, 1] }
+      pcrf_sp_net_mask: { get_param: pcrf_sp_net_mask }
+      pcrf_sy_net_name: { get_param: pcrf_sy_net_name }
+      pcrf_sy_net_ip: { get_param: [pcrf_sy_net_ips, 1] }
+      pcrf_sy_net_mask: { get_param: pcrf_sy_net_mask }
+      pcrf_rx_net_name: { get_param: pcrf_rx_net_name }
+      pcrf_rx_net_ip: { get_param: [pcrf_rx_net_ips, 1] }
+      pcrf_rx_net_mask: { get_param: pcrf_rx_net_mask }
+      pcrf_sd_net_name: { get_param: pcrf_sd_net_name }
+      pcrf_sd_net_ip: { get_param: [pcrf_sd_net_ips, 1] }
+      pcrf_sd_net_mask: { get_param: pcrf_sd_net_mask }
+      pcrf_sgi_sy_net_name: { get_param: pcrf_sgi_sy_net_name }
+      pcrf_sgi_sy_net_ip: { get_param: [pcrf_sgi_sy_net_ips, 1] }
+      pcrf_sgi_sy_net_mask: { get_param: pcrf_sgi_sy_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_ppd_003:
+    type: nested-ppd_v1.0.yaml
+    properties:
+      pcrf_ppd_server_name: { get_param: [pcrf_ppd_server_names, 2] }
+      pcrf_ppd_image_name: { get_param: pcrf_ppd_image_name }
+      pcrf_ppd_flavor_name: { get_param: pcrf_ppd_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 2] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_lb_internal_vip: { get_param: pcrf_lb_internal_vip }
+      pcrf_oam_net_name: { get_param: pcrf_oam_net_name }
+      pcrf_oam_net_ip: { get_param: [pcrf_oam_net_ips, 2] }
+      pcrf_oam_net_mask: { get_param: pcrf_oam_net_mask }
+      pcrf_oam_net_gw: { get_param: pcrf_oam_net_gw }
+      pcrf_lb_management_vip: { get_param: pcrf_lb_management_vip }
+      pcrf_gx_net_name: { get_param: pcrf_gx_net_name }
+      pcrf_gx_net_ip: { get_param: [pcrf_gx_net_ips, 2] }
+      pcrf_gx_net_mask: { get_param: pcrf_gx_net_mask }
+      pcrf_sp_net_name: { get_param: pcrf_sp_net_name }
+      pcrf_sp_net_ip: { get_param: [pcrf_sp_net_ips, 2] }
+      pcrf_sp_net_mask: { get_param: pcrf_sp_net_mask }
+      pcrf_sy_net_name: { get_param: pcrf_sy_net_name }
+      pcrf_sy_net_ip: { get_param: [pcrf_sy_net_ips, 2] }
+      pcrf_sy_net_mask: { get_param: pcrf_sy_net_mask }
+      pcrf_rx_net_name: { get_param: pcrf_rx_net_name }
+      pcrf_rx_net_ip: { get_param: [pcrf_rx_net_ips, 2] }
+      pcrf_rx_net_mask: { get_param: pcrf_rx_net_mask }
+      pcrf_sd_net_name: { get_param: pcrf_sd_net_name }
+      pcrf_sd_net_ip: { get_param: [pcrf_sd_net_ips, 2] }
+      pcrf_sd_net_mask: { get_param: pcrf_sd_net_mask }
+      pcrf_sgi_sy_net_name: { get_param: pcrf_sgi_sy_net_name }
+      pcrf_sgi_sy_net_ip: { get_param: [pcrf_sgi_sy_net_ips, 2] }
+      pcrf_sgi_sy_net_mask: { get_param: pcrf_sgi_sy_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_ppd_004:
+    type: nested-ppd_v1.0.yaml
+    properties:
+      pcrf_ppd_server_name: { get_param: [pcrf_ppd_server_names, 3] }
+      pcrf_ppd_image_name: { get_param: pcrf_ppd_image_name }
+      pcrf_ppd_flavor_name: { get_param: pcrf_ppd_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 3] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_lb_internal_vip: { get_param: pcrf_lb_internal_vip }
+      pcrf_oam_net_name: { get_param: pcrf_oam_net_name }
+      pcrf_oam_net_ip: { get_param: [pcrf_oam_net_ips, 3] }
+      pcrf_oam_net_mask: { get_param: pcrf_oam_net_mask }
+      pcrf_oam_net_gw: { get_param: pcrf_oam_net_gw }
+      pcrf_lb_management_vip: { get_param: pcrf_lb_management_vip }
+      pcrf_gx_net_name: { get_param: pcrf_gx_net_name }
+      pcrf_gx_net_ip: { get_param: [pcrf_gx_net_ips, 3] }
+      pcrf_gx_net_mask: { get_param: pcrf_gx_net_mask }
+      pcrf_sp_net_name: { get_param: pcrf_sp_net_name }
+      pcrf_sp_net_ip: { get_param: [pcrf_sp_net_ips, 3] }
+      pcrf_sp_net_mask: { get_param: pcrf_sp_net_mask }
+      pcrf_sy_net_name: { get_param: pcrf_sy_net_name }
+      pcrf_sy_net_ip: { get_param: [pcrf_sy_net_ips, 3] }
+      pcrf_sy_net_mask: { get_param: pcrf_sy_net_mask }
+      pcrf_rx_net_name: { get_param: pcrf_rx_net_name }
+      pcrf_rx_net_ip: { get_param: [pcrf_rx_net_ips, 3] }
+      pcrf_rx_net_mask: { get_param: pcrf_rx_net_mask }
+      pcrf_sd_net_name: { get_param: pcrf_sd_net_name }
+      pcrf_sd_net_ip: { get_param: [pcrf_sd_net_ips, 3] }
+      pcrf_sd_net_mask: { get_param: pcrf_sd_net_mask }
+      pcrf_sgi_sy_net_name: { get_param: pcrf_sgi_sy_net_name }
+      pcrf_sgi_sy_net_ip: { get_param: [pcrf_sgi_sy_net_ips, 3] }
+      pcrf_sgi_sy_net_mask: { get_param: pcrf_sgi_sy_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-ppd_v1.1.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-ppd_v1.1.env
new file mode 100644
index 0000000..bb6dfe4
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-ppd_v1.1.env
@@ -0,0 +1,35 @@
+parameters:
+  pcrf_ppd_server_names: ZRDM1PCRF01PPD001,ZRDM1PCRF01PPD002,ZRDM1PCRF01PPD003,ZRDM1PCRF01PPD004
+  pcrf_ppd_image_name: PCRF_8.995-ATTM1.0.3.qcow2
+  pcrf_ppd_flavor_name: lc.4xlarge4
+  availabilityzone_name: nova
+  pcrf_cps_net_name: Mobisupport-25193-I-INT1_int_pcrf_net_0
+  pcrf_cps_net_ips: 172.26.16.3,172.26.16.4,172.26.16.5,172.26.16.6
+  pcrf_lb_internal_vip: 172.26.16.114
+  pcrf_cps_net_mask: 255.255.255.0
+  pcrf_oam_net_name: MNS-25180-L-01_oam_protected_net_0
+  pcrf_oam_net_ips: 107.239.64.113,107.239.64.114,107.239.64.115,107.239.64.116
+  pcrf_lb_management_vip: 107.239.64.123
+  pcrf_oam_net_gw: 107.239.64.1
+  pcrf_oam_net_mask: 255.255.248.0
+  pcrf_gx_net_name: Mobisupport-25193-I-INT1_cor_pcrf_gx_net_0
+  pcrf_gx_net_ips: 107.239.24.67,107.239.24.68,107.239.24.69,107.239.24.70
+  pcrf_gx_net_mask: 255.255.255.248
+  pcrf_sp_net_name: Mobisupport-25193-I-INT1_cor_pcrf_sp_net_0
+  pcrf_sp_net_ips: 107.239.24.75,107.239.24.76,107.239.24.77,107.239.24.78
+  pcrf_sp_net_mask: 255.255.255.248
+  pcrf_sy_net_name: Mobisupport-25193-I-INT1_cor_pcrf_sy_net_0
+  pcrf_sy_net_ips: 107.239.24.83,107.239.24.84,107.239.24.85,107.239.24.86
+  pcrf_sy_net_mask: 255.255.255.248
+  pcrf_rx_net_name: Mobisupport-25193-I-INT1_cor_pcrf_rx_net_0
+  pcrf_rx_net_ips: 107.239.24.91,107.239.24.92,107.239.24.93,107.239.24.94
+  pcrf_rx_net_mask: 255.255.255.248
+  pcrf_sd_net_name: Mobisupport-25193-I-INT1_cor_pcrf_sd_net_0
+  pcrf_sd_net_ips: 107.239.24.99,107.239.24.100,107.239.24.101,107.239.24.102
+  pcrf_sd_net_mask: 255.255.255.248
+  pcrf_sgi_sy_net_name: Mobisupport-25193-I-INT1_sgi_pcrf_sy_net_0
+  pcrf_sgi_sy_net_ips: 107.239.26.131,107.239.26.132,107.239.26.133,107.239.26.134
+  pcrf_sgi_sy_net_mask: 255.255.255.248
+  pcrf_security_group_name: nimbus_security_group
+  pcrf_vnf_id: 730797234b4a40aa99335157b02871cd
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pps_v1.0.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pps_v1.0.env
new file mode 100644
index 0000000..340be2b
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pps_v1.0.env
@@ -0,0 +1,11 @@
+parameters:
+  pcrf_pps_server_names: ZRDM1PCRF01PPS001,ZRDM1PCRF01PPS002,ZRDM1PCRF01PPS003,ZRDM1PCRF01PPS004,ZRDM1PCRF01PPS005,ZRDM1PCRF01PPS006
+  pcrf_pps_image_name: PCRF_8.995-ATTM1.0.3.qcow2
+  pcrf_pps_flavor_name: lc.3xlarge
+  availabilityzone_name: nova
+  pcrf_cps_net_name: Mobisupport-25193-I-INT1_int_pcrf_net_0
+  pcrf_cps_net_ips: 172.26.16.7,172.26.16.8,172.26.16.9,172.26.16.10,172.26.16.11,172.26.16.12
+  pcrf_cps_net_mask: 255.255.255.0
+  pcrf_security_group_name: nimbus_security_group
+  pcrf_vnf_id: 730797234b4a40aa99335157b02871cd
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pps_v1.0.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pps_v1.0.yaml
new file mode 100644
index 0000000..05bd6c9
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-pps_v1.0.yaml
@@ -0,0 +1,121 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates PCRF Policy Server stack
+
+parameters:
+  pcrf_pps_server_names:
+    type: comma_delimited_list
+    label: PCRF PS server names
+    description: PCRF PS server names
+  pcrf_pps_image_name:
+    type: string
+    label: PCRF PS image name
+    description: PCRF PS image name
+  pcrf_pps_flavor_name:
+    type: string
+    label: PCRF PS flavor name
+    description: flavor name of PCRF PS instance
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ips:
+    type: comma_delimited_list
+    label: CPS network ips
+    description: CPS network ips
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+
+resources:
+  server_pcrf_pps_001:
+    type: nested-pps_v1.0.yaml
+    properties:
+      pcrf_pps_server_name: { get_param: [pcrf_pps_server_names, 0] }
+      pcrf_pps_image_name: { get_param: pcrf_pps_image_name }
+      pcrf_pps_flavor_name: { get_param: pcrf_pps_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 0] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_pps_002:
+    type: nested-pps_v1.0.yaml
+    properties:
+      pcrf_pps_server_name: { get_param: [pcrf_pps_server_names, 1] }
+      pcrf_pps_image_name: { get_param: pcrf_pps_image_name }
+      pcrf_pps_flavor_name: { get_param: pcrf_pps_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 1] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_pps_003:
+    type: nested-pps_v1.0.yaml
+    properties:
+      pcrf_pps_server_name: { get_param: [pcrf_pps_server_names, 2] }
+      pcrf_pps_image_name: { get_param: pcrf_pps_image_name }
+      pcrf_pps_flavor_name: { get_param: pcrf_pps_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 2] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_pps_004:
+    type: nested-pps_v1.0.yaml
+    properties:
+      pcrf_pps_server_name: { get_param: [pcrf_pps_server_names, 3] }
+      pcrf_pps_image_name: { get_param: pcrf_pps_image_name }
+      pcrf_pps_flavor_name: { get_param: pcrf_pps_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 3] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_pps_005:
+    type: nested-pps_v1.0.yaml
+    properties:
+      pcrf_pps_server_name: { get_param: [pcrf_pps_server_names, 4] }
+      pcrf_pps_image_name: { get_param: pcrf_pps_image_name }
+      pcrf_pps_flavor_name: { get_param: pcrf_pps_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 4] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_pps_006:
+    type: nested-pps_v1.0.yaml
+    properties:
+      pcrf_pps_server_name: { get_param: [pcrf_pps_server_names, 5] }
+      pcrf_pps_image_name: { get_param: pcrf_pps_image_name }
+      pcrf_pps_flavor_name: { get_param: pcrf_pps_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 5] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-psm_v1.0.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-psm_v1.0.env
new file mode 100644
index 0000000..f24e476
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-psm_v1.0.env
@@ -0,0 +1,10 @@
+parameters:
+  pcrf_psm_server_names: ZRDM1PCRF01PSM001,ZRDM1PCRF01PSM002,ZRDM1PCRF01PSM003,ZRDM1PCRF01PSM004,ZRDM1PCRF01PSM005,ZRDM1PCRF01PSM006,ZRDM1PCRF01PSM007,ZRDM1PCRF01PSM008,ZRDM1PCRF01PSM009,ZRDM1PCRF01PSM010,ZRDM1PCRF01PSM011,ZRDM1PCRF01PSM012
+  pcrf_psm_image_name: PCRF_8.995-ATTM1.0.3.qcow2
+  pcrf_psm_flavor_name: lc.4xlarge4
+  availabilityzone_name: nova
+  pcrf_cps_net_name: Mobisupport-25193-I-INT1_int_pcrf_net_0
+  pcrf_cps_net_ips: 172.26.16.63,172.26.16.64,172.26.16.65,172.26.16.66,172.26.16.67,172.26.16.68,172.26.16.69,172.26.16.70,172.26.16.71,172.26.16.72,172.26.16.73,172.26.16.74
+  pcrf_cps_net_mask: 255.255.255.0
+  pcrf_security_group_name: nimbus_security_group
+  pcrf_vnf_id: 730797234b4a40aa99335157b02871cd
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-psm_v1.0.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-psm_v1.0.yaml
new file mode 100644
index 0000000..c2d7b05
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-psm_v1.0.yaml
@@ -0,0 +1,199 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates PCRF Session Manager stack
+
+parameters:
+  pcrf_psm_server_names:
+    type: comma_delimited_list
+    label: PCRF SM server names
+    description: name of the PCRF SM instance
+  pcrf_psm_image_name:
+    type: string
+    label: PCRF SM image name
+    description: PCRF SM image name
+  pcrf_psm_flavor_name:
+    type: string
+    label: PCRF SM flavor name
+    description: flavor name of PCRF SM instance 
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ips:
+    type: comma_delimited_list
+    label: CPS network ips
+    description: CPS network ips
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+
+resources:
+  server_pcrf_psm_001:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 0] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 0] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_002:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 1] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 1] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_003:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 2] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 2] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_004:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 3] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 3] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_005:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 4] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 4] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_006:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 5] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 5] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_007:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 6] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 6] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_008:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 7] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 7] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_009:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 8] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 8] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_010:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 9] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 9] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_011:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 10] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 10] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_012:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 11] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 11] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+ 
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-swift-container_v1.0.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-swift-container_v1.0.env
new file mode 100644
index 0000000..5424c1b
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-swift-container_v1.0.env
@@ -0,0 +1,3 @@
+parameters:
+  pcrf_swift_container_name_1: PCRF_Config_Container_1
+  pcrf_swift_container_purge_on_delete_flag_1: false
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-swift-container_v1.0.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-swift-container_v1.0.yaml
new file mode 100644
index 0000000..9597f23
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/hot-nimbus-swift-container_v1.0.yaml
@@ -0,0 +1,30 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates PCRF Session Manager stack
+
+parameters:
+   pcrf_swift_container_name_1:
+     type: string
+     label: Swift Container name
+     description: Swift Container Name
+   pcrf_swift_container_purge_on_delete_flag_1:
+     type: boolean
+     label: Purge on Delete Flag
+     description: Purge on Delete Flag
+
+resources:
+  pcrf_swift_container_1:
+    type: OS::Swift::Container
+    properties:
+      name: { get_param: pcrf_swift_container_name_1 }
+      PurgeOnDelete: { get_param: pcrf_swift_container_purge_on_delete_flag_1 }
+      X-Container-Read: ".r:*"
+     
+outputs:
+  pcrf_swift_container_id_1:
+    description: the pcrf_swift_container_1 id
+    value: { get_resource: pcrf_swift_container_1 }
+  pcrf_swift_container_url_1:
+    description: the pcrf_swift_container_1 url
+    value: { get_attr: [ pcrf_swift_container_1, WebsiteURL ] }
+    
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/mount_iso_script.sh b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/mount_iso_script.sh
new file mode 100644
index 0000000..da5d9c4
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/mount_iso_script.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+#. .config 
+#following would be in the .config file
+ device_name="/dev/vde"
+ install_script="install_nimbus.sh"
+ enable_logic_flag_file=".flag"
+#end of config file
+
+#get the semaphore, 0 - disbaled, 1- enabled
+flag=$(cat ${enable_logic_flag_file})
+
+#check if device is mounted already
+test=$(mount | grep ${device_name})
+if [ "$flag" == "1" ]; then
+	if [ -e ${device_name} ] && [ ! "${test}" ]; then
+		#mount the iso image
+		mount -t iso9660 -v -o loop /dev/vde/ /mnt/iso
+		#if availabe run the install script (it contains the install.sh steps)
+		if [ -e "${install_script}" ] && [ -f "${install_script}" ]; then
+			${install_script}
+		fi
+		#disable the script from attempting to 
+		#  mount and run install again until needed;
+		echo "0" > ${enable_logic_flag_file}
+		#if nedeed add step to comment out the crontab line here;
+	fi
+else
+	echo "Auto mounting ISO & run install logic disabled!"
+fi
+
+#cron job
+# * * * * * /mount_iso_script.sh
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nested-oam_v1.0.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nested-oam_v1.0.yaml
new file mode 100644
index 0000000..d3baf41
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nested-oam_v1.0.yaml
@@ -0,0 +1,156 @@
+heat_template_version: 2013-05-23
+
+description: nested heat template that creates a PCRF OAM node stack
+
+parameters:
+  pcrf_oam_server_name:
+    type: string
+    label: PCRF OAM server name
+    description: PCRF OAM server name
+  pcrf_oam_image_name:
+    type: string
+    label: image name
+    description: PCRF OAM image name
+  pcrf_oam_flavor_name:
+    type: string
+    label: PCRF OAM flavor name
+    description: flavor name of PCRF OAM instance
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ip:
+    type: string
+    label: CPS network ip
+    description: CPS network ip
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_arbiter_vip:
+    type: string
+    label: OAM Arbiter LB VIP
+    description: OAM Arbiter LB VIP
+  pcrf_oam_net_name:
+    type: string
+    label: OAM network name
+    description: OAM network name
+  pcrf_oam_net_ip:
+    type: string
+    label: OAM network ip
+    description: OAM network ip
+  pcrf_oam_net_gw:
+    type: string
+    label: CPS network gateway
+    description: CPS network gateway
+  pcrf_oam_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_oam_volume_id:
+    type: string
+    label: CPS OAM Cinder Volume
+    description: CPS OAM Cinder Volume
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+
+resources:
+  network:
+    type: OS::Heat::CloudConfig
+    properties:
+      cloud_config:
+        write_files:
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth0
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet }
+                params:
+                  $dev: eth0
+                  $ip: { get_param: pcrf_cps_net_ip }
+                  $netmask: { get_param: pcrf_cps_net_mask }
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth1
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet-gw }
+                params:
+                  $dev: eth1
+                  $ip: { get_param: pcrf_oam_net_ip }
+                  $netmask: { get_param: pcrf_oam_net_mask }
+                  $gateway: { get_param: pcrf_oam_net_gw }
+        runcmd:
+          - ifdown eth0 && ifup eth0
+          - ifdown eth1 && ifup eth1
+  script_init:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: ungrouped
+      config:
+        str_replace:
+          template: { get_file: cloud-nimbus.sh }
+          params:
+            $vm_name: { get_param: pcrf_oam_server_name }
+  pcrf_server_init:
+    type: OS::Heat::MultipartMime
+    properties:
+      parts:
+      - config: { get_resource: network}
+      - config: { get_resource: script_init}
+
+  pcrf_server_oam:
+    type: OS::Nova::Server
+    properties:
+      config_drive: "True"
+      name: { get_param: pcrf_oam_server_name }
+      image: { get_param: pcrf_oam_image_name }
+      flavor: { get_param: pcrf_oam_flavor_name }
+      availability_zone: { get_param: availabilityzone_name }
+      networks:
+        - port: { get_resource: pcrf_oam_port_0}
+        - port: { get_resource: pcrf_oam_port_1}
+      user_data_format: RAW
+      user_data:
+        get_resource: pcrf_server_init
+      metadata:
+        vnf_id: {get_param: pcrf_vnf_id}
+  
+  pcrf_oam_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_cps_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_cps_net_ip }
+      allowed_address_pairs:
+        - ip_address: { get_param: pcrf_arbiter_vip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
+
+  pcrf_oam_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_oam_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_oam_net_ip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
+
+  pcrf_oam_vol_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: { get_param: pcrf_oam_volume_id }
+      mountpoint: /dev/vdd
+      instance_uuid: { get_resource: pcrf_server_oam }
+
+outputs:
+  pcrf_oam_vol_attachment_id:
+    description: the pcrf_oam_vol_attachment_id id
+    value: { get_resource: pcrf_oam_vol_attachment }
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nested-pcm_v1.0.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nested-pcm_v1.0.yaml
new file mode 100644
index 0000000..820d09b
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nested-pcm_v1.0.yaml
@@ -0,0 +1,150 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates PCRF Cluman stack
+
+parameters:
+  pcrf_pcm_server_name:
+    type: string
+    label: PCRF CM server name
+    description: PCRF CM server name
+  pcrf_pcm_image_name:
+    type: string
+    label: image name
+    description: PCRF CM image name
+  pcrf_pcm_flavor_name:
+    type: string
+    label: PCRF CM flavor name
+    description: flavor name of PCRF CM instance
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ip:
+    type: string
+    label: CPS network ip
+    description: CPS network ip
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_oam_net_name:
+    type: string
+    label: OAM network name
+    description: OAM network name
+  pcrf_oam_net_ip:
+    type: string
+    label: OAM network ip
+    description: OAM network ip
+  pcrf_oam_net_gw:
+    type: string
+    label: CPS network gateway
+    description: CPS network gateway
+  pcrf_oam_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_pcm_volume_id:
+    type: string
+    label: CPS Cluman Cinder Volume
+    description: CPS Cluman Cinder Volume
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+
+resources:
+  network:
+    type: OS::Heat::CloudConfig
+    properties:
+      cloud_config:
+        write_files:
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth0
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet }
+                params:
+                  $dev: eth0
+                  $ip: { get_param: pcrf_cps_net_ip }
+                  $netmask: { get_param: pcrf_cps_net_mask }
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth1
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet-gw }
+                params:
+                  $dev: eth1
+                  $ip: { get_param: pcrf_oam_net_ip }
+                  $netmask: { get_param: pcrf_oam_net_mask }
+                  $gateway: { get_param: pcrf_oam_net_gw }
+        runcmd:
+          - ifdown eth0 && ifup eth0
+          - ifdown eth1 && ifup eth1
+  script_init:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: ungrouped
+      config:
+        str_replace:
+          template: { get_file: cloud-nimbus.sh }
+          params:
+            $vm_name: { get_param: pcrf_pcm_server_name }
+  pcrf_server_init:
+    type: OS::Heat::MultipartMime
+    properties:
+      parts:
+      - config: { get_resource: network}
+      - config: { get_resource: script_init}
+
+  pcrf_server_pcm:
+    type: OS::Nova::Server
+    properties:
+      config_drive: "True"
+      name: { get_param: pcrf_pcm_server_name }
+      image: { get_param: pcrf_pcm_image_name }
+      flavor: { get_param: pcrf_pcm_flavor_name }
+      availability_zone: { get_param: availabilityzone_name }
+      networks:
+        - port: { get_resource: pcrf_pcm_port_0}
+        - port: { get_resource: pcrf_pcm_port_1}
+      user_data_format: RAW
+      user_data:
+        get_resource: pcrf_server_init
+      metadata:
+        vnf_id: {get_param: pcrf_vnf_id}
+
+  pcrf_pcm_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_cps_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_cps_net_ip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
+
+  pcrf_pcm_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_oam_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_oam_net_ip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
+
+  volume_attachment:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: { get_param: pcrf_pcm_volume_id }
+      mountpoint: /dev/vdd
+      instance_uuid: { get_resource: pcrf_server_pcm }
+
+outputs:
+  pcrf_server_pcm_id:
+    description: the pcm server id
+    value: { get_resource: pcrf_server_pcm }
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nested-ppd_v1.0.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nested-ppd_v1.0.yaml
new file mode 100644
index 0000000..397e85c
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nested-ppd_v1.0.yaml
@@ -0,0 +1,333 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates PCRF Policy Director stack
+
+parameters:
+  pcrf_ppd_server_name:
+    type: string
+    label: PCRF PD server name
+    description: PCRF PD server name
+  pcrf_ppd_image_name:
+    type: string
+    label: image name
+    description: PCRF PD image name
+  pcrf_ppd_flavor_name:
+    type: string
+    label: PCRF PD flavor name
+    description: flavor name of PCRF PD instance
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ip:
+    type: string
+    label: CPS network ip
+    description: CPS network ip
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_lb_internal_vip:
+    type: string
+    label: CPS Internal LB VIP
+    description: CPS Internal LB VIP
+  pcrf_oam_net_name:
+    type: string
+    label: OAM network name
+    description: OAM network name
+  pcrf_oam_net_ip:
+    type: string
+    label: OAM network ip
+    description: OAM network ip
+  pcrf_oam_net_gw:
+    type: string
+    label: CPS network gateway
+    description: CPS network gateway
+  pcrf_oam_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_lb_management_vip:
+    type: string
+    label: CPS OAM LB VIP
+    description: CPS OAM LB VIP
+  pcrf_gx_net_name:
+    type: string
+    label: Gx network name
+    description: Gx network name
+  pcrf_gx_net_ip:
+    type: string
+    label: Gx network ip
+    description: Gx network ip
+  pcrf_gx_net_mask:
+    type: string
+    label: Gx network mask
+    description: Gx network mask
+  pcrf_sp_net_name:
+    type: string
+    label: Sp network name
+    description: Sp network name
+  pcrf_sp_net_ip:
+    type: string
+    label: Sp network ip
+    description: Sp network ip
+  pcrf_sp_net_mask:
+    type: string
+    label: Sp network mask
+    description: Sp network mask
+  pcrf_sy_net_name:
+    type: string
+    label: Sy network name
+    description: Sy network name
+  pcrf_sy_net_ip:
+    type: string
+    label: Sy network ip
+    description: Sy network ip
+  pcrf_sy_net_mask:
+    type: string
+    label: Sy network mask
+    description: Sy network mask
+  pcrf_rx_net_name:
+    type: string
+    label: Rx network name
+    description: Rx network name
+  pcrf_rx_net_ip:
+    type: string
+    label: Rx network ip
+    description: Rx network ip
+  pcrf_rx_net_mask:
+    type: string
+    label: Rx network mask
+    description: Rx network mask
+  pcrf_sd_net_name:
+    type: string
+    label: Sd network name
+    description: Sd network name
+  pcrf_sd_net_ip:
+    type: string
+    label: Sd network ip
+    description: Sd network ip
+  pcrf_sd_net_mask:
+    type: string
+    label: Sd network mask
+    description: Sd network mask
+  pcrf_sgi_sy_net_name:
+    type: string
+    label: Sgi Sy network name
+    description: Sgi Sy network name
+  pcrf_sgi_sy_net_ip:
+    type: string
+    label: Sgi Sy network ip
+    description: Sgi Sy network ip
+  pcrf_sgi_sy_net_mask:
+    type: string
+    label: Sgi Sy network mask
+    description: Sgi Sy network mask
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+
+resources:
+  network:
+    type: OS::Heat::CloudConfig
+    properties:
+      cloud_config:
+        write_files:
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth0
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet }
+                params:
+                  $dev: eth0
+                  $ip: { get_param: pcrf_cps_net_ip }
+                  $netmask: { get_param: pcrf_cps_net_mask }
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth1
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet-gw }
+                params:
+                  $dev: eth1
+                  $ip: { get_param: pcrf_oam_net_ip }
+                  $netmask: { get_param: pcrf_oam_net_mask }
+                  $gateway: { get_param: pcrf_oam_net_gw }
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth2
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet }
+                params:
+                  $dev: eth2
+                  $ip: { get_param: pcrf_gx_net_ip }
+                  $netmask: { get_param: pcrf_gx_net_mask }
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth3
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet }
+                params:
+                  $dev: eth3
+                  $ip: { get_param: pcrf_sp_net_ip }
+                  $netmask: { get_param: pcrf_sp_net_mask }
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth4
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet }
+                params:
+                  $dev: eth4
+                  $ip: { get_param: pcrf_sy_net_ip }
+                  $netmask: { get_param: pcrf_sy_net_mask }
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth5
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet }
+                params:
+                  $dev: eth5
+                  $ip: { get_param: pcrf_rx_net_ip }
+                  $netmask: { get_param: pcrf_rx_net_mask }
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth6
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet }
+                params:
+                  $dev: eth6
+                  $ip: { get_param: pcrf_sd_net_ip }
+                  $netmask: { get_param: pcrf_sd_net_mask }
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth7
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet }
+                params:
+                  $dev: eth7
+                  $ip: { get_param: pcrf_sgi_sy_net_ip }
+                  $netmask: { get_param: pcrf_sgi_sy_net_mask }
+        runcmd:
+          - ifdown eth0 && ifup eth0
+          - ifdown eth1 && ifup eth1
+          - ifdown eth2 && ifup eth2
+          - ifdown eth3 && ifup eth3
+          - ifdown eth4 && ifup eth4
+          - ifdown eth5 && ifup eth5
+          - ifdown eth6 && ifup eth6
+          - ifdown eth7 && ifup eth7
+  script_init:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: ungrouped
+      config:
+        str_replace:
+          template: { get_file: cloud-nimbus.sh }
+          params:
+            $vm_name: { get_param: pcrf_ppd_server_name }
+  pcrf_server_init:
+    type: OS::Heat::MultipartMime
+    properties:
+      parts:
+      - config: { get_resource: network}
+      - config: { get_resource: script_init}
+
+  pcrf_server_ppd: 
+    type: OS::Nova::Server
+    properties:
+      config_drive: "True"
+      name: { get_param: pcrf_ppd_server_name }
+      image: { get_param: pcrf_ppd_image_name }
+      flavor: { get_param: pcrf_ppd_flavor_name }
+      availability_zone: { get_param: availabilityzone_name }
+      networks:
+        - port: { get_resource: pcrf_ppd_port_0}
+        - port: { get_resource: pcrf_ppd_port_1}
+        - port: { get_resource: pcrf_ppd_port_2}
+        - port: { get_resource: pcrf_ppd_port_3}
+        - port: { get_resource: pcrf_ppd_port_4}
+        - port: { get_resource: pcrf_ppd_port_5}
+        - port: { get_resource: pcrf_ppd_port_6}
+        - port: { get_resource: pcrf_ppd_port_7}
+      user_data_format: RAW
+      user_data:
+        get_resource: pcrf_server_init
+      metadata:
+        vnf_id: {get_param: pcrf_vnf_id}
+
+  pcrf_ppd_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_cps_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_cps_net_ip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
+      allowed_address_pairs:
+        - ip_address: { get_param: pcrf_lb_internal_vip }
+
+  pcrf_ppd_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_oam_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_oam_net_ip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
+      allowed_address_pairs:
+        - ip_address: { get_param: pcrf_lb_management_vip } 
+ 
+  pcrf_ppd_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_gx_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_gx_net_ip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
+
+  pcrf_ppd_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_sp_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_sp_net_ip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
+
+  pcrf_ppd_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_sy_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_sy_net_ip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
+
+  pcrf_ppd_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_rx_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_rx_net_ip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
+  
+  pcrf_ppd_port_6:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_sd_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_sd_net_ip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
+
+  pcrf_ppd_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_sgi_sy_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_sgi_sy_net_ip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nested-pps_v1.0.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nested-pps_v1.0.yaml
new file mode 100644
index 0000000..fc5b6f7
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nested-pps_v1.0.yaml
@@ -0,0 +1,99 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates PCRF Policy Server stack
+
+parameters:
+  pcrf_pps_server_name:
+    type: string
+    label: PCRF PS server name
+    description: PCRF PS server name
+  pcrf_pps_image_name:
+    type: string
+    label: PCRF PS image name
+    description: PCRF PS image name
+  pcrf_pps_flavor_name:
+    type: string
+    label: PCRF PS flavor name
+    description: flavor name of PCRF PS instance
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ip:
+    type: string
+    label: CPS network ip
+    description: CPS network ip
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+
+resources:
+  script_init:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: ungrouped
+      config:
+        str_replace:
+          template: { get_file: cloud-nimbus.sh }
+          params:
+            $vm_name: { get_param: pcrf_pps_server_name }
+  network:
+    type: OS::Heat::CloudConfig
+    properties:
+      cloud_config:
+        write_files:
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth0
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet }
+                params:
+                  $dev: eth0
+                  $ip: { get_param: pcrf_cps_net_ip }
+                  $netmask: { get_param: pcrf_cps_net_mask }
+        runcmd:
+          - ifdown eth0 && ifup eth0
+
+  pcrf_server_init:
+    type: OS::Heat::MultipartMime
+    properties:
+      parts:
+      - config: { get_resource: network}
+      - config: { get_resource: script_init}
+
+  pcrf_server_pps:
+    type: OS::Nova::Server
+    properties:
+      config_drive: "True"
+      name: { get_param: pcrf_pps_server_name }
+      image: { get_param: pcrf_pps_image_name }
+      flavor: { get_param: pcrf_pps_flavor_name }
+      availability_zone: { get_param: availabilityzone_name }
+      networks:
+        - port: { get_resource: pcrf_pps_port_0}
+      user_data_format: RAW
+      user_data:
+        get_resource: pcrf_server_init
+      metadata:
+        vnf_id: {get_param: pcrf_vnf_id}
+
+  pcrf_pps_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_cps_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_cps_net_ip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nested-psm_v1.0.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nested-psm_v1.0.yaml
new file mode 100644
index 0000000..c86aa34
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nested-psm_v1.0.yaml
@@ -0,0 +1,99 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates PCRF Session Manager stack
+
+parameters:
+  pcrf_psm_server_name:
+    type: string
+    label: PCRF SM server name
+    description: PCRF SM server name
+  pcrf_psm_image_name:
+    type: string
+    label: image name
+    description: PCRF SM image name
+  pcrf_psm_flavor_name:
+    type: string
+    label: PCRF SM flavor name
+    description: flavor name of PCRF SM instance 
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ip:
+    type: string
+    label: CPS network ip
+    description: CPS network ip
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+
+resources:
+  network:
+    type: OS::Heat::CloudConfig
+    properties:
+      cloud_config:
+        write_files:
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth0
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet }
+                params:
+                  $dev: eth0
+                  $ip: { get_param: pcrf_cps_net_ip }
+                  $netmask: { get_param: pcrf_cps_net_mask }
+        runcmd:
+          - ifdown eth0 && ifup eth0
+  script_init:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: ungrouped
+      config:
+        str_replace:
+          template: { get_file: cloud-nimbus.sh }
+          params:
+            $vm_name: { get_param: pcrf_psm_server_name }
+  pcrf_server_init:
+    type: OS::Heat::MultipartMime
+    properties:
+      parts:
+      - config: { get_resource: network}
+      - config: { get_resource: script_init}
+
+  pcrf_server_psm:
+    type: OS::Nova::Server
+    properties:
+      config_drive: "True"
+      name: { get_param: pcrf_psm_server_name }
+      image: { get_param: pcrf_psm_image_name }
+      flavor: { get_param: pcrf_psm_flavor_name }
+      availability_zone: { get_param: availabilityzone_name }
+      networks:
+        - port: { get_resource: psm01_port_0}
+      user_data_format: RAW
+      user_data:
+        get_resource: pcrf_server_init
+      metadata:
+        vnf_id: {get_param: pcrf_vnf_id}
+      #scheduler_hints: {group: { get_resource: servergroup_nimbus }}
+  
+  psm01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_cps_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_cps_net_ip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nimbus-ethernet b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nimbus-ethernet
new file mode 100644
index 0000000..51250a7
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nimbus-ethernet
@@ -0,0 +1,5 @@
+DEVICE=$dev
+BOOTPROTO=none
+NM_CONTROLLED=no
+IPADDR=$ip
+NETMASK=$netmask
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nimbus-ethernet-gw b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nimbus-ethernet-gw
new file mode 100644
index 0000000..3e08d64
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/nimbus/nimbus-ethernet-gw
@@ -0,0 +1,6 @@
+DEVICE=$dev
+BOOTPROTO=none
+NM_CONTROLLED=no
+IPADDR=$ip
+NETMASK=$netmask
+GATEWAY=$gateway
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/notZipFile b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/notZipFile
new file mode 100644
index 0000000..0f0f2a4
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/notZipFile
@@ -0,0 +1 @@
+test text file
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/quesionnaire/invalidComponent.json b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/quesionnaire/invalidComponent.json
new file mode 100644
index 0000000..9b10297
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/quesionnaire/invalidComponent.json
@@ -0,0 +1,34 @@
+{
+  "general": {
+    "hypervisor": {
+      "hypervisor": "KVM",
+      "containerFeaturesDescription": "Nn8XhahKjo,FapqJ4Ale11LkO-f3,TlCJ2d0S Q B1w0JJwZgWo MeqEk85utsaM tdM33ZmAiAKp__c_PRBt_5-24gBU21unWme",
+      "drivers": ",Lz-m3R7iwRREmjBA3Ss6b0K8YBcH4SS66UJSG8OGTlaMs6Be"
+    },
+    "image": {
+      "ephemeralDiskSizePerVM": 8,
+      "format": "iso",
+      "bootDiskSizePerVM": 100,
+      "providedBy": "Vendor"
+    },
+    "dnsConfiguration": "dolore adipisicing proident aute amet",
+    "recovery": {
+      "vmProcessFailuresHandling": "in ad est ut",
+      "pointObjective": 20
+    }
+  },
+  "network": {},
+  "highAvailabilityAndLoadBalancing": {
+    "architectureChoice": "nostrud eu culpa velit Lorem",
+    "slaRequirements": "est esse Excepteur eu",
+    "failureLoadDistribution": "velit reprehenderit aute dolor in",
+    "loadDistributionMechanism": "quis fugiat veniam cillum"
+  },
+  "storage": {
+    "backup": {
+      "backupType": "On Site",
+      "backupStorageSize": 9,
+      "backupSolution": "fugiat tempor"
+    }
+  }
+}
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/quesionnaire/invalidNic.json b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/quesionnaire/invalidNic.json
new file mode 100644
index 0000000..7297cdc
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/quesionnaire/invalidNic.json
@@ -0,0 +1,36 @@
+{
+  "ipConfiguration": {
+    "ipv6Required": false
+  },
+  "protocols": {
+    "protocolWithHighestTrafficProfile": "TCP"
+  },
+  "network": {
+    "networkDescription": "mLRqrnteBeIIUQsuvZEetXjllKPnYvbG"
+  },
+  "sizing": {
+    "describeQualityOfService": "adipisicing voluptate aute",
+    "acceptableJitter": {
+      "mean": "98690087997256150885582732516496929349161209784564642159997681825133065"
+    },
+    "flowLength": {
+      "packets": {},
+      "bytes": {}
+    },
+    "outflowTrafficPerSecond": {
+      "packets": {}
+    },
+    "acceptablePacketLoss": "15",
+    "inflowTrafficPerSecond": {
+      "bytes": {}
+    }
+  },
+  "describeQualityOfService": "minim dolore",
+  "acceptablePacketLoss": "4",
+  "flowLength": {},
+  "acceptableJitter": {
+    "mean": "61827261335222870878257995122569227177432366697624312367018960696207118652325834319325112734287",
+    "max": "498307229580528005673649352861421755",
+    "variable": "5085363947608755025538570280250262251802454469028997134802881591362"
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/quesionnaire/validComponent.json b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/quesionnaire/validComponent.json
new file mode 100644
index 0000000..4e9e9aa
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/quesionnaire/validComponent.json
@@ -0,0 +1,34 @@
+{
+  "general": {
+    "hypervisor": {
+      "hypervisor": "KVM",
+      "containerFeaturesDescription": "Nn8XhahKjo,FapqJ4Ale11LkO-f3,TlCJ2d0S Q B1w0JJwZgWo MeqEk85utsaM tdM33ZmAiAKp__c_PRBt_5-24gBU21unWme",
+      "drivers": ",Lz-m3R7iwRREmjBA3Ss6b0K8YBcH4SS66UJSG8OGTlaMs6Be"
+    },
+    "image": {
+      "ephemeralDiskSizePerVM": 8,
+      "format": "iso",
+      "bootDiskSizePerVM": 100,
+      "providedBy": "Vendor"
+    },
+    "dnsConfiguration": "dolore adipisicing proident aute amet",
+    "recovery": {
+      "vmProcessFailuresHandling": "in ad est ut",
+      "pointObjective": 6
+    }
+  },
+  "network": {},
+  "highAvailabilityAndLoadBalancing": {
+    "architectureChoice": "nostrud eu culpa velit Lorem",
+    "slaRequirements": "est esse Excepteur eu",
+    "failureLoadDistribution": "velit reprehenderit aute dolor in",
+    "loadDistributionMechanism": "quis fugiat veniam cillum"
+  },
+  "storage": {
+    "backup": {
+      "backupType": "On Site",
+      "backupStorageSize": 9,
+      "backupSolution": "fugiat tempor"
+    }
+  }
+}
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/quesionnaire/validNic.json b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/quesionnaire/validNic.json
new file mode 100644
index 0000000..e30dcfd
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/quesionnaire/validNic.json
@@ -0,0 +1,30 @@
+{
+  "ipConfiguration": {
+    "ipv6Required": false
+  },
+  "protocols": {
+    "protocolWithHighestTrafficProfile": "TCP"
+  },
+  "network": {
+    "networkDescription": "mLRqrnteBeIIUQsuvZEetXjllKPnYvbG"
+  },
+  "sizing": {
+    "describeQualityOfService": "adipisicing voluptate aute",
+    "flowLength": {
+      "packets": {},
+      "bytes": {}
+    },
+    "outflowTrafficPerSecond": {
+      "packets": {}
+    },
+    "acceptablePacketLoss": 15,
+    "inflowTrafficPerSecond": {
+      "bytes": {}
+    },
+    "acceptableJitter": {
+      "mean": 2000,
+      "max": 3000,
+      "variable": 4000
+    }
+  }
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/missing_manifest/input/heat_missing_from_manifast.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/missing_manifest/input/heat_missing_from_manifast.yaml
new file mode 100644
index 0000000..d5608ab
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/missing_manifest/input/heat_missing_from_manifast.yaml
@@ -0,0 +1,250 @@
+### Heat Template ###
+description: Generated template
+heat_template_version: 2013-05-23
+parameters: {}
+resources:
+  network_0:
+    properties:
+      admin_state_up: true
+      name: NET_167
+      shared: true
+    type: OS::Neutron::Net
+  network_1:
+    properties:
+      admin_state_up: true
+      name: NET_169
+      shared: true
+    type: OS::Neutron::Net
+  network_2:
+    properties:
+      admin_state_up: true
+      name: NET_166
+      shared: true
+    type: OS::Neutron::Net
+  network_3:
+    properties:
+      admin_state_up: true
+      name: NET_168
+      shared: true
+    type: OS::Neutron::Net
+  network_4:
+    properties:
+      admin_state_up: true
+      name: NET_169
+      shared: true
+    type: OS::Neutron::Net
+  network_5:
+    properties:
+      admin_state_up: true
+      name: NET_170
+      shared: true
+    type: OS::Neutron::Net
+  network_6:
+    properties:
+      admin_state_up: true
+      name: NET_168
+      shared: true
+    type: OS::Neutron::Net
+  network_7:
+    properties:
+      admin_state_up: true
+      name: NET_170
+      shared: true
+    type: OS::Neutron::Net
+  network_8:
+    properties:
+      admin_state_up: true
+      name: NET_166
+      shared: true
+    type: OS::Neutron::Net
+  network_9:
+    properties:
+      admin_state_up: true
+      name: NET_167
+      shared: true
+    type: OS::Neutron::Net
+  security_group_0:
+    properties:
+      description: Default security group
+      name: _default
+      rules:
+      - direction: ingress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+      - direction: egress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+    type: OS::Neutron::SecurityGroup
+  security_group_1:
+    properties:
+      description: Default security group
+      name: _default
+      rules:
+      - direction: egress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+      - direction: ingress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+    type: OS::Neutron::SecurityGroup
+  subnet_0:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.254
+        start: 10.147.32.130
+      cidr: 10.147.32.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_167
+      network_id:
+        get_resource: network_9
+    type: OS::Neutron::Subnet
+  subnet_1:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.254
+        start: 10.147.32.130
+      cidr: 10.147.32.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_167
+      network_id:
+        get_resource: network_0
+    type: OS::Neutron::Subnet
+  subnet_2:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.126
+        start: 10.147.32.2
+      cidr: 10.147.32.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_166
+      network_id:
+        get_resource: network_8
+    type: OS::Neutron::Subnet
+  subnet_3:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.126
+        start: 10.147.32.2
+      cidr: 10.147.32.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_166
+      network_id:
+        get_resource: network_2
+    type: OS::Neutron::Subnet
+  subnet_4:
+    properties:
+      allocation_pools:
+      - end: 10.147.34.126
+        start: 10.147.34.2
+      cidr: 10.147.34.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_170
+      network_id:
+        get_resource: network_5
+    type: OS::Neutron::Subnet
+  subnet_5:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.126
+        start: 10.147.33.2
+      cidr: 10.147.33.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_168
+      network_id:
+        get_resource: network_6
+    type: OS::Neutron::Subnet
+  subnet_6:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.126
+        start: 10.147.33.2
+      cidr: 10.147.33.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_168
+      network_id:
+        get_resource: network_3
+    type: OS::Neutron::Subnet
+  subnet_7:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.254
+        start: 10.147.33.130
+      cidr: 10.147.33.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_169
+      network_id:
+        get_resource: network_1
+    type: OS::Neutron::Subnet
+  subnet_8:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.254
+        start: 10.147.33.130
+      cidr: 10.147.33.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_169
+      network_id:
+        get_resource: network_4
+    type: OS::Neutron::Subnet
+  subnet_9:
+    properties:
+      allocation_pools:
+      - end: 10.147.34.126
+        start: 10.147.34.2
+      cidr: 10.147.34.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_170
+      network_id:
+        get_resource: network_7
+    type: OS::Neutron::Subnet
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/missing_manifest/input/mainValid.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/missing_manifest/input/mainValid.yaml
new file mode 100644
index 0000000..318c8f1
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/missing_manifest/input/mainValid.yaml
@@ -0,0 +1,250 @@
+### Heat Template ###
+description: Generated template
+heat_template_version: 2013-05-23
+parameters: {}
+resources:
+  network_0:
+    properties:
+      admin_state_up: true
+      name: NET_167
+      shared: true
+    type: OS::Neutron::Net
+  network_1:
+    properties:
+      admin_state_up: true
+      name: NET_169
+      shared: true
+    type: OS::Neutron::Net
+  network_2:
+    properties:
+      admin_state_up: true
+      name: NET_166
+      shared: true
+    type: OS::Neutron::Net
+  network_3:
+    properties:
+      admin_state_up: true
+      name: NET_168
+      shared: true
+    type: missingNested.yaml
+  network_4:
+    properties:
+      admin_state_up: true
+      name: { get_file: missing-artifact }
+      shared: true
+    type: OS::Neutron::Net
+  network_5:
+    properties:
+      admin_state_up: true
+      name: NET_170
+      shared: true
+    type: OS::Neutron::Net
+  network_6:
+    properties:
+      admin_state_up: true
+      name: NET_168
+      shared: true
+    type: OS::Neutron::Net
+  network_7:
+    properties:
+      admin_state_up: true
+      name: NET_170
+      shared: true
+    type: OS::Neutron::Net
+  network_8:
+    properties:
+      admin_state_up: true
+      name: NET_166
+      shared: true
+    type: OS::Neutron::Net
+  network_9:
+    properties:
+      admin_state_up: true
+      name: NET_167
+      shared: true
+    type: OS::Neutron::Net
+  security_group_0:
+    properties:
+      description: Default security group
+      name: _default
+      rules:
+      - direction: ingress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+      - direction: egress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+    type: OS::Neutron::SecurityGroup
+  security_group_1:
+    properties:
+      description: Default security group
+      name: _default
+      rules:
+      - direction: egress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+      - direction: ingress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+    type: OS::Neutron::SecurityGroup
+  subnet_0:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.254
+        start: 10.147.32.130
+      cidr: 10.147.32.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_167
+      network_id:
+        get_resource: network_9
+    type: OS::Neutron::Subnet
+  subnet_1:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.254
+        start: 10.147.32.130
+      cidr: 10.147.32.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_167
+      network_id:
+        get_resource: network_0
+    type: OS::Neutron::Subnet
+  subnet_2:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.126
+        start: 10.147.32.2
+      cidr: 10.147.32.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_166
+      network_id:
+        get_resource: network_8
+    type: OS::Neutron::Subnet
+  subnet_3:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.126
+        start: 10.147.32.2
+      cidr: 10.147.32.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_166
+      network_id:
+        get_resource: network_2
+    type: OS::Neutron::Subnet
+  subnet_4:
+    properties:
+      allocation_pools:
+      - end: 10.147.34.126
+        start: 10.147.34.2
+      cidr: 10.147.34.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_170
+      network_id:
+        get_resource: network_5
+    type: OS::Neutron::Subnet
+  subnet_5:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.126
+        start: 10.147.33.2
+      cidr: 10.147.33.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_168
+      network_id:
+        get_resource: network_6
+    type: OS::Neutron::Subnet
+  subnet_6:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.126
+        start: 10.147.33.2
+      cidr: 10.147.33.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_168
+      network_id:
+        get_resource: network_3
+    type: OS::Neutron::Subnet
+  subnet_7:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.254
+        start: 10.147.33.130
+      cidr: 10.147.33.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_169
+      network_id:
+        get_resource: network_1
+    type: OS::Neutron::Subnet
+  subnet_8:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.254
+        start: 10.147.33.130
+      cidr: 10.147.33.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_169
+      network_id:
+        get_resource: network_4
+    type: OS::Neutron::Subnet
+  subnet_9:
+    properties:
+      allocation_pools:
+      - end: 10.147.34.126
+        start: 10.147.34.2
+      cidr: 10.147.34.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_170
+      network_id:
+        get_resource: network_7
+    type: OS::Neutron::Subnet
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/missing_manifest/input/validHeat.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/missing_manifest/input/validHeat.yaml
new file mode 100644
index 0000000..d5608ab
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/missing_manifest/input/validHeat.yaml
@@ -0,0 +1,250 @@
+### Heat Template ###
+description: Generated template
+heat_template_version: 2013-05-23
+parameters: {}
+resources:
+  network_0:
+    properties:
+      admin_state_up: true
+      name: NET_167
+      shared: true
+    type: OS::Neutron::Net
+  network_1:
+    properties:
+      admin_state_up: true
+      name: NET_169
+      shared: true
+    type: OS::Neutron::Net
+  network_2:
+    properties:
+      admin_state_up: true
+      name: NET_166
+      shared: true
+    type: OS::Neutron::Net
+  network_3:
+    properties:
+      admin_state_up: true
+      name: NET_168
+      shared: true
+    type: OS::Neutron::Net
+  network_4:
+    properties:
+      admin_state_up: true
+      name: NET_169
+      shared: true
+    type: OS::Neutron::Net
+  network_5:
+    properties:
+      admin_state_up: true
+      name: NET_170
+      shared: true
+    type: OS::Neutron::Net
+  network_6:
+    properties:
+      admin_state_up: true
+      name: NET_168
+      shared: true
+    type: OS::Neutron::Net
+  network_7:
+    properties:
+      admin_state_up: true
+      name: NET_170
+      shared: true
+    type: OS::Neutron::Net
+  network_8:
+    properties:
+      admin_state_up: true
+      name: NET_166
+      shared: true
+    type: OS::Neutron::Net
+  network_9:
+    properties:
+      admin_state_up: true
+      name: NET_167
+      shared: true
+    type: OS::Neutron::Net
+  security_group_0:
+    properties:
+      description: Default security group
+      name: _default
+      rules:
+      - direction: ingress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+      - direction: egress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+    type: OS::Neutron::SecurityGroup
+  security_group_1:
+    properties:
+      description: Default security group
+      name: _default
+      rules:
+      - direction: egress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+      - direction: ingress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+    type: OS::Neutron::SecurityGroup
+  subnet_0:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.254
+        start: 10.147.32.130
+      cidr: 10.147.32.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_167
+      network_id:
+        get_resource: network_9
+    type: OS::Neutron::Subnet
+  subnet_1:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.254
+        start: 10.147.32.130
+      cidr: 10.147.32.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_167
+      network_id:
+        get_resource: network_0
+    type: OS::Neutron::Subnet
+  subnet_2:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.126
+        start: 10.147.32.2
+      cidr: 10.147.32.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_166
+      network_id:
+        get_resource: network_8
+    type: OS::Neutron::Subnet
+  subnet_3:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.126
+        start: 10.147.32.2
+      cidr: 10.147.32.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_166
+      network_id:
+        get_resource: network_2
+    type: OS::Neutron::Subnet
+  subnet_4:
+    properties:
+      allocation_pools:
+      - end: 10.147.34.126
+        start: 10.147.34.2
+      cidr: 10.147.34.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_170
+      network_id:
+        get_resource: network_5
+    type: OS::Neutron::Subnet
+  subnet_5:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.126
+        start: 10.147.33.2
+      cidr: 10.147.33.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_168
+      network_id:
+        get_resource: network_6
+    type: OS::Neutron::Subnet
+  subnet_6:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.126
+        start: 10.147.33.2
+      cidr: 10.147.33.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_168
+      network_id:
+        get_resource: network_3
+    type: OS::Neutron::Subnet
+  subnet_7:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.254
+        start: 10.147.33.130
+      cidr: 10.147.33.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_169
+      network_id:
+        get_resource: network_1
+    type: OS::Neutron::Subnet
+  subnet_8:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.254
+        start: 10.147.33.130
+      cidr: 10.147.33.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_169
+      network_id:
+        get_resource: network_4
+    type: OS::Neutron::Subnet
+  subnet_9:
+    properties:
+      allocation_pools:
+      - end: 10.147.34.126
+        start: 10.147.34.2
+      cidr: 10.147.34.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_170
+      network_id:
+        get_resource: network_7
+    type: OS::Neutron::Subnet
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_resource_group/MANIFEST.json b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_resource_group/MANIFEST.json
new file mode 100644
index 0000000..5220296
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_resource_group/MANIFEST.json
@@ -0,0 +1,17 @@
+{
+  "name": "vMME_Small",
+  "description": "HOT template to create 2 cinder volume attachment",
+  "version": "2013-05-23",
+  "data": [
+    {
+      "file": "nested.yml",
+      "type": "HEAT",
+      "isBase": "false"
+    },
+    {
+      "file": "addOn.yml",
+      "type": "HEAT",
+      "isBase": "false"
+    }
+  ]
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_resource_group/addOn.yml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_resource_group/addOn.yml
new file mode 100644
index 0000000..39c3474
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_resource_group/addOn.yml
@@ -0,0 +1,31 @@
+heat_template_version: 2013-05-23
+
+description: >
+  Version 2.0 02-09-2016 (Authors: John Doe, user PROD)
+
+parameters:
+  shared_security_group_id1:
+      type: string
+      description: network name of jsa log network
+  shared_security_group_id2:
+      type: string
+      description: network name of jsa log network
+  jsa_net_name:
+    type: string
+    description: network name of jsa log network
+  security_group_name:
+      type: string
+      label: security group name
+      description: the name of security group
+
+resources:
+  mvs_modules:
+    type: OS::Heat::ResourceGroup
+    properties:
+      count: 3
+      index_var: "%index%"
+      resource_def:
+        type: nested.yml
+        properties:
+          p1: { get_param: shared_security_group_id1}
+          p2: { get_param: shared_security_group_id2}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_resource_group/nested.yml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_resource_group/nested.yml
new file mode 100644
index 0000000..4614bdc
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_resource_group/nested.yml
@@ -0,0 +1,56 @@
+heat_template_version: 2013-05-23
+
+description: cmaui server template for vMMSC
+
+parameters:
+  p1:
+    type: string
+    description: UID of OAM network
+  p2:
+    type: string
+    description: UID of OAM network
+  net:
+      type: string
+      description: UID of OAM network
+  cmaui_names:
+    type: comma_delimited_list
+    description: CMAUI1, CMAUI2 server names
+  cmaui_image:
+    type: string
+    description: Image for CMAUI server
+  availability_zone_0:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  cmaui_flavor:
+    type: string
+    description: Flavor for CMAUI server
+
+resources:
+
+  cmaui_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: net }
+      fixed_ips: [{"ip_address": {get_param: [cmaui_oam_ips, 0]}}]
+      security_groups: [{get_param: p1}, {get_param: p2}]
+      replacement_policy: AUTO
+
+  cmaui_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: net }
+      fixed_ips: [{"ip_address": {get_param: [cmaui_oam_ips, 0]}}]
+      security_groups: [{get_param: p1}]
+      replacement_policy: AUTO
+
+  server_cmaui:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [cmaui_names, 0]}
+      image: { get_param: cmaui_image }
+      availability_zone: { get_param: availability_zone_0 }
+      flavor: { get_param: cmaui_flavor }
+      networks:
+      - port: { get_resource: cmaui_port_1 }
+      - port: { get_resource: cmaui_port_2 }
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_volume/MANIFEST.json b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_volume/MANIFEST.json
new file mode 100644
index 0000000..1e2b0c7
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_volume/MANIFEST.json
@@ -0,0 +1,16 @@
+{
+    "name": "", 
+    "description": "", 
+    "data": [
+        {
+            "file": "hot_mobt_volume_attach_nested.yaml", 
+            "type": "HEAT_VOL", 
+            "isBase": "false"
+        }, 
+        {
+            "file": "base_mobt.yaml", 
+            "type": "HEAT", 
+            "isBase": "true"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_volume/base_mobt.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_volume/base_mobt.yaml
new file mode 100644
index 0000000..c3be156
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_volume/base_mobt.yaml
@@ -0,0 +1,26 @@
+heat_template_version: 2014-10-16
+
+description: heat template that creates additional MOBT nodes in stack
+
+parameters:
+  mobt_vol_count: 
+    type: number
+    label: MOBT OAM server count 
+    description: MOBT OAM server instance count 
+    default: 2 
+    constraints: 
+      - range: { min: 2, max: 2 }
+    
+resources:
+  server_volume_attach_group: 
+    type: OS::Heat::ResourceGroup
+    properties: 
+      count: { get_param: mobt_vol_count }
+      resource_def:
+       type: hot_mobt_volume_attach_nested.yaml
+       properties: 
+          mobt_vol_index: "%index%"
+          server_mobt_group_ids: { get_attr: [ server_mobt_group_data, mobt_server_adm_x_id ] }
+    update_policy: 
+      batch_create: 
+        max_batch_size: 1
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_volume/hot_mobt_volume_attach_nested.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_volume/hot_mobt_volume_attach_nested.yaml
new file mode 100644
index 0000000..8e6d07f
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/nested_volume/hot_mobt_volume_attach_nested.yaml
@@ -0,0 +1,28 @@
+heat_template_version: 2014-10-16
+
+description: nested heat template that associtate the cinder volumes to OAM nodes stack
+
+parameters:
+  mobt_volume_ids:
+    type: comma_delimited_list
+    label: MOBT OAM Cinder Volumes
+    description: MOBT OAM Cinder Volumes
+
+  server_mobt_group_ids:
+    type: comma_delimited_list
+    label: MOBT OAM Resource Group
+    description: MOBT OAM Resource Group
+
+  mobt_vol_index:
+    type: number
+    label: ADM volume index
+    description: ADM volume UUID in list 
+    
+resources:
+  mobt_adm_vol_attachment_x:
+    type: OS::Cinder::VolumeAttachment
+    properties:
+      volume_id: { get_param: [ mobt_volume_ids, get_param: mobt_vol_index ]}
+      mountpoint: /dev/vdb
+      instance_uuid: { get_param: [ server_mobt_group_ids, get_param: mobt_vol_index ]}
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/valid_tree/input/MANIFEST.json b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/valid_tree/input/MANIFEST.json
new file mode 100644
index 0000000..a4065d0
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/valid_tree/input/MANIFEST.json
@@ -0,0 +1,39 @@
+{
+    "data": [
+        {
+            "file": "validHeat.yaml",
+            "type": "HEAT",
+            "data": [
+                {
+                    "file": "hot-nimbus-oam_v1.0.env",
+                    "type": "HEAT_ENV"
+                },
+                {
+                    "file": "hot-nimbus-oam-volumes_v1.0",
+                    "type": "HEAT_VOL",
+                    "data": [{
+                        "file": "hot-nimbus-oam-volumes_v1.0.env",
+                        "type": "HEAT_ENV"
+                    }]
+                }
+            ]
+        }, 
+        {
+            "file": "mainValid.yaml",
+            "type": "HEAT",
+            "data": [
+                {
+                    "file": "hot-nimbus-oam-networks_v1.0",
+                    "type": "HEAT_NET"
+                }
+            ]
+        },
+        {
+            "file": "missingHeatFromZip.yaml.yaml",
+            "type": "HEAT"
+        }
+    ], 
+    "description": "RXAEmleoRDWLeWVvmXUJxDKCItgjkMEXuKJcUWyVUZrCUiMzZSyHPzhqLcJSIUNBzohsIGXLBIwstuVDEuFtxuLIwWgCCdjprtvzruHIUKdVnCyifJQUJjqSCoKKKyVaWFTFKzHNhTZNlZTYaMKGEpIMXOpIxSyTZZCgVsGkItQelBbFVrmCltTgkuppYMrEfvwqNBLVRSGCucNwliWFZUuXloXBiZaqtodZjyFpqBNqhlpcrARmMpvLiz", 
+    "name": "FCTRQGcMevNngRDvECQYfiEXCYbGeAWRHdaGggLUgyOnssHAiU", 
+    "version": "2013-05-23"
+}
\ No newline at end of file
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/valid_tree/input/heat_missing_from_manifast.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/valid_tree/input/heat_missing_from_manifast.yaml
new file mode 100644
index 0000000..d5608ab
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/valid_tree/input/heat_missing_from_manifast.yaml
@@ -0,0 +1,250 @@
+### Heat Template ###
+description: Generated template
+heat_template_version: 2013-05-23
+parameters: {}
+resources:
+  network_0:
+    properties:
+      admin_state_up: true
+      name: NET_167
+      shared: true
+    type: OS::Neutron::Net
+  network_1:
+    properties:
+      admin_state_up: true
+      name: NET_169
+      shared: true
+    type: OS::Neutron::Net
+  network_2:
+    properties:
+      admin_state_up: true
+      name: NET_166
+      shared: true
+    type: OS::Neutron::Net
+  network_3:
+    properties:
+      admin_state_up: true
+      name: NET_168
+      shared: true
+    type: OS::Neutron::Net
+  network_4:
+    properties:
+      admin_state_up: true
+      name: NET_169
+      shared: true
+    type: OS::Neutron::Net
+  network_5:
+    properties:
+      admin_state_up: true
+      name: NET_170
+      shared: true
+    type: OS::Neutron::Net
+  network_6:
+    properties:
+      admin_state_up: true
+      name: NET_168
+      shared: true
+    type: OS::Neutron::Net
+  network_7:
+    properties:
+      admin_state_up: true
+      name: NET_170
+      shared: true
+    type: OS::Neutron::Net
+  network_8:
+    properties:
+      admin_state_up: true
+      name: NET_166
+      shared: true
+    type: OS::Neutron::Net
+  network_9:
+    properties:
+      admin_state_up: true
+      name: NET_167
+      shared: true
+    type: OS::Neutron::Net
+  security_group_0:
+    properties:
+      description: Default security group
+      name: _default
+      rules:
+      - direction: ingress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+      - direction: egress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+    type: OS::Neutron::SecurityGroup
+  security_group_1:
+    properties:
+      description: Default security group
+      name: _default
+      rules:
+      - direction: egress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+      - direction: ingress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+    type: OS::Neutron::SecurityGroup
+  subnet_0:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.254
+        start: 10.147.32.130
+      cidr: 10.147.32.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_167
+      network_id:
+        get_resource: network_9
+    type: OS::Neutron::Subnet
+  subnet_1:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.254
+        start: 10.147.32.130
+      cidr: 10.147.32.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_167
+      network_id:
+        get_resource: network_0
+    type: OS::Neutron::Subnet
+  subnet_2:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.126
+        start: 10.147.32.2
+      cidr: 10.147.32.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_166
+      network_id:
+        get_resource: network_8
+    type: OS::Neutron::Subnet
+  subnet_3:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.126
+        start: 10.147.32.2
+      cidr: 10.147.32.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_166
+      network_id:
+        get_resource: network_2
+    type: OS::Neutron::Subnet
+  subnet_4:
+    properties:
+      allocation_pools:
+      - end: 10.147.34.126
+        start: 10.147.34.2
+      cidr: 10.147.34.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_170
+      network_id:
+        get_resource: network_5
+    type: OS::Neutron::Subnet
+  subnet_5:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.126
+        start: 10.147.33.2
+      cidr: 10.147.33.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_168
+      network_id:
+        get_resource: network_6
+    type: OS::Neutron::Subnet
+  subnet_6:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.126
+        start: 10.147.33.2
+      cidr: 10.147.33.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_168
+      network_id:
+        get_resource: network_3
+    type: OS::Neutron::Subnet
+  subnet_7:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.254
+        start: 10.147.33.130
+      cidr: 10.147.33.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_169
+      network_id:
+        get_resource: network_1
+    type: OS::Neutron::Subnet
+  subnet_8:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.254
+        start: 10.147.33.130
+      cidr: 10.147.33.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_169
+      network_id:
+        get_resource: network_4
+    type: OS::Neutron::Subnet
+  subnet_9:
+    properties:
+      allocation_pools:
+      - end: 10.147.34.126
+        start: 10.147.34.2
+      cidr: 10.147.34.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_170
+      network_id:
+        get_resource: network_7
+    type: OS::Neutron::Subnet
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/valid_tree/input/mainValid.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/valid_tree/input/mainValid.yaml
new file mode 100644
index 0000000..318c8f1
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/valid_tree/input/mainValid.yaml
@@ -0,0 +1,250 @@
+### Heat Template ###
+description: Generated template
+heat_template_version: 2013-05-23
+parameters: {}
+resources:
+  network_0:
+    properties:
+      admin_state_up: true
+      name: NET_167
+      shared: true
+    type: OS::Neutron::Net
+  network_1:
+    properties:
+      admin_state_up: true
+      name: NET_169
+      shared: true
+    type: OS::Neutron::Net
+  network_2:
+    properties:
+      admin_state_up: true
+      name: NET_166
+      shared: true
+    type: OS::Neutron::Net
+  network_3:
+    properties:
+      admin_state_up: true
+      name: NET_168
+      shared: true
+    type: missingNested.yaml
+  network_4:
+    properties:
+      admin_state_up: true
+      name: { get_file: missing-artifact }
+      shared: true
+    type: OS::Neutron::Net
+  network_5:
+    properties:
+      admin_state_up: true
+      name: NET_170
+      shared: true
+    type: OS::Neutron::Net
+  network_6:
+    properties:
+      admin_state_up: true
+      name: NET_168
+      shared: true
+    type: OS::Neutron::Net
+  network_7:
+    properties:
+      admin_state_up: true
+      name: NET_170
+      shared: true
+    type: OS::Neutron::Net
+  network_8:
+    properties:
+      admin_state_up: true
+      name: NET_166
+      shared: true
+    type: OS::Neutron::Net
+  network_9:
+    properties:
+      admin_state_up: true
+      name: NET_167
+      shared: true
+    type: OS::Neutron::Net
+  security_group_0:
+    properties:
+      description: Default security group
+      name: _default
+      rules:
+      - direction: ingress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+      - direction: egress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+    type: OS::Neutron::SecurityGroup
+  security_group_1:
+    properties:
+      description: Default security group
+      name: _default
+      rules:
+      - direction: egress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+      - direction: ingress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+    type: OS::Neutron::SecurityGroup
+  subnet_0:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.254
+        start: 10.147.32.130
+      cidr: 10.147.32.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_167
+      network_id:
+        get_resource: network_9
+    type: OS::Neutron::Subnet
+  subnet_1:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.254
+        start: 10.147.32.130
+      cidr: 10.147.32.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_167
+      network_id:
+        get_resource: network_0
+    type: OS::Neutron::Subnet
+  subnet_2:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.126
+        start: 10.147.32.2
+      cidr: 10.147.32.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_166
+      network_id:
+        get_resource: network_8
+    type: OS::Neutron::Subnet
+  subnet_3:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.126
+        start: 10.147.32.2
+      cidr: 10.147.32.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_166
+      network_id:
+        get_resource: network_2
+    type: OS::Neutron::Subnet
+  subnet_4:
+    properties:
+      allocation_pools:
+      - end: 10.147.34.126
+        start: 10.147.34.2
+      cidr: 10.147.34.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_170
+      network_id:
+        get_resource: network_5
+    type: OS::Neutron::Subnet
+  subnet_5:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.126
+        start: 10.147.33.2
+      cidr: 10.147.33.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_168
+      network_id:
+        get_resource: network_6
+    type: OS::Neutron::Subnet
+  subnet_6:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.126
+        start: 10.147.33.2
+      cidr: 10.147.33.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_168
+      network_id:
+        get_resource: network_3
+    type: OS::Neutron::Subnet
+  subnet_7:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.254
+        start: 10.147.33.130
+      cidr: 10.147.33.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_169
+      network_id:
+        get_resource: network_1
+    type: OS::Neutron::Subnet
+  subnet_8:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.254
+        start: 10.147.33.130
+      cidr: 10.147.33.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_169
+      network_id:
+        get_resource: network_4
+    type: OS::Neutron::Subnet
+  subnet_9:
+    properties:
+      allocation_pools:
+      - end: 10.147.34.126
+        start: 10.147.34.2
+      cidr: 10.147.34.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_170
+      network_id:
+        get_resource: network_7
+    type: OS::Neutron::Subnet
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/valid_tree/input/validHeat.yaml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/valid_tree/input/validHeat.yaml
new file mode 100644
index 0000000..d5608ab
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/tree/valid_tree/input/validHeat.yaml
@@ -0,0 +1,250 @@
+### Heat Template ###
+description: Generated template
+heat_template_version: 2013-05-23
+parameters: {}
+resources:
+  network_0:
+    properties:
+      admin_state_up: true
+      name: NET_167
+      shared: true
+    type: OS::Neutron::Net
+  network_1:
+    properties:
+      admin_state_up: true
+      name: NET_169
+      shared: true
+    type: OS::Neutron::Net
+  network_2:
+    properties:
+      admin_state_up: true
+      name: NET_166
+      shared: true
+    type: OS::Neutron::Net
+  network_3:
+    properties:
+      admin_state_up: true
+      name: NET_168
+      shared: true
+    type: OS::Neutron::Net
+  network_4:
+    properties:
+      admin_state_up: true
+      name: NET_169
+      shared: true
+    type: OS::Neutron::Net
+  network_5:
+    properties:
+      admin_state_up: true
+      name: NET_170
+      shared: true
+    type: OS::Neutron::Net
+  network_6:
+    properties:
+      admin_state_up: true
+      name: NET_168
+      shared: true
+    type: OS::Neutron::Net
+  network_7:
+    properties:
+      admin_state_up: true
+      name: NET_170
+      shared: true
+    type: OS::Neutron::Net
+  network_8:
+    properties:
+      admin_state_up: true
+      name: NET_166
+      shared: true
+    type: OS::Neutron::Net
+  network_9:
+    properties:
+      admin_state_up: true
+      name: NET_167
+      shared: true
+    type: OS::Neutron::Net
+  security_group_0:
+    properties:
+      description: Default security group
+      name: _default
+      rules:
+      - direction: ingress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+      - direction: egress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+    type: OS::Neutron::SecurityGroup
+  security_group_1:
+    properties:
+      description: Default security group
+      name: _default
+      rules:
+      - direction: egress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+      - direction: ingress
+        ethertype: IPv4
+        remote_ip_prefix: 0.0.0.0/0
+    type: OS::Neutron::SecurityGroup
+  subnet_0:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.254
+        start: 10.147.32.130
+      cidr: 10.147.32.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_167
+      network_id:
+        get_resource: network_9
+    type: OS::Neutron::Subnet
+  subnet_1:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.254
+        start: 10.147.32.130
+      cidr: 10.147.32.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_167
+      network_id:
+        get_resource: network_0
+    type: OS::Neutron::Subnet
+  subnet_2:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.126
+        start: 10.147.32.2
+      cidr: 10.147.32.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_166
+      network_id:
+        get_resource: network_8
+    type: OS::Neutron::Subnet
+  subnet_3:
+    properties:
+      allocation_pools:
+      - end: 10.147.32.126
+        start: 10.147.32.2
+      cidr: 10.147.32.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_166
+      network_id:
+        get_resource: network_2
+    type: OS::Neutron::Subnet
+  subnet_4:
+    properties:
+      allocation_pools:
+      - end: 10.147.34.126
+        start: 10.147.34.2
+      cidr: 10.147.34.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_170
+      network_id:
+        get_resource: network_5
+    type: OS::Neutron::Subnet
+  subnet_5:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.126
+        start: 10.147.33.2
+      cidr: 10.147.33.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_168
+      network_id:
+        get_resource: network_6
+    type: OS::Neutron::Subnet
+  subnet_6:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.126
+        start: 10.147.33.2
+      cidr: 10.147.33.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_168
+      network_id:
+        get_resource: network_3
+    type: OS::Neutron::Subnet
+  subnet_7:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.254
+        start: 10.147.33.130
+      cidr: 10.147.33.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_169
+      network_id:
+        get_resource: network_1
+    type: OS::Neutron::Subnet
+  subnet_8:
+    properties:
+      allocation_pools:
+      - end: 10.147.33.254
+        start: 10.147.33.130
+      cidr: 10.147.33.128/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_169
+      network_id:
+        get_resource: network_4
+    type: OS::Neutron::Subnet
+  subnet_9:
+    properties:
+      allocation_pools:
+      - end: 10.147.34.126
+        start: 10.147.34.2
+      cidr: 10.147.34.0/25
+      dns_nameservers:
+      - 10.147.4.18
+      - 10.247.5.11
+      enable_dhcp: true
+      host_routes: []
+      ip_version: 4
+      name: NET_170
+      network_id:
+        get_resource: network_7
+    type: OS::Neutron::Subnet
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/emptyZip.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/emptyZip.zip
new file mode 100644
index 0000000..15cb0ec
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/emptyZip.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/missingManifestInZip.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/missingManifestInZip.zip
new file mode 100644
index 0000000..1d1e626
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/missingManifestInZip.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/710-ResourceGroup.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/710-ResourceGroup.zip
new file mode 100644
index 0000000..3bc8299
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/710-ResourceGroup.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/MMSC.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/MMSC.zip
new file mode 100644
index 0000000..8d8e669
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/MMSC.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/MNS OAM FW.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/MNS OAM FW.zip
new file mode 100644
index 0000000..d96a5b6
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/MNS OAM FW.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/VOTA.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/VOTA.zip
new file mode 100644
index 0000000..b224e3c
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/VOTA.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/base_module_mns_oam.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/base_module_mns_oam.zip
new file mode 100644
index 0000000..6fa54ce
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/base_module_mns_oam.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/cmd-frwl-v302.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/cmd-frwl-v302.zip
new file mode 100644
index 0000000..e169a8c
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/cmd-frwl-v302.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/GWv12.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/GWv12.zip
new file mode 100644
index 0000000..cbf0adf
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/GWv12.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/MNS OAM FW fix.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/MNS OAM FW fix.zip
new file mode 100644
index 0000000..6dfb222
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/MNS OAM FW fix.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/base_module_mns_oam_fixed.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/base_module_mns_oam_fixed.zip
new file mode 100644
index 0000000..5c25590
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/base_module_mns_oam_fixed.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/cmd-frwl-v302.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/cmd-frwl-v302.zip
new file mode 100644
index 0000000..02ce760
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/cmd-frwl-v302.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/vDBE_fix_with_warr.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/vDBE_fix_with_warr.zip
new file mode 100644
index 0000000..3ecde1b
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/vDBE_fix_with_warr.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/vDNS.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/vDNS.zip
new file mode 100644
index 0000000..0bd8efb
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/noError/vDNS.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/segw_heat_c3-base.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/segw_heat_c3-base.zip
new file mode 100644
index 0000000..cfc49b0
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/segw_heat_c3-base.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vDBE.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vDBE.zip
new file mode 100644
index 0000000..10ee113
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vDBE.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vDNS.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vDNS.zip
new file mode 100644
index 0000000..c5fcf72
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vDNS.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vDNS_21_8.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vDNS_21_8.zip
new file mode 100644
index 0000000..c5fcf72
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vDNS_21_8.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vProb.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vProb.zip
new file mode 100644
index 0000000..86472e2
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vProb.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vProbe_FE_081816.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vProbe_FE_081816.zip
new file mode 100644
index 0000000..578c561
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vProbe_FE_081816.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vid_test_pcrf_base_template.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vid_test_pcrf_base_template.zip
new file mode 100644
index 0000000..49c16f6
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/various/vid_test_pcrf_base_template.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/zipFileWithFolder.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/zipFileWithFolder.zip
new file mode 100644
index 0000000..9d2fb1e
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/validation/zips/zipFileWithFolder.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/emptyComposition.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/emptyComposition.zip
new file mode 100644
index 0000000..76b3bfd
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/emptyComposition.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/emptyZip.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/emptyZip.zip
new file mode 100644
index 0000000..15cb0ec
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/emptyZip.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/fullComposition.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/fullComposition.zip
new file mode 100644
index 0000000..027f2c0
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/fullComposition.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/invalidTypes.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/invalidTypes.zip
new file mode 100644
index 0000000..5addd97
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/invalidTypes.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/legalUpload.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/legalUpload.zip
new file mode 100644
index 0000000..b4396f8
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/legalUpload.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/legalUpload2.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/legalUpload2.zip
new file mode 100644
index 0000000..1f264c3
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/legalUpload2.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/missingYml.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/missingYml.zip
new file mode 100644
index 0000000..5bc0bea
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/missingYml.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/nimbus.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/nimbus.zip
new file mode 100644
index 0000000..000b154
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/nimbus.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/vDNS.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/vDNS.zip
new file mode 100644
index 0000000..c5fcf72
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/vDNS.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/withoutManifest.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/withoutManifest.zip
new file mode 100644
index 0000000..6b52cf6
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/withoutManifest.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/zipFileWithFolder.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/zipFileWithFolder.zip
new file mode 100644
index 0000000..9d2fb1e
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/vspmanager/zips/zipFileWithFolder.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withNetwork/MANIFEST.json b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withNetwork/MANIFEST.json
new file mode 100644
index 0000000..3d7004f
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withNetwork/MANIFEST.json
@@ -0,0 +1,21 @@
+{
+  "name": "hot-mog",
+  "description": "HOT template to create hot mog server",
+  "version": "2013-05-23",
+  "data": [
+    {
+      "file": "hot-mog-0108-bs1271.yml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "hot-mog-0108-bs1271.env",
+          "type": "HEAT_ENV"
+        }
+      ]
+    },
+    {
+      "file": "network.yml",
+      "type": "HEAT_NET"
+    }
+  ]
+}
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withNetwork/hot-mog-0108-bs1271.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withNetwork/hot-mog-0108-bs1271.env
new file mode 100644
index 0000000..407bc8d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withNetwork/hot-mog-0108-bs1271.env
@@ -0,0 +1,60 @@
+parameters:
+  pd_server_names: ZRDM1MOGX01MPD001,ZRDM1MOGX01MPD002
+  pd_image_name: MOG_BASE_8.0
+  pd_flavor_name: m3.xlarge
+  oam_server_names: ZRDM1MOGX01OAM001,ZRDM1MOGX01OAM002
+  oam_image_name: MOG_BASE_8.0
+  oam_flavor_name: m3.xlarge
+  sm_server_names: ZRDM1MOGX01MSM001,ZRDM1MOGX01MSM002
+  sm_image_name: MOG_BASE_8.0
+  sm_flavor_name: m2.xlarge4
+  ps_server_names: ZRDM1MOGX01MPS001,ZRDM1MOGX01MPS002,ZRDM1MOGX01MPS003,ZRDM1MOGX01MPS004
+  ps_image_name: MOG_BASE_8.0
+  ps_flavor_name: m3.xlarge
+  cm_server_names: ZRDM1MOGX01MCM001
+  cm_image_name: MOG_BASE_8.0
+  cm_flavor_name: m3.xlarge
+  availabilityzone_name: nova
+  oam_net_name: oam_protected_net_0
+  oam_net_ips: 107.250.172.213,107.250.172.214,107.250.172.215,107.250.172.216,107.250.172.217
+  #internet_net_name: dmz_protected_net_0
+  #internet_net_ips: 107.239.53.4,107.239.53.5
+ # internet_net_floating_ip: 107.239.53.6
+  sl_net_name: exn_protected_net_0
+  sl_net_ips: 107.239.45.4,107.239.45.5
+  sl_net_floating_ip: 107.239.45.6
+  repl_net_name: cor_direct_net_0
+  repl_net_ips: 107.239.33.57,107.239.33.58
+  rx_net_name: cor_direct_net_1
+  rx_net_ips: 107.239.34.3,107.239.34.4
+  rx_net_floating_ip: 107.239.34.5
+  ran_net_name: gn_direct_net_0
+  ran_net_ips: 107.239.36.3,107.239.36.4
+  ran_net_floating_ip: 107.239.36.5
+  dummy_net_name_0: mog_dummy_0
+  dummy_net_start_0: 169.254.1.4
+  dummy_net_end_0: 169.254.1.254
+  dummy_net_cidr_0: 169.254.1.0/24
+  dummy_net_netmask_0: 255.255.255.0
+  dummy_net_name_1: mog_dummy_1
+  dummy_net_start_1: 169.254.2.4
+  dummy_net_end_1: 169.254.2.254
+  dummy_net_cidr_1: 169.254.2.0/24
+  dummy_net_netmask_1: 255.255.255.0
+  csb_net_name: int_mog_csb_net
+  csb_net_ips: 172.26.0.10,172.26.0.11,172.26.0.12,172.26.0.13,172.26.0.14,172.26.0.15,172.26.0.16,172.26.0.17,172.26.0.18,172.26.0.19,172.26.0.20
+  csb_net_start: 172.26.0.1
+  csb_net_end: 172.26.0.254
+  csb_net_cidr: 172.26.0.0/24
+  csb_net_netmask: 255.255.255.0
+  security_group_name: mog_security_group
+  mog_swift_container: http://10.147.38.210:8080/v1/AUTH_8e501b8121f34a6eaaf526d3305985cc/mogtestcontainer
+  mog_script_dir: /root
+  mog_script_name: http://10.147.38.210:8080/v1/AUTH_8e501b8121f34a6eaaf526d3305985cc/mogtestcontainer/mog-cloudinit.sh
+  mog_parameter_name: http://10.147.38.210:8080/v1/AUTH_8e501b8121f34a6eaaf526d3305985cc/mogtestcontainer
+  cluster-manager-vol-1: 43ccf5ba-2d50-427b-a38f-e8c7d8670eee
+  session-manager-vol-1: 49201898-333d-4c88-b58d-cf573b091633
+  session-manager-vol-2: 4c35b5f1-ce99-4220-a6e2-cda6e2d713a0
+  oam-vol-1: 0a7fcd9e-2624-401d-ac21-b0191f85ec77
+  oam-vol-2: 6d169cb6-6ddc-41dc-920c-2839898a2924
+  cluster-manager-vol-2: 6f92e211-2d61-487d-8f84-d2d00cea3698
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withNetwork/hot-mog-0108-bs1271.yml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withNetwork/hot-mog-0108-bs1271.yml
new file mode 100644
index 0000000..f069d4d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withNetwork/hot-mog-0108-bs1271.yml
@@ -0,0 +1,733 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates MOG stack
+
+parameters:
+  pd_server_names:
+    type: comma_delimited_list
+    label: PD server names
+    description: name of the PD instance
+  pd_image_name:
+    type: string
+    label: image name
+    description: PD image name
+  pd_flavor_name:
+    type: string
+    label: PD flavor name
+    description: flavor name of PD instance
+  oam_server_names:
+    type: comma_delimited_list
+    label: OAM server names
+    description: name of the OAM instance
+  oam_image_name:
+    type: string
+    label: image name
+    description: OAM image name
+  oam_flavor_name:
+    type: string
+    label: OAM flavor name
+    description: flavor name of OAM instance
+  sm_server_names:
+    type: comma_delimited_list
+    label: SM server names
+    description: name of the SM instance
+  sm_image_name:
+    type: string
+    label: image name
+    description: SM image name
+  sm_flavor_name:
+    type: string
+    label: SM flavor name
+    description: flavor name of SM instance
+  ps_server_names:
+    type: comma_delimited_list
+    label: PS server names
+    description: name of the PS instance
+  ps_image_name:
+    type: string
+    label: PS image name
+    description: PS image name
+  ps_flavor_name:
+    type: string
+    label: PS flavor name
+    description: flavor name of PS instance
+  cm_server_names:
+    type: comma_delimited_list
+    label: CM server names
+    description: name of the CM instance
+  cm_image_name:
+    type: string
+    label: image name
+    description: CM image name
+  cm_flavor_name:
+    type: string
+    label: CM flavor name
+    description: flavor name of CM instance
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  oam_net_name:
+    type: string
+    label: oam network name
+    description: name of the oam network
+  oam_net_ips:
+    type: comma_delimited_list
+    label: internet network ips
+    description: ip of the OAM network
+ # internet_net_name:
+ #   type: string
+ #   label: internet network name
+ #   description: id of the internet network
+ # internet_net_ips:
+ #   type: comma_delimited_list
+ #   label: internet network ips
+ #   description: ip of the internet network
+ # internet_net_floating_ip:
+ #   type: string
+ #   label: mog internet virtual ip
+ #   description: mog internet virtual ip
+  sl_net_name:
+    type: string
+    label: silver lining network name
+    description: id of the sl network
+  sl_net_ips:
+    type: comma_delimited_list
+    label: silver lining network ips
+    description: ips of the sl network
+  sl_net_floating_ip:
+    type: string
+    label: mog sl net virtual ip
+    description: mog sl net virtual ip
+  repl_net_name:
+    type: string
+    label: Replication network name
+    description: name of the replication network
+  repl_net_ips:
+    type: comma_delimited_list
+    label: repl network ips
+    description: ips of repl network
+  rx_net_name:
+    type: string
+    label: Rx network name
+    description: Rx network name
+  rx_net_ips:
+    type: comma_delimited_list
+    label: Rx network ips
+    description: Rx network ips
+  rx_net_floating_ip:
+    type: string
+    label: mog rx net virtual ip
+    description: mog rx net virtual ip
+  ran_net_name:
+    type: string
+    label: RAN network name
+    description: RAN network name
+  ran_net_ips:
+    type: comma_delimited_list
+    label: RAN network ips
+    description: RAN network ip
+  ran_net_floating_ip:
+    type: string
+    label: mog ran net virtual ip
+    description: mog ran net virtual ip
+  csb_net_name:
+    type: string
+    label: csb internal network name
+    description: csb internal network name
+  csb_net_start:
+    type: string
+    label: csb internal start
+    description: csb internal start
+  csb_net_end:
+    type: string
+    label: csb internal end
+    description: csb internal end
+  csb_net_cidr:
+    type: string
+    label: csb ineternal cidr
+    description: csb internal cidr
+  csb_net_netmask:
+    type: string
+    description: CSB internal network subnet mask
+  csb_net_ips:
+    type: comma_delimited_list
+    description: mog_csb_net IP addresses
+  dummy_net_name_0:
+    type: string
+    label: csb internal network name
+    description: csb internal network name
+  dummy_net_start_0:
+    type: string
+    label: csb internal start
+    description: csb internal start
+  dummy_net_end_0:
+    type: string
+    label: csb internal end
+    description: csb internal end
+  dummy_net_cidr_0:
+    type: string
+    label: csb ineternal cidr
+    description: csb internal cidr
+  dummy_net_netmask_0:
+    type: string
+    description: CSB internal network subnet mask
+  dummy_net_name_1:
+    type: string
+    label: csb internal network name
+    description: csb internal network name
+  dummy_net_start_1:
+    type: string
+    label: csb internal start
+    description: csb internal start
+  dummy_net_end_1:
+    type: string
+    label: csb internal end
+    description: csb internal end
+  dummy_net_cidr_1:
+    type: string
+    label: csb ineternal cidr
+    description: csb internal cidr
+  dummy_net_netmask_1:
+    type: string
+    description: CSB internal network subnet mask
+
+  security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  cluster-manager-vol-1:
+    type: string
+    label: mog-cm-vol-1
+    description: Cluster Manager volume 1
+  session-manager-vol-1:
+    type: string
+    label: mog-sm-vol-1
+    description: Session Manager volume 1
+  session-manager-vol-2:
+    type: string
+    label: mog-sm-vol-2
+    description: Session Manager volume 2
+  oam-vol-1:
+    type: string
+    label: mog-oam-vol-1
+    description: OAM volume 1
+  oam-vol-2:
+    type: string
+    label: mog-oam-vol-2
+    description: OAM volume 2
+  mog_swift_container:
+    type: string
+    label: mog Config URL
+    description: Config URL
+  mog_script_dir:
+    type: string
+    label: mog Config script directory
+    description: Config script directory
+  mog_script_name:
+    type: string
+    label: mog Config script name
+    description: Config script name
+  mog_parameter_name:
+    type: string
+    label: mog script parameter name
+    description: Config script parameter csv file name
+  cluster-manager-vol-2:
+    type: string
+    label: mog-cm-vol-2
+    description: Cluster Manager volume 2 with ISO image
+
+resources:
+  mog_security_group:
+    type: OS::Neutron::SecurityGroup
+    properties:
+      description: mog security group
+      name: {get_param: security_group_name}
+      rules: [{"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": egress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0}
+              ]
+
+  csb_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: csb_net_name}
+
+  csb_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: csb_net_name}
+      network_id: { get_resource: csb_net }
+      cidr: { get_param: csb_net_cidr }
+      allocation_pools: [{"start": {get_param: csb_net_start}, "end": {get_param: csb_net_end}}]
+      enable_dhcp: true
+
+  dummy_net_0:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: dummy_net_name_0}
+
+  dummy_ip_subnet_0:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: dummy_net_name_0}
+      network_id: { get_resource: dummy_net_0 }
+      cidr: { get_param: dummy_net_cidr_0 }
+      allocation_pools: [{"start": {get_param: dummy_net_start_0}, "end": {get_param: dummy_net_end_0}}]
+      enable_dhcp: true
+
+  dummy_net_1:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: dummy_net_name_1}
+
+  dummy_ip_subnet_1:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: dummy_net_name_1}
+      network_id: { get_resource: dummy_net_1 }
+      cidr: { get_param: dummy_net_cidr_1 }
+      allocation_pools: [{"start": {get_param: dummy_net_start_1}, "end": {get_param: dummy_net_end_1}}]
+      enable_dhcp: true
+
+
+  mogconfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: ungrouped
+      config:
+        str_replace:
+          template: |
+            #!/bin/bash
+            wget -P script_dir swift_container/script_name
+            wget -P script_dir swift_container/parameter_name
+            chmod 755 script_dir/script_name
+            script_dir/script_name
+          params:
+            swift_container: {get_param: mog_swift_container}
+            script_dir: {get_param: mog_script_dir}
+            script_name: {get_param: mog_script_name}
+            #parameter_name: {get_param: mog_parameter_name}
+
+
+  servergroup_mog01:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies:
+        - anti-affinity
+  server_pd_01:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [pd_server_names, 0]}
+      image: {get_param: pd_image_name}
+      flavor: {get_param: pd_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: pd01_port_0}
+        - port: {get_resource: pd01_port_1}
+        - port: {get_resource: pd01_port_2}
+        - port: {get_resource: pd01_port_3}
+        - port: {get_resource: pd01_port_4}
+        - port: {get_resource: pd01_port_5}
+        - port: {get_resource: pd01_port_6}
+     #   - port: {get_resource: pd01_port_7}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog01}}
+      user_data_format:  RAW
+
+
+  pd01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+  pd01_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [oam_net_ips, 0]}}]
+      security_groups: [{get_resource: mog_security_group}]
+  pd01_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_0}
+      security_groups: [{get_resource: mog_security_group}]
+  pd01_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: rx_net_name}
+      fixed_ips: [{"ip_address": {get_param: [rx_net_ips, 0]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: rx_net_floating_ip} }]
+      security_groups: [{get_resource: mog_security_group}]
+  pd01_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_1}
+      security_groups: [{get_resource: mog_security_group}]
+  pd01_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: ran_net_name}
+      fixed_ips: [{"ip_address": {get_param: [ran_net_ips, 0]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: ran_net_floating_ip} }]
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd01_port_6:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: sl_net_name}
+      fixed_ips: [{"ip_address": {get_param: [sl_net_ips, 0]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: sl_net_floating_ip}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+ # pd01_port_7:
+ #j   type: OS::Neutron::Port
+ #   properties:
+ #     network: {get_param: internet_net_name}
+ #     fixed_ips: [{"ip_address": {get_param: [internet_net_ips, 0]}}]
+ #     allowed_address_pairs: [{"ip_address": {get_param: internet_net_floating_ip} }]
+ #    security_groups: [{get_resource: mog_security_group}]
+
+  server_pd_02:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [pd_server_names, 1]}
+      image: {get_param: pd_image_name}
+      flavor: {get_param: pd_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: pd02_port_0}
+        - port: {get_resource: pd02_port_1}
+        - port: {get_resource: pd01_port_2}
+        - port: {get_resource: pd01_port_3}
+        - port: {get_resource: pd02_port_4}
+        - port: {get_resource: pd02_port_5}
+        - port: {get_resource: pd02_port_6}
+      #  - port: {get_resource: pd02_port_7}
+
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog01}}
+      user_data_format:  RAW
+
+  pd02_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [oam_net_ips, 1]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_0}
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: rx_net_name}
+      fixed_ips: [{"ip_address": {get_param: [rx_net_ips, 1]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: rx_net_floating_ip} }]
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_1}
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: ran_net_name}
+      fixed_ips: [{"ip_address": {get_param: [ran_net_ips, 1]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: ran_net_floating_ip} }]
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_6:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: sl_net_name}
+      fixed_ips: [{"ip_address": {get_param: [sl_net_ips, 1]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: sl_net_floating_ip}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+ # pd02_port_7:
+ #   type: OS::Neutron::Port
+ #   properties:
+    #  network: {get_param: internet_net_name}
+    #  fixed_ips: [{"ip_address": {get_param: [internet_net_ips, 1]}}]
+   #   allowed_address_pairs: [{"ip_address": {get_param: internet_net_floating_ip} }]
+   #   security_groups: [{get_resource: mog_security_group}]
+
+  servergroup_mog02:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies:
+        - anti-affinity
+  server_oam01:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [oam_server_names, 0]}
+      image: {get_param: oam_image_name}
+      flavor: {get_param: oam_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: oam01_port_0}
+        - port: {get_resource: oam01_port_1}
+#      block_device_mapping:
+#        - device_name: vdd
+#          volume_id: { get_param: oam-vol-1 }
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog02}}
+      user_data_format:  RAW
+
+  oam01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  oam01_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [oam_net_ips, 2]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+
+  server_oam02:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [oam_server_names, 1]}
+      image: {get_param: oam_image_name}
+      flavor: {get_param: oam_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: oam02_port_0}
+        - port: {get_resource: oam02_port_1}
+#      block_device_mapping:
+#        - device_name: vdd
+#          volume_id: { get_param: oam-vol-2 }
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog02}}
+      user_data_format:  RAW
+
+  oam02_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  oam02_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [oam_net_ips, 3]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+
+  server_sm01:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [sm_server_names, 0]}
+      image: {get_param: sm_image_name}
+      flavor: {get_param: sm_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: sm01_port_0}
+        - port: {get_resource: sm01_port_1}
+#      block_device_mapping:
+#        - device_name: vdd
+#          volume_id: { get_param: session-manager-vol-1 }
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog02}}
+      user_data_format:  RAW
+
+  sm01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  sm01_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_0}
+      security_groups: [{get_resource: mog_security_group}]
+
+  sm01_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: repl_net_name}
+      fixed_ips: [{"ip_address": {get_param: [repl_net_ips, 0]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+  server_sm02:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [sm_server_names, 1]}
+      image: {get_param: sm_image_name}
+      flavor: {get_param: sm_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+#      block_device_mapping:
+#        - device_name: vdd
+#          volume_id: { get_param: session-manager-vol-2 }
+      networks:
+        - port: {get_resource: sm02_port_0}
+        - port: {get_resource: sm02_port_1}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog02}}
+      user_data_format:  RAW
+
+  sm02_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  sm02_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_0}
+      security_groups: [{get_resource: mog_security_group}]
+
+  sm02_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: repl_net_name}
+      fixed_ips: [{"ip_address": {get_param: [repl_net_ips, 1]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+  servergroup_mog03:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies:
+        - anti-affinity
+  server_ps01:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [ps_server_names, 0]}
+      image: {get_param: ps_image_name}
+      flavor: {get_param: ps_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: ps01_port_0}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog03}}
+      user_data_format:  RAW
+
+  ps01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  server_ps02:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [ps_server_names, 1]}
+      image: {get_param: ps_image_name}
+      flavor: {get_param: ps_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: ps02_port_0}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog03}}
+      user_data_format:  RAW
+
+  ps02_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  server_ps03:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: [ps_server_names, 2]}
+      image: {get_param: ps_image_name}
+      flavor: {get_param: ps_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: ps03_port_0}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog03}}
+      user_data_format:  RAW
+
+  ps03_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  server_ps04:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: [ps_server_names, 3]}
+      image: {get_param: ps_image_name}
+      flavor: {get_param: ps_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: ps04_port_0}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog03}}
+      user_data_format:  RAW
+
+  ps04_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  server_cm01:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [cm_server_names, 0]}
+      image: {get_param: cm_image_name}
+      flavor: {get_param: cm_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: cm01_port_0}
+        - port: {get_resource: cm01_port_1}
+#      block_device_mapping:
+#        - device_name: vdd
+#          volume_id: { get_param: cluster-manager-vol-2 }
+#        - device_name: vde
+#          volume_id: { get_param: cluster-manager-vol-1 }
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog03}}
+      user_data_format:  RAW
+
+  cm01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      fixed_ips: [{"ip_address": {get_param: [csb_net_ips, 10]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+  cm01_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [oam_net_ips, 4]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withNetwork/network.yml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withNetwork/network.yml
new file mode 100644
index 0000000..f069d4d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withNetwork/network.yml
@@ -0,0 +1,733 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates MOG stack
+
+parameters:
+  pd_server_names:
+    type: comma_delimited_list
+    label: PD server names
+    description: name of the PD instance
+  pd_image_name:
+    type: string
+    label: image name
+    description: PD image name
+  pd_flavor_name:
+    type: string
+    label: PD flavor name
+    description: flavor name of PD instance
+  oam_server_names:
+    type: comma_delimited_list
+    label: OAM server names
+    description: name of the OAM instance
+  oam_image_name:
+    type: string
+    label: image name
+    description: OAM image name
+  oam_flavor_name:
+    type: string
+    label: OAM flavor name
+    description: flavor name of OAM instance
+  sm_server_names:
+    type: comma_delimited_list
+    label: SM server names
+    description: name of the SM instance
+  sm_image_name:
+    type: string
+    label: image name
+    description: SM image name
+  sm_flavor_name:
+    type: string
+    label: SM flavor name
+    description: flavor name of SM instance
+  ps_server_names:
+    type: comma_delimited_list
+    label: PS server names
+    description: name of the PS instance
+  ps_image_name:
+    type: string
+    label: PS image name
+    description: PS image name
+  ps_flavor_name:
+    type: string
+    label: PS flavor name
+    description: flavor name of PS instance
+  cm_server_names:
+    type: comma_delimited_list
+    label: CM server names
+    description: name of the CM instance
+  cm_image_name:
+    type: string
+    label: image name
+    description: CM image name
+  cm_flavor_name:
+    type: string
+    label: CM flavor name
+    description: flavor name of CM instance
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  oam_net_name:
+    type: string
+    label: oam network name
+    description: name of the oam network
+  oam_net_ips:
+    type: comma_delimited_list
+    label: internet network ips
+    description: ip of the OAM network
+ # internet_net_name:
+ #   type: string
+ #   label: internet network name
+ #   description: id of the internet network
+ # internet_net_ips:
+ #   type: comma_delimited_list
+ #   label: internet network ips
+ #   description: ip of the internet network
+ # internet_net_floating_ip:
+ #   type: string
+ #   label: mog internet virtual ip
+ #   description: mog internet virtual ip
+  sl_net_name:
+    type: string
+    label: silver lining network name
+    description: id of the sl network
+  sl_net_ips:
+    type: comma_delimited_list
+    label: silver lining network ips
+    description: ips of the sl network
+  sl_net_floating_ip:
+    type: string
+    label: mog sl net virtual ip
+    description: mog sl net virtual ip
+  repl_net_name:
+    type: string
+    label: Replication network name
+    description: name of the replication network
+  repl_net_ips:
+    type: comma_delimited_list
+    label: repl network ips
+    description: ips of repl network
+  rx_net_name:
+    type: string
+    label: Rx network name
+    description: Rx network name
+  rx_net_ips:
+    type: comma_delimited_list
+    label: Rx network ips
+    description: Rx network ips
+  rx_net_floating_ip:
+    type: string
+    label: mog rx net virtual ip
+    description: mog rx net virtual ip
+  ran_net_name:
+    type: string
+    label: RAN network name
+    description: RAN network name
+  ran_net_ips:
+    type: comma_delimited_list
+    label: RAN network ips
+    description: RAN network ip
+  ran_net_floating_ip:
+    type: string
+    label: mog ran net virtual ip
+    description: mog ran net virtual ip
+  csb_net_name:
+    type: string
+    label: csb internal network name
+    description: csb internal network name
+  csb_net_start:
+    type: string
+    label: csb internal start
+    description: csb internal start
+  csb_net_end:
+    type: string
+    label: csb internal end
+    description: csb internal end
+  csb_net_cidr:
+    type: string
+    label: csb ineternal cidr
+    description: csb internal cidr
+  csb_net_netmask:
+    type: string
+    description: CSB internal network subnet mask
+  csb_net_ips:
+    type: comma_delimited_list
+    description: mog_csb_net IP addresses
+  dummy_net_name_0:
+    type: string
+    label: csb internal network name
+    description: csb internal network name
+  dummy_net_start_0:
+    type: string
+    label: csb internal start
+    description: csb internal start
+  dummy_net_end_0:
+    type: string
+    label: csb internal end
+    description: csb internal end
+  dummy_net_cidr_0:
+    type: string
+    label: csb ineternal cidr
+    description: csb internal cidr
+  dummy_net_netmask_0:
+    type: string
+    description: CSB internal network subnet mask
+  dummy_net_name_1:
+    type: string
+    label: csb internal network name
+    description: csb internal network name
+  dummy_net_start_1:
+    type: string
+    label: csb internal start
+    description: csb internal start
+  dummy_net_end_1:
+    type: string
+    label: csb internal end
+    description: csb internal end
+  dummy_net_cidr_1:
+    type: string
+    label: csb ineternal cidr
+    description: csb internal cidr
+  dummy_net_netmask_1:
+    type: string
+    description: CSB internal network subnet mask
+
+  security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  cluster-manager-vol-1:
+    type: string
+    label: mog-cm-vol-1
+    description: Cluster Manager volume 1
+  session-manager-vol-1:
+    type: string
+    label: mog-sm-vol-1
+    description: Session Manager volume 1
+  session-manager-vol-2:
+    type: string
+    label: mog-sm-vol-2
+    description: Session Manager volume 2
+  oam-vol-1:
+    type: string
+    label: mog-oam-vol-1
+    description: OAM volume 1
+  oam-vol-2:
+    type: string
+    label: mog-oam-vol-2
+    description: OAM volume 2
+  mog_swift_container:
+    type: string
+    label: mog Config URL
+    description: Config URL
+  mog_script_dir:
+    type: string
+    label: mog Config script directory
+    description: Config script directory
+  mog_script_name:
+    type: string
+    label: mog Config script name
+    description: Config script name
+  mog_parameter_name:
+    type: string
+    label: mog script parameter name
+    description: Config script parameter csv file name
+  cluster-manager-vol-2:
+    type: string
+    label: mog-cm-vol-2
+    description: Cluster Manager volume 2 with ISO image
+
+resources:
+  mog_security_group:
+    type: OS::Neutron::SecurityGroup
+    properties:
+      description: mog security group
+      name: {get_param: security_group_name}
+      rules: [{"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": egress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+              {"direction": ingress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0}
+              ]
+
+  csb_net:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: csb_net_name}
+
+  csb_ip_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: csb_net_name}
+      network_id: { get_resource: csb_net }
+      cidr: { get_param: csb_net_cidr }
+      allocation_pools: [{"start": {get_param: csb_net_start}, "end": {get_param: csb_net_end}}]
+      enable_dhcp: true
+
+  dummy_net_0:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: dummy_net_name_0}
+
+  dummy_ip_subnet_0:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: dummy_net_name_0}
+      network_id: { get_resource: dummy_net_0 }
+      cidr: { get_param: dummy_net_cidr_0 }
+      allocation_pools: [{"start": {get_param: dummy_net_start_0}, "end": {get_param: dummy_net_end_0}}]
+      enable_dhcp: true
+
+  dummy_net_1:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: dummy_net_name_1}
+
+  dummy_ip_subnet_1:
+    type: OS::Neutron::Subnet
+    properties:
+      name: {get_param: dummy_net_name_1}
+      network_id: { get_resource: dummy_net_1 }
+      cidr: { get_param: dummy_net_cidr_1 }
+      allocation_pools: [{"start": {get_param: dummy_net_start_1}, "end": {get_param: dummy_net_end_1}}]
+      enable_dhcp: true
+
+
+  mogconfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: ungrouped
+      config:
+        str_replace:
+          template: |
+            #!/bin/bash
+            wget -P script_dir swift_container/script_name
+            wget -P script_dir swift_container/parameter_name
+            chmod 755 script_dir/script_name
+            script_dir/script_name
+          params:
+            swift_container: {get_param: mog_swift_container}
+            script_dir: {get_param: mog_script_dir}
+            script_name: {get_param: mog_script_name}
+            #parameter_name: {get_param: mog_parameter_name}
+
+
+  servergroup_mog01:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies:
+        - anti-affinity
+  server_pd_01:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [pd_server_names, 0]}
+      image: {get_param: pd_image_name}
+      flavor: {get_param: pd_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: pd01_port_0}
+        - port: {get_resource: pd01_port_1}
+        - port: {get_resource: pd01_port_2}
+        - port: {get_resource: pd01_port_3}
+        - port: {get_resource: pd01_port_4}
+        - port: {get_resource: pd01_port_5}
+        - port: {get_resource: pd01_port_6}
+     #   - port: {get_resource: pd01_port_7}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog01}}
+      user_data_format:  RAW
+
+
+  pd01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+  pd01_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [oam_net_ips, 0]}}]
+      security_groups: [{get_resource: mog_security_group}]
+  pd01_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_0}
+      security_groups: [{get_resource: mog_security_group}]
+  pd01_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: rx_net_name}
+      fixed_ips: [{"ip_address": {get_param: [rx_net_ips, 0]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: rx_net_floating_ip} }]
+      security_groups: [{get_resource: mog_security_group}]
+  pd01_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_1}
+      security_groups: [{get_resource: mog_security_group}]
+  pd01_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: ran_net_name}
+      fixed_ips: [{"ip_address": {get_param: [ran_net_ips, 0]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: ran_net_floating_ip} }]
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd01_port_6:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: sl_net_name}
+      fixed_ips: [{"ip_address": {get_param: [sl_net_ips, 0]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: sl_net_floating_ip}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+ # pd01_port_7:
+ #j   type: OS::Neutron::Port
+ #   properties:
+ #     network: {get_param: internet_net_name}
+ #     fixed_ips: [{"ip_address": {get_param: [internet_net_ips, 0]}}]
+ #     allowed_address_pairs: [{"ip_address": {get_param: internet_net_floating_ip} }]
+ #    security_groups: [{get_resource: mog_security_group}]
+
+  server_pd_02:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [pd_server_names, 1]}
+      image: {get_param: pd_image_name}
+      flavor: {get_param: pd_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: pd02_port_0}
+        - port: {get_resource: pd02_port_1}
+        - port: {get_resource: pd01_port_2}
+        - port: {get_resource: pd01_port_3}
+        - port: {get_resource: pd02_port_4}
+        - port: {get_resource: pd02_port_5}
+        - port: {get_resource: pd02_port_6}
+      #  - port: {get_resource: pd02_port_7}
+
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog01}}
+      user_data_format:  RAW
+
+  pd02_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [oam_net_ips, 1]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_0}
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: rx_net_name}
+      fixed_ips: [{"ip_address": {get_param: [rx_net_ips, 1]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: rx_net_floating_ip} }]
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_1}
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: ran_net_name}
+      fixed_ips: [{"ip_address": {get_param: [ran_net_ips, 1]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: ran_net_floating_ip} }]
+      security_groups: [{get_resource: mog_security_group}]
+
+  pd02_port_6:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: sl_net_name}
+      fixed_ips: [{"ip_address": {get_param: [sl_net_ips, 1]}}]
+      allowed_address_pairs: [{"ip_address": {get_param: sl_net_floating_ip}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+ # pd02_port_7:
+ #   type: OS::Neutron::Port
+ #   properties:
+    #  network: {get_param: internet_net_name}
+    #  fixed_ips: [{"ip_address": {get_param: [internet_net_ips, 1]}}]
+   #   allowed_address_pairs: [{"ip_address": {get_param: internet_net_floating_ip} }]
+   #   security_groups: [{get_resource: mog_security_group}]
+
+  servergroup_mog02:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies:
+        - anti-affinity
+  server_oam01:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [oam_server_names, 0]}
+      image: {get_param: oam_image_name}
+      flavor: {get_param: oam_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: oam01_port_0}
+        - port: {get_resource: oam01_port_1}
+#      block_device_mapping:
+#        - device_name: vdd
+#          volume_id: { get_param: oam-vol-1 }
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog02}}
+      user_data_format:  RAW
+
+  oam01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  oam01_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [oam_net_ips, 2]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+
+  server_oam02:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [oam_server_names, 1]}
+      image: {get_param: oam_image_name}
+      flavor: {get_param: oam_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: oam02_port_0}
+        - port: {get_resource: oam02_port_1}
+#      block_device_mapping:
+#        - device_name: vdd
+#          volume_id: { get_param: oam-vol-2 }
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog02}}
+      user_data_format:  RAW
+
+  oam02_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  oam02_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [oam_net_ips, 3]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+
+  server_sm01:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [sm_server_names, 0]}
+      image: {get_param: sm_image_name}
+      flavor: {get_param: sm_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: sm01_port_0}
+        - port: {get_resource: sm01_port_1}
+#      block_device_mapping:
+#        - device_name: vdd
+#          volume_id: { get_param: session-manager-vol-1 }
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog02}}
+      user_data_format:  RAW
+
+  sm01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  sm01_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_0}
+      security_groups: [{get_resource: mog_security_group}]
+
+  sm01_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: repl_net_name}
+      fixed_ips: [{"ip_address": {get_param: [repl_net_ips, 0]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+  server_sm02:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [sm_server_names, 1]}
+      image: {get_param: sm_image_name}
+      flavor: {get_param: sm_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+#      block_device_mapping:
+#        - device_name: vdd
+#          volume_id: { get_param: session-manager-vol-2 }
+      networks:
+        - port: {get_resource: sm02_port_0}
+        - port: {get_resource: sm02_port_1}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog02}}
+      user_data_format:  RAW
+
+  sm02_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  sm02_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: dummy_net_0}
+      security_groups: [{get_resource: mog_security_group}]
+
+  sm02_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: repl_net_name}
+      fixed_ips: [{"ip_address": {get_param: [repl_net_ips, 1]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+  servergroup_mog03:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies:
+        - anti-affinity
+  server_ps01:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [ps_server_names, 0]}
+      image: {get_param: ps_image_name}
+      flavor: {get_param: ps_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: ps01_port_0}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog03}}
+      user_data_format:  RAW
+
+  ps01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  server_ps02:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [ps_server_names, 1]}
+      image: {get_param: ps_image_name}
+      flavor: {get_param: ps_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: ps02_port_0}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog03}}
+      user_data_format:  RAW
+
+  ps02_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  server_ps03:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: [ps_server_names, 2]}
+      image: {get_param: ps_image_name}
+      flavor: {get_param: ps_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: ps03_port_0}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog03}}
+      user_data_format:  RAW
+
+  ps03_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  server_ps04:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: [ps_server_names, 3]}
+      image: {get_param: ps_image_name}
+      flavor: {get_param: ps_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: ps04_port_0}
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog03}}
+      user_data_format:  RAW
+
+  ps04_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      security_groups: [{get_resource: mog_security_group}]
+
+  server_cm01:
+    type: OS::Nova::Server
+    properties:
+#      config_drive: "True"
+      name: {get_param: [cm_server_names, 0]}
+      image: {get_param: cm_image_name}
+      flavor: {get_param: cm_flavor_name}
+      availability_zone: {get_param: availabilityzone_name}
+      networks:
+        - port: {get_resource: cm01_port_0}
+        - port: {get_resource: cm01_port_1}
+#      block_device_mapping:
+#        - device_name: vdd
+#          volume_id: { get_param: cluster-manager-vol-2 }
+#        - device_name: vde
+#          volume_id: { get_param: cluster-manager-vol-1 }
+      user_data:
+      scheduler_hints: {group: {get_resource: servergroup_mog03}}
+      user_data_format:  RAW
+
+  cm01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_resource: csb_net}
+      fixed_ips: [{"ip_address": {get_param: [csb_net_ips, 10]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
+  cm01_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_net_name}
+      fixed_ips: [{"ip_address": {get_param: [oam_net_ips, 4]}}]
+      security_groups: [{get_resource: mog_security_group}]
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withNetwork/zip/withNetwork.zip b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withNetwork/zip/withNetwork.zip
new file mode 100644
index 0000000..7cd8143
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withNetwork/zip/withNetwork.zip
Binary files differ
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withoutManifest/create_stack.sh b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withoutManifest/create_stack.sh
new file mode 100644
index 0000000..186d1c3
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withoutManifest/create_stack.sh
@@ -0,0 +1 @@
+heat stack-create vMME -e vmme_small.env -f vmme_small.yml
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withoutManifest/vmme_small_create_fsb.env b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withoutManifest/vmme_small_create_fsb.env
new file mode 100644
index 0000000..750bb2d
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withoutManifest/vmme_small_create_fsb.env
@@ -0,0 +1,8 @@
+parameters:
+  volume_type: Gold
+  volume_size: 320
+  FSB_1_image: MME_FSB1_15B-CP04-r5a01 
+  FSB_2_image: MME_FSB2_15B-CP04-r5a01
+  FSB1_volume_name: vFSB1_1_Vol_1
+  FSB2_volume_name: vFSB2_1_Vol_1
+
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withoutManifest/vmme_small_create_fsb.yml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withoutManifest/vmme_small_create_fsb.yml
new file mode 100644
index 0000000..2d695a5
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/resources/withoutManifest/vmme_small_create_fsb.yml
@@ -0,0 +1,54 @@
+heat_template_version:  2013-05-23
+
+description: server template for vMME
+
+parameters:
+
+      volume_type:
+        type: string
+        label:  volume type
+        description: volume type Gold
+
+      volume_size:
+        type: number
+        label:  volume size
+        description: my volume size 320GB
+
+      FSB_1_image:
+        type: string
+        label: MME_FSB1
+        description: MME_FSB1_15B-CP04-r5a01
+
+      FSB_2_image:
+        type: string
+        label: MME_FSB2
+        description: MME_FSB2_15B-CP04-r5a01
+
+      FSB1_volume_name:
+        type: string
+        label: FSB1_volume
+        description: FSB1_volume_1
+
+      FSB2_volume_name:
+        type: string
+        label: FSB2_volume
+        description: FSB2_volume_1
+
+resources:
+
+    FSB1_volume:
+      type: OS::Cinder::Volume
+      properties:
+        size: {get_param: volume_size}
+        volume_type: {get_param: volume_type}
+        name: {get_param: FSB1_volume_name}
+        image: {get_param: FSB_1_image}
+
+    FSB2_volume:
+      type: OS::Cinder::Volume
+      properties:
+        size: {get_param: volume_size}
+        volume_type: {get_param: volume_type}
+        name: {get_param: FSB2_volume_name}
+        image: {get_param: FSB_2_image}
+
diff --git a/openecomp-be/backend/pom.xml b/openecomp-be/backend/pom.xml
new file mode 100644
index 0000000..f483205
--- /dev/null
+++ b/openecomp-be/backend/pom.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>openecomp-sdc</artifactId>
+        <groupId>org.openecomp.sdc</groupId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.openecomp.sdc</groupId>
+    <artifactId>backend</artifactId>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>openecomp-sdc-vendor-license-manager</module>
+        <module>openecomp-sdc-vendor-software-product-manager</module>
+        <module>openecomp-sdc-validation-manager</module>
+        <module>openecomp-sdc-action-manager</module>
+        <module>openecomp-sdc-application-config-manager</module>
+    </modules>
+
+    
+</project>
