diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/ASDCPojoTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/ASDCPojoTest.java
new file mode 100644
index 0000000..354b6da
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/ASDCPojoTest.java
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc;
+
+import org.junit.Test;
+import org.onap.so.asdc.client.FinalDistributionStatusMessage;
+import org.onap.so.asdc.client.test.emulators.ArtifactInfoImpl;
+import org.onap.so.asdc.client.test.emulators.DistributionClientEmulator;
+import org.onap.so.asdc.client.test.emulators.JsonStatusData;
+import org.onap.so.asdc.client.test.emulators.JsonVfModuleMetaData;
+import org.onap.so.asdc.client.test.emulators.NotificationDataImpl;
+import org.onap.so.asdc.client.test.emulators.ResourceInfoImpl;
+import org.onap.so.asdc.installer.VfResourceStructure;
+
+import com.openpojo.reflection.PojoClass;
+import com.openpojo.reflection.impl.PojoClassFactory;
+import com.openpojo.validation.Validator;
+import com.openpojo.validation.ValidatorBuilder;
+import com.openpojo.validation.test.impl.GetterTester;
+import com.openpojo.validation.test.impl.SetterTester;
+
+public class ASDCPojoTest {
+	@Test
+	public void pojoStructure() {
+		test(PojoClassFactory.getPojoClass(FinalDistributionStatusMessage.class));
+		test(PojoClassFactory.getPojoClass(ArtifactInfoImpl.class));
+		test(PojoClassFactory.getPojoClass(NotificationDataImpl.class));
+		test(PojoClassFactory.getPojoClass(JsonVfModuleMetaData.class));
+		test(PojoClassFactory.getPojoClass(ResourceInfoImpl.class));
+		test(PojoClassFactory.getPojoClass(DistributionClientEmulator.class));
+		test(PojoClassFactory.getPojoClass(JsonStatusData.class));
+		test(PojoClassFactory.getPojoClass(VfResourceStructure.class));
+	}
+	
+	private void test(PojoClass pojoClass) {
+		Validator validator = ValidatorBuilder.create()
+				.with(new SetterTester())
+				.with(new GetterTester())
+				.build();
+		validator.validate(pojoClass);
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/BaseTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/BaseTest.java
new file mode 100644
index 0000000..9a7240c
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/BaseTest.java
@@ -0,0 +1,65 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc;
+
+import static org.mockito.Mockito.reset;
+
+import org.junit.After;
+import org.junit.runner.RunWith;
+import org.onap.so.asdc.installer.ToscaResourceStructure;
+import org.onap.so.asdc.installer.VfResourceStructure;
+import org.onap.so.asdc.installer.heat.ToscaResourceInstaller;
+import org.onap.so.asdc.tenantIsolation.SpringContextHelper;
+import org.onap.so.asdc.tenantIsolation.WatchdogDistribution;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.ConfigFileApplicationContextInitializer;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.boot.test.mock.mockito.SpyBean;
+import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = TestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@ActiveProfiles("test")
+@ContextConfiguration(classes = SpringContextHelper.class, initializers = ConfigFileApplicationContextInitializer.class)
+@AutoConfigureWireMock(port = 0)
+public abstract class BaseTest {
+	@MockBean
+	protected VfResourceStructure vfResourceStructure;
+	@MockBean
+	protected ToscaResourceStructure toscaResourceStruct;
+	@SpyBean
+	protected WatchdogDistribution watchdogDistributionSpy;
+	@SpyBean
+	protected ToscaResourceInstaller toscaInstaller;
+	
+	@Value("${wiremock.server.port}")
+    protected String wireMockPort;
+
+	@After
+	public void after() {
+		reset(vfResourceStructure);
+		reset(toscaResourceStruct);
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/EmbeddedCatalogDbConfig.java b/asdc-controller/src/test/java/org/onap/so/asdc/EmbeddedCatalogDbConfig.java
new file mode 100644
index 0000000..f7e6787
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/EmbeddedCatalogDbConfig.java
@@ -0,0 +1,102 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc;
+import ch.vorburger.exec.ManagedProcessException;
+import ch.vorburger.mariadb4j.DBConfigurationBuilder;
+import ch.vorburger.mariadb4j.springframework.MariaDB4jSpringService;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
+import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.context.annotation.Profile;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+import org.springframework.orm.jpa.JpaTransactionManager;
+import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+import javax.persistence.EntityManagerFactory;
+import javax.sql.DataSource;
+
+@Configuration
+@Profile({"test"})
+@EnableTransactionManagement
+@EnableJpaRepositories(
+		entityManagerFactoryRef = "entityManagerFactory",
+		basePackages = {"org.onap.so.db.catalog.data.repository"}
+		)
+public class EmbeddedCatalogDbConfig {
+
+    @Bean
+    MariaDB4jSpringService mariaDB4jSpringService() {
+        return new MariaDB4jSpringService();
+    }
+
+	@Primary
+	@Bean(name = "dataSource")
+    DataSource dataSource(MariaDB4jSpringService mariaDB4jSpringService,
+                          @Value("${mariaDB4j.databaseName}") String databaseName,
+                          @Value("${spring.datasource.username}") String datasourceUsername,
+                          @Value("${spring.datasource.password}") String datasourcePassword,
+                          @Value("${spring.datasource.driver-class-name}") String datasourceDriver) throws ManagedProcessException {
+        //Create our database with default root user and no password
+        mariaDB4jSpringService.getDB().createDB(databaseName);
+
+        DBConfigurationBuilder config = mariaDB4jSpringService.getConfiguration();
+
+        return DataSourceBuilder
+                .create()
+                .username(datasourceUsername)
+                .password(datasourcePassword)
+                .url(config.getURL(databaseName))
+                .driverClassName(datasourceDriver)
+                .build();
+    }
+	
+
+	@Primary
+	@Bean(name = "entityManagerFactory")
+	public LocalContainerEntityManagerFactoryBean 
+	entityManagerFactory(
+			EntityManagerFactoryBuilder builder,
+			@Qualifier("dataSource") DataSource dataSource
+			) {
+		return builder
+				.dataSource(dataSource)
+				.packages("org.onap.so.db.catalog.beans")
+				.persistenceUnit("catalogDB")
+				.build();
+	}
+
+	@Primary
+	@Bean(name = "transactionManager")
+	public PlatformTransactionManager transactionManager(
+			@Qualifier("entityManagerFactory") EntityManagerFactory 
+			entityManagerFactory
+			) {
+		return new JpaTransactionManager(entityManagerFactory);
+	}
+
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/EmbeddedRequestDbConfig.java b/asdc-controller/src/test/java/org/onap/so/asdc/EmbeddedRequestDbConfig.java
new file mode 100644
index 0000000..6d1bfcd
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/EmbeddedRequestDbConfig.java
@@ -0,0 +1,102 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc;
+import ch.vorburger.exec.ManagedProcessException;
+import ch.vorburger.mariadb4j.DBConfigurationBuilder;
+import ch.vorburger.mariadb4j.springframework.MariaDB4jSpringService;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.context.annotation.Profile;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+import org.springframework.orm.jpa.JpaTransactionManager;
+import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+import javax.persistence.EntityManagerFactory;
+import javax.sql.DataSource;
+
+@Configuration
+@Profile({"test"})
+@EnableTransactionManagement
+@EnableJpaRepositories(
+		entityManagerFactoryRef = "requestEntityManagerFactory",transactionManagerRef = "requestTransactionManager",
+		basePackages = { "org.onap.so.db.request.data.repository" }
+		)
+public class EmbeddedRequestDbConfig {
+
+    @Bean
+    MariaDB4jSpringService mariaDB4jSpringService() {
+        return new MariaDB4jSpringService();
+    }
+
+
+   	@Bean(name = "requestDataSource")
+   	@ConfigurationProperties(prefix = "request.datasource")
+    DataSource dataSource(MariaDB4jSpringService mariaDB4jSpringService,
+                          @Value("${mariaDB4j.databaseName2}") String databaseName,
+                          @Value("${spring.datasource.username}") String datasourceUsername,
+                          @Value("${spring.datasource.password}") String datasourcePassword,
+                          @Value("${spring.datasource.driver-class-name}") String datasourceDriver) throws ManagedProcessException {
+        //Create our database with default root user and no password
+        mariaDB4jSpringService.getDB().createDB(databaseName);
+
+        DBConfigurationBuilder config = mariaDB4jSpringService.getConfiguration();
+
+        return DataSourceBuilder
+                .create()
+                .username(datasourceUsername)
+                .password(datasourcePassword)
+                .url(config.getURL(databaseName))
+                .driverClassName(datasourceDriver)
+                .build();
+    }
+
+
+	@Bean(name = "requestEntityManagerFactory")
+	public LocalContainerEntityManagerFactoryBean 
+	entityManagerFactory(
+			EntityManagerFactoryBuilder builder,
+			@Qualifier("requestDataSource") DataSource dataSource
+			) {
+		return builder
+				.dataSource(dataSource)
+				.packages("org.onap.so.db.request.beans")
+				.persistenceUnit("requestDB")
+				.build();
+	}
+
+
+	@Bean(name = "requestTransactionManager")
+	public PlatformTransactionManager transactionManager(
+			@Qualifier("requestEntityManagerFactory") EntityManagerFactory 
+			entityManagerFactory
+			) {
+		return new JpaTransactionManager(entityManagerFactory);
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/TestApplication.java b/asdc-controller/src/test/java/org/onap/so/asdc/TestApplication.java
new file mode 100644
index 0000000..4298f9c
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/TestApplication.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * 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.onap.so.asdc;
+
+import org.onap.so.db.request.data.repository.InfraActiveRequestsRepositoryImpl;
+import org.onap.so.requestsdb.RequestsDBHelper;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.ComponentScan.Filter;
+import org.springframework.context.annotation.FilterType;
+import org.springframework.context.annotation.Profile;
+
+@SpringBootApplication
+@Profile("test")
+@ComponentScan(basePackages = {"org.onap.so.asdc"}, excludeFilters = {
+		@Filter(type = FilterType.ANNOTATION, classes = SpringBootApplication.class),
+		@Filter(type = FilterType.ASSIGNABLE_TYPE, classes = RequestsDBHelper.class),
+		@Filter(type = FilterType.ASSIGNABLE_TYPE, classes = InfraActiveRequestsRepositoryImpl.class) })
+public class TestApplication {
+	public static void main(String... args) {
+		SpringApplication.run(TestApplication.class, args);
+		System.getProperties().setProperty("mso.db", "MARIADB");
+		System.getProperties().setProperty("server.name", "Springboot");
+		System.getProperties().setProperty("mso.config.path", "src/test/resources/");
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/ASDCConfigurationTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/ASDCConfigurationTest.java
new file mode 100644
index 0000000..ce8b664
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/ASDCConfigurationTest.java
@@ -0,0 +1,58 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * 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.onap.so.asdc.client;
+
+
+
+import static org.junit.Assert.assertTrue;
+
+import javax.transaction.Transactional;
+
+import org.junit.Test;
+import org.onap.so.asdc.BaseTest;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * THis class tests the ASDC Controller by using the ASDC Mock CLient
+ * 
+ *
+ */
+public class ASDCConfigurationTest extends BaseTest {
+	
+    @Autowired
+    private ASDCConfiguration config;
+    
+    @Test
+	@Transactional
+	public void testInitASDCConfiguration() throws Exception {    	
+		assertTrue("msopreist".equals(config.getUser()));
+		assertTrue("msoasdc-id-local".equals(config.getConsumerGroup()));
+		assertTrue("msoasdc-id-local".equals(config.getConsumerID()));
+		assertTrue("Pre-IST".equals(config.getEnvironmentName()));
+		assertTrue("localhost:8443".equals(config.getAsdcAddress()));
+		assertTrue("msopreist".equals(config.getPassword()));
+		assertTrue(config.getPollingInterval() == 30);
+		assertTrue(config.getPollingTimeout() == 30);
+		assertTrue(config.getRelevantArtifactTypes().size() == config.SUPPORTED_ARTIFACT_TYPES_LIST.size());
+		assertTrue(config.getWatchDogTimeout() == 1);    	
+    }
+    
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/ASDCControllerTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/ASDCControllerTest.java
new file mode 100644
index 0000000..580220a
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/ASDCControllerTest.java
@@ -0,0 +1,48 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.client;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onap.so.asdc.BaseTest;
+import org.onap.so.asdc.client.exceptions.ASDCControllerException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class ASDCControllerTest extends BaseTest {
+	@Autowired
+	private ASDCController asdcController;
+	@Rule
+	public ExpectedException expectedException = ExpectedException.none();
+	
+	@Test
+	public void initASDCExceptionTest() throws Exception {
+		expectedException.expect(ASDCControllerException.class);
+		
+		asdcController.changeControllerStatus(ASDCControllerStatus.IDLE);
+		
+		try {
+			asdcController.initASDC();
+		} finally {
+			asdcController.closeASDC();
+		}
+	}
+}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/ASDCElementInfoTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/ASDCElementInfoTest.java
similarity index 94%
rename from asdc-controller/src/test/java/org/openecomp/mso/asdc/client/ASDCElementInfoTest.java
rename to asdc-controller/src/test/java/org/onap/so/asdc/client/ASDCElementInfoTest.java
index 6bb938c..fec3ae6 100644
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/ASDCElementInfoTest.java
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/ASDCElementInfoTest.java
@@ -1,174 +1,174 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2018 Huawei 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.mso.asdc.client;
-
-
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.Collections;
-import java.util.UUID;
-
-import org.junit.Test;
-import org.mockito.Mockito;
-import org.onap.sdc.api.notification.IArtifactInfo;
-import org.onap.sdc.api.notification.INotificationData;
-import org.onap.sdc.api.notification.IResourceInstance;
-import org.onap.sdc.api.notification.IVfModuleMetadata;
-import org.openecomp.mso.asdc.client.ASDCConfiguration;
-import org.openecomp.mso.asdc.client.exceptions.ArtifactInstallerException;
-import org.openecomp.mso.asdc.installer.ASDCElementInfo;
-import org.openecomp.mso.asdc.installer.VfModuleStructure;
-import org.openecomp.mso.asdc.installer.VfResourceStructure;
-import org.openecomp.mso.asdc.installer.IVfModuleData;
-
-public class ASDCElementInfoTest {
-
-	@Test
-	public void createASDCElementInfoWithNullParameterTest() {
-		ASDCElementInfo elementInfoFromNullVfArtifact = ASDCElementInfo.createElementFromVfArtifactInfo(null);
-		ASDCElementInfo elementInfoFromNullVfModuleStructure = ASDCElementInfo.createElementFromVfModuleStructure(null);
-		ASDCElementInfo elementInfoFromNullVfResourceStructure = ASDCElementInfo.createElementFromVfResourceStructure(null);
-
-		elementInfoFromNullVfArtifact.addElementInfo(null, null);
-		elementInfoFromNullVfModuleStructure.addElementInfo(null, "someValue");
-		elementInfoFromNullVfResourceStructure.addElementInfo("someKey", null);
-
-		assertEquals(elementInfoFromNullVfArtifact.toString(), "");
-		assertEquals(elementInfoFromNullVfModuleStructure.toString(), "");
-		assertEquals(elementInfoFromNullVfResourceStructure.toString(), "");
-
-		assertNotNull(elementInfoFromNullVfArtifact);
-		assertNotNull(elementInfoFromNullVfModuleStructure);
-		assertNotNull(elementInfoFromNullVfResourceStructure);
-
-		assertNotNull(ASDCElementInfo.EMPTY_INSTANCE);
-
-		assertEquals(elementInfoFromNullVfArtifact, ASDCElementInfo.EMPTY_INSTANCE);
-		assertEquals(elementInfoFromNullVfModuleStructure, ASDCElementInfo.EMPTY_INSTANCE);
-		assertEquals(elementInfoFromNullVfResourceStructure, ASDCElementInfo.EMPTY_INSTANCE);
-
-		assertEquals(ASDCElementInfo.EMPTY_INSTANCE.getType(), "");
-		assertEquals(ASDCElementInfo.EMPTY_INSTANCE.toString(), "");
-
-		assertEquals(elementInfoFromNullVfArtifact.getType(), ASDCElementInfo.EMPTY_INSTANCE.getType());
-		assertEquals(elementInfoFromNullVfModuleStructure.getType(), ASDCElementInfo.EMPTY_INSTANCE.getType());
-		assertEquals(elementInfoFromNullVfResourceStructure.getType(), ASDCElementInfo.EMPTY_INSTANCE.getType());
-	}
-
-	@Test
-	public void createASDCElementInfoFromVfResourceTest() {
-
-		String resourceInstanceName = "Resource 1";
-
-		UUID generatedUUID = UUID.randomUUID();
-
-		INotificationData notificationData = Mockito.mock(INotificationData.class);
-		IResourceInstance resourceInstance = Mockito.mock(IResourceInstance.class);
-
-		Mockito.when(resourceInstance.getResourceInstanceName()).thenReturn(resourceInstanceName);
-		Mockito.when(resourceInstance.getResourceInvariantUUID()).thenReturn(generatedUUID.toString());
-
-		VfResourceStructure vfResourceStructure = new VfResourceStructure(notificationData, resourceInstance);
-
-		ASDCElementInfo elementInfoFromVfResource = ASDCElementInfo.createElementFromVfResourceStructure(vfResourceStructure);
-
-		assertTrue(elementInfoFromVfResource.toString().contains(resourceInstanceName));
-		assertTrue(elementInfoFromVfResource.toString().contains(generatedUUID.toString()));
-
-		assertFalse(ASDCConfiguration.VF_MODULES_METADATA.equals(elementInfoFromVfResource.getType()));
-		assertEquals(ASDCElementInfo.ASDCElementTypeEnum.VNF_RESOURCE.name(), elementInfoFromVfResource.getType());
-
-		assertFalse(elementInfoFromVfResource.toString().contains("MyInfo1: someValue"));
-		elementInfoFromVfResource.addElementInfo("MyInfo1", "someValue");
-		assertTrue(elementInfoFromVfResource.toString().contains("MyInfo1: someValue"));
-	}
-
-	@Test
-	public void createASDCElementInfoFromVfModuleTest() throws ArtifactInstallerException {
-
-		String resourceInstanceName = "Resource 1";
-
-		UUID generatedUUID = UUID.randomUUID();
-
-		INotificationData notificationData = Mockito.mock(INotificationData.class);
-		IResourceInstance resourceInstance = Mockito.mock(IResourceInstance.class);
-
-		Mockito.when(resourceInstance.getResourceInstanceName()).thenReturn(resourceInstanceName);
-		Mockito.when(resourceInstance.getResourceInvariantUUID()).thenReturn(generatedUUID.toString());
-
-		VfResourceStructure vfResourceStructure = new VfResourceStructure(notificationData, resourceInstance);
-
-		// Create module structure now
-
-		String vfModuleModelName = "Module Model XYZ";
-
-		UUID generatedUUIDForModule = UUID.randomUUID();
-
-		IVfModuleData moduleMetadata = Mockito.mock(IVfModuleData.class);
-		Mockito.when(moduleMetadata.getVfModuleModelName()).thenReturn(vfModuleModelName);
-		Mockito.when(moduleMetadata.getVfModuleModelInvariantUUID()).thenReturn(generatedUUIDForModule.toString());
-		Mockito.when(moduleMetadata.getArtifacts()).thenReturn(Collections.<String> emptyList());
-
-		VfModuleStructure vfModuleStructure = new VfModuleStructure(vfResourceStructure, moduleMetadata);
-
-		ASDCElementInfo elementInfoFromVfModule = ASDCElementInfo.createElementFromVfModuleStructure(vfModuleStructure);
-
-		assertTrue(elementInfoFromVfModule.toString().contains(vfModuleModelName));
-		assertTrue(elementInfoFromVfModule.toString().contains(generatedUUIDForModule.toString()));
-
-		assertFalse(ASDCElementInfo.ASDCElementTypeEnum.VNF_RESOURCE.name().equals(elementInfoFromVfModule.getType()));
-		assertEquals(ASDCConfiguration.VF_MODULES_METADATA, elementInfoFromVfModule.getType());
-
-		assertFalse(elementInfoFromVfModule.toString().contains("MyInfo2: someValue"));
-		elementInfoFromVfModule.addElementInfo("MyInfo2", "someValue");
-		assertTrue(elementInfoFromVfModule.toString().contains("MyInfo2: someValue"));
-	}
-
-	@Test
-	public void createASDCElementInfoFromArtifact() {
-		for (String eVal : ASDCConfiguration.SUPPORTED_ARTIFACT_TYPES_LIST) {
-			String generatedArtifactName = eVal + " 1";
-			UUID generatedUUIDForArtifact = UUID.randomUUID();
-
-			IArtifactInfo artifactInfo = Mockito.mock(IArtifactInfo.class);
-			Mockito.when(artifactInfo.getArtifactType()).thenReturn(eVal);
-			Mockito.when(artifactInfo.getArtifactName()).thenReturn(generatedArtifactName);
-			Mockito.when(artifactInfo.getArtifactUUID()).thenReturn(generatedUUIDForArtifact.toString());
-
-			ASDCElementInfo elementInfoFromArtifact = ASDCElementInfo.createElementFromVfArtifactInfo(artifactInfo);
-
-			assertTrue(elementInfoFromArtifact.toString().contains(generatedArtifactName));
-			assertTrue(elementInfoFromArtifact.toString().contains(generatedUUIDForArtifact.toString()));
-
-			assertFalse(ASDCElementInfo.ASDCElementTypeEnum.VNF_RESOURCE.name().equals(elementInfoFromArtifact.getType()));
-			assertEquals(eVal, elementInfoFromArtifact.getType());
-
-			assertFalse(elementInfoFromArtifact.toString().contains("MyInfo3: someValue"));
-			elementInfoFromArtifact.addElementInfo("MyInfo3", "someValue");
-			assertTrue(elementInfoFromArtifact.toString().contains("MyInfo3: someValue"));
-		}
-	}
-}
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2018 Huawei Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+
+package org.onap.so.asdc.client;
+
+
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Collections;
+import java.util.UUID;
+
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.onap.sdc.api.notification.IArtifactInfo;
+import org.onap.sdc.api.notification.INotificationData;
+import org.onap.sdc.api.notification.IResourceInstance;
+import org.onap.sdc.api.notification.IVfModuleMetadata;
+import org.onap.so.asdc.client.ASDCConfiguration;
+import org.onap.so.asdc.client.exceptions.ArtifactInstallerException;
+import org.onap.so.asdc.installer.ASDCElementInfo;
+import org.onap.so.asdc.installer.VfModuleStructure;
+import org.onap.so.asdc.installer.VfResourceStructure;
+import org.onap.so.asdc.installer.IVfModuleData;
+
+public class ASDCElementInfoTest {
+
+	@Test
+	public void createASDCElementInfoWithNullParameterTest() {
+		ASDCElementInfo elementInfoFromNullVfArtifact = ASDCElementInfo.createElementFromVfArtifactInfo(null);
+		ASDCElementInfo elementInfoFromNullVfModuleStructure = ASDCElementInfo.createElementFromVfModuleStructure(null);
+		ASDCElementInfo elementInfoFromNullVfResourceStructure = ASDCElementInfo.createElementFromVfResourceStructure(null);
+
+		elementInfoFromNullVfArtifact.addElementInfo(null, null);
+		elementInfoFromNullVfModuleStructure.addElementInfo(null, "someValue");
+		elementInfoFromNullVfResourceStructure.addElementInfo("someKey", null);
+
+		assertEquals(elementInfoFromNullVfArtifact.toString(), "");
+		assertEquals(elementInfoFromNullVfModuleStructure.toString(), "");
+		assertEquals(elementInfoFromNullVfResourceStructure.toString(), "");
+
+		assertNotNull(elementInfoFromNullVfArtifact);
+		assertNotNull(elementInfoFromNullVfModuleStructure);
+		assertNotNull(elementInfoFromNullVfResourceStructure);
+
+		assertNotNull(ASDCElementInfo.EMPTY_INSTANCE);
+
+		assertEquals(elementInfoFromNullVfArtifact, ASDCElementInfo.EMPTY_INSTANCE);
+		assertEquals(elementInfoFromNullVfModuleStructure, ASDCElementInfo.EMPTY_INSTANCE);
+		assertEquals(elementInfoFromNullVfResourceStructure, ASDCElementInfo.EMPTY_INSTANCE);
+
+		assertEquals(ASDCElementInfo.EMPTY_INSTANCE.getType(), "");
+		assertEquals(ASDCElementInfo.EMPTY_INSTANCE.toString(), "");
+
+		assertEquals(elementInfoFromNullVfArtifact.getType(), ASDCElementInfo.EMPTY_INSTANCE.getType());
+		assertEquals(elementInfoFromNullVfModuleStructure.getType(), ASDCElementInfo.EMPTY_INSTANCE.getType());
+		assertEquals(elementInfoFromNullVfResourceStructure.getType(), ASDCElementInfo.EMPTY_INSTANCE.getType());
+	}
+
+	@Test
+	public void createASDCElementInfoFromVfResourceTest() {
+
+		String resourceInstanceName = "Resource 1";
+
+		UUID generatedUUID = UUID.randomUUID();
+
+		INotificationData notificationData = Mockito.mock(INotificationData.class);
+		IResourceInstance resourceInstance = Mockito.mock(IResourceInstance.class);
+
+		Mockito.when(resourceInstance.getResourceInstanceName()).thenReturn(resourceInstanceName);
+		Mockito.when(resourceInstance.getResourceInvariantUUID()).thenReturn(generatedUUID.toString());
+
+		VfResourceStructure vfResourceStructure = new VfResourceStructure(notificationData, resourceInstance);
+
+		ASDCElementInfo elementInfoFromVfResource = ASDCElementInfo.createElementFromVfResourceStructure(vfResourceStructure);
+
+		assertTrue(elementInfoFromVfResource.toString().contains(resourceInstanceName));
+		assertTrue(elementInfoFromVfResource.toString().contains(generatedUUID.toString()));
+
+		assertFalse(ASDCConfiguration.VF_MODULES_METADATA.equals(elementInfoFromVfResource.getType()));
+		assertEquals(ASDCElementInfo.ASDCElementTypeEnum.VNF_RESOURCE.name(), elementInfoFromVfResource.getType());
+
+		assertFalse(elementInfoFromVfResource.toString().contains("MyInfo1: someValue"));
+		elementInfoFromVfResource.addElementInfo("MyInfo1", "someValue");
+		assertTrue(elementInfoFromVfResource.toString().contains("MyInfo1: someValue"));
+	}
+
+	@Test
+	public void createASDCElementInfoFromVfModuleTest() throws ArtifactInstallerException {
+
+		String resourceInstanceName = "Resource 1";
+
+		UUID generatedUUID = UUID.randomUUID();
+
+		INotificationData notificationData = Mockito.mock(INotificationData.class);
+		IResourceInstance resourceInstance = Mockito.mock(IResourceInstance.class);
+
+		Mockito.when(resourceInstance.getResourceInstanceName()).thenReturn(resourceInstanceName);
+		Mockito.when(resourceInstance.getResourceInvariantUUID()).thenReturn(generatedUUID.toString());
+
+		VfResourceStructure vfResourceStructure = new VfResourceStructure(notificationData, resourceInstance);
+
+		// Create module structure now
+
+		String vfModuleModelName = "Module Model XYZ";
+
+		UUID generatedUUIDForModule = UUID.randomUUID();
+
+		IVfModuleData moduleMetadata = Mockito.mock(IVfModuleData.class);
+		Mockito.when(moduleMetadata.getVfModuleModelName()).thenReturn(vfModuleModelName);
+		Mockito.when(moduleMetadata.getVfModuleModelInvariantUUID()).thenReturn(generatedUUIDForModule.toString());
+		Mockito.when(moduleMetadata.getArtifacts()).thenReturn(Collections.<String> emptyList());
+
+		VfModuleStructure vfModuleStructure = new VfModuleStructure(vfResourceStructure, moduleMetadata);
+
+		ASDCElementInfo elementInfoFromVfModule = ASDCElementInfo.createElementFromVfModuleStructure(vfModuleStructure);
+
+		assertTrue(elementInfoFromVfModule.toString().contains(vfModuleModelName));
+		assertTrue(elementInfoFromVfModule.toString().contains(generatedUUIDForModule.toString()));
+
+		assertFalse(ASDCElementInfo.ASDCElementTypeEnum.VNF_RESOURCE.name().equals(elementInfoFromVfModule.getType()));
+		assertEquals(ASDCConfiguration.VF_MODULES_METADATA, elementInfoFromVfModule.getType());
+
+		assertFalse(elementInfoFromVfModule.toString().contains("MyInfo2: someValue"));
+		elementInfoFromVfModule.addElementInfo("MyInfo2", "someValue");
+		assertTrue(elementInfoFromVfModule.toString().contains("MyInfo2: someValue"));
+	}
+
+	@Test
+	public void createASDCElementInfoFromArtifact() {
+		for (String eVal : ASDCConfiguration.SUPPORTED_ARTIFACT_TYPES_LIST) {
+			String generatedArtifactName = eVal + " 1";
+			UUID generatedUUIDForArtifact = UUID.randomUUID();
+
+			IArtifactInfo artifactInfo = Mockito.mock(IArtifactInfo.class);
+			Mockito.when(artifactInfo.getArtifactType()).thenReturn(eVal);
+			Mockito.when(artifactInfo.getArtifactName()).thenReturn(generatedArtifactName);
+			Mockito.when(artifactInfo.getArtifactUUID()).thenReturn(generatedUUIDForArtifact.toString());
+
+			ASDCElementInfo elementInfoFromArtifact = ASDCElementInfo.createElementFromVfArtifactInfo(artifactInfo);
+
+			assertTrue(elementInfoFromArtifact.toString().contains(generatedArtifactName));
+			assertTrue(elementInfoFromArtifact.toString().contains(generatedUUIDForArtifact.toString()));
+
+			assertFalse(ASDCElementInfo.ASDCElementTypeEnum.VNF_RESOURCE.name().equals(elementInfoFromArtifact.getType()));
+			assertEquals(eVal, elementInfoFromArtifact.getType());
+
+			assertFalse(elementInfoFromArtifact.toString().contains("MyInfo3: someValue"));
+			elementInfoFromArtifact.addElementInfo("MyInfo3", "someValue");
+			assertTrue(elementInfoFromArtifact.toString().contains("MyInfo3: someValue"));
+		}
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/ASDCStatusCallBackTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/ASDCStatusCallBackTest.java
new file mode 100644
index 0000000..97fa773
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/ASDCStatusCallBackTest.java
@@ -0,0 +1,91 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.client;
+
+import static org.mockito.Matchers.isA;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.mockito.MockitoAnnotations;
+import org.onap.sdc.api.notification.IStatusData;
+import org.onap.sdc.utils.DistributionStatusEnum;
+import org.onap.so.asdc.BaseTest;
+import org.onap.so.asdc.client.exceptions.ArtifactInstallerException;
+import org.onap.so.asdc.client.test.emulators.JsonStatusData;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class ASDCStatusCallBackTest extends BaseTest {
+	@Autowired
+	private ASDCStatusCallBack statusCallback;
+	
+	@Rule
+	public ExpectedException expectedException = ExpectedException.none();
+	
+	@Before
+	public void before() {
+		MockitoAnnotations.initMocks(this);
+	}
+	
+	@Test
+	public void activateCallbackTest() throws Exception {
+		JsonStatusData statusData = new JsonStatusData();
+		
+		doNothing().when(toscaInstaller).installTheComponentStatus(isA(JsonStatusData.class));
+		
+		statusCallback.activateCallback(statusData);
+		
+		verify(toscaInstaller, times(1)).installTheComponentStatus(statusData);
+	}
+	
+	@Test
+	public void activateCallbackDoneErrorStatusTest() throws Exception {
+		IStatusData statusData = mock(IStatusData.class);
+		
+		doReturn("distributionId").when(statusData).getDistributionID();
+		doReturn("componentName").when(statusData).getComponentName();
+		doReturn(DistributionStatusEnum.COMPONENT_DONE_ERROR).when(statusData).getStatus();
+		doNothing().when(toscaInstaller).installTheComponentStatus(isA(IStatusData.class));
+		
+		statusCallback.activateCallback(statusData);
+		
+		verify(toscaInstaller, times(1)).installTheComponentStatus(statusData);
+	}
+	
+	@Test
+	public void activateCallbackExceptionTest() throws Exception {
+		IStatusData statusData = mock(IStatusData.class);
+		
+		doReturn("distributionId").when(statusData).getDistributionID();
+		doReturn("componentName").when(statusData).getComponentName();
+		doReturn(DistributionStatusEnum.COMPONENT_DONE_OK).when(statusData).getStatus();
+		doThrow(ArtifactInstallerException.class).when(toscaInstaller).installTheComponentStatus(isA(IStatusData.class));
+		
+		statusCallback.activateCallback(statusData);
+	}
+}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/BigDecimalVersionTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/BigDecimalVersionTest.java
similarity index 95%
rename from asdc-controller/src/test/java/org/openecomp/mso/asdc/client/BigDecimalVersionTest.java
rename to asdc-controller/src/test/java/org/onap/so/asdc/client/BigDecimalVersionTest.java
index b395cee..4eb9ed5 100644
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/BigDecimalVersionTest.java
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/BigDecimalVersionTest.java
@@ -18,14 +18,14 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.mso.asdc.client;
+package org.onap.so.asdc.client;
 
 
 import static org.junit.Assert.assertTrue;
 import java.math.BigDecimal;
 import org.junit.Test;
 
-import org.openecomp.mso.asdc.installer.BigDecimalVersion;
+import org.onap.so.asdc.installer.BigDecimalVersion;
 
 
 public class BigDecimalVersionTest {
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/DistributionStatusMessageTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/DistributionStatusMessageTest.java
new file mode 100644
index 0000000..0c6476d
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/DistributionStatusMessageTest.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.client;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.onap.sdc.utils.DistributionStatusEnum;
+
+public class DistributionStatusMessageTest {
+	
+	@Test
+	public void distributionStatusMessageTest() {
+		String artifactUrl = "artifactUrl";
+		String consumerId = "consumerId";
+		String distributionId = "distributionId";
+		Long timestamp = 123L;
+		DistributionStatusMessage distributionStatusMessage = new DistributionStatusMessage(
+				artifactUrl, consumerId, distributionId, DistributionStatusEnum.DEPLOY_OK, timestamp);
+		
+		assertEquals(artifactUrl, distributionStatusMessage.getArtifactURL());
+		assertEquals(consumerId, distributionStatusMessage.getConsumerID());
+		assertEquals(distributionId, distributionStatusMessage.getDistributionID());
+		assertEquals(DistributionStatusEnum.DEPLOY_OK, distributionStatusMessage.getStatus());
+		assertEquals(123L, distributionStatusMessage.getTimestamp());
+	}
+}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/YamlTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/YamlTest.java
similarity index 84%
rename from asdc-controller/src/test/java/org/openecomp/mso/asdc/client/YamlTest.java
rename to asdc-controller/src/test/java/org/onap/so/asdc/client/YamlTest.java
index 7179de7..ed761c7 100644
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/YamlTest.java
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/YamlTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.mso.asdc.client;
+package org.onap.so.asdc.client;
 
 
 import static org.junit.Assert.*;
@@ -31,10 +31,8 @@
 import java.util.Set;
 import org.apache.commons.io.IOUtils;
 import org.junit.Test;
-
-import org.openecomp.mso.asdc.installer.heat.VfResourceInstaller;
-import org.openecomp.mso.asdc.util.YamlEditor;
-import org.openecomp.mso.db.catalog.beans.HeatTemplateParam;
+import org.onap.so.asdc.util.YamlEditor;
+import org.onap.so.db.catalog.beans.HeatTemplateParam;
 
 
 public class YamlTest {
@@ -152,14 +150,4 @@
 		    	assertTrue(check1);
 		    	assertTrue(check2);
 	}
-	
-	@Test
-	public void VfResourceInstallerTest() throws Exception {
-		
-		assertTrue("mon ami toto, est dans le bois: toto ici".equals(VfResourceInstaller.verifyTheFilePrefixInString("mon ami toto, est dans le bois: toto ici","toto")));
-		assertTrue("mon ami toto, est dans le bois: toto ici".equals(VfResourceInstaller.verifyTheFilePrefixInString("mon ami file:///toto, est dans le bois: file:///toto ici","toto")));
-		assertTrue("mon ami toto, est dans le bois: toto ici".equals(VfResourceInstaller.verifyTheFilePrefixInString("mon ami file:///toto, est dans le bois: toto ici","toto")));
-		assertTrue("mon ami toto, est dans le bois: toto ici".equals(VfResourceInstaller.verifyTheFilePrefixInString("mon ami toto, est dans le bois: file:///toto ici","toto")));
-		
-	}
 }
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/exceptions/ASDCControllerExceptionTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/exceptions/ASDCControllerExceptionTest.java
new file mode 100644
index 0000000..e2aee60
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/exceptions/ASDCControllerExceptionTest.java
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.client.exceptions;
+
+import static com.shazam.shazamcrest.MatcherAssert.assertThat;
+import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
+
+import org.junit.Test;
+
+public class ASDCControllerExceptionTest {
+	private String exceptionMessage = "test message for exception";
+	private String throwableMessage = "separate throwable that caused asdcDownloadException";
+	
+	@Test
+	public void asdcParametersExceptionTest() {
+		ASDCControllerException asdcDownloadException = new ASDCControllerException(exceptionMessage);
+		
+		Exception expectedException = new Exception(exceptionMessage);
+		
+		assertThat(asdcDownloadException, sameBeanAs(expectedException));
+	}
+	
+	@Test
+	public void asdcParametersExceptionThrowableTest() {
+		Throwable throwableCause = new Throwable(throwableMessage);
+		ASDCControllerException asdcDownloadException = new ASDCControllerException(exceptionMessage, throwableCause);
+		
+		Exception expectedException = new Exception(exceptionMessage, new Throwable(throwableMessage));
+		
+		assertThat(asdcDownloadException, sameBeanAs(expectedException));
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/exceptions/ASDCDownloadExceptionTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/exceptions/ASDCDownloadExceptionTest.java
new file mode 100644
index 0000000..98deb52
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/exceptions/ASDCDownloadExceptionTest.java
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.client.exceptions;
+
+import static com.shazam.shazamcrest.MatcherAssert.assertThat;
+import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
+
+import org.junit.Test;
+
+public class ASDCDownloadExceptionTest {
+	private String exceptionMessage = "test message for exception";
+	private String throwableMessage = "separate throwable that caused asdcDownloadException";
+	
+	@Test
+	public void asdcDownloadExceptionTest() {
+		ASDCDownloadException asdcDownloadException = new ASDCDownloadException(exceptionMessage);
+		
+		Exception expectedException = new Exception(exceptionMessage);
+		
+		assertThat(asdcDownloadException, sameBeanAs(expectedException));
+	}
+	
+	@Test
+	public void asdcDownloadExceptionThrowableTest() {
+		Throwable throwableCause = new Throwable(throwableMessage);
+		ASDCDownloadException asdcDownloadException = new ASDCDownloadException(exceptionMessage, throwableCause);
+		
+		Exception expectedException = new Exception(exceptionMessage, new Throwable(throwableMessage));
+		
+		assertThat(asdcDownloadException, sameBeanAs(expectedException));
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/exceptions/ASDCParametersExceptionTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/exceptions/ASDCParametersExceptionTest.java
new file mode 100644
index 0000000..bac05bd
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/exceptions/ASDCParametersExceptionTest.java
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.client.exceptions;
+
+import static com.shazam.shazamcrest.MatcherAssert.assertThat;
+import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
+
+import org.junit.Test;
+
+public class ASDCParametersExceptionTest {
+	private String exceptionMessage = "test message for exception";
+	private String throwableMessage = "separate throwable that caused asdcDownloadException";
+	
+	@Test
+	public void asdcParametersExceptionTest() {
+		ASDCParametersException asdcDownloadException = new ASDCParametersException(exceptionMessage);
+		
+		Exception expectedException = new Exception(exceptionMessage);
+		
+		assertThat(asdcDownloadException, sameBeanAs(expectedException));
+	}
+	
+	@Test
+	public void asdcParametersExceptionThrowableTest() {
+		Throwable throwableCause = new Throwable(throwableMessage);
+		ASDCParametersException asdcDownloadException = new ASDCParametersException(exceptionMessage, throwableCause);
+		
+		Exception expectedException = new Exception(exceptionMessage, new Throwable(throwableMessage));
+		
+		assertThat(asdcDownloadException, sameBeanAs(expectedException));
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/exceptions/ArtifactInstallerExceptionTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/exceptions/ArtifactInstallerExceptionTest.java
new file mode 100644
index 0000000..f222790
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/exceptions/ArtifactInstallerExceptionTest.java
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.client.exceptions;
+
+import static com.shazam.shazamcrest.MatcherAssert.assertThat;
+import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
+
+import org.junit.Test;
+
+public class ArtifactInstallerExceptionTest {
+	private String exceptionMessage = "test message for exception";
+	private String throwableMessage = "separate throwable that caused asdcDownloadException";
+	
+	@Test
+	public void asdcParametersExceptionTest() {
+		ArtifactInstallerException asdcDownloadException = new ArtifactInstallerException(exceptionMessage);
+		
+		Exception expectedException = new Exception(exceptionMessage);
+		
+		assertThat(asdcDownloadException, sameBeanAs(expectedException));
+	}
+	
+	@Test
+	public void asdcParametersExceptionThrowableTest() {
+		Throwable throwableCause = new Throwable(throwableMessage);
+		ArtifactInstallerException asdcDownloadException = new ArtifactInstallerException(exceptionMessage, throwableCause);
+		
+		Exception expectedException = new Exception(exceptionMessage, new Throwable(throwableMessage));
+		
+		assertThat(asdcDownloadException, sameBeanAs(expectedException));
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImplTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImplTest.java
new file mode 100644
index 0000000..3dc3235
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImplTest.java
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.client.test.emulators;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Test;
+import org.mockito.Mock;
+import org.onap.sdc.api.notification.IArtifactInfo;
+import org.onap.so.asdc.BaseTest;
+
+public class ArtifactInfoImplTest extends BaseTest {	
+	@Mock
+	private IArtifactInfo iArtifactInfo;
+	
+	@Test
+	public void convertToArtifactInfoImplTest() {
+		List<IArtifactInfo> list = new ArrayList<IArtifactInfo>();
+		list.add(iArtifactInfo);
+		assertEquals(1, ArtifactInfoImpl.convertToArtifactInfoImpl(list).size());
+	}
+	
+	@Test
+	public void convertToArtifactInfoImplNullListTest() {
+		assertTrue(ArtifactInfoImpl.convertToArtifactInfoImpl(null).isEmpty());
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/DistributionClientEmulatorTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/DistributionClientEmulatorTest.java
new file mode 100644
index 0000000..38c2564
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/DistributionClientEmulatorTest.java
@@ -0,0 +1,178 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.client.test.emulators;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.sdc.api.consumer.IDistributionStatusMessage;
+import org.onap.sdc.api.results.IDistributionClientDownloadResult;
+import org.onap.sdc.api.results.IDistributionClientResult;
+import org.onap.sdc.impl.DistributionClientDownloadResultImpl;
+import org.onap.sdc.impl.DistributionClientResultImpl;
+import org.onap.sdc.utils.DistributionActionResultEnum;
+import org.onap.sdc.utils.DistributionStatusEnum;
+import org.onap.so.asdc.client.ASDCConfiguration;
+import org.onap.so.asdc.client.ASDCNotificationCallBack;
+import org.onap.so.asdc.client.ASDCStatusCallBack;
+import org.onap.so.asdc.client.DistributionStatusMessage;
+
+public class DistributionClientEmulatorTest {
+	
+	private DistributionClientEmulator distClientEmulator;
+	
+	@Before
+	public void before() {
+		distClientEmulator = new DistributionClientEmulator();
+	}
+	
+	@Test
+	public void getDistributionMessageReceived() {
+		List<IDistributionStatusMessage> receivedMessages = distClientEmulator.getDistributionMessageReceived();
+		assertEquals(new LinkedList<>(), receivedMessages);
+		
+		IDistributionStatusMessage message = new DistributionStatusMessage("testArtifactUrl", "testConsumerId", "testDistributionId", DistributionStatusEnum.DOWNLOAD_OK, 123456);
+		distClientEmulator.sendDeploymentStatus(message);
+		assertEquals(message, receivedMessages.get(0));
+		
+		IDistributionStatusMessage message2 = new DistributionStatusMessage("testArtifactUrl2", "testConsumerId2", "testDistributionId2", DistributionStatusEnum.DOWNLOAD_OK, 1234567);
+		distClientEmulator.sendDeploymentStatus(message2);
+		assertEquals(message2, receivedMessages.get(1));
+	}
+	
+	@Test
+	public void sendDeploymentStatusPrimary() {
+		IDistributionStatusMessage message = new DistributionStatusMessage("testArtifactUrl", "testConsumerId", "testDistributionId", DistributionStatusEnum.DOWNLOAD_OK, 123456);
+		IDistributionClientResult result = distClientEmulator.sendDeploymentStatus(message);
+		IDistributionClientResult expectedResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+		assertEquals(message, distClientEmulator.getDistributionMessageReceived().get(0));
+		assertEquals(expectedResult.getDistributionActionResult(), result.getDistributionActionResult());
+		assertEquals(expectedResult.getDistributionMessageResult(), result.getDistributionMessageResult());
+	}
+	
+	@Test
+	public void sendDeploymentStatusSecondary() {
+		IDistributionStatusMessage message = new DistributionStatusMessage("testArtifactUrl", "testConsumerId", "testDistributionId", DistributionStatusEnum.DOWNLOAD_OK, 123456);
+		IDistributionClientResult result = distClientEmulator.sendDeploymentStatus(message, "test");
+		IDistributionClientResult expectedResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+		assertEquals(message, distClientEmulator.getDistributionMessageReceived().get(0));
+		assertEquals(expectedResult.getDistributionActionResult(), result.getDistributionActionResult());
+		assertEquals(expectedResult.getDistributionMessageResult(), result.getDistributionMessageResult());
+	}
+	
+	@Test
+	public void sendDownloadStatusPrimary() {
+		IDistributionStatusMessage message = new DistributionStatusMessage("testArtifactUrl", "testConsumerId", "testDistributionId", DistributionStatusEnum.DOWNLOAD_OK, 123456);
+		IDistributionClientResult result = distClientEmulator.sendDownloadStatus(message);
+		IDistributionClientResult expectedResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+		assertEquals(message, distClientEmulator.getDistributionMessageReceived().get(0));
+		assertEquals(expectedResult.getDistributionActionResult(), result.getDistributionActionResult());
+		assertEquals(expectedResult.getDistributionMessageResult(), result.getDistributionMessageResult());
+	}
+	
+	@Test
+	public void sendDownloadStatusSecondary() {
+		IDistributionStatusMessage message = new DistributionStatusMessage("testArtifactUrl", "testConsumerId", "testDistributionId", DistributionStatusEnum.DOWNLOAD_OK, 123456);
+		IDistributionClientResult result = distClientEmulator.sendDownloadStatus(message, "test");
+		IDistributionClientResult expectedResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+		assertEquals(message, distClientEmulator.getDistributionMessageReceived().get(0));
+		assertEquals(expectedResult.getDistributionActionResult(), result.getDistributionActionResult());
+		assertEquals(expectedResult.getDistributionMessageResult(), result.getDistributionMessageResult());
+	}
+	
+	@Test
+	public void initPrimary() {
+		IDistributionClientResult result = distClientEmulator.init(new ASDCConfiguration(), new ASDCNotificationCallBack());
+		IDistributionClientResult expectedResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+		assertEquals(expectedResult.getDistributionActionResult(), result.getDistributionActionResult());
+		assertEquals(expectedResult.getDistributionMessageResult(), result.getDistributionMessageResult());
+	}
+	
+	@Test
+	public void initSecondary() {
+		IDistributionClientResult result = distClientEmulator.init(new ASDCConfiguration(), new ASDCNotificationCallBack(), new ASDCStatusCallBack());
+		IDistributionClientResult expectedResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+		assertEquals(expectedResult.getDistributionActionResult(), result.getDistributionActionResult());
+		assertEquals(expectedResult.getDistributionMessageResult(), result.getDistributionMessageResult());
+	}
+	
+	@Test
+	public void start() {
+		IDistributionClientResult result = distClientEmulator.start();
+		IDistributionClientResult expectedResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+		assertEquals(expectedResult.getDistributionActionResult(), result.getDistributionActionResult());
+		assertEquals(expectedResult.getDistributionMessageResult(), result.getDistributionMessageResult());
+	}
+	
+	@Test
+	public void stop() {
+		IDistributionClientResult result = distClientEmulator.stop();
+		IDistributionClientResult expectedResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+		assertEquals(expectedResult.getDistributionActionResult(), result.getDistributionActionResult());
+		assertEquals(expectedResult.getDistributionMessageResult(), result.getDistributionMessageResult());
+	}
+	
+	@Test
+	public void updateConfiguration() {
+		IDistributionClientResult result = distClientEmulator.updateConfiguration(new ASDCConfiguration());
+		IDistributionClientResult expectedResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+		assertEquals(expectedResult.getDistributionActionResult(), result.getDistributionActionResult());
+		assertEquals(expectedResult.getDistributionMessageResult(), result.getDistributionMessageResult());
+	}
+	
+	@Test
+	public void getResourcePath() {
+		String testResourcePath = "testResourcePath";
+		distClientEmulator = new DistributionClientEmulator(testResourcePath);
+		assertEquals(testResourcePath, distClientEmulator.getResourcePath());
+	}
+	
+	@Test
+	public void setResourcePath() {
+		String testResourcePath = "testResourcePath";
+		distClientEmulator.setResourcePath(testResourcePath);
+		assertEquals(testResourcePath, distClientEmulator.getResourcePath());
+	}
+	
+	@Test
+	public void downloadSuccess() throws IOException {
+		ArtifactInfoImpl info = new ArtifactInfoImpl();
+		info.setArtifactURL("mso.json");
+		info.setArtifactName("testArtifactName");
+		
+		distClientEmulator.setResourcePath("src/test/resources/");
+		
+		IDistributionClientDownloadResult result = distClientEmulator.download(info);
+
+		byte[] expectedInputStream = Files.readAllBytes(Paths.get(distClientEmulator.getResourcePath() + info.getArtifactURL()));
+		IDistributionClientDownloadResult expectedResult = new DistributionClientDownloadResultImpl(DistributionActionResultEnum.SUCCESS, DistributionActionResultEnum.SUCCESS.name(), info.getArtifactName(), expectedInputStream);
+		
+		assertEquals(expectedResult.getDistributionActionResult(), result.getDistributionActionResult());
+		assertEquals(expectedResult.getDistributionMessageResult(), result.getDistributionMessageResult());
+	}	
+}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/test/emulators/JsonStatusDataTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/JsonStatusDataTest.java
similarity index 96%
rename from asdc-controller/src/test/java/org/openecomp/mso/asdc/client/test/emulators/JsonStatusDataTest.java
rename to asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/JsonStatusDataTest.java
index 7607832..5e2f1ad 100644
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/test/emulators/JsonStatusDataTest.java
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/JsonStatusDataTest.java
@@ -7,9 +7,9 @@
  * 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.
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.mso.asdc.client.test.emulators;
+package org.onap.so.asdc.client.test.emulators;
 
 import org.junit.Test;
 
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/JsonVfModuleMetaDataTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/JsonVfModuleMetaDataTest.java
new file mode 100644
index 0000000..6da3a2c
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/JsonVfModuleMetaDataTest.java
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2018 Huawei Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.asdc.client.test.emulators;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.HashMap;
+
+import org.junit.Test;
+
+public class JsonVfModuleMetaDataTest {
+	
+	@Test
+	public void attributesMapTest() {
+		JsonVfModuleMetaData vfModuleMetadata = new JsonVfModuleMetaData();
+		vfModuleMetadata.setAttribute("vfModuleModelDescription", "vfModuleModelDescription");
+		vfModuleMetadata.setAttribute("vfModuleModelInvariantUUID", "vfModuleModelInvariantUUID");
+		vfModuleMetadata.setAttribute("vfModuleModelCustomizationUUID", "vfModuleModelCustomizationUUID");
+		vfModuleMetadata.setAttribute("vfModuleModelName", "vfModuleModelName");
+		vfModuleMetadata.setAttribute("vfModuleModelUUID", "vfModuleModelUUID");
+		vfModuleMetadata.setAttribute("vfModuleModelVersion", "vfModuleModelVersion");
+		vfModuleMetadata.setAttribute("isBase", true);
+		
+		assertEquals("vfModuleModelDescription", vfModuleMetadata.getVfModuleModelDescription());
+		assertEquals("vfModuleModelInvariantUUID", vfModuleMetadata.getVfModuleModelInvariantUUID());
+		assertEquals("vfModuleModelCustomizationUUID", vfModuleMetadata.getVfModuleModelCustomizationUUID());
+		assertEquals("vfModuleModelName", vfModuleMetadata.getVfModuleModelName());
+		assertEquals("vfModuleModelUUID", vfModuleMetadata.getVfModuleModelUUID());
+		assertEquals("vfModuleModelVersion", vfModuleMetadata.getVfModuleModelVersion());
+		assertEquals(true, vfModuleMetadata.isBase());
+		assertEquals(null, vfModuleMetadata.getArtifacts());
+		assertEquals(new HashMap<String, String>(), vfModuleMetadata.getProperties());
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/NotificationDataImplTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/NotificationDataImplTest.java
new file mode 100644
index 0000000..b1524e0
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/NotificationDataImplTest.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.client.test.emulators;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Test;
+import org.mockito.Mock;
+import org.onap.so.asdc.BaseTest;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class NotificationDataImplTest extends BaseTest {
+	@Autowired
+	private NotificationDataImpl notificationDataImpl;
+	
+	@Mock
+	private ArtifactInfoImpl artifactInfoImpl;
+	
+	private static final String NOTIFICATION_DATA_IMPL_STRING = "NotificationDataImpl [distributionID=distributionID, serviceName=serviceName, "
+			+ "serviceVersion=serviceVersion, serviceUUID=serviceUUID, serviceDescription=serviceDescription, "
+			+ "serviceInvariantUUID=serviceInvariantUUID, resources=null, serviceArtifacts=[artifactInfoImpl], workloadContext=workloadContext]";
+	
+	@Test
+	public void toStringTest() {
+		List<ArtifactInfoImpl> relevantServiceArtifacts = new ArrayList<ArtifactInfoImpl>();
+		relevantServiceArtifacts.add(artifactInfoImpl);
+		notificationDataImpl.setDistributionID("distributionID");
+		notificationDataImpl.setServiceName("serviceName");
+		notificationDataImpl.setServiceVersion("serviceVersion");
+		notificationDataImpl.setServiceDescription("serviceDescription");
+		notificationDataImpl.setServiceUUID("serviceUUID");
+		notificationDataImpl.setServiceInvariantUUID("serviceInvariantUUID");
+		notificationDataImpl.setWorkloadContext("workloadContext");
+		notificationDataImpl.setServiceArtifacts(relevantServiceArtifacts);
+		
+		assertEquals(NOTIFICATION_DATA_IMPL_STRING, notificationDataImpl.toString());
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/ResourceInfoImplTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/ResourceInfoImplTest.java
new file mode 100644
index 0000000..4236617
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/emulators/ResourceInfoImplTest.java
@@ -0,0 +1,51 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.client.test.emulators;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Test;
+import org.mockito.Mock;
+import org.onap.sdc.api.notification.IResourceInstance;
+import org.onap.so.asdc.BaseTest;
+
+public class ResourceInfoImplTest extends BaseTest {
+	@Mock
+	private IResourceInstance iResourceInstance;
+	
+	@Test
+	public void convertToJsonContainerTest() {
+		List<IResourceInstance> resources = new ArrayList<IResourceInstance>();
+		resources.add(iResourceInstance);
+		ResourceInfoImpl.convertToJsonContainer(resources);
+		
+		assertEquals(1, ResourceInfoImpl.convertToJsonContainer(resources).size());
+	}
+	
+	@Test
+	public void convertToJsonContainerNullListTest() {
+		assertTrue(ResourceInfoImpl.convertToJsonContainer(null).isEmpty());
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/test/rest/ASDCRestInterfaceTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/rest/ASDCRestInterfaceTest.java
new file mode 100644
index 0000000..1944c3a
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/rest/ASDCRestInterfaceTest.java
@@ -0,0 +1,183 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * 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.onap.so.asdc.client.test.rest;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.post;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching;
+import static com.shazam.shazamcrest.MatcherAssert.assertThat;
+import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.transaction.Transactional;
+import javax.ws.rs.core.Response;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.mockito.Spy;
+import org.onap.so.asdc.BaseTest;
+import org.onap.so.asdc.client.test.emulators.DistributionClientEmulator;
+import org.onap.so.asdc.client.test.emulators.NotificationDataImpl;
+import org.onap.so.db.catalog.beans.AllottedResource;
+import org.onap.so.db.catalog.beans.AllottedResourceCustomization;
+import org.onap.so.db.catalog.beans.CollectionResource;
+import org.onap.so.db.catalog.beans.CollectionResourceCustomization;
+import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
+import org.onap.so.db.catalog.beans.ConfigurationResource;
+import org.onap.so.db.catalog.beans.ConfigurationResourceCustomization;
+import org.onap.so.db.catalog.beans.InstanceGroup;
+import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
+import org.onap.so.db.catalog.beans.NetworkResource;
+import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
+import org.onap.so.db.catalog.beans.Service;
+import org.onap.so.db.catalog.beans.ServiceProxyResource;
+import org.onap.so.db.catalog.beans.ServiceProxyResourceCustomization;
+import org.onap.so.db.catalog.beans.ServiceRecipe;
+import org.onap.so.db.catalog.beans.ToscaCsar;
+import org.onap.so.db.catalog.beans.VnfResourceCustomization;
+import org.onap.so.db.catalog.beans.VnfcInstanceGroupCustomization;
+import org.onap.so.db.catalog.data.repository.AllottedResourceCustomizationRepository;
+import org.onap.so.db.catalog.data.repository.AllottedResourceRepository;
+import org.onap.so.db.catalog.data.repository.CollectionResourceInstanceGroupCustomizationRepository;
+import org.onap.so.db.catalog.data.repository.CollectionResourceRepository;
+import org.onap.so.db.catalog.data.repository.ConfigurationResourceRepository;
+import org.onap.so.db.catalog.data.repository.InstanceGroupRepository;
+import org.onap.so.db.catalog.data.repository.NetworkResourceRepository;
+import org.onap.so.db.catalog.data.repository.ServiceProxyResourceRepository;
+import org.onap.so.db.catalog.data.repository.ServiceRepository;
+import org.onap.so.db.catalog.data.repository.VnfcInstanceGroupCustomizationRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.embedded.LocalServerPort;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.MapperFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class ASDCRestInterfaceTest extends BaseTest {
+	//ASDC Controller writes to this path
+	static {
+		System.setProperty("mso.config.path", "src/test/resources/");
+	}
+
+    
+	@Autowired
+	private AllottedResourceRepository allottedRepo;
+
+	@Autowired
+	private ServiceRepository serviceRepo; 
+	
+	@Autowired
+	private NetworkResourceRepository networkRepo;
+	
+	@Autowired
+	private ASDCRestInterface asdcRestInterface;
+
+	private TestRestTemplate restTemplate = new TestRestTemplate("test", "test");
+
+	private HttpHeaders headers = new HttpHeaders();
+	
+	@Spy
+	DistributionClientEmulator spyClient = new DistributionClientEmulator();
+
+	@LocalServerPort
+	private int port;
+	
+		
+	@Test
+	@Transactional
+	public void testAllottedResourceService() throws Exception {
+		
+		stubFor(post(urlPathMatching("/aai/.*"))
+				  .willReturn(aResponse()
+				  .withStatus(200)
+				  .withHeader("Content-Type", "application/json")));
+		
+		ObjectMapper mapper = new ObjectMapper();
+		NotificationDataImpl request = mapper.readValue(new File("src/test/resources/resource-examples/allottedresource/notif-portm.json"), NotificationDataImpl.class);
+		headers.add("resource-location", "src/test/resources/resource-examples/allottedresource/");
+		HttpEntity<NotificationDataImpl> entity = new HttpEntity<NotificationDataImpl>(request, headers);
+				
+		ResponseEntity<String> response = restTemplate.exchange(createURLWithPort("test/treatNotification/v1"), HttpMethod.POST,
+				entity, String.class);
+		
+		assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());	
+		
+		AllottedResource expectedService = new AllottedResource();
+		expectedService.setDescription("rege1802pnf");
+		expectedService.setModelInvariantUUID("b8f83c3f-077c-4e2c-b489-c66382060436");
+		expectedService.setModelName("rege1802pnf");
+		expectedService.setModelUUID("5b18c75e-2d08-4bf2-ad58-4ea704ec648d");
+		expectedService.setModelVersion("1.0");
+		expectedService.setSubcategory("Contrail Route");
+		expectedService.setToscaNodeType("org.openecomp.resource.pnf.Rege1802pnf");
+		Set<AllottedResourceCustomization> arCustomizationSet = new HashSet<AllottedResourceCustomization>();
+		AllottedResourceCustomization arCustomization = new AllottedResourceCustomization();
+		arCustomization.setModelCustomizationUUID("f62bb612-c5d4-4406-865c-0abec30631ba");
+		arCustomization.setModelInstanceName("rege1802pnf 0");
+		arCustomizationSet.add(arCustomization);
+		
+		arCustomization.setAllottedResource(expectedService);
+		
+		
+		expectedService.setAllotedResourceCustomization(arCustomizationSet);	
+
+		AllottedResource actualResponse = allottedRepo.findResourceByModelUUID("5b18c75e-2d08-4bf2-ad58-4ea704ec648d");
+				
+		
+		if(actualResponse == null)
+			throw new Exception("No Allotted Resource Written to database");
+		
+
+		assertThat(actualResponse, sameBeanAs(expectedService).ignoring("0x1.created").ignoring("0x1.allotedResourceCustomization.created"));
+	}
+	
+	@Test
+	public void invokeASDCStatusDataNullTest() {
+		String request = "";
+		Response response = asdcRestInterface.invokeASDCStatusData(request);
+		assertNull(response);
+		
+	}
+	
+	
+	
+	
+
+	protected String createURLWithPort(String uri) {
+		return "http://localhost:" + port + uri;
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/test/rest/HealthCheckTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/rest/HealthCheckTest.java
new file mode 100644
index 0000000..f5f7445
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/rest/HealthCheckTest.java
@@ -0,0 +1,65 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * 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.onap.so.asdc.client.test.rest;
+
+import static org.junit.Assert.assertEquals;
+import javax.ws.rs.core.Response;
+import org.json.JSONException;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.so.asdc.Application;
+import org.onap.so.asdc.BaseTest;
+import org.springframework.boot.context.embedded.LocalServerPort;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.junit4.SpringRunner;
+
+public class HealthCheckTest extends BaseTest {
+	
+	@LocalServerPort
+	private int port;
+
+	TestRestTemplate restTemplate = new TestRestTemplate();
+
+	HttpHeaders headers = new HttpHeaders();
+	
+	@Test
+	public void testHealthcheck() throws JSONException {
+
+		HttpEntity<String> entity = new HttpEntity<String>(null, headers);
+
+		ResponseEntity<String> response = restTemplate.exchange(
+				createURLWithPort("/manage/health"),
+				HttpMethod.GET, entity, String.class);
+		
+		assertEquals(Response.Status.OK.getStatusCode(),response.getStatusCode().value());
+	}
+	
+	private String createURLWithPort(String uri) {
+		return "http://localhost:" + port + uri;
+	}
+
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/tests/ASDCConfigurationTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/tests/ASDCConfigurationTest.java
new file mode 100644
index 0000000..6f07f44
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/tests/ASDCConfigurationTest.java
@@ -0,0 +1,152 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * 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.onap.so.asdc.client.tests;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.transaction.Transactional;
+
+import org.junit.Test;
+import org.onap.so.asdc.BaseTest;
+import org.onap.so.asdc.client.ASDCConfiguration;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * This class tests the ASDC Controller by using the ASDC Mock CLient
+ * 
+ *
+ */
+@Transactional
+public class ASDCConfigurationTest extends BaseTest {
+	
+    @Autowired
+    private ASDCConfiguration config;
+    
+    private List<String> msgBusAddressList = new ArrayList<String>();
+    
+    private static final String MSO_PRE_IST = "msopreist";
+    private static final String MSO_ASDC_ID_LOCAL = "msoasdc-id-local";
+    private static final String PRE_IST = "Pre-IST";
+    private static final String ASDC_ADDRESS = "localhost:8443";
+    
+    @Test
+    public void isUseHttpsWithDmaapTest() {
+    	assertFalse(config.isUseHttpsWithDmaap());
+    }
+    
+    @Test
+    public void isConsumeProduceStatusTopicTest() {
+    	assertTrue(config.isConsumeProduceStatusTopic());
+    }
+    
+    @Test
+    public void getUserTest() {
+    	assertTrue(MSO_PRE_IST.equals(config.getUser()));
+    }
+    
+    @Test
+    public void getConsumerGroupTest() {
+    	assertTrue(MSO_ASDC_ID_LOCAL.equals(config.getConsumerGroup()));
+    }
+    
+    @Test
+    public void getConsumerIDTest() {
+    	assertTrue(MSO_ASDC_ID_LOCAL.equals(config.getConsumerID()));
+    }
+    
+    @Test
+    public void getEnvironmentNameTest() {
+    	assertTrue(PRE_IST.equals(config.getEnvironmentName()));
+    }
+    
+    @Test
+    public void getAsdcAddress() {
+    	assertTrue(ASDC_ADDRESS.equals(config.getAsdcAddress()));
+    }
+    
+    @Test
+    public void getPasswordTest() {
+    	assertTrue(MSO_PRE_IST.equals(config.getPassword()));
+    }
+    
+    @Test
+    public void getPollingIntervalTest() {
+    	assertTrue(config.getPollingInterval() == 30);
+    }
+    
+    @Test
+    public void getPollingTimeoutTest() {
+    	assertTrue(config.getPollingTimeout() == 30);
+    }
+    
+    @Test
+    public void getRelevantArtifactTypesTest() {
+    	assertTrue(config.getRelevantArtifactTypes().size() == ASDCConfiguration.SUPPORTED_ARTIFACT_TYPES_LIST.size());
+    }
+    
+    @Test
+    public void getWatchDogTimeoutTest() {
+    	assertTrue(config.getWatchDogTimeout() == 1);
+    }
+    
+    @Test
+    public void activateServerTLSAuthTest() {
+    	assertFalse(config.activateServerTLSAuth());
+    }
+    
+    @Test
+    public void getKeyStorePasswordTest() {
+    	assertNull(config.getKeyStorePassword());
+    }
+    
+    @Test
+    public void getKeyStorePathTest() {
+    	assertNull(config.getKeyStorePath());
+    }
+    
+    @Test
+    public void isFilterInEmptyResourcesTest() {
+    	assertTrue(config.isFilterInEmptyResources());
+    }
+    
+    @Test
+    public void setGetAsdcControllerNameTest() {
+    	String asdcControllerName = "testAsdcControllerName";
+    	config.setAsdcControllerName(asdcControllerName);
+    	String actualAsdcControllerName = config.getAsdcControllerName();
+    	assertEquals(asdcControllerName, actualAsdcControllerName);
+    }
+    
+    @Test
+    public void getMsgBusAddressTest() {
+    	msgBusAddressList.add("localhost");
+    	msgBusAddressList.add("localhost");
+    	
+    	List<String> actualMsgBusAddress = config.getMsgBusAddress();
+    	assertEquals(msgBusAddressList, actualMsgBusAddress);
+    }
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/installer/ToscaResourceStructureTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/installer/ToscaResourceStructureTest.java
new file mode 100644
index 0000000..de0d2e0
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/installer/ToscaResourceStructureTest.java
@@ -0,0 +1,135 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.installer;
+
+import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onap.sdc.tosca.parser.impl.SdcCsarHelperImpl;
+import org.onap.sdc.toscaparser.api.NodeTemplate;
+import org.onap.sdc.toscaparser.api.elements.Metadata;
+import org.onap.so.asdc.client.exceptions.ASDCDownloadException;
+import org.onap.so.asdc.client.test.emulators.ArtifactInfoImpl;
+import org.onap.so.db.catalog.beans.AllottedResource;
+import org.onap.so.db.catalog.beans.AllottedResourceCustomization;
+import org.onap.so.db.catalog.beans.NetworkResource;
+import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
+import org.onap.so.db.catalog.beans.Service;
+import org.onap.so.db.catalog.beans.TempNetworkHeatTemplateLookup;
+import org.onap.so.db.catalog.beans.ToscaCsar;
+import org.onap.so.db.catalog.beans.VfModule;
+import org.onap.so.db.catalog.beans.VfModuleCustomization;
+import org.onap.so.db.catalog.beans.VnfResourceCustomization;
+
+public class ToscaResourceStructureTest {
+	private ArtifactInfoImpl artifactInfo;
+	private SdcCsarHelperImpl sdcCsarHelper;
+	
+	private ToscaResourceStructure toscaResourceStructure;
+	
+	@Rule
+	public ExpectedException expectedException = ExpectedException.none();
+	
+	@Test
+	public void toscaResourceStructureBeanTest() {
+		artifactInfo = mock(ArtifactInfoImpl.class);
+		sdcCsarHelper = mock(SdcCsarHelperImpl.class);
+		
+		toscaResourceStructure = new ToscaResourceStructure();
+		toscaResourceStructure.setHeatTemplateUUID("heatTemplateUUID");
+		toscaResourceStructure.setAllottedList(new ArrayList<NodeTemplate>());
+		toscaResourceStructure.setSdcCsarHelper(sdcCsarHelper);
+		toscaResourceStructure.setServiceMetadata(new Metadata(new HashMap<>()));
+		toscaResourceStructure.setCatalogService(new Service());
+		toscaResourceStructure.setNetworkTypes(new ArrayList<>());
+		toscaResourceStructure.setVfTypes(new ArrayList<>());
+		toscaResourceStructure.setCatalogResourceCustomization(new AllottedResourceCustomization());
+		toscaResourceStructure.setCatalogNetworkResourceCustomization(new NetworkResourceCustomization());
+		toscaResourceStructure.setCatalogNetworkResource(new NetworkResource());
+		toscaResourceStructure.setCatalogVfModule(new VfModule());
+		toscaResourceStructure.setVnfResourceCustomization(new VnfResourceCustomization());
+		toscaResourceStructure.setVfModuleCustomization(new VfModuleCustomization());
+		toscaResourceStructure.setAllottedResource(new AllottedResource());
+		toscaResourceStructure.setAllottedResourceCustomization(new AllottedResourceCustomization());
+		toscaResourceStructure.setCatalogTempNetworkHeatTemplateLookup(new TempNetworkHeatTemplateLookup());
+		toscaResourceStructure.setHeatFilesUUID("heatFilesUUID");
+		toscaResourceStructure.setToscaArtifact(artifactInfo);
+		toscaResourceStructure.setToscaCsar(new ToscaCsar());
+		toscaResourceStructure.setVnfAlreadyInstalled(true);
+		toscaResourceStructure.setVolHeatTemplateUUID("volHeatTemplateUUID");
+		toscaResourceStructure.setEnvHeatTemplateUUID("envHeatTemplateUUID");
+		toscaResourceStructure.setServiceVersion("serviceVersion");
+		toscaResourceStructure.setWorkloadPerformance("workloadPerformance");
+		toscaResourceStructure.setVfModule(new VfModule());
+		toscaResourceStructure.setTempNetworkHeatTemplateLookup(new TempNetworkHeatTemplateLookup());
+		toscaResourceStructure.setSuccessfulDeployment();
+		
+		assertEquals("heatTemplateUUID", toscaResourceStructure.getHeatTemplateUUID());
+		assertThat(toscaResourceStructure.getAllottedList(), sameBeanAs(new ArrayList<NodeTemplate>()));
+		assertEquals(sdcCsarHelper, toscaResourceStructure.getSdcCsarHelper());
+		assertThat(toscaResourceStructure.getServiceMetadata(), sameBeanAs(new Metadata(new HashMap<>())));
+		assertThat(toscaResourceStructure.getCatalogService(), sameBeanAs(new Service()));
+		assertThat(toscaResourceStructure.getNetworkTypes(), sameBeanAs(new ArrayList<>()));
+		assertThat(toscaResourceStructure.getVfTypes(), sameBeanAs(new ArrayList<>()));
+		assertThat(toscaResourceStructure.getCatalogResourceCustomization(), sameBeanAs(new AllottedResourceCustomization()));
+		assertThat(toscaResourceStructure.getCatalogNetworkResourceCustomization(), sameBeanAs(new NetworkResourceCustomization()));
+		assertThat(toscaResourceStructure.getCatalogNetworkResource(), sameBeanAs(new NetworkResource()));
+		assertThat(toscaResourceStructure.getCatalogVfModule(), sameBeanAs(new VfModule()));
+		assertThat(toscaResourceStructure.getVnfResourceCustomization(), sameBeanAs(new VnfResourceCustomization()));
+		assertThat(toscaResourceStructure.getVfModuleCustomization(), sameBeanAs(new VfModuleCustomization()));
+		assertThat(toscaResourceStructure.getAllottedResource(), sameBeanAs(new AllottedResource()));
+		assertThat(toscaResourceStructure.getAllottedResourceCustomization(), sameBeanAs(new AllottedResourceCustomization()));
+		assertThat(toscaResourceStructure.getCatalogTempNetworkHeatTemplateLookup(), sameBeanAs(new TempNetworkHeatTemplateLookup()));
+		assertEquals("heatFilesUUID", toscaResourceStructure.getHeatFilesUUID());
+		assertEquals(artifactInfo, toscaResourceStructure.getToscaArtifact());
+		assertThat(toscaResourceStructure.getToscaCsar(), sameBeanAs(new ToscaCsar()));
+		assertEquals(true, toscaResourceStructure.isVnfAlreadyInstalled());
+		assertEquals("volHeatTemplateUUID", toscaResourceStructure.getVolHeatTemplateUUID());
+		assertEquals("envHeatTemplateUUID", toscaResourceStructure.getEnvHeatTemplateUUID());
+		assertEquals("serviceVersion", toscaResourceStructure.getServiceVersion());
+		assertEquals("workloadPerformance", toscaResourceStructure.getWorkloadPerformance());
+		assertThat(toscaResourceStructure.getVfModule(), sameBeanAs(new VfModule()));
+		assertThat(toscaResourceStructure.getTempNetworkHeatTemplateLookup(), sameBeanAs(new TempNetworkHeatTemplateLookup()));
+		assertEquals(true, toscaResourceStructure.isDeployedSuccessfully());
+	}
+	
+	@Test
+	public void updateResourceStructureExceptionTest() throws Exception {
+		expectedException.expect(ASDCDownloadException.class);
+		
+		artifactInfo = mock(ArtifactInfoImpl.class);
+		toscaResourceStructure = new ToscaResourceStructure();
+
+		doReturn("artifactName").when(artifactInfo).getArtifactName();
+		
+		toscaResourceStructure.updateResourceStructure(artifactInfo);
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInstallerTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInstallerTest.java
new file mode 100644
index 0000000..d96e480
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInstallerTest.java
@@ -0,0 +1,479 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.installer.heat;
+
+import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
+import static com.shazam.shazamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+
+import static org.junit.Assert.assertNull;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.transaction.Transactional;
+
+import org.apache.commons.io.IOUtils;
+import org.hibernate.exception.LockAcquisitionException;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.onap.sdc.api.notification.IResourceInstance;
+import org.onap.sdc.api.results.IDistributionClientDownloadResult;
+import org.onap.sdc.tosca.parser.impl.SdcCsarHelperImpl;
+import org.onap.sdc.tosca.parser.impl.SdcPropertyNames;
+import org.onap.sdc.toscaparser.api.CapabilityAssignment;
+import org.onap.sdc.toscaparser.api.CapabilityAssignments;
+import org.onap.sdc.toscaparser.api.Group;
+import org.onap.sdc.toscaparser.api.NodeTemplate;
+import org.onap.sdc.toscaparser.api.elements.Metadata;
+import org.onap.sdc.utils.DistributionStatusEnum;
+import org.onap.so.asdc.BaseTest;
+import org.onap.so.asdc.client.ASDCConfiguration;
+import org.onap.so.asdc.client.exceptions.ArtifactInstallerException;
+import org.onap.so.asdc.client.test.emulators.ArtifactInfoImpl;
+import org.onap.so.asdc.client.test.emulators.JsonStatusData;
+import org.onap.so.asdc.client.test.emulators.NotificationDataImpl;
+import org.onap.so.asdc.installer.VfModuleArtifact;
+import org.onap.so.asdc.installer.VfResourceStructure;
+import org.onap.so.db.catalog.beans.AllottedResource;
+import org.onap.so.db.catalog.beans.AllottedResourceCustomization;
+import org.onap.so.db.catalog.beans.ExternalServiceToInternalService;
+import org.onap.so.db.catalog.beans.HeatTemplate;
+import org.onap.so.db.catalog.beans.NetworkResource;
+import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
+import org.onap.so.db.catalog.beans.Service;
+import org.onap.so.db.catalog.beans.VnfResource;
+import org.onap.so.db.catalog.beans.VnfResourceCustomization;
+import org.onap.so.db.catalog.data.repository.AllottedResourceCustomizationRepository;
+import org.onap.so.db.catalog.data.repository.AllottedResourceRepository;
+import org.onap.so.db.catalog.data.repository.ExternalServiceToInternalServiceRepository;
+import org.onap.so.db.catalog.data.repository.ServiceRepository;
+import org.onap.so.db.request.beans.WatchdogComponentDistributionStatus;
+import org.onap.so.db.request.beans.WatchdogDistributionStatus;
+import org.onap.so.db.request.beans.WatchdogServiceModVerIdLookup;
+import org.onap.so.db.request.data.repository.WatchdogComponentDistributionStatusRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class ToscaResourceInstallerTest extends BaseTest {
+	@Autowired
+	private ToscaResourceInstaller toscaInstaller;
+	@Autowired
+	private WatchdogComponentDistributionStatusRepository watchdogCDStatusRepository;
+	@Autowired
+	private AllottedResourceRepository allottedRepo;
+	@Autowired
+	private AllottedResourceCustomizationRepository allottedCustomizationRepo;
+	@Autowired
+	private ServiceRepository serviceRepo;
+	@Autowired
+	private ExternalServiceToInternalServiceRepository externalServiceToInternalServiceRepository;
+	@Mock
+	private SdcCsarHelperImpl sdcCsarHelper;
+	@Mock
+	private Metadata metadata;
+	@Mock
+	private ArtifactInfoImpl artifactInfo;
+	@Mock
+	private List<Group> vfGroups;
+	@Mock
+	private IResourceInstance resourceInstance;
+	@Rule
+	public ExpectedException expectedException = ExpectedException.none();
+
+	private NotificationDataImpl notificationData;
+	private JsonStatusData statusData;
+	private static final String MSO = "SO";
+
+	private AllottedResource allottedResource;
+	private AllottedResourceCustomization allottedResourceCustomization;
+	private Service catalogService;
+
+	@Before
+	public void before() {
+		MockitoAnnotations.initMocks(this);
+		
+		notificationData = new NotificationDataImpl();
+		statusData = new JsonStatusData();
+	}
+	
+	@Test
+	public void isResourceAlreadyDeployedTest() throws Exception {
+		notificationData.setServiceName("serviceName");
+		notificationData.setServiceVersion("123456");
+		notificationData.setServiceUUID("serviceUUID");
+		notificationData.setDistributionID("testStatusSuccessTosca");
+		
+		WatchdogComponentDistributionStatus expectedComponentDistributionStatus = 
+				new WatchdogComponentDistributionStatus(notificationData.getDistributionID(), MSO);
+		expectedComponentDistributionStatus.setComponentDistributionStatus(DistributionStatusEnum.COMPONENT_DONE_OK.name());
+		
+		doReturn(true).when(vfResourceStructure).isDeployedSuccessfully();
+		doReturn(notificationData).when(vfResourceStructure).getNotification();
+		doReturn(resourceInstance).when(vfResourceStructure).getResourceInstance();
+		doReturn("resourceInstanceName").when(resourceInstance).getResourceInstanceName();
+		doReturn("resourceCustomizationUUID").when(resourceInstance).getResourceCustomizationUUID();
+		doReturn("resourceName").when(resourceInstance).getResourceName();
+		
+		toscaInstaller.isResourceAlreadyDeployed(vfResourceStructure);
+		
+		WatchdogComponentDistributionStatus actualWatchdogComponentDistributionStatus = getWatchdogCDStatusWithName(watchdogCDStatusRepository.findByDistributionId(notificationData.getDistributionID()), MSO);
+		
+		verify(vfResourceStructure, times(3)).getResourceInstance();
+		verify(vfResourceStructure, times(5)).getNotification();
+		assertThat(actualWatchdogComponentDistributionStatus, sameBeanAs(expectedComponentDistributionStatus)
+				.ignoring("createTime")
+				.ignoring("modifyTime"));
+	}
+	
+	@Test
+	public void isResourceAlreadyDeployedFalseTest() throws Exception {
+		notificationData.setServiceName("serviceName");
+		notificationData.setServiceVersion("123456");
+		notificationData.setServiceUUID("serviceUUID");
+		notificationData.setDistributionID("testStatusSuccess");
+		
+		doThrow(RuntimeException.class).when(vfResourceStructure).isDeployedSuccessfully();
+		doReturn(notificationData).when(vfResourceStructure).getNotification();
+		doReturn(resourceInstance).when(vfResourceStructure).getResourceInstance();
+		doReturn("resourceInstanceName").when(resourceInstance).getResourceInstanceName();
+		doReturn("resourceCustomizationUUID").when(resourceInstance).getResourceCustomizationUUID();
+		doReturn("resourceName").when(resourceInstance).getResourceName();
+		
+		toscaInstaller.isResourceAlreadyDeployed(vfResourceStructure);
+		
+		verify(vfResourceStructure, times(3)).getResourceInstance();
+		verify(vfResourceStructure, times(4)).getNotification();
+	}
+	
+	@Test
+	public void isResourceAlreadyDeployedExceptionTest() throws ArtifactInstallerException {
+		expectedException.expect(ArtifactInstallerException.class);
+		
+		toscaInstaller.isResourceAlreadyDeployed(vfResourceStructure);
+	}
+	
+	@Test
+	public void installTheComponentStatusTest() throws Exception {
+		String distributionId = "testStatusSuccessTosca";
+		String componentName = "testComponentName";
+		
+		statusData = spy(JsonStatusData.class);
+		doReturn(distributionId).when(statusData).getDistributionID();
+		doReturn(componentName).when(statusData).getComponentName();
+		
+		WatchdogComponentDistributionStatus expectedWatchdogComponentDistributionStatus = 
+				new WatchdogComponentDistributionStatus(distributionId, componentName);
+		expectedWatchdogComponentDistributionStatus.setComponentDistributionStatus(statusData.getStatus().toString());
+		
+		WatchdogComponentDistributionStatus cdStatus = new WatchdogComponentDistributionStatus(statusData.getDistributionID(),
+				statusData.getComponentName());
+		
+		toscaInstaller.installTheComponentStatus(statusData);
+		
+		WatchdogComponentDistributionStatus actualWatchdogComponentDistributionStatus = getWatchdogCDStatusWithName(watchdogCDStatusRepository.findByDistributionId("testStatusSuccessTosca"), statusData.getComponentName());
+		
+		assertEquals(statusData.getDistributionID(), cdStatus.getDistributionId());
+		assertEquals(statusData.getComponentName(), cdStatus.getComponentName());
+		assertThat(actualWatchdogComponentDistributionStatus, sameBeanAs(expectedWatchdogComponentDistributionStatus)
+				.ignoring("createTime")
+				.ignoring("modifyTime"));
+	}
+	
+	@Test
+	public void installTheComponentStatusExceptionTest() throws ArtifactInstallerException {
+		expectedException.expect(ArtifactInstallerException.class);
+		
+		statusData = spy(JsonStatusData.class);
+		doReturn(null).when(statusData).getStatus();
+		
+		toscaInstaller.installTheComponentStatus(statusData);
+	}
+	
+	@Test
+	@Ignore
+	@Transactional
+	public void installTheResourceTest() throws Exception {
+		notificationData.setDistributionID("testStatusSuccessTosca");
+		notificationData.setServiceVersion("123456");
+		notificationData.setServiceUUID("5df8b6de-2083-11e7-93ae-92361f002671");
+		notificationData.setWorkloadContext("workloadContext");
+		
+		HashMap<String, VfModuleArtifact> vfModuleArtifacts = mock(HashMap.class);
+		CapabilityAssignments capabilityAssignments = mock(CapabilityAssignments.class);
+		CapabilityAssignment capabilityAssignment = mock(CapabilityAssignment.class);
+		
+		vfResourceStructure = spy(new VfResourceStructure(notificationData, resourceInstance));
+		
+		VnfResource vnfResource = new VnfResource();
+		vnfResource.setModelName("modelName");
+		vnfResource.setModelVersion("1.1");
+		vnfResource.setModelUUID("modelUUID");
+		vnfResource.setOrchestrationMode("orchestrationMode");
+		
+		VnfResourceCustomization vnfResourceCustomization = new VnfResourceCustomization();
+		vnfResourceCustomization.setVnfResources(vnfResource);
+		vnfResourceCustomization.setModelCustomizationUUID("vnfResCustModelCustomizationUUID");
+		vnfResourceCustomization.setModelInstanceName("modelInstanceName");
+		
+		AllottedResource allottedResource = new AllottedResource();
+		allottedResource.setModelUUID("serviceMetadataValue");
+		allottedResource.setModelInvariantUUID("modelInvariantUUID");
+		allottedResource.setModelName("modelName");
+		allottedResource.setModelVersion("1.1");
+		
+		AllottedResourceCustomization allottedResourceCustomization = new AllottedResourceCustomization();
+		allottedResourceCustomization.setAllottedResource(allottedResource);
+		allottedResourceCustomization.setModelCustomizationUUID("modelCustomizationUUID");
+		allottedResourceCustomization.setModelInstanceName("modelInstanceName");
+		
+		Service catalogService = new Service();
+		catalogService.setServiceType("serviceType");
+		catalogService.setModelUUID("5df8b6de-2083-11e7-93ae-92361f002672");
+		catalogService.setModelInvariantUUID("modelInvariantUUID");
+		catalogService.setModelName("modelName");
+		catalogService.setModelVersion("modelVersion");
+		catalogService.getVnfCustomizations().add(vnfResourceCustomization);
+		
+		Iterator artifactIterator = mock(Iterator.class);
+		Iterator nodeTemplateIterator = mock(Iterator.class);
+		IDistributionClientDownloadResult clientResult = mock(IDistributionClientDownloadResult.class);
+		doReturn(IOUtils.toByteArray(
+				new FileInputStream(
+					new File(
+							getClass().getClassLoader().getResource("resource-examples/simpleTest.yaml").getFile())
+				))).when(clientResult).getArtifactPayload();
+		VfModuleArtifact vfModuleArtifact = new VfModuleArtifact(artifactInfo, clientResult);
+		Collection<VfModuleArtifact> vfModuleArtifactsValues = mock(Collection.class);
+		
+		NodeTemplate nodeTemplate = mock(NodeTemplate.class);
+		List<NodeTemplate> nodeTemplateList = new ArrayList<>();
+		nodeTemplateList.add(nodeTemplate);
+		
+		HeatTemplate heatTemplate = new HeatTemplate();
+		heatTemplate.setArtifactUuid("ff874603-4222-11e7-9252-005056850d2e");
+		heatTemplate.setArtifactChecksum("MANUAL RECORD");
+		heatTemplate.setTemplateBody("templateBody");
+		heatTemplate.setTemplateName("module_mns_zrdm3frwl01exn_01_rgvm_1.yml");
+		heatTemplate.setVersion("1");
+		
+		NetworkResource networkResource = new NetworkResource();
+		networkResource.setAicVersionMin("aicVersionMin");
+		networkResource.setModelUUID("modelUUID");
+		networkResource.setOrchestrationMode("orchestrationMode");
+		networkResource.setModelVersion("modelVersion");
+		networkResource.setNeutronNetworkType("neutronNetworkType");
+		networkResource.setAicVersionMax("aicVersionMax");
+		networkResource.setModelName("CONTRAIL30_GNDIRECT");
+		networkResource.setModelInvariantUUID("modelInvariantUUID");
+		networkResource.setHeatTemplate(heatTemplate);
+		
+		NetworkResourceCustomization networkResourceCustomization = new NetworkResourceCustomization();
+		networkResourceCustomization.setModelCustomizationUUID("modelCustomizationUUID");
+		networkResourceCustomization.setModelInstanceName("modelInstanceName");
+		networkResourceCustomization.setNetworkResource(networkResource);
+		
+		WatchdogServiceModVerIdLookup expectedModVerIdLookup = new WatchdogServiceModVerIdLookup(notificationData.getDistributionID(), notificationData.getServiceUUID());
+		WatchdogDistributionStatus expectedDistributionStatus = new WatchdogDistributionStatus(notificationData.getDistributionID());
+		WatchdogComponentDistributionStatus expectedComponentDistributionStatus = new WatchdogComponentDistributionStatus(notificationData.getDistributionID(), MSO);
+		expectedComponentDistributionStatus.setComponentDistributionStatus(DistributionStatusEnum.COMPONENT_DONE_OK.name());
+		
+		doReturn(sdcCsarHelper).when(toscaResourceStruct).getSdcCsarHelper();
+		doReturn("metadataPropertyValue").when(sdcCsarHelper).getMetadataPropertyValue(any(Metadata.class), any(String.class));
+		doReturn("ntPropertyLeafValue").when(sdcCsarHelper).getNodeTemplatePropertyLeafValue(any(NodeTemplate.class), any(String.class));
+		doReturn("true").when(sdcCsarHelper).getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_PROVIDERNETWORK_ISPROVIDERNETWORK);
+		doReturn("1").when(sdcCsarHelper).getCapabilityPropertyLeafValue(any(CapabilityAssignment.class), any(String.class));
+		doReturn(vfGroups).when(sdcCsarHelper).getVfModulesByVf(any(String.class));
+		doReturn(capabilityAssignments).when(sdcCsarHelper).getCapabilitiesOf(any(NodeTemplate.class));
+		doReturn(capabilityAssignment).when(capabilityAssignments).getCapabilityByName(any(String.class));
+		
+		doReturn(catalogService).when(toscaResourceStruct).getCatalogService();
+		
+		doReturn(artifactInfo).when(toscaResourceStruct).getToscaArtifact();
+		doReturn("artifactChecksum").when(artifactInfo).getArtifactChecksum();
+		doReturn("artifactUUID").when(artifactInfo).getArtifactUUID();
+		doReturn("artifactName").when(artifactInfo).getArtifactName();
+		doReturn("1.0").when(artifactInfo).getArtifactVersion();
+		doReturn("artifactDescription").when(artifactInfo).getArtifactDescription();
+		doReturn("artifactURL").when(artifactInfo).getArtifactURL();
+		
+		doReturn(metadata).when(toscaResourceStruct).getServiceMetadata();
+		doReturn("serviceMetadataValue").when(metadata).getValue(any(String.class));
+		doReturn("CONTRAIL30_GNDIRECT").when(metadata).getValue(SdcPropertyNames.PROPERTY_NAME_NAME);
+		
+		doReturn("serviceVersion").when(toscaResourceStruct).getServiceVersion();
+		doReturn(nodeTemplateList).when(sdcCsarHelper).getServiceVfList();
+		doReturn(nodeTemplateList).when(sdcCsarHelper).getServiceVlList();
+		doReturn(nodeTemplateList).when(sdcCsarHelper).getAllottedResources();
+		doReturn(metadata).when(nodeTemplate).getMetaData();
+		doReturn("model_instance_name").when(nodeTemplate).getName();
+		doReturn(false).when(toscaResourceStruct).isVnfAlreadyInstalled();
+		doReturn(vnfResourceCustomization).when(toscaResourceStruct).getCatalogVnfResourceCustomization();
+		doReturn(allottedResource).when(toscaResourceStruct).getAllottedResource();
+		doReturn(allottedResourceCustomization).when(toscaResourceStruct).getCatalogAllottedResourceCustomization();
+		
+		doReturn(vfModuleArtifacts).when(vfResourceStructure).getArtifactsMapByUUID();
+		when(vfModuleArtifacts.values()).thenReturn(vfModuleArtifactsValues);
+		when(vfModuleArtifactsValues.iterator()).thenReturn(artifactIterator);
+		when(artifactIterator.hasNext()).thenReturn(true, false);
+		when(artifactIterator.next()).thenReturn(vfModuleArtifact);
+		when(artifactInfo.getArtifactType()).thenReturn(ASDCConfiguration.OTHER);
+		when(nodeTemplateIterator.hasNext()).thenReturn(true, false);
+		
+		doReturn(networkResource).when(toscaResourceStruct).getCatalogNetworkResource();
+		doReturn(networkResourceCustomization).when(toscaResourceStruct).getCatalogNetworkResourceCustomization();
+		
+		doNothing().when(toscaResourceStruct).setSuccessfulDeployment();
+		
+		toscaInstaller.installTheResource(toscaResourceStruct, vfResourceStructure);
+		
+		AllottedResource actualAllottedResource = allottedRepo.findResourceByModelUUID(allottedResource.getModelUUID());
+		AllottedResourceCustomization actualAllottedResourceCustomization = allottedCustomizationRepo.findOne(allottedResourceCustomization.getModelCustomizationUUID());
+		Service actualService = serviceRepo.findByServiceType(catalogService.getServiceType());
+		WatchdogComponentDistributionStatus actualWatchdogComponentDistributionStatus = getWatchdogCDStatusWithName(watchdogCDStatusRepository.findByDistributionId(notificationData.getDistributionID()), MSO);
+		
+		verify(toscaResourceStruct, times(1)).setSuccessfulDeployment();
+		assertThat(actualAllottedResource, 
+				sameBeanAs(allottedResource));
+		assertThat(actualAllottedResourceCustomization, sameBeanAs(allottedResourceCustomization)
+				.ignoring("created"));
+		assertThat(actualService, sameBeanAs(catalogService)
+				.ignoring("created")
+				.ignoring("networkCustomizations.0x1.created")
+				.ignoring("networkCustomizations.0x1.networkResource.created"));
+		assertThat(actualWatchdogComponentDistributionStatus, sameBeanAs(expectedComponentDistributionStatus)
+				.ignoring("createTime")
+				.ignoring("modifyTime"));
+	}
+
+	
+	@Test
+	public void installTheResourceExceptionTest() throws Exception {
+		expectedException.expect(ArtifactInstallerException.class);
+		
+		notificationData.setDistributionID("testStatusFailureTosca");
+		notificationData.setServiceVersion("123456");
+		notificationData.setServiceUUID("serviceUUID");
+		notificationData.setWorkloadContext("workloadContext");
+		
+		doReturn(notificationData).when(vfResourceStructure).getNotification();
+		doReturn(resourceInstance).when(vfResourceStructure).getResourceInstance();
+		
+		toscaInstaller.installTheResource(toscaResourceStruct, vfResourceStructure);
+	}
+	
+	@Test
+	public void installTheResourceDBExceptionTest() throws Exception {
+		notificationData.setDistributionID("testStatusSuccessTosca");
+		notificationData.setServiceVersion("123456");
+		notificationData.setServiceUUID("serviceUUID");
+		notificationData.setWorkloadContext("workloadContext");
+		
+		doReturn(notificationData).when(vfResourceStructure).getNotification();
+		doReturn(resourceInstance).when(vfResourceStructure).getResourceInstance();
+		doThrow(LockAcquisitionException.class).when(toscaResourceStruct).getToscaArtifact();
+		
+		toscaInstaller.installTheResource(toscaResourceStruct, vfResourceStructure);
+	}
+	
+	@Test
+	public void verifyTheFilePrefixInStringTest() {
+		String body = "abcabcabcfile:///testfile.txtabcbabacbcabc";
+		String filenameToVerify = "testfile.txt";
+		String expectedFileBody = "abcabcabctestfile.txtabcbabacbcabc";
+		
+		String newFileBody = toscaInstaller.verifyTheFilePrefixInString(body, filenameToVerify);
+		
+		assertEquals(expectedFileBody, newFileBody);
+	}
+	
+	@Test
+	public void verifyTheFilePrefixInStringNullBodyTest() {
+		String body = null;
+		String filenameToVerify = "testfile.txt";
+		
+		String newFileBody = toscaInstaller.verifyTheFilePrefixInString(body, filenameToVerify);
+		
+		assertEquals(body, newFileBody);
+	}
+	
+	@Test
+	public void verifyTheFilePrefixInStringEmptyBodyTest() {
+		String body = "";
+		String filenameToVerify = "testfile.txt";
+		
+		String newFileBody = toscaInstaller.verifyTheFilePrefixInString(body, filenameToVerify);
+		
+		assertEquals(body, newFileBody);
+	}
+	
+	@Test
+	public void verifyTheFilePrefixInStringNullFilenameTest() {
+		String body = "abcabcabcfile:///testfile.txtabcbabacbcabc";
+		String filenameToVerify = null;
+		
+		String newFileBody = toscaInstaller.verifyTheFilePrefixInString(body, filenameToVerify);
+		
+		assertEquals(body, newFileBody);
+	}
+	
+	@Test
+	public void verifyTheFilePrefixInStringEmptyFilenameTest() {
+		String body = "abcabcabcfile:///testfile.txtabcbabacbcabc";
+		String filenameToVerify = "";
+		
+		String newFileBody = toscaInstaller.verifyTheFilePrefixInString(body, filenameToVerify);
+		
+		assertEquals(body, newFileBody);
+	}
+	
+	private WatchdogComponentDistributionStatus getWatchdogCDStatusWithName(List<WatchdogComponentDistributionStatus> watchdogComponentDistributionStatuses, String componentName) {
+		WatchdogComponentDistributionStatus actualWatchdogComponentDistributionStatus = new WatchdogComponentDistributionStatus();
+		for(WatchdogComponentDistributionStatus watchdogComponentDistributionStatus : watchdogComponentDistributionStatuses) {
+			if(componentName.equals(watchdogComponentDistributionStatus.getComponentName())) {
+				actualWatchdogComponentDistributionStatus = watchdogComponentDistributionStatus;
+				break;
+			}
+		}
+		return actualWatchdogComponentDistributionStatus;
+	}
+
+
+	
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/tenantIsolation/AaiClientPropertiesImplTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/tenantIsolation/AaiClientPropertiesImplTest.java
new file mode 100644
index 0000000..a20f6de
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/tenantIsolation/AaiClientPropertiesImplTest.java
@@ -0,0 +1,58 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * 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.onap.so.asdc.tenantIsolation;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.so.asdc.BaseTest;
+import org.onap.so.client.aai.AAIVersion;
+
+public class AaiClientPropertiesImplTest extends BaseTest {
+	
+	private static final String SYSTEM_NAME = "MSO";
+	private static final String LOCAL_HOST = "http://localhost:";
+	
+	@BeforeClass
+	public static void setup() throws Exception {
+		System.setProperty("mso.config.path", "src/test/resources");
+	}
+	
+	@Test
+	public void getEndpointTest() throws Exception {
+		AaiClientPropertiesImpl aaiClientPropertiesImpl = new AaiClientPropertiesImpl();
+		String aaiEndpoint = aaiClientPropertiesImpl.getEndpoint().toString();
+		assertEquals(LOCAL_HOST + wireMockPort, aaiEndpoint);
+	}
+	
+	@Test
+	public void getSystemNameTest() {
+		AaiClientPropertiesImpl aaiClientPropertiesImpl = new AaiClientPropertiesImpl();
+		assertEquals(SYSTEM_NAME, aaiClientPropertiesImpl.getSystemName());
+	}
+	
+	@Test
+	public void getDefaultVersionTest() {
+		AaiClientPropertiesImpl aaiClientPropertiesImpl = new AaiClientPropertiesImpl();
+		assertEquals(AAIVersion.LATEST, aaiClientPropertiesImpl.getDefaultVersion());
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/tenantIsolation/WatchdogDistributionTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/tenantIsolation/WatchdogDistributionTest.java
new file mode 100644
index 0000000..b72e079
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/tenantIsolation/WatchdogDistributionTest.java
@@ -0,0 +1,141 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.tenantIsolation;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.isA;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import java.util.HashMap;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.onap.so.asdc.BaseTest;
+import org.onap.so.client.aai.AAIResourcesClient;
+import org.onap.so.client.aai.entities.uri.AAIResourceUri;
+import org.onap.so.db.catalog.beans.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class WatchdogDistributionTest extends BaseTest {
+	@Autowired
+	private WatchdogDistribution watchdogDistribution;
+	
+	@Mock
+	private AAIResourcesClient aaiResourceClient;
+	
+	private static final String SUCCESS_TEST = "watchdogTestStatusSuccess";
+	private static final String FAILURE_TEST = "watchdogTestStatusFailure";
+	private static final String TIMEOUT_TEST = "watchdogTestStatusTimeout";
+	private static final String INCOMPLETE_TEST = "watchdogTestStatusIncomplete";
+	private static final String EXCEPTION_TEST = "watchdogTestStatusException";
+	private static final String NULL_TEST = "watchdogTestStatusNull";
+	
+	@Rule
+	public ExpectedException expectedException = ExpectedException.none();
+	
+	@Before
+	public void before() {
+		MockitoAnnotations.initMocks(this);
+	}
+	
+	@Test
+	public void getOverallDistributionStatusTimeoutTest() throws Exception {
+		String status = watchdogDistribution.getOverallDistributionStatus(TIMEOUT_TEST);
+		assertEquals(DistributionStatus.TIMEOUT.toString(), status);
+	}
+	
+	@Test
+	public void getOverallDistributionStatusSuccessTest() throws Exception {
+		String status = watchdogDistribution.getOverallDistributionStatus(SUCCESS_TEST);
+		assertEquals(DistributionStatus.SUCCESS.toString(), status);
+	}
+	
+	@Test
+	public void getOverallDistributionStatusFailureTest() throws Exception {
+		String status = watchdogDistribution.getOverallDistributionStatus(FAILURE_TEST);
+		assertEquals(DistributionStatus.FAILURE.toString(), status);
+	}
+	
+	@Test
+	public void getOverallDistributionStatusIncompleteTest() throws Exception {
+		String status = watchdogDistribution.getOverallDistributionStatus(INCOMPLETE_TEST);
+		assertEquals(DistributionStatus.INCOMPLETE.toString(), status);
+	}
+	
+	@Test
+	public void getOverallDistributionStatusInvalidComponentExceptionTest() throws Exception {
+		expectedException.expect(Exception.class);
+		watchdogDistribution.getOverallDistributionStatus(EXCEPTION_TEST);
+	}
+	
+	@Test
+	public void getOverallDistributionStatusNewStatusTest() throws Exception {
+		String status = watchdogDistribution.getOverallDistributionStatus("newDistrubutionStatus");
+		assertEquals(DistributionStatus.INCOMPLETE.toString(), status);
+	}
+	
+	@Test
+	public void getOverallDistributionStatusExceptionTest() throws Exception {
+		expectedException.expect(Exception.class);
+		watchdogDistribution.getOverallDistributionStatus(null);
+	}
+	
+	@Test
+	public void executePatchAAITest() throws Exception {		
+		Service service = new Service();
+		service.setModelInvariantUUID("9647dfc4-2083-11e7-93ae-92361f002671");
+		
+		doReturn(aaiResourceClient).when(watchdogDistributionSpy).getAaiClient();
+		doNothing().when(aaiResourceClient).update(isA(AAIResourceUri.class), isA(HashMap.class));
+		
+		watchdogDistribution.executePatchAAI(SUCCESS_TEST, service.getModelInvariantUUID(), DistributionStatus.SUCCESS.toString());
+		
+		verify(aaiResourceClient, times(1)).update(any(AAIResourceUri.class), any(HashMap.class));
+	}
+	
+	@Test
+	public void executePatchAAINullDistrubutionIdTest() throws Exception {
+		expectedException.expect(Exception.class);
+		watchdogDistribution.executePatchAAI(null, "", DistributionStatus.SUCCESS.toString());
+	}
+	
+	@Test
+	public void executePatchAAINullServiceTest() throws Exception {
+		expectedException.expect(Exception.class);
+		watchdogDistribution.executePatchAAI(NULL_TEST, null, DistributionStatus.SUCCESS.toString());
+	}
+	
+	@Test
+	public void getSetAaiClientTest() {
+		aaiResourceClient = watchdogDistribution.getAaiClient();
+		watchdogDistribution.setAaiClient(aaiResourceClient);
+		AAIResourcesClient aaiResourceClient2 = watchdogDistribution.getAaiClient();
+		assertEquals(aaiResourceClient, aaiResourceClient2);
+	}
+}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/util/tests/ASDCNotificationLoggingTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/util/ASDCNotificationLoggingTest.java
similarity index 94%
rename from asdc-controller/src/test/java/org/openecomp/mso/asdc/util/tests/ASDCNotificationLoggingTest.java
rename to asdc-controller/src/test/java/org/onap/so/asdc/util/ASDCNotificationLoggingTest.java
index 3351392..3abc2e7 100644
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/util/tests/ASDCNotificationLoggingTest.java
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/util/ASDCNotificationLoggingTest.java
@@ -1,186 +1,186 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 Huawei Technologies Co., Ltd. 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.mso.asdc.util.tests;
-
-import static org.junit.Assert.assertTrue;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.junit.Test;
-import org.openecomp.mso.asdc.installer.IVfModuleData;
-import org.openecomp.mso.asdc.installer.VfModuleMetaData;
-import org.openecomp.mso.asdc.util.ASDCNotificationLogging;
-import org.onap.sdc.api.notification.IArtifactInfo;
-import org.onap.sdc.api.notification.INotificationData;
-import org.onap.sdc.api.notification.IResourceInstance;
-
-public class ASDCNotificationLoggingTest {
-	@Test
-	public void dumpASDCNotificationTestForNull() throws Exception {
-		INotificationData asdcNotification = iNotificationDataObject();
-
-		String result = ASDCNotificationLogging.dumpASDCNotification(asdcNotification);
-
-		assertTrue(!result.equalsIgnoreCase("NULL"));
-	}
-
-	private INotificationData iNotificationDataObject() {
-		INotificationData iNotification = new INotificationData() {
-
-			@Override
-			public String getServiceVersion() {
-				return "DistributionID";
-			}
-
-			@Override
-			public String getServiceUUID() {
-				return "12343254";
-			}
-
-			@Override
-			public String getServiceName() {
-				return "servername";
-			}
-
-			@Override
-			public String getServiceInvariantUUID() {
-				return "ServiceInvariantUUID";
-			}
-
-			@Override
-			public String getServiceDescription() {
-				return "Description";
-			}
-
-			@Override
-			public List<IArtifactInfo> getServiceArtifacts() {
-				return new ArrayList();
-			}
-
-			@Override
-			public List<IResourceInstance> getResources() {
-				return new ArrayList();
-			}
-
-			@Override
-			public String getDistributionID() {
-				return "23434";
-			}
-
-			@Override
-			public IArtifactInfo getArtifactMetadataByUUID(String arg0) {
-				return null;
-			}
-
-			@Override
-			public String getWorkloadContext() {
-				// TODO Auto-generated method stub
-				return null;
-			}
-
-			@Override
-			public void setWorkloadContext(String arg0) {
-				// TODO Auto-generated method stub
-				
-			}
-		};
-		return iNotification;
-	}
-
-	@Test
-	public void dumpASDCNotificationTest() throws Exception {
-		INotificationData asdcNotification = iNotificationDataObject();
-		String result = ASDCNotificationLogging.dumpASDCNotification(asdcNotification);
-
-		assertTrue(!result.equalsIgnoreCase("NULL"));
-	}
-
-	@Test
-	public void dumpVfModuleMetaDataListTest() {
-		INotificationData asdcNotification = iNotificationDataObject();
-		List<IVfModuleData> list = new ArrayList<>();
-		list.add(new VfModuleMetaData());
-		String result = null;
-		try {
-			result = ASDCNotificationLogging.dumpVfModuleMetaDataList(list);
-		} catch (Exception e) {
-		}
-
-		assertTrue(result == null);
-
-	}
-
-	public IArtifactInfo getIArtifactInfo() {
-		return new IArtifactInfo() {
-
-			@Override
-			public List<IArtifactInfo> getRelatedArtifacts() {
-				return null;
-			}
-
-			@Override
-			public IArtifactInfo getGeneratedArtifact() {
-				return null;
-			}
-
-			@Override
-			public String getArtifactVersion() {
-				return "version";
-			}
-
-			@Override
-			public String getArtifactUUID() {
-				return "123";
-			}
-
-			@Override
-			public String getArtifactURL() {
-				return "url";
-			}
-
-			@Override
-			public String getArtifactType() {
-				return "type";
-			}
-
-			@Override
-			public Integer getArtifactTimeout() {
-				return 12;
-			}
-
-			@Override
-			public String getArtifactName() {
-				return "name";
-			}
-
-			@Override
-			public String getArtifactDescription() {
-				return "desc";
-			}
-
-			@Override
-			public String getArtifactChecksum() {
-				return "true";
-			}
-		};
-	}
-}
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.asdc.util;
+
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Test;
+import org.onap.sdc.api.notification.IArtifactInfo;
+import org.onap.sdc.api.notification.INotificationData;
+import org.onap.sdc.api.notification.IResourceInstance;
+import org.onap.so.asdc.installer.IVfModuleData;
+import org.onap.so.asdc.installer.VfModuleMetaData;
+import org.onap.so.asdc.util.ASDCNotificationLogging;
+
+public class ASDCNotificationLoggingTest {
+	@Test
+	public void dumpASDCNotificationTestForNull() throws Exception {
+		INotificationData asdcNotification = iNotificationDataObject();
+
+		String result = ASDCNotificationLogging.dumpASDCNotification(asdcNotification);
+
+		assertTrue(!result.equalsIgnoreCase("NULL"));
+	}
+
+	private INotificationData iNotificationDataObject() {
+		INotificationData iNotification = new INotificationData() {
+
+			@Override
+			public String getServiceVersion() {
+				return "DistributionID";
+			}
+
+			@Override
+			public String getServiceUUID() {
+				return "12343254";
+			}
+
+			@Override
+			public String getServiceName() {
+				return "servername";
+			}
+
+			@Override
+			public String getServiceInvariantUUID() {
+				return "ServiceInvariantUUID";
+			}
+
+			@Override
+			public String getServiceDescription() {
+				return "Description";
+			}
+
+			@Override
+			public List<IArtifactInfo> getServiceArtifacts() {
+				return new ArrayList();
+			}
+
+			@Override
+			public List<IResourceInstance> getResources() {
+				return new ArrayList();
+			}
+
+			@Override
+			public String getDistributionID() {
+				return "23434";
+			}
+
+			@Override
+			public IArtifactInfo getArtifactMetadataByUUID(String arg0) {
+				return null;
+			}
+
+			@Override
+			public String getWorkloadContext() {
+				// TODO Auto-generated method stub
+				return null;
+			}
+
+			@Override
+			public void setWorkloadContext(String arg0) {
+				// TODO Auto-generated method stub
+				
+			}
+		};
+		return iNotification;
+	}
+
+	@Test
+	public void dumpASDCNotificationTest() throws Exception {
+		INotificationData asdcNotification = iNotificationDataObject();
+		String result = ASDCNotificationLogging.dumpASDCNotification(asdcNotification);
+
+		assertTrue(!result.equalsIgnoreCase("NULL"));
+	}
+
+	@Test
+	public void dumpVfModuleMetaDataListTest() {
+		INotificationData asdcNotification = iNotificationDataObject();
+		List<IVfModuleData> list = new ArrayList<>();
+		list.add(new VfModuleMetaData());
+		String result = null;
+		try {
+			result = ASDCNotificationLogging.dumpVfModuleMetaDataList(list);
+		} catch (Exception e) {
+		}
+
+		assertTrue(result == null);
+
+	}
+
+	public IArtifactInfo getIArtifactInfo() {
+		return new IArtifactInfo() {
+
+			@Override
+			public List<IArtifactInfo> getRelatedArtifacts() {
+				return null;
+			}
+
+			@Override
+			public IArtifactInfo getGeneratedArtifact() {
+				return null;
+			}
+
+			@Override
+			public String getArtifactVersion() {
+				return "version";
+			}
+
+			@Override
+			public String getArtifactUUID() {
+				return "123";
+			}
+
+			@Override
+			public String getArtifactURL() {
+				return "url";
+			}
+
+			@Override
+			public String getArtifactType() {
+				return "type";
+			}
+
+			@Override
+			public Integer getArtifactTimeout() {
+				return 12;
+			}
+
+			@Override
+			public String getArtifactName() {
+				return "name";
+			}
+
+			@Override
+			public String getArtifactDescription() {
+				return "desc";
+			}
+
+			@Override
+			public String getArtifactChecksum() {
+				return "true";
+			}
+		};
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/util/NotificationLoggingTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/util/NotificationLoggingTest.java
new file mode 100644
index 0000000..8bd11d9
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/util/NotificationLoggingTest.java
@@ -0,0 +1,67 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.so.asdc.client.test.emulators.NotificationDataImpl;
+
+public class NotificationLoggingTest {
+	private NotificationDataImpl notificationData;
+	
+	@Before
+	public void before() {		
+		notificationData = new NotificationDataImpl();
+	}
+	
+	@Test
+	public void logNotificationTest() {
+		notificationData.setDistributionID("distributionID");
+		notificationData.setServiceVersion("123456");
+		notificationData.setServiceUUID("serviceUUID");
+		notificationData.setWorkloadContext("workloadContext");
+		
+		String response = NotificationLogging.logNotification(notificationData);
+
+		assertTrue(response.contains("ASDC Notification"));
+		assertTrue(response.contains("ResourcesType not recognized"));
+		assertTrue(response.contains("ServiceNameNULL"));
+		assertTrue(response.contains("ServiceUUIDserviceUUID"));
+		assertTrue(response.contains("ResourcesImplNULL"));
+		assertTrue(response.contains("ServiceArtifactsType not recognized"));
+		assertTrue(response.contains("ServiceDescriptionNULL"));
+		assertTrue(response.contains("DistributionIDdistributionID"));
+		assertTrue(response.contains("ServiceInvariantUUIDNULL"));
+		assertTrue(response.contains("WorkloadContextworkloadContext"));
+	}
+	
+	@Test
+	public void logNotificationNullTest() {
+		notificationData = null;
+		
+		String response = NotificationLogging.logNotification(notificationData);
+		
+		assertEquals("NULL", response);
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/utils/ASDCLoggingRunner.java b/asdc-controller/src/test/java/org/onap/so/asdc/utils/ASDCLoggingRunner.java
new file mode 100644
index 0000000..2a77664
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/utils/ASDCLoggingRunner.java
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * 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.onap.so.asdc.utils;
+
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+import org.antlr.v4.runtime.CharStreams;
+import org.antlr.v4.runtime.CommonTokenStream;
+import org.antlr.v4.runtime.tree.ParseTree;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+
+public class ASDCLoggingRunner 
+{
+	public static void main( String[] args) throws Exception 
+	{
+        String content = new String(Files.readAllBytes(Paths.get("src/test/resources/Heat_Nested_Notification.txt")));
+
+        ASDCLoggingLexer lexer = new ASDCLoggingLexer(CharStreams.fromString(content));
+
+		CommonTokenStream tokens = new CommonTokenStream(lexer);
+
+		ASDCLoggingParser parser = new ASDCLoggingParser(tokens);
+		
+		ParseTree tree = parser.doc(); 
+
+		System.out.println(TreeUtils.printTree(tree, parser)); // print LISP-style tree
+		
+		ASDCLoggingVisitorImpl v = new ASDCLoggingVisitorImpl();
+		 
+		JsonNode node = v.visit(tree);
+		
+		System.out.println(node.toString());
+
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/utils/ASDCLoggingVisitorImpl.java b/asdc-controller/src/test/java/org/onap/so/asdc/utils/ASDCLoggingVisitorImpl.java
new file mode 100644
index 0000000..51036e2
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/utils/ASDCLoggingVisitorImpl.java
@@ -0,0 +1,104 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * 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.onap.so.asdc.utils;
+
+import java.util.ArrayDeque;
+import java.util.Deque;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ContainerNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.base.CaseFormat;
+
+
+public class ASDCLoggingVisitorImpl extends ASDCLoggingBaseVisitor<ContainerNode> {
+
+	private final ObjectMapper mapper = new ObjectMapper();
+	private ObjectNode doc;
+	private Deque<ContainerNode> nodeStore = new ArrayDeque<>();
+	
+	@Override
+	public ContainerNode visitDoc(ASDCLoggingParser.DocContext ctx) {
+		doc  = mapper.createObjectNode();
+		nodeStore.addFirst(doc);
+		this.visitChildren(ctx);
+		return doc;
+	}
+	
+	@Override
+	public ContainerNode visitValue(ASDCLoggingParser.ValueContext ctx) {
+		
+		return this.visitChildren(ctx);
+		
+	}
+	@Override
+	public ContainerNode visitSimplePair(ASDCLoggingParser.SimplePairContext ctx) {
+		ObjectNode node = mapper.createObjectNode();
+		((ObjectNode)nodeStore.peekFirst()).put(this.toLowerCamel(ctx.key().getText()), ctx.keyValue().getText());
+		
+		return node; 
+	}
+	
+	@Override
+	public ContainerNode visitComplexPair(ASDCLoggingParser.ComplexPairContext ctx) {
+		ContainerNode container = nodeStore.peekFirst();
+		if (container.isArray()) {
+			ArrayNode array = (ArrayNode) container;
+			ObjectNode node = mapper.createObjectNode();
+			array.add(node);
+			nodeStore.addFirst(node);
+		} else {
+			nodeStore.addFirst(((ObjectNode)nodeStore.peekFirst()).putObject(this.toLowerCamel(ctx.key().getText())));
+		}
+		this.visitChildren(ctx);
+		return nodeStore.removeFirst();
+
+		
+	}
+	
+	@Override
+	public ContainerNode visitList(ASDCLoggingParser.ListContext ctx) {
+		nodeStore.addFirst(((ObjectNode)nodeStore.peekFirst()).putArray(this.keyMapper(ctx.listName().getText())));
+		this.visitChildren(ctx);
+		return nodeStore.removeFirst();
+	}
+	
+	private String keyMapper(String key) {
+		if ("Service Artifacts List".equals(key)) {
+			return "serviceArtifacts";
+		} else if ("Resource Instances List".equals(key)) {
+			return "resources";
+		} else if ("Resource Artifacts List".equals(key)) {
+			return "artifacts";
+		} else {
+			return key;
+		}
+	}
+	
+	private String toLowerCamel(String key) {
+		String result = key.replaceAll("\\s", "");
+		if ("ServiceArtifactsInfo".equals(result)) {
+			return "artifactInfo";
+		}
+		return CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, result);
+	}
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/utils/TreePrinterListener.java b/asdc-controller/src/test/java/org/onap/so/asdc/utils/TreePrinterListener.java
new file mode 100644
index 0000000..c4a84c0
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/utils/TreePrinterListener.java
@@ -0,0 +1,137 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.utils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.antlr.v4.runtime.Parser;
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.RuleContext;
+import org.antlr.v4.runtime.misc.Utils;
+import org.antlr.v4.runtime.tree.ErrorNode;
+import org.antlr.v4.runtime.tree.ParseTreeListener;
+import org.antlr.v4.runtime.tree.TerminalNode;
+import org.antlr.v4.runtime.tree.Trees;
+
+public class TreePrinterListener implements ParseTreeListener {
+    private final List<String> ruleNames;
+    private final StringBuilder builder = new StringBuilder();
+    Map<RuleContext,ArrayList<String>> stack = new HashMap<RuleContext,ArrayList<String>>();
+
+    public TreePrinterListener(Parser parser) {
+        this.ruleNames = Arrays.asList(parser.getRuleNames());
+    }
+
+    public TreePrinterListener(List<String> ruleNames) {
+        this.ruleNames = ruleNames;
+    }
+
+    @Override
+    public void visitTerminal(TerminalNode node) {
+    	String text = Utils.escapeWhitespace(Trees.getNodeText(node, ruleNames), false);
+    	if(text.startsWith(" ") || text.endsWith(" ")){
+    		text = "'" + text + "'";
+    	}
+        stack.get(node.getParent()).add(text);
+    }
+
+    @Override
+    public void visitErrorNode(ErrorNode node) {
+        stack.get(node.getParent()).add(Utils.escapeWhitespace(Trees.getNodeText(node, ruleNames), false));
+    }
+
+    @Override
+    public void enterEveryRule(ParserRuleContext ctx) {
+    	if(!stack.containsKey(ctx.parent)){
+    		stack.put(ctx.parent, new ArrayList<String>());
+    	}
+    	if(!stack.containsKey(ctx)){
+    		stack.put(ctx, new ArrayList<String>());
+    	}
+
+    	final StringBuilder sb = new StringBuilder();
+    	int ruleIndex = ctx.getRuleIndex();
+        String ruleName;
+        if (ruleIndex >= 0 && ruleIndex < ruleNames.size()) {
+            ruleName = ruleNames.get(ruleIndex);
+        }
+        else {
+            ruleName = Integer.toString(ruleIndex);
+        }
+        sb.append(ruleName);
+        stack.get(ctx).add(sb.toString());
+    }
+
+    @Override
+    public void exitEveryRule(ParserRuleContext ctx) {
+    	ArrayList<String> ruleStack = stack.remove(ctx);
+    	StringBuilder sb = new StringBuilder();
+    	boolean brackit =ruleStack.size()>1; 
+    	if(brackit){
+    		sb.append("(");
+    	}
+    	sb.append(ruleStack.get(0));
+    	for(int i=1; i<ruleStack.size(); i++){
+    		sb.append(" ");
+    		sb.append(ruleStack.get(i));
+    	}
+    	if(brackit){
+        	sb.append(")");
+    	}
+    	if(sb.length() < 80){
+    		stack.get(ctx.parent).add(sb.toString());
+    	}else{
+    		// Current line is too long, regenerate it using 1 line per item.
+    		sb.setLength(0);
+        	if(brackit){
+        		sb.append("(");
+        	}
+        	if(!ruleStack.isEmpty()){
+        		sb.append(ruleStack.remove(0)).append("\r\n");
+        	}
+        	while(!ruleStack.isEmpty()){
+        		sb.append(indent(ruleStack.remove(0))).append("\r\n");
+        	}
+        	if(brackit){
+        		sb.append(")");
+        	}
+       		stack.get(ctx.parent).add(sb.toString());
+    	}
+    	if(ctx.parent == null){
+    		builder.append(sb.toString());
+    	}
+    }
+    
+    static String indent(String input){
+    	return "  " + input.replaceAll("\r\n(.)","\r\n  $1");
+    }
+
+    @Override
+    public String toString() {
+        return builder.toString();
+    }
+    
+    
+}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/utils/TreeUtils.java b/asdc-controller/src/test/java/org/onap/so/asdc/utils/TreeUtils.java
new file mode 100644
index 0000000..8de9f36
--- /dev/null
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/utils/TreeUtils.java
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 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.onap.so.asdc.utils;
+
+import java.util.Arrays;
+
+import org.antlr.v4.runtime.Parser;
+import org.antlr.v4.runtime.tree.ParseTree;
+import org.antlr.v4.runtime.tree.ParseTreeWalker;
+
+
+public class TreeUtils {
+
+	/**
+	 * Print the tree, splitting at appropriate points, instead of rendering a single long line.
+	 * @param parseTree
+	 * @param parser
+	 * @return
+	 */
+	public static String printTree(final ParseTree parseTree, final Parser parser){
+		final TreePrinterListener listener = new TreePrinterListener(Arrays.asList(parser.getRuleNames()));
+        ParseTreeWalker.DEFAULT.walk(listener, parseTree);
+        return listener.toString();
+	}
+    
+    public static String normalizeWhiteSpace(String input){
+    	return input.replaceAll("\\s+", " ").replaceAll("([^\\w])\\s+", "$1");
+    }
+}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/ASDCConfigurationTest.java b/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/ASDCConfigurationTest.java
deleted file mode 100644
index 5e2184a..0000000
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/ASDCConfigurationTest.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2018 Huawei 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.mso.asdc.client;
-
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.IOException;
-import java.util.List;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import org.openecomp.mso.asdc.client.ASDCConfiguration;
-import org.openecomp.mso.asdc.client.exceptions.ASDCParametersException;
-import org.openecomp.mso.properties.MsoPropertiesException;
-import org.openecomp.mso.properties.MsoPropertiesFactory;
-
-/**
- * THis class tests the ASDC Controller by using the ASDC Mock CLient
- * 
- *
- */
-public class ASDCConfigurationTest {
-	
-	public static MsoPropertiesFactory msoPropertiesFactory = new MsoPropertiesFactory();
-	public final String ASDC_PROP = ASDCConfigurationTest.class.getClassLoader().getResource("mso.json").toString().substring(5);
-	public final String ASDC_PROP2 = ASDCConfigurationTest.class.getClassLoader().getResource("mso2.json").toString().substring(5);
-	public final String ASDC_PROP3 = ASDCConfigurationTest.class.getClassLoader().getResource("mso3.json").toString().substring(5);
-	public final String ASDC_PROP_BAD = ASDCConfigurationTest.class.getClassLoader().getResource("mso-bad.json").toString().substring(5);
-	public final String ASDC_PROP_WITH_NULL = ASDCConfigurationTest.class.getClassLoader().getResource("mso-with-NULL.json").toString().substring(5);
-	public final String ASDC_PROP_DOUBLE_CONFIG = ASDCConfigurationTest.class.getClassLoader().getResource("mso-two-configs.json").toString().substring(5);
-	public final String ASDC_PROP4_WITH_TLS = ASDCConfigurationTest.class.getClassLoader().getResource("mso4-with-TLS.json").toString().substring(5);
-	
-	@BeforeClass
-	public static final void prepareBeforeAllTests() {
-		msoPropertiesFactory.removeAllMsoProperties();
-	}
-	
-	@Before
-	public final void prepareBeforeEachTest () throws MsoPropertiesException {
-		msoPropertiesFactory.initializeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP);
-	}
-	
-	@After
-	public final void cleanAfterEachTest () {
-		msoPropertiesFactory.removeAllMsoProperties();
-	}
-	
-	@Test
-	public final void testTheInit() throws ASDCParametersException, IOException {
-		ASDCConfiguration asdcConfig = new ASDCConfiguration("asdc-controller1");
-		assertNotNull(asdcConfig.getUser());
-		assertTrue("User".equals(asdcConfig.getUser()));
-		
-		assertNotNull(asdcConfig.getPassword());
-		assertTrue("ThePassword".equals(asdcConfig.getPassword()));
-		
-		assertNotNull(asdcConfig.getConsumerGroup());
-		assertTrue("consumerGroup".equals(asdcConfig.getConsumerGroup()));
-		
-		assertNotNull(asdcConfig.getConsumerID());
-		assertTrue("consumerId".equals(asdcConfig.getConsumerID()));
-		
-		assertNotNull(asdcConfig.getEnvironmentName());
-		assertTrue("environmentName".equals(asdcConfig.getEnvironmentName()));
-		
-		assertNotNull(asdcConfig.getAsdcAddress());
-		assertTrue("hostname".equals(asdcConfig.getAsdcAddress()));
-		
-		assertNotNull(asdcConfig.getPollingInterval());
-		assertTrue(asdcConfig.getPollingInterval() == 10);
-		
-		assertNotNull(asdcConfig.getPollingTimeout());
-		assertTrue(asdcConfig.getPollingTimeout() == 30);
-		
-		assertNotNull(asdcConfig.getRelevantArtifactTypes());
-		assertTrue(asdcConfig.getRelevantArtifactTypes().size() == ASDCConfiguration.SUPPORTED_ARTIFACT_TYPES_LIST.size());
-		
-		assertFalse(asdcConfig.activateServerTLSAuth());
-		
-	}
-	
-	@Test
-	public final void testAllParametersMethod() throws ASDCParametersException, IOException {
-		ASDCConfiguration asdcConfig = new ASDCConfiguration("asdc-controller1");
-		
-		// No exception should be raised
-		asdcConfig.testAllParameters();
-	}
-
-	@Test
-	public final void testTheRefreshConfigFalseCase() throws ASDCParametersException, IOException {
-		ASDCConfiguration asdcConfig = new ASDCConfiguration("asdc-controller1");
-		
-		// No update should be done as we use the mso.properties located in the resource folder for testing
-		assertFalse(asdcConfig.hasASDCConfigChanged());
-		assertFalse(asdcConfig.refreshASDCConfig());
-		
-		assertNotNull(asdcConfig.getUser());
-		assertTrue("User".equals(asdcConfig.getUser()));
-		
-		assertNotNull(asdcConfig.getPassword());
-		assertTrue("ThePassword".equals(asdcConfig.getPassword()));
-		
-		assertNotNull(asdcConfig.getConsumerGroup());
-		assertTrue("consumerGroup".equals(asdcConfig.getConsumerGroup()));
-		
-		assertNotNull(asdcConfig.getConsumerID());
-		assertTrue("consumerId".equals(asdcConfig.getConsumerID()));
-		
-		assertNotNull(asdcConfig.getEnvironmentName());
-		assertTrue("environmentName".equals(asdcConfig.getEnvironmentName()));
-		
-		assertNotNull(asdcConfig.getAsdcAddress());
-		assertTrue("hostname".equals(asdcConfig.getAsdcAddress()));
-		
-		assertNotNull(asdcConfig.getPollingInterval());
-		assertTrue(asdcConfig.getPollingInterval() == 10);
-		
-		assertNotNull(asdcConfig.getPollingTimeout());
-		assertTrue(asdcConfig.getPollingTimeout() == 30);
-		
-		assertNotNull(asdcConfig.getRelevantArtifactTypes());
-		assertTrue(asdcConfig.getRelevantArtifactTypes().size() == ASDCConfiguration.SUPPORTED_ARTIFACT_TYPES_LIST.size());
-		
-		msoPropertiesFactory.removeAllMsoProperties();
-		
-		try {
-			asdcConfig.refreshASDCConfig();
-			fail("Should have thrown an ASDCParametersException because config does not exist anymore!");
-		} catch (ASDCParametersException e) {
-			assertTrue(e.getMessage().contains(("mso.asdc.json not initialized properly, ASDC config cannot be reloaded")));
-		}
-		
-		try {
-			asdcConfig.hasASDCConfigChanged();
-			fail("Should have thrown an ASDCParametersException because config does not exist anymore!");
-		} catch (ASDCParametersException e) {
-			assertTrue(e.getMessage().contains(("mso.asdc.json not initialized properly, ASDC config cannot be read")));
-		}
-		
-	}	
-	
-	
-	@Test
-	@Ignore // 1802 merge
-	public final void testToChangeTheFileAndRefresh () throws ASDCParametersException, IOException, MsoPropertiesException  {
-		ASDCConfiguration asdcConfig = new ASDCConfiguration("asdc-controller1");
-
-		msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP2);
-		msoPropertiesFactory.reloadMsoProperties();
-		
-		// SHould be the same file untouched just a different file name, there should be no difference between them
-		// In a normal case a different Filename should force the system to reload the config but not here as we have changed the filename by reflection
-		assertFalse(asdcConfig.hasASDCConfigChanged());
-		assertFalse(asdcConfig.refreshASDCConfig());
-
-		assertNotNull(asdcConfig.getUser());
-		assertTrue("User".equals(asdcConfig.getUser()));
-
-		assertNotNull(asdcConfig.getPassword());
-		assertTrue("ThePassword".equals(asdcConfig.getPassword()));
-
-		assertNotNull(asdcConfig.getConsumerGroup());
-		assertTrue("consumerGroup".equals(asdcConfig.getConsumerGroup()));
-
-		assertNotNull(asdcConfig.getConsumerID());
-		assertTrue("consumerId".equals(asdcConfig.getConsumerID()));
-
-		assertNotNull(asdcConfig.getEnvironmentName());
-		assertTrue("environmentName".equals(asdcConfig.getEnvironmentName()));
-
-		assertNotNull(asdcConfig.getAsdcAddress());
-		assertTrue("hostname".equals(asdcConfig.getAsdcAddress()));
-
-		assertNotNull(asdcConfig.getPollingInterval());
-		assertTrue(asdcConfig.getPollingInterval() == 10);
-
-		assertNotNull(asdcConfig.getPollingTimeout());
-		assertTrue(asdcConfig.getPollingTimeout() == 30);
-
-		assertNotNull(asdcConfig.getRelevantArtifactTypes());
-		assertTrue(asdcConfig.getRelevantArtifactTypes().size() == ASDCConfiguration.SUPPORTED_ARTIFACT_TYPES_LIST.size());
-
-		// Set another file that has some attributes changed
-		msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP3);
-		msoPropertiesFactory.reloadMsoProperties();
-		
-		// SHould be the same file untouched just a different file name, so new config
-		assertTrue(asdcConfig.hasASDCConfigChanged());
-		assertTrue(asdcConfig.refreshASDCConfig());
-
-		assertNotNull(asdcConfig.getUser());
-		assertTrue("User".equals(asdcConfig.getUser()));
-
-		assertNotNull(asdcConfig.getPassword());
-		assertTrue("ThePassword".equals(asdcConfig.getPassword()));
-
-		assertNotNull(asdcConfig.getConsumerGroup());
-		assertTrue("consumerGroup".equals(asdcConfig.getConsumerGroup()));
-
-		assertNotNull(asdcConfig.getConsumerID());
-		assertTrue("consumerId".equals(asdcConfig.getConsumerID()));
-
-		assertNotNull(asdcConfig.getEnvironmentName());
-		assertTrue("environmentName".equals(asdcConfig.getEnvironmentName()));
-
-		// only this field has been changed
-		assertNotNull(asdcConfig.getAsdcAddress());
-		assertTrue("hostname1".equals(asdcConfig.getAsdcAddress()));
-
-		assertNotNull(asdcConfig.getPollingInterval());
-		assertTrue(asdcConfig.getPollingInterval() == 10);
-
-		assertNotNull(asdcConfig.getPollingTimeout());
-		assertTrue(asdcConfig.getPollingTimeout() == 30);
-
-		assertNotNull(asdcConfig.getRelevantArtifactTypes());
-		assertTrue(asdcConfig.getRelevantArtifactTypes().size() == ASDCConfiguration.SUPPORTED_ARTIFACT_TYPES_LIST.size());
-
-
-		// reload the good property file for other test cases
-		msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP);
-		msoPropertiesFactory.reloadMsoProperties();
-
-	}
-	
-	@Test
-	@Ignore // 1802 merge
-	public final void testAllParametersCheck () throws ASDCParametersException, IOException, MsoPropertiesException  {
-		ASDCConfiguration asdcConfig = new ASDCConfiguration("asdc-controller1");
-
-		msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP_BAD);
-		msoPropertiesFactory.reloadMsoProperties();
-		// SHould be a bad file, it should raise an exception
-		try {
-			asdcConfig.refreshASDCConfig();
-			fail("Should have thrown an ASDCControllerException because one param is missing!");
-		} catch (ASDCParametersException e) {
-			assertTrue(e.getMessage().contains(("consumerGroup parameter cannot be found in config mso.properties")));
-		}
-
-
-		// reload the good property file for other test cases
-		msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP);
-		msoPropertiesFactory.reloadMsoProperties();
-		
-		assertTrue(asdcConfig.refreshASDCConfig());
- 
-	}
-	
-	@Test
-	public final void testConsumerGroupWithNULL () throws MsoPropertiesException, ASDCParametersException, IOException {
-		ASDCConfiguration asdcConfig = new ASDCConfiguration("asdc-controller1");
-		
-		msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP_WITH_NULL);
-		msoPropertiesFactory.reloadMsoProperties();
-
-		asdcConfig.refreshASDCConfig();
-		assertTrue(asdcConfig.getConsumerGroup()==null);
-
-		// reload the good property file for other test cases
-		msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP);
-		msoPropertiesFactory.reloadMsoProperties();
-		
-		assertTrue(asdcConfig.refreshASDCConfig());
-
-
-	}
-
-	@Test
-	@Ignore // 1802 merge
-	public final void testGetAllDefinedControllers() throws MsoPropertiesException, ASDCParametersException, IOException {
-		List<String> listControllers = ASDCConfiguration.getAllDefinedControllers();
-		
-		assertTrue(listControllers.size()==1);
-		assertTrue("asdc-controller1".equals(listControllers.get(0)));
-		
-		ASDCConfiguration asdcConfiguration = new ASDCConfiguration("asdc-controller1");
-		assertTrue(asdcConfiguration.getAsdcControllerName().equals("asdc-controller1"));
-		
-		
-		// Try to reload a wrong Json file
-		msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP_BAD);
-		msoPropertiesFactory.reloadMsoProperties();
-		
-		listControllers = ASDCConfiguration.getAllDefinedControllers();
-		assertTrue(listControllers.size()==0);
-
-	}
-	
-	@Test
-	public final void testABadInit() throws MsoPropertiesException {
-		msoPropertiesFactory.removeAllMsoProperties();		
-		
-		try {
-			ASDCConfiguration asdcConfiguration = new ASDCConfiguration("asdc-controller1");
-			fail("Should have thrown an ASDCParametersException because prop factory is empty!");
-		} catch (ASDCParametersException e) {
-			assertTrue(e.getMessage().contains(("mso.asdc.json not initialized properly, ASDC config cannot be reloaded")));
-		} catch (IOException e) {
-			fail("Should have thrown an ASDCParametersException, not IOException because file is corrupted!");
-		}
-	}
-	
-	@Test
-	public final void testFileDoesNotExist() throws MsoPropertiesException, ASDCParametersException, IOException {
-				
-			ASDCConfiguration asdcConfiguration = new ASDCConfiguration("asdc-controller1");
-		
-			msoPropertiesFactory.removeAllMsoProperties();
-			
-		try {	
-			asdcConfiguration.refreshASDCConfig();
-			fail("Should have thrown an ASDCParametersException because factory is empty!");
-		} catch (ASDCParametersException e) {
-			assertTrue(e.getMessage().contains(("mso.asdc.json not initialized properly, ASDC config cannot be reloaded")));
-		} 
-	}
-
-	@Test
-	public final void testWithTLS () throws ASDCParametersException, IOException, MsoPropertiesException {
-		ASDCConfiguration asdcConfiguration = new ASDCConfiguration("asdc-controller1");
-		
-		msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP4_WITH_TLS);
-		msoPropertiesFactory.reloadMsoProperties();
-
-		asdcConfiguration.refreshASDCConfig();
-		
-		assertTrue(asdcConfiguration.activateServerTLSAuth());
-		assertTrue("/test".equals(asdcConfiguration.getKeyStorePath()));
-		assertTrue("ThePassword".equals(asdcConfiguration.getKeyStorePassword()));
-	}
-	
-}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/ASDCControllerTest.java b/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/ASDCControllerTest.java
deleted file mode 100644
index f8f1816..0000000
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/ASDCControllerTest.java
+++ /dev/null
@@ -1,418 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2018 Huawei 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.mso.asdc.client;
-
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.net.URISyntaxException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.codec.binary.Base64;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import org.onap.sdc.api.IDistributionClient;
-import org.onap.sdc.api.consumer.INotificationCallback;
-import org.onap.sdc.api.notification.IArtifactInfo;
-import org.onap.sdc.api.notification.INotificationData;
-import org.onap.sdc.api.notification.IResourceInstance;
-import org.onap.sdc.api.results.IDistributionClientDownloadResult;
-import org.onap.sdc.api.results.IDistributionClientResult;
-import org.onap.sdc.impl.mock.DistributionClientStubImpl;
-import org.onap.sdc.utils.DistributionActionResultEnum;
-import org.openecomp.mso.asdc.client.ASDCConfiguration;
-import org.openecomp.mso.asdc.client.ASDCController;
-import org.openecomp.mso.asdc.client.ASDCControllerStatus;
-import org.openecomp.mso.asdc.client.exceptions.ASDCControllerException;
-import org.openecomp.mso.asdc.client.exceptions.ASDCParametersException;
-import org.openecomp.mso.asdc.client.exceptions.ArtifactInstallerException;
-import org.openecomp.mso.asdc.installer.heat.VfResourceInstaller;
-import org.openecomp.mso.properties.MsoJavaProperties;
-import org.openecomp.mso.properties.MsoPropertiesException;
-import org.openecomp.mso.properties.MsoPropertiesFactory;
-
-
-
-/**
- * THis class tests the ASDC Controller by using the ASDC Mock CLient
- *
- *
- */
-public class ASDCControllerTest {
-
-	private static MsoPropertiesFactory msoPropertiesFactory = new MsoPropertiesFactory();
-
-	private static String heatExample;
-	private static String heatExampleMD5HashBase64;
-
-	private static INotificationData iNotif;
-
-	private static IDistributionClientDownloadResult downloadResult;
-	private static IDistributionClientDownloadResult downloadCorruptedResult;
-
-	private static IDistributionClientResult successfulClientInitResult;
-	private static IDistributionClientResult unsuccessfulClientInitResult;
-
-	private static IArtifactInfo artifactInfo1;
-
-	private static IResourceInstance resource1;
-
-	private static VfResourceInstaller vnfInstaller;
-	
-	public static final String ASDC_PROP = MsoJavaProperties.class.getClassLoader().getResource("mso.json").toString().substring(5);
-	public static final String ASDC_PROP2 = MsoJavaProperties.class.getClassLoader().getResource("mso2.json").toString().substring(5);
-	public static final String ASDC_PROP3 = MsoJavaProperties.class.getClassLoader().getResource("mso3.json").toString().substring(5);
-	public static final String ASDC_PROP_BAD = MsoJavaProperties.class.getClassLoader().getResource("mso-bad.json").toString().substring(5);
-	public static final String ASDC_PROP_WITH_NULL = MsoJavaProperties.class.getClassLoader().getResource("mso-with-NULL.json").toString().substring(5);
-
-	@BeforeClass
-	public static final void prepareMockNotification() throws MsoPropertiesException, IOException, URISyntaxException, NoSuchAlgorithmException, ArtifactInstallerException  {
-
-		heatExample = new String(Files.readAllBytes(Paths.get(ASDCControllerTest.class.getClassLoader().getResource("resource-examples/autoscaling.yaml").toURI())));
-		MessageDigest md = MessageDigest.getInstance("MD5");
-		byte[] md5Hash = md.digest(heatExample.getBytes());
-		heatExampleMD5HashBase64 = Base64.encodeBase64String(md5Hash);
-
-		iNotif= Mockito.mock(INotificationData.class);
-
-		// Create fake ArtifactInfo
-		artifactInfo1 = Mockito.mock(IArtifactInfo.class);
-		Mockito.when(artifactInfo1.getArtifactChecksum()).thenReturn(ASDCControllerTest.heatExampleMD5HashBase64);
-
-		Mockito.when(artifactInfo1.getArtifactName()).thenReturn("artifact1");
-		Mockito.when(artifactInfo1.getArtifactType()).thenReturn(ASDCConfiguration.HEAT);
-		Mockito.when(artifactInfo1.getArtifactURL()).thenReturn("https://localhost:8080/v1/catalog/services/srv1/2.0/resources/aaa/1.0/artifacts/aaa.yml");
-		Mockito.when(artifactInfo1.getArtifactUUID()).thenReturn("UUID1");
-		Mockito.when(artifactInfo1.getArtifactDescription()).thenReturn("testos artifact1");
-
-		// Now provision the NotificationData mock
-		List<IArtifactInfo> listArtifact = new ArrayList<>();
-		listArtifact.add(artifactInfo1);
-
-		// Create fake resource Instance
-        resource1 = Mockito.mock (IResourceInstance.class);
-        Mockito.when (resource1.getResourceType ()).thenReturn ("VF");
-        Mockito.when (resource1.getResourceName ()).thenReturn ("resourceName");
-        Mockito.when (resource1.getArtifacts ()).thenReturn (listArtifact);
-
-        List<IResourceInstance> resources = new ArrayList<> ();
-        resources.add (resource1);
-
-		Mockito.when(iNotif.getResources()).thenReturn(resources);
-		Mockito.when(iNotif.getDistributionID()).thenReturn("distributionID1");
-		Mockito.when(iNotif.getServiceName()).thenReturn("serviceName1");
-		Mockito.when(iNotif.getServiceUUID()).thenReturn("serviceNameUUID1");
-		Mockito.when(iNotif.getServiceVersion()).thenReturn("1.0");
-
-		downloadResult = Mockito.mock(IDistributionClientDownloadResult.class);
-		Mockito.when(downloadResult.getArtifactPayload()).thenReturn(heatExample.getBytes());
-		Mockito.when(downloadResult.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.SUCCESS);
-		Mockito.when(downloadResult.getDistributionMessageResult()).thenReturn("Success");
-
-		downloadCorruptedResult = Mockito.mock(IDistributionClientDownloadResult.class);
-		Mockito.when(downloadCorruptedResult.getArtifactPayload()).thenReturn((heatExample+"badone").getBytes());
-		Mockito.when(downloadCorruptedResult.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.SUCCESS);
-		Mockito.when(downloadCorruptedResult.getDistributionMessageResult()).thenReturn("Success");
-
-		vnfInstaller = Mockito.mock(VfResourceInstaller.class);
-		
-		// Mock now the ASDC distribution client behavior
-		successfulClientInitResult = Mockito.mock(IDistributionClientResult.class);
-		Mockito.when(successfulClientInitResult.getDistributionActionResult ()).thenReturn(DistributionActionResultEnum.SUCCESS);
-
-		unsuccessfulClientInitResult = Mockito.mock(IDistributionClientResult.class);
-		Mockito.when(unsuccessfulClientInitResult.getDistributionActionResult ()).thenReturn(DistributionActionResultEnum.GENERAL_ERROR);
-
-	}
-	
-	@Before
-	public final void initBeforeEachTest() throws MsoPropertiesException {
-		// load the config
-		msoPropertiesFactory.removeAllMsoProperties();
-		msoPropertiesFactory.initializeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP);
-	}
-
-	@AfterClass
-	public static final void kill () throws MsoPropertiesException {
-
-		msoPropertiesFactory.removeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC);
-
-	}
-
-	@Test
-	public final void testTheInitWithASDCStub() throws ASDCControllerException, ASDCParametersException, IOException {
-
-		ASDCController asdcController = new ASDCController("asdc-controller1",new DistributionClientStubImpl());
-		asdcController.initASDC();
-		assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE);
-		assertTrue(asdcController.getNbOfNotificationsOngoing()== 0);
-	}
-
-	@Test
-	public final void testTheNotificationWithASDCStub() throws ASDCControllerException, ASDCParametersException, IOException {
-
-		ASDCController asdcController = new ASDCController("asdc-controller1",new DistributionClientStubImpl(),vnfInstaller);
-		asdcController.initASDC();
-		// try to send a notif, this should fail internally, we just want to ensure that in case of crash, controller status goes to IDLE
-		asdcController.treatNotification(iNotif);
-
-		assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE);
-		assertTrue(asdcController.getNbOfNotificationsOngoing()== 0);
-
-	}
-
-	@Test
-	public final void testASecondInit() throws ASDCControllerException, ASDCParametersException, IOException {
-		ASDCController asdcController = new ASDCController("asdc-controller1",new DistributionClientStubImpl(),vnfInstaller);
-		asdcController.initASDC();
-		// try to send a notif, this should fail internally, we just want to ensure that in case of crash, controller status goes to IDLE
-
-		assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE);
-		assertTrue(asdcController.getNbOfNotificationsOngoing()== 0);
-
-		try {
-			asdcController.initASDC();
-			fail("ASDCControllerException should have been raised for the init");
-		} catch (ASDCControllerException e) {
-			assertTrue("The controller is already initialized, call the closeASDC method first".equals(e.getMessage()));
-		}
-
-		// No changes expected on the controller state
-		assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE);
-		assertTrue(asdcController.getNbOfNotificationsOngoing()== 0);
-	}
-
-	@Test
-	@Ignore // 1802 merge
-	public final void testInitCrashWithMockitoClient() throws ASDCParametersException, IOException {
-
-		IDistributionClient distributionClient;
-		// First case for init method
-		distributionClient = Mockito.mock(IDistributionClient.class);
-		Mockito.when(distributionClient.download(artifactInfo1)).thenThrow(new RuntimeException("ASDC Client not initialized"));
-		Mockito.when(distributionClient.init(any(ASDCConfiguration.class),any(INotificationCallback.class))).thenReturn(unsuccessfulClientInitResult);
-		Mockito.when(distributionClient.start()).thenReturn(unsuccessfulClientInitResult);
-
-		ASDCController asdcController = new ASDCController("asdc-controller1",distributionClient,vnfInstaller);
-
-		// This should return an exception
-		try {
-			asdcController.initASDC();
-			fail("ASDCControllerException should have been raised for the init");
-		} catch (ASDCControllerException e) {
-			assertTrue("Initialization of the ASDC Controller failed with reason: null".equals(e.getMessage()));
-		}
-
-		assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.STOPPED);
-		assertTrue(asdcController.getNbOfNotificationsOngoing()== 0);
-
-		// Second case for start method
-
-		Mockito.when(distributionClient.init(any(ASDCConfiguration.class),any(INotificationCallback.class))).thenReturn(successfulClientInitResult);
-		Mockito.when(distributionClient.start()).thenReturn(unsuccessfulClientInitResult);
-
-		// This should return an exception
-		try {
-			asdcController.initASDC();
-			fail("ASDCControllerException should have been raised for the init");
-		} catch (ASDCControllerException e) {
-			assertTrue("Startup of the ASDC Controller failed with reason: null".equals(e.getMessage()));
-		}
-
-		assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.STOPPED);
-		assertTrue(asdcController.getNbOfNotificationsOngoing()== 0);
-	}
-
-	@Test
-	public final void testTheStop() throws ASDCControllerException, ASDCParametersException, IOException {
-
-		ASDCController asdcController = new ASDCController("asdc-controller1",new DistributionClientStubImpl(),vnfInstaller);
-
-		asdcController.closeASDC();
-		assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.STOPPED);
-
-
-		asdcController = new ASDCController("asdc-controller1",new DistributionClientStubImpl(),vnfInstaller);
-		asdcController.initASDC();
-		asdcController.closeASDC();
-		assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.STOPPED);
-	}
-
-	@Test
-	@Ignore // 1802 merge
-	public final void testConfigRefresh () throws ASDCParametersException, ASDCControllerException, IOException, MsoPropertiesException {
-		IDistributionClient distributionClient;
-		distributionClient = Mockito.mock(IDistributionClient.class);
-		Mockito.when(distributionClient.download(artifactInfo1)).thenReturn(downloadResult);
-		Mockito.when(distributionClient.init(any(ASDCConfiguration.class),any(INotificationCallback.class))).thenReturn(successfulClientInitResult);
-		Mockito.when(distributionClient.start()).thenReturn(successfulClientInitResult);
-
-
-		ASDCController asdcController = new ASDCController("asdc-controller1",distributionClient,vnfInstaller);
-
-		// it should not raise any exception even if controller is not yet initialized
-		asdcController.updateConfigIfNeeded();
-
-		asdcController.initASDC();
-		assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE);
-		assertFalse(asdcController.updateConfigIfNeeded());
-
-		msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP3);
-		msoPropertiesFactory.reloadMsoProperties();
-		// It should fail if it tries to refresh the config as the init will now fail
-		assertTrue(asdcController.updateConfigIfNeeded());
-		assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE);
-
-
-		msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP);
-		msoPropertiesFactory.reloadMsoProperties();
-	}
-
-	@Test
-	@Ignore // 1802 merge
-	public final void testConfigRefreshWhenBusy () throws  IOException, MsoPropertiesException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, ASDCParametersException, ASDCControllerException {
-		IDistributionClient distributionClient;
-		distributionClient = Mockito.mock(IDistributionClient.class);
-		Mockito.when(distributionClient.download(artifactInfo1)).thenReturn(downloadResult);
-		Mockito.when(distributionClient.init(any(ASDCConfiguration.class),any(INotificationCallback.class))).thenReturn(successfulClientInitResult);
-		Mockito.when(distributionClient.start()).thenReturn(successfulClientInitResult);
-
-		ASDCController asdcController = new ASDCController("asdc-controller1",distributionClient,vnfInstaller);
-
-		// it should not raise any exception even if controller is not yet initialized
-		asdcController.updateConfigIfNeeded();
-
-		asdcController.initASDC();
-		assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE);
-		assertFalse(asdcController.updateConfigIfNeeded());
-
-		// Simulate a BUSY case by reflection
-		Field controllerStatus;
-		controllerStatus = ASDCController.class.getDeclaredField("controllerStatus");
-		controllerStatus.setAccessible(true);
-		controllerStatus.set(asdcController,ASDCControllerStatus.BUSY);
-
-
-		msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP3);
-		msoPropertiesFactory.reloadMsoProperties();
-		// It should fail if it tries to refresh the config as the init will now fail
-		try {
-			asdcController.updateConfigIfNeeded();
-			fail ("ASDCControllerException should have been raised");
-		} catch (ASDCControllerException e) {
-			assertTrue("Cannot close the ASDC controller as it's currently in BUSY state".equals(e.getMessage()));
-		}
-
-		// Try it a second time to see if we still see the changes
-		try {
-			asdcController.updateConfigIfNeeded();
-			fail ("ASDCControllerException should have been raised");
-		} catch (ASDCControllerException e) {
-			assertTrue("Cannot close the ASDC controller as it's currently in BUSY state".equals(e.getMessage()));
-		}
-
-		// Revert to Idle by reflection
-		controllerStatus.set(asdcController,ASDCControllerStatus.IDLE);
-		controllerStatus.setAccessible(false);
-
-		// This should work now, controller should be restarted
-		assertTrue(asdcController.updateConfigIfNeeded());
-		assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE);
-
-		msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP);
-		msoPropertiesFactory.reloadMsoProperties();
-	}
-
-
-	@Test
-	@Ignore // 1802 merge
-	public final void testBadConfigRefresh () throws ASDCParametersException, ASDCControllerException, IOException, MsoPropertiesException {
-		IDistributionClient distributionClient;
-		distributionClient = Mockito.mock(IDistributionClient.class);
-		Mockito.when(distributionClient.download(artifactInfo1)).thenReturn(downloadResult);
-		Mockito.when(distributionClient.init(any(ASDCConfiguration.class),any(INotificationCallback.class))).thenReturn(successfulClientInitResult);
-		Mockito.when(distributionClient.start()).thenReturn(successfulClientInitResult);
-
-
-		ASDCController asdcController = new ASDCController("asdc-controller1",distributionClient,vnfInstaller);
-
-		// it should not raise any exception even if controller is not yet initialized
-		asdcController.updateConfigIfNeeded();
-
-		asdcController.initASDC();
-		assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE);
-		assertFalse(asdcController.updateConfigIfNeeded());
-
-		msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP_BAD);
-		msoPropertiesFactory.reloadMsoProperties();
-		// It should fail if it tries to refresh the config as the init will now fail
-		try {
-			asdcController.updateConfigIfNeeded();
-			fail ("ASDCParametersException should have been raised");
-		} catch (ASDCParametersException ep) {
-			assertTrue("consumerGroup parameter cannot be found in config mso.properties".equals(ep.getMessage()));
-		}
-
-		// This should stop the controller, as it can't work with a bad config file
-		assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.STOPPED);
-
-
-		msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP);
-		msoPropertiesFactory.reloadMsoProperties();
-	}
-
-	@Test
-	@Ignore // 1802 merge
-	public final void testConfigAccess () throws ASDCControllerException, ASDCParametersException, IOException {
-		IDistributionClient distributionClient;
-		distributionClient = Mockito.mock(IDistributionClient.class);
-		Mockito.when(distributionClient.download(artifactInfo1)).thenReturn(downloadResult);
-		Mockito.when(distributionClient.init(any(ASDCConfiguration.class),any(INotificationCallback.class))).thenReturn(successfulClientInitResult);
-		Mockito.when(distributionClient.start()).thenReturn(successfulClientInitResult);
-
-		
-		ASDCController asdcController = new ASDCController("asdc-controller1",distributionClient,vnfInstaller);
-		
-		assertTrue("Unknown".equals(asdcController.getAddress()));
-		assertTrue("Unknown".equals(asdcController.getEnvironment()));
-		
-		asdcController.initASDC();
-		
-		assertTrue("hostname".equals(asdcController.getAddress()));
-		assertTrue("environmentName".equals(asdcController.getEnvironment()));
-		
-	}
-
-}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/ASDCGlobalControllerTest.java b/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/ASDCGlobalControllerTest.java
deleted file mode 100644
index c301b05..0000000
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/ASDCGlobalControllerTest.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2018 Huawei 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.mso.asdc.client;
-
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.codec.binary.Base64;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import org.onap.sdc.api.notification.IArtifactInfo;
-import org.onap.sdc.api.notification.INotificationData;
-import org.onap.sdc.api.notification.IResourceInstance;
-import org.onap.sdc.api.results.IDistributionClientDownloadResult;
-import org.onap.sdc.api.results.IDistributionClientResult;
-import org.onap.sdc.utils.DistributionActionResultEnum;
-import org.openecomp.mso.asdc.client.ASDCConfiguration;
-import org.openecomp.mso.asdc.client.ASDCGlobalController;
-import org.openecomp.mso.asdc.client.exceptions.ASDCControllerException;
-import org.openecomp.mso.asdc.client.exceptions.ASDCParametersException;
-import org.openecomp.mso.asdc.client.exceptions.ArtifactInstallerException;
-import org.openecomp.mso.properties.MsoJavaProperties;
-import org.openecomp.mso.properties.MsoPropertiesException;
-import org.openecomp.mso.properties.MsoPropertiesFactory;
-
-
-
-/**
- * THis class tests the ASDC Controller by using the ASDC Mock CLient
- *
- *
- */
-public class ASDCGlobalControllerTest {
-
-	private static MsoPropertiesFactory msoPropertiesFactory = new MsoPropertiesFactory();
-
-	private static String heatExample;
-	private static String heatExampleMD5HashBase64;
-
-	private static INotificationData iNotif;
-
-	private static IDistributionClientDownloadResult downloadResult;
-	private static IDistributionClientDownloadResult downloadCorruptedResult;
-
-	private static IDistributionClientResult successfulClientInitResult;
-	private static IDistributionClientResult unsuccessfulClientInitResult;
-
-	private static IArtifactInfo artifactInfo1;
-
-	private static IResourceInstance resource1;
-
-	public static final String ASDC_PROP = MsoJavaProperties.class.getClassLoader().getResource("mso.json").toString().substring(5);
-	public static final String ASDC_PROP2 = MsoJavaProperties.class.getClassLoader().getResource("mso2.json").toString().substring(5);
-	public static final String ASDC_PROP3 = MsoJavaProperties.class.getClassLoader().getResource("mso3.json").toString().substring(5);
-	public static final String ASDC_PROP_BAD = MsoJavaProperties.class.getClassLoader().getResource("mso-bad.json").toString().substring(5);
-	public static final String ASDC_PROP_WITH_NULL = MsoJavaProperties.class.getClassLoader().getResource("mso-with-NULL.json").toString().substring(5);
-	public static final String ASDC_PROP_WITH_DOUBLE = MsoJavaProperties.class.getClassLoader().getResource("mso-two-configs.json").toString().substring(5);
-	public static final String ASDC_PROP_WITH_DOUBLE2 = MsoJavaProperties.class.getClassLoader().getResource("mso-two-configs2.json").toString().substring(5);
-
-	@BeforeClass
-	public static final void prepareMockNotification() throws MsoPropertiesException, IOException, URISyntaxException, NoSuchAlgorithmException, ArtifactInstallerException  {
-
-		heatExample = new String(Files.readAllBytes(Paths.get(ASDCGlobalControllerTest.class.getClassLoader().getResource("resource-examples/autoscaling.yaml").toURI())));
-		MessageDigest md = MessageDigest.getInstance("MD5");
-		byte[] md5Hash = md.digest(heatExample.getBytes());
-		heatExampleMD5HashBase64 = Base64.encodeBase64String(md5Hash);
-
-		iNotif= Mockito.mock(INotificationData.class);
-
-		// Create fake ArtifactInfo
-		artifactInfo1 = Mockito.mock(IArtifactInfo.class);
-		Mockito.when(artifactInfo1.getArtifactChecksum()).thenReturn(ASDCGlobalControllerTest.heatExampleMD5HashBase64);
-
-		Mockito.when(artifactInfo1.getArtifactName()).thenReturn("artifact1");
-		Mockito.when(artifactInfo1.getArtifactType()).thenReturn(ASDCConfiguration.HEAT);
-		Mockito.when(artifactInfo1.getArtifactURL()).thenReturn("https://localhost:8080/v1/catalog/services/srv1/2.0/resources/aaa/1.0/artifacts/aaa.yml");
-		Mockito.when(artifactInfo1.getArtifactUUID()).thenReturn("UUID1");
-		Mockito.when(artifactInfo1.getArtifactDescription()).thenReturn("testos artifact1");
-
-		// Now provision the NotificationData mock
-		List<IArtifactInfo> listArtifact = new ArrayList<>();
-		listArtifact.add(artifactInfo1);
-
-		// Create fake resource Instance
-        resource1 = Mockito.mock (IResourceInstance.class);
-        Mockito.when (resource1.getResourceType ()).thenReturn ("VF");
-        Mockito.when (resource1.getResourceName ()).thenReturn ("resourceName");
-        Mockito.when (resource1.getArtifacts ()).thenReturn (listArtifact);
-
-        List<IResourceInstance> resources = new ArrayList<> ();
-        resources.add (resource1);
-
-		Mockito.when(iNotif.getResources()).thenReturn(resources);
-		Mockito.when(iNotif.getDistributionID()).thenReturn("distributionID1");
-		Mockito.when(iNotif.getServiceName()).thenReturn("serviceName1");
-		Mockito.when(iNotif.getServiceUUID()).thenReturn("serviceNameUUID1");
-		Mockito.when(iNotif.getServiceVersion()).thenReturn("1.0");
-
-		downloadResult = Mockito.mock(IDistributionClientDownloadResult.class);
-		Mockito.when(downloadResult.getArtifactPayload()).thenReturn(heatExample.getBytes());
-		Mockito.when(downloadResult.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.SUCCESS);
-		Mockito.when(downloadResult.getDistributionMessageResult()).thenReturn("Success");
-
-		downloadCorruptedResult = Mockito.mock(IDistributionClientDownloadResult.class);
-		Mockito.when(downloadCorruptedResult.getArtifactPayload()).thenReturn((heatExample+"badone").getBytes());
-		Mockito.when(downloadCorruptedResult.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.SUCCESS);
-		Mockito.when(downloadCorruptedResult.getDistributionMessageResult()).thenReturn("Success");
-
-
-		// Mock now the ASDC distribution client behavior
-		successfulClientInitResult = Mockito.mock(IDistributionClientResult.class);
-		Mockito.when(successfulClientInitResult.getDistributionActionResult ()).thenReturn(DistributionActionResultEnum.SUCCESS);
-
-		unsuccessfulClientInitResult = Mockito.mock(IDistributionClientResult.class);
-		Mockito.when(unsuccessfulClientInitResult.getDistributionActionResult ()).thenReturn(DistributionActionResultEnum.GENERAL_ERROR);
-
-	}
-	
-	@Before
-	public final void initBeforeEachTest() throws MsoPropertiesException {
-		// load the config
-		msoPropertiesFactory.removeAllMsoProperties();
-		msoPropertiesFactory.initializeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP);
-	}
-
-	@AfterClass
-	public static final void kill () throws MsoPropertiesException {
-
-		msoPropertiesFactory.removeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC);
-	}
-
-	@Test
-	public final void testUpdateControllersConfigIfNeeded() throws ASDCControllerException, ASDCParametersException, IOException, MsoPropertiesException {
-
-		ASDCGlobalController asdcGlobalController = new ASDCGlobalController();
-		assertTrue(asdcGlobalController.getControllers().size()==0);
-		
-		// first init
-		assertTrue(asdcGlobalController.updateControllersConfigIfNeeded());
-		assertTrue(asdcGlobalController.getControllers().size()==1);
-		assertTrue(asdcGlobalController.getControllers().get("asdc-controller1") != null);
-		
-		// Add a second one
-		msoPropertiesFactory.removeAllMsoProperties();
-		msoPropertiesFactory.initializeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP_WITH_DOUBLE);
-		assertTrue(asdcGlobalController.updateControllersConfigIfNeeded());
-		assertTrue(asdcGlobalController.getControllers().size()==2);
-		assertTrue(asdcGlobalController.getControllers().get("asdc-controller1") != null);
-		assertTrue(asdcGlobalController.getControllers().get("asdc-controller2") != null);
-		// Check that update does nothing
-		assertFalse(asdcGlobalController.updateControllersConfigIfNeeded());
-		assertTrue(asdcGlobalController.getControllers().size()==2);
-		
-		// Change the second one name
-		msoPropertiesFactory.removeAllMsoProperties();
-		msoPropertiesFactory.initializeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP_WITH_DOUBLE2);
-		assertTrue(asdcGlobalController.updateControllersConfigIfNeeded());
-		assertTrue(asdcGlobalController.getControllers().size()==2);
-		assertTrue(asdcGlobalController.getControllers().get("asdc-controller1") != null);
-		assertTrue(asdcGlobalController.getControllers().get("asdc-controller2B") != null);
-		
-		
-	}
-	
-	@Test
-	public final void testCloseASDC()  {
-
-		ASDCGlobalController asdcGlobalController = new ASDCGlobalController();
-		assertTrue(asdcGlobalController.getControllers().size()==0);
-		
-		// first init
-		assertTrue(asdcGlobalController.updateControllersConfigIfNeeded());
-		assertTrue(asdcGlobalController.getControllers().size()==1);
-		assertTrue(asdcGlobalController.getControllers().get("asdc-controller1") != null);
-		
-		asdcGlobalController.closeASDC();
-		assertTrue(asdcGlobalController.getControllers().size()==0);
-		
-		
-	}
-
-}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/test/emulators/JsonArtifactInfoTest.java b/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/test/emulators/JsonArtifactInfoTest.java
deleted file mode 100644
index 22d5471..0000000
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/test/emulators/JsonArtifactInfoTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2018 Huawei 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.mso.asdc.client.test.emulators;
-
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class JsonArtifactInfoTest {
-    JsonArtifactInfo jsonArtifactInfo = new JsonArtifactInfo();
-
-    List<JsonArtifactInfo> artifactList = new ArrayList<>();
-
-    @Test
-    public final void addArtifactToUUIDMap()
-    {
-        jsonArtifactInfo.addArtifactToUUIDMap(artifactList);
-    }
-
-    @Test
-    public final void setAttribute()
-    {
-        jsonArtifactInfo.setAttribute("artifactName", "test");
-    }
-
-
-    @Test
-    public final void getArtifactDescription()
-    {
-        final String artifactDescription = jsonArtifactInfo.getArtifactDescription();
-        final String artifactName = jsonArtifactInfo.getArtifactName();
-        final String artifactChecksumfinal = jsonArtifactInfo.getArtifactChecksum();
-        final String artifactChecksum = jsonArtifactInfo.getArtifactChecksum();
-        final Integer artifactTimeout = jsonArtifactInfo.getArtifactTimeout();
-        final String artifactType =  jsonArtifactInfo.getArtifactType();
-        final String artifactURL = jsonArtifactInfo.getArtifactURL();
-        final String artifactUUID = jsonArtifactInfo.getArtifactUUID();
-        final String artifactVersion = jsonArtifactInfo.getArtifactVersion();
-        jsonArtifactInfo.getGeneratedArtifact();
-        jsonArtifactInfo.getRelatedArtifacts();
-
-    }
-}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/test/emulators/JsonNotificationDataTest.java b/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/test/emulators/JsonNotificationDataTest.java
deleted file mode 100644
index 596b2b2..0000000
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/test/emulators/JsonNotificationDataTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2018 Huawei 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.mso.asdc.client.test.emulators;
-
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-
-public class JsonNotificationDataTest {
-
-    @Test
-    public void setAttributeTest()
-    {
-        JsonNotificationData jsonNotificationData = new JsonNotificationData();
-        jsonNotificationData.setWorkloadContext("test");
-        jsonNotificationData.setAttribute("distributionID","test");
-        jsonNotificationData.setAttribute("workloadContext","test");
-        String getWorkloadContextVal = jsonNotificationData.getWorkloadContext();
-        assertEquals("test",getWorkloadContextVal);
-    }
-
-    @Test
-    public void getAttributeTest()
-    {
-        JsonNotificationData jsonNotificationData = new JsonNotificationData();
-        jsonNotificationData.setAttribute("workloadContext","test");;
-        jsonNotificationData.getArtifactMetadataByUUID("test");
-        jsonNotificationData.getDistributionID();
-        jsonNotificationData.getResources();
-        jsonNotificationData.getServiceArtifacts();
-        jsonNotificationData.getServiceDescription();
-        jsonNotificationData.getServiceInvariantUUID();
-        jsonNotificationData.getServiceName();
-        jsonNotificationData.getServiceUUID();
-        jsonNotificationData.getServiceVersion();
-        String getWorkloadContextVal = jsonNotificationData.getWorkloadContext();
-        assertEquals("test",getWorkloadContextVal);
-    }
-}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/test/emulators/JsonResourceInfoTest.java b/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/test/emulators/JsonResourceInfoTest.java
deleted file mode 100644
index ab884fe..0000000
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/test/emulators/JsonResourceInfoTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2018 Huawei 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.mso.asdc.client.test.emulators;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class JsonResourceInfoTest {
-
-
-    @Test
-    public void setAttributeTest()
-    {
-        JsonResourceInfo jsonResourceInfo = new JsonResourceInfo();
-        jsonResourceInfo.setAttribute("resourceInstanceName","resourceInstanceName");
-        String resourceInstanceName = jsonResourceInfo.getResourceInstanceName();
-        assertEquals(resourceInstanceName,"resourceInstanceName");
-    }
-
-    @Test
-    public void getAttributeTest()
-    {
-        JsonResourceInfo jsonResourceInfo = new JsonResourceInfo();
-        String resourceInstanceName = jsonResourceInfo.getResourceInstanceName();
-        assertEquals(resourceInstanceName,null);
-    }
-
-    @Test
-    public void getAttributeTestOthers()
-    {
-        JsonResourceInfo jsonResourceInfo = new JsonResourceInfo();
-        String resourceInvariantUUID = jsonResourceInfo.getResourceInvariantUUID();
-        jsonResourceInfo.getResourceName();
-        jsonResourceInfo.getResourceType();
-        jsonResourceInfo.getResourceUUID();
-        jsonResourceInfo.getResourceVersion();
-        jsonResourceInfo.getSubcategory();
-        jsonResourceInfo.getCategory();
-        jsonResourceInfo.getResourceCustomizationUUID();
-        jsonResourceInfo.getArtifacts();
-        assertEquals(resourceInvariantUUID,null);
-    }
-
-}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/test/emulators/JsonVfModuleMetaDataTest.java b/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/test/emulators/JsonVfModuleMetaDataTest.java
deleted file mode 100644
index 02dc843..0000000
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/test/emulators/JsonVfModuleMetaDataTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2018 Huawei 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.mso.asdc.client.test.emulators;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class JsonVfModuleMetaDataTest {
-
-    @Test
-    public void setGetAttributeTest()
-    {
-        JsonVfModuleMetaData jsonVfModuleMetaDataTest = new JsonVfModuleMetaData();
-        jsonVfModuleMetaDataTest.setAttribute("vfModuleModelVersion",new String("test"));
-        jsonVfModuleMetaDataTest.setAttribute("isBase",new Boolean(true));
-        jsonVfModuleMetaDataTest.getArtifacts();
-        jsonVfModuleMetaDataTest.getProperties();
-        jsonVfModuleMetaDataTest.getVfModuleModelDescription();
-        jsonVfModuleMetaDataTest.getVfModuleModelInvariantUUID();
-        jsonVfModuleMetaDataTest.getVfModuleModelCustomizationUUID();
-        jsonVfModuleMetaDataTest.getVfModuleModelName();
-        jsonVfModuleMetaDataTest.getVfModuleModelUUID();
-        jsonVfModuleMetaDataTest.getVfModuleModelVersion();
-        Boolean baseVal  = jsonVfModuleMetaDataTest.isBase();
-        assertEquals(baseVal, true);
-    }
-}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/installer/heat/tests/ToscaResourceInstallerTest.java b/asdc-controller/src/test/java/org/openecomp/mso/asdc/installer/heat/tests/ToscaResourceInstallerTest.java
deleted file mode 100644
index ebcae50..0000000
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/installer/heat/tests/ToscaResourceInstallerTest.java
+++ /dev/null
@@ -1,674 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 Huawei Technologies Co., Ltd. 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.mso.asdc.installer.heat.tests;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URISyntaxException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.lang3.tuple.Pair;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.mockito.Mockito;
-import org.openecomp.mso.asdc.client.ASDCConfiguration;
-import org.openecomp.mso.asdc.client.exceptions.ArtifactInstallerException;
-import org.openecomp.mso.asdc.client.ASDCControllerTest;
-import org.openecomp.mso.asdc.installer.ToscaResourceStructure;
-import org.openecomp.mso.asdc.installer.VfResourceStructure;
-import org.openecomp.mso.asdc.installer.heat.ToscaResourceInstaller;
-import org.openecomp.mso.db.catalog.CatalogDatabase;
-import org.openecomp.mso.db.catalog.beans.AllottedResource;
-import org.openecomp.mso.db.catalog.beans.AllottedResourceCustomization;
-import org.openecomp.mso.db.catalog.beans.NetworkResource;
-import org.openecomp.mso.db.catalog.beans.NetworkResourceCustomization;
-import org.openecomp.mso.db.catalog.beans.Service;
-import org.openecomp.mso.db.catalog.beans.ServiceToAllottedResources;
-import org.openecomp.mso.db.catalog.beans.ServiceToNetworks;
-import org.openecomp.mso.db.catalog.beans.ServiceToResourceCustomization;
-import org.openecomp.mso.db.catalog.beans.TempNetworkHeatTemplateLookup;
-import org.openecomp.mso.db.catalog.beans.ToscaCsar;
-import org.openecomp.mso.db.catalog.beans.VfModule;
-import org.openecomp.mso.db.catalog.beans.VfModuleCustomization;
-import org.openecomp.mso.db.catalog.beans.VfModuleToHeatFiles;
-import org.openecomp.mso.db.catalog.beans.VnfResCustomToVfModuleCustom;
-import org.openecomp.mso.db.catalog.beans.VnfResource;
-import org.openecomp.mso.db.catalog.beans.VnfResourceCustomization;
-import org.openecomp.mso.properties.MsoJavaProperties;
-import org.openecomp.mso.properties.MsoPropertiesException;
-import org.openecomp.mso.properties.MsoPropertiesFactory;
-import org.onap.sdc.api.IDistributionClient;
-import org.onap.sdc.api.notification.IArtifactInfo;
-import org.onap.sdc.api.notification.INotificationData;
-import org.onap.sdc.api.notification.IResourceInstance;
-import org.onap.sdc.api.results.IDistributionClientDownloadResult;
-import org.onap.sdc.api.results.IDistributionClientResult;
-import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
-import org.onap.sdc.tosca.parser.impl.FilterType;
-import org.onap.sdc.tosca.parser.impl.SdcTypes;
-import org.onap.sdc.toscaparser.api.CapabilityAssignment;
-import org.onap.sdc.toscaparser.api.CapabilityAssignments;
-import org.onap.sdc.toscaparser.api.Group;
-import org.onap.sdc.toscaparser.api.NodeTemplate;
-import org.onap.sdc.toscaparser.api.RequirementAssignments;
-import org.onap.sdc.toscaparser.api.elements.Metadata;
-import org.onap.sdc.toscaparser.api.parameters.Input;
-import org.onap.sdc.utils.DistributionActionResultEnum;
-
-import mockit.Mock;
-import mockit.MockUp;
-
-public class ToscaResourceInstallerTest {
-
-	private static MsoPropertiesFactory msoPropertiesFactory = new MsoPropertiesFactory();
-
-	private static String heatExample;
-	private static String heatExampleMD5HashBase64;
-
-	private static INotificationData iNotif;
-
-	private static IDistributionClientDownloadResult downloadResult;
-	private static IDistributionClientDownloadResult downloadCorruptedResult;
-
-	private static IDistributionClientResult successfulClientInitResult;
-	private static IDistributionClientResult unsuccessfulClientInitResult;
-
-	private static IDistributionClient distributionClient;
-
-	private static IArtifactInfo artifactInfo1;
-
-	private static IResourceInstance resource1;
-
-	private static VfResourceStructure vrs;
-
-	public static final String ASDC_PROP = MsoJavaProperties.class.getClassLoader().getResource("mso.json").toString()
-			.substring(5);
-	public static final String ASDC_PROP2 = MsoJavaProperties.class.getClassLoader().getResource("mso2.json").toString()
-			.substring(5);
-	public static final String ASDC_PROP3 = MsoJavaProperties.class.getClassLoader().getResource("mso3.json").toString()
-			.substring(5);
-	public static final String ASDC_PROP_BAD = MsoJavaProperties.class.getClassLoader().getResource("mso-bad.json")
-			.toString().substring(5);
-	public static final String ASDC_PROP_WITH_NULL = MsoJavaProperties.class.getClassLoader()
-			.getResource("mso-with-NULL.json").toString().substring(5);
-
-	@BeforeClass
-	public static final void prepareMockNotification() throws MsoPropertiesException, IOException, URISyntaxException,
-			NoSuchAlgorithmException, ArtifactInstallerException {
-
-		heatExample = new String(Files.readAllBytes(Paths.get(
-				ASDCControllerTest.class.getClassLoader().getResource("resource-examples/autoscaling.yaml").toURI())));
-		MessageDigest md = MessageDigest.getInstance("MD5");
-		byte[] md5Hash = md.digest(heatExample.getBytes());
-		heatExampleMD5HashBase64 = Base64.encodeBase64String(md5Hash);
-
-		iNotif = Mockito.mock(INotificationData.class);
-
-		// Create fake ArtifactInfo
-		artifactInfo1 = Mockito.mock(IArtifactInfo.class);
-		Mockito.when(artifactInfo1.getArtifactChecksum())
-				.thenReturn(ToscaResourceInstallerTest.heatExampleMD5HashBase64);
-
-		Mockito.when(artifactInfo1.getArtifactName()).thenReturn("artifact1");
-		Mockito.when(artifactInfo1.getArtifactType()).thenReturn(ASDCConfiguration.HEAT);
-		Mockito.when(artifactInfo1.getArtifactURL())
-				.thenReturn("https://localhost:8080/v1/catalog/services/srv1/2.0/resources/aaa/1.0/artifacts/aaa.yml");
-		Mockito.when(artifactInfo1.getArtifactUUID()).thenReturn("UUID1");
-		Mockito.when(artifactInfo1.getArtifactDescription()).thenReturn("testos artifact1");
-
-		distributionClient = Mockito.mock(IDistributionClient.class);
-
-		// Now provision the NotificationData mock
-		List<IArtifactInfo> listArtifact = new ArrayList<>();
-		listArtifact.add(artifactInfo1);
-
-		// Create fake resource Instance
-		resource1 = Mockito.mock(IResourceInstance.class);
-		// Mockito.when(resource1.getResourceType()).thenReturn("VF");
-		Mockito.when(resource1.getResourceName()).thenReturn("resourceName");
-		Mockito.when(resource1.getArtifacts()).thenReturn(listArtifact);
-
-		List<IResourceInstance> resources = new ArrayList<>();
-		resources.add(resource1);
-
-		Mockito.when(iNotif.getResources()).thenReturn(resources);
-		Mockito.when(iNotif.getDistributionID()).thenReturn("distributionID1");
-		Mockito.when(iNotif.getServiceName()).thenReturn("serviceName1");
-		Mockito.when(iNotif.getServiceUUID()).thenReturn("serviceNameUUID1");
-		Mockito.when(iNotif.getServiceVersion()).thenReturn("1.0");
-
-		downloadResult = Mockito.mock(IDistributionClientDownloadResult.class);
-		Mockito.when(downloadResult.getArtifactPayload()).thenReturn(heatExample.getBytes());
-		Mockito.when(downloadResult.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.SUCCESS);
-		Mockito.when(downloadResult.getDistributionMessageResult()).thenReturn("Success");
-
-		downloadCorruptedResult = Mockito.mock(IDistributionClientDownloadResult.class);
-		Mockito.when(downloadCorruptedResult.getArtifactPayload()).thenReturn((heatExample + "badone").getBytes());
-		Mockito.when(downloadCorruptedResult.getDistributionActionResult())
-				.thenReturn(DistributionActionResultEnum.SUCCESS);
-		Mockito.when(downloadCorruptedResult.getDistributionMessageResult()).thenReturn("Success");
-
-		vrs = new VfResourceStructure(iNotif, resource1);
-		try {
-			vrs.addArtifactToStructure(distributionClient, artifactInfo1, downloadResult);
-		} catch (UnsupportedEncodingException e) {
-			e.printStackTrace();
-		}
-		try {
-			vrs.createVfModuleStructures();
-		} catch (ArtifactInstallerException e) {
-			e.printStackTrace();
-		}
-		vrs.getNotification();
-		vrs.getArtifactsMapByUUID();
-		vrs.getCatalogNetworkResourceCustomization();
-		vrs.getCatalogResourceCustomization();
-		vrs.getCatalogService();
-		vrs.getCatalogServiceToAllottedResources();
-		vrs.getCatalogServiceToNetworks();
-		vrs.getCatalogVnfResource();
-		vrs.getResourceInstance();
-		vrs.getVfModulesStructureList();
-		vrs.getVfModuleStructure();
-		vrs.setCatalogNetworkResourceCustomization(new NetworkResourceCustomization());
-		vrs.setCatalogResourceCustomization(new AllottedResourceCustomization());
-		vrs.setCatalogService(new Service());
-		vrs.setCatalogServiceToAllottedResources(new ServiceToAllottedResources());
-		vrs.setCatalogServiceToNetworks(new ServiceToNetworks());
-		vrs.setCatalogVnfResource(new VnfResource());
-		vrs.setSuccessfulDeployment();
-
-		AllottedResourceCustomization arc = new AllottedResourceCustomization();
-		arc.setModelCustomizationUuid("modelCustomizationUuid");
-		List<AllottedResourceCustomization> allottedResources = new ArrayList<>();
-		allottedResources.add(arc);
-
-		NetworkResourceCustomization nrc = new NetworkResourceCustomization();
-		nrc.setModelCustomizationUuid("modelCustomizationUuid");
-		List<NetworkResourceCustomization> networkResources = new ArrayList<>();
-		networkResources.add(nrc);
-
-		new MockUp<CatalogDatabase>() {
-			@Mock
-			public List<AllottedResourceCustomization> getAllAllottedResourcesByServiceModelUuid(
-					String serviceModelUuid) {
-				return allottedResources;
-			}
-		};
-		new MockUp<CatalogDatabase>() {
-			@Mock
-			public List<NetworkResourceCustomization> getAllNetworksByServiceModelUuid(String serviceModelUuid) {
-				return networkResources;
-			}
-		};
-
-		// Mock now the ASDC distribution client behavior
-		successfulClientInitResult = Mockito.mock(IDistributionClientResult.class);
-		Mockito.when(successfulClientInitResult.getDistributionActionResult())
-				.thenReturn(DistributionActionResultEnum.SUCCESS);
-
-		unsuccessfulClientInitResult = Mockito.mock(IDistributionClientResult.class);
-		Mockito.when(unsuccessfulClientInitResult.getDistributionActionResult())
-				.thenReturn(DistributionActionResultEnum.GENERAL_ERROR);
-
-	}
-
-	@Before
-	public final void initBeforeEachTest() throws MsoPropertiesException {
-		// load the config
-		msoPropertiesFactory.removeAllMsoProperties();
-		msoPropertiesFactory.initializeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP);
-	}
-
-	@AfterClass
-	public static final void kill() throws MsoPropertiesException {
-
-		msoPropertiesFactory.removeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC);
-
-	}
-
-	@Test
-	public void isResourceAlreadyDeployedAllotedResourceTest() {
-		Mockito.when(resource1.getResourceType()).thenReturn("VF");
-		Mockito.when(resource1.getCategory()).thenReturn("Allotted Resource");
-		ToscaResourceInstaller tri = new ToscaResourceInstaller();
-
-		try {
-			tri.isResourceAlreadyDeployed(vrs);
-		} catch (ArtifactInstallerException e) {
-		}
-	}
-
-	@Test(expected=Exception.class)
-	@Ignore // 1802 merge
-	public void installTheResourceTest() {
-
-		/*
-		 * COMMENTED OUT BECAUSE IT DOES NOT COMPILE IN ONAP JENKINS BUILD
-		 * 
-		ToscaResourceStructure trs = new ToscaResourceStructure();
-		trs.getAllottedResource();
-		trs.getAllottedList();
-		trs.getCatalogAllottedResourceCustomization();
-		trs.getCatalogAllottedServiceToResourceCustomization();
-		trs.getCatalogNetworkResource();
-		trs.getCatalogNetworkResourceCustomization();
-		trs.getCatalogResourceCustomization();
-		trs.getCatalogService();
-		trs.getCatalogTempNetworkHeatTemplateLookup();
-		trs.getCatalogToscaCsar();
-		trs.getCatalogVfModule();
-		trs.getCatalogVfModuleCustomization();
-		trs.getCatalogVfModuleToHeatFiles();
-		trs.getCatalogVfServiceToResourceCustomization();
-		trs.getCatalogVlServiceToResourceCustomization();
-		trs.getCatalogVnfResCustomToVfModuleCustom();
-		trs.getCatalogVnfResource();
-		trs.getCatalogVnfResourceCustomization();
-		trs.getEnvHeatTemplateUUID();
-		trs.getHeatFilesUUID();
-		trs.getHeatTemplateUUID();
-		trs.getNetworkTypes();
-		trs.getSdcCsarHelper();
-		trs.getServiceMetadata();
-		trs.getServiceToResourceCustomization();
-		trs.getServiceVersion();
-		trs.getToscaArtifact();
-		trs.getVfTypes();
-		trs.getVolHeatEnvTemplateUUID();
-		trs.getVolHeatTemplateUUID();
-
-		NodeTemplate nodeTemplate = Mockito.mock(NodeTemplate.class);
-		List<NodeTemplate> alnt = new ArrayList<>();
-		trs.setAllottedList(alnt);
-		trs.setAllottedResource(new AllottedResource());
-		trs.setCatalogAllottedResourceCustomization(new AllottedResourceCustomization());
-		trs.setCatalogAllottedServiceToResourceCustomization(new ServiceToResourceCustomization());
-		trs.setCatalogNetworkResource(new NetworkResource());
-		trs.setCatalogNetworkResourceCustomization(new NetworkResourceCustomization());
-		trs.setCatalogResourceCustomization(new AllottedResourceCustomization());
-		trs.setCatalogService(new Service());
-		trs.setCatalogTempNetworkHeatTemplateLookup(new TempNetworkHeatTemplateLookup());
-		trs.setCatalogToscaCsar(new ToscaCsar());
-		trs.setCatalogVfModule(new VfModule());
-		trs.setCatalogVfModuleCustomization(new VfModuleCustomization());
-		trs.setCatalogVfModuleToHeatFiles(new VfModuleToHeatFiles());
-		trs.setCatalogVfServiceToResourceCustomization(new ServiceToResourceCustomization());
-		trs.setCatalogVlServiceToResourceCustomization(new ServiceToResourceCustomization());
-		trs.setCatalogVnfResCustomToVfModuleCustom(new VnfResCustomToVfModuleCustom());
-		trs.setCatalogVnfResource(new VnfResource());
-		trs.setCatalogVnfResourceCustomization(new VnfResourceCustomization());
-		trs.setEnvHeatTemplateUUID("envHeatTemplateUUID");
-		trs.setHeatFilesUUID("heatFilesUUID");
-		trs.setHeatTemplateUUID("heatTemplateUUID");
-		trs.setNetworkTypes(alnt);
-		trs.setVolHeatTemplateUUID("volHeatTemplateUUID");
-		trs.setSdcCsarHelper(new ISdcCsarHelper() {
-
-			@Override
-			public List<NodeTemplate> getGroupMembersFromTopologyTemplate(String arg0) {
-			    return null;
-			}
-
-			@Override
-			public List<Map<String, Object>> getGroupsOfOriginOfNodeTemplate(NodeTemplate arg0) {
-			    return null;
-			}
-
-			@Override
-			public List<Map<String,Map<String,Object>>> getGroupsOfTopologyTemplateByToscaGroupType(String arg0) {
-			    return null;
-			}
-
-			@Override
-			public List<Map<String,Map<String,Object>>> getGroupsOfTopologyTemplate() {
-			    return null;
-			}
-
-			@Override
-			public List<Map<String,Map<String,Object>>> getPoliciesOfTargetByToscaPolicyType(NodeTemplate arg0, String arg1) {
-			    return null;
-			}
-
-			@Override
-			public List<Map<String,Map<String,Object>>> getPoliciesOfTarget(NodeTemplate arg0) {
-			    return null;
-			}
-
-			@Override
-			public NodeTemplate getNodeTemplateByName(String arg0) {
-			    return null;
-			}
-
-			@Override
-			public List<Map<String,Object>> getPolicyTargetsFromOrigin(NodeTemplate arg0, String arg1) {
-			    return null;
-			}
-
-			@Override
-			public List<NodeTemplate> getPolicyTargetsFromTopologyTemplate(String arg0) {
-			    return null;
-			}
-
-			@Override
-			public List<Map<String,Object>> getPoliciesOfOriginOfNodeTemplateByToscaPolicyType(NodeTemplate arg0, String arg1) {
-			    return null;
-			}
-
-			@Override
-			public List<Map<String,Object>> getPoliciesOfOriginOfNodeTemplate(NodeTemplate arg0) {
-			    return null;
-			}
-
-			@Override
-			public List<Map<String,Map<String,Object>>>  getPoliciesOfTopologyTemplateByToscaPolicyType(String arg0) {
-			    return null;
-			}
-
-			@Override
-			public List<Map<String,Map<String,Object>>> getPoliciesOfTopologyTemplate() {
-			    return null;
-			}
-
-			////////////////////////////////
-
-			@Override
-			public boolean hasTopology(NodeTemplate arg0) {
-				return false;
-			}
-
-			@Override
-			public NodeTemplate getVnfConfig(String arg0) {
-				return null;
-			}
-
-			@Override
-			public List<NodeTemplate> getVfcListByVf(String arg0) {
-				return null;
-			}
-
-			@Override
-			public List<Group> getVfModulesByVf(String arg0) {
-				return null;
-			}
-
-			@Override
-			public String getTypeOfNodeTemplate(NodeTemplate arg0) {
-				return null;
-			}
-
-			@Override
-			public List<NodeTemplate> getServiceVlList() {
-				return null;
-			}
-
-			@Override
-			public List<NodeTemplate> getServiceVfList() {
-				return null;
-			}
-
-			@Override
-			public String getServiceSubstitutionMappingsTypeName() {
-				return null;
-			}
-
-			@Override
-			public List<NodeTemplate> getServiceNodeTemplatesByType(String arg0) {
-				return null;
-			}
-
-			@Override
-			public List<NodeTemplate> getServiceNodeTemplates() {
-				return null;
-			}
-
-			@Override
-			public List<NodeTemplate> getServiceNodeTemplateBySdcType(SdcTypes arg0) {
-				return null;
-			}
-
-			@Override
-			public Map<String, Object> getServiceMetadataProperties() {
-				return null;
-			}
-
-			@Override
-			public Metadata getServiceMetadata() {
-				return null;
-			}
-
-			@Override
-			public List<Input> getServiceInputs() {
-				return null;
-			}
-
-			@Override
-			public Object getServiceInputLeafValueOfDefaultAsObject(String arg0) {
-				return null;
-			}
-
-			@Override
-			public String getServiceInputLeafValueOfDefault(String arg0) {
-				return null;
-			}
-
-			@Override
-			public String getNodeTemplatePropertyLeafValue(NodeTemplate arg0, String arg1) {
-				return null;
-			}
-
-			@Override
-			public Object getNodeTemplatePropertyAsObject(NodeTemplate arg0, String arg1) {
-				return null;
-			}
-
-			@Override
-			public List<Pair<NodeTemplate, NodeTemplate>> getNodeTemplatePairsByReqName(List<NodeTemplate> arg0,
-					List<NodeTemplate> arg1, String arg2) {
-				return null;
-			}
-
-			@Override
-			public String getNodeTemplateCustomizationUuid(NodeTemplate arg0) {
-				return null;
-			}
-
-			@Override
-			public List<NodeTemplate> getNodeTemplateChildren(NodeTemplate arg0) {
-				return null;
-			}
-
-			@Override
-			public List<NodeTemplate> getNodeTemplateBySdcType(NodeTemplate arg0, SdcTypes arg1) {
-				return null;
-			}
-
-			@Override
-			public String getMetadataPropertyValue(Metadata arg0, String arg1) {
-				return null;
-			}
-
-			@Override
-			public List<NodeTemplate> getMembersOfVfModule(NodeTemplate arg0, Group arg1) {
-				return null;
-			}
-
-			@Override
-			public String getGroupPropertyLeafValue(Group arg0, String arg1) {
-				return null;
-			}
-
-			@Override
-			public Object getGroupPropertyAsObject(Group arg0, String arg1) {
-				return null;
-			}
-
-			@Override
-			public Map<String, Map<String, Object>> getCpPropertiesFromVfcAsObject(NodeTemplate arg0) {
-				return null;
-			}
-
-			@Override
-			public Map<String, Map<String, Object>> getCpPropertiesFromVfc(NodeTemplate arg0) {
-				return null;
-			}
-
-			@Override
-			public List<NodeTemplate> getCpListByVf(String arg0) {
-				return null;
-			}
-
-			@Override
-			public String getConformanceLevel() {
-				return null;
-			}
-
-			@Override
-			public List<NodeTemplate> getAllottedResources() {
-				return null;
-			}
-
-			@Override
-			public Map<String, String> filterNodeTemplatePropertiesByValue(NodeTemplate arg0, FilterType arg1,
-					String arg2) {
-				return null;
-			}
-
-			@Override
-			public CapabilityAssignments getCapabilitiesOf(NodeTemplate arg0) {
-				// TODO Auto-generated method stub
-				return null;
-			}
-
-			@Override
-			public String getCapabilityPropertyLeafValue(CapabilityAssignment arg0, String arg1) {
-				// TODO Auto-generated method stub
-				return null;
-			}
-
-			@Override
-			public Metadata getNodeTemplateMetadata(NodeTemplate arg0) {
-				// TODO Auto-generated method stub
-				return null;
-			}
-
-			@Override
-			public RequirementAssignments getRequirementsOf(NodeTemplate arg0) {
-				// TODO Auto-generated method stub
-				return null;
-			}
-
-			@Override
-			public Map<String, String> getServiceMetadataAllProperties() {
-				// TODO Auto-generated method stub
-				return null;
-			}
-
-			@Override
-			public NodeTemplate getServiceNodeTemplateByNodeName(String arg0) {
-				// TODO Auto-generated method stub
-				return null;
-			}
-		});
-		// trs.setServiceMetadata(new Metadata(new HashMap<>()));
-		trs.setServiceToResourceCustomization(new ServiceToResourceCustomization());
-		trs.setServiceVersion("1.0");
-		trs.setToscaArtifact(new IArtifactInfo() {
-
-			@Override
-			public List<IArtifactInfo> getRelatedArtifacts() {
-				return null;
-			}
-
-			@Override
-			public IArtifactInfo getGeneratedArtifact() {
-				return null;
-			}
-
-			@Override
-			public String getArtifactVersion() {
-				return null;
-			}
-
-			@Override
-			public String getArtifactUUID() {
-				return null;
-			}
-
-			@Override
-			public String getArtifactURL() {
-				return null;
-			}
-
-			@Override
-			public String getArtifactType() {
-				return null;
-			}
-
-			@Override
-			public Integer getArtifactTimeout() {
-				return null;
-			}
-
-			@Override
-			public String getArtifactName() {
-				return null;
-			}
-
-			@Override
-			public String getArtifactDescription() {
-				return null;
-			}
-
-			@Override
-			public String getArtifactChecksum() {
-				return null;
-			}
-		});
-		trs.setVfTypes(alnt);
-		trs.setVnfAlreadyInstalled(true);
-		trs.setVolHeatEnvTemplateUUID("volHeatEnvTemplateUUID");
-		trs.isVnfAlreadyInstalled();
-
-		try{
-		trs.updateResourceStructure(artifactInfo1);
-		
-		}catch(Exception e){}
-		
-		ToscaResourceInstaller tri = new ToscaResourceInstaller();
-
-		try {
-			tri.installTheResource(trs, vrs);
-		} catch (ArtifactInstallerException e) {
-		}
-		*/
-	}
-}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/installer/heat/tests/VfResourceInstallerTest.java b/asdc-controller/src/test/java/org/openecomp/mso/asdc/installer/heat/tests/VfResourceInstallerTest.java
deleted file mode 100644
index 82c2e82..0000000
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/installer/heat/tests/VfResourceInstallerTest.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 Huawei Technologies Co., Ltd. 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.mso.asdc.installer.heat.tests;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URISyntaxException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.codec.binary.Base64;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.mockito.Mockito;
-import org.openecomp.mso.asdc.client.ASDCConfiguration;
-import org.openecomp.mso.asdc.client.exceptions.ArtifactInstallerException;
-import org.openecomp.mso.asdc.client.ASDCControllerTest;
-import org.openecomp.mso.asdc.installer.VfResourceStructure;
-import org.openecomp.mso.asdc.installer.heat.VfResourceInstaller;
-import org.openecomp.mso.db.catalog.CatalogDatabase;
-import org.openecomp.mso.db.catalog.beans.AllottedResourceCustomization;
-import org.openecomp.mso.db.catalog.beans.NetworkResourceCustomization;
-import org.openecomp.mso.db.catalog.beans.Service;
-import org.openecomp.mso.db.catalog.beans.ServiceToAllottedResources;
-import org.openecomp.mso.db.catalog.beans.ServiceToNetworks;
-import org.openecomp.mso.db.catalog.beans.VnfResource;
-import org.openecomp.mso.properties.MsoJavaProperties;
-import org.openecomp.mso.properties.MsoPropertiesException;
-import org.openecomp.mso.properties.MsoPropertiesFactory;
-import org.onap.sdc.api.IDistributionClient;
-import org.onap.sdc.api.notification.IArtifactInfo;
-import org.onap.sdc.api.notification.INotificationData;
-import org.onap.sdc.api.notification.IResourceInstance;
-import org.onap.sdc.api.results.IDistributionClientDownloadResult;
-import org.onap.sdc.api.results.IDistributionClientResult;
-import org.onap.sdc.utils.DistributionActionResultEnum;
-
-import mockit.Mock;
-import mockit.MockUp;
-
-public class VfResourceInstallerTest {
-	private static MsoPropertiesFactory msoPropertiesFactory = new MsoPropertiesFactory();
-
-	private static String heatExample;
-	private static String heatExampleMD5HashBase64;
-
-	private static INotificationData iNotif;
-
-	private static IDistributionClientDownloadResult downloadResult;
-	private static IDistributionClientDownloadResult downloadCorruptedResult;
-
-	private static IDistributionClientResult successfulClientInitResult;
-	private static IDistributionClientResult unsuccessfulClientInitResult;
-
-	private static IDistributionClient distributionClient;
-
-	private static IArtifactInfo artifactInfo1;
-
-	private static IResourceInstance resource1;
-
-	private static VfResourceStructure vrs;
-
-	public static final String ASDC_PROP = MsoJavaProperties.class.getClassLoader().getResource("mso.json").toString()
-			.substring(5);
-	public static final String ASDC_PROP2 = MsoJavaProperties.class.getClassLoader().getResource("mso2.json").toString()
-			.substring(5);
-	public static final String ASDC_PROP3 = MsoJavaProperties.class.getClassLoader().getResource("mso3.json").toString()
-			.substring(5);
-	public static final String ASDC_PROP_BAD = MsoJavaProperties.class.getClassLoader().getResource("mso-bad.json")
-			.toString().substring(5);
-	public static final String ASDC_PROP_WITH_NULL = MsoJavaProperties.class.getClassLoader()
-			.getResource("mso-with-NULL.json").toString().substring(5);
-
-	@BeforeClass
-	public static final void prepareMockNotification() throws MsoPropertiesException, IOException, URISyntaxException,
-			NoSuchAlgorithmException, ArtifactInstallerException {
-
-		heatExample = new String(Files.readAllBytes(Paths.get(
-				ASDCControllerTest.class.getClassLoader().getResource("resource-examples/autoscaling.yaml").toURI())));
-		MessageDigest md = MessageDigest.getInstance("MD5");
-		byte[] md5Hash = md.digest(heatExample.getBytes());
-		heatExampleMD5HashBase64 = Base64.encodeBase64String(md5Hash);
-
-		iNotif = Mockito.mock(INotificationData.class);
-
-		// Create fake ArtifactInfo
-		artifactInfo1 = Mockito.mock(IArtifactInfo.class);
-		Mockito.when(artifactInfo1.getArtifactChecksum()).thenReturn(VfResourceInstallerTest.heatExampleMD5HashBase64);
-
-		Mockito.when(artifactInfo1.getArtifactName()).thenReturn("artifact1");
-		Mockito.when(artifactInfo1.getArtifactType()).thenReturn(ASDCConfiguration.HEAT);
-		Mockito.when(artifactInfo1.getArtifactURL())
-				.thenReturn("https://localhost:8080/v1/catalog/services/srv1/2.0/resources/aaa/1.0/artifacts/aaa.yml");
-		Mockito.when(artifactInfo1.getArtifactUUID()).thenReturn("UUID1");
-		Mockito.when(artifactInfo1.getArtifactDescription()).thenReturn("testos artifact1");
-
-		distributionClient = Mockito.mock(IDistributionClient.class);
-
-		// Now provision the NotificationData mock
-		List<IArtifactInfo> listArtifact = new ArrayList<>();
-		listArtifact.add(artifactInfo1);
-
-		// Create fake resource Instance
-		resource1 = Mockito.mock(IResourceInstance.class);
-//		Mockito.when(resource1.getResourceType()).thenReturn("VF");
-		Mockito.when(resource1.getResourceName()).thenReturn("resourceName");
-		Mockito.when(resource1.getArtifacts()).thenReturn(listArtifact);
-
-		List<IResourceInstance> resources = new ArrayList<>();
-		resources.add(resource1);
-
-		Mockito.when(iNotif.getResources()).thenReturn(resources);
-		Mockito.when(iNotif.getDistributionID()).thenReturn("distributionID1");
-		Mockito.when(iNotif.getServiceName()).thenReturn("serviceName1");
-		Mockito.when(iNotif.getServiceUUID()).thenReturn("serviceNameUUID1");
-		Mockito.when(iNotif.getServiceVersion()).thenReturn("1.0");
-
-		downloadResult = Mockito.mock(IDistributionClientDownloadResult.class);
-		Mockito.when(downloadResult.getArtifactPayload()).thenReturn(heatExample.getBytes());
-		Mockito.when(downloadResult.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.SUCCESS);
-		Mockito.when(downloadResult.getDistributionMessageResult()).thenReturn("Success");
-
-		downloadCorruptedResult = Mockito.mock(IDistributionClientDownloadResult.class);
-		Mockito.when(downloadCorruptedResult.getArtifactPayload()).thenReturn((heatExample + "badone").getBytes());
-		Mockito.when(downloadCorruptedResult.getDistributionActionResult())
-				.thenReturn(DistributionActionResultEnum.SUCCESS);
-		Mockito.when(downloadCorruptedResult.getDistributionMessageResult()).thenReturn("Success");
-
-		vrs = new VfResourceStructure(iNotif, resource1);
-		try {
-			vrs.addArtifactToStructure(distributionClient, artifactInfo1, downloadResult);
-		} catch (UnsupportedEncodingException e) {
-			e.printStackTrace();
-		}
-		try {
-			vrs.createVfModuleStructures();
-		} catch (ArtifactInstallerException e) {
-			e.printStackTrace();
-		}
-		vrs.getNotification();
-		vrs.getArtifactsMapByUUID();
-		vrs.getCatalogNetworkResourceCustomization();
-		vrs.getCatalogResourceCustomization();
-		vrs.getCatalogService();
-		vrs.getCatalogServiceToAllottedResources();
-		vrs.getCatalogServiceToNetworks();
-		vrs.getCatalogVnfResource();
-		vrs.getResourceInstance();
-		vrs.getVfModulesStructureList();
-		vrs.getVfModuleStructure();
-		vrs.setCatalogNetworkResourceCustomization(new NetworkResourceCustomization());
-		vrs.setCatalogResourceCustomization(new AllottedResourceCustomization());
-		vrs.setCatalogService(new Service());
-		vrs.setCatalogServiceToAllottedResources(new ServiceToAllottedResources());
-		vrs.setCatalogServiceToNetworks(new ServiceToNetworks());
-		vrs.setCatalogVnfResource(new VnfResource());
-		vrs.setSuccessfulDeployment();
-		
-		AllottedResourceCustomization arc= new AllottedResourceCustomization();
-		arc.setModelCustomizationUuid("modelCustomizationUuid");
-		List<AllottedResourceCustomization> allottedResources = new ArrayList<>();
-		allottedResources.add(arc);
-		
-		NetworkResourceCustomization nrc = new NetworkResourceCustomization();
-		nrc.setModelCustomizationUuid("modelCustomizationUuid");
-		List<NetworkResourceCustomization> networkResources = new ArrayList<>();
-		networkResources.add(nrc);
-		
-		new MockUp<CatalogDatabase>() {
-			@Mock
-			public List<AllottedResourceCustomization> getAllAllottedResourcesByServiceModelUuid(String serviceModelUuid) {
-				return allottedResources;
-			}
-		};
-		new MockUp<CatalogDatabase>() {
-			@Mock
-			 public List<NetworkResourceCustomization> getAllNetworksByServiceModelUuid(String serviceModelUuid) {
-				return networkResources;
-			}
-		};
-		
-		// Mock now the ASDC distribution client behavior
-		successfulClientInitResult = Mockito.mock(IDistributionClientResult.class);
-		Mockito.when(successfulClientInitResult.getDistributionActionResult())
-				.thenReturn(DistributionActionResultEnum.SUCCESS);
-
-		unsuccessfulClientInitResult = Mockito.mock(IDistributionClientResult.class);
-		Mockito.when(unsuccessfulClientInitResult.getDistributionActionResult())
-				.thenReturn(DistributionActionResultEnum.GENERAL_ERROR);
-
-	}
-
-	@Before
-	public final void initBeforeEachTest() throws MsoPropertiesException {
-		// load the config
-		msoPropertiesFactory.removeAllMsoProperties();
-		msoPropertiesFactory.initializeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP);
-	}
-
-	@AfterClass
-	public static final void kill() throws MsoPropertiesException {
-
-		msoPropertiesFactory.removeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC);
-
-	}
-
-	@Test
-	public void isResourceAlreadyDeployedAllotedResourceTest() {
-		
-		Mockito.when(resource1.getResourceType()).thenReturn("VF");
-		Mockito.when(resource1.getCategory()).thenReturn("Allotted Resource");
-		VfResourceInstaller vfri = new VfResourceInstaller();
-
-		try {
-			vfri.isResourceAlreadyDeployed(vrs);
-		} catch (ArtifactInstallerException e) {
-		}
-
-	}
-	
-	@Test
-	public void isResourceAlreadyDeployedTest() {
-		
-		Mockito.when(resource1.getResourceType()).thenReturn("VF");
-		Mockito.when(resource1.getCategory()).thenReturn("Not Allotted Resource");
-		VfResourceInstaller vfri = new VfResourceInstaller();
-		
-		try {
-			vfri.isResourceAlreadyDeployed(vrs);
-		} catch (ArtifactInstallerException e) {
-		}
-		
-	}
-	@Test
-	public void isResourceAlreadyDeployedDuplicateNtwrkTest() {
-		
-		Mockito.when(resource1.getResourceType()).thenReturn("VL");
-		Mockito.when(resource1.getCategory()).thenReturn("Not Allotted Resource");
-		VfResourceInstaller vfri = new VfResourceInstaller();
-		
-		try {
-			vfri.isResourceAlreadyDeployed(vrs);
-		} catch (ArtifactInstallerException e) {
-		}
-		
-	}
-
-	@Test(expected=Exception.class)
-	public void installTheResourceTest() {
-		VfResourceInstaller vfri = new VfResourceInstaller();
-		try {
-			vfri.installTheResource(vrs);
-		} catch (ArtifactInstallerException e) {
-		}
-	}
-}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/tenantIsolation/AaiClientPropertiesImplTest.java b/asdc-controller/src/test/java/org/openecomp/mso/asdc/tenantIsolation/AaiClientPropertiesImplTest.java
deleted file mode 100644
index f61488b..0000000
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/tenantIsolation/AaiClientPropertiesImplTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * 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.mso.asdc.tenantIsolation;
-
-import static org.junit.Assert.assertEquals;
-
-import org.junit.Test;
-import org.openecomp.mso.properties.MsoJavaProperties;
-import org.openecomp.mso.properties.MsoPropertiesFactory;
-
-public class AaiClientPropertiesImplTest {
-	
-	private static final String ASDC_CLIENTS_PROP =
-		MsoJavaProperties.class.getClassLoader().getResource("mso.asdc.clients.properties").toString().substring(5);
-
-	@Test
-	public void testGetEndpoint() throws Exception {
-
-		MsoPropertiesFactory msoPropertiesFactory = new MsoPropertiesFactory();
-		msoPropertiesFactory.removeAllMsoProperties();
-		msoPropertiesFactory.initializeMsoProperties(AsdcPropertiesUtils.MSO_ASDC_CLIENTS, this.ASDC_CLIENTS_PROP);
-
-		AaiClientPropertiesImpl aaiPropertiesImpl = new AaiClientPropertiesImpl();		
-		String aaiEndpoint = aaiPropertiesImpl.getEndpoint().toString();
-		
-		assertEquals("AAI endpoint", "http://localhost:28090", aaiEndpoint);
-		
-	}
-	
-}
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/tenantIsolation/WatchdogDistributionTest.java b/asdc-controller/src/test/java/org/openecomp/mso/asdc/tenantIsolation/WatchdogDistributionTest.java
deleted file mode 100644
index 2e5c4c8..0000000
--- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/tenantIsolation/WatchdogDistributionTest.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * 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.mso.asdc.tenantIsolation;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.openecomp.mso.asdc.client.ASDCConfiguration;
-import org.openecomp.mso.client.aai.AAIResourcesClient;
-import org.openecomp.mso.client.aai.entities.uri.AAIResourceUri;
-import org.openecomp.mso.db.catalog.CatalogDatabase;
-import org.openecomp.mso.db.catalog.beans.Service;
-import org.openecomp.mso.properties.MsoJavaProperties;
-import org.openecomp.mso.properties.MsoPropertiesException;
-import org.openecomp.mso.properties.MsoPropertiesFactory;
-import org.openecomp.mso.requestsdb.WatchdogComponentDistributionStatus;
-import org.openecomp.mso.requestsdb.WatchdogComponentDistributionStatusDb;
-import org.openecomp.mso.requestsdb.WatchdogDistributionStatusDb;
-import org.openecomp.mso.requestsdb.WatchdogServiceModVerIdLookupDb;
-
-public class WatchdogDistributionTest {
-	
-	public static final String ASDC_PROP = MsoJavaProperties.class.getClassLoader().getResource("mso.asdc.json").toString().substring(5);
-	
-	private static MsoPropertiesFactory msoPropertiesFactory = new MsoPropertiesFactory();
-	
-	@Before
-	public final void initBeforeEachTest() throws MsoPropertiesException {
-		// load the config
-		msoPropertiesFactory.removeAllMsoProperties();
-		msoPropertiesFactory.initializeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP);
-	}
-
-	@AfterClass
-	public static final void kill () throws MsoPropertiesException {
-
-		msoPropertiesFactory.removeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC);
-	}
-
-	@Test
-	@Ignore // 1802 merge
-	public void testGetOverallDistributionStatusSuccess() {
-		WatchdogDistribution distribution = new WatchdogDistribution();
-		WatchdogDistributionStatusDb watchdogDisdb = mock(WatchdogDistributionStatusDb.class);
-		WatchdogComponentDistributionStatusDb watchdogComp = mock(WatchdogComponentDistributionStatusDb.class);
-		
-		distribution.setWatchdogDistDb(watchdogDisdb);
-		distribution.setWatchdogCompDistDb(watchdogComp);
-		try {
-			WatchdogComponentDistributionStatus watchDogDisStatus1 = new WatchdogComponentDistributionStatus();
-			watchDogDisStatus1.setComponentDistributionStatus("SUCCESS");
-			watchDogDisStatus1.setComponentName("AAI");
-			
-			WatchdogComponentDistributionStatus watchDogDisStatus2 = new WatchdogComponentDistributionStatus();
-			watchDogDisStatus2.setComponentDistributionStatus("SUCCESS");
-			watchDogDisStatus2.setComponentName("APP");
-			
-			List<WatchdogComponentDistributionStatus> results = new ArrayList<>();
-			results.add(watchDogDisStatus1);
-			results.add(watchDogDisStatus2);
-			
-			when(watchdogDisdb.getWatchdogDistributionIdStatus(any(String.class))).thenReturn(null);
-			when(watchdogComp.getWatchdogComponentDistributionStatus(any(String.class))).thenReturn(results);
-			doNothing().when(watchdogDisdb).updateWatchdogDistributionIdStatus(any(String.class), any(String.class));
-
-			String result = distribution.getOverallDistributionStatus("ff3514e3-5a33-55df-13ab-12abad84e7fe");
-			
-			assertEquals("SUCCESS", result);
-		} catch (Exception e) {
-			fail("Unexpected result");
-		}
-	}
-	
-	@Test
-	@Ignore // 1802 merge
-	public void testGetOverallDistributionStatusFailure() {
-		WatchdogDistribution distribution = new WatchdogDistribution();
-		WatchdogDistributionStatusDb watchdogDisdb = mock(WatchdogDistributionStatusDb.class);
-		WatchdogComponentDistributionStatusDb watchdogComp = mock(WatchdogComponentDistributionStatusDb.class);
-		
-		distribution.setWatchdogDistDb(watchdogDisdb);
-		distribution.setWatchdogCompDistDb(watchdogComp);
-		
-		try {
-			WatchdogComponentDistributionStatus watchDogDisStatus1 = new WatchdogComponentDistributionStatus();
-			watchDogDisStatus1.setComponentDistributionStatus("SUCCESS");
-			watchDogDisStatus1.setComponentName("AAI");
-			
-			WatchdogComponentDistributionStatus watchDogDisStatus2 = new WatchdogComponentDistributionStatus();
-			watchDogDisStatus2.setComponentDistributionStatus("FAILURE");
-			watchDogDisStatus2.setComponentName("APP");
-			
-			List<WatchdogComponentDistributionStatus> results = new ArrayList<>();
-			results.add(watchDogDisStatus1);
-			results.add(watchDogDisStatus2);
-			
-			when(watchdogDisdb.getWatchdogDistributionIdStatus(any(String.class))).thenReturn(null);
-			when(watchdogComp.getWatchdogComponentDistributionStatus(any(String.class))).thenReturn(results);
-			doNothing().when(watchdogDisdb).updateWatchdogDistributionIdStatus(any(String.class), any(String.class));
-
-			String result = distribution.getOverallDistributionStatus("ff3514e3-5a33-55df-13ab-12abad84e7fe");
-			
-			assertEquals("FAILURE", result);
-		} catch (Exception e) {
-			fail("Unexpected result");
-		}
-	}
-	
-	@Test
-	public void testGetOverallDistributionStatusException() {
-		WatchdogDistribution distribution = new WatchdogDistribution();
-		WatchdogDistributionStatusDb watchdogDisdb = mock(WatchdogDistributionStatusDb.class);
-		WatchdogComponentDistributionStatusDb watchdogComp = mock(WatchdogComponentDistributionStatusDb.class);
-		
-		distribution.setWatchdogDistDb(watchdogDisdb);
-		distribution.setWatchdogCompDistDb(watchdogComp);
-		try {
-			WatchdogComponentDistributionStatus watchDogDisStatus1 = new WatchdogComponentDistributionStatus();
-			watchDogDisStatus1.setComponentDistributionStatus("SUCCESS");
-			watchDogDisStatus1.setComponentName("AAI");
-			
-			WatchdogComponentDistributionStatus watchDogDisStatus2 = new WatchdogComponentDistributionStatus();
-			watchDogDisStatus2.setComponentDistributionStatus("TESTING");
-			watchDogDisStatus2.setComponentName("APP");
-			
-			List<WatchdogComponentDistributionStatus> results = new ArrayList<>();
-			results.add(watchDogDisStatus1);
-			results.add(watchDogDisStatus2);
-			
-			when(watchdogDisdb.getWatchdogDistributionIdStatus(any(String.class))).thenReturn(null);
-			when(watchdogComp.getWatchdogComponentDistributionStatus(any(String.class))).thenReturn(results);
-			doNothing().when(watchdogDisdb).updateWatchdogDistributionIdStatus(any(String.class), any(String.class));
-
-			distribution.getOverallDistributionStatus("ff3514e3-5a33-55df-13ab-12abad84e7fe");
-			
-		} catch (Exception e) {
-			assertTrue(e.getMessage().contains("Invalid Component distribution status:"));
-		}
-	}
-	
-	@Test
-	@Ignore // 1802 merge
-	public void testGetOverallDistributionStatusIncomplete() {
-		WatchdogDistribution distribution = new WatchdogDistribution();
-		WatchdogDistributionStatusDb watchdogDisdb = mock(WatchdogDistributionStatusDb.class);
-		WatchdogComponentDistributionStatusDb watchdogComp = mock(WatchdogComponentDistributionStatusDb.class);
-		
-		distribution.setWatchdogDistDb(watchdogDisdb);
-		distribution.setWatchdogCompDistDb(watchdogComp);
-		try {
-			WatchdogComponentDistributionStatus watchDogDisStatus1 = new WatchdogComponentDistributionStatus();
-			watchDogDisStatus1.setComponentDistributionStatus("SUCCESS");
-			watchDogDisStatus1.setComponentName("AAI");
-			
-			List<WatchdogComponentDistributionStatus> results = new ArrayList<>();
-			results.add(watchDogDisStatus1);
-			
-			when(watchdogDisdb.getWatchdogDistributionIdStatus(any(String.class))).thenReturn(null);
-			when(watchdogComp.getWatchdogComponentDistributionStatus(any(String.class))).thenReturn(results);
-			
-			String result = distribution.getOverallDistributionStatus("ff3514e3-5a33-55df-13ab-12abad84e7fe");
-			
-			assertEquals("INCOMPLETE", result);
-		} catch (Exception e) {
-			fail("Unexpected result");
-		}
-	}
-	
-	@Test
-	public void testGetOverallDistributionStatusTimeout() {
-		WatchdogDistribution distribution = new WatchdogDistribution();
-		WatchdogDistributionStatusDb watchdogDisdb = mock(WatchdogDistributionStatusDb.class);
-		
-		distribution.setWatchdogDistDb(watchdogDisdb);
-		try {
-			when(watchdogDisdb.getWatchdogDistributionIdStatus(any(String.class))).thenReturn("timeout");
-
-			String result = distribution.getOverallDistributionStatus("ff3514e3-5a33-55df-13ab-12abad84e7fe");
-			
-			assertEquals("TIMEOUT", result);
-		} catch (Exception e) {
-			fail("Unexpected result");
-		}
-	}
-	
-	@Test
-	@Ignore // 1802 merge
-	public void testExecutePatchAAI() throws Exception {
-		WatchdogDistribution distribution = new WatchdogDistribution();
-		WatchdogServiceModVerIdLookupDb serviceLookupDb = mock(WatchdogServiceModVerIdLookupDb.class);
-		CatalogDatabase catalogDb = mock(CatalogDatabase.class);
-		AAIResourcesClient aaiClient = mock(AAIResourcesClient.class);
-		
-		Service service = new Service();
-		service.setModelInvariantUUID("modelInvariantUUID");
-		
-		when(serviceLookupDb.getWatchdogServiceModVerId(any(String.class))).thenReturn("ff3514e3-5a33-55df");
-		when(catalogDb.getServiceByModelUUID(any(String.class))).thenReturn(service);
-		doNothing().when(aaiClient).update(any(AAIResourceUri.class), any(Object.class));
-		
-		distribution.setAaiClient(aaiClient);
-		distribution.setCatalogDb(catalogDb);
-		distribution.setWatchdogSerlookupDb(serviceLookupDb);
-		distribution.executePatchAAI("ff3514e3-5a33-55df-13ab-12abad84e7fe", "model-id", "SUCCESS");
-		
-		verify(aaiClient, times(1)).update(any(AAIResourceUri.class), any(Object.class));
-	}
-	
-	@Test
-	@Ignore // 1802 merge
-	public void testExecutePatchAAIException() throws Exception {
-		WatchdogDistribution distribution = new WatchdogDistribution();
-		CatalogDatabase catalogDb = mock(CatalogDatabase.class);
-		WatchdogServiceModVerIdLookupDb serviceLookupDb = mock(WatchdogServiceModVerIdLookupDb.class);
-		
-		when(serviceLookupDb.getWatchdogServiceModVerId(any(String.class))).thenReturn("ff3514e3-5a33-55df");
-		when(catalogDb.getServiceByModelUUID(any(String.class))).thenReturn(null);
-		
-		try {
-			distribution.setCatalogDb(catalogDb);
-			distribution.setWatchdogSerlookupDb(serviceLookupDb);
-			distribution.executePatchAAI("ff3514e3-5a33-55df-13ab-12abad84e7fe", "model-id", "SUCCESS");
-		} catch(Exception e) {
-			assertTrue(e.getMessage().contains("No Service found with serviceModelVersionId:"));
-		}
-	}
-}
diff --git a/asdc-controller/src/test/resources/ASDC/.gitignore b/asdc-controller/src/test/resources/ASDC/.gitignore
new file mode 100644
index 0000000..e54786b
--- /dev/null
+++ b/asdc-controller/src/test/resources/ASDC/.gitignore
@@ -0,0 +1 @@
+/*.csar
diff --git a/asdc-controller/src/test/resources/application-test.yaml b/asdc-controller/src/test/resources/application-test.yaml
new file mode 100644
index 0000000..99ca630
--- /dev/null
+++ b/asdc-controller/src/test/resources/application-test.yaml
@@ -0,0 +1,88 @@
+# will be used as entry in DB to say SITE OFF/ON for healthcheck
+
+server-port: 8080
+ssl-enable: false
+
+
+
+spring:
+  datasource:
+    url: jdbc:mariadb://localhost:3307/catalogdb
+    username: root
+    password: password
+    driver-class-name: org.mariadb.jdbc.Driver    
+    initialize: true
+    initialization-mode: never
+  jpa:   
+    generate-ddl: false
+    show-sql: false
+    hibernate:
+      ddl-auto: none
+      naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
+      enable-lazy-load-no-trans: true
+    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
+  security:
+    usercredentials:
+    -  
+      username: test
+      password: '$2a$12$Zi3AuYcZoZO/gBQyUtST2.F5N6HqcTtaNci2Et.ufsQhski56srIu'
+      role: Asdc-Client        
+
+mariaDB4j:
+  dataDir: 
+  port: 3307
+  databaseName: catalogdb
+  databaseName2: requestdb
+        
+request:
+  datasource:
+    url: jdbc:mariadb://localhost:3307/requestdb
+    username: root
+    password: password
+    driver-class-name: org.mariadb.jdbc.Driver
+
+
+#Actuator
+management: 
+  endpoints:
+    enabled-by-default: false
+  endpoint:
+    info:
+      enabled: true
+
+mso:
+  logPath: logs
+  catalog:
+    db:
+      spring:
+        endpoint: "http://localhost:"
+  db:
+    auth: Basic YnBlbDptc28tZGItMTUwNyE=
+  site-name: siteName
+  asdc-connections:
+    asdc-controller1:
+      user: msopreist
+      consumerGroup: msoasdc-id-local
+      consumerId: msoasdc-id-local
+      environmentName: Pre-IST
+      asdcAddress: localhost:8443
+      password: 658D6E9E0C087547284339181615C358
+      pollingInterval: 30
+      pollingTimeout: 30
+      relevantArtifactTypes: HEAT,HEAT_ENV,HEAT_VOL
+      activateServerTLSAuth: false
+      keyStorePassword:  
+      keyStorePath:
+      watchDogTimeout: 1
+      isFilterInEmptyResources: true
+      messageBusAddress: localhost,localhost
+  asdc:
+    config:
+      key: 566B754875657232314F5548556D3665
+      components:
+        count: 3,
+        componentNames: SO,AAI,SDNC
+  scheduling:
+    enabled: false
+  aai:
+    endpoint: http://localhost:${wiremock.server.port}
diff --git a/asdc-controller/src/test/resources/data.sql b/asdc-controller/src/test/resources/data.sql
new file mode 100644
index 0000000..681ee3b
--- /dev/null
+++ b/asdc-controller/src/test/resources/data.sql
@@ -0,0 +1,64 @@
+use catalogdb;
+
+insert into heat_template(artifact_uuid, name, version, description, body, timeout_minutes, artifact_checksum, creation_timestamp) values ('ff874603-4222-11e7-9252-005056850d2e', 'module_mns_zrdm3frwl01exn_01_rgvm_1.yml', '1', 'created from csar', 'heat_template_version: 2013-05-23 description: heat template that creates TEST VNF parameters: TEST_server_name: type: string label: TEST server name description: TEST server name TEST_image_name: type: string label: image name description: TEST image name TEST_flavor_name: type: string label: TEST flavor name description: flavor name of TEST instance TEST_Role_net_name: type: string label: TEST network name description: TEST network name TEST_vnf_id: type: string label: TEST VNF Id description: TEST VNF Id resources:TEST: type: OS::Nova::Server properties: name: { get_param: TEST_server_name } image: { get_param: TEST_image_name } flavor: { get_param: TEST_flavor_name } networks: - port: { get_resource: TEST_port_0} metadata: vnf_id: {get_param: TEST_vnf_id} TEST_port_0: type: OS::Neutron::Port properties: network: { get_param: TEST_Role_net_name }', '60', 'MANUAL RECORD', '2017-01-21 23:26:56');
+
+insert into temp_network_heat_template_lookup(network_resource_model_name, heat_template_artifact_uuid, aic_version_min, aic_version_max) values
+('CONTRAIL30_GNDIRECT', 'ff874603-4222-11e7-9252-005056850d2e', '3', '3'),
+('MSO_Example', 'ff874603-4222-11e7-9252-005056850d2e', '3', '3'),
+('ExtVL', 'ff874603-4222-11e7-9252-005056850d2e', '3', '3'),
+('AIC30_CONTRAIL_BASIC', 'ff874603-4222-11e7-9252-005056850d2e', '3', '3'),
+('CONTRAIL30_BASIC', 'ff874603-4222-11e7-9252-005056850d2e', '3', '3');
+
+insert into network_resource(model_uuid, model_name, model_invariant_uuid, description, heat_template_artifact_uuid, neutron_network_type, model_version, tosca_node_type, aic_version_min, aic_version_max, orchestration_mode, creation_timestamp) values
+('10b36f65-f4e6-4be6-ae49-9596dc1c47fc', 'CONTRAIL30_GNDIRECT', 'ce4ff476-9641-4e60-b4d5-b4abbec1271d', 'Contrail 30 GNDIRECT NW', 'ff874603-4222-11e7-9252-005056850d2e', 'BASIC', '1.0', '', '3.0', '', 'HEAT', '2017-01-17 20:35:05');
+
+insert into network_resource_customization(model_customization_uuid, model_instance_name, network_technology, network_type, network_role, network_scope, creation_timestamp, network_resource_model_uuid) values
+('3bdbb104-476c-483e-9f8b-c095b3d308ac', 'CONTRAIL30_GNDIRECT 9', '', '', '', '', '2017-04-19 14:28:32', '10b36f65-f4e6-4be6-ae49-9596dc1c47fc');
+
+
+
+INSERT INTO temp_network_heat_template_lookup(NETWORK_RESOURCE_MODEL_NAME, HEAT_TEMPLATE_ARTIFACT_UUID, AIC_VERSION_MIN, AIC_VERSION_MAX) VALUES
+('TENANT_OAM_NETWORK', 'ff874603-4222-11e7-9252-005056850d2e', '3.0', NULL);
+INSERT INTO temp_network_heat_template_lookup(NETWORK_RESOURCE_MODEL_NAME, HEAT_TEMPLATE_ARTIFACT_UUID, AIC_VERSION_MIN, AIC_VERSION_MAX) VALUES
+('SRIOV_PROVIDER_NETWORK', 'ff874603-4222-11e7-9252-005056850d2e', '3.0', NULL);
+
+
+--------START Request DB INSERTS --------
+insert into requestdb.watchdog_distributionid_status(DISTRIBUTION_ID, DISTRIBUTION_ID_STATUS) values 
+('watchdogTestStatusSuccess', 'SUCCESS'),
+('watchdogTestStatusFailure', 'FAILURE'),
+('watchdogTestStatusTimeout', 'TIMEOUT'),
+('watchdogTestStatusIncomplete', 'INCOMPLETE'),
+('watchdogTestStatusException', 'EXCEPTION'),
+('watchdogTestStatusNull', 'NULL'),
+('testStatusSuccessTosca', 'SUCCESS'),
+('testStatusFailureTosca', 'FAILURE'),
+('testStatusTimeoutTosca', 'TIMEOUT'),
+('testStatusIncompleteTosca', 'INCOMPLETE'),
+('testStatusExceptionTosca', 'EXCEPTION'),
+('testStatusNullTosca', 'NULL');
+
+--WatchdogDistrubutionTest
+insert into requestdb.watchdog_per_component_distribution_status(DISTRIBUTION_ID, COMPONENT_NAME, COMPONENT_DISTRIBUTION_STATUS) values
+('watchdogTestStatusSuccess', 'SO', 'COMPONENT_DONE_OK'),
+('watchdogTestStatusSuccess', 'AAI', 'COMPONENT_DONE_OK'),
+('watchdogTestStatusSuccess', 'SDNC', 'COMPONENT_DONE_OK'),
+('watchdogTestStatusFailure', 'SO', 'COMPONENT_DONE_ERROR'),
+('watchdogTestStatusFailure', 'AAI', 'COMPONENT_DONE_ERROR'),
+('watchdogTestStatusFailure', 'SDNC', 'COMPONENT_DONE_ERROR'),
+('watchdogTestStatusException', 'SO', 'COMPONENT_MALFORMED'),
+('watchdogTestStatusException', 'AAI', 'COMPONENT_MALFORMED'),
+('watchdogTestStatusException', 'SDNC', 'COMPONENT_MALFORMED'),
+('testStatusSuccessTosca', 'SO', 'COMPONENT_DONE_OK'),
+('testStatusSuccessTosca', 'AAI', 'COMPONENT_DONE_OK'),
+('testStatusSuccessTosca', 'SDNC', 'COMPONENT_DONE_OK'),
+('testStatusFailureTosca', 'SO', 'COMPONENT_DONE_ERROR'),
+('testStatusFailureTosca', 'AAI', 'COMPONENT_DONE_ERROR'),
+('testStatusFailureTosca', 'SDNC', 'COMPONENT_DONE_ERROR'),
+('testStatusExceptionTosca', 'SO', 'COMPONENT_MALFORMED'),
+('testStatusExceptionTosca', 'AAI', 'COMPONENT_MALFORMED'),
+('testStatusExceptionTosca', 'SDNC', 'COMPONENT_MALFORMED');
+
+insert into requestdb.watchdog_service_mod_ver_id_lookup(DISTRIBUTION_ID, SERVICE_MODEL_VERSION_ID) values
+('watchdogTestStatusSuccess', '5df8b6de-2083-11e7-93ae-92361f002671'),
+('watchdogTestStatusNull', '00000000-0000-0000-0000-000000000000');
diff --git a/asdc-controller/src/test/resources/logback-test.xml b/asdc-controller/src/test/resources/logback-test.xml
index a23395f..d74de50 100644
--- a/asdc-controller/src/test/resources/logback-test.xml
+++ b/asdc-controller/src/test/resources/logback-test.xml
@@ -1,47 +1,39 @@
-<!--
-  ============LICENSE_START=======================================================
-  ECOMP MSO
-  ================================================================================
-  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=========================================================
-  -->
-
-<configuration >
-
-  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-    <encoder>
-      <pattern>%d{MM/dd-HH:mm:ss.SSS}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{ServiceName}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}||%X{ServerIPAddress}|%X{ServerFQDN}|%X{RemoteHost}||%X{Timer}|%msg%n</pattern>
-    </encoder>
-  </appender>
+<configuration>
 
 
-  <logger name="com.att.eelf.audit" level="info" additivity="false">
-    <appender-ref ref="STDOUT" />
-  </logger>
-  
-  <logger name="com.att.eelf.metrics" level="info" additivity="false">
+
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%d{HH:mm:ss.SSS} [%thread] |%X{RequestId}| %-5level
+                %logger{1024} - %msg%n
+            </pattern>
+        </encoder>
+    </appender>
+
+    <logger name="com.att.ecomp.audit" level="info" additivity="false">
         <appender-ref ref="STDOUT" />
-  </logger>
+    </logger>
 
-  <logger name="com.att.eelf.error" level="trace" additivity="false">
-    <appender-ref ref="STDOUT" />
-  </logger> 
+    <logger name="com.att.eelf.metrics" level="info" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
 
-  <root level="info">
-    <appender-ref ref="STDOUT" />
-  </root>
- 
+    <logger name="com.att.eelf.error" level="WARN" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
 
-</configuration>
+    <logger name="org.onap" level="${so.log.level:-DEBUG}" additivity="false">
+		<appender-ref ref="STDOUT" />
+	</logger>
+    
+
+    <logger name="ch.vorburger" level="WARN" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <root level="WARN">
+        <appender-ref ref="STDOUT" />
+    </root>
+
+
+</configuration>
\ No newline at end of file
diff --git a/asdc-controller/src/test/resources/mso-with-NULL.json b/asdc-controller/src/test/resources/mso-with-NULL.json
index df215e6..aeb740f 100644
--- a/asdc-controller/src/test/resources/mso-with-NULL.json
+++ b/asdc-controller/src/test/resources/mso-with-NULL.json
@@ -9,9 +9,9 @@
         "password": "1c551b8b5ab91fcd5a0907b11c304199",
        "watchDogTimeout": "300",
        "messageBusAddress": [
-         "uebsb91sfdc.it.att.com",
-         "uebsb92sfdc.it.att.com",
-         "uebsb93sfdc.it.att.com"
+         "localhost",
+         "localhost",
+         "localhost"
        ],
         "pollingInterval":10,
         "pollingTimeout":30
diff --git a/asdc-controller/src/test/resources/mso.asdc.clients.properties b/asdc-controller/src/test/resources/mso.asdc.clients.properties
index e434dca..05c4c0d 100644
--- a/asdc-controller/src/test/resources/mso.asdc.clients.properties
+++ b/asdc-controller/src/test/resources/mso.asdc.clients.properties
@@ -1,3 +1,3 @@
 # This is a chef generated properties file!  Manual updates will be overridden next chef-client run, ensure desired changes are in mso-config chef cookbook or chef env file.
 # tenant isolation 
-aai.endpoint=http://localhost:28090
+aai.endpoint=http://localhost:8089
diff --git a/asdc-controller/src/test/resources/mso.asdc.json b/asdc-controller/src/test/resources/mso.asdc.json
index cbc18e8..2112f8e 100644
--- a/asdc-controller/src/test/resources/mso.asdc.json
+++ b/asdc-controller/src/test/resources/mso.asdc.json
@@ -1,5 +1,5 @@
- 
-{
-  "components.count": 2
-} 
-
+ 
+{
+  "components.count": 2
+} 
+
diff --git a/asdc-controller/src/test/resources/mso.json b/asdc-controller/src/test/resources/mso.json
index 6b6b98c..6d3f7a3 100644
--- a/asdc-controller/src/test/resources/mso.json
+++ b/asdc-controller/src/test/resources/mso.json
@@ -9,9 +9,9 @@
         "password": "1c551b8b5ab91fcd5a0907b11c304199",
        "watchDogTimeout": "300",
        "messageBusAddress": [
-         "uebsb91sfdc.it.att.com",
-         "uebsb92sfdc.it.att.com",
-         "uebsb93sfdc.it.att.com"
+         "localhost",
+         "localhost",
+         "localhost"
        ],
         "pollingInterval":10,
         "pollingTimeout":30
diff --git a/asdc-controller/src/test/resources/mso4-with-TLS.json b/asdc-controller/src/test/resources/mso4-with-TLS.json
index 825ad5b..e1b32b7 100644
--- a/asdc-controller/src/test/resources/mso4-with-TLS.json
+++ b/asdc-controller/src/test/resources/mso4-with-TLS.json
@@ -12,9 +12,9 @@
         "activateServerTLSAuth": true,
        "watchDogTimeout": "300",
        "messageBusAddress": [
-         "uebsb91sfdc.it.att.com",
-         "uebsb92sfdc.it.att.com",
-         "uebsb93sfdc.it.att.com"
+         "localhost",
+         "localhost",
+         "localhost"
        ],
         "keyStorePassword":"1c551b8b5ab91fcd5a0907b11c304199",    
         "keyStorePath": "/test"
diff --git a/asdc-controller/src/test/resources/resource-examples/TempNetworkHeat/notification.json b/asdc-controller/src/test/resources/resource-examples/TempNetworkHeat/notification.json
new file mode 100644
index 0000000..68bdd25
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/TempNetworkHeat/notification.json
@@ -0,0 +1,21 @@
+{
+  "distributionID": "e0d3c4b3-bae6-42cd-808c-385bb2ccf6de", 
+  "resources": [], 
+  "serviceArtifacts": [
+    {
+      "artifactChecksum": "MjI4ZmU3MGM1ZWM5MGQ4YjJkZDczMGUzZDMxN2M4NjY=", 
+      "artifactDescription": "TOSCA definition package of the asset", 
+      "artifactName": "service-AdigVpeTenantOamNetworkIst-csar.csar", 
+      "artifactTimeout": "0", 
+      "artifactType": "TOSCA_CSAR", 
+      "artifactURL": "service-AdigVpeTenantOamNetworkIst-csar.csar", 
+      "artifactUUID": "a218128c-4751-49d0-a74b-f502860033e5", 
+      "artifactVersion": "2"
+    }
+  ], 
+  "serviceDescription": "ADIG vPE Tenant OAM Network_IST", 
+  "serviceInvariantUUID": "f905cea1-3a41-4233-b2d2-be453751b871", 
+  "serviceName": "ADIG vPE Tenant OAM Network_IST", 
+  "serviceUUID": "0bfd24c7-de9d-4297-8cb5-6f9d4a6c20d8", 
+  "serviceVersion": "2.0"
+}
\ No newline at end of file
diff --git a/asdc-controller/src/test/resources/resource-examples/TempNetworkHeat/service-AdigVpeTenantOamNetworkIst-csar.csar b/asdc-controller/src/test/resources/resource-examples/TempNetworkHeat/service-AdigVpeTenantOamNetworkIst-csar.csar
new file mode 100644
index 0000000..2828043
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/TempNetworkHeat/service-AdigVpeTenantOamNetworkIst-csar.csar
Binary files differ
diff --git a/asdc-controller/src/test/resources/resource-examples/allottedresource/notif-portm.json b/asdc-controller/src/test/resources/resource-examples/allottedresource/notif-portm.json
new file mode 100644
index 0000000..fd8ac7b
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/allottedresource/notif-portm.json
@@ -0,0 +1,36 @@
+{
+    "serviceName": "service1104",
+    "serviceInvariantUUID": "ebcef23d-2ca3-474f-9381-3a15709538f5",
+    "serviceUUID": "9825d984-dfb0-4d2a-b5bd-3abcf477c4dc",
+    "serviceVersion": "1.0",
+    "serviceArtifacts": 
+    [{
+		"artifactName": "service-Service1104-csar.csar",
+		"artifactType": "TOSCA_CSAR",
+		"artifactURL": "service-Service1104-csar.csar",
+		"artifactChecksum": "ZDc1MTcxMzk4ODk4N2U5MzMxOTgwMzYzZTI0MTg5Y2U\u003d",
+		"artifactDescription": "TOSCA representation of the asset",
+		"artifactTimeout": 0,
+		"artifactUUID": "123456-35a8-467f-b440-d0f6226b3516",
+		"artifactVersion": "5.0"
+    }],
+    "resources": 
+    [	
+        {
+            "resourceInstanceName": "testALTS 0",
+            "resourceInvariantUUID": "51c7fb99-642a-4c02-8d8d-e206fc170b6d",
+            "resourceCustomizationUUID": "364a5635-f63b-45f3-9c3d-14993d996e35", 
+            "resourceName": "resourceName-1",
+            "resourceType": "VF",
+            "resourceUUID": "a81db5a3-7c23-4376-8c42-ec610aaea135",
+            "resourceVersion": "2.0",
+            "category": "Allotted Resource",
+            "subcategory": "Common Network Resources",
+            "artifacts": 
+            []
+        }
+        
+    ],
+    "serviceDescription": "sdfsf",
+    "distributionID": "35120a87-1f82-4276-9735-f6de5a244d65"
+}
\ No newline at end of file
diff --git a/asdc-controller/src/test/resources/resource-examples/allottedresource/service-Service1104-csar.csar b/asdc-controller/src/test/resources/resource-examples/allottedresource/service-Service1104-csar.csar
new file mode 100644
index 0000000..c8a4476
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/allottedresource/service-Service1104-csar.csar
Binary files differ
diff --git a/asdc-controller/src/test/resources/resource-examples/moduleTest/base_TEST.env b/asdc-controller/src/test/resources/resource-examples/moduleTest/base_TEST.env
new file mode 100644
index 0000000..c72f906
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/moduleTest/base_TEST.env
@@ -0,0 +1,6 @@
+parameters:
+  TEST_Role_net_name: 
+  TEST_flavor_name: 
+  TEST_image_name: 
+  TEST_server_name: 
+  TEST_vnf_id: 
diff --git a/asdc-controller/src/test/resources/resource-examples/moduleTest/base_TEST.yaml b/asdc-controller/src/test/resources/resource-examples/moduleTest/base_TEST.yaml
new file mode 100644
index 0000000..84f757c
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/moduleTest/base_TEST.yaml
@@ -0,0 +1,44 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates TEST VNF
+
+parameters:
+  TEST_server_name:
+    type: string
+    label: TEST server name
+    description: TEST server name
+  TEST_image_name:
+    type: string
+    label: image name
+    description: TEST image name
+  TEST_flavor_name:
+    type: string
+    label: TEST flavor name
+    description: flavor name of TEST instance
+
+  TEST_Role_net_name:
+    type: string
+    label: TEST network name
+    description: TEST network name
+  TEST_vnf_id:
+    type: string
+    label: TEST VNF Id
+    description: TEST VNF Id
+
+resources:
+
+  TEST: 
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: TEST_server_name }
+      image: { get_param: TEST_image_name }
+      flavor: { get_param: TEST_flavor_name }
+      networks:
+        - port: { get_resource: TEST_port_0}
+      metadata:
+        vnf_id: {get_param: TEST_vnf_id}
+
+  TEST_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: TEST_Role_net_name }
diff --git a/asdc-controller/src/test/resources/resource-examples/moduleTest/notif-structure.json b/asdc-controller/src/test/resources/resource-examples/moduleTest/notif-structure.json
new file mode 100644
index 0000000..b2f11c4
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/moduleTest/notif-structure.json
@@ -0,0 +1,67 @@
+{
+    "serviceName": "testALTS1",
+    "serviceInvariantUUID": "155006dc-f0b4-4d6d-b217-72c75e819cdb",
+    "serviceUUID": "3e56620a-1566-4268-8629-58aae07df9e5",
+    "serviceVersion": "2.0",
+    "serviceArtifacts": 
+    [{
+		"artifactName": "service-Testalts1-csar.csar",
+		"artifactType": "TOSCA_CSAR",
+		"artifactURL": "service-Testalts1-csar.csar",
+		"artifactChecksum": "NTdjNDdiMTU5YjVkNzQxYjNkZWQ2N2M5YTdiYjQ3MGI=",
+		"artifactDescription": "TOSCA representation of the asset",
+		"artifactTimeout": 0,
+		"artifactUUID": "9e2c10dc-a3a6-4799-b0a9-a128fbf7a9b1",
+		"artifactVersion": "2.0"
+    }],
+    "resources": 
+    [	
+        {
+            "resourceInstanceName": "testALTS 0",
+            "resourceInvariantUUID": "51c7fb99-642a-4c02-8d8d-e206fc170b6d",
+            "resourceCustomizationUUID": "364a5635-f63b-45f3-9c3d-14993d996e35", 
+            "resourceName": "resourceName-1",
+            "resourceType": "VF",
+            "resourceUUID": "a81db5a3-7c23-4376-8c42-ec610aaea135",
+            "resourceVersion": "2.0",
+            "category": "Network L4+",
+            "subcategory": "Common Network Resources",
+            "artifacts": 
+            [
+                {
+                    "artifactChecksum": "ZGY5NzliMTI4NDA4NGYyOWIyYTA4N2NmYzZiYWU5MmM=",
+                    "artifactDescription": "Auto-generated VF Modules information artifact",
+                    "artifactName": "testalts0_modules.json",                    
+                    "artifactType": "VF_MODULES_METADATA",
+                    "artifactURL": "testalts0_modules.json",
+                    "artifactUUID": "68be0190-fb74-408e-81db-d90a5e3aecb5",
+                    "artifactTimeout": 0,
+                    "artifactVersion": "2.0"
+                },
+                {
+                    "artifactChecksum": "MDJlOTUwMDY0YzU3YjRjZTM0ZmZmYTM5NTE5ZThkNDI=",
+                    "artifactDescription": "created from csar",
+                    "artifactName": "base_TEST.yaml",
+                    "artifactTimeout": 120,
+                    "artifactType": "HEAT",
+                    "artifactURL": "base_TEST.yaml",
+                    "artifactUUID": "d7c1d4ca-3fdc-4880-86dc-90ca724fbcd7",
+                    "artifactVersion": "2.0",
+                    "generatedArtifact": "57f6520b-fa65-4544-90de-95c8190c2e6c"                    
+                },                
+                {
+                    "artifactChecksum": "YWQ2MmE0Y2NjNGE4YmJlOTk0YmZhYmIxYTc1YWZkY2M=",
+                    "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                    "artifactName": "base_TEST.env",
+                    "artifactTimeout": 0,
+                    "artifactType": "HEAT_ENV",
+                    "artifactURL": "base_TEST.env",
+                    "artifactUUID": "57f6520b-fa65-4544-90de-95c8190c2e6c",
+                    "artifactVersion": "1.0"                   
+                }
+            ]
+        }
+    ],
+    "serviceDescription": "ALTS service",
+    "distributionID": "03f016c8-7d8e-412b-901d-e96c7c66459b"
+}
\ No newline at end of file
diff --git a/asdc-controller/src/test/resources/resource-examples/moduleTest/service-Testalts1-csar.csar b/asdc-controller/src/test/resources/resource-examples/moduleTest/service-Testalts1-csar.csar
new file mode 100644
index 0000000..3d29ab8
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/moduleTest/service-Testalts1-csar.csar
Binary files differ
diff --git a/asdc-controller/src/test/resources/resource-examples/moduleTest/testalts0_modules.json b/asdc-controller/src/test/resources/resource-examples/moduleTest/testalts0_modules.json
new file mode 100644
index 0000000..4dfb97d
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/moduleTest/testalts0_modules.json
@@ -0,0 +1,25 @@
+[
+	{
+		"vfModuleModelName": "Testalts..base_TEST..module-0",
+		"vfModuleModelInvariantUUID": "2cec5cc9-9b83-46ff-948e-1c0bd726d1ce",
+		"vfModuleModelVersion": "2",
+		"vfModuleModelUUID": "a3253fe9-2877-489d-9a41-dd3f38d4b4c1",
+		"vfModuleModelCustomizationUUID": "2d1c5862-7555-48d9-8aa9-1a34b5b70f6a",
+		"isBase": true,
+		"artifacts": [
+			"d7c1d4ca-3fdc-4880-86dc-90ca724fbcd7",
+			"57f6520b-fa65-4544-90de-95c8190c2e6c"
+		],
+		"properties": {
+			"min_vf_module_instances": "1",
+			"vf_module_label": "base_TEST",
+			"max_vf_module_instances": "1",
+			"vfc_list": "",
+			"vf_module_description": "",
+			"vf_module_type": "Base",
+			"availability_zone_count": "",
+			"volume_group": "false",
+			"initial_count": "1"
+		}
+	}
+]
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/Notification_MultipleModules.txt b/asdc-controller/src/test/resources/resource-examples/multipleModules/Notification_MultipleModules.txt
new file mode 100644
index 0000000..5b6d9e4
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/Notification_MultipleModules.txt
@@ -0,0 +1,302 @@
+DistributionID:a2872f55-8628-4486-8548-7b132c9a47db
+ServiceName:Vf zrdm5bpxmc02092017-Service
+ServiceVersion:1.0
+ServiceUUID:bad955c3-29b2-4a27-932e-28e942cc6480
+ServiceInvariantUUID:b16a9398-ffa3-4041-b78c-2956b8ad9c7b
+ServiceDescription:Demo
+
+
+
+Service Artifacts List:
+{
+Service Artifacts Info:
+ArtifactName:service-VfZrdm5bpxmc02092017Service-csar.csar
+ArtifactVersion:1
+ArtifactType:TOSCA_CSAR
+ArtifactDescription:TOSCA definition package of the asset
+ArtifactTimeout:0
+ArtifactURL:service-VfZrdm5bpxmc02092017Service-csar.csar
+ArtifactUUID:396cfd49-0f4b-4fec-9f33-0fd7e90d5a22
+ArtifactChecksum:MWQ3Y2FmMWExNDQyYWI2N2YwNjEwZGUzN2IzMzI3NjE=
+GeneratedArtifact:{NULL
+}
+RelatedArtifacts:{
+}
+
+
+
+}
+
+Resource Instances List:
+{
+Resource Instance Info:
+ResourceInstanceName:Vf zrdm5bpxmc02092017-VF 0
+ResourceCustomizationUUID:96c23a4a-6887-4b2c-9cce-1e4ea35eaade
+ResourceInvariantUUID:23122c9b-dd7f-483f-bf0a-e069303db2f7
+ResourceName:Vf zrdm5bpxmc02092017-VF
+ResourceType:VF
+ResourceUUID:14ba5d1e-3862-407c-a236-1cbaebccce77
+ResourceVersion:1.0
+Category:Generic
+SubCategory:Network Elements
+Resource Artifacts List:
+{
+Service Artifacts Info:
+ArtifactName:pxmc_mmn_volume.env
+ArtifactVersion:2
+ArtifactType:HEAT_ENV
+ArtifactDescription:Auto-generated HEAT Environment deployment artifact
+ArtifactTimeout:0
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/pxmc_mmn_volume.env
+ArtifactUUID:c1ae6284-48d9-4437-a195-b2cf2ba23070
+ArtifactChecksum:NmEyZjc1Y2UwZDMwYjFhNGRlMTMzN2JhNzdiMThjMGU=
+GeneratedArtifact:{NULL
+}
+RelatedArtifacts:{
+}
+,
+Service Artifacts Info:
+ArtifactName:pxmc_base.env
+ArtifactVersion:2
+ArtifactType:HEAT_ENV
+ArtifactDescription:Auto-generated HEAT Environment deployment artifact
+ArtifactTimeout:0
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/pxmc_base.env
+ArtifactUUID:6dd99c31-c52e-4c45-b99b-d223c877a296
+ArtifactChecksum:OGM2MWIzZTA2OTc5YjQwNTM1NGVhODA0YTFkNzM4ZTg=
+GeneratedArtifact:{NULL
+}
+RelatedArtifacts:{
+}
+
+
+,
+Service Artifacts Info:
+ArtifactName:vfzrdm5bpxmc02092017vf0_modules.json
+ArtifactVersion:1
+ArtifactType:VF_MODULES_METADATA
+ArtifactDescription:Auto-generated VF Modules information artifact
+ArtifactTimeout:0
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/vfzrdm5bpxmc02092017vf0_modules.json
+ArtifactUUID:e3b82cd6-485e-4d56-8d2c-17ccf6a59533
+ArtifactChecksum:MjY0NzcxMjJkZGI4YzQ1MDU2NjhkNWYyM2IwNmYzYmU=
+GeneratedArtifact:{NULL
+}
+RelatedArtifacts:{
+}
+
+
+,
+Service Artifacts Info:
+ArtifactName:pxmc_vmt.yaml
+ArtifactVersion:1
+ArtifactType:HEAT
+ArtifactDescription:created from csar
+ArtifactTimeout:120
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/pxmc_vmt.yaml
+ArtifactUUID:ad12ab80-5419-4346-a5d7-dac2fc15575f
+ArtifactChecksum:ODE0YTRiYzc2YzkxOTliZjJhNjc0M2RhMWU4M2VlZmE=
+GeneratedArtifact:{Service Artifacts Info:
+ArtifactName:pxmc_vmt.env
+ArtifactVersion:2
+ArtifactType:HEAT_ENV
+ArtifactDescription:Auto-generated HEAT Environment deployment artifact
+ArtifactTimeout:0
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/pxmc_vmt.env
+ArtifactUUID:bc1640f1-69f0-4760-8fc3-3318ec2ff129
+ArtifactChecksum:MjdkYzY5ZGU0ZTlkZDlhNzI2ZGVhMjk1ODVhZTg1NTY=
+GeneratedArtifact:{NULL
+}
+RelatedArtifacts:{
+}
+}
+RelatedArtifacts:{
+Service Artifacts Info:
+ArtifactName:user_data_zrdm5bpxmc02vmt001.txt
+ArtifactVersion:1
+ArtifactType:HEAT_ARTIFACT
+ArtifactDescription:created from csar
+ArtifactTimeout:0
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/user_data_zrdm5bpxmc02vmt001.txt
+ArtifactUUID:53acdabe-689f-45e5-8578-f1514d3529da
+ArtifactChecksum:MzJmZjgyZWYwOTBjMTg5M2ExNWZhMmMwNzc1NWY1YjQ=
+GeneratedArtifact:{NULL
+}
+RelatedArtifacts:{
+}
+
+
+
+}
+
+
+,
+Service Artifacts Info:
+ArtifactName:pxmc_mmn.yaml
+ArtifactVersion:1
+ArtifactType:HEAT
+ArtifactDescription:created from csar
+ArtifactTimeout:120
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/pxmc_mmn.yaml
+ArtifactUUID:b8bca13b-811f-44ab-9d27-45b842c664d8
+ArtifactChecksum:YmNiYTU5YTM4ODVhYTlhODc5NGMwNWZkZjI5MTRmNTE=
+GeneratedArtifact:{Service Artifacts Info:
+ArtifactName:pxmc_mmn.env
+ArtifactVersion:2
+ArtifactType:HEAT_ENV
+ArtifactDescription:Auto-generated HEAT Environment deployment artifact
+ArtifactTimeout:0
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/pxmc_mmn.env
+ArtifactUUID:e88ce0b9-1496-4d03-ab1d-6d8d79bfc737
+ArtifactChecksum:ZGI1NzI2Y2FmYjFhOTM2ZDYwNzg1YWRhZjBmMTk2OTQ=
+GeneratedArtifact:{NULL
+}
+RelatedArtifacts:{
+}
+}
+RelatedArtifacts:{
+Service Artifacts Info:
+ArtifactName:user_data_zrdm5bpxmc02mmn001.txt
+ArtifactVersion:1
+ArtifactType:HEAT_ARTIFACT
+ArtifactDescription:created from csar
+ArtifactTimeout:0
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/user_data_zrdm5bpxmc02mmn001.txt
+ArtifactUUID:5bc62c72-5f7a-40bc-a167-1a4fed9afdef
+ArtifactChecksum:OTMxMjk5Mzc1YmIxMzRlYmRlZWJhMjg0MWQ4YTI1NWU=
+GeneratedArtifact:{NULL
+}
+RelatedArtifacts:{
+}
+
+
+
+}
+
+
+,
+Service Artifacts Info:
+ArtifactName:pxmc_mmn.env
+ArtifactVersion:2
+ArtifactType:HEAT_ENV
+ArtifactDescription:Auto-generated HEAT Environment deployment artifact
+ArtifactTimeout:0
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/pxmc_mmn.env
+ArtifactUUID:e88ce0b9-1496-4d03-ab1d-6d8d79bfc737
+ArtifactChecksum:ZGI1NzI2Y2FmYjFhOTM2ZDYwNzg1YWRhZjBmMTk2OTQ=
+GeneratedArtifact:{NULL
+}
+RelatedArtifacts:{
+}
+
+
+,
+Service Artifacts Info:
+ArtifactName:pxmc_vmt.env
+ArtifactVersion:2
+ArtifactType:HEAT_ENV
+ArtifactDescription:Auto-generated HEAT Environment deployment artifact
+ArtifactTimeout:0
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/pxmc_vmt.env
+ArtifactUUID:bc1640f1-69f0-4760-8fc3-3318ec2ff129
+ArtifactChecksum:MjdkYzY5ZGU0ZTlkZDlhNzI2ZGVhMjk1ODVhZTg1NTY=
+GeneratedArtifact:{NULL
+}
+RelatedArtifacts:{
+}
+,
+Service Artifacts Info:
+ArtifactName:user_data_zrdm5bpxmc02mmn001.txt
+ArtifactVersion:1
+ArtifactType:HEAT_ARTIFACT
+ArtifactDescription:created from csar
+ArtifactTimeout:0
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/user_data_zrdm5bpxmc02mmn001.txt
+ArtifactUUID:5bc62c72-5f7a-40bc-a167-1a4fed9afdef
+ArtifactChecksum:OTMxMjk5Mzc1YmIxMzRlYmRlZWJhMjg0MWQ4YTI1NWU=
+GeneratedArtifact:{NULL
+}
+RelatedArtifacts:{
+}
+
+
+,
+Service Artifacts Info:
+ArtifactName:pxmc_base.yaml
+ArtifactVersion:1
+ArtifactType:HEAT
+ArtifactDescription:created from csar
+ArtifactTimeout:120
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/pxmc_base.yaml
+ArtifactUUID:7e7f7356-11bd-4f2f-bbbc-5c10954e3189
+ArtifactChecksum:YThkNGFhZjAwNmM4NzMzODc0YzNhYTUxOTljNGQwNmM=
+GeneratedArtifact:{Service Artifacts Info:
+ArtifactName:pxmc_base.env
+ArtifactVersion:2
+ArtifactType:HEAT_ENV
+ArtifactDescription:Auto-generated HEAT Environment deployment artifact
+ArtifactTimeout:0
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/pxmc_base.env
+ArtifactUUID:6dd99c31-c52e-4c45-b99b-d223c877a296
+ArtifactChecksum:OGM2MWIzZTA2OTc5YjQwNTM1NGVhODA0YTFkNzM4ZTg=
+GeneratedArtifact:{NULL
+}
+RelatedArtifacts:{
+}
+
+
+}
+RelatedArtifacts:{
+}
+,
+Service Artifacts Info:
+ArtifactName:user_data_zrdm5bpxmc02vmt001.txt
+ArtifactVersion:1
+ArtifactType:HEAT_ARTIFACT
+ArtifactDescription:created from csar
+ArtifactTimeout:0
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/user_data_zrdm5bpxmc02vmt001.txt
+ArtifactUUID:53acdabe-689f-45e5-8578-f1514d3529da
+ArtifactChecksum:MzJmZjgyZWYwOTBjMTg5M2ExNWZhMmMwNzc1NWY1YjQ=
+GeneratedArtifact:{NULL
+}
+RelatedArtifacts:{
+}
+
+
+,
+Service Artifacts Info:
+ArtifactName:pxmc_mmn_volume.yaml
+ArtifactVersion:2
+ArtifactType:HEAT_VOL
+ArtifactDescription:created from csar
+ArtifactTimeout:120
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/pxmc_mmn_volume.yaml
+ArtifactUUID:2f372a02-df1b-46ca-b81e-822e3f406965
+ArtifactChecksum:MzA5MGY5ODQ0NDY5MDhiMDM3YjFlNGIwNzJkNjFhOTI=
+GeneratedArtifact:{Service Artifacts Info:
+ArtifactName:pxmc_mmn_volume.env
+ArtifactVersion:2
+ArtifactType:HEAT_ENV
+ArtifactDescription:Auto-generated HEAT Environment deployment artifact
+ArtifactTimeout:0
+ArtifactURL:/sdc/v1/catalog/services/VfZrdm5bpxmc02092017Service/1.0/resourceInstances/vfzrdm5bpxmc02092017vf0/artifacts/pxmc_mmn_volume.env
+ArtifactUUID:c1ae6284-48d9-4437-a195-b2cf2ba23070
+ArtifactChecksum:NmEyZjc1Y2UwZDMwYjFhNGRlMTMzN2JhNzdiMThjMGU=
+GeneratedArtifact:{NULL
+}
+RelatedArtifacts:{
+}
+
+
+}
+RelatedArtifacts:{
+}
+
+
+
+}
+
+
+
+}
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/ServiceResponse.json b/asdc-controller/src/test/resources/resource-examples/multipleModules/ServiceResponse.json
new file mode 100644
index 0000000..37b7987
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/ServiceResponse.json
@@ -0,0 +1,458 @@
+{
+	"modelName": "Vf zrdm5bpxmc02092017-Service",
+	"description": "Demo",
+	"modelUUID": "bad955c3-29b2-4a27-932e-28e942cc6480",
+	"modelInvariantUUID": "b16a9398-ffa3-4041-b78c-2956b8ad9c7b",
+	"serviceType": "",
+	"serviceRole": "",
+	"environmentContext": "General_Revenue-Bearing",
+	"networkCustomizations": [],
+	"vnfCustomizations": [
+		{
+			"modelCustomizationUuid": "96c23a4a-6887-4b2c-9cce-1e4ea35eaade",
+			"modelInstanceName": "Vf zrdm5bpxmc02092017-VF 0",
+			"multiStageDesign": "false",
+			"vnfResources": {
+				"modelUuid": "d326f424-2312-4dd6-b7fe-364fadbd1ef5",
+				"modelInvariantUuid": "23122c9b-dd7f-483f-bf0a-e069303db2f7",
+				"modelName": "Vf zrdm5bpxmc02092017-VF",
+				"toscaNodeType": "org.openecomp.resource.vf.VfZrdm5bpxmc02092017Vf",
+				"description": "Demo",
+				"orchestrationMode": "HEAT",
+				"modelVersion": "1.0",
+				"modelInvariantId": "23122c9b-dd7f-483f-bf0a-e069303db2f7"
+			},
+			"vfModuleCustomizations": [
+				{
+					"modelCustomizationUuid": "074c64d0-7e13-4bcc-8bdb-ea922331102d",
+					"label": "pxmc_base",
+					"minInstances": 1,
+					"maxInstances": 1,
+					"initialCount": 1,
+					"heatEnvironment": {
+						"artifactUuid": "6dd99c31-c52e-4c45-b99b-d223c877a296",
+						"name": "pxmc_base.env",
+						"description": "Auto-generated HEAT Environment deployment artifact",
+						"environment": "parameters:\n  vnf_name: \n",
+						"artifactChecksum": "OGM2MWIzZTA2OTc5YjQwNTM1NGVhODA0YTFkNzM4ZTg=",
+						"version": "2"
+					},
+					"vfModule": {
+						"modelUUID": "eb5de6fb-9ecf-4009-b922-fae3a9ae7d46",
+						"modelInvariantUUID": "f7a867f2-596b-4f4a-a128-421e825a6190",
+						"modelName": "VfZrdm5bpxmc02092017Vf..pxmc_base..module-0",
+						"modelVersion": "1",
+						"isBase": 1,
+						"moduleHeatTemplate": {
+							"artifactUuid": "7e7f7356-11bd-4f2f-bbbc-5c10954e3189",
+							"templateName": "pxmc_base.yaml",
+							"templateBody": "heat_template_version: 2015-04-30\n\nparameters:\n\n## GLOBAL//Basic Parameters\n  vnf_name:\n    type: string\n    description: Unique name for this VF instance\n#   For manual spinups, value must be in the ENV file. Must be removed from ENV before uploading to ASDC\n\nresources:\n\n## MSP RSG//Resource:SecurityGroup\n  sec_grp_msp_0:\n    type: OS::Neutron::SecurityGroup\n    properties:\n      description: Security Group for PXMC\n      name:\n        str_replace:\n          template: VF_NAME_sec_grp_msp\n          params:\n            VF_NAME: { get_param: vnf_name }\n      rules:\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"tcp\", \"ethertype\": \"IPv4\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"udp\", \"ethertype\": \"IPv4\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"132\", \"ethertype\": \"IPv4\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"icmp\", \"ethertype\": \"IPv4\"}\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"tcp\", \"ethertype\": \"IPv6\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"udp\", \"ethertype\": \"IPv6\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"132\", \"ethertype\": \"IPv6\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"58\", \"ethertype\": \"IPv6\"}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"tcp\", \"ethertype\": \"IPv4\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"udp\", \"ethertype\": \"IPv4\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"132\", \"ethertype\": \"IPv4\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"icmp\", \"ethertype\": \"IPv4\"}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"tcp\", \"ethertype\": \"IPv6\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"udp\", \"ethertype\": \"IPv6\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"132\", \"ethertype\": \"IPv6\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"58\", \"ethertype\": \"IPv6\"}\n\noutputs:\n\n  sec_grp_msp_id:\n    description:  uuid of the security group\n    value: {get_resource: sec_grp_msp_0 }\n",
+							"timeoutMinutes": 120,
+							"version": "1",
+							"description": "created from csar",
+							"artifactChecksum": "YThkNGFhZjAwNmM4NzMzODc0YzNhYTUxOTljNGQwNmM=",
+							"parameters": [
+								{
+									"heatTemplateArtifactUuid": "7e7f7356-11bd-4f2f-bbbc-5c10954e3189",
+									"paramName": "vnf_name",
+									"required": true,
+									"paramType": "string"
+								}
+							],
+							"childTemplates": [],
+							"heatTemplate": "heat_template_version: 2015-04-30\n\nparameters:\n\n## GLOBAL//Basic Parameters\n  vnf_name:\n    type: string\n    description: Unique name for this VF instance\n#   For manual spinups, value must be in the ENV file. Must be removed from ENV before uploading to ASDC\n\nresources:\n\n## MSP RSG//Resource:SecurityGroup\n  sec_grp_msp_0:\n    type: OS::Neutron::SecurityGroup\n    properties:\n      description: Security Group for PXMC\n      name:\n        str_replace:\n          template: VF_NAME_sec_grp_msp\n          params:\n            VF_NAME: { get_param: vnf_name }\n      rules:\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"tcp\", \"ethertype\": \"IPv4\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"udp\", \"ethertype\": \"IPv4\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"132\", \"ethertype\": \"IPv4\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"icmp\", \"ethertype\": \"IPv4\"}\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"tcp\", \"ethertype\": \"IPv6\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"udp\", \"ethertype\": \"IPv6\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"132\", \"ethertype\": \"IPv6\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"egress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"58\", \"ethertype\": \"IPv6\"}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"tcp\", \"ethertype\": \"IPv4\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"udp\", \"ethertype\": \"IPv4\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"132\", \"ethertype\": \"IPv4\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"0.0.0.0/0\", \"protocol\": \"icmp\", \"ethertype\": \"IPv4\"}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"tcp\", \"ethertype\": \"IPv6\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"udp\", \"ethertype\": \"IPv6\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"132\", \"ethertype\": \"IPv6\", \"port_range_max\": 65535, \"port_range_min\": 0}\n        - {\"direction\": \"ingress\", \"remote_ip_prefix\": \"::/0\", \"protocol\": \"58\", \"ethertype\": \"IPv6\"}\n\noutputs:\n\n  sec_grp_msp_id:\n    description:  uuid of the security group\n    value: {get_resource: sec_grp_msp_0 }\n"
+						},
+						"heatFiles": [],
+						"vnfResources": {
+							"modelUuid": "d326f424-2312-4dd6-b7fe-364fadbd1ef5",
+							"modelInvariantUuid": "23122c9b-dd7f-483f-bf0a-e069303db2f7",
+							"modelName": "Vf zrdm5bpxmc02092017-VF",
+							"toscaNodeType": "org.openecomp.resource.vf.VfZrdm5bpxmc02092017Vf",
+							"description": "Demo",
+							"orchestrationMode": "HEAT",
+							"modelVersion": "1.0",
+							"modelInvariantId": "23122c9b-dd7f-483f-bf0a-e069303db2f7"
+						},
+						"modelInvariantUuid": "f7a867f2-596b-4f4a-a128-421e825a6190",
+						"base": true
+					}
+				},
+				{
+					"modelCustomizationUuid": "5336a98e-0966-4e59-b6e6-c8162804a024",
+					"label": "pxmc_vmt",
+					"minInstances": 0,
+					"initialCount": 0,
+					"heatEnvironment": {
+						"artifactUuid": "bc1640f1-69f0-4760-8fc3-3318ec2ff129",
+						"name": "pxmc_vmt.env",
+						"description": "Auto-generated HEAT Environment deployment artifact",
+						"environment": "parameters:\n  cinder_delete_on_termination_false: \n  cinder_delete_on_termination_true: \n  oam_protected_net_name: \n  sec_grp_msp_id: \n  vf_module_id: \n  vmt_block_device_names: \n  vmt_flavor_name: \n  vmt_name_0: \n  vmt_oam_protected_ip_0: \n  vmt_volume_image_name_0: \n  vmt_volume_image_name_1: \n  vmt_volume_name_0: \n  vmt_volume_name_1: \n  vmt_volume_size_0: \n  vmt_volume_size_1: \n  vnf_id: \n",
+						"artifactChecksum": "MjdkYzY5ZGU0ZTlkZDlhNzI2ZGVhMjk1ODVhZTg1NTY=",
+						"version": "2"
+					},
+					"vfModule": {
+						"modelUUID": "4d4423e2-17e8-455a-b9ae-7e4ab71b9cdc",
+						"modelInvariantUUID": "1e099992-6222-41a9-acde-5a8abb690775",
+						"modelName": "VfZrdm5bpxmc02092017Vf..pxmc_vmt..module-1",
+						"modelVersion": "1",
+						"isBase": 0,
+						"moduleHeatTemplate": {
+							"artifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+							"templateName": "pxmc_vmt.yaml",
+							"templateBody": "heat_template_version: 2015-04-30\n\ndescription: HOT creates Nimbus MSP VMT stack under MobiSupport Tenant\n\nparameters:\n  vmt_name_0:\n    type: string\n    label: MSP VMT server names\n    description: name of the MSP VMT instances\n#  vmt_image_name:\n#    type: string\n#    label: MSP VMT image name\n#    description: MSP VMT image name\n  vmt_flavor_name:\n    type: string\n    label: MSP VMT flavor name\n    description: MSP VMT flavor name\n#  availability_zone_0:\n#    type: string\n#    label: MSP VMT availability zones\n#    description: MSP VMT availability zones\n  sec_grp_msp_id:\n    type: string\n    label: security group id\n    description: the id of security group\n  vmt_oam_protected_ip_0:\n    type: string\n    label: MSP VMT OAM IP Addresses\n    description: MSP VMT OAM IP Addresses\n  oam_protected_net_name:\n    type: string\n    label: MSP VMT OAM net name\n    description: MSP VMT OAM net name\n  vmt_block_device_names:\n    type: comma_delimited_list\n    label: MSP VMT Block Device Names\n    description: MSP VMT Block Device Names\n  vmt_volume_name_0:\n    type: string\n    label: Mobisupport MSP VMT Cinder Volume names\n    description: Mobisupport MSP VMT Cinder Volume names\n  vmt_volume_name_1:\n    type: string\n    label: Mobisupport MSP VMT Cinder Volume names\n    description: Mobisupport MSP VMT Cinder Volume names\n  vmt_volume_size_0:\n    type: number\n    label: Mobisupport MSP VMT Cinder Volume sizes\n    description: Mobisupport MSP VMT Cinder Volume sizes\n  vmt_volume_size_1:\n    type: number\n    label: Mobisupport MSP VMT Cinder Volume sizes\n    description: Mobisupport MSP VMT Cinder Volume sizes\n  vmt_volume_image_name_0:\n    type: string\n    label: Mobisupport MSP VMT VDA Cinder Volume image name\n    description: Mobisupport MSP VMT VDA Cinder Volume image name\n  vmt_volume_image_name_1:\n    type: string\n    label: Mobisupport MSP VMT VDB Cinder Volume image name\n    description: Mobisupport MSP VMT VDB Cinder Volume image name\n  cinder_delete_on_termination_true:\n    type: boolean\n    description: delete cinder volume upon instances termination\n  cinder_delete_on_termination_false:\n    type: boolean\n    description: keep cinder volume upon instances termination\n  vnf_id:\n    type: string\n    label: MSP VMT VNF ID\n    description: MSP VMT VNF ID\n  vf_module_id:\n    type: string\n    description:  Unique ID for this VF Module instance\n\nresources:\n################ Cinder Volumes ##############################\n  vmt_volume_0:\n    type: OS::Cinder::Volume\n    properties:\n      name: {get_param: vmt_volume_name_0}\n      size: {get_param: vmt_volume_size_0}\n      image: {get_param: vmt_volume_image_name_0}\n\n  vmt_volume_1:\n    type: OS::Cinder::Volume\n    properties:\n      name: {get_param: vmt_volume_name_1}\n      size: {get_param: vmt_volume_size_1}\n      image: {get_param: vmt_volume_image_name_1}\n\n################ Ports ##############################\n  vmt_oam_protected_0_port:\n    type: OS::Neutron::Port\n    properties:\n      network: {get_param: oam_protected_net_name}\n      fixed_ips: [{\"ip_address\": {get_param: vmt_oam_protected_ip_0}}]\n      security_groups: [{get_param: sec_grp_msp_id}]\n      replacement_policy: AUTO\n\n################### Servers #########################\n  vmt_zrdm5bpxmc02vmt_0:\n    type: OS::Nova::Server\n    properties:\n      name: {get_param: vmt_name_0}\n#      image: {get_param:  vmt_image_name}\n      flavor: {get_param: vmt_flavor_name}\n#      availability_zone: {get_param: availability_zone_0}\n      block_device_mapping_v2: \n        - device_name: {get_param: [vmt_block_device_names, 0]}\n          volume_id: {get_resource: vmt_volume_0}\n          delete_on_termination: {get_param: cinder_delete_on_termination_true}\n          boot_index: 0\n        - device_name: {get_param: [vmt_block_device_names, 1]}\n          volume_id: {get_resource: vmt_volume_1}\n          delete_on_termination: {get_param: cinder_delete_on_termination_true}\n          boot_index: -1\n      networks:\n        - port: {get_resource: vmt_oam_protected_0_port}\n      config_drive: \"True\"\n      user_data_format: RAW\n      user_data:\n        get_file: user_data_zrdm5bpxmc02vmt001.txt\n\n      metadata:\n        vnf_id: {get_param: vnf_id}\n        vf_module_id {get_param: vf_module_id}\n        \"evacuation_policy\": \"Evacuation\"\n",
+							"timeoutMinutes": 120,
+							"version": "1",
+							"description": "created from csar",
+							"artifactChecksum": "ODE0YTRiYzc2YzkxOTliZjJhNjc0M2RhMWU4M2VlZmE=",
+							"parameters": [
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "vmt_name_0",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "vf_module_id",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "sec_grp_msp_id",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "vmt_volume_name_1",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "vmt_volume_name_0",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "vmt_block_device_names",
+									"required": true,
+									"paramType": "comma_delimited_list"
+								},
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "vmt_flavor_name",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "vnf_id",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "oam_protected_net_name",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "vmt_volume_image_name_1",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "vmt_volume_image_name_0",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "vmt_oam_protected_ip_0",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "vmt_volume_size_0",
+									"required": true,
+									"paramType": "number"
+								},
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "cinder_delete_on_termination_false",
+									"required": true,
+									"paramType": "boolean"
+								},
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "vmt_volume_size_1",
+									"required": true,
+									"paramType": "number"
+								},
+								{
+									"heatTemplateArtifactUuid": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+									"paramName": "cinder_delete_on_termination_true",
+									"required": true,
+									"paramType": "boolean"
+								}
+							],
+							"childTemplates": [],
+							"heatTemplate": "heat_template_version: 2015-04-30\n\ndescription: HOT creates Nimbus MSP VMT stack under MobiSupport Tenant\n\nparameters:\n  vmt_name_0:\n    type: string\n    label: MSP VMT server names\n    description: name of the MSP VMT instances\n#  vmt_image_name:\n#    type: string\n#    label: MSP VMT image name\n#    description: MSP VMT image name\n  vmt_flavor_name:\n    type: string\n    label: MSP VMT flavor name\n    description: MSP VMT flavor name\n#  availability_zone_0:\n#    type: string\n#    label: MSP VMT availability zones\n#    description: MSP VMT availability zones\n  sec_grp_msp_id:\n    type: string\n    label: security group id\n    description: the id of security group\n  vmt_oam_protected_ip_0:\n    type: string\n    label: MSP VMT OAM IP Addresses\n    description: MSP VMT OAM IP Addresses\n  oam_protected_net_name:\n    type: string\n    label: MSP VMT OAM net name\n    description: MSP VMT OAM net name\n  vmt_block_device_names:\n    type: comma_delimited_list\n    label: MSP VMT Block Device Names\n    description: MSP VMT Block Device Names\n  vmt_volume_name_0:\n    type: string\n    label: Mobisupport MSP VMT Cinder Volume names\n    description: Mobisupport MSP VMT Cinder Volume names\n  vmt_volume_name_1:\n    type: string\n    label: Mobisupport MSP VMT Cinder Volume names\n    description: Mobisupport MSP VMT Cinder Volume names\n  vmt_volume_size_0:\n    type: number\n    label: Mobisupport MSP VMT Cinder Volume sizes\n    description: Mobisupport MSP VMT Cinder Volume sizes\n  vmt_volume_size_1:\n    type: number\n    label: Mobisupport MSP VMT Cinder Volume sizes\n    description: Mobisupport MSP VMT Cinder Volume sizes\n  vmt_volume_image_name_0:\n    type: string\n    label: Mobisupport MSP VMT VDA Cinder Volume image name\n    description: Mobisupport MSP VMT VDA Cinder Volume image name\n  vmt_volume_image_name_1:\n    type: string\n    label: Mobisupport MSP VMT VDB Cinder Volume image name\n    description: Mobisupport MSP VMT VDB Cinder Volume image name\n  cinder_delete_on_termination_true:\n    type: boolean\n    description: delete cinder volume upon instances termination\n  cinder_delete_on_termination_false:\n    type: boolean\n    description: keep cinder volume upon instances termination\n  vnf_id:\n    type: string\n    label: MSP VMT VNF ID\n    description: MSP VMT VNF ID\n  vf_module_id:\n    type: string\n    description:  Unique ID for this VF Module instance\n\nresources:\n################ Cinder Volumes ##############################\n  vmt_volume_0:\n    type: OS::Cinder::Volume\n    properties:\n      name: {get_param: vmt_volume_name_0}\n      size: {get_param: vmt_volume_size_0}\n      image: {get_param: vmt_volume_image_name_0}\n\n  vmt_volume_1:\n    type: OS::Cinder::Volume\n    properties:\n      name: {get_param: vmt_volume_name_1}\n      size: {get_param: vmt_volume_size_1}\n      image: {get_param: vmt_volume_image_name_1}\n\n################ Ports ##############################\n  vmt_oam_protected_0_port:\n    type: OS::Neutron::Port\n    properties:\n      network: {get_param: oam_protected_net_name}\n      fixed_ips: [{\"ip_address\": {get_param: vmt_oam_protected_ip_0}}]\n      security_groups: [{get_param: sec_grp_msp_id}]\n      replacement_policy: AUTO\n\n################### Servers #########################\n  vmt_zrdm5bpxmc02vmt_0:\n    type: OS::Nova::Server\n    properties:\n      name: {get_param: vmt_name_0}\n#      image: {get_param:  vmt_image_name}\n      flavor: {get_param: vmt_flavor_name}\n#      availability_zone: {get_param: availability_zone_0}\n      block_device_mapping_v2: \n        - device_name: {get_param: [vmt_block_device_names, 0]}\n          volume_id: {get_resource: vmt_volume_0}\n          delete_on_termination: {get_param: cinder_delete_on_termination_true}\n          boot_index: 0\n        - device_name: {get_param: [vmt_block_device_names, 1]}\n          volume_id: {get_resource: vmt_volume_1}\n          delete_on_termination: {get_param: cinder_delete_on_termination_true}\n          boot_index: -1\n      networks:\n        - port: {get_resource: vmt_oam_protected_0_port}\n      config_drive: \"True\"\n      user_data_format: RAW\n      user_data:\n        get_file: user_data_zrdm5bpxmc02vmt001.txt\n\n      metadata:\n        vnf_id: {get_param: vnf_id}\n        vf_module_id {get_param: vf_module_id}\n        \"evacuation_policy\": \"Evacuation\"\n"
+						},
+						"heatFiles": [],
+						"vnfResources": {
+							"modelUuid": "d326f424-2312-4dd6-b7fe-364fadbd1ef5",
+							"modelInvariantUuid": "23122c9b-dd7f-483f-bf0a-e069303db2f7",
+							"modelName": "Vf zrdm5bpxmc02092017-VF",
+							"toscaNodeType": "org.openecomp.resource.vf.VfZrdm5bpxmc02092017Vf",
+							"description": "Demo",
+							"orchestrationMode": "HEAT",
+							"modelVersion": "1.0",
+							"modelInvariantId": "23122c9b-dd7f-483f-bf0a-e069303db2f7"
+						},
+						"modelInvariantUuid": "1e099992-6222-41a9-acde-5a8abb690775",
+						"base": false
+					}
+				},
+				{
+					"modelCustomizationUuid": "e38906fa-717c-49b0-b391-e6ec12b50c4a",
+					"label": "pxmc_mmn",
+					"minInstances": 0,
+					"initialCount": 0,
+					"heatEnvironment": {
+						"artifactUuid": "e88ce0b9-1496-4d03-ab1d-6d8d79bfc737",
+						"name": "pxmc_mmn.env",
+						"description": "Auto-generated HEAT Environment deployment artifact",
+						"environment": "parameters:\n  cinder_delete_on_termination_false: \n  cinder_delete_on_termination_true: \n  mmn_arch_volume_id_2: \n  mmn_backup_volume_id_3: \n  mmn_block_device_names: \n  mmn_data_volume_id_1: \n  mmn_flavor_name: \n  mmn_misc_volume_id_4: \n  mmn_name_0: \n  mmn_oam_protected_ip_0: \n  mmn_volume_image_name_0: \n  mmn_volume_name_0: \n  mmn_volume_size_0: \n  oam_protected_net_name: \n  sec_grp_msp_id: \n  vf_module_id: \n  vnf_id: \n",
+						"artifactChecksum": "ZGI1NzI2Y2FmYjFhOTM2ZDYwNzg1YWRhZjBmMTk2OTQ=",
+						"version": "2"
+					},
+					"vfModule": {
+						"modelUUID": "a8cb1182-9b6d-46f8-b06b-ded4fe69e10d",
+						"modelInvariantUUID": "8e53c069-b2f0-437a-9c00-21cbc5c8f081",
+						"modelName": "VfZrdm5bpxmc02092017Vf..pxmc_mmn..module-2",
+						"modelVersion": "1",
+						"isBase": 0,
+						"volumeHeatTemplate": {
+							"artifactUuid": "2f372a02-df1b-46ca-b81e-822e3f406965",
+							"templateName": "pxmc_mmn_volume.yaml",
+							"templateBody": "heat_template_version: 2015-04-30\n\ndescription: HOT creates MSP MMN Cinder Volumes under MobiSupport Tenant\n\nparameters:\n  mmn_volume_name_1:\n    type: string\n    label: Mobisupport MSP MMN Cinder Volume names\n    description: Mobisupport MSP MMN Cinder Volume names\n\n  mmn_volume_name_2:\n    type: string\n    label: Mobisupport MSP MMN Cinder Volume names\n    description: Mobisupport MSP MMN Cinder Volume names\n\n  mmn_volume_name_3:\n    type: string\n    label: Mobisupport MSP MMN Cinder Volume names\n    description: Mobisupport MSP MMN Cinder Volume names\n\n  mmn_volume_name_4:\n    type: string\n    label: Mobisupport MSP MMN Cinder Volume names\n    description: Mobisupport MSP MMN Cinder Volume names\n\n  mmn_volume_size_1:\n    type: number\n    label: Mobisupport MSP MMN Cinder Volume sizes\n    description: Mobisupport MSP MMN Cinder Volume sizes\n\n  mmn_volume_size_2:\n    type: number\n    label: Mobisupport MSP MMN Cinder Volume sizes\n    description: Mobisupport MSP MMN Cinder Volume sizes\n\n  mmn_volume_size_3:\n    type: number\n    label: Mobisupport MSP MMN Cinder Volume sizes\n    description: Mobisupport MSP MMN Cinder Volume sizes\n\n  mmn_volume_size_4:\n    type: number\n    label: Mobisupport MSP MMN Cinder Volume sizes\n    description: Mobisupport MSP MMN Cinder Volume sizes\n\nresources:\n  mmn_data_volume_1:\n    type: OS::Cinder::Volume\n    properties:\n      name: {get_param: mmn_volume_name_1}\n      size: {get_param: mmn_volume_size_1}\n              \n  mmn_arch_volume_2:\n    type: OS::Cinder::Volume\n    properties:\n      name: {get_param: mmn_volume_name_2}\n      size: {get_param: mmn_volume_size_2}\n         \n  mmn_backup_volume_3:\n    type: OS::Cinder::Volume\n    properties:\n      name: {get_param: mmn_volume_name_3}\n      size: {get_param: mmn_volume_size_3}\n               \n  mmn_misc_volume_4:\n    type: OS::Cinder::Volume\n    properties:\n      name: {get_param: mmn_volume_name_4}\n      size: {get_param: mmn_volume_size_4}\n\noutputs:\n  mmn_data_volume_id_1:\n    description: msp mmn data volume 1\n    value: {get_resource: mmn_data_volume_1}\n              \n  mmn_arch_volume_id_2:\n    description: msp mn arch volume 2\n    value: {get_resource: mmn_arch_volume_2}\n         \n  mmn_backup_volume_id_3:\n    description: msp mn backup volume 3\n    value: {get_resource: mmn_backup_volume_3}\n               \n  mmn_misc_volume_id_4:\n    description: msp mn volume 4\n    value: {get_resource: mmn_misc_volume_4}\n",
+							"timeoutMinutes": 120,
+							"version": "2",
+							"description": "created from csar",
+							"artifactChecksum": "MzA5MGY5ODQ0NDY5MDhiMDM3YjFlNGIwNzJkNjFhOTI=",
+							"parameters": [
+								{
+									"heatTemplateArtifactUuid": "2f372a02-df1b-46ca-b81e-822e3f406965",
+									"paramName": "mmn_volume_name_2",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "2f372a02-df1b-46ca-b81e-822e3f406965",
+									"paramName": "mmn_volume_size_2",
+									"required": true,
+									"paramType": "number"
+								},
+								{
+									"heatTemplateArtifactUuid": "2f372a02-df1b-46ca-b81e-822e3f406965",
+									"paramName": "mmn_volume_name_1",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "2f372a02-df1b-46ca-b81e-822e3f406965",
+									"paramName": "mmn_volume_size_1",
+									"required": true,
+									"paramType": "number"
+								},
+								{
+									"heatTemplateArtifactUuid": "2f372a02-df1b-46ca-b81e-822e3f406965",
+									"paramName": "mmn_volume_name_4",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "2f372a02-df1b-46ca-b81e-822e3f406965",
+									"paramName": "mmn_volume_name_3",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "2f372a02-df1b-46ca-b81e-822e3f406965",
+									"paramName": "mmn_volume_size_4",
+									"required": true,
+									"paramType": "number"
+								},
+								{
+									"heatTemplateArtifactUuid": "2f372a02-df1b-46ca-b81e-822e3f406965",
+									"paramName": "mmn_volume_size_3",
+									"required": true,
+									"paramType": "number"
+								}
+							],
+							"childTemplates": [],
+							"heatTemplate": "heat_template_version: 2015-04-30\n\ndescription: HOT creates MSP MMN Cinder Volumes under MobiSupport Tenant\n\nparameters:\n  mmn_volume_name_1:\n    type: string\n    label: Mobisupport MSP MMN Cinder Volume names\n    description: Mobisupport MSP MMN Cinder Volume names\n\n  mmn_volume_name_2:\n    type: string\n    label: Mobisupport MSP MMN Cinder Volume names\n    description: Mobisupport MSP MMN Cinder Volume names\n\n  mmn_volume_name_3:\n    type: string\n    label: Mobisupport MSP MMN Cinder Volume names\n    description: Mobisupport MSP MMN Cinder Volume names\n\n  mmn_volume_name_4:\n    type: string\n    label: Mobisupport MSP MMN Cinder Volume names\n    description: Mobisupport MSP MMN Cinder Volume names\n\n  mmn_volume_size_1:\n    type: number\n    label: Mobisupport MSP MMN Cinder Volume sizes\n    description: Mobisupport MSP MMN Cinder Volume sizes\n\n  mmn_volume_size_2:\n    type: number\n    label: Mobisupport MSP MMN Cinder Volume sizes\n    description: Mobisupport MSP MMN Cinder Volume sizes\n\n  mmn_volume_size_3:\n    type: number\n    label: Mobisupport MSP MMN Cinder Volume sizes\n    description: Mobisupport MSP MMN Cinder Volume sizes\n\n  mmn_volume_size_4:\n    type: number\n    label: Mobisupport MSP MMN Cinder Volume sizes\n    description: Mobisupport MSP MMN Cinder Volume sizes\n\nresources:\n  mmn_data_volume_1:\n    type: OS::Cinder::Volume\n    properties:\n      name: {get_param: mmn_volume_name_1}\n      size: {get_param: mmn_volume_size_1}\n              \n  mmn_arch_volume_2:\n    type: OS::Cinder::Volume\n    properties:\n      name: {get_param: mmn_volume_name_2}\n      size: {get_param: mmn_volume_size_2}\n         \n  mmn_backup_volume_3:\n    type: OS::Cinder::Volume\n    properties:\n      name: {get_param: mmn_volume_name_3}\n      size: {get_param: mmn_volume_size_3}\n               \n  mmn_misc_volume_4:\n    type: OS::Cinder::Volume\n    properties:\n      name: {get_param: mmn_volume_name_4}\n      size: {get_param: mmn_volume_size_4}\n\noutputs:\n  mmn_data_volume_id_1:\n    description: msp mmn data volume 1\n    value: {get_resource: mmn_data_volume_1}\n              \n  mmn_arch_volume_id_2:\n    description: msp mn arch volume 2\n    value: {get_resource: mmn_arch_volume_2}\n         \n  mmn_backup_volume_id_3:\n    description: msp mn backup volume 3\n    value: {get_resource: mmn_backup_volume_3}\n               \n  mmn_misc_volume_id_4:\n    description: msp mn volume 4\n    value: {get_resource: mmn_misc_volume_4}\n"
+						},
+						"moduleHeatTemplate": {
+							"artifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+							"templateName": "pxmc_mmn.yaml",
+							"templateBody": "heat_template_version: 2015-04-30\n\ndescription: HOT creates Nimbus vMSP MMN stack.\n\nparameters:\n  mmn_name_0:\n    type: string\n    label: MSP MMN server names\n    description: name of the MSP MMN instances\n  mmn_flavor_name:\n    type: string\n    label: MSP MMN flavor name\n    description: MSP MMN flavor name\n#  mmn_image_name:\n#    type: string\n#    label: MSP MMN image name\n#    description: MSP MMN image name\n#  availability_zone_0:\n#    type: string\n#    label: MSP MMN availability zones\n#    description: MSP MMN availability zones\n  sec_grp_msp_id:\n    type: string\n    label: security group id\n    description: the id of security group\n  mmn_oam_protected_ip_0:\n    type: string\n    label: MSP MMN OAM IP Addresses\n    description: MSP MMN OAM IP Addresses\n  oam_protected_net_name:\n    type: string\n    label: MSP MMN OAM net name\n    description: MSP MMN OAM net name\n  mmn_volume_name_0:\n    type: string\n    label: Mobisupport MSP MMN Cinder Volume names\n    description: Mobisupport MSP MMN Cinder Volume names\n  mmn_volume_size_0:\n    type: number\n    label: Mobisupport MSP MMN Cinder Volume sizes\n    description: Mobisupport MSP MMN Cinder Volume sizes\n  mmn_volume_image_name_0:\n    type: string\n    label: Mobisupport MSP MMN Cinder Volume image name\n    description: Mobisupport MSP MMN Cinder Volume image name\n  mmn_data_volume_id_1:\n    type: string\n    label: MSP MMN Volume id 1\n    description: MSP MMN Volume id 1\n  mmn_arch_volume_id_2:\n    type: string\n    label: MSP MMN Volume id 2\n    description: MSP MMN Volume id 2\n  mmn_backup_volume_id_3:\n    type: string\n    label: MSP MMN Volume id 3\n    description: MSP MMN Volume id 3\n  mmn_misc_volume_id_4:\n    type: string\n    label: MSP MMN Volume id 4\n    description: MSP MMN Volume id 4\n  mmn_block_device_names:\n    type: comma_delimited_list\n    label: MSP MMN Block Device Names\n    description: MSP MMN Block Device Names\n  cinder_delete_on_termination_true:\n    type: boolean\n    description: delete cinder volume upon instances termination\n  cinder_delete_on_termination_false:\n    type: boolean\n    description: keep cinder volume upon instances termination\n  vnf_id:\n    type: string\n    label: MSP MMN VNF ID\n    description: MSP MMN VNF ID\n  vf_module_id:\n    type: string\n    description: Unique ID for this VF module instance\n\nresources:\n################ Cinder Volume ########################\n  mmn_volume_0:\n    type: OS::Cinder::Volume\n    properties:\n      name: {get_param: mmn_volume_name_0}\n      size: {get_param: mmn_volume_size_0}\n      image: {get_param: mmn_volume_image_name_0}\n\n################ Server ##############################\n  mmn_zrdm5bpxmc02mmn_0:\n    type: OS::Nova::Server\n    properties:\n      name: {get_param: mmn_name_0}\n#      image: {get_param: mmn_image_name}\n      flavor: {get_param: mmn_flavor_name}\n#      availability_zone: {get_param: availability_zone_0}\n      block_device_mapping_v2:\n        - device_name: { get_param: [mmn_block_device_names, 0] }\n          volume_id: { get_resource: mmn_volume_0 }\n          delete_on_termination: {get_param: cinder_delete_on_termination_true}\n      networks:\n        - port: { get_resource: mmn_oam_protected_0_port }\n      config_drive: \"True\"\n      user_data_format: RAW\n      user_data:\n        get_file: user_data_zrdm5bpxmc02mmn001.txt\n      metadata:\n        vnf_id: {get_param: vnf_id}\n        vf_module_id {get_param: vf_module_id}\n        \"evacuation_policy\": \"Evacuation\"\n\n################ Ports ##############################\n  mmn_oam_protected_0_port:\n    type: OS::Neutron::Port\n    properties:\n      network: {get_param: oam_protected_net_name}\n      fixed_ips: [{\"ip_address\": {get_param: mmn_oam_protected_ip_0}}]\n      security_groups: [{ get_param: sec_grp_msp_id }]\n      replacement_policy: AUTO\n\n################ Volume Attachment ##############################\n  volume_attachment_vdb:\n    type: OS::Cinder::VolumeAttachment\n    depends_on: mmn_zrdm5bpxmc02mmn_0\n    properties:\n      volume_id: { get_param: mmn_data_volume_id_1 }\n      instance_uuid: { get_resource: mmn_zrdm5bpxmc02mmn_0}\n      mountpoint: /dev/vdb\n\n  volume_attachment_vdc:\n    type: OS::Cinder::VolumeAttachment\n    depends_on: volume_attachment_vdb\n    properties:\n      volume_id: { get_param: mmn_arch_volume_id_2 }\n      instance_uuid: { get_resource: mmn_zrdm5bpxmc02mmn_0}\n      mountpoint: /dev/vdc\n\n  volume_attachment_vdd:\n    type: OS::Cinder::VolumeAttachment\n    depends_on: volume_attachment_vdc\n    properties:\n      volume_id: { get_param: mmn_backup_volume_id_3 }\n      instance_uuid: { get_resource: mmn_zrdm5bpxmc02mmn_0}\n      mountpoint: /dev/vdd\n\n  volume_attachment_vde:\n    type: OS::Cinder::VolumeAttachment\n    depends_on: volume_attachment_vdd\n    properties:\n      volume_id: { get_param: mmn_misc_volume_id_4 }\n      instance_uuid: { get_resource:  mmn_zrdm5bpxmc02mmn_0}\n      mountpoint: /dev/vde\n",
+							"timeoutMinutes": 120,
+							"version": "1",
+							"description": "created from csar",
+							"artifactChecksum": "YmNiYTU5YTM4ODVhYTlhODc5NGMwNWZkZjI5MTRmNTE=",
+							"parameters": [
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "vnf_id",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "mmn_block_device_names",
+									"required": true,
+									"paramType": "comma_delimited_list"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "mmn_name_0",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "mmn_arch_volume_id_2",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "mmn_volume_image_name_0",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "cinder_delete_on_termination_false",
+									"required": true,
+									"paramType": "boolean"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "mmn_oam_protected_ip_0",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "mmn_data_volume_id_1",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "mmn_backup_volume_id_3",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "vf_module_id",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "sec_grp_msp_id",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "mmn_volume_size_0",
+									"required": true,
+									"paramType": "number"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "cinder_delete_on_termination_true",
+									"required": true,
+									"paramType": "boolean"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "mmn_volume_name_0",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "oam_protected_net_name",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "mmn_misc_volume_id_4",
+									"required": true,
+									"paramType": "string"
+								},
+								{
+									"heatTemplateArtifactUuid": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+									"paramName": "mmn_flavor_name",
+									"required": true,
+									"paramType": "string"
+								}
+							],
+							"childTemplates": [],
+							"heatTemplate": "heat_template_version: 2015-04-30\n\ndescription: HOT creates Nimbus vMSP MMN stack.\n\nparameters:\n  mmn_name_0:\n    type: string\n    label: MSP MMN server names\n    description: name of the MSP MMN instances\n  mmn_flavor_name:\n    type: string\n    label: MSP MMN flavor name\n    description: MSP MMN flavor name\n#  mmn_image_name:\n#    type: string\n#    label: MSP MMN image name\n#    description: MSP MMN image name\n#  availability_zone_0:\n#    type: string\n#    label: MSP MMN availability zones\n#    description: MSP MMN availability zones\n  sec_grp_msp_id:\n    type: string\n    label: security group id\n    description: the id of security group\n  mmn_oam_protected_ip_0:\n    type: string\n    label: MSP MMN OAM IP Addresses\n    description: MSP MMN OAM IP Addresses\n  oam_protected_net_name:\n    type: string\n    label: MSP MMN OAM net name\n    description: MSP MMN OAM net name\n  mmn_volume_name_0:\n    type: string\n    label: Mobisupport MSP MMN Cinder Volume names\n    description: Mobisupport MSP MMN Cinder Volume names\n  mmn_volume_size_0:\n    type: number\n    label: Mobisupport MSP MMN Cinder Volume sizes\n    description: Mobisupport MSP MMN Cinder Volume sizes\n  mmn_volume_image_name_0:\n    type: string\n    label: Mobisupport MSP MMN Cinder Volume image name\n    description: Mobisupport MSP MMN Cinder Volume image name\n  mmn_data_volume_id_1:\n    type: string\n    label: MSP MMN Volume id 1\n    description: MSP MMN Volume id 1\n  mmn_arch_volume_id_2:\n    type: string\n    label: MSP MMN Volume id 2\n    description: MSP MMN Volume id 2\n  mmn_backup_volume_id_3:\n    type: string\n    label: MSP MMN Volume id 3\n    description: MSP MMN Volume id 3\n  mmn_misc_volume_id_4:\n    type: string\n    label: MSP MMN Volume id 4\n    description: MSP MMN Volume id 4\n  mmn_block_device_names:\n    type: comma_delimited_list\n    label: MSP MMN Block Device Names\n    description: MSP MMN Block Device Names\n  cinder_delete_on_termination_true:\n    type: boolean\n    description: delete cinder volume upon instances termination\n  cinder_delete_on_termination_false:\n    type: boolean\n    description: keep cinder volume upon instances termination\n  vnf_id:\n    type: string\n    label: MSP MMN VNF ID\n    description: MSP MMN VNF ID\n  vf_module_id:\n    type: string\n    description: Unique ID for this VF module instance\n\nresources:\n################ Cinder Volume ########################\n  mmn_volume_0:\n    type: OS::Cinder::Volume\n    properties:\n      name: {get_param: mmn_volume_name_0}\n      size: {get_param: mmn_volume_size_0}\n      image: {get_param: mmn_volume_image_name_0}\n\n################ Server ##############################\n  mmn_zrdm5bpxmc02mmn_0:\n    type: OS::Nova::Server\n    properties:\n      name: {get_param: mmn_name_0}\n#      image: {get_param: mmn_image_name}\n      flavor: {get_param: mmn_flavor_name}\n#      availability_zone: {get_param: availability_zone_0}\n      block_device_mapping_v2:\n        - device_name: { get_param: [mmn_block_device_names, 0] }\n          volume_id: { get_resource: mmn_volume_0 }\n          delete_on_termination: {get_param: cinder_delete_on_termination_true}\n      networks:\n        - port: { get_resource: mmn_oam_protected_0_port }\n      config_drive: \"True\"\n      user_data_format: RAW\n      user_data:\n        get_file: user_data_zrdm5bpxmc02mmn001.txt\n      metadata:\n        vnf_id: {get_param: vnf_id}\n        vf_module_id {get_param: vf_module_id}\n        \"evacuation_policy\": \"Evacuation\"\n\n################ Ports ##############################\n  mmn_oam_protected_0_port:\n    type: OS::Neutron::Port\n    properties:\n      network: {get_param: oam_protected_net_name}\n      fixed_ips: [{\"ip_address\": {get_param: mmn_oam_protected_ip_0}}]\n      security_groups: [{ get_param: sec_grp_msp_id }]\n      replacement_policy: AUTO\n\n################ Volume Attachment ##############################\n  volume_attachment_vdb:\n    type: OS::Cinder::VolumeAttachment\n    depends_on: mmn_zrdm5bpxmc02mmn_0\n    properties:\n      volume_id: { get_param: mmn_data_volume_id_1 }\n      instance_uuid: { get_resource: mmn_zrdm5bpxmc02mmn_0}\n      mountpoint: /dev/vdb\n\n  volume_attachment_vdc:\n    type: OS::Cinder::VolumeAttachment\n    depends_on: volume_attachment_vdb\n    properties:\n      volume_id: { get_param: mmn_arch_volume_id_2 }\n      instance_uuid: { get_resource: mmn_zrdm5bpxmc02mmn_0}\n      mountpoint: /dev/vdc\n\n  volume_attachment_vdd:\n    type: OS::Cinder::VolumeAttachment\n    depends_on: volume_attachment_vdc\n    properties:\n      volume_id: { get_param: mmn_backup_volume_id_3 }\n      instance_uuid: { get_resource: mmn_zrdm5bpxmc02mmn_0}\n      mountpoint: /dev/vdd\n\n  volume_attachment_vde:\n    type: OS::Cinder::VolumeAttachment\n    depends_on: volume_attachment_vdd\n    properties:\n      volume_id: { get_param: mmn_misc_volume_id_4 }\n      instance_uuid: { get_resource:  mmn_zrdm5bpxmc02mmn_0}\n      mountpoint: /dev/vde\n"
+						},
+						"heatFiles": [],
+						"vnfResources": {
+							"modelUuid": "d326f424-2312-4dd6-b7fe-364fadbd1ef5",
+							"modelInvariantUuid": "23122c9b-dd7f-483f-bf0a-e069303db2f7",
+							"modelName": "Vf zrdm5bpxmc02092017-VF",
+							"toscaNodeType": "org.openecomp.resource.vf.VfZrdm5bpxmc02092017Vf",
+							"description": "Demo",
+							"orchestrationMode": "HEAT",
+							"modelVersion": "1.0",
+							"modelInvariantId": "23122c9b-dd7f-483f-bf0a-e069303db2f7"
+						},
+						"modelInvariantUuid": "8e53c069-b2f0-437a-9c00-21cbc5c8f081",
+						"base": false
+					}
+				}
+			],
+			"vnfResource": {
+				"modelUuid": "d326f424-2312-4dd6-b7fe-364fadbd1ef5",
+				"modelInvariantUuid": "23122c9b-dd7f-483f-bf0a-e069303db2f7",
+				"modelName": "Vf zrdm5bpxmc02092017-VF",
+				"toscaNodeType": "org.openecomp.resource.vf.VfZrdm5bpxmc02092017Vf",
+				"description": "Demo",
+				"orchestrationMode": "HEAT",
+				"modelVersion": "1.0",
+				"modelInvariantId": "23122c9b-dd7f-483f-bf0a-e069303db2f7"
+			}
+		}
+	],
+	"allotedCustomizations": [],
+	"recipes": {
+		
+	},
+	"csar": {
+		"artifactUUID": "396cfd49-0f4b-4fec-9f33-0fd7e90d5a22",
+		"name": "service-VfZrdm5bpxmc02092017Service-csar.csar",
+		"artifactChecksum": "MWQ3Y2FmMWExNDQyYWI2N2YwNjEwZGUzN2IzMzI3NjE=",
+		"url": "service-VfZrdm5bpxmc02092017Service-csar.csar",
+		"description": "TOSCA definition package of the asset",
+		"version": "1"
+	}
+}
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/notif-structure.json b/asdc-controller/src/test/resources/resource-examples/multipleModules/notif-structure.json
new file mode 100644
index 0000000..3a7b361
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/notif-structure.json
@@ -0,0 +1,96 @@
+{
+    "serviceName": "Vf zrdm5bpxmc02092017-Service",
+    "serviceInvariantUUID": "b16a9398-ffa3-4041-b78c-2956b8ad9c7b",
+    "serviceUUID": "bad955c3-29b2-4a27-932e-28e942cc6480",
+    "serviceVersion": "1.0",
+    "serviceArtifacts": 
+    [{
+		"artifactName": "service-VfZrdm5bpxmc02092017Service-csar.csar",
+		"artifactType": "TOSCA_CSAR",
+		"artifactURL": "service-VfZrdm5bpxmc02092017Service-csar.csar",
+		"artifactChecksum": "MWQ3Y2FmMWExNDQyYWI2N2YwNjEwZGUzN2IzMzI3NjE=",
+		"artifactDescription": "TOSCA definition package of the asset",
+		"artifactTimeout": 0,
+		"artifactUUID": "396cfd49-0f4b-4fec-9f33-0fd7e90d5a22",
+		"artifactVersion": "1"
+    }],
+    "resources": 
+    [	
+        {
+            "resourceInstanceName": "Vf zrdm5bpxmc02092017-VF 0",
+            "resourceInvariantUUID": "23122c9b-dd7f-483f-bf0a-e069303db2f7",
+            "resourceCustomizationUUID": "96c23a4a-6887-4b2c-9cce-1e4ea35eaade", 
+            "resourceName": "Vf zrdm5bpxmc02092017-VF",
+            "resourceType": "VF",
+            "resourceUUID": "14ba5d1e-3862-407c-a236-1cbaebccce77",
+            "resourceVersion": "1.0",
+            "category": "Generic",
+            "subcategory": "Network Elements",
+            "artifacts": 
+            [
+                {
+                    "artifactChecksum": "NmEyZjc1Y2UwZDMwYjFhNGRlMTMzN2JhNzdiMThjMGU=",
+                    "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                    "artifactName": "pxmc_mmn_volume.env",                    
+                    "artifactType": "HEAT_ENV",
+                    "artifactURL": "pxmc_mmn_volume.env",
+                    "artifactUUID": "c1ae6284-48d9-4437-a195-b2cf2ba23070",
+                    "artifactTimeout": 0,
+                    "artifactVersion": "2"
+                },
+                {
+                    "artifactChecksum": "OGM2MWIzZTA2OTc5YjQwNTM1NGVhODA0YTFkNzM4ZTg==",
+                    "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                    "artifactName": "pxmc_base.env",
+                    "artifactTimeout": 0,
+                    "artifactType": "HEAT_ENV",
+                    "artifactURL": "pxmc_base.env",
+                    "artifactUUID": "6dd99c31-c52e-4c45-b99b-d223c877a296",
+                    "artifactVersion": "2.0"                 
+                },                
+                {
+                    "artifactChecksum": "MzJmZjgyZWYwOTBjMTg5M2ExNWZhMmMwNzc1NWY1YjQ=",
+                    "artifactDescription": "created from csar",
+                    "artifactName": "user_data_zrdm5bpxmc02vmt001.txt",
+                    "artifactTimeout": 0,
+                    "artifactType": "HEAT_ARTIFACT",
+                    "artifactURL": "user_data_zrdm5bpxmc02vmt001.txt",
+                    "artifactUUID": "53acdabe-689f-45e5-8578-f1514d3529da",
+                    "artifactVersion": "1"                   
+                },                
+                {
+                    "artifactChecksum": "MjY0NzcxMjJkZGI4YzQ1MDU2NjhkNWYyM2IwNmYzYmU=",
+                    "artifactDescription": "Auto-generated VF Modules information artifact",
+                    "artifactName": "vfzrdm5bpxmc02092017vf0_modules.json",
+                    "artifactTimeout": 0,
+                    "artifactType": "VF_MODULES_METADATA",
+                    "artifactURL": "vfzrdm5bpxmc02092017vf0_modules.json",
+                    "artifactUUID": "e3b82cd6-485e-4d56-8d2c-17ccf6a59533",
+                    "artifactVersion": "1"                   
+                },                
+                {
+                    "artifactChecksum": "YWQ2MmE0Y2NjNGE4YmJlOTk0YmZhYmIxYTc1YWZkY2M=",
+                    "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                    "artifactName": "base_TEST.env",
+                    "artifactTimeout": 0,
+                    "artifactType": "HEAT_ENV",
+                    "artifactURL": "base_TEST.env",
+                    "artifactUUID": "57f6520b-fa65-4544-90de-95c8190c2e6c",
+                    "artifactVersion": "1.0"                   
+                },                
+                {
+                    "artifactChecksum": "YWQ2MmE0Y2NjNGE4YmJlOTk0YmZhYmIxYTc1YWZkY2M=",
+                    "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                    "artifactName": "base_TEST.env",
+                    "artifactTimeout": 0,
+                    "artifactType": "HEAT_ENV",
+                    "artifactURL": "base_TEST.env",
+                    "artifactUUID": "57f6520b-fa65-4544-90de-95c8190c2e6c",
+                    "artifactVersion": "1.0"                   
+                }
+            ]
+        }
+    ],
+    "serviceDescription": "Demo",
+    "distributionID": "a2872f55-8628-4486-8548-7b132c9a47db"
+}
\ No newline at end of file
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_base.env b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_base.env
new file mode 100644
index 0000000..42d736e
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_base.env
@@ -0,0 +1,2 @@
+parameters:
+  vnf_name: 
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_base.yaml b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_base.yaml
new file mode 100644
index 0000000..3e98047
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_base.yaml
@@ -0,0 +1,45 @@
+heat_template_version: 2015-04-30
+
+parameters:
+
+## GLOBAL//Basic Parameters
+  vnf_name:
+    type: string
+    description: Unique name for this VF instance
+#   For manual spinups, value must be in the ENV file. Must be removed from ENV before uploading to ASDC
+
+resources:
+
+## MSP RSG//Resource:SecurityGroup
+  sec_grp_msp_0:
+    type: OS::Neutron::SecurityGroup
+    properties:
+      description: Security Group for PXMC
+      name:
+        str_replace:
+          template: VF_NAME_sec_grp_msp
+          params:
+            VF_NAME: { get_param: vnf_name }
+      rules:
+        - {"direction": "egress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "tcp", "ethertype": "IPv4", "port_range_max": 65535, "port_range_min": 0}
+        - {"direction": "egress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "udp", "ethertype": "IPv4", "port_range_max": 65535, "port_range_min": 0}
+        - {"direction": "egress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "132", "ethertype": "IPv4", "port_range_max": 65535, "port_range_min": 0}
+        - {"direction": "egress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "icmp", "ethertype": "IPv4"}
+        - {"direction": "egress", "remote_ip_prefix": "::/0", "protocol": "tcp", "ethertype": "IPv6", "port_range_max": 65535, "port_range_min": 0}
+        - {"direction": "egress", "remote_ip_prefix": "::/0", "protocol": "udp", "ethertype": "IPv6", "port_range_max": 65535, "port_range_min": 0}
+        - {"direction": "egress", "remote_ip_prefix": "::/0", "protocol": "132", "ethertype": "IPv6", "port_range_max": 65535, "port_range_min": 0}
+        - {"direction": "egress", "remote_ip_prefix": "::/0", "protocol": "58", "ethertype": "IPv6"}
+        - {"direction": "ingress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "tcp", "ethertype": "IPv4", "port_range_max": 65535, "port_range_min": 0}
+        - {"direction": "ingress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "udp", "ethertype": "IPv4", "port_range_max": 65535, "port_range_min": 0}
+        - {"direction": "ingress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "132", "ethertype": "IPv4", "port_range_max": 65535, "port_range_min": 0}
+        - {"direction": "ingress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "icmp", "ethertype": "IPv4"}
+        - {"direction": "ingress", "remote_ip_prefix": "::/0", "protocol": "tcp", "ethertype": "IPv6", "port_range_max": 65535, "port_range_min": 0}
+        - {"direction": "ingress", "remote_ip_prefix": "::/0", "protocol": "udp", "ethertype": "IPv6", "port_range_max": 65535, "port_range_min": 0}
+        - {"direction": "ingress", "remote_ip_prefix": "::/0", "protocol": "132", "ethertype": "IPv6", "port_range_max": 65535, "port_range_min": 0}
+        - {"direction": "ingress", "remote_ip_prefix": "::/0", "protocol": "58", "ethertype": "IPv6"}
+
+outputs:
+
+  sec_grp_msp_id:
+    description:  uuid of the security group
+    value: {get_resource: sec_grp_msp_0 }
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_mmn.env b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_mmn.env
new file mode 100644
index 0000000..42599e6
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_mmn.env
@@ -0,0 +1,18 @@
+parameters:
+  cinder_delete_on_termination_false: 
+  cinder_delete_on_termination_true: 
+  mmn_arch_volume_id_2: 
+  mmn_backup_volume_id_3: 
+  mmn_block_device_names: 
+  mmn_data_volume_id_1: 
+  mmn_flavor_name: 
+  mmn_misc_volume_id_4: 
+  mmn_name_0: 
+  mmn_oam_protected_ip_0: 
+  mmn_volume_image_name_0: 
+  mmn_volume_name_0: 
+  mmn_volume_size_0: 
+  oam_protected_net_name: 
+  sec_grp_msp_id: 
+  vf_module_id: 
+  vnf_id: 
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_mmn.yaml b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_mmn.yaml
new file mode 100644
index 0000000..d1b0ce8
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_mmn.yaml
@@ -0,0 +1,152 @@
+heat_template_version: 2015-04-30
+
+description: HOT creates Nimbus vMSP MMN stack.
+
+parameters:
+  mmn_name_0:
+    type: string
+    label: MSP MMN server names
+    description: name of the MSP MMN instances
+  mmn_flavor_name:
+    type: string
+    label: MSP MMN flavor name
+    description: MSP MMN flavor name
+#  mmn_image_name:
+#    type: string
+#    label: MSP MMN image name
+#    description: MSP MMN image name
+#  availability_zone_0:
+#    type: string
+#    label: MSP MMN availability zones
+#    description: MSP MMN availability zones
+  sec_grp_msp_id:
+    type: string
+    label: security group id
+    description: the id of security group
+  mmn_oam_protected_ip_0:
+    type: string
+    label: MSP MMN OAM IP Addresses
+    description: MSP MMN OAM IP Addresses
+  oam_protected_net_name:
+    type: string
+    label: MSP MMN OAM net name
+    description: MSP MMN OAM net name
+  mmn_volume_name_0:
+    type: string
+    label: Mobisupport MSP MMN Cinder Volume names
+    description: Mobisupport MSP MMN Cinder Volume names
+  mmn_volume_size_0:
+    type: number
+    label: Mobisupport MSP MMN Cinder Volume sizes
+    description: Mobisupport MSP MMN Cinder Volume sizes
+  mmn_volume_image_name_0:
+    type: string
+    label: Mobisupport MSP MMN Cinder Volume image name
+    description: Mobisupport MSP MMN Cinder Volume image name
+  mmn_data_volume_id_1:
+    type: string
+    label: MSP MMN Volume id 1
+    description: MSP MMN Volume id 1
+  mmn_arch_volume_id_2:
+    type: string
+    label: MSP MMN Volume id 2
+    description: MSP MMN Volume id 2
+  mmn_backup_volume_id_3:
+    type: string
+    label: MSP MMN Volume id 3
+    description: MSP MMN Volume id 3
+  mmn_misc_volume_id_4:
+    type: string
+    label: MSP MMN Volume id 4
+    description: MSP MMN Volume id 4
+  mmn_block_device_names:
+    type: comma_delimited_list
+    label: MSP MMN Block Device Names
+    description: MSP MMN Block Device Names
+  cinder_delete_on_termination_true:
+    type: boolean
+    description: delete cinder volume upon instances termination
+  cinder_delete_on_termination_false:
+    type: boolean
+    description: keep cinder volume upon instances termination
+  vnf_id:
+    type: string
+    label: MSP MMN VNF ID
+    description: MSP MMN VNF ID
+  vf_module_id:
+    type: string
+    description: Unique ID for this VF module instance
+
+resources:
+################ Cinder Volume ########################
+  mmn_volume_0:
+    type: OS::Cinder::Volume
+    properties:
+      name: {get_param: mmn_volume_name_0}
+      size: {get_param: mmn_volume_size_0}
+      image: {get_param: mmn_volume_image_name_0}
+
+################ Server ##############################
+  mmn_zrdm5bpxmc02mmn_0:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: mmn_name_0}
+#      image: {get_param: mmn_image_name}
+      flavor: {get_param: mmn_flavor_name}
+#      availability_zone: {get_param: availability_zone_0}
+      block_device_mapping_v2:
+        - device_name: { get_param: [mmn_block_device_names, 0] }
+          volume_id: { get_resource: mmn_volume_0 }
+          delete_on_termination: {get_param: cinder_delete_on_termination_true}
+      networks:
+        - port: { get_resource: mmn_oam_protected_0_port }
+      config_drive: "True"
+      user_data_format: RAW
+      user_data:
+        get_file: user_data_zrdm5bpxmc02mmn001.txt
+      metadata:
+        vnf_id: {get_param: vnf_id}
+        vf_module_id {get_param: vf_module_id}
+        "evacuation_policy": "Evacuation"
+
+################ Ports ##############################
+  mmn_oam_protected_0_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_protected_net_name}
+      fixed_ips: [{"ip_address": {get_param: mmn_oam_protected_ip_0}}]
+      security_groups: [{ get_param: sec_grp_msp_id }]
+      replacement_policy: AUTO
+
+################ Volume Attachment ##############################
+  volume_attachment_vdb:
+    type: OS::Cinder::VolumeAttachment
+    depends_on: mmn_zrdm5bpxmc02mmn_0
+    properties:
+      volume_id: { get_param: mmn_data_volume_id_1 }
+      instance_uuid: { get_resource: mmn_zrdm5bpxmc02mmn_0}
+      mountpoint: /dev/vdb
+
+  volume_attachment_vdc:
+    type: OS::Cinder::VolumeAttachment
+    depends_on: volume_attachment_vdb
+    properties:
+      volume_id: { get_param: mmn_arch_volume_id_2 }
+      instance_uuid: { get_resource: mmn_zrdm5bpxmc02mmn_0}
+      mountpoint: /dev/vdc
+
+  volume_attachment_vdd:
+    type: OS::Cinder::VolumeAttachment
+    depends_on: volume_attachment_vdc
+    properties:
+      volume_id: { get_param: mmn_backup_volume_id_3 }
+      instance_uuid: { get_resource: mmn_zrdm5bpxmc02mmn_0}
+      mountpoint: /dev/vdd
+
+  volume_attachment_vde:
+    type: OS::Cinder::VolumeAttachment
+    depends_on: volume_attachment_vdd
+    properties:
+      volume_id: { get_param: mmn_misc_volume_id_4 }
+      instance_uuid: { get_resource:  mmn_zrdm5bpxmc02mmn_0}
+      mountpoint: /dev/vde
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_mmn_volume.env b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_mmn_volume.env
new file mode 100644
index 0000000..d5f1628
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_mmn_volume.env
@@ -0,0 +1,9 @@
+parameters:
+  mmn_volume_name_1: "data-mn-v-vdb"
+  mmn_volume_name_2: "arch-mn-v-vdc"
+  mmn_volume_name_3: "backup-mn-v-vdd"
+  mmn_volume_name_4: "misc-mn-v-vde"
+  mmn_volume_size_1: 20
+  mmn_volume_size_2: 20
+  mmn_volume_size_3: 50
+  mmn_volume_size_4: 20
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_mmn_volume.yaml b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_mmn_volume.yaml
new file mode 100644
index 0000000..debb8a9
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_mmn_volume.yaml
@@ -0,0 +1,86 @@
+heat_template_version: 2015-04-30
+
+description: HOT creates MSP MMN Cinder Volumes under MobiSupport Tenant
+
+parameters:
+  mmn_volume_name_1:
+    type: string
+    label: Mobisupport MSP MMN Cinder Volume names
+    description: Mobisupport MSP MMN Cinder Volume names
+
+  mmn_volume_name_2:
+    type: string
+    label: Mobisupport MSP MMN Cinder Volume names
+    description: Mobisupport MSP MMN Cinder Volume names
+
+  mmn_volume_name_3:
+    type: string
+    label: Mobisupport MSP MMN Cinder Volume names
+    description: Mobisupport MSP MMN Cinder Volume names
+
+  mmn_volume_name_4:
+    type: string
+    label: Mobisupport MSP MMN Cinder Volume names
+    description: Mobisupport MSP MMN Cinder Volume names
+
+  mmn_volume_size_1:
+    type: number
+    label: Mobisupport MSP MMN Cinder Volume sizes
+    description: Mobisupport MSP MMN Cinder Volume sizes
+
+  mmn_volume_size_2:
+    type: number
+    label: Mobisupport MSP MMN Cinder Volume sizes
+    description: Mobisupport MSP MMN Cinder Volume sizes
+
+  mmn_volume_size_3:
+    type: number
+    label: Mobisupport MSP MMN Cinder Volume sizes
+    description: Mobisupport MSP MMN Cinder Volume sizes
+
+  mmn_volume_size_4:
+    type: number
+    label: Mobisupport MSP MMN Cinder Volume sizes
+    description: Mobisupport MSP MMN Cinder Volume sizes
+
+resources:
+  mmn_data_volume_1:
+    type: OS::Cinder::Volume
+    properties:
+      name: {get_param: mmn_volume_name_1}
+      size: {get_param: mmn_volume_size_1}
+              
+  mmn_arch_volume_2:
+    type: OS::Cinder::Volume
+    properties:
+      name: {get_param: mmn_volume_name_2}
+      size: {get_param: mmn_volume_size_2}
+         
+  mmn_backup_volume_3:
+    type: OS::Cinder::Volume
+    properties:
+      name: {get_param: mmn_volume_name_3}
+      size: {get_param: mmn_volume_size_3}
+               
+  mmn_misc_volume_4:
+    type: OS::Cinder::Volume
+    properties:
+      name: {get_param: mmn_volume_name_4}
+      size: {get_param: mmn_volume_size_4}
+
+outputs:
+  mmn_data_volume_id_1:
+    description: msp mmn data volume 1
+    value: {get_resource: mmn_data_volume_1}
+              
+  mmn_arch_volume_id_2:
+    description: msp mn arch volume 2
+    value: {get_resource: mmn_arch_volume_2}
+         
+  mmn_backup_volume_id_3:
+    description: msp mn backup volume 3
+    value: {get_resource: mmn_backup_volume_3}
+               
+  mmn_misc_volume_id_4:
+    description: msp mn volume 4
+    value: {get_resource: mmn_misc_volume_4}
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_vmt.env b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_vmt.env
new file mode 100644
index 0000000..0f0e6da
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_vmt.env
@@ -0,0 +1,17 @@
+parameters:
+  cinder_delete_on_termination_false: 
+  cinder_delete_on_termination_true: 
+  oam_protected_net_name: 
+  sec_grp_msp_id: 
+  vf_module_id: 
+  vmt_block_device_names: 
+  vmt_flavor_name: 
+  vmt_name_0: 
+  vmt_oam_protected_ip_0: 
+  vmt_volume_image_name_0: 
+  vmt_volume_image_name_1: 
+  vmt_volume_name_0: 
+  vmt_volume_name_1: 
+  vmt_volume_size_0: 
+  vmt_volume_size_1: 
+  vnf_id: 
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_vmt.yaml b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_vmt.yaml
new file mode 100644
index 0000000..2e04c61
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/pxmc_vmt.yaml
@@ -0,0 +1,128 @@
+heat_template_version: 2015-04-30
+
+description: HOT creates Nimbus MSP VMT stack under MobiSupport Tenant
+
+parameters:
+  vmt_name_0:
+    type: string
+    label: MSP VMT server names
+    description: name of the MSP VMT instances
+#  vmt_image_name:
+#    type: string
+#    label: MSP VMT image name
+#    description: MSP VMT image name
+  vmt_flavor_name:
+    type: string
+    label: MSP VMT flavor name
+    description: MSP VMT flavor name
+#  availability_zone_0:
+#    type: string
+#    label: MSP VMT availability zones
+#    description: MSP VMT availability zones
+  sec_grp_msp_id:
+    type: string
+    label: security group id
+    description: the id of security group
+  vmt_oam_protected_ip_0:
+    type: string
+    label: MSP VMT OAM IP Addresses
+    description: MSP VMT OAM IP Addresses
+  oam_protected_net_name:
+    type: string
+    label: MSP VMT OAM net name
+    description: MSP VMT OAM net name
+  vmt_block_device_names:
+    type: comma_delimited_list
+    label: MSP VMT Block Device Names
+    description: MSP VMT Block Device Names
+  vmt_volume_name_0:
+    type: string
+    label: Mobisupport MSP VMT Cinder Volume names
+    description: Mobisupport MSP VMT Cinder Volume names
+  vmt_volume_name_1:
+    type: string
+    label: Mobisupport MSP VMT Cinder Volume names
+    description: Mobisupport MSP VMT Cinder Volume names
+  vmt_volume_size_0:
+    type: number
+    label: Mobisupport MSP VMT Cinder Volume sizes
+    description: Mobisupport MSP VMT Cinder Volume sizes
+  vmt_volume_size_1:
+    type: number
+    label: Mobisupport MSP VMT Cinder Volume sizes
+    description: Mobisupport MSP VMT Cinder Volume sizes
+  vmt_volume_image_name_0:
+    type: string
+    label: Mobisupport MSP VMT VDA Cinder Volume image name
+    description: Mobisupport MSP VMT VDA Cinder Volume image name
+  vmt_volume_image_name_1:
+    type: string
+    label: Mobisupport MSP VMT VDB Cinder Volume image name
+    description: Mobisupport MSP VMT VDB Cinder Volume image name
+  cinder_delete_on_termination_true:
+    type: boolean
+    description: delete cinder volume upon instances termination
+  cinder_delete_on_termination_false:
+    type: boolean
+    description: keep cinder volume upon instances termination
+  vnf_id:
+    type: string
+    label: MSP VMT VNF ID
+    description: MSP VMT VNF ID
+  vf_module_id:
+    type: string
+    description:  Unique ID for this VF Module instance
+
+resources:
+################ Cinder Volumes ##############################
+  vmt_volume_0:
+    type: OS::Cinder::Volume
+    properties:
+      name: {get_param: vmt_volume_name_0}
+      size: {get_param: vmt_volume_size_0}
+      image: {get_param: vmt_volume_image_name_0}
+
+  vmt_volume_1:
+    type: OS::Cinder::Volume
+    properties:
+      name: {get_param: vmt_volume_name_1}
+      size: {get_param: vmt_volume_size_1}
+      image: {get_param: vmt_volume_image_name_1}
+
+################ Ports ##############################
+  vmt_oam_protected_0_port:
+    type: OS::Neutron::Port
+    properties:
+      network: {get_param: oam_protected_net_name}
+      fixed_ips: [{"ip_address": {get_param: vmt_oam_protected_ip_0}}]
+      security_groups: [{get_param: sec_grp_msp_id}]
+      replacement_policy: AUTO
+
+################### Servers #########################
+  vmt_zrdm5bpxmc02vmt_0:
+    type: OS::Nova::Server
+    properties:
+      name: {get_param: vmt_name_0}
+#      image: {get_param:  vmt_image_name}
+      flavor: {get_param: vmt_flavor_name}
+#      availability_zone: {get_param: availability_zone_0}
+      block_device_mapping_v2: 
+        - device_name: {get_param: [vmt_block_device_names, 0]}
+          volume_id: {get_resource: vmt_volume_0}
+          delete_on_termination: {get_param: cinder_delete_on_termination_true}
+          boot_index: 0
+        - device_name: {get_param: [vmt_block_device_names, 1]}
+          volume_id: {get_resource: vmt_volume_1}
+          delete_on_termination: {get_param: cinder_delete_on_termination_true}
+          boot_index: -1
+      networks:
+        - port: {get_resource: vmt_oam_protected_0_port}
+      config_drive: "True"
+      user_data_format: RAW
+      user_data:
+        get_file: user_data_zrdm5bpxmc02vmt001.txt
+
+      metadata:
+        vnf_id: {get_param: vnf_id}
+        vf_module_id {get_param: vf_module_id}
+        "evacuation_policy": "Evacuation"
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/service-VfZrdm5bpxmc02092017Service-csar.csar b/asdc-controller/src/test/resources/resource-examples/multipleModules/service-VfZrdm5bpxmc02092017Service-csar.csar
new file mode 100644
index 0000000..69b1c23
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/service-VfZrdm5bpxmc02092017Service-csar.csar
Binary files differ
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/testStructure.json b/asdc-controller/src/test/resources/resource-examples/multipleModules/testStructure.json
new file mode 100644
index 0000000..0dd1193
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/testStructure.json
@@ -0,0 +1,217 @@
+{
+    "distributionID": "a2872f55-8628-4486-8548-7b132c9a47db",
+    "serviceName": "Vf zrdm5bpxmc02092017-Service",
+    "serviceVersion": "1.0",
+    "serviceUUID": "bad955c3-29b2-4a27-932e-28e942cc6480",
+    "serviceInvariantUUID": "b16a9398-ffa3-4041-b78c-2956b8ad9c7b",
+    "serviceDescription": "Demo",
+    "serviceArtifacts": [
+        {
+            "artifactName": "service-VfZrdm5bpxmc02092017Service-csar.csar",
+            "artifactVersion": "1",
+            "artifactType": "TOSCA_CSAR",
+            "artifactDescription": "TOSCA definition package of the asset",
+            "artifactTimeout": "0",
+            "artifactURL": "service-VfZrdm5bpxmc02092017Service-csar.csar",
+            "artifactUUID": "396cfd49-0f4b-4fec-9f33-0fd7e90d5a22",
+            "artifactChecksum": "MWQ3Y2FmMWExNDQyYWI2N2YwNjEwZGUzN2IzMzI3NjE="
+        }
+    ],
+    "resources": [
+        {
+            "resourceInstanceName": "Vf zrdm5bpxmc02092017-VF 0",
+            "resourceCustomizationUUID": "96c23a4a-6887-4b2c-9cce-1e4ea35eaade",
+            "resourceInvariantUUID": "23122c9b-dd7f-483f-bf0a-e069303db2f7",
+            "resourceName": "Vf zrdm5bpxmc02092017-VF",
+            "resourceType": "VF",
+            "resourceUUID": "14ba5d1e-3862-407c-a236-1cbaebccce77",
+            "resourceVersion": "1.0",
+            "category": "Generic",
+            "subCategory": "Network Elements",
+            "artifacts": [
+                {
+                    "artifactName": "pxmc_mmn_volume.env",
+                    "artifactVersion": "2",
+                    "artifactType": "HEAT_ENV",
+                    "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                    "artifactTimeout": "0",
+                    "artifactURL": "pxmc_mmn_volume.env",
+                    "artifactUUID": "c1ae6284-48d9-4437-a195-b2cf2ba23070",
+                    "artifactChecksum": "NmEyZjc1Y2UwZDMwYjFhNGRlMTMzN2JhNzdiMThjMGU="
+                },
+                {
+                    "artifactName": "pxmc_base.env",
+                    "artifactVersion": "2",
+                    "artifactType": "HEAT_ENV",
+                    "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                    "artifactTimeout": "0",
+                    "artifactURL": "pxmc_base.env",
+                    "artifactUUID": "6dd99c31-c52e-4c45-b99b-d223c877a296",
+                    "artifactChecksum": "OGM2MWIzZTA2OTc5YjQwNTM1NGVhODA0YTFkNzM4ZTg="
+                },
+                {
+                    "artifactName": "vfzrdm5bpxmc02092017vf0_modules.json",
+                    "artifactVersion": "1",
+                    "artifactType": "VF_MODULES_METADATA",
+                    "artifactDescription": "Auto-generated VF Modules information artifact",
+                    "artifactTimeout": "0",
+                    "artifactURL": "vfzrdm5bpxmc02092017vf0_modules.json",
+                    "artifactUUID": "e3b82cd6-485e-4d56-8d2c-17ccf6a59533",
+                    "artifactChecksum": "MjY0NzcxMjJkZGI4YzQ1MDU2NjhkNWYyM2IwNmYzYmU="
+                },
+                {
+                    "artifactName": "pxmc_vmt.yaml",
+                    "artifactVersion": "1",
+                    "artifactType": "HEAT",
+                    "artifactDescription": "created from csar",
+                    "artifactTimeout": "120",
+                    "artifactURL": "pxmc_vmt.yaml",
+                    "artifactUUID": "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+                    "artifactChecksum": "ODE0YTRiYzc2YzkxOTliZjJhNjc0M2RhMWU4M2VlZmE=",
+                    "generatedArtifact": {
+                        "artifactInfo": {
+                            "artifactName": "pxmc_vmt.env",
+                            "artifactVersion": "2",
+                            "artifactType": "HEAT_ENV",
+                            "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                            "artifactTimeout": "0",
+                            "artifactURL": "pxmc_vmt.env",
+                            "artifactUUID": "bc1640f1-69f0-4760-8fc3-3318ec2ff129",
+                            "artifactChecksum": "MjdkYzY5ZGU0ZTlkZDlhNzI2ZGVhMjk1ODVhZTg1NTY="
+                        }
+                    },
+                    "relatedArtifacts": [{
+                        "artifactInfo": {
+                            "artifactName": "user_data_zrdm5bpxmc02vmt001.txt",
+                            "artifactVersion": "1",
+                            "artifactType": "HEAT_ARTIFACT",
+                            "artifactDescription": "created from csar",
+                            "artifactTimeout": "0",
+                            "artifactURL": "user_data_zrdm5bpxmc02vmt001.txt",
+                            "artifactUUID": "53acdabe-689f-45e5-8578-f1514d3529da",
+                            "artifactChecksum": "MzJmZjgyZWYwOTBjMTg5M2ExNWZhMmMwNzc1NWY1YjQ="
+                        }
+                    }]
+                },
+                {
+                    "artifactName": "pxmc_mmn.yaml",
+                    "artifactVersion": "1",
+                    "artifactType": "HEAT",
+                    "artifactDescription": "created from csar",
+                    "artifactTimeout": "120",
+                    "artifactURL": "pxmc_mmn.yaml",
+                    "artifactUUID": "b8bca13b-811f-44ab-9d27-45b842c664d8",
+                    "artifactChecksum": "YmNiYTU5YTM4ODVhYTlhODc5NGMwNWZkZjI5MTRmNTE=",
+                    "generatedArtifact": {
+                        "artifactInfo": {
+                            "artifactName": "pxmc_mmn.env",
+                            "artifactVersion": "2",
+                            "artifactType": "HEAT_ENV",
+                            "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                            "artifactTimeout": "0",
+                            "artifactURL": "pxmc_mmn.env",
+                            "artifactUUID": "e88ce0b9-1496-4d03-ab1d-6d8d79bfc737",
+                            "artifactChecksum": "ZGI1NzI2Y2FmYjFhOTM2ZDYwNzg1YWRhZjBmMTk2OTQ="
+                        }
+                    },
+                    "relatedArtifacts": [{
+                        "artifactInfo": {
+                            "artifactName": "user_data_zrdm5bpxmc02mmn001.txt",
+                            "artifactVersion": "1",
+                            "artifactType": "HEAT_ARTIFACT",
+                            "artifactDescription": "created from csar",
+                            "artifactTimeout": "0",
+                            "artifactURL": "user_data_zrdm5bpxmc02mmn001.txt",
+                            "artifactUUID": "5bc62c72-5f7a-40bc-a167-1a4fed9afdef",
+                            "artifactChecksum": "OTMxMjk5Mzc1YmIxMzRlYmRlZWJhMjg0MWQ4YTI1NWU="
+                        }
+                    }]
+                },
+                {
+                    "artifactName": "pxmc_mmn.env",
+                    "artifactVersion": "2",
+                    "artifactType": "HEAT_ENV",
+                    "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                    "artifactTimeout": "0",
+                    "artifactURL": "pxmc_mmn.env",
+                    "artifactUUID": "e88ce0b9-1496-4d03-ab1d-6d8d79bfc737",
+                    "artifactChecksum": "ZGI1NzI2Y2FmYjFhOTM2ZDYwNzg1YWRhZjBmMTk2OTQ="
+                },
+                {
+                    "artifactName": "pxmc_vmt.env",
+                    "artifactVersion": "2",
+                    "artifactType": "HEAT_ENV",
+                    "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                    "artifactTimeout": "0",
+                    "artifactURL": "pxmc_vmt.env",
+                    "artifactUUID": "bc1640f1-69f0-4760-8fc3-3318ec2ff129",
+                    "artifactChecksum": "MjdkYzY5ZGU0ZTlkZDlhNzI2ZGVhMjk1ODVhZTg1NTY="
+                },
+                {
+                    "artifactName": "user_data_zrdm5bpxmc02mmn001.txt",
+                    "artifactVersion": "1",
+                    "artifactType": "HEAT_ARTIFACT",
+                    "artifactDescription": "created from csar",
+                    "artifactTimeout": "0",
+                    "artifactURL": "user_data_zrdm5bpxmc02mmn001.txt",
+                    "artifactUUID": "5bc62c72-5f7a-40bc-a167-1a4fed9afdef",
+                    "artifactChecksum": "OTMxMjk5Mzc1YmIxMzRlYmRlZWJhMjg0MWQ4YTI1NWU="
+                },
+                {
+                    "artifactName": "pxmc_base.yaml",
+                    "artifactVersion": "1",
+                    "artifactType": "HEAT",
+                    "artifactDescription": "created from csar",
+                    "artifactTimeout": "120",
+                    "artifactURL": "pxmc_base.yaml",
+                    "artifactUUID": "7e7f7356-11bd-4f2f-bbbc-5c10954e3189",
+                    "artifactChecksum": "YThkNGFhZjAwNmM4NzMzODc0YzNhYTUxOTljNGQwNmM=",
+                    "generatedArtifact": {
+                        "artifactInfo": {
+                            "artifactName": "pxmc_base.env",
+                            "artifactVersion": "2",
+                            "artifactType": "HEAT_ENV",
+                            "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                            "artifactTimeout": "0",
+                            "artifactURL": "pxmc_base.env",
+                            "artifactUUID": "6dd99c31-c52e-4c45-b99b-d223c877a296",
+                            "artifactChecksum": "OGM2MWIzZTA2OTc5YjQwNTM1NGVhODA0YTFkNzM4ZTg="
+                        }
+                    }
+                },
+                {
+                    "artifactName": "user_data_zrdm5bpxmc02vmt001.txt",
+                    "artifactVersion": "1",
+                    "artifactType": "HEAT_ARTIFACT",
+                    "artifactDescription": "created from csar",
+                    "artifactTimeout": "0",
+                    "artifactURL": "user_data_zrdm5bpxmc02vmt001.txt",
+                    "artifactUUID": "53acdabe-689f-45e5-8578-f1514d3529da",
+                    "artifactChecksum": "MzJmZjgyZWYwOTBjMTg5M2ExNWZhMmMwNzc1NWY1YjQ="
+                },
+                {
+                    "artifactName": "pxmc_mmn_volume.yaml",
+                    "artifactVersion": "2",
+                    "artifactType": "HEAT_VOL",
+                    "artifactDescription": "created from csar",
+                    "artifactTimeout": "120",
+                    "artifactURL": "pxmc_mmn_volume.yaml",
+                    "artifactUUID": "2f372a02-df1b-46ca-b81e-822e3f406965",
+                    "artifactChecksum": "MzA5MGY5ODQ0NDY5MDhiMDM3YjFlNGIwNzJkNjFhOTI=",
+                    "generatedArtifact": {
+                        "artifactInfo": {
+                            "artifactName": "pxmc_mmn_volume.env",
+                            "artifactVersion": "2",
+                            "artifactType": "HEAT_ENV",
+                            "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                            "artifactTimeout": "0",
+                            "artifactURL": "pxmc_mmn_volume.env",
+                            "artifactUUID": "c1ae6284-48d9-4437-a195-b2cf2ba23070",
+                            "artifactChecksum": "NmEyZjc1Y2UwZDMwYjFhNGRlMTMzN2JhNzdiMThjMGU="
+                        }
+                    }
+                }
+            ]
+        }
+    ]
+}
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/user_data_zrdm5bpxmc02mmn001.txt b/asdc-controller/src/test/resources/resource-examples/multipleModules/user_data_zrdm5bpxmc02mmn001.txt
new file mode 100644
index 0000000..93a8ab9
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/user_data_zrdm5bpxmc02mmn001.txt
@@ -0,0 +1,412 @@
+#cloud-config
+# \hbrief   cloud-init main template for MSP config
+# \hversion 0.0.11
+# \hdate    2016-05-09
+# \brief   cloud-init template for MSP config
+# \version 0.2.57
+# \date    2016-09-19
+# Configuration created for MSP SLES_12 MMN
+
+chpasswd:
+ list: |
+  root:Ericsson
+  miepadm:miep1234
+
+ expire: False
+
+users:
+
+bootcmd:
+
+ - [ sh, -xc, "echo \"#################################################################\" > /etc/issue.ci" ]
+ - [ sh, -xc, "echo \"#                                                               #\" >> /etc/issue.ci" ]
+ - [ sh, -xc, "echo \"#     * * *  Cloud-init configuration is in progress  * * *     #\" >> /etc/issue.ci" ]
+ - [ sh, -xc, "echo \"#                                                               #\" >> /etc/issue.ci" ]
+ - [ sh, -xc, "echo \"#     The system will reboot shortly and then be accessible     #\" >> /etc/issue.ci" ]
+ - [ sh, -xc, "echo \"#                                                               #\" >> /etc/issue.ci" ]
+ - [ sh, -xc, "echo \"#################################################################\" >> /etc/issue.ci" ]
+ - [ sh, -xc, "if [ -f /etc/issue.orig ]; then cp /etc/issue.orig /etc/issue; fi" ]
+ - [ sh, -xc, "if [ ! -f /etc/issue.orig ]; then cp /etc/issue /etc/issue.orig; cp /etc/issue.ci /etc/issue; fi" ]
+ - [ sh, -xc, "/bin/sed -i 's/^DHCLIENT_SET_DEFAULT_ROUTE=\"yes\".*/DHCLIENT_SET_DEFAULT_ROUTE=\"no\"/' /etc/sysconfig/network/dhcp" ]
+ - [ sh, -xc, "/bin/sed -i 's/^NETCONFIG_DNS_POLICY=.*/NETCONFIG_DNS_POLICY=\"STATIC\"/' /etc/sysconfig/network/config" ]
+
+runcmd:
+ - [ sh, -xc, "chage -M 99999 root;rm -f /etc/shadow-" ]
+ - [ sh, -xc, "chage -M 99999 miepadm;rm -f /etc/shadow-" ]
+ - [ sh, -xc, "sed -i 's/^GRUB_TIMEOUT.*/GRUB_TIMEOUT=0/' /etc/default/grub" ]
+ - [ sh, -xc, "echo GRUB_FORCE_HIDDEN_MENU=true >> /etc/default/grub" ]
+ - [ sh, -xc, "/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg" ]
+ - [ sh, -xc, "sed -i 's/^.*:.*/admin:6041A28W2rLq6/' /opt/miep/tools/lighttpd/lighttpd_auth.properties" ]
+ - [ sh, -xc, "sed -i 's/^.*=.*/admin=709e17d2a62751a051fa2072f0976334/' /opt/miep/register/conf/auth.properties" ]
+ - [ sh, -xc, "sed -i 's/kernel\\.unknown_nmi_panic.*//' /etc/sysctl.conf" ]
+ - [ sh, -xc, "sed -i 's/kernel\\.panic_on_unrecovered_nmi.*//' /etc/sysctl.conf" ]
+ - [ sh, -xc, "echo \"  kernel.unknown_nmi_panic=1\n kernel.panic_on_unrecovered_nmi=1\n\n\" >> /etc/sysctl.conf" ]
+ - [ sh, -xc, "sed -i 's/^\\(IRQBALANCE_ARGS=\\).*$/\\1\"--hintpolicy ignore\"/' /etc/sysconfig/irqbalance" ]
+ - [ sh, -xc, "sed -i 's/^ListenAddress.*/ListenAddress 107.112.138.70/' /etc/ssh/sshd_config" ]
+ - [ sh, -xc, "sed -i 's/^ClientAliveCountMax.*/ClientAliveCountMax '0'/g' /etc/ssh/sshd_config" ]
+ - [ sh, -xc, "sed -i 's/^PermitRootLogin.*/PermitRootLogin 'no'/g' /etc/ssh/sshd_config" ]
+ - [ sh, -xc, "sed -i 's/^#UseDNS.*/UseDNS 'no'/g' /etc/ssh/sshd_config" ]
+ - [ sh, -xc, "echo auth       optional     pam_faildelay.so delay=5000000  >> /etc/pam.d/sshd" ]
+ - [ sh, -xc, "echo trap2sink 127.0.0.1 >> /etc/snmp/snmpd.conf" ]
+ - [ sh, -xc, "sed -i 's/^agentaddress.*/agentaddress 107.112.138.70/' /etc/snmp/snmpd.conf" ]
+ - [ sh, -xc, "sed -i 's/^    IP=.*/    IP=\"107.112.138.70\"/' /opt/miep/snmp/tools/agentmonitor.sh" ]
+ - [ sh, -xc, "sed -i 's/^    SNMPCOMMUNITY=.*/    SNMPCOMMUNITY=\"SNOS-PE\"/' /opt/miep/snmp/tools/agentmonitor.sh" ]
+ - [ sh, -xc, "sed -i 's/^    IP=.*/    IP=\"107.112.138.70\"/' /opt/miep/snmp/tools/agentmonitor_sle12.sh" ]
+ - [ sh, -xc, "sed -i 's/^    SNMPCOMMUNITY=.*/    SNMPCOMMUNITY=\"SNOS-PE\"/' /opt/miep/snmp/tools/agentmonitor_sle12.sh" ]
+ - [ sh, -xc, "/sbin/yast2 dns edit nameserver1=155.165.194.100" ]
+ - [ sh, -xc, "/usr/sbin/wicked ifdown all; /usr/sbin/wicked ifup --timeout 60 eth0; /usr/sbin/wicked ifup --timeout 60 all" ]
+ - [ sh, -xc, "mkdir -p /opt/miep/tools" ]
+ - [ sh, -xc, "wget --directory-prefix=/opt/miep/tools http://107.112.138.71/miit/zrdm5bpxtc02/custom-files/zrdm5bpxtc02/AttMspCust.tgz" ]
+ - [ sh, -xc, "export TERM=vt220 ; yast keyboard set layout=english-us" ]
+ - [ sh, -xc, "sed -i 's/YPSAddress.*/YPSAddress\"\tvalue=\"https:\\/\\/yps.ericsson.net\\/YPServer\" \\/>/' /opt/miep/etc/license/SentinelCloudRuntime.properties" ]
+
+ - [ sh, -xc, "umask 027 ; /opt/miep/tools/mnsetup/initmn.sh firstinstall 2>&1 | tee /opt/miep/tools/mnsetup/firstinstall.log" ]
+ - [ sh, -xc, "chown root:root /opt/miep/tools/AttMspCust.tgz" ]
+ - [ sh, -xc, "chmod 440 /opt/miep/tools/AttMspCust.tgz" ]
+ - [ sh, -xc, "mkdir -p /opt/miep/tools/AttMspCust" ]
+ - [ sh, -xc, "chown root:root /opt/miep/tools/AttMspCust" ]
+ - [ sh, -xc, "tar xfz /opt/miep/tools/AttMspCust.tgz -C /opt/miep/tools/AttMspCust" ]
+ - [ sh, -xc, "/opt/miep/tools/AttMspCust/CloudInit/cloudCron.sh 107.112.138.71" ]
+ - [ sh, -xc, "mkdir -p /opt/miep/etc/certs/manifest/ca/" ]
+ - [ sh, -xc, "chown -R miepadm:miepgrp /opt/miep/etc/certs/manifest/" ]
+ - [ sh, -xc, "mkdir -p /opt/miep/etc/certs/origin_server_ssl/server_cert" ]
+ - [ sh, -xc, "chown -R miepadm:miepgrp /opt/miep/etc/certs/origin_server_ssl/server_cert" ]
+ - [ sh, -xc, "sed -i 's/KexAlgorithms/#KexAlgorithms/g' /etc/ssh/sshd_config" ]
+ - [ sh, -xc, "wget --directory-prefix=/opt/miep/tools/AttMspCust/CloudInit/msacerts -e robots=off  -r -l1 --no-parent -R '*html*' http://107.112.138.71/miit/zrdm5bpxtc02/custom-files/zrdm5bpxtc02/msacerts" ]
+ - [ sh, -xc, "mv /opt/miep/tools/AttMspCust/CloudInit/msacerts/107.112.138.71/miit/zrdm5bpxtc02/custom-files/zrdm5bpxtc02/msacerts/* /opt/miep/tools/AttMspCust/CloudInit/msacerts/" ]
+ - [ sh, -xc, "mv /opt/miep/tools/AttMspCust/CloudInit/msacerts/keystore* /opt/miep/tools/AttMspCust/CloudInit/msacerts/.keystore_`hostname`_gno" ]
+ - [ sh, -xc, "rm -rf /opt/miep/tools/AttMspCust/CloudInit/msacerts/107.112.138.71" ]
+ - [ sh, -xc, "sed -i 's/PASS_MAX_DAYS   60/PASS_MAX_DAYS   99999/' /etc/login.defs" ]
+ - [ sh, -xc, "sleep 61s" ]
+ - [ sh, -xc, "mkdir -p /usr/java/default/bin/ && ln -s /usr/bin/java /usr/java/default/bin/" ]
+
+timezone: 'PST8PDT'
+
+write_files:
+ - content: |
+    H4sIANk1vFkAA41Sy27bMBC88ysW8TViKaWNC92MAkV9KOIi+QFKWllE+RBIyo9+fZeW7DqxDHR10c4OZ3aXXEDnQgxwjrdOBWiVRmgw1F5VGECCHUyFHlx7YltpMIsuk03jMQS2gPdhZN8ruyUd5yF2CG/fNp/WGwhDFY4houEA6whkZEhNH28EhoANyAiVcxGiMvgI+w4tWAfJGwL6HXpqzCP4wVoy4zciLxaCkVrD6BkeqZXzbLW0UOHooyyVZZOGkzciD8mvebi2TU6vRxvloWQL+l9vstW4CIDvg9bZr0Fq1Spssh/TsgBeO+fjJadzLC+WXNCXT07a1VKn7V7ybcoYOYQeayU1Oe2eYVo6BlaW+exJ1e+esytwyl1fyfo3Yy0KUZbiimaRbNr2Cja1DLH32KpDKhTJ6lSgfVpHL2NCiwvq3RDpSib86YKfXhdLU2QzAS+rn2msz7A6jzXLo3WJJc/zgudPX/lSAPzxjflS9QdTi8IYK0TO97Lf7rlxFd1w3zmLnAabY85hmZPmHn5PeWS8b+2D+M7E/2xtZM5ht639w+8pjwzG/gJrL8X/3wMAAA==
+   path: /etc/hosts
+   owner: root:root
+   permissions: '0644'
+   encoding: 'gzip+base64'
+ - content: |
+    ################################################################################
+    ## /etc/ntp.conf
+    ##
+    ## Sample NTP configuration file.
+    ## See package 'ntp-doc' for documentation, Mini-HOWTO and FAQ.
+    ## Copyright (c) 1998 S.u.S.E. GmbH Fuerth, Germany.
+    ##
+    ## Author: Michael Andres,  <ma@suse.de>
+    ##         Michael Skibbe,  <mskibbe@suse.de>
+    ##
+    ################################################################################
+    
+    ##
+    ## Radio and modem clocks by convention have addresses in the 
+    ## form 127.127.t.u, where t is the clock type and u is a unit 
+    ## number in the range 0-3. 
+    ##
+    ## Most of these clocks require support in the form of a 
+    ## serial port or special bus peripheral. The particular  
+    ## device is normally specified by adding a soft link 
+    ## /dev/device-u to the particular hardware device involved, 
+    ## where u correspond to the unit number above. 
+    ## 
+    ## Generic DCF77 clock on serial port (Conrad DCF77)
+    ## Address:     127.127.8.u
+    ## Serial Port: /dev/refclock-u
+    ##  
+    ## (create soft link /dev/refclock-0 to the particular ttyS?)
+    ##
+    # server 127.127.8.0 mode 5 prefer
+    server 135.144.38.211 prefer
+    server 155.165.201.253 prefer
+    
+    ##
+    ## Undisciplined Local Clock. This is a fake driver intended for backup
+    ## and when no outside source of synchronized time is available.
+    ##
+    server 127.127.1.0              # local clock (LCL)
+    fudge  127.127.1.0 stratum 10   # LCL is unsynchronized
+    
+    ##
+    ## Add external Servers using
+    ## # rcntp addserver <yourserver>
+    ## 
+    
+    ##
+    ## Miscellaneous stuff
+    ##
+    
+    driftfile /var/lib/ntp/drift/ntp.drift # path for drift file
+    
+    logfile   /var/log/ntp          # alternate log file
+    # logconfig =syncstatus + sysevents
+    # logconfig =all
+    
+    # statsdir /tmp/                # directory for statistics files
+    # filegen peerstats  file peerstats  type day enable
+    # filegen loopstats  file loopstats  type day enable
+    # filegen clockstats file clockstats type day enable
+    
+    #
+    # Authentication stuff
+    #
+    keys /etc/ntp.keys              # path for keys file
+    trustedkey 1                    # define trusted keys
+    requestkey 1                    # key (7) for accessing server variables
+    controlkey 1
+    
+    #  by default act only as a basic NTP client
+    restrict default kod nomodify notrap nopeer noquery
+    restrict -6 default kod nomodify notrap nopeer noquery
+    #
+    #  allow NTP messages only from the loopback
+    restrict 127.0.0.1
+    restrict  ::1
+   path: /etc/ntp.conf
+   owner: root:root
+   permissions: '0644'
+ - content: |
+    # default <OAM GW> - -
+    default 107.112.136.1 - -
+   path: /etc/sysconfig/network/routes
+   owner: root:root
+   permissions: '0644'
+ - content: |
+    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+    <trapDestCfg xmlns="http://www.ericsson.com/esa">
+        <managerDefinition snmpVersion="v2c" active="yes">
+            <ip>107.239.72.10</ip>
+            <port>162</port>
+            <securityName>v1v2ReadWriteSecName</securityName>
+            <securityLevel>noAuthNoPriv</securityLevel>
+        </managerDefinition>
+        <managerDefinition snmpVersion="v2c" active="yes">
+            <ip>135.207.171.152</ip>
+            <port>162</port>
+            <securityName>v1v2ReadWriteSecName</securityName>
+            <securityLevel>noAuthNoPriv</securityLevel>
+        </managerDefinition>
+    </trapDestCfg>
+   path: /opt/miep/tools/AttMspCust/CloudInit/trapDestCfg.xml
+   owner: root:root
+   permissions: '0755'
+ - content: |
+    [
+    {
+    "networkname": "OAM"
+    },
+    {
+    "networkname": "Internal"
+    },
+    {
+    "networkname": "Access"
+    },
+    {
+    "networkname": "dmz_untrust"
+    },
+    {
+    "networkname": "dmz_trust"
+    },
+    {
+    "networkname": "dmz_trust1"
+    },
+    {
+    "networkname": "dmz_untrust1"
+    },
+    {
+    "networkname": "Internet"
+    },
+    {
+    "networkname": "ControlPlaneSig"
+    },
+    {
+    "networkname": "AccessIngress"
+    },
+    {
+    "networkname": "InternetIngress"
+    }
+    ]
+   path: /opt/miep/init/networknames.json
+   owner: miepadm:miepgrp
+   permissions: '0644'
+ - content: |
+    BOOTPROTO='static'
+    IPADDR='107.112.138.70'
+    BROADCAST='107.112.143.255'
+    NETMASK='255.255.248.0'
+    NETWORK='107.112.136.0'
+    STARTMODE='onboot'
+    DEVICE='eth0'
+    USERCONTROL='no'
+    NAME='OAM'
+    DEFROUTE='yes'
+    CHECK_DUPLICATE_IP='yes'
+    SEND_GRATUITOUS_ARP='yes'
+   path: /etc/sysconfig/network/ifcfg-eth0
+   owner: root:root
+   permissions: '0644'
+ - content: |
+   path: /etc/udev/rules.d/10-local.rules
+   encoding: b64
+   owner: root:root
+   permissions: '0640'
+ - content: |
+    #
+    # VERSION: <Auto generated by 1.0.2.3>
+    #
+    # This file contains the variable definitions to pull RMS Input Files from the PCRF.
+    
+    # The PCRF_PRIMARY variable specifies the Primary IP the MSP should use to connect to the PCRF.
+    
+    PCRF_PRIMARY=107.122.136.120
+    
+    # The PCRF_SECONDARY variable specifies the Secondary IP the MSP should use to connect to the PCRF.
+    
+    PCRF_SECONDARY=107.122.136.121
+    
+    # The PCRF_USER variable specifies the user value to use when performing the secure ftp transfer.
+    
+    PCRF_USER=msp
+    
+    # The PCRF_PASS variable specifies the password value to use when performing the secure ftp transfer.
+    
+    PCRF_PASS=@TTmsp123
+    
+    # The PCRF_DIR variable specifies the directory on the PCRF server where the RMS Input Files are located.
+    # This is the directory the secure ftp transfer will change to before pulling the RPM Input File.
+    
+    PCRF_DIR=/home/msp/downloads
+    
+    # The PCRF_PROMPT variable specifies the sftp prompt string that MSP can expect the PCRF server to
+    # display as a prompt when remotely connecting to the PCRF server using sftp.
+    
+    PCRF_PROMPT=sftp>
+    MSA_GROUP_NAME=
+   path: /appl/rms/cfg/pcrf.cfg
+   owner: root:root
+   permissions: '0755'
+ - content: |
+    #
+    # reserved values
+    #
+    255     local
+    254     main
+    253     default
+    0       unspec
+    #
+    # local
+    #
+    #1      inr.ruhep
+   path: /etc/iproute2/rt_tables
+   owner: root:root
+   permissions: '0644'
+ - content: |
+    ### /etc/resolv.conf file autogenerated by netconfig!
+    #
+    # Before you change this file manually, consider to define the
+    # static DNS configuration using the following variables in the
+    # /etc/sysconfig/network/config file:
+    #     NETCONFIG_DNS_STATIC_SEARCHLIST
+    #     NETCONFIG_DNS_STATIC_SERVERS
+    #     NETCONFIG_DNS_FORWARDER
+    # or disable DNS configuration updates via netconfig by setting:
+    #     NETCONFIG_DNS_POLICY=''
+    #
+    # See also the netconfig(8) manual page and other documentation.
+    #
+    # Note: Manual change of this file disables netconfig too, but
+    # may get lost when this file contains comments or empty lines
+    # only, the netconfig settings are same with settings in this
+    # file and in case of a "netconfig update -f" call.
+    #
+    ### Please remove (at least) this line when you modify the file!
+    nameserver 155.165.194.100
+    nameserver 155.165.201.100
+    search wapgw.mobilephone.net
+    options attempts:1
+    options timeout:6
+   path: /etc/resolv.conf
+   owner: root:root
+   permissions: '0644'
+ - content: |
+    MN_OAM_IPADDR=107.112.138.70
+    SNMP_IPADDR=107.239.72.10
+    SNMP_PORT=162
+    MN_SERVER_GROUPNAME=rdm5b
+    STORAGE_TYPE=CINDER
+    SUPPORT_LANG_LIST={"en":"English"}
+    AUTOSTART=Y
+    AUTODBPATCH=Y
+    PRODUCT=MSP
+    MN_TO_OTHER_NODE_NETWORK=OAM
+   path: /opt/miep/tools/mnsetup/init.properties
+   owner: root:root
+   permissions: '0640'
+ - content: |
+    CAE_PASSWORD=wapwap12
+    MSA_PASSWORD=wapwap12
+    CAPLOG_PASSWORD=wapwap12
+    TRACELOG_PASSWORD=wapwap12
+   path: /opt/miep/tools/mnsetup/init.properties.sec
+   owner: root:root
+   permissions: '0640'
+ - content: |
+    107.112.138.59 zrdm5bpxtc02adm001 zrdm5bpxtc02adm001-oam
+   path: /var/tmp/adm_hosts
+   owner: root:root
+   permissions: '0644'
+ - content: WwogewogICJwYXJlbnQiIDogInJkbTViIiwKICAiZ3JvdXBzIiA6IFsKICAgewogICAgImdyb3VwbmFtZSIgOiAienJkbTVicHh0YzAyIiwKICAgICJkaXNwbGF5bmFtZSIgOiAienJkbTVicHh0YzAyIiwKICAgICJkZXNjcmlwdGlvbiIgOiAienJkbTVicHh0YzAyIgogICB9CiAgXQogfSwKIHsKICAicGFyZW50IiA6ICJ6cmRtNWJweHRjMDIiLAogICJncm91cHMiIDogWwogICB7CiAgICAiZ3JvdXBuYW1lIiA6ICJ6cmRtNWJweHRjMDItVFMiLAogICAgImRpc3BsYXluYW1lIiA6ICJ6cmRtNWJweHRjMDItVFMiLAogICAgImRlc2NyaXB0aW9uIiA6ICJ6cmRtNWJweHRjMDItVFMiCiAgIH0KICBdCiB9Cl0K
+   path: /opt/miep/msaapp/apps/clusteradmin/clusters.json
+   encoding: b64
+   owner: msausr:msagrp
+   permissions: '0640'
+ - content: |
+    . /opt/miep/tools/AttMspCust/CloudInit/helpers.sh
+    cd /opt/miep/tools/msa
+    ./msaconfigctrl.sh -g zrdm5bpxtc02 -m cast set apsLicenseCustomerId '946935'
+    ./msaconfigctrl.sh -g zrdm5bpxtc02 -m cast set apsLicenseUserId 'AT&T_Customer_Test_Lab2_vMSP_Nimbus'
+    ./msaconfigctrl.sh -g zrdm5bpxtc02 -m cast set prsPrefixLookupTable '2606:ae00:af00::/41=64'
+    ./msaconfigctrl.sh -g zrdm5bpxtc02 -m cast set prsDiamRealm 'zrdm5bpxtc02.msp.sd'
+    ./msaconfigctrl.sh -g zrdm5bpxtc02 -m cast set htsHttpClientIpRangesBlacklist '172.26.14.0/25,172.26.17.0/24,107.103.114.0/25,107.103.113.0/25,107.103.112.160/29,107.103.121.0/24,107.103.122.0/24,fd00:2600:2600:100::/64,2606:ae00:b800:3441::/64,2606:ae00:b800:3442::/64'
+    ./msaconfigctrl.sh -g zrdm5bpxtc02 -m cast set attLdapPool_host '172.21.196.7'
+    ./msaconfigctrl.sh -g zrdm5bpxtc02 -m cast set attLdapPool_user 'cn=virNimbusV2L,ou=Users,ou=Administration,o=Cingular'
+    ./msaconfigctrl.sh -g zrdm5bpxtc02 -m cast set attLdapPool_pwd 'MSPLab'
+    ./msaconfigctrl.sh -g zrdm5bpxtc02 -m cast set attLdapPool_secondhost '155.165.172.23'
+    ./msaconfigctrl.sh -g zrdm5bpxtc02 -m cast set attLdapPool_seconduser 'cn=virNimbusV2L,ou=Users,ou=Administration,o=Cingular'
+    ./msaconfigctrl.sh -g zrdm5bpxtc02 -m cast set attLdapPool_secondpwd 'MSPLab'
+    ./msaconfigctrl.sh -g zrdm5bpxtc02 -m cast set idfMspIpAddr ''
+    ./msaconfigctrl.sh -g zrdm5bpxtc02-TS -m cast set prsDiamMessageTimeout 16000
+    ./msaconfigctrl.sh -g zrdm5bpxtc02-TS -m cast set prsDiamSlowPeerAlarmLimit 16000
+    ./msaconfigctrl.sh -g zrdm5bpxtc02-TS -m cast set prsDiameterServerListenerAddressList '0.0.0.0:3868'
+    ./msaconfigctrl.sh -g zrdm5bpxtc02-TS -m cast set ltmi.keyServerUpdateHostList 'zrdm5bpxtc02mts001,zrdm5bpxtc02mts002'
+    ./msaconfigctrl.sh -g zrdm5bpxtc02-TS -m cast set omsNsIntrusionDetection 1
+    ./msaconfigctrl.sh -g zrdm5bpxtc02-TS -m cast set telGroup1FTPTargetServerName zrdm5bpxtc02adm001.wapgw.mobilephone.net
+    $SU -s $BASH - postgres -c "psql -d msa -c \"set search_path = msa,msp; update msp.virtualgateway set externalnodeip='172.26.39.6' where servergrpid= '0' and vgindex= 'VG011'\""
+    $SU -s $BASH - postgres -c "psql -d msa -c \"set search_path = msa,msp; update msp.virtualgateway set servingdestaddrranges='172.26.39.6/32' where servergrpid= '0' and vgindex= 'VG011'\""
+    $SU -s $BASH - postgres -c "psql -d msa -c \"set search_path = msa,msp; update msp.virtualgateway set externalnodeip='fc00:a:a::700' where servergrpid= '0' and vgindex= 'VG013'\""
+    $SU -s $BASH - postgres -c "psql -d msa -c \"set search_path = msa,msp; update msp.virtualgateway set servingdestaddrranges='fc00:a:a::700/128' where servergrpid= '0' and vgindex= 'VG013'\""
+   path: /opt/miep/tools/AttMspCust/CloudInit/install_msa_zone.sh
+   owner: root:root
+   permissions: '0755'
+ - content: |
+    H4sIAJ4ywFkAA6ScTWOiyNPA7/VVclgwshMPz0EEjExAge5GuUUdNUIy2d0kvnz6f1WDCAjo5DlkNpF+Kbrr5VfV7ao/ujAb/VL2xsNGffHfp4Nw9ZfK/vr3ofv813I27mrdv7ebF6G8JY/x0uhNvG53ok+Wyu+76K+v/ifjv1QG//y34cqD4SjDKQ9/dNb3wf5pbLjvX6+92e6d/dCMhx/P64/p9u0/4y3++WPTs9XJrKd2+X77sHs6/Ibjr+G/xtu/P939X8v5z39f4rH9a6Wqm+k6Oq7DXd/V9Z3y9Luz/j+YmCrzj113sI4fuGVPuOXcGd5ve8D2KxZbrs803VN9W8QWD3hvPBn0ss/TPk+g6gFTdTZZKz+xExPcdrmyTP/24gcm3Mfsd3tiFdri3+kkIGcZ+dwyfTF6eFJ7Y4+rVqFRSYKpkpiT7ezoHPnOZbGCEsFlg8bOmmCsux8bnjY2zJ3Ddl8edzkEItKFmUxY0hsLrqRrQCKbloGfh57wbaZoK2qcDuROfJPfyb+pL5j84Ulpb9w0qLASzxfQM5jiW5NEt3isXAyWNsranF/P84TLhNILfKsH3OfuiMU9hynL6DQrEz3L47Swus5Vd8pU25yqvuUpmzFT9hNfTVae0jNpSwH31JbbZlpjXxW6r4jsoSb4cfd1+bnUA9knMHtMgJVtH664nfgr714cl8PeRzS1V2KIv1s9ZxaODtP7yOWqvmKvycfsTRxxG0dMdflUAU1nvHaxLHzHQSh6uEEiSPUAt9Do7x2DHxwjPq0Z1Deu0Qmfo4RJshLCtXjSGwq+d0i9Ad93Mh8uNyMzeZuj2M+hRSJe7ZivB+CC5MphCnOq2NFUFcwX9srHFw/47m7e2b/NAu096uyTRSfZLBQ9Wbwm28W9+zV/AW0775T0oPJKwvV44hRfiysfKz/u4bPNhKs+rALu3T0xkwZhgdob4t6v5DZZPds3zluHSvQ0VaIJvkrgmxqfqvRakQU4wZ1joJE0NKDn551KGC702FNti3ExFqblTGDbx9lrHpR3I5yqFsdXC3Ahrdy4cNLJAHqNDc4zy/eVr+sJ7xVfz1hOXWXeUZNFgnYR4R9TZb+Zbe3VMlYZRy19DtWX5dRB6c6dKwPauOA4qW5BbkyGido2O3XKG1xIZOkO7hgtuCufAXXmew+VyEMj4rRN7NKcba72nnyRrBhPGMc1Q+e8wz74OVw8yLcP38cITPxMyG3du2yhOlsH/SNa7PkZlPeca+gjNugbfFJhxxeRxaweOhRbR8l030SFM7ofqY9M28KVxmdfINyVh3aCTgYlln4iVQNQbLQHdzRV1OKCkXcqxYaJ5QoPd8pXiwpGwQryWS4Divzs5IBoMf0VU6KVbyX0me2pPY/HPUBHaqNnFqwSztIBBrKRx4/FicrSQDZbKbydPHK1c0kqMgeKcFAMcafB0oAr/SIu7NTLTD3gpJ0aWq0tyAExhRaz4iez2eUsU1QqrrhBIPQ0apPKD3Sx6IgDerQYfz4X9z4clqGrPIe9T3zn+o4VCdH1OQIn/fny+x/6gdMvbT8o4T8jU/taDvl6OdxslgNdecbfce28EVjiGE1H6yD01qNBH39+u4OX3+vnqbNevAp0gepHFPpJhJ3mB/0lCvT3aCg+l8NkOwt3659rUH7+fJEP5aiBtQxwts085J8jy/+NHc7vPein0gzdzfxlqYyGdoK/w+9ZqL1FKMEMZ32eeutlJ/lvXpRmaHVo5vmbq2Bb7CheI5QOX0W+DtDMJP7PtZTm7H1edPY89ZOnl372eqUfKY1cJ7hhIfEHlSfSmSUudIcrgMoSuxR4A4rUXMn+rjaMxRDV32L0bGsex6x/cLfYPhZwflBSaXxYREOv3iboM8gMqIqBJ8PCzxbnQWhgVQzIhnJ7obj5pORQWmdkDzXSPCDZSXNgJiQU3iZ+QhjkPqHhPFL4pzU5NSpJUB2M7aFefLMkVZMkkmohM2XHYeaOVvdi5rRhScISMsFtzFQeoLTVgOZaZMZ4h9P1O9ipNmJlEoXM9E/ACnfIkmMfF0nEexPRuBytTj5BuEVM1LmlE+WEBPPwhMjj8WXTbBTuAl9YIkDFOwUbih2ojb7gSeBDISo3eWe5E1VFyj5/UuFSTQeXSkbSlLXzHF+AVd851zYDDYjAs5q0nDy62TMCDNbgqxSZNV0MIkRcV0Xv+zUPxQFBPMHfV2xovThJr0M+EQd/n4e2upC8nQ7gg1oitkw8P+JmvvKobE53TLtVlyqgPmQuvLCVsTZhMSen4iDVVYk+myTfQcioTPcoKolYBLgbGKGsx8vZzhiQbyXuJKQwihyAKMgFRuFYmH/kbEB1qvrwh84GSkryHWcDBW+TOxvUShFizBSo0lcdDzR4nrpXwd2pQSGovF/VO7WiUYLGppCfNEUgMxkFB8PMLmS1nuohf57yJeZaHNV+B1+VB0VjQn1QvZQb0wElmA90lym2jevGw0B3gJkE4O6ECV1nmE9VYQwHMlGJCJlxIIQPlJhR/iUVDieAwgypcvnoVAi+Mavle2xojyl1mjZOAim14co7ONOIErTQQq/EoxVLcGpS822suNv46MpdQyXCbQ9Qkqm6Wcm4KesKHFV6WxKdiM3yhbefbEe78UBnI9N6QrIzR5bLsaMlDNJKPwCfC+6U39sIhB9NYl9nJmZ2qESegotWbvOMoJZaLbDuvctGOweDTRgnXo3DpW0ULPGD8GStCZo20b38HAoPSmHPnQiucZ7EdyLU3pdDEaP4ygypZnE8dca+rAtF0SglQNfuMpk2xqouDA1tw+W+2f/hZD9+rGHajL9TiolPABeF8TRRdVFhrkXqS3uBJoO52V6gyWDO9iKz/vqoTuEQKEUqGspXViao2kiWyKeD+K/JAUPB5yxUExiZ+83pj9TJnhsWZ/PjJJBZTsobw+epfVwOkX4hpHpUZPOEaiqXHdGgyHOdUqXiZGg7NXUYOVtWuCiK+lTo7A0tZTk41S3Q05YKFHLVG6wzq4xklkkZrzR7qLH75rVAq+RoK6jFpo+mzhPfRX7QuEy6Cn7BNwUlrlzWIso7gtu7TGt3aUw1kCfRVFM+fqwr5qXwgaqeWjBu+XrND7oeKFbgo8mjCwDyAaSVmc2bFasks9ZMXA+UTrpDW1hxqQ0UTdo9UrWLCnrvNrfaLDY51+5AMaWjLT+oeGwV18OyI/QLn5S0YM7FlrilkaySwNkPlMRHs61araCapOn3x0c9/VGiMTM1wD9oJyzTR7+IvkAWqxi3eDncXUSunO6glJTXhX6qeBQjeJXqoC5BPxe75f7jdloEJlMVd4LquiW6g/Mqk9+jIl/B/WuuMdOcI0+j2uVzmhQKMRIXNLYMtEQWyChFRc3RYWzMMDGrDCKlEbJOBRW3TttGVTL50NmOuu7W0dzUtZeeFdbh/wkgAyg51MtG5Z2oOwiAyklAmjIF0vv0hlnERkAlrXQuGJsyAShtZZ341f2vbj+UZu8e3e1CcbbOFyeH04BDXPkQ5y0FbeiJ33uHjhO2sfp0NNWxNdqTdgaqODNECcTw/RVfZLsCd64x6owN75hlN6aQSlPO6KTC5eshY8lJWsyzlIuHFzCGymahMq04cgUuLnKFe/IPrgD0xjj7lYZtgwLSytZ8qEjiV11ZioyYVnKqIuvCS3ozqknggoJgjBbTw8VEG2D9HS7m3knVuKkTnefkUkFVrFNcvBg00Mfzjp9klbDN/NVN5OvDRefmd8Y4wjzVRicsa3J37LUXRwHodlYm2kZV0VvKa4XtBVo4zJ9tlhbvLIcZ1TWg0rsrZy1pJkZ1ri4naBdIKaYwAhMzPLP3mJNdrK58bg1I0QonR5cHR3DJjhhUH/aTOEKSI1UfaY7R/3KQTlO9Qe91LEY2yDsdJ7H73/xexOeGTt3gyiS2ERGdNR/2jstHHTbPobdmw2QbhdoxCnSXtmyerkXaobKAuCMr96hJP+FjO8ga3pcb0nEEOVZXsGwnKB/1ZC3ClOcdsn6NvpODiu7ISo/gUOMMmbiWdUJnmEYL0yofDB77XWfrUdy0xriyPD8UvDQkcusuundqI/hR4x6FBCmFj5TWA0ajC1FeNIZUMVX9yVSxMW4UDomMLqo6xdk99ulxpvYGgNxUOLvyagbS8d0jGxGAMStZFY+uJD5BOto5y1X2UWXW4is5yDmogPjaiIsOGh3Fi9KHJbUVAhMzlA5nFrznTl4TJQqRIVVLYArJKRNCRIQJKy8crpY1FpRLIhaiZaYWedRsTFI+UNkunkPaoJykkZe+MGWqTVvR++LNV6nMzEJr+zxMPiMIdmtcSOfk3qsdL+NEhPEjcc4GCLbpGrIOlw6ATibg+6iWK8sDoCa7Bhog6CEdfLI+ujOOFsi7fGuuG0WuSkznm+mM5I2cCuGTl8JMJ0nLbHRQEkrLrBznwvXapPSRaEjhNCU69Fi4jceT8kHrjOgz0DMHpMrxbsxmKlllpS2cG5fMOw2BXI1WknAwkpNiOduu4jKTDsbUMcZbkhDqRRzdsiaY1DuqgyS2xyiM2EelpIaZy1pbWRc4zWru0E8aI1MIfuhj2PtNZ9sH90UXPu+2DN6HW8TVcAvjeZh8jsysvHjoH0YmZogxX4N7XGhUOmzsfG2BAUUZG10UmQ5IGwfqNg8E53dyj92dy2a7sRHfu0ez26xMpXotyHdHZ+Fgopp2IBxm/Q5CeXfM1vK+R12b4vnFxSBZkc9OHetMcbdrbWz095lU6L336bE2mkIAoo7cWq5yXFz3gJb7HmkllFPySiUlhy0+HIN/OGy9Rl35O/uBT/xnJ9Mj0woqGa4VWjrueXadBxNbX2y8QNjp9ZesfgVn3KFoze/Okfvq6UnK4HBTDtFWk4ErRcyt03GP3sF5kcrl1hzlQu7ecwhHein7TnPPt5RbuE8Y3cZIHwNfjMr6QO/oY9qe6QAC96zrGmaaqJ4pvp5yIbUDMxd3W0XCVspHfAZK1i0H6SQLIJEdUlS+HdahNgX4E1iHevCu4eoLUM36QA2t3wzrA539moJLTLAOEAWXQ+tz1uFV8S+OYCqLCTKA8jjxUl3XcNSrg5b6ANs2i08HIlyRA+Mu7KoDpUAPVey3rt3K0typInSPSlCS7mE5aaT7Ghx2LhcUTtuUEn1dp6NmzIc9NTq3K8VYyGHb0AZU7RmZ7hfmUOrizU7mbx4SPJ2477+iDgWc/fusIz4XHY5QgilSuCOePA1QXVByMos7qQvck4uYUn0Zmek+DJVP0NuoXnZzL8AsRh43TfJLR82Uj2oOhSIWRj/VP10BzAzNwQA0oguGtYRfugeSkXoO6sKkmguJnyBvqytOg1uicqCMSA0ZoVcBnSJVC+EX1gJS2EYvZYk4meBuECuWBzNOg9VSPqSYXxVNSubrDMMeVYXb4B1K9P7maot7r0rv7fAOZ3o/WeXlACcELodD8tz4OZRMG2G0v/ZeLUobvVno/jsLl5jtu5xS6ZSrL3JxqI46pEtDcqFSSxz4FP6PpwEqZI9SQdMA2atVK0W4daPjyJS3cwazqZuMwNI3s87HJkJjqVL7bdAOLdR+G7RDC7XfBu3QQu23QTu0UPtt0A4t1H4btEMLtd8G7dBC7bdBO7RQ+23QDg0rnEmSQntfadkpaKH226AdWqj9CrTTLqFk0ELtt0E7rDX3KO+LX1L7bdAOLdR+G7RDC7XfBu3QQu0ZU1+5vQgtt69uuw8BjbevnCNdKDO1JzVbn5p7MeQaoQjb6Nqecb+JUDQ3eEAjigLC5HKZvbQeHvJkoUq+9Q6YlCmyUxnWG2Et4ODl4lZZupHmJdHKe8iGx/dgnO/YC0dcoG/e0Gg4jXeh1Jh193VU30K0mC1yuq5gW372xQVcTE7ZDQaYnTN4yC4rVzqV+oDS/K6no+nLQYnkPqOp//7r1YLTHdIamr+teg6y5nYesXbAtlKbBw3VcTpVrQ50BvUyR7VXxK9/lQJK36W4pFqzcXdSUD9//6LQybnzMB0QBRR2jnWDe3degqYCB92b37vKYmi9RwPdeQ5dBHIEC1P9iobiv3Mif6HiaaE8luf+p/wyhfFiw7wyXl8YJw8GdK2vGc7LTramOK4ZyA/rgysvhdSAebmWX+brxB8Q1dL9qEpZvbY+vfJiUSl2m2qKy3ALfLeyN9wC363sDUze5i8W8yWQtxTBlbuoY+/oZo6sqkMRzEteuIGt4+V71DHXs9dEGT3qyeIF9GMUUnZXQ/StQJ7zOORAXjXxK0BeyDcbgdyT33JoAvJcKrgRyNFSDhmQu/OOliyHyd8zlHjege43gfzMUd8F8pw74btAnvM4fBfIcx6H7wJ5Pil8F8hL57zfAvJ8cPgukOc8Dt8F8nyBoQ3ItVuq6PBdIM/XDL4B5ONSFR2+C+SSx4m94LtAnrM2fBfIcx6H7wJ5zuPwXSDPeRy+C+Q5j+f1qAqQd68Bec7jUAvkInDYFSDPeRxksVt1DbNLVx9vB/Kcx6H7TSDPORu+C+R5W/gukOdsDU1AflFirgB5zuPwB0DO18J0vZFpbWeH7tp+0SeLR/8d0FVl4av7p9XyNILDuaTGPSqphe726aX/OjJ7O4yNH8/T9w3+92t+ca5xiubQetfllqsu0HrX5ZarLnCN7K9edQF516Wv1t91KV11cZDwCvh8MnEoNazedbnlqgtc1OmLd11uueoCrXddbrnqAq13XW656gKtd11uueoCpbsuiMe76n2Xa9dd4Op9l2vXXaD1vgvfZbGjpWoO1Tsvy5fFo/MnVXMo3nl5fA6Xm9HQfl8O9B19o3LRoW9PanHdPZjTNZhivtlyD8Y3EIf1WcfJHQv5FQnvcAO9N8E7upeuc4Qb6L0d3uFM72K0z+g991ajwWzN7nXMN9T3Xy86buHudN6bD1h3L6jx+krNN8x5BK3fMG8AtMo5TsOMzl0QavunrYkE39fcLd81MDdE1Yt1Dfx4mGw9FbX04BxxB7azXEKouTRzSxH8Tv7fOAyz48IxVloQeH89x4AUxj3FWftCsJFh7sdbMvFRZ2QJi22bB3eM8v3qBnHjOy/0P57D7vqUZ42M/7V3Js2JJEkUvr+/0hcWYdY6zEGIpZApQUACgpuEppAAqcusplqIXz8RmWRm7OER2dY2NtaHOhViJ/35889fjHZ8lWI2v2lzUQp7V3OgvMFXPPeAPWXrR8XuaOe5I2T31GZXo+Z4f8OFd5sJVPuXSf/2QtTUqvBuGoxwVaANYBXme77XOm3x3iIH1ZfZBSbtL8f5S8m37+dQlVt5oc0MHWkVtWCu5dvAuq/K9y66iyMn3m9O46/G53jeOE1u+Rv/R/7vNmulkO1eZHJf/vatF/3jPK9WVxxxkVW9oLHhWkog7STAtZTg3Em4OmcrBSm2AVC6amyMTklzhBAo/bcxa5tZa9QWmXSQoPTs6W5VvZl/uRACpRuZdIRA6UbMBSFQugFzGX0iBEo3Yi4w3Gsy73aXg+lu0e4e163j+9OKXQLfl68v35ZfOkpu2M9ysubsa7287abb4XL/tNr8WH91MdysBo2Xx7tjkNUuPAjirHbBaUec1S447SBZ7V9Jry9Z7cLfoLLaW6c/X1ZEq11w2hFntQtOO+KsdsFpR5zVLjjtiLPaBacdgVa7LtpRB1LP7gyxkHoJ3OBBSigyueVp58wpFV1bN2QfRiXbC7d40T6ebZB69uMDGVIff25W4x858S2667j+dX8ryV0FfzM8gMyi47fpgWnqc6LpZcOF12iKQ7GSWEEZz9llLhsGXC5zr8+a1X71sxwMwITAU2iEMmwB9LQFu29PccbPnbvnj/4v9nI7Se/Qysc2Nl1N6jVGrAgvWIM7Oo+R7rKYFquip+lqVp3Tm0aSrplqm3bs4rRvEqcwCO5Ob/rVHbCGfZekfe6aMsGx3i2ZXDTdOUqPnvCGTtJOdzNs/nh+6xat1C7BW3fIw0JGvS17CfZpwcTK3EMW4Xl+3I39jnq6rjaC6Eztt9jFlGnr7Wli9+7bMifWV3WzpK2vymem3gbqG2gS3yr93jP49oIvLzk9UmxiUwoaKXhrOG6k5CDkDjovwu379KZ5n/avRuy7At7Z8X/3WbuUhSFkil769smoC38/KuEOUZ1E7bQiJiRA4tFRAOmn5HxgjYgVSLfy6BCA9MaC10ULkH6r8+jsFz09TdDb0oD0ikfPn+250JWgAukqj86q8SCTTHDf0Hmnh6wAQ/PrXep+sLx9bL6WSR2ZXwtpN/GmofUP6h9pzwqKQ64tPN40RoPun8/D4/7frJKtV53XTWv5n82qUzwYojdIF8Prn0xGdsA05Ovz++Bjs2pyntoJpRuZdIRA6UYmHSFQutGGRwiU/jk2MOmQ/ujM4xiulzMLlK4x6exT2qI9+1yveOSdAUInMehwQegkBh0uCF1wRuwMOlwQetUuOBh0uCB0K4O+EDxsGBS8fkcu7Y3y3lywusn4z/T4vs+u1b0KiyeI9I/1R/csaWwIKt0n0met48d63n3jiYBbvtDwbcwEK9PVfC3C9ke6J6NlMYL709PnFvtGtg98T/MXh9OZQP31QhTssCj236b7Kacy/IIdFsWuz35nlWC/XJ3yixPKq1MsF4O6oPp31AXVE9QF1fuoC6p3UBdUl+Y4cVwM6oLqB9QF1S++vQdUv3JxMagLqj+iBqieq37UBdV34P78lcGfJ3MxqAuqP6AuqL5AXVC92M+KB9Uf4ADV2+Nev+HlYmAH1XMzw8vFQALVmY5kj3wO4mJQPt1YLqbMr54djutirS5IrMOg1sPEOgxqXdbVGoeviHUY1LpXrLNqNfj5wqo3k9MNPD1ujqPB3XHTOp5fvt3l6MpbTluQAHY41Pt0dWqwyvWLm1gv74vd4n358fQ4bmxL2pUbw3CvmBI2TBGh5mUxjwg1L38v4FHzk9S3YYoINS+LeUSoeVnMI0LNy2IeEWpeFvOIUPOymAdRzds3ShFAtZuhdgRQ7eaNUtgFOXGjFLY8GPJGKcrrvia+OzTPug4PM0377b+Sh8mGvgUPcxn8DX7yq9Dz+7JRkntv/+TD/JMP8zfmw3z+D+fD9P66fJhPo4D/P8qHCSDb//qcf3adzFjxFpls1wU8TjQFLwr4HGwfXzZNEUi2tzQBr/FRHmBdB9sRSLbrYDsCyXYdbEcOoSeqILWR7fqzgpVsT3bp8Pq85WcktZPd8v3I1N7vFdFZLosifv00G6YPr0F4FDcno+ayhq+kwgbKkDkZ2I/3oq2kJrCBMuSVVNhAGTInAxsoQ+ZkYANlyJwMbKAMmZOBDZQhczKQdlJjVlIRnAejindo6j10JRXSTmrMSiqkndSYlVSYFb3t4mJYTUU43a6spiJCzVdZMVzMI1fzCftBnfnBdNuv7uppNTs+f3Ewn2LFu3U1xYpHoJLXHxCBSl4X8ghU8vozRKCS14U8ApW8LuQRqOT1Z4tAJa8LeQQq+cqKb18+KeP8IigzBoFKXhfyUENjzm4lr98JrDuqbaIVj0Alb9pjDVPyupBHoJLXhTzKR6cpeV3II1DJZ9K4KQp5BCp59hu6k4U8qEo+tVnxcCr5JsGKR6CS12+HQCWvC/nCp6Uq+VwCjgQhj0Alrwt5FPe6W7aWb/7NUR1sl7kg1Vo7vhzXwl6acd8V4Ta74rIj3GZXXHaE2+yKyw7VZr/EiTqDHCWXHeE2u+Kyo25wY8YF1QpurPjq2ODG/NyHOsGNTE8SoBknMwMKNONkZkCBZpzMDCjQjJOZAQWacTIzsj9pgWa46n3crEZaT86FOighMk6hXvn2sbY7BKV+LG1361NO9QdEBN0uw+2IoNtluB0RdLvOmYfS7TLcrnHmBLpdhtsRQbfLD4oIul2G2325iya6XYbbEUG3y3A7+FMe74PodnM+TAjdLn1SfVjpdvYa12a6XcvJ8dLtTPHvdcVfCHp1vkmh2+XbIIJul+F2RNDtMtyOmic28bzBeic2pdXegenEpoo/10/WLtn8irc3bdCGnb/JSxtpGXbxeUr2068kTbgsSGFfgrXPfsdfV6f725sdE27jEYbHw/1bZWaSzgMRjl5+bMC5+cF+G3wLgOntAz9zsNNjOkPtQaGOHbIO55F9rItB92HBv//NriR9ivN8846HvQ+sIE+ZYuUf39RuaFaChImT9LH5MmLKdvDwxuQthB8Kl0JM3j3O+9fJTI2t0Ef5F12h5E+aD0256yd5H27eU7OsRyTzRadcHJ/ydjGVY/vZ9WHCe2/or5ldI85Xp3Fj+cQ37ycpj6qYsY58cztdJK3kvG1OUj7vyG4n991BwRFlbgRigyPKB0RscESZG1Hq6tDgCFNuc1hwRJkbYcttJkmALDcCscER5bO1zP39wRHlG4zY4IjsGfez85IigyPK3AjEBEdkP7CiA+bnHbTvq30kc+frQnug5N74GFr9hBbo3gof+LCr1t2scZxMF6fvWROXVqeHK/+HgQgKxYytUfPE6N/L+WZCim+4at7zS2Cv/zXujU7ZcZJNODbCrC3TDf/0im1aEFokZ8HJdJTojPI2kdOZ/LjMybTBrswey3WBS+WxFp7ySPLsKs36b9ae9q/n/JTtvKbCGCxlK0LZd0Lov79P2XXy+7Lx+pCqYSKm3W7jmCrPrzZkkeZnbvrbSPbSoFSg/LXzk2my8/QEr/J0lx5MuhOnhFUi9oV6Gaz23D0/NCe9pDFLl0OeqTXeJ+1xmn1C2e0o+7zBexiOnBziHgZihj9SCUDM8Eea/cD1FEl7GIgZ/kizH8QMfwx5QYHDH3nPPWT4czZ9UogZ/kizHxCGP9kPTAAquDAvpOHyAGPiiC3rQXfE9H5TFeaJt2lFHrx3PZ/z46QPg+QxsxMblyPqzf8nFR7U7PQWDQTvMV/WmEcFS4XAEcxgnpxllgoLU8qEKcaif/fKbebFcLB/ag0+NvPLIhz80RWeAgT9NAm5EfP4D4MuLJWoZEMmfHJQXLVN/ReMVJZclcqilH9HlJ4LRdMlAxOlN7vlgSKZxWpEo9kbD8O24GHK3pctJd4j42kNFanTzU78k6doUt8lzXFS1kuyH1N7tvyDW0msXu7O4/6iOTvcsT5qfR6fFx3+JcpuZ7qGqLnNNifUboSC6ITajVAQnVC7EQqiE2o3Qp38AynmA0Qn1G6EguiE2t9QEJ1Qu38JohOaGaHGmA8QnVC7EWrkH9qGa6cYdPvzuRgAsEoGU8CtMsdxAVeDPOffnvZnOvbmTj1HjM/mHthF9hv7+XbTQU6rZS5Pzs/p/ycVIn6drBORx/us2Ii80m4EIW1DCNs462EboPZWVggL9BOCLYUIZuGx9TmC1UeKSEew6ssQ6QjeiudfUBzBKvhWmzTi1uoIjpjK350sjqDMkcY4gtVLLuc4gY6gsJcU6QhWhiAiHUF1jhPuCFalwezL+R3Bqi8jnadmcATN3GCII1gZgoh0BC35UQGOYPVSEeEIbqVPCpGOYGUIItIR5EzM8/Cz9KNIjqAFF5Zyel3VywTgZZc6dX8zvHqhKl+R1QtV+YqsXmiEZEUJ1au12OdRHwh3BpX9RbSualYt2NrlA7VqQXyzoqoWoudYRdUCdY5lrVoQ33l9jsVEaNNTtVDayLFVC8IvMa5qIXqOVVQtRM+x1OtkfNVC9ByrqB+InmOZ+eqYqoXoOZalXkRULUTNsQ7CJ4XoOVZRtRA9xyqqFkLmWMaqpcx5XVWrY65acl5xTNWC2HRFVS2ITVdU1WJ9VjOyal0CDqPmWVJsFoJzs1S3EJRIH6dbCN0uDHQLYS9zRLcQul3ocQurdazcLYRuFwZmi0G3CwPdQuivOdAthH/k4HELEc1N2vxJOjdZuIXwFRuvW4hobrJwCy38Q4BbiGhusni2iOYm7ftZVG6SP+NJ78Z+fjfZLUQMNym5hdDtQoJbKFLfhjxzd+wwexN30owLxslIyIwLpiFX0IwLpiFX0IwLwpBrHRMY8AVCYIA7qh3GrPaQqHb4Bl56pIVSwQzzzcAKBt/Ay1vB4Bt4eedd8A28TPMuKc4evoGXt4LBN/DyVjD4Bl7eCoboXPuigrlzFykVDNG59kUFQ3SufVHBEJ1rr9XNaPKflD/prGCIzrWX5npRufbFHSE617546fANvLwVDL6Bl6P3ysN34D3eytd7wTfw8vZeMFuGAb0XzJZhm957QWq+mt50eb33QtF8Uc7UM1YumJovX++VsXRF5QIN1XBULtBQDUflAg3VcFQumJoveu+VlDxMjcoFGqrhqFygoRqOyoWaJ7I09PMvgiuXyg2GVy7UPJHl+B01T2RJl6h5IkvBgcSfyPLWRc0TWaRz7S+ohqNNNlYunbcPrVxV7kFs5YLQfOXHmTggQ2P/BfeZioT+CyGQobH/QghkaOy/YGvAhP5r5+y/YIMMx+krrf+CsQHb/Nh+zJp5/zXYPw2PvzbzT8vcC3Rcw3xyD/flqLiGcOUWixLouIZl7pVzYiRcwzL3ynMwhMHXsYhSNS+G63MvFIOvlhfXsMy9QMc1Si9fnnuBjmtYLsCg4xqWuRfouIZl7uXg7YkH/4KOa1D4BzeuYZl7gY5rWOZeoOMalrkX6LiGZe5l5mHywVfapxz869w7IB38CzquYZl75dcHefAln6bu672gNV8nP2wo9V6IgQ2l2gJT8xXUe4GOa3TMvRe8g68vT++FqOwLMfoCsYtd5SeIfHbZCl7sKgsSYhe7yr0uiRMLWewq+zIph3NhijaxLHaVrRXUgBBSPohYmBC72FXudSF2sUvbx4k+YMegqwMP2Omh7gE7S9Q9YCc7t7rWATuE/W5fPLdlnkU/YGeAugfsFOepORe7Ws54bkrf7Y7nhtykuRa7pqvTz2qxq9zrkq4PymKXFL50OVlA3z6G1XMyhIgYt49BXz+2bB8LHEhk1h6MNxIbM7X8Cf/3L/wXSFgwha/GAAA=
+   path: /opt/miep/etc/license/Cloud_Entitlement.combine
+   owner: msausr:msagrp
+   permissions: '0755'
+   encoding: 'gzip+base64'
+ - content: |
+    *.* @135.207.171.57:1538
+    *.* @155.165.162.48:1532
+   path: /etc/rsyslog.d/remote.conf
+   owner: root:root
+   permissions: '0600'
+
+scripts_per_once:
+
+power_state:
+ mode: reboot
+ message: Server will reboot now
+ timeout: 5
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/user_data_zrdm5bpxmc02vmt001.txt b/asdc-controller/src/test/resources/resource-examples/multipleModules/user_data_zrdm5bpxmc02vmt001.txt
new file mode 100644
index 0000000..4c8f7c0
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/user_data_zrdm5bpxmc02vmt001.txt
@@ -0,0 +1,289 @@
+#cloud-config
+# \hbrief   cloud-init main template for MSP config
+# \hversion 0.0.11
+# \hdate    2016-05-09
+# \brief   cloud-init template for MSP config
+# \version 0.2.57
+# \date    2016-09-19
+# Configuration created for MSP SLES_12 VMT
+
+chpasswd:
+ list: |
+  root:Ericsson
+  miepadm:miep1234
+
+ expire: False
+
+users:
+
+bootcmd:
+
+ - [ sh, -xc, "echo \"#################################################################\" > /etc/issue.ci" ]
+ - [ sh, -xc, "echo \"#                                                               #\" >> /etc/issue.ci" ]
+ - [ sh, -xc, "echo \"#     * * *  Cloud-init configuration is in progress  * * *     #\" >> /etc/issue.ci" ]
+ - [ sh, -xc, "echo \"#                                                               #\" >> /etc/issue.ci" ]
+ - [ sh, -xc, "echo \"#     The system will reboot shortly and then be accessible     #\" >> /etc/issue.ci" ]
+ - [ sh, -xc, "echo \"#                                                               #\" >> /etc/issue.ci" ]
+ - [ sh, -xc, "echo \"#################################################################\" >> /etc/issue.ci" ]
+ - [ sh, -xc, "if [ -f /etc/issue.orig ]; then cp /etc/issue.orig /etc/issue; fi" ]
+ - [ sh, -xc, "if [ ! -f /etc/issue.orig ]; then cp /etc/issue /etc/issue.orig; cp /etc/issue.ci /etc/issue; fi" ]
+ - [ sh, -xc, "/bin/sed -i 's/^DHCLIENT_SET_DEFAULT_ROUTE=\"yes\".*/DHCLIENT_SET_DEFAULT_ROUTE=\"no\"/' /etc/sysconfig/network/dhcp" ]
+ - [ sh, -xc, "/bin/sed -i 's/^NETCONFIG_DNS_POLICY=.*/NETCONFIG_DNS_POLICY=\"STATIC\"/' /etc/sysconfig/network/config" ]
+
+runcmd:
+ - [ sh, -xc, "chage -M 99999 root;rm -f /etc/shadow-" ]
+ - [ sh, -xc, "chage -M 99999 miepadm;rm -f /etc/shadow-" ]
+ - [ sh, -xc, "sed -i 's/^ListenAddress.*/ListenAddress 107.112.138.71/' /etc/ssh/sshd_config" ]
+ - [ sh, -xc, "sed -i 's/^ClientAliveCountMax.*/ClientAliveCountMax 300/g' /etc/ssh/sshd_config" ]
+ - [ sh, -xc, "sed -i 's/^ClientAliveInterval.*/ClientAliveInterval 10/g' /etc/ssh/sshd_config" ]
+ - [ sh, -xc, "sed -i '/PermitRootLogin/d' /etc/ssh/sshd_config" ]
+ - [ sh, -xc, "echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config" ]
+ - [ sh, -xc, "sed -i '/KexAlgorithms/s/^/# /' /etc/ssh/sshd_config" ]
+ - [ sh, -xc, "mkdir /opt/miep/tools/miit/www/sles" ]
+ - [ sh, -xc, "rm -f /etc/sysconfig/network/ifcfg-eth1" ]
+ - [ sh, -xc, "mkdir /shared_nfs_datastore" ]
+ - [ sh, -xc, "mount -t ext4 /dev/vdb /shared_nfs_datastore" ]
+ - [ sh, -xc, "mkdir -p /shared_nfs_datastore/miit" ]
+ - [ sh, -xc, "cp -pr /opt/miep/tools/miit/* /shared_nfs_datastore/miit" ]
+ - [ sh, -xc, "rm -rf /opt/miep/tools/miit" ]
+ - [ sh, -xc, "rm -f /etc/udev/rules.d/70-persistent-net.rules" ]
+ - [ sh, -xc, "ln -s /shared_nfs_datastore/miit /opt/miep/tools/miit" ]
+ - [ sh, -xc, "chown -R miepadm:miepgrp /shared_nfs_datastore/miit" ]
+ - [ sh, -xc, "chown -R miepadm:miepgrp /opt/miep/tools/miit" ]
+ - [ sh, -xc, "mkdir -p /opt/miep/tools/miit/www/sles" ]
+ - [ sh, -xc, "mount -o loop /shared_nfs_datastore/SLE-12-SP1-Server-DVD-x86_64-GM-DVD1.iso /opt/miep/tools/miit/www/sles" ]
+ - [ sh, -xc, "/usr/bin/zypper ar /opt/miep/tools/miit/www/sles nfsrpms" ]
+ - [ sh, -xc, "/usr/bin/zypper lr" ]
+ - [ sh, -xc, "/usr/bin/zypper --non-interactive install -y nfs-kernel-server" ]
+ - [ sh, -xc, "/usr/bin/zypper --non-interactive install -y expect" ]
+ - [ sh, -xc, "/usr/bin/zypper --non-interactive install -y dos2unix" ]
+ - [ sh, -xc, "echo '//shared_nfs_datastore 107.112.136.0/21(rw,no_root_squash,sync,subtree_check)' >> /etc/exports" ]
+ - [ sh, -xc, "echo '/dev/vdb /shared_nfs_datastore ext4 acl 1 1' >> /etc/fstab" ]
+ - [ sh, -xc, "echo '@reboot /var/tmp/hostnamefix.sh > /var/tmp/hostnamefix.log' | /usr/bin/crontab -u root -" ]
+ - [ sh, -xc, "systemctl enable nfsserver.service" ]
+ - [ sh, -xc, "systemctl enable rpcbind.service" ]
+ - [ sh, -xc, "systemctl enable apache2.service" ]
+ - [ sh, -xc, "chkconfig mount_sles on" ]
+ - [ sh, -xc, "resize2fs /dev/vdb 200G" ]
+ - [ sh, -xc, "sed -i 's/PASS_MAX_DAYS   60/PASS_MAX_DAYS   99999/' /etc/login.defs" ]
+ - [ sh, -xc, "sleep 61s" ]
+ - [ sh, -xc, "su - miepadm -c \"ssh-keygen -t rsa -q -N '' -f ~/.ssh/id_rsa\"" ]
+
+timezone: 'PST8PDT'
+
+write_files:
+ - content: |
+    H4sIANk1vFkAA41Sy27bMBC88ysW8TViKaWNC92MAkV9KOIi+QFKWllE+RBIyo9+fZeW7DqxDHR10c4OZ3aXXEDnQgxwjrdOBWiVRmgw1F5VGECCHUyFHlx7YltpMIsuk03jMQS2gPdhZN8ruyUd5yF2CG/fNp/WGwhDFY4houEA6whkZEhNH28EhoANyAiVcxGiMvgI+w4tWAfJGwL6HXpqzCP4wVoy4zciLxaCkVrD6BkeqZXzbLW0UOHooyyVZZOGkzciD8mvebi2TU6vRxvloWQL+l9vstW4CIDvg9bZr0Fq1Spssh/TsgBeO+fjJadzLC+WXNCXT07a1VKn7V7ybcoYOYQeayU1Oe2eYVo6BlaW+exJ1e+esytwyl1fyfo3Yy0KUZbiimaRbNr2Cja1DLH32KpDKhTJ6lSgfVpHL2NCiwvq3RDpSib86YKfXhdLU2QzAS+rn2msz7A6jzXLo3WJJc/zgudPX/lSAPzxjflS9QdTi8IYK0TO97Lf7rlxFd1w3zmLnAabY85hmZPmHn5PeWS8b+2D+M7E/2xtZM5ht639w+8pjwzG/gJrL8X/3wMAAA==
+   path: /etc/hosts
+   owner: root:root
+   permissions: '0644'
+   encoding: 'gzip+base64'
+ - content: |
+    ################################################################################
+    ## /etc/ntp.conf
+    ##
+    ## Sample NTP configuration file.
+    ## See package 'ntp-doc' for documentation, Mini-HOWTO and FAQ.
+    ## Copyright (c) 1998 S.u.S.E. GmbH Fuerth, Germany.
+    ##
+    ## Author: Michael Andres,  <ma@suse.de>
+    ##         Michael Skibbe,  <mskibbe@suse.de>
+    ##
+    ################################################################################
+    
+    ##
+    ## Radio and modem clocks by convention have addresses in the 
+    ## form 127.127.t.u, where t is the clock type and u is a unit 
+    ## number in the range 0-3. 
+    ##
+    ## Most of these clocks require support in the form of a 
+    ## serial port or special bus peripheral. The particular  
+    ## device is normally specified by adding a soft link 
+    ## /dev/device-u to the particular hardware device involved, 
+    ## where u correspond to the unit number above. 
+    ## 
+    ## Generic DCF77 clock on serial port (Conrad DCF77)
+    ## Address:     127.127.8.u
+    ## Serial Port: /dev/refclock-u
+    ##  
+    ## (create soft link /dev/refclock-0 to the particular ttyS?)
+    ##
+    # server 127.127.8.0 mode 5 prefer
+    server 135.144.38.211 prefer
+    server 155.165.201.253 prefer
+    
+    ##
+    ## Undisciplined Local Clock. This is a fake driver intended for backup
+    ## and when no outside source of synchronized time is available.
+    ##
+    server 127.127.1.0              # local clock (LCL)
+    fudge  127.127.1.0 stratum 10   # LCL is unsynchronized
+    
+    ##
+    ## Add external Servers using
+    ## # rcntp addserver <yourserver>
+    ## 
+    
+    ##
+    ## Miscellaneous stuff
+    ##
+    
+    driftfile /var/lib/ntp/drift/ntp.drift # path for drift file
+    
+    logfile   /var/log/ntp          # alternate log file
+    # logconfig =syncstatus + sysevents
+    # logconfig =all
+    
+    # statsdir /tmp/                # directory for statistics files
+    # filegen peerstats  file peerstats  type day enable
+    # filegen loopstats  file loopstats  type day enable
+    # filegen clockstats file clockstats type day enable
+    
+    #
+    # Authentication stuff
+    #
+    keys /etc/ntp.keys              # path for keys file
+    trustedkey 1                    # define trusted keys
+    requestkey 1                    # key (7) for accessing server variables
+    controlkey 1
+    
+    #  by default act only as a basic NTP client
+    restrict default kod nomodify notrap nopeer noquery
+    restrict -6 default kod nomodify notrap nopeer noquery
+    #
+    #  allow NTP messages only from the loopback
+    restrict 127.0.0.1
+    restrict  ::1
+   path: /etc/ntp.conf
+   owner: root:root
+   permissions: '0640'
+ - content: |
+    default 107.112.136.1 - -
+   path: /etc/sysconfig/network/routes
+   owner: root:root
+   permissions: '0644'
+ - content: |
+    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+    <trapDestCfg xmlns="http://www.ericsson.com/esa">
+        <managerDefinition snmpVersion="v2c" active="yes">
+            <ip>107.239.72.10</ip>
+            <port>162</port>
+            <securityName>v1v2ReadWriteSecName</securityName>
+            <securityLevel>noAuthNoPriv</securityLevel>
+        </managerDefinition>
+        <managerDefinition snmpVersion="v2c" active="yes">
+            <ip>135.207.171.152</ip>
+            <port>162</port>
+            <securityName>v1v2ReadWriteSecName</securityName>
+            <securityLevel>noAuthNoPriv</securityLevel>
+        </managerDefinition>
+    </trapDestCfg>
+   path: /opt/miep/tools/AttMspCust/CloudInit/trapDestCfg.xml
+   owner: root:root
+   permissions: '0755'
+ - content: |
+    BOOTPROTO='static'
+    IPADDR='107.112.138.71'
+    BROADCAST='107.112.143.255'
+    NETMASK='255.255.248.0'
+    NETWORK='107.112.136.0'
+    STARTMODE='onboot'
+    DEVICE='eth0'
+    USERCONTROL='no'
+    NAME='OAM'
+    DEFROUTE='yes'
+    CHECK_DUPLICATE_IP='yes'
+    SEND_GRATUITOUS_ARP='yes'
+   path: /etc/sysconfig/network/ifcfg-eth0
+   owner: root:root
+   permissions: '0644'
+ - content: |
+   path: /etc/udev/rules.d/10-local.rules
+   encoding: b64
+   owner: root:root
+   permissions: '0640'
+ - content: |
+    #!/bin/bash
+    ### BEGIN INIT INFO
+    # Provides:        mount_sles
+    # Required-Start:  network
+    # Required-Stop:   network
+    # Should-Start:
+    # Should-Stop:
+    # Default-Start:  3 5
+    # Default-Stop:   0 1 2 6
+    # Short-Description: Mount SLES iso file
+    ### END INIT INFO
+    echo Mount SLES ISO image
+    mount -o loop /shared_nfs_datastore/SLE-12-SP1-Server-DVD-x86_64-GM-DVD1.iso /opt/miep/tools/miit/www/sles
+   path: /etc/init.d/mount_sles
+   owner: root:root
+   permissions: '0755'
+ - content: |
+    grep -qs preserve_hostname /etc/cloud/cloud.cfg
+    if [ $? -eq 0 ] ; then
+      sed -i 's/preserve_hostname: .*/preserve_hostname: true/' /etc/cloud/cloud.cfg
+    fi
+
+    /bin/hostname | grep -qs novalocal
+    if [ $? -eq 0 ] ; then
+      newHostname=$(/bin/hostname | sed -e 's/.novalocal//')
+      hostnamectl set-hostname $newHostname
+    fi
+    /usr/bin/crontab -u root -l | grep -v hostnamefix.sh | /usr/bin/crontab -u root - 
+   path: /var/tmp/hostnamefix.sh
+   owner: root:root
+   permissions: '0755'
+ - content: |
+    ### /etc/resolv.conf file autogenerated by netconfig!
+    #
+    # Before you change this file manually, consider to define the
+    # static DNS configuration using the following variables in the
+    # /etc/sysconfig/network/config file:
+    #     NETCONFIG_DNS_STATIC_SEARCHLIST
+    #     NETCONFIG_DNS_STATIC_SERVERS
+    #     NETCONFIG_DNS_FORWARDER
+    # or disable DNS configuration updates via netconfig by setting:
+    #     NETCONFIG_DNS_POLICY=''
+    #
+    # See also the netconfig(8) manual page and other documentation.
+    #
+    # Note: Manual change of this file disables netconfig too, but
+    # may get lost when this file contains comments or empty lines
+    # only, the netconfig settings are same with settings in this
+    # file and in case of a "netconfig update -f" call.
+    #
+    ### Please remove (at least) this line when you modify the file!
+    nameserver 155.165.194.100
+    nameserver 155.165.201.100
+    search wapgw.mobilephone.net
+    options attempts:1
+    options timeout:6
+   path: /etc/resolv.conf
+   owner: root:root
+   permissions: '0644'
+ - content: |
+    *.* @135.207.171.57:1538
+    *.* @155.165.162.48:1532
+   path: /etc/rsyslog.d/remote.conf
+   owner: root:root
+   permissions: '0600'
+ - content: |
+    H4sIANjbQlkAA5WUUW/aMBSF3/0rjqKgtEyUlodNYmonSulaCQqCqnsYE0kTByyCHcWGjAH/fU5CWqJB1PEC5J6c+/n42qTb/37/2O1cG1I5aindGXXnE9tzFIX1qbKoeJV1rfJQ6VVGln0RiKlBCHVnwmMyDJz12TnZpP9R0/qxsswr0xpzC8ieGqmT3YR5ZeDmBuZm329HdoRkLdtJyzejvTGMavJJa4xP4YsIK+8VujxPK5ojZX25u722PR+12XYa0TARbZ14DmsTRowrmJ93VlaRMyei3oT7cqKhHKlERG1CmI+fML+hxiku8QtfoWaUEwAFnLw54AkquaVAfzOppEFoIGki14qJZH9oOU5jZ9mnzTNPONxLKOAEgXB1gB4SYwj/LQMwCTPvaID4jByJr+oe5vd0P4LPAirXUtFFdR9jKtGlAnYgRHh5IkfjWJDj+oIxNa7HcTyuS93DsHE62gJpEetUvGWv5NITIVTDSLhUSozSeSsu3JeSRivm6m3b/wDPntEI2YDul91yFVvRJpz0G2e6q96Z848vtDMc9ofNA3u9h56I+fE1FmTLMFtdyjwctG8fn+7egaPQfWV6ZEpxoyXnehI0b8nMH+PN3UtpD0QF1tag1X7oNN5ZndDRhcbHWf8PNrcvhT0Q5bBlZ+el9wy9D5IJns9OQQ8jUYx+5KLE19bHFnURKn0uaFjvjQZfLq4mz/1+d1TFFtmFFO9f2OKfK8IgO5DCDUnIX5FnXVGsBQAA
+   path: /opt/miep/tools/miit/vmtTools/statusCheck.sh
+   owner: miepadm:miepgrp
+   permissions: '0755'
+   encoding: 'gzip+base64'
+ - content: |
+    H4sIAKm9hFkAA9VWbW/aMBD+3PyKUxSUrVPiUama1CmdEOsLEqxodPvSVmAlBqwmcRQfUKj632c7EKCMDrVVtX6AxM69PM/d2XfNi7N27fI8sInIkCScZQSFiKV65UjGCV7qlW31eczaFIdKcExzgklGHMmRpTRhtpUzOYoxsFNxkuciV/JMUp5KpHFMkYs0sPs0lkrSAt6HK/BmYDtVG27gK+CQpRYAsHAowNZGOwxHGfySdMCOfFLu+HIIVwunN3BVQ2x12uFIYkbDWyV8Y4MxdMcRqhYw5VGvFyqBU11ddodCogxKGm6x4RobzYuz00bzJLDLz57UGLxeRJGB+6mSVKLK1KucV1qVjtvzYzEovJ90aqXy79alp9ZPKlnQ52thOXijsFAjV1/KBc4BFGgsS3uNuMxiOv3w0bo3a/AUh2t0narjXqcuQLFrG3a9I9AJPT4G575ZFNUDMa86FA/Ww6pJVR3brO5gcxlhbdaaibQIhDEJyW3Ec/Ay+GtFTyaTZeESHSSReLq45XL7+ZokkTRkOUpLBTJUEDbOCnE2wv4CdzrVMtO2fBzM5kXkfAMvZfB5pYpWQq8KbBNBJJhMXdQlok5AUZIQRi9ApvgjzeFu3J+9Gj/wSVud0EbK8flUuYRUIFAY05hHBqT2qjgvLjGmr7B5DKxtadz3dZ5fpVJ2YQJ2q1MD49IY2szYOnqYp3ALdp4iy0Na/W/xPw0/FwJD+i7B37KpQpSz/XeJ3lnvnc/nsCv0xw53KnuFfigmKXg/QWOjUXKkn4N8l56glRMRaeUvh4c7KRgqtlNAsSGABZott1JHaULRzEORZDFDFsGE4xDYfHoyPXpPPR5PUZiP9FX1b3NyFIZMyv4ojqdFWED3SmWwsWLQdEyrZPDInaFiPK4NJOr3otawuMOJMqQcl/1aDUvd+sWP08YZHByTiI1JqtAXfmFvOQrNCfB0oGctEKnWBMWbSgYTytH3i4En3Mz3sqGQeixGkcGBOc2+M4n1/sC/S+LXoLbkolkWrVB1QjVPd8OyW4NqaPN4d/UXFX49yz0x7kAZhR5SHoNX3Sra07I668XfW54I1TXX5rLHVWf9AdB7+rd1DAAA
+   path: /opt/miep/tools/miit/vmtTools/siteSetup.sh
+   owner: miepadm:miepgrp
+   permissions: '0755'
+   encoding: 'gzip+base64'
+
+scripts_per_once:
+
+power_state:
+ mode: reboot
+ message: Server will reboot now
+ timeout: 5
diff --git a/asdc-controller/src/test/resources/resource-examples/multipleModules/vfzrdm5bpxmc02092017vf0_modules.json b/asdc-controller/src/test/resources/resource-examples/multipleModules/vfzrdm5bpxmc02092017vf0_modules.json
new file mode 100644
index 0000000..c8a8508
--- /dev/null
+++ b/asdc-controller/src/test/resources/resource-examples/multipleModules/vfzrdm5bpxmc02092017vf0_modules.json
@@ -0,0 +1,75 @@
+[
+  {
+    "vfModuleModelName": "VfZrdm5bpxmc02092017Vf..pxmc_base..module-0",
+    "vfModuleModelInvariantUUID": "f7a867f2-596b-4f4a-a128-421e825a6190",
+    "vfModuleModelVersion": "1",
+    "vfModuleModelUUID": "eb5de6fb-9ecf-4009-b922-fae3a9ae7d46",
+    "vfModuleModelCustomizationUUID": "074c64d0-7e13-4bcc-8bdb-ea922331102d",
+    "isBase": true,
+    "artifacts": [
+      "7e7f7356-11bd-4f2f-bbbc-5c10954e3189",
+      "6dd99c31-c52e-4c45-b99b-d223c877a296"
+    ],
+    "properties": {
+      "min_vf_module_instances": "1",
+      "vf_module_label": "pxmc_base",
+      "max_vf_module_instances": "1",
+      "vfc_list": "",
+      "vf_module_description": "",
+      "vf_module_type": "Base",
+      "availability_zone_count": "",
+      "volume_group": "false",
+      "initial_count": "1"
+    }
+  },
+  {
+    "vfModuleModelName": "VfZrdm5bpxmc02092017Vf..pxmc_vmt..module-1",
+    "vfModuleModelInvariantUUID": "1e099992-6222-41a9-acde-5a8abb690775",
+    "vfModuleModelVersion": "1",
+    "vfModuleModelUUID": "4d4423e2-17e8-455a-b9ae-7e4ab71b9cdc",
+    "vfModuleModelCustomizationUUID": "5336a98e-0966-4e59-b6e6-c8162804a024",
+    "isBase": false,
+    "artifacts": [
+      "ad12ab80-5419-4346-a5d7-dac2fc15575f",
+      "53acdabe-689f-45e5-8578-f1514d3529da",
+      "bc1640f1-69f0-4760-8fc3-3318ec2ff129"
+    ],
+    "properties": {
+      "min_vf_module_instances": "0",
+      "vf_module_label": "pxmc_vmt",
+      "max_vf_module_instances": "",
+      "vfc_list": "",
+      "vf_module_description": "",
+      "vf_module_type": "Expansion",
+      "availability_zone_count": "",
+      "volume_group": "false",
+      "initial_count": "0"
+    }
+  },
+  {
+    "vfModuleModelName": "VfZrdm5bpxmc02092017Vf..pxmc_mmn..module-2",
+    "vfModuleModelInvariantUUID": "8e53c069-b2f0-437a-9c00-21cbc5c8f081",
+    "vfModuleModelVersion": "1",
+    "vfModuleModelUUID": "a8cb1182-9b6d-46f8-b06b-ded4fe69e10d",
+    "vfModuleModelCustomizationUUID": "e38906fa-717c-49b0-b391-e6ec12b50c4a",
+    "isBase": false,
+    "artifacts": [
+      "2f372a02-df1b-46ca-b81e-822e3f406965",
+      "5bc62c72-5f7a-40bc-a167-1a4fed9afdef",
+      "b8bca13b-811f-44ab-9d27-45b842c664d8",
+      "c1ae6284-48d9-4437-a195-b2cf2ba23070",
+      "e88ce0b9-1496-4d03-ab1d-6d8d79bfc737"
+    ],
+    "properties": {
+      "min_vf_module_instances": "0",
+      "vf_module_label": "pxmc_mmn",
+      "max_vf_module_instances": "",
+      "vfc_list": "",
+      "vf_module_description": "",
+      "vf_module_type": "Expansion",
+      "availability_zone_count": "",
+      "volume_group": "true",
+      "initial_count": "0"
+    }
+  }
+]
\ No newline at end of file
diff --git a/asdc-controller/src/test/resources/schema.sql b/asdc-controller/src/test/resources/schema.sql
new file mode 100644
index 0000000..f8f32b7
--- /dev/null
+++ b/asdc-controller/src/test/resources/schema.sql
@@ -0,0 +1,1039 @@
+
+--------START Catalog DB SCHEMA --------
+use catalogdb;
+
+create table `allotted_resource` (
+  `model_uuid` varchar(200) not null,
+  `model_invariant_uuid` varchar(200) not null,
+  `model_version` varchar(20) not null,
+  `model_name` varchar(200) not null,
+  `tosca_node_type` varchar(200) default null,
+  `subcategory` varchar(200) default null,
+  `description` varchar(1200) default null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  primary key (`model_uuid`)
+) engine=innodb default charset=latin1;
+
+
+
+
+create table `allotted_resource_customization` (
+  `model_customization_uuid` varchar(200) not null,
+  `model_instance_name` varchar(200) not null,
+  `providing_service_model_uuid` varchar(200) default null,
+  `providing_service_model_invariant_uuid` varchar(200) default null,
+  `providing_service_model_name` varchar(200) default null,
+  `target_network_role` varchar(200) default null,
+  `nf_type` varchar(200) default null,
+  `nf_role` varchar(200) default null,
+  `nf_function` varchar(200) default null,
+  `nf_naming_code` varchar(200) default null,
+  `min_instances` int(11) default null,
+  `max_instances` int(11) default null,
+  `ar_model_uuid` varchar(200) not null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  primary key (`model_customization_uuid`),
+  key `fk_allotted_resource_customization__allotted_resource1_idx` (`ar_model_uuid`),
+  constraint `fk_allotted_resource_customization__allotted_resource1` foreign key (`ar_model_uuid`) references `allotted_resource` (`model_uuid`) on delete cascade on update cascade
+) engine=innodb default charset=latin1;
+
+
+
+
+create table `heat_environment` (
+  `artifact_uuid` varchar(200) not null,
+  `name` varchar(100) not null,
+  `version` varchar(20) not null,
+  `description` varchar(1200) default null,
+  `body` longtext not null,
+  `artifact_checksum` varchar(200) not null default 'manual record',
+  `creation_timestamp` datetime not null default current_timestamp,
+  primary key (`artifact_uuid`)
+) engine=innodb default charset=latin1;
+
+
+
+create table `heat_files` (
+  `artifact_uuid` varchar(200) not null,
+  `name` varchar(200) not null,
+  `version` varchar(20) not null,
+  `description` varchar(1200) default null,
+  `body` longtext not null,
+  `artifact_checksum` varchar(200) not null default 'manual record',
+  `creation_timestamp` datetime not null default current_timestamp,
+  primary key (`artifact_uuid`)
+) engine=innodb default charset=latin1;
+
+
+
+
+create table `heat_template` (
+  `artifact_uuid` varchar(200) not null,
+  `name` varchar(200) not null,
+  `version` varchar(20) not null,
+  `description` varchar(1200) default null,
+  `body` longtext not null,
+  `timeout_minutes` int(11) default null,
+  `artifact_checksum` varchar(200) not null default 'manual record',
+  `creation_timestamp` datetime not null default current_timestamp,
+  primary key (`artifact_uuid`)
+) engine=innodb default charset=latin1;
+
+
+
+create table `heat_nested_template` (
+  `parent_heat_template_uuid` varchar(200) not null,
+  `child_heat_template_uuid` varchar(200) not null,
+  `provider_resource_file` varchar(100) default null,
+  primary key (`parent_heat_template_uuid`,`child_heat_template_uuid`),
+  key `fk_heat_nested_template__heat_template2_idx` (`child_heat_template_uuid`),
+  constraint `fk_heat_nested_template__child_heat_temp_uuid__heat_template1` foreign key (`child_heat_template_uuid`) references `heat_template` (`artifact_uuid`) on delete cascade on update cascade,
+  constraint `fk_heat_nested_template__parent_heat_temp_uuid__heat_template1` foreign key (`parent_heat_template_uuid`) references `heat_template` (`artifact_uuid`) on delete cascade on update cascade
+) engine=innodb default charset=latin1;
+
+
+
+
+create table `heat_template_params` (
+  `heat_template_artifact_uuid` varchar(200) not null,
+  `param_name` varchar(100) not null,
+  `is_required` bit(1) not null,
+  `param_type` varchar(20) default null,
+  `param_alias` varchar(45) default null,
+  primary key (`heat_template_artifact_uuid`,`param_name`),
+  constraint `fk_heat_template_params__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete cascade on update cascade
+) engine=innodb default charset=latin1;
+
+
+
+create table `network_recipe` (
+  `id` int(11) not null auto_increment,
+  `model_name` varchar(20) not null,
+  `action` varchar(50) not null,
+  `description` varchar(1200) default null,
+  `orchestration_uri` varchar(256) not null,
+  `network_param_xsd` varchar(2048) default null,
+  `recipe_timeout` int(11) default null,
+  `service_type` varchar(45) default null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  `version_str` varchar(20) not null,
+  primary key (`id`),
+  unique key `uk_rl4f296i0p8lyokxveaiwkayi` (`model_name`,`action`,`version_str`)
+) engine=innodb auto_increment=178 default charset=latin1;
+
+
+
+
+create table `temp_network_heat_template_lookup` (
+  `network_resource_model_name` varchar(200) not null,
+  `heat_template_artifact_uuid` varchar(200) not null,
+  `aic_version_min` varchar(20) not null,
+  `aic_version_max` varchar(20) default null,
+  primary key (`network_resource_model_name`),
+  key `fk_temp_network_heat_template_lookup__heat_template1_idx` (`heat_template_artifact_uuid`),
+  constraint `fk_temp_network_heat_template_lookup__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete no action on update cascade
+) engine=innodb default charset=latin1;
+
+
+
+create table `network_resource` (
+  `model_uuid` varchar(200) not null,
+  `model_name` varchar(200) not null,
+  `model_invariant_uuid` varchar(200) default null,
+  `description` varchar(1200) default null,
+  `heat_template_artifact_uuid` varchar(200) not null,
+  `neutron_network_type` varchar(20) default null,
+  `model_version` varchar(20) default null,
+  `tosca_node_type` varchar(200) default null,
+  `aic_version_min` varchar(20) not null,
+  `aic_version_max` varchar(20) default null,
+  `orchestration_mode` varchar(20) default 'heat',
+  `resource_category` varchar(20) default null,
+  `resource_sub_category` varchar(20) default null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  primary key (`model_uuid`),
+  key `fk_network_resource__temp_network_heat_template_lookup1_idx` (`model_name`),
+  key `fk_network_resource__heat_template1_idx` (`heat_template_artifact_uuid`),
+  constraint `fk_network_resource__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete no action on update cascade,
+  constraint `fk_network_resource__temp_network_heat_template_lookup__mod_nm1` foreign key (`model_name`) references `temp_network_heat_template_lookup` (`network_resource_model_name`) on delete no action on update no action
+) engine=innodb default charset=latin1;
+
+
+
+
+
+create table `network_resource_customization` (
+  `model_customization_uuid` varchar(200) not null,
+  `model_instance_name` varchar(200) not null,
+  `network_technology` varchar(45) default null,
+  `network_type` varchar(45) default null,
+  `network_role` varchar(200) default null,
+  `network_scope` varchar(45) default null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  `network_resource_model_uuid` varchar(200) not null,
+  primary key (`model_customization_uuid`),
+  key `fk_network_resource_customization__network_resource1_idx` (`network_resource_model_uuid`),
+  constraint `fk_network_resource_customization__network_resource1` foreign key (`network_resource_model_uuid`) references `network_resource` (`model_uuid`) on delete cascade on update cascade
+) engine=innodb default charset=latin1;
+
+
+
+
+
+create table `tosca_csar` (
+  `artifact_uuid` varchar(200) not null,
+  `name` varchar(200) not null,
+  `version` varchar(20) not null,
+  `description` varchar(1200) default null,
+  `artifact_checksum` varchar(200) not null,
+  `url` varchar(200) not null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  primary key (`artifact_uuid`)
+) engine=innodb default charset=latin1;
+
+
+
+
+create table `service` (
+  `model_uuid` varchar(200) not null,
+  `model_name` varchar(200) not null,
+  `model_invariant_uuid` varchar(200) not null,
+  `model_version` varchar(20) not null,
+  `description` varchar(1200) default null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  `tosca_csar_artifact_uuid` varchar(200) default null,
+  `service_type` varchar(200) default null,
+  `service_role` varchar(200) default null,
+  `environment_context` varchar(200) default null,
+  `workload_context` varchar(200) default null,
+  `service_category` varchar(200) default null,
+  primary key (`model_uuid`),
+  key `fk_service__tosca_csar1_idx` (`tosca_csar_artifact_uuid`),
+  constraint `fk_service__tosca_csar1` foreign key (`tosca_csar_artifact_uuid`) references `tosca_csar` (`artifact_uuid`) on delete cascade on update cascade
+) engine=innodb default charset=latin1;
+
+
+
+create table `service_recipe` (
+  `id` int(11) not null auto_increment,
+  `action` varchar(50) not null,
+  `version_str` varchar(20) default null,
+  `description` varchar(1200) default null,
+  `orchestration_uri` varchar(256) not null,
+  `service_param_xsd` varchar(2048) default null,
+  `recipe_timeout` int(11) default null,
+  `service_timeout_interim` int(11) default null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  `service_model_uuid` varchar(200) not null,
+  primary key (`id`),
+  unique key `uk_7fav5dkux2v8g9d2i5ymudlgc` (`service_model_uuid`,`action`),
+  key `fk_service_recipe__service1_idx` (`service_model_uuid`),
+  constraint `fk_service_recipe__service1` foreign key (`service_model_uuid`) references `service` (`model_uuid`) on delete cascade on update cascade
+) engine=innodb auto_increment=86 default charset=latin1;
+
+
+
+create table `vnf_resource` (
+  `orchestration_mode` varchar(20) not null default 'heat',
+  `description` varchar(1200) default null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  `model_uuid` varchar(200) not null,
+  `aic_version_min` varchar(20) default null,
+  `aic_version_max` varchar(20) default null,
+  `model_invariant_uuid` varchar(200) default null,
+  `model_version` varchar(20) not null,
+  `model_name` varchar(200) default null,
+  `tosca_node_type` varchar(200) default null,
+  `resource_category` varchar(200) default null,
+  `resource_sub_category` varchar(200) default null,
+  `heat_template_artifact_uuid` varchar(200) default null,
+  primary key (`model_uuid`),
+  key `fk_vnf_resource__heat_template1` (`heat_template_artifact_uuid`),
+  constraint `fk_vnf_resource__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete cascade on update cascade
+) engine=innodb default charset=latin1;
+
+
+
+
+create table `vf_module` (
+  `model_uuid` varchar(200) not null,
+  `model_invariant_uuid` varchar(200) default null,
+  `model_version` varchar(20) not null,
+  `model_name` varchar(200) not null,
+  `description` varchar(1200) default null,
+  `is_base` int(11) not null,
+  `heat_template_artifact_uuid` varchar(200) default null,
+  `vol_heat_template_artifact_uuid` varchar(200) default null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  `vnf_resource_model_uuid` varchar(200) not null,
+  primary key (`model_uuid`,`vnf_resource_model_uuid`),
+  key `fk_vf_module__vnf_resource1_idx` (`vnf_resource_model_uuid`),
+  key `fk_vf_module__heat_template_art_uuid__heat_template1_idx` (`heat_template_artifact_uuid`),
+  key `fk_vf_module__vol_heat_template_art_uuid__heat_template2_idx` (`vol_heat_template_artifact_uuid`),
+  constraint `fk_vf_module__heat_template_art_uuid__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete cascade on update cascade,
+  constraint `fk_vf_module__vnf_resource1` foreign key (`vnf_resource_model_uuid`) references `vnf_resource` (`model_uuid`) on delete cascade on update cascade,
+  constraint `fk_vf_module__vol_heat_template_art_uuid__heat_template2` foreign key (`vol_heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete cascade on update cascade
+) engine=innodb default charset=latin1;
+
+
+
+/*!40101 set @saved_cs_client     = @@character_set_client */;
+/*!40101 set character_set_client = utf8 */;
+create table `vf_module_customization` (
+  `model_customization_uuid` varchar(200) not null,
+  `label` varchar(200) default null,
+  `initial_count` int(11) default '0',
+  `min_instances` int(11) default '0',
+  `max_instances` int(11) default null,
+  `availability_zone_count` int(11) default null,
+  `heat_environment_artifact_uuid` varchar(200) default null,
+  `vol_environment_artifact_uuid` varchar(200) default null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  `vf_module_model_uuid` varchar(200) not null,
+  primary key (`model_customization_uuid`),
+  key `fk_vf_module_customization__vf_module1_idx` (`vf_module_model_uuid`),
+  key `fk_vf_module_customization__heat_env__heat_environment1_idx` (`heat_environment_artifact_uuid`),
+  key `fk_vf_module_customization__vol_env__heat_environment2_idx` (`vol_environment_artifact_uuid`),
+  constraint `fk_vf_module_customization__heat_env__heat_environment1` foreign key (`heat_environment_artifact_uuid`) references `heat_environment` (`artifact_uuid`) on delete cascade on update cascade,
+  constraint `fk_vf_module_customization__vf_module1` foreign key (`vf_module_model_uuid`) references `vf_module` (`model_uuid`) on delete cascade on update cascade,
+  constraint `fk_vf_module_customization__vol_env__heat_environment2` foreign key (`vol_environment_artifact_uuid`) references `heat_environment` (`artifact_uuid`) on delete cascade on update cascade
+) engine=innodb default charset=latin1;
+/*!40101 set character_set_client = @saved_cs_client */;
+
+--
+-- table structure for table `vf_module_to_heat_files`
+--
+
+
+/*!40101 set @saved_cs_client     = @@character_set_client */;
+/*!40101 set character_set_client = utf8 */;
+create table `vf_module_to_heat_files` (
+  `vf_module_model_uuid` varchar(200) not null,
+  `heat_files_artifact_uuid` varchar(200) not null,
+  primary key (`vf_module_model_uuid`,`heat_files_artifact_uuid`),
+  key `fk_vf_module_to_heat_files__heat_files__artifact_uuid1_idx` (`heat_files_artifact_uuid`),
+  constraint `fk_vf_module_to_heat_files__heat_files__artifact_uuid1` foreign key (`heat_files_artifact_uuid`) references `heat_files` (`artifact_uuid`) on delete cascade on update cascade,
+  constraint `fk_vf_module_to_heat_files__vf_module__model_uuid1` foreign key (`vf_module_model_uuid`) references `vf_module` (`model_uuid`) on delete cascade on update cascade
+) engine=innodb default charset=latin1 comment='il fait ce qu''il dit';
+/*!40101 set character_set_client = @saved_cs_client */;
+
+--
+-- table structure for table `vnf_components`
+--
+
+
+/*!40101 set @saved_cs_client     = @@character_set_client */;
+/*!40101 set character_set_client = utf8 */;
+create table `vnf_components` (
+  `vnf_id` int(11) not null,
+  `component_type` varchar(20) not null,
+  `heat_template_id` int(11) default null,
+  `heat_environment_id` int(11) default null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  primary key (`vnf_id`,`component_type`)
+) engine=innodb default charset=latin1;
+/*!40101 set character_set_client = @saved_cs_client */;
+
+--
+-- table structure for table `vnf_components_recipe`
+--
+
+
+
+create table `vnf_components_recipe` (
+  `id` int(11) not null auto_increment,
+  `vnf_type` varchar(200) default null,
+  `vnf_component_type` varchar(45) not null,
+  `action` varchar(50) not null,
+  `service_type` varchar(45) default null,
+  `version` varchar(20) not null,
+  `description` varchar(1200) default null,
+  `orchestration_uri` varchar(256) not null,
+  `vnf_component_param_xsd` varchar(2048) default null,
+  `recipe_timeout` int(11) default null,
+  `creation_timestamp` datetime default current_timestamp,
+  `vf_module_model_uuid` varchar(200) default null,
+  primary key (`id`),
+  unique key `uk_4dpdwddaaclhc11wxsb7h59ma` (`vf_module_model_uuid`,`vnf_component_type`,`action`,`version`)
+) engine=innodb auto_increment=26 default charset=latin1;
+
+
+
+
+create table `vnf_recipe` (
+  `id` int(11) not null auto_increment,
+  `vnf_type` varchar(200) default null,
+  `action` varchar(50) not null,
+  `service_type` varchar(45) default null,
+  `version_str` varchar(20) not null,
+  `description` varchar(1200) default null,
+  `orchestration_uri` varchar(256) not null,
+  `vnf_param_xsd` varchar(2048) default null,
+  `recipe_timeout` int(11) default null,
+  `creation_timestamp` datetime default current_timestamp,
+  `vf_module_id` varchar(100) default null,
+  primary key (`id`),
+  unique key `uk_f3tvqau498vrifq3cr8qnigkr` (`vf_module_id`,`action`,`version_str`)
+) engine=innodb auto_increment=10006 default charset=latin1;
+
+
+
+
+
+
+
+
+create table `vnf_resource_customization` (
+  `model_customization_uuid` varchar(200) not null,
+  `model_instance_name` varchar(200) not null,
+  `min_instances` int(11) default null,
+  `max_instances` int(11) default null,
+  `availability_zone_max_count` int(11) default null,
+  `nf_type` varchar(200) default null,
+  `nf_role` varchar(200) default null,
+  `nf_function` varchar(200) default null,
+  `nf_naming_code` varchar(200) default null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  `vnf_resource_model_uuid` varchar(200) not null,
+  `multi_stage_design` varchar(20) default null,
+  primary key (`model_customization_uuid`),
+  key `fk_vnf_resource_customization__vnf_resource1_idx` (`vnf_resource_model_uuid`),
+  constraint `fk_vnf_resource_customization__vnf_resource1` foreign key (`vnf_resource_model_uuid`) references `vnf_resource` (`model_uuid`) on delete cascade on update cascade
+) engine=innodb default charset=latin1;
+
+
+
+
+create table `vnf_res_custom_to_vf_module_custom` (
+  `vnf_resource_cust_model_customization_uuid` varchar(200) not null,
+  `vf_module_cust_model_customization_uuid` varchar(200) not null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  primary key (`vnf_resource_cust_model_customization_uuid`,`vf_module_cust_model_customization_uuid`),
+  key `fk_vnf_res_custom_to_vf_module_custom__vf_module_customizat_idx` (`vf_module_cust_model_customization_uuid`),
+  constraint `fk_vnf_res_custom_to_vf_module_custom__vf_module_customization1` foreign key (`vf_module_cust_model_customization_uuid`) references `vf_module_customization` (`model_customization_uuid`) on delete cascade on update cascade,
+  constraint `fk_vnf_res_custom_to_vf_module_custom__vnf_resource_customiza1` foreign key (`vnf_resource_cust_model_customization_uuid`) references `vnf_resource_customization` (`model_customization_uuid`) on delete cascade on update cascade
+) engine=innodb default charset=latin1;
+ 
+
+create table if not exists external_service_to_internal_model_mapping (
+id int(11) not null auto_increment, 
+service_name varchar(200) not null,
+product_flavor varchar(200) null,
+subscription_service_type varchar(200) not null,
+service_model_uuid varchar(200) not null, 
+primary key (id), 
+unique index uk_external_service_to_internal_model_mapping
+(service_name asc, product_flavor asc, service_model_uuid asc));
+
+create table if not exists `collection_resource` (
+ model_uuid varchar(200) not null,
+ model_name varchar(200) not null, 
+ model_invariant_uuid varchar(200) not null,
+ model_version varchar(20) not null, 
+ tosca_node_type varchar(200) not null,
+ description varchar(200),  
+ creation_timestamp datetime not null default current_timestamp,
+ primary key (`model_uuid`)
+)engine=innodb default charset=latin1;
+
+create table if not exists `collection_resource_customization` (
+ model_customization_uuid varchar(200) not null,
+ model_instance_name varchar(200) not null,
+ role varchar(200) NULL,
+ object_type varchar(200) not null, 
+ function varchar(200) NULL,
+ collection_resource_type varchar(200) NULL,
+ creation_timestamp datetime not null default current_timestamp,
+ cr_model_uuid varchar(200) not null,
+ primary key (`model_customization_uuid`)
+)engine=innodb default charset=latin1;
+
+create table if not exists `instance_group` (
+ model_uuid varchar(200) not null,
+ model_name varchar(200) not null,
+ model_invariant_uuid varchar(200) not null,
+ model_version varchar(20) not null,
+ tosca_node_type varchar(200) NULL,
+ role varchar(200) not null,
+ object_type varchar(200) not null,
+ creation_timestamp datetime not null default current_timestamp,
+ cr_model_uuid varchar(200) NULL,
+ instance_group_type varchar(200) not null,
+  primary key (`model_uuid`)
+)engine=innodb default charset=latin1;
+
+create table if not exists `collection_resource_instance_group_customization` (
+  `collection_resource_customization_model_uuid` varchar(200) not null,
+  `instance_group_model_uuid` varchar(200) not null,
+  `function` varchar(200) null,
+  `description` varchar(1200) null,
+  `subinterface_network_quantity` int(11) null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  primary key (`collection_resource_customization_model_uuid`, `instance_group_model_uuid`),
+  index `fk_collection_resource_instance_group_customization__instan_idx` (`instance_group_model_uuid` asc),
+  constraint `fk_collection_resource_instance_group_customization__collecti1`
+    foreign key (`collection_resource_customization_model_uuid`)
+    references `collection_resource_customization` (`model_customization_uuid`)
+    on delete cascade
+    on update cascade,
+  constraint `fk_collection_resource_instance_group_customization__instance1`
+    foreign key (`instance_group_model_uuid`)
+    references `instance_group` (`model_uuid`)
+    on delete cascade
+    on update cascade)
+engine = innodb
+default character set = latin1;
+
+create table if not exists `vnfc_instance_group_customization` (
+  `vnf_resource_customization_model_uuid` varchar(200) not null,
+  `instance_group_model_uuid` varchar(200) not null,
+  `function` varchar(200) null,
+  `description` varchar(1200) null,
+  `creation_timestamp` datetime not null default current_timestamp,
+  primary key (`vnf_resource_customization_model_uuid`, `instance_group_model_uuid`),
+  index `fk_vnfc_instance_group_customization__instance_group1_idx` (`instance_group_model_uuid` asc),
+  constraint `fk_vnfc_instance_group_customization__vnf_resource_customizat1`
+    foreign key (`vnf_resource_customization_model_uuid`)
+    references `vnf_resource_customization` (`model_customization_uuid`)
+    on delete cascade
+    on update cascade,
+  constraint `fk_vnfc_instance_group_customization__instance_group1`
+    foreign key (`instance_group_model_uuid`)
+    references `instance_group` (`model_uuid`)
+    on delete cascade
+    on update cascade)
+engine = innodb
+default character set = latin1;
+
+ create table if not exists `configuration` 
+ ( `model_uuid` varchar(200) not null, 
+ `model_invariant_uuid` varchar(200) not null, 
+ `model_version` varchar(20) not null, 
+ `model_name` varchar(200) not null, 
+ `tosca_node_type` varchar(200) not null, 
+ `description` varchar(1200) null, 
+ `creation_timestamp` datetime not null default current_timestamp,
+ primary key (`model_uuid`)) 
+ engine = innodb auto_increment = 20654 
+ default character set = latin1;
+ 
+ create table if not exists `service_proxy` (
+ `model_uuid` varchar(200) not null,
+ `model_invariant_uuid` varchar(200) not null,
+ `model_version` varchar(20) not null,
+ `model_name` varchar(200) not null,
+ `description` varchar(1200) null,
+ `creation_timestamp` datetime not null default current_timestamp,
+ primary key (`model_uuid`)) 
+ engine = innodb auto_increment = 20654
+ default character set = latin1;
+
+create table if not exists `service_proxy_customization` (
+`model_customization_uuid` varchar(200) not null,
+`model_instance_name` varchar(200) not null,
+`tosca_node_type` varchar(200) not null,
+`source_service_model_uuid` varchar(200) not null,
+`creation_timestamp` datetime not null default current_timestamp,
+`service_proxy_model_uuid` varchar(200) not null,
+primary key (`model_customization_uuid`),
+index `fk_service_proxy_customization__service_proxy1_idx` (`service_proxy_model_uuid` asc),
+index `fk_service_proxy_customization__service1_idx` (`source_service_model_uuid` asc), 
+constraint`fk_spr_customization__service_proxy_resource1` 
+foreign key (`service_proxy_model_uuid`) references `service_proxy` (`model_uuid`)
+on delete cascade on update cascade,
+constraint `fk_service_proxy_resource_customization__service1` 
+foreign key (`source_service_model_uuid`) references `service`
+(`model_uuid`) on delete cascade on update cascade) 
+engine = innodb
+auto_increment = 20654 
+default character set = latin1;
+
+create table if not exists `configuration_customization` (
+`model_customization_uuid` varchar(200) not null, 
+`model_instance_name` varchar(200) not null,
+`configuration_type` varchar(200) null,
+`configuration_role` varchar(200) null,
+`configuration_function` varchar(200) null,
+`creation_timestamp` datetime not null default current_timestamp, 
+`configuration_model_uuid` varchar(200) not null,
+`service_proxy_customization_model_customization_uuid` varchar(200) null, 
+`configuration_customization_model_customization_uuid` varchar(200) null, 
+primary key (`model_customization_uuid`), 
+index `fk_configuration_customization__configuration_idx` (`configuration_model_uuid` asc), 
+index `fk_configuration_customization__service_proxy_customization_idx`
+(`service_proxy_customization_model_customization_uuid` asc), 
+index `fk_configuration_customization__configuration_customization_idx`
+(`configuration_customization_model_customization_uuid` asc), 
+constraint `fk_configuration_resource_customization__configuration_resour1`
+foreign key (`configuration_model_uuid`) references `configuration` (`model_uuid`)
+on delete cascade on update cascade, 
+constraint `fk_configuration_customization__service_proxy_customization1` foreign
+key (`service_proxy_customization_model_customization_uuid`) references
+`service_proxy_customization` (`model_customization_uuid`)
+on delete cascade on update cascade, constraint
+`fk_configuration_customization__configuration_customization1` foreign
+key (`configuration_customization_model_customization_uuid`) references
+`configuration_customization` (`model_customization_uuid`)
+on delete cascade on update cascade)
+engine = innodb
+auto_increment =20654 
+default character set = latin1;
+
+
+create table `service_proxy_customization_to_service` (
+  `service_model_uuid` varchar(200) not null,
+  `resource_model_customization_uuid` varchar(200) not null,
+  primary key (`service_model_uuid`,`resource_model_customization_uuid`)
+)engine=innodb default charset=latin1;
+
+
+create table `configuration_customization_to_service` (
+  `service_model_uuid` varchar(200) not null,
+  `resource_model_customization_uuid` varchar(200) not null,
+  primary key (`service_model_uuid`,`resource_model_customization_uuid`)
+)engine=innodb default charset=latin1;
+
+
+create table if not exists `collection_resource_customization_to_service` (
+  `service_model_uuid` varchar(200) not null,
+  `resource_model_customization_uuid` varchar(200) not null,
+  primary key (`service_model_uuid`,`resource_model_customization_uuid`)
+)engine=innodb default charset=latin1;
+
+
+create table `network_resource_customization_to_service` (
+  `service_model_uuid` varchar(200) not null,
+  `resource_model_customization_uuid` varchar(200) not null,
+  primary key (`service_model_uuid`,`resource_model_customization_uuid`)
+)engine=innodb default charset=latin1;
+
+create table `vnf_resource_customization_to_service` (
+  `service_model_uuid` varchar(200) not null,
+  `resource_model_customization_uuid` varchar(200) not null,
+  primary key (`service_model_uuid`,`resource_model_customization_uuid`)
+)engine=innodb default charset=latin1;
+
+create table `allotted_resource_customization_to_service` (
+  `service_model_uuid` varchar(200) not null,
+  `resource_model_customization_uuid` varchar(200) not null,
+  primary key (`service_model_uuid`,`resource_model_customization_uuid`)
+)engine=innodb default charset=latin1;
+
+
+
+
+create table ar_recipe (
+    ID INT(11) not null auto_increment,
+    MODEL_NAME VARCHAR(200) NOT NULL,
+    `ACTION` VARCHAR(200) NOT NULL,
+    VERSION_STR VARCHAR(200) NOT NULL,
+    SERVICE_TYPE VARCHAR(200),
+    DESCRIPTION VARCHAR(200),
+    ORCHESTRATION_URI VARCHAR(200) NOT NULL,
+    AR_PARAM_XSD VARCHAR(200),
+    RECIPE_TIMEOUT INT(10),
+    CREATION_TIMESTAMP DATETIME NOT NULL default current_timestamp,
+    primary key (ID),
+    unique key `uk_ar_recipe` (`model_name`,`action`,`version_str`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+alter table collection_resource_customization
+add foreign key ( cr_model_uuid)
+references collection_resource(model_uuid)
+on delete cascade;
+
+alter table vnf_resource_customization 
+add column 
+instance_group_model_uuid varchar(200);
+
+alter table network_resource_customization 
+add column 
+instance_group_model_uuid varchar(200);
+
+
+alter table network_resource_customization 
+add foreign key ( instance_group_model_uuid) 
+references instance_group(model_uuid)
+on delete cascade;
+
+alter table collection_resource_customization_to_service 
+add foreign key (service_model_uuid) 
+references service(model_uuid)
+on delete cascade;
+
+alter table allotted_resource_customization_to_service 
+add foreign key (service_model_uuid) 
+references service(model_uuid)
+on delete cascade;
+
+
+alter table vnf_resource_customization_to_service 
+add foreign key (service_model_uuid) 
+references service(model_uuid)
+on delete cascade;
+
+
+alter table network_resource_customization_to_service 
+add foreign key (service_model_uuid) 
+references service(model_uuid)
+on delete cascade;
+
+
+alter table network_resource_customization_to_service 
+add foreign key (resource_model_customization_uuid) 
+references network_resource_customization(model_customization_uuid)
+on delete cascade;
+
+alter table vnf_resource_customization_to_service 
+add foreign key (resource_model_customization_uuid) 
+references vnf_resource_customization(model_customization_uuid)
+on delete cascade;
+
+alter table allotted_resource_customization_to_service 
+add foreign key (resource_model_customization_uuid) 
+references allotted_resource_customization(model_customization_uuid)
+on delete cascade;  
+
+alter table collection_resource_customization_to_service 
+add foreign key (resource_model_customization_uuid) 
+references collection_resource_customization(model_customization_uuid)
+on delete cascade;
+
+
+create table if not exists `collection_network_resource_customization` (
+`model_customization_uuid` varchar(200) not null,
+`model_instance_name` varchar(200) not null,
+`network_technology` varchar(45) null,
+`network_type` varchar(45) null,
+`network_role` varchar(200) null,
+`network_scope` varchar(45) null,
+`creation_timestamp` datetime not null default current_timestamp, 
+`network_resource_model_uuid` varchar(200) not null, `instance_group_model_uuid` varchar(200) null,
+`crc_model_customization_uuid` varchar(200) not null, primary key
+(`model_customization_uuid`, `crc_model_customization_uuid`),
+index `fk_collection_net_resource_customization__network_resource1_idx`
+(`network_resource_model_uuid` asc), index
+`fk_collection_net_resource_customization__instance_group1_idx`
+(`instance_group_model_uuid` asc), index
+`fk_col_net_res_customization__collection_res_customization_idx`
+(`crc_model_customization_uuid` asc), constraint
+`fk_collection_net_resource_customization__network_resource10` foreign
+key (`network_resource_model_uuid`) references
+`network_resource` (`model_uuid`) on delete cascade on
+update cascade, constraint
+`fk_collection_net_resource_customization__instance_group10` foreign key
+(`instance_group_model_uuid`) references `instance_group`
+(`model_uuid`) on delete cascade on update cascade, constraint
+`fk_collection_network_resource_customization__collection_reso1` foreign
+key (`crc_model_customization_uuid`) references
+`collection_resource_customization`
+(`model_customization_uuid`) on delete cascade on update cascade) engine
+= innodb default character set = latin1;
+
+CREATE TABLE IF NOT EXISTS `rainy_day_handler_macro` (
+`id` INT(11) NOT NULL AUTO_INCREMENT,
+`FLOW_NAME` VARCHAR(200) NOT NULL,
+`SERVICE_TYPE` VARCHAR(200) NOT NULL,
+`VNF_TYPE` VARCHAR(200) NOT NULL,
+`ERROR_CODE` VARCHAR(200) NOT NULL,
+`WORK_STEP` VARCHAR(200) NOT NULL,
+`POLICY` VARCHAR(200) NOT NULL,
+PRIMARY KEY (`id`))
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = latin1;
+
+CREATE TABLE IF NOT EXISTS `northbound_request_ref_lookup` (
+`id` INT(11) NOT NULL AUTO_INCREMENT,
+`REQUEST_SCOPE` VARCHAR(200) NOT NULL,
+`ACTION` VARCHAR(200) NOT NULL,
+`MACRO_ACTION` VARCHAR(200) NOT NULL,
+`IS_ALACARTE` TINYINT(1) NOT NULL DEFAULT 0,
+`IS_TOPLEVELFLOW` TINYINT(1) NOT NULL DEFAULT 0,
+`MIN_API_VERSION` DOUBLE NOT NULL,
+`MAX_API_VERSION` DOUBLE NULL,
+PRIMARY KEY (`id`),
+UNIQUE INDEX `UK_northbound_request_ref_lookup` (`MIN_API_VERSION` ASC, `REQUEST_SCOPE` ASC, `ACTION` ASC, `IS_ALACARTE` ASC))
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = latin1;
+
+CREATE TABLE IF NOT EXISTS `orchestration_flow_reference` (
+`id` INT(11) NOT NULL AUTO_INCREMENT,
+`COMPOSITE_ACTION` VARCHAR(200) NOT NULL,
+`SEQ_NO` INT(11) NOT NULL,
+`FLOW_NAME` VARCHAR(200) NOT NULL,
+`FLOW_VERSION` DOUBLE NOT NULL,
+`NB_REQ_REF_LOOKUP_ID` INT(11) NOT NULL,
+PRIMARY KEY (`id`),
+INDEX `fk_orchestration_flow_reference__northbound_req_ref_look_idx` (`NB_REQ_REF_LOOKUP_ID` ASC),
+UNIQUE INDEX `UK_orchestration_flow_reference` (`COMPOSITE_ACTION` ASC, `FLOW_NAME` ASC, `SEQ_NO` ASC, `NB_REQ_REF_LOOKUP_ID` ASC),
+CONSTRAINT `fk_orchestration_flow_reference__northbound_request_ref_look1` 
+FOREIGN KEY (`NB_REQ_REF_LOOKUP_ID`) REFERENCES `northbound_request_ref_lookup` (`id`) 
+ON DELETE CASCADE ON UPDATE CASCADE)
+ENGINE = InnoDB DEFAULT CHARACTER SET = latin1;
+
+--------START Request DB SCHEMA --------
+CREATE DATABASE requestdb;
+USE requestdb;
+
+
+CREATE TABLE `active_requests` (
+  `REQUEST_ID` varchar(45) NOT NULL,
+  `CLIENT_REQUEST_ID` varchar(45) DEFAULT NULL,
+  `SERVICE_INSTANCE_ID` varchar(50) NOT NULL,
+  `SUBSCRIBER_NAME` varchar(200) DEFAULT NULL,
+  `REQUEST_URI` varchar(255) DEFAULT NULL,
+  `SERVICE_TYPE` varchar(65) NOT NULL,
+  `REQUEST_ACTION` varchar(45) NOT NULL,
+  `NOTIFICATION_URL` varchar(255) DEFAULT NULL,
+  `REQUEST_ID_IN_PROGRESS` varchar(45) DEFAULT NULL,
+  `START_TIME` datetime DEFAULT NULL,
+  `MODIFY_TIME` datetime DEFAULT NULL,
+  `COMPLETION_TIME` datetime DEFAULT NULL,
+  `RESPONSE_CODE` varchar(20) DEFAULT NULL,
+  `RESPONSE_BODY` longtext,
+  `STATUS` varchar(25) DEFAULT NULL,
+  `SERVICE_REQUEST_TIMEOUT` datetime DEFAULT NULL,
+  `FINAL_ERROR_CODE` varchar(20) DEFAULT NULL,
+  `FINAL_ERROR_MESSAGE` varchar(2000) DEFAULT NULL,
+  `ORDER_NUMBER` varchar(45) DEFAULT NULL,
+  `SOURCE` varchar(20) DEFAULT NULL,
+  `RESPONSE_STATUS` varchar(25) DEFAULT NULL,
+  `ORDER_VERSION` varchar(20) DEFAULT NULL,
+  `LAST_MODIFIED_BY` varchar(20) DEFAULT NULL,
+  `MOCARS_TICKET_NUM` varchar(200) DEFAULT NULL,
+  `REQUEST_BODY` longtext,
+  `REQUEST_SUB_ACTION` varchar(45) DEFAULT NULL,
+  `SDNC_CALLBACK_BPEL_URL` varchar(255) DEFAULT NULL,
+  `FEATURE_TYPE` varchar(255) DEFAULT NULL,
+  `FEATURE_INSTANCE_ID` varchar(255) DEFAULT NULL,
+  `REQUEST_TYPE` varchar(255) DEFAULT NULL,
+  `INTERIM_COMPLETION_TIME` datetime DEFAULT NULL,
+  `INTERIM_STAGE_COMPLETION` int(11) DEFAULT NULL,
+  `SERVICE_NAME_VERSION_ID` varchar(50) DEFAULT NULL,
+  `GLOBAL_SUBSCRIBER_ID` varchar(255) DEFAULT NULL,
+  `SERVICE_ID` varchar(50) DEFAULT NULL,
+  `SERVICE_VERSION` varchar(10) DEFAULT NULL,
+  `CORRELATOR` varchar(50) DEFAULT NULL,
+  PRIMARY KEY (`REQUEST_ID`),
+  UNIQUE KEY `UK_f0hdk7xbw5mb2trnxx0fvlh3x` (`CLIENT_REQUEST_ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+CREATE TABLE `infra_active_requests` (
+  `REQUEST_ID` varchar(45) NOT NULL,
+  `CLIENT_REQUEST_ID` varchar(45) DEFAULT NULL,
+  `ACTION` varchar(45) DEFAULT NULL,
+  `REQUEST_STATUS` varchar(20) DEFAULT NULL,
+  `STATUS_MESSAGE` longtext DEFAULT NULL,
+  `PROGRESS` bigint(20) DEFAULT NULL,
+  `START_TIME` datetime DEFAULT NULL,
+  `END_TIME` datetime DEFAULT NULL,
+  `SOURCE` varchar(45) DEFAULT NULL,
+  `VNF_ID` varchar(45) DEFAULT NULL,
+  `VNF_NAME` varchar(80) DEFAULT NULL,
+  `VNF_TYPE` varchar(200) DEFAULT NULL,
+  `SERVICE_TYPE` varchar(45) DEFAULT NULL,
+  `AIC_NODE_CLLI` varchar(11) DEFAULT NULL,
+  `TENANT_ID` varchar(45) DEFAULT NULL,
+  `PROV_STATUS` varchar(20) DEFAULT NULL,
+  `VNF_PARAMS` longtext,
+  `VNF_OUTPUTS` longtext,
+  `REQUEST_BODY` longtext,
+  `RESPONSE_BODY` longtext,
+  `LAST_MODIFIED_BY` varchar(100) DEFAULT NULL,
+  `MODIFY_TIME` datetime DEFAULT NULL,
+  `REQUEST_TYPE` varchar(20) DEFAULT NULL,
+  `VOLUME_GROUP_ID` varchar(45) DEFAULT NULL,
+  `VOLUME_GROUP_NAME` varchar(45) DEFAULT NULL,
+  `VF_MODULE_ID` varchar(45) DEFAULT NULL,
+  `VF_MODULE_NAME` varchar(200) DEFAULT NULL,
+  `VF_MODULE_MODEL_NAME` varchar(200) DEFAULT NULL,
+  `AAI_SERVICE_ID` varchar(50) DEFAULT NULL,
+  `AIC_CLOUD_REGION` varchar(11) DEFAULT NULL,
+  `CALLBACK_URL` varchar(200) DEFAULT NULL,
+  `CORRELATOR` varchar(80) DEFAULT NULL,
+  `NETWORK_ID` varchar(45) DEFAULT NULL,
+  `NETWORK_NAME` varchar(80) DEFAULT NULL,
+  `NETWORK_TYPE` varchar(80) DEFAULT NULL,
+  `REQUEST_SCOPE` varchar(20) NOT NULL DEFAULT 'unknown',
+  `REQUEST_ACTION` varchar(45) NOT NULL DEFAULT 'unknown',
+  `SERVICE_INSTANCE_ID` varchar(45) DEFAULT NULL,
+  `SERVICE_INSTANCE_NAME` varchar(80) DEFAULT NULL,
+  `REQUESTOR_ID` varchar(50) DEFAULT NULL,
+  `CONFIGURATION_ID` varchar(45) DEFAULT NULL,
+  `CONFIGURATION_NAME` varchar(200) DEFAULT NULL,
+  `OPERATIONAL_ENV_ID` varchar(45) DEFAULT NULL,
+  `OPERATIONAL_ENV_NAME` varchar(200) DEFAULT NULL,
+  PRIMARY KEY (`REQUEST_ID`),
+  UNIQUE KEY `UK_bhu6w8p7wvur4pin0gjw2d5ak` (`CLIENT_REQUEST_ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+CREATE TABLE `archived_infra_requests` (
+  `REQUEST_ID` varchar(45) NOT NULL,
+  `CLIENT_REQUEST_ID` varchar(45) DEFAULT NULL,
+  `ACTION` varchar(45) DEFAULT NULL,
+  `REQUEST_STATUS` varchar(20) DEFAULT NULL,
+  `STATUS_MESSAGE` longtext DEFAULT NULL,
+  `PROGRESS` bigint(20) DEFAULT NULL,
+  `START_TIME` datetime DEFAULT NULL,
+  `END_TIME` datetime DEFAULT NULL,
+  `SOURCE` varchar(45) DEFAULT NULL,
+  `VNF_ID` varchar(45) DEFAULT NULL,
+  `VNF_NAME` varchar(80) DEFAULT NULL,
+  `VNF_TYPE` varchar(200) DEFAULT NULL,
+  `SERVICE_TYPE` varchar(45) DEFAULT NULL,
+  `AIC_NODE_CLLI` varchar(11) DEFAULT NULL,
+  `TENANT_ID` varchar(45) DEFAULT NULL,
+  `PROV_STATUS` varchar(20) DEFAULT NULL,
+  `VNF_PARAMS` longtext,
+  `VNF_OUTPUTS` longtext,
+  `REQUEST_BODY` longtext,
+  `RESPONSE_BODY` longtext,
+  `LAST_MODIFIED_BY` varchar(100) DEFAULT NULL,
+  `MODIFY_TIME` datetime DEFAULT NULL,
+  `REQUEST_TYPE` varchar(20) DEFAULT NULL,
+  `VOLUME_GROUP_ID` varchar(45) DEFAULT NULL,
+  `VOLUME_GROUP_NAME` varchar(45) DEFAULT NULL,
+  `VF_MODULE_ID` varchar(45) DEFAULT NULL,
+  `VF_MODULE_NAME` varchar(200) DEFAULT NULL,
+  `VF_MODULE_MODEL_NAME` varchar(200) DEFAULT NULL,
+  `AAI_SERVICE_ID` varchar(50) DEFAULT NULL,
+  `AIC_CLOUD_REGION` varchar(11) DEFAULT NULL,
+  `CALLBACK_URL` varchar(200) DEFAULT NULL,
+  `CORRELATOR` varchar(80) DEFAULT NULL,
+  `NETWORK_ID` varchar(45) DEFAULT NULL,
+  `NETWORK_NAME` varchar(80) DEFAULT NULL,
+  `NETWORK_TYPE` varchar(80) DEFAULT NULL,
+  `REQUEST_SCOPE` varchar(20) NOT NULL DEFAULT 'unknown',
+  `REQUEST_ACTION` varchar(45) NOT NULL DEFAULT 'unknown',
+  `SERVICE_INSTANCE_ID` varchar(45) DEFAULT NULL,
+  `SERVICE_INSTANCE_NAME` varchar(80) DEFAULT NULL,
+  `REQUESTOR_ID` varchar(50) DEFAULT NULL,
+  `CONFIGURATION_ID` varchar(45) DEFAULT NULL,
+  `CONFIGURATION_NAME` varchar(200) DEFAULT NULL,
+  `OPERATIONAL_ENV_ID` varchar(45) DEFAULT NULL,
+  `OPERATIONAL_ENV_NAME` varchar(200) DEFAULT NULL,
+  PRIMARY KEY (`REQUEST_ID`),
+  UNIQUE KEY `UK_bhu6w8p7wvur4pin0gjw2d72h` (`CLIENT_REQUEST_ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+CREATE TABLE `site_status` (
+  `SITE_NAME` varchar(255) NOT NULL,
+  `STATUS` bit(1) DEFAULT NULL,
+  `CREATION_TIMESTAMP` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  PRIMARY KEY (`SITE_NAME`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+CREATE TABLE `watchdog_distributionid_status` (
+  `DISTRIBUTION_ID` varchar(45) NOT NULL,
+  `DISTRIBUTION_ID_STATUS` varchar(45) DEFAULT NULL,
+  `CREATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `MODIFY_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
+  PRIMARY KEY (`DISTRIBUTION_ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+CREATE TABLE `watchdog_per_component_distribution_status` (
+  `DISTRIBUTION_ID` varchar(45) NOT NULL,
+  `COMPONENT_NAME` varchar(45) NOT NULL,
+  `COMPONENT_DISTRIBUTION_STATUS` varchar(45) DEFAULT NULL,
+  `CREATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `MODIFY_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
+  PRIMARY KEY (`DISTRIBUTION_ID`,`COMPONENT_NAME`),
+  CONSTRAINT `fk_watchdog_component_distribution_status_watchdog_distributi1` FOREIGN KEY (`DISTRIBUTION_ID`) REFERENCES `watchdog_distributionid_status` (`DISTRIBUTION_ID`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+CREATE TABLE `watchdog_service_mod_ver_id_lookup` (
+  `DISTRIBUTION_ID` varchar(45) NOT NULL,
+  `SERVICE_MODEL_VERSION_ID` varchar(45) NOT NULL,
+  `CREATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `MODIFY_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  PRIMARY KEY (`DISTRIBUTION_ID`,`SERVICE_MODEL_VERSION_ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+CREATE TABLE `activate_operational_env_service_model_distribution_status` (
+  `OPERATIONAL_ENV_ID` varchar(45) NOT NULL,
+  `SERVICE_MODEL_VERSION_ID` varchar(45) NOT NULL,
+  `REQUEST_ID` varchar(45) NOT NULL,
+  `SERVICE_MOD_VER_FINAL_DISTR_STATUS` varchar(45) DEFAULT NULL,
+  `RECOVERY_ACTION` varchar(30) DEFAULT NULL,
+  `RETRY_COUNT_LEFT` int(11) DEFAULT NULL,
+  `WORKLOAD_CONTEXT` varchar(80) NOT NULL,
+  `CREATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `MODIFY_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
+  PRIMARY KEY (`OPERATIONAL_ENV_ID`,`SERVICE_MODEL_VERSION_ID`,`REQUEST_ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+CREATE TABLE `activate_operational_env_per_distributionid_status` (
+  `DISTRIBUTION_ID` varchar(45) NOT NULL,
+  `DISTRIBUTION_ID_STATUS` varchar(45) DEFAULT NULL,
+  `DISTRIBUTION_ID_ERROR_REASON` varchar(250) DEFAULT NULL,
+  `CREATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `MODIFY_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
+  `OPERATIONAL_ENV_ID` varchar(45) NOT NULL,
+  `SERVICE_MODEL_VERSION_ID` varchar(45) NOT NULL,
+  `REQUEST_ID` varchar(45) NOT NULL,
+  PRIMARY KEY (`DISTRIBUTION_ID`),
+  KEY `fk_activate_op_env_per_distributionid_status__aoesmds1_idx` (`OPERATIONAL_ENV_ID`,`SERVICE_MODEL_VERSION_ID`,`REQUEST_ID`),
+  CONSTRAINT `fk_activate_op_env_per_distributionid_status__aoesmds1` FOREIGN KEY (`OPERATIONAL_ENV_ID`, `SERVICE_MODEL_VERSION_ID`, `REQUEST_ID`) REFERENCES `activate_operational_env_service_model_distribution_status` (`OPERATIONAL_ENV_ID`, `SERVICE_MODEL_VERSION_ID`, `REQUEST_ID`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+create table operation_status (
+  SERVICE_ID varchar(255) not null,
+  OPERATION_ID varchar(255) not null,
+  SERVICE_NAME varchar(255),
+  OPERATION_TYPE varchar(255),
+  USER_ID varchar(255),
+  RESULT varchar(255),
+  OPERATION_CONTENT varchar(255),
+  PROGRESS varchar(255),
+  REASON varchar(255),
+  OPERATE_AT datetime NOT NULL,
+  FINISHED_AT datetime NOT NULL,
+  primary key (SERVICE_ID,OPERATION_ID)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+    
+create table resource_operation_status (
+  SERVICE_ID varchar(255) not null,
+  OPERATION_ID varchar(255) not null,
+  RESOURCE_TEMPLATE_UUID varchar(255) not null,
+  OPER_TYPE varchar(255),
+  RESOURCE_INSTANCE_ID varchar(255),
+  JOB_ID varchar(255),
+  STATUS varchar(255),
+  PROGRESS varchar(255),
+  ERROR_CODE varchar(255) ,
+  STATUS_DESCRIPOTION varchar(255) ,
+  primary key (SERVICE_ID,OPERATION_ID,RESOURCE_TEMPLATE_UUID)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+create table if not exists model_recipe (
+	`ID` INT(11) NOT NULL AUTO_INCREMENT,
+	`MODEL_ID` INT(11),
+	`ACTION` VARCHAR(40),
+	`SCHEMA_VERSION` VARCHAR(40),
+	`DESCRIPTION` VARCHAR(40),
+	`ORCHESTRATION_URI` VARCHAR(20),
+	`MODEL_PARAM_XSD` VARCHAR(20),
+	`RECIPE_TIMEOUT` INT(11),
+	`CREATION_TIMESTAMP` datetime not null default current_timestamp,
+	PRIMARY KEY (`ID`),
+	CONSTRAINT uk1_model_recipe UNIQUE (`MODEL_ID`, `ACTION`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+create table if not exists model (
+	`ID` INT(11) NOT NULL AUTO_INCREMENT,
+	`MODEL_CUSTOMIZATION_ID` VARCHAR(40),
+	`MODEL_CUSTOMIZATION_NAME` VARCHAR(40),
+	`MODEL_INVARIANT_ID` VARCHAR(40),
+	`MODEL_NAME` VARCHAR(40),
+	`MODEL_TYPE` VARCHAR(20),
+	`MODEL_VERSION` VARCHAR(20),
+	`MODEL_VERSION_ID` VARCHAR(40),
+	`CREATION_TIMESTAMP` datetime not null default current_timestamp,
+	`RECIPE` INT(11),
+	PRIMARY KEY (`ID`),
+	CONSTRAINT uk1_model UNIQUE (`MODEL_TYPE`, `MODEL_VERSION_ID`),
+	FOREIGN KEY (`RECIPE`) REFERENCES `model_recipe` (`MODEL_ID`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+ALTER TABLE `catalogdb`.`vnf_recipe` 
+CHANGE COLUMN `VNF_TYPE` `NF_ROLE` VARCHAR(200) NULL DEFAULT NULL ;
\ No newline at end of file
