summaryrefslogtreecommitdiffstats
path: root/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc
diff options
context:
space:
mode:
Diffstat (limited to 'packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc')
-rw-r--r--packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/ASDCITCase.java497
-rw-r--r--packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/DistributionClientEmulator.java133
-rw-r--r--packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonArtifactInfo.java102
-rw-r--r--packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonArtifactInfoDeserializer.java28
-rw-r--r--packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonNotificationData.java108
-rw-r--r--packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonResourceInfo.java70
-rw-r--r--packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonResourceInfoDeserializer.java23
-rw-r--r--packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonVfModuleMetaData.java63
8 files changed, 1024 insertions, 0 deletions
diff --git a/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/ASDCITCase.java b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/ASDCITCase.java
new file mode 100644
index 0000000000..47b261afd6
--- /dev/null
+++ b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/ASDCITCase.java
@@ -0,0 +1,497 @@
+package org.openecomp.mso.global_tests.asdc;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.net.URISyntaxException;
+import java.security.NoSuchAlgorithmException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.OperateOnDeployment;
+import org.jboss.arquillian.container.test.api.Testable;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.resolver.api.maven.Maven;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.AfterClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;
+import org.openecomp.sdc.api.notification.IArtifactInfo;
+import org.openecomp.sdc.api.notification.IResourceInstance;
+import org.openecomp.sdc.api.notification.IVfModuleMetadata;
+import org.openecomp.sdc.utils.DistributionStatusEnum;
+import org.openecomp.mso.asdc.client.ASDCConfiguration;
+import org.openecomp.mso.asdc.client.ASDCController;
+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.db.catalog.CatalogDatabase;
+import org.openecomp.mso.db.catalog.beans.HeatEnvironment;
+import org.openecomp.mso.db.catalog.beans.HeatFiles;
+import org.openecomp.mso.db.catalog.beans.HeatTemplate;
+import org.openecomp.mso.db.catalog.beans.Service;
+import org.openecomp.mso.db.catalog.beans.VfModule;
+import org.openecomp.mso.db.catalog.beans.VnfResource;
+import org.openecomp.mso.global_tests.ArquillianPackagerForITCases;
+import org.openecomp.mso.global_tests.asdc.notif_emulator.DistributionClientEmulator;
+import org.openecomp.mso.global_tests.asdc.notif_emulator.JsonNotificationData;
+
+@RunWith(Arquillian.class)
+public class ASDCITCase {
+
+ /**
+ * Add the resources in the right folder of a jar
+ * @param jar The jarArchive
+ * @param dir The main dir containing things that must be added
+ * @throws Exception In case of issues with the files
+ */
+ private static void addFiles(JavaArchive jar, File dir,String destFolder) throws Exception {
+
+ if (!dir.isDirectory()) {
+ throw new Exception("not a directory");
+ }
+ for (File f : dir.listFiles()) {
+
+
+ if (f.isFile()) {
+ jar.addAsResource(f, destFolder + "/" + f.getName());
+ } else {
+
+ addFiles(jar, f, destFolder+"/"+f.getName());
+ }
+ }
+ }
+
+ @Deployment(name="asdc-controller",testable=true)
+ public static Archive<?> createAsdcControllerWarDeployment () throws Exception {
+ System.out.println("Deploying ASDC Controller WAR with additional resources on default server");
+
+ WebArchive warArchive = (WebArchive)ArquillianPackagerForITCases.createPackageFromExistingOne("../../asdc-controller/target/", "asdc-controller*.war", "asdc-controller.war");
+
+ // Add the current test class
+ JavaArchive testclasses = ShrinkWrap.create (JavaArchive.class, "testClasses.jar");
+
+ testclasses.addPackage("org.openecomp.mso.global_tests.asdc.notif_emulator");
+
+ addFiles(testclasses,new File(Thread.currentThread().getContextClassLoader().getResource("resource-examples/asdc").getFile()),"resource-examples/asdc");
+
+ System.out.println(testclasses.toString(true));
+ warArchive.addAsLibraries(testclasses);
+
+
+
+ // BE CAREFUL a settings.xml file must be located in ${home.user}/.m2/settings.xml
+ warArchive.addAsLibraries(Maven.resolver()
+ .resolve("org.mockito:mockito-all:1.10.19")
+ .withoutTransitivity ()
+ .asFile ());
+
+ //warArchive.addPackage("org.openecomp.mso.global_tests.asdc.notif_emulator");
+ //addFiles(warArchive,new File(ASDCITCase.class.getClassLoader().getResource("resource-examples").getPath()),"resource-examples");
+
+ // Take one war randomly to make arquilian happy
+ Testable.archiveToTest(warArchive);
+
+
+ System.out.println(warArchive.toString(true));
+
+ return warArchive;
+ }
+
+ @BeforeClass
+ public static final void waitBeforeStart() throws InterruptedException,
+ IOException,
+ URISyntaxException,
+ NoSuchAlgorithmException {
+ System.out.println("Executing " + ASDCITCase.class.getName());
+ }
+
+ @AfterClass
+ public static final void waitAfterStart() throws InterruptedException,
+ IOException,
+ URISyntaxException,
+ NoSuchAlgorithmException {
+ System.out.println("Waiting 60000ms " + ASDCITCase.class.getName());
+ Thread.sleep(60000);
+ }
+
+ /**
+ * Be careful when using that notification fake structure, the UUID of notif artifacts MUST be different.
+ * There is a static Map behind the scene.
+ */
+ private JsonNotificationData notifDataWithoutModuleInfo;
+ private DistributionClientEmulator distribClientWithoutModuleInfo;
+
+ private JsonNotificationData notifDataV1, notifDataV2, notifDataV3, notifDataV4, notifDataV5,notifDataDNS,notifDataVFW;
+ private DistributionClientEmulator distribClientV1, distribClientV2, distribClientV3, distribClientV4, distribClientV5, distribClientV1ForSameNotif, distribClientDNS,distribClientVFW;
+
+
+ @Before
+ public final void beforeEachTest() throws IOException {
+
+ distribClientV1= new DistributionClientEmulator("/resource-examples/asdc/simpleNotif-V1");
+ distribClientV1ForSameNotif= new DistributionClientEmulator("/resource-examples/asdc/simpleNotif-V1");
+ notifDataV1 = JsonNotificationData.instantiateNotifFromJsonFile("/resource-examples/asdc/simpleNotif-V1");
+
+ // This is a duplicate in version 2 of the version 1
+ distribClientV2= new DistributionClientEmulator("/resource-examples/asdc/simpleNotif-V2");
+ notifDataV2 = JsonNotificationData.instantiateNotifFromJsonFile("/resource-examples/asdc/simpleNotif-V2");
+
+ distribClientV3= new DistributionClientEmulator("/resource-examples/asdc/simpleNotif-V3");
+ notifDataV3 = JsonNotificationData.instantiateNotifFromJsonFile("/resource-examples/asdc/simpleNotif-V3");
+
+ // This is a duplicate in version 4 of the version 3
+ distribClientV4= new DistributionClientEmulator("/resource-examples/asdc/simpleNotif-V4");
+ notifDataV4 = JsonNotificationData.instantiateNotifFromJsonFile("/resource-examples/asdc/simpleNotif-V4");
+
+ // This notification is to test the deployment of volume with nested + an artifact not used (should send notification with DEPLOY_ERROR
+ distribClientV5= new DistributionClientEmulator("/resource-examples/asdc/simpleNotif-V5");
+ notifDataV5 = JsonNotificationData.instantiateNotifFromJsonFile("/resource-examples/asdc/simpleNotif-V5");
+
+
+ distribClientWithoutModuleInfo= new DistributionClientEmulator("/resource-examples/asdc/notif-without-modules-metadata");
+ notifDataWithoutModuleInfo = JsonNotificationData.instantiateNotifFromJsonFile("/resource-examples/asdc/notif-without-modules-metadata");
+
+
+ distribClientDNS= new DistributionClientEmulator("/resource-examples/asdc/demo-dns-V1");
+ notifDataDNS = JsonNotificationData.instantiateNotifFromJsonFile("/resource-examples/asdc/demo-dns-V1");
+
+
+ distribClientVFW= new DistributionClientEmulator("/resource-examples/asdc/demo-vfw-V1");
+ notifDataVFW = JsonNotificationData.instantiateNotifFromJsonFile("/resource-examples/asdc/demo-vfw-V1");
+
+
+ }
+
+ @Test
+ @OperateOnDeployment("asdc-controller")
+ public void testNotifWithoutModuleInfo () throws NoSuchAlgorithmException,
+ IOException,
+ URISyntaxException,
+ ArtifactInstallerException, ASDCControllerException, ASDCParametersException {
+
+
+
+ ASDCController asdcController = new ASDCController("asdc-controller1", distribClientWithoutModuleInfo);
+ asdcController.initASDC();
+ asdcController.treatNotification(notifDataWithoutModuleInfo);
+
+ assertTrue(distribClientWithoutModuleInfo.getDistributionMessageReceived().size() > 0);
+
+ int badDeployment=0;
+ for (IDistributionStatusMessage message:distribClientWithoutModuleInfo.getDistributionMessageReceived()) {
+ System.out.println("Message received, URL:"+message.getArtifactURL()+", Value:"+message.getStatus().name());
+ if(message.getStatus().equals(DistributionStatusEnum.DEPLOY_ERROR)) {
+ badDeployment++;
+ }
+ }
+ assertTrue(badDeployment == 3);
+
+ // Check if something has been recorder in DB, as it should not
+ CatalogDatabase catalogDB = new CatalogDatabase();
+
+ HeatTemplate heatTemplate = catalogDB.getHeatTemplate("Whot-nimbus-oam_v1.0.yaml", "1.0", "resourceName-1");
+ assertNull(heatTemplate);
+ }
+
+ private void validateVnfResource(JsonNotificationData inputNotification,List<IVfModuleMetadata> moduleList) {
+
+ CatalogDatabase catalogDB = new CatalogDatabase();
+
+
+ for (IResourceInstance resource:inputNotification.getResources()) {
+ VnfResource vnfResourceDB = catalogDB.getVnfResource(inputNotification.getServiceName()+"/"+resource.getResourceInstanceName(), inputNotification.getServiceVersion());
+ assertNotNull(vnfResourceDB);
+
+ assertTrue(vnfResourceDB.getAsdcUuid().equals(resource.getResourceUUID()));
+ assertTrue(vnfResourceDB.getDescription().equals(inputNotification.getServiceDescription()));
+ assertTrue(vnfResourceDB.getModelInvariantUuid().equals(resource.getResourceInvariantUUID()));
+ assertTrue(vnfResourceDB.getModelVersion().equals(resource.getResourceVersion()));
+ assertTrue(vnfResourceDB.getOrchestrationMode().equals("HEAT"));
+ assertTrue(vnfResourceDB.getVersion().equals(inputNotification.getServiceVersion()));
+ assertTrue(vnfResourceDB.getVnfType().equals(inputNotification.getServiceName()+"/"+resource.getResourceInstanceName()));
+ assertTrue(vnfResourceDB.getModelCustomizationName().equals(resource.getResourceInstanceName()));
+ assertTrue(vnfResourceDB.getModelName().equals(resource.getResourceName()));
+ assertTrue(vnfResourceDB.getServiceModelInvariantUUID().equals(inputNotification.getServiceInvariantUUID()));
+
+ for (IVfModuleMetadata module:moduleList) {
+
+ VfModule vfModuleDB = catalogDB.getVfModuleModelName(module.getVfModuleModelName(),inputNotification.getServiceVersion());
+ assertNotNull(vfModuleDB);
+ assertTrue(module.getVfModuleModelName().equals(vfModuleDB.getModelName()));
+
+ assertTrue((inputNotification.getServiceName()+"/"+resource.getResourceInstanceName()+"::"+vfModuleDB.getModelName()).equals(vfModuleDB.getType()));
+ assertTrue(vnfResourceDB.getId()!=0);
+ assertNotNull(vfModuleDB.getVnfResourceId());
+
+ assertTrue(vnfResourceDB.getId()==vfModuleDB.getVnfResourceId().intValue());
+
+ for (String artifactUUID:module.getArtifacts()) {
+ IArtifactInfo artifact = null;
+ for (IArtifactInfo artifactTemp:resource.getArtifacts()) {
+ if (artifactTemp.getArtifactUUID().equals(artifactUUID)) {
+ artifact = artifactTemp;
+ break;
+ }
+ }
+ assertNotNull(artifact);
+
+ switch (artifact.getArtifactType()) {
+ case ASDCConfiguration.HEAT:
+ HeatTemplate heatTemplateDB= catalogDB.getHeatTemplate(vfModuleDB.getTemplateId());
+ assertNotNull(heatTemplateDB);
+ assertTrue(heatTemplateDB.getAsdcResourceName().equals(resource.getResourceName()));
+ assertTrue(heatTemplateDB.getAsdcUuid().equals(artifact.getArtifactUUID()));
+ assertTrue(heatTemplateDB.getDescription().equals(artifact.getArtifactDescription()));
+ assertTrue(heatTemplateDB.getTemplateBody() != null && !heatTemplateDB.getTemplateBody().isEmpty());
+ assertTrue(heatTemplateDB.getParameters().size()>0);
+
+ assertTrue(heatTemplateDB.getTemplateName().equals(artifact.getArtifactName()));
+
+ if (artifact.getArtifactTimeout() != null) {
+ assertTrue(heatTemplateDB.getTimeoutMinutes()== artifact.getArtifactTimeout().intValue());
+ } else {
+ assertTrue(heatTemplateDB.getTimeoutMinutes()== 240);
+ }
+ assertTrue(heatTemplateDB.getVersion().equals(artifact.getArtifactVersion()));
+
+ assertFalse(heatTemplateDB.getTemplateBody().contains("file:///"));
+ break;
+ case ASDCConfiguration.HEAT_ENV:
+
+ HeatEnvironment heatEnvironmentDB = catalogDB.getHeatEnvironment(artifact.getArtifactName(), artifact.getArtifactVersion(), inputNotification.getServiceName()+"/"+resource.getResourceInstanceName());
+
+ assertNotNull(heatEnvironmentDB);
+ assertTrue((vfModuleDB.getVolEnvironmentId() != null && vfModuleDB.getVolEnvironmentId().intValue() == heatEnvironmentDB.getId())
+ || (vfModuleDB.getEnvironmentId() != null && vfModuleDB.getEnvironmentId() == heatEnvironmentDB.getId()));
+
+ assertTrue(heatEnvironmentDB.getAsdcResourceName().equals(inputNotification.getServiceName()+"/"+resource.getResourceInstanceName()));
+
+ assertTrue(heatEnvironmentDB.getAsdcUuid().equals(artifact.getArtifactUUID()));
+ assertTrue(heatEnvironmentDB.getDescription().equals(artifact.getArtifactDescription()));
+ assertTrue(heatEnvironmentDB.getVersion().equals(artifact.getArtifactVersion()));
+ assertTrue(heatEnvironmentDB.getName().equals(artifact.getArtifactName()));
+ assertTrue(heatEnvironmentDB.getEnvironment() != null);
+ assertFalse(heatEnvironmentDB.getEnvironment().contains("file:///"));
+
+ break;
+ case ASDCConfiguration.HEAT_NESTED:
+ Map<String,Object> listNestedDBMainHeat=new HashMap<String,Object>();
+ Map<String,Object> listNestedDBVolHeat=new HashMap<String,Object>();
+
+ if (vfModuleDB.getTemplateId() != null) {
+ listNestedDBMainHeat = catalogDB.getNestedTemplates(vfModuleDB.getTemplateId());
+ }
+ if (vfModuleDB.getVolTemplateId() != null) {
+ listNestedDBVolHeat = catalogDB.getNestedTemplates(vfModuleDB.getVolTemplateId());
+ }
+
+ assertTrue(listNestedDBMainHeat.size() > 0 || listNestedDBVolHeat.size() > 0);
+
+
+ assertTrue(listNestedDBMainHeat.get(artifact.getArtifactName()) != null
+ || listNestedDBVolHeat.get(artifact.getArtifactName()) != null);
+
+ HeatTemplate rightNestedTemplateDB = catalogDB.getHeatTemplate(artifact.getArtifactName(), artifact.getArtifactVersion(), resource.getResourceName());
+ assertNotNull(rightNestedTemplateDB);
+ assertTrue(catalogDB.getNestedHeatTemplate(vfModuleDB.getTemplateId(), rightNestedTemplateDB.getId()) != null || catalogDB.getNestedHeatTemplate(vfModuleDB.getVolTemplateId(), rightNestedTemplateDB.getId()) != null);
+
+ assertTrue(rightNestedTemplateDB.getAsdcResourceName().equals(resource.getResourceName()));
+ assertTrue(rightNestedTemplateDB.getAsdcUuid().equals(artifact.getArtifactUUID()));
+ assertTrue(rightNestedTemplateDB.getDescription().equals(artifact.getArtifactDescription()));
+ assertTrue(rightNestedTemplateDB.getTemplateBody() != null && !rightNestedTemplateDB.getTemplateBody().isEmpty());
+ assertTrue(rightNestedTemplateDB.getTemplateName().equals(artifact.getArtifactName()));
+
+ if (artifact.getArtifactTimeout() != null) {
+ assertTrue(rightNestedTemplateDB.getTimeoutMinutes()== artifact.getArtifactTimeout().intValue());
+ } else {
+ assertTrue(rightNestedTemplateDB.getTimeoutMinutes()== 240);
+ }
+ assertTrue(rightNestedTemplateDB.getVersion().equals(artifact.getArtifactVersion()));
+ assertFalse(rightNestedTemplateDB.getTemplateBody().contains("file:///"));
+
+ break;
+ case ASDCConfiguration.HEAT_VOL:
+ HeatTemplate heatTemplateVolDB = catalogDB.getHeatTemplate(vfModuleDB.getVolTemplateId());
+ assertNotNull(heatTemplateVolDB);
+
+ assertTrue(heatTemplateVolDB.getAsdcResourceName().equals(resource.getResourceName()));
+ assertTrue(heatTemplateVolDB.getAsdcUuid().equals(artifact.getArtifactUUID()));
+ assertTrue(heatTemplateVolDB.getDescription().equals(artifact.getArtifactDescription()));
+ assertTrue(heatTemplateVolDB.getTemplateBody() != null && !heatTemplateVolDB.getTemplateBody().isEmpty());
+ assertTrue(heatTemplateVolDB.getTemplateName().equals(artifact.getArtifactName()));
+
+ if (artifact.getArtifactTimeout() != null) {
+ assertTrue(heatTemplateVolDB.getTimeoutMinutes()== artifact.getArtifactTimeout().intValue());
+ } else {
+ assertTrue(heatTemplateVolDB.getTimeoutMinutes()== 240);
+ }
+ assertTrue(heatTemplateVolDB.getVersion().equals(artifact.getArtifactVersion()));
+ assertFalse(heatTemplateVolDB.getTemplateBody().contains("file:///"));
+
+ break;
+ case ASDCConfiguration.HEAT_ARTIFACT:
+ Map<String,HeatFiles> heatFilesDB= catalogDB.getHeatFilesForVfModule(vfModuleDB.getId());
+ assertTrue(heatFilesDB.size()>0);
+ HeatFiles rightHeatFilesDB=heatFilesDB.get( artifact.getArtifactName());
+ assertNotNull(rightHeatFilesDB);
+
+ assertTrue(rightHeatFilesDB.getAsdcResourceName().equals(resource.getResourceName()));
+ assertTrue(rightHeatFilesDB.getAsdcUuid().equals(artifact.getArtifactUUID()));
+ assertTrue(rightHeatFilesDB.getDescription().equals(artifact.getArtifactDescription()));
+ assertTrue(rightHeatFilesDB.getFileBody() != null && !rightHeatFilesDB.getFileBody().isEmpty());
+ assertTrue(rightHeatFilesDB.getFileName().equals( artifact.getArtifactName()));
+ assertTrue(rightHeatFilesDB.getVersion().equals(artifact.getArtifactVersion()));
+
+ break;
+ default:
+ break;
+
+ }
+ }
+
+ }
+
+ }
+
+ Service service = catalogDB.getServiceByUUID(inputNotification.getServiceUUID());
+ assertNotNull(service);
+ assertTrue(service.getCreated() !=null && service.getCreated().getTime()>0);
+ assertTrue(service.getDescription().equals(inputNotification.getServiceDescription()));
+ assertTrue(service.getId()>0);
+ assertTrue(service.getModelInvariantUUID().equals(inputNotification.getServiceInvariantUUID()));
+ assertTrue(service.getServiceName().equals(inputNotification.getServiceName()));
+ assertTrue(service.getServiceNameVersionId().equals(inputNotification.getServiceUUID()));
+ assertTrue(service.getVersion().equals(inputNotification.getServiceVersion()));
+
+ }
+
+ @Test
+ @OperateOnDeployment("asdc-controller")
+ public void testNotifsDeployment () throws NoSuchAlgorithmException,
+ IOException,
+ URISyntaxException,
+ ArtifactInstallerException, ASDCControllerException, ASDCParametersException {
+
+
+
+ ASDCController asdcControllerV1 = new ASDCController("asdc-controller1", distribClientV1);
+ asdcControllerV1.initASDC();
+ asdcControllerV1.treatNotification(notifDataV1);
+
+ assertTrue(distribClientV1.getDistributionMessageReceived().size() > 0);
+ for (IDistributionStatusMessage message:distribClientV1.getDistributionMessageReceived()) {
+ System.out.println("Message received, URL:"+message.getArtifactURL()+", Value:"+message.getStatus().name());
+ assertTrue(message.getStatus().equals(DistributionStatusEnum.DEPLOY_OK) || message.getStatus().equals(DistributionStatusEnum.DOWNLOAD_OK));
+ }
+
+ this.validateVnfResource(notifDataV1,distribClientV1.getListVFModuleMetaData());
+
+
+
+ // Try again to load the same notif
+ ASDCController asdcControllerNewNotif = new ASDCController("asdc-controller1", distribClientV1ForSameNotif);
+ asdcControllerNewNotif.initASDC();
+ asdcControllerNewNotif.treatNotification(notifDataV1);
+
+ for (IDistributionStatusMessage message:distribClientV1ForSameNotif.getDistributionMessageReceived()) {
+ System.out.println("Message received, URL:"+message.getArtifactURL()+", Value:"+message.getStatus().name());
+ assertTrue(message.getStatus().equals(DistributionStatusEnum.ALREADY_DEPLOYED) || message.getStatus().equals(DistributionStatusEnum.ALREADY_DOWNLOADED));
+ }
+
+
+ // Try again to load same notif but in V2
+ ASDCController asdcControllerV2 = new ASDCController("asdc-controller1", distribClientV2);
+ asdcControllerV2.initASDC();
+ asdcControllerV2.treatNotification(notifDataV2);
+
+ for (IDistributionStatusMessage message:distribClientV2.getDistributionMessageReceived()) {
+ System.out.println("Message received, URL:"+message.getArtifactURL()+", Value:"+message.getStatus().name());
+ assertTrue(message.getStatus().equals(DistributionStatusEnum.DEPLOY_OK) || message.getStatus().equals(DistributionStatusEnum.DOWNLOAD_OK));
+ }
+
+ this.validateVnfResource(notifDataV2,distribClientV2.getListVFModuleMetaData());
+
+
+ // Try again to load same notif + Script + Volume artifacts and in service V3
+ ASDCController asdcControllerV3 = new ASDCController("asdc-controller1", distribClientV3);
+ asdcControllerV3.initASDC();
+ asdcControllerV3.treatNotification(notifDataV3);
+
+ for (IDistributionStatusMessage message:distribClientV3.getDistributionMessageReceived()) {
+ System.out.println("Message received, URL:"+message.getArtifactURL()+", Value:"+message.getStatus().name());
+ assertTrue(message.getStatus().equals(DistributionStatusEnum.DEPLOY_OK) || message.getStatus().equals(DistributionStatusEnum.DOWNLOAD_OK));
+ }
+
+ this.validateVnfResource(notifDataV3,distribClientV3.getListVFModuleMetaData());
+
+ // Try again to load same notif + Script + Volume artifacts and in service V4
+ ASDCController asdcControllerV4 = new ASDCController("asdc-controller1", distribClientV4);
+ asdcControllerV4.initASDC();
+ asdcControllerV4.treatNotification(notifDataV4);
+
+ for (IDistributionStatusMessage message:distribClientV4.getDistributionMessageReceived()) {
+ System.out.println("Message received, URL:"+message.getArtifactURL()+", Value:"+message.getStatus().name());
+ assertTrue(message.getStatus().equals(DistributionStatusEnum.DEPLOY_OK) || message.getStatus().equals(DistributionStatusEnum.DOWNLOAD_OK));
+ }
+
+ this.validateVnfResource(notifDataV4,distribClientV4.getListVFModuleMetaData());
+
+
+ // Try again with service V5 (Nested template attached to Volume + HEat artifact not used by module),
+ //this should force the notification DEPLOY_ERROR to be sent for this artifact
+ ASDCController asdcControllerV5 = new ASDCController("asdc-controller1", distribClientV5);
+ asdcControllerV5.initASDC();
+ asdcControllerV5.treatNotification(notifDataV5);
+
+ for (IDistributionStatusMessage message:distribClientV5.getDistributionMessageReceived()) {
+ System.out.println("Message received, URL:"+message.getArtifactURL()+", Value:"+message.getStatus().name());
+ if ("cloud-nimbus.sh".equals(message.getArtifactURL())) {
+ assertTrue(message.getStatus().equals(DistributionStatusEnum.DEPLOY_ERROR) || message.getStatus().equals(DistributionStatusEnum.DOWNLOAD_OK));
+ } else {
+ assertTrue(message.getStatus().equals(DistributionStatusEnum.DEPLOY_OK) || message.getStatus().equals(DistributionStatusEnum.DOWNLOAD_OK));
+ }
+ }
+
+ this.validateVnfResource(notifDataV5,distribClientV5.getListVFModuleMetaData());
+
+
+ // Try again with demo DNS
+ ASDCController asdcControllerDNS = new ASDCController("asdc-controller1", distribClientDNS);
+ asdcControllerDNS.initASDC();
+ asdcControllerDNS.treatNotification(notifDataDNS);
+
+ for (IDistributionStatusMessage message:distribClientDNS.getDistributionMessageReceived()) {
+ System.out.println("Message received, URL:"+message.getArtifactURL()+", Value:"+message.getStatus().name());
+ assertTrue(message.getStatus().equals(DistributionStatusEnum.DEPLOY_OK) || message.getStatus().equals(DistributionStatusEnum.DOWNLOAD_OK));
+ }
+
+ this.validateVnfResource(notifDataDNS,distribClientDNS.getListVFModuleMetaData());
+
+ // Try again with demo VFW
+ ASDCController asdcControllerVFW = new ASDCController("asdc-controller1", distribClientVFW);
+ asdcControllerVFW.initASDC();
+ asdcControllerVFW.treatNotification(notifDataVFW);
+
+ for (IDistributionStatusMessage message : distribClientVFW.getDistributionMessageReceived()) {
+ System.out.println("Message received, URL:" + message.getArtifactURL() + ", Value:" + message.getStatus().name());
+ assertTrue(message.getStatus().equals(DistributionStatusEnum.DEPLOY_OK)
+ || message.getStatus().equals(DistributionStatusEnum.DOWNLOAD_OK));
+ }
+
+ this.validateVnfResource(notifDataVFW, distribClientVFW.getListVFModuleMetaData());
+
+ }
+}
diff --git a/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/DistributionClientEmulator.java b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/DistributionClientEmulator.java
new file mode 100644
index 0000000000..f2fabc09ce
--- /dev/null
+++ b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/DistributionClientEmulator.java
@@ -0,0 +1,133 @@
+package org.openecomp.mso.global_tests.asdc.notif_emulator;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.commons.io.IOUtils;
+import org.codehaus.jackson.JsonParseException;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.type.TypeReference;
+import org.openecomp.sdc.api.IDistributionClient;
+import org.openecomp.sdc.api.consumer.IConfiguration;
+import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;
+import org.openecomp.sdc.api.consumer.INotificationCallback;
+import org.openecomp.sdc.api.notification.IArtifactInfo;
+import org.openecomp.sdc.api.notification.IVfModuleMetadata;
+import org.openecomp.sdc.api.results.IDistributionClientDownloadResult;
+import org.openecomp.sdc.api.results.IDistributionClientResult;
+import org.openecomp.sdc.impl.DistributionClientDownloadResultImpl;
+import org.openecomp.sdc.impl.DistributionClientResultImpl;
+import org.openecomp.sdc.utils.DistributionActionResultEnum;
+
+public class DistributionClientEmulator implements IDistributionClient {
+
+ private String resourcePath;
+
+ private List<IVfModuleMetadata> listVFModuleMetaData;
+
+ private List<IDistributionStatusMessage> distributionMessageReceived = new LinkedList<>();
+
+ public DistributionClientEmulator(String notifFolderInResource) {
+
+ resourcePath = notifFolderInResource;
+ }
+
+ public List<IDistributionStatusMessage> getDistributionMessageReceived() {
+ return distributionMessageReceived;
+ }
+
+ @Override
+ public List<IVfModuleMetadata> decodeVfModuleArtifact(byte[] arg0) {
+ try {
+ listVFModuleMetaData = new ObjectMapper().readValue(arg0, new TypeReference<List<JsonVfModuleMetaData>>(){});
+ return listVFModuleMetaData;
+
+ } catch (JsonParseException e) {
+ e.printStackTrace();
+ } catch (JsonMappingException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public List<IVfModuleMetadata> getListVFModuleMetaData() {
+ return listVFModuleMetaData;
+ }
+
+ @Override
+ public IDistributionClientDownloadResult download (IArtifactInfo arg0) {
+
+
+ //String filename = resourcePath+"/artifacts/"+arg0.getArtifactURL();
+ String filename = arg0.getArtifactURL();
+ System.out.println("Emulating the download from resources files:"+filename);
+ InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(resourcePath+"/artifacts/"+filename);
+
+ if (inputStream == null) {
+ System.out.println("InputStream is NULL for:"+filename);
+ }
+ try {
+ return new DistributionClientDownloadResultImpl(DistributionActionResultEnum.SUCCESS, DistributionActionResultEnum.SUCCESS.name(),arg0.getArtifactName(),IOUtils.toByteArray(inputStream));
+ } catch (IOException e) {
+
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ @Override
+ public IConfiguration getConfiguration() {
+ return null;
+ }
+
+ @Override
+ public IDistributionClientResult init(IConfiguration arg0, INotificationCallback arg1) {
+ return new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+ }
+
+ @Override
+ public IDistributionClientResult sendDeploymentStatus(IDistributionStatusMessage arg0) {
+ this.distributionMessageReceived.add(arg0);
+ return new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+ }
+
+ @Override
+ public IDistributionClientResult sendDeploymentStatus(IDistributionStatusMessage arg0, String arg1) {
+ this.distributionMessageReceived.add(arg0);
+ return new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+ }
+
+ @Override
+ public IDistributionClientResult sendDownloadStatus(IDistributionStatusMessage arg0) {
+ this.distributionMessageReceived.add(arg0);
+ return new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+ }
+
+ @Override
+ public IDistributionClientResult sendDownloadStatus(IDistributionStatusMessage arg0, String arg1) {
+ this.distributionMessageReceived.add(arg0);
+ return new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+ }
+
+ @Override
+ public IDistributionClientResult start() {
+ return new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+ }
+
+ @Override
+ public IDistributionClientResult stop() {
+ return new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+
+ }
+
+ @Override
+ public IDistributionClientResult updateConfiguration(IConfiguration arg0) {
+ return new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,DistributionActionResultEnum.SUCCESS.name());
+ }
+
+}
diff --git a/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonArtifactInfo.java b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonArtifactInfo.java
new file mode 100644
index 0000000000..f37235bba4
--- /dev/null
+++ b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonArtifactInfo.java
@@ -0,0 +1,102 @@
+package org.openecomp.mso.global_tests.asdc.notif_emulator;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.codehaus.jackson.annotate.JsonAnySetter;
+import org.codehaus.jackson.annotate.JsonIgnore;
+
+import org.openecomp.sdc.api.notification.IArtifactInfo;
+
+public class JsonArtifactInfo implements IArtifactInfo {
+
+ @JsonIgnore
+ private Map<String,IArtifactInfo> artifactsMapByUUID = new HashMap<>();
+
+ @JsonIgnore
+ private Map<String,Object> attributesMap = new HashMap<>();
+
+ public JsonArtifactInfo() {
+
+ }
+
+ public synchronized void addArtifactToUUIDMap (List<JsonArtifactInfo> artifactList) {
+ for (JsonArtifactInfo artifact:artifactList) {
+ artifactsMapByUUID.put(artifact.getArtifactUUID(), artifact);
+ }
+
+ }
+
+ @SuppressWarnings("unused")
+ @JsonAnySetter
+ public final void setAttribute(String attrName, Object attrValue) {
+ if ((null != attrName) && (!attrName.isEmpty()) && (null != attrValue) && (null != attrValue.toString())) {
+ this.attributesMap.put(attrName,attrValue);
+ }
+ }
+
+
+
+ public Map<String, IArtifactInfo> getArtifactsMapByUUID() {
+ return artifactsMapByUUID;
+ }
+
+ @Override
+ public String getArtifactChecksum() {
+ return (String)attributesMap.get("artifactCheckSum");
+ }
+
+ @Override
+ public String getArtifactDescription() {
+ return (String)attributesMap.get("artifactDescription");
+ }
+
+ @Override
+ public String getArtifactName() {
+ return (String)attributesMap.get("artifactName");
+ }
+
+ @Override
+ public Integer getArtifactTimeout() {
+ return (Integer)attributesMap.get("artifactTimeout");
+ }
+
+ @Override
+ public String getArtifactType() {
+ return (String)attributesMap.get("artifactType");
+ }
+
+ @Override
+ public String getArtifactURL() {
+ return (String)attributesMap.get("artifactURL");
+ }
+
+ @Override
+ public String getArtifactUUID() {
+ return (String)attributesMap.get("artifactUUID");
+ }
+
+ @Override
+ public String getArtifactVersion() {
+ return (String)attributesMap.get("artifactVersion");
+ }
+
+ @Override
+ public IArtifactInfo getGeneratedArtifact () {
+ return artifactsMapByUUID.get(attributesMap.get("generatedArtifact"));
+ }
+
+ @Override
+ public List<IArtifactInfo> getRelatedArtifacts() {
+ List<IArtifactInfo> listArtifacts = new LinkedList<>();
+ List<String> uuidList = (List<String>)attributesMap.get("relatedArtifact");
+ if (uuidList != null) {
+ for(String uuid:uuidList) {
+ listArtifacts.add(artifactsMapByUUID.get(uuid));
+ }
+ }
+ return listArtifacts;
+ }
+
+}
diff --git a/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonArtifactInfoDeserializer.java b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonArtifactInfoDeserializer.java
new file mode 100644
index 0000000000..6e24accc14
--- /dev/null
+++ b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonArtifactInfoDeserializer.java
@@ -0,0 +1,28 @@
+package org.openecomp.mso.global_tests.asdc.notif_emulator;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.codehaus.jackson.JsonParser;
+import org.codehaus.jackson.JsonProcessingException;
+import org.codehaus.jackson.map.DeserializationContext;
+import org.codehaus.jackson.map.JsonDeserializer;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.type.TypeReference;
+
+public class JsonArtifactInfoDeserializer extends JsonDeserializer<List<JsonArtifactInfo>>{
+
+ @Override
+ public List<JsonArtifactInfo> deserialize(JsonParser jp, DeserializationContext ctxt)
+ throws IOException, JsonProcessingException {
+ List<JsonArtifactInfo> jsonArtifactInfoList = new ObjectMapper().readValue(jp, new TypeReference<List<JsonArtifactInfo>>(){});
+
+ // For each artifact add the list of artifact retrieved
+ // This could be used later to index by UUID
+ for (JsonArtifactInfo artifactInfo:jsonArtifactInfoList) {
+ artifactInfo.addArtifactToUUIDMap(jsonArtifactInfoList);
+ }
+ return jsonArtifactInfoList;
+ }
+
+}
diff --git a/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonNotificationData.java b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonNotificationData.java
new file mode 100644
index 0000000000..02ed01d958
--- /dev/null
+++ b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonNotificationData.java
@@ -0,0 +1,108 @@
+package org.openecomp.mso.global_tests.asdc.notif_emulator;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.codehaus.jackson.annotate.JsonAnySetter;
+import org.codehaus.jackson.annotate.JsonIgnore;
+import org.codehaus.jackson.annotate.JsonProperty;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.annotate.JsonDeserialize;
+import org.jboss.shrinkwrap.api.exporter.FileExistsException;
+
+import org.openecomp.sdc.api.notification.IArtifactInfo;
+import org.openecomp.sdc.api.notification.INotificationData;
+import org.openecomp.sdc.api.notification.IResourceInstance;
+
+
+public class JsonNotificationData implements INotificationData {
+
+ @JsonIgnore
+ private Map<String,Object> attributesMap = new HashMap<>();
+
+ @JsonProperty("serviceArtifacts")
+ @JsonDeserialize(using=JsonArtifactInfoDeserializer.class)
+ private List<IArtifactInfo> serviceArtifacts;
+
+ @JsonProperty("resources")
+ @JsonDeserialize(using=JsonResourceInfoDeserializer.class)
+ private List<IResourceInstance> resourcesList;
+
+ public JsonNotificationData() {
+
+ }
+
+ /**
+ * Method instantiate a INotificationData implementation from a JSON file.
+ *
+ * @param notifFilePath The file path in String
+ * @return A JsonNotificationData instance
+ * @throws IOException in case of the file is not readable or not accessible
+ */
+ public static JsonNotificationData instantiateNotifFromJsonFile(String notifFilePath) throws IOException {
+
+ InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(notifFilePath+"/notif-structure.json");
+
+ if (is == null) {
+ throw new FileExistsException("Resource Path does not exist: "+notifFilePath);
+ }
+ ObjectMapper mapper = new ObjectMapper();
+ return mapper.readValue(is, JsonNotificationData.class);
+ }
+
+ @SuppressWarnings("unused")
+ @JsonAnySetter
+ public final void setAttribute(String attrName, Object attrValue) {
+ if ((null != attrName) && (!attrName.isEmpty()) && (null != attrValue) && (null != attrValue.toString())) {
+ this.attributesMap.put(attrName,attrValue);
+ }
+ }
+
+ @Override
+ public IArtifactInfo getArtifactMetadataByUUID(String arg0) {
+ return null;
+ }
+
+ @Override
+ public String getDistributionID() {
+ return (String)this.attributesMap.get("distributionID");
+ }
+
+ @Override
+ public List<IResourceInstance> getResources() {
+ return resourcesList;
+ }
+
+ @Override
+ public List<IArtifactInfo> getServiceArtifacts() {
+ return this.serviceArtifacts;
+ }
+
+ @Override
+ public String getServiceDescription() {
+ return (String)this.attributesMap.get("serviceDescription");
+ }
+
+ @Override
+ public String getServiceInvariantUUID() {
+ return (String)this.attributesMap.get("serviceInvariantUUID");
+ }
+
+ @Override
+ public String getServiceName() {
+ return (String)this.attributesMap.get("serviceName");
+ }
+
+ @Override
+ public String getServiceUUID() {
+ return (String)this.attributesMap.get("serviceUUID");
+ }
+
+ @Override
+ public String getServiceVersion() {
+ return (String)this.attributesMap.get("serviceVersion");
+ }
+}
diff --git a/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonResourceInfo.java b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonResourceInfo.java
new file mode 100644
index 0000000000..e30bb5fcd0
--- /dev/null
+++ b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonResourceInfo.java
@@ -0,0 +1,70 @@
+package org.openecomp.mso.global_tests.asdc.notif_emulator;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.codehaus.jackson.annotate.JsonAnySetter;
+import org.codehaus.jackson.annotate.JsonIgnore;
+import org.codehaus.jackson.annotate.JsonProperty;
+import org.codehaus.jackson.map.annotate.JsonDeserialize;
+
+import org.openecomp.sdc.api.notification.IArtifactInfo;
+import org.openecomp.sdc.api.notification.IResourceInstance;
+
+public class JsonResourceInfo implements IResourceInstance {
+
+ @JsonIgnore
+ private Map<String,Object> attributesMap = new HashMap<>();
+
+ @JsonProperty("artifacts")
+ @JsonDeserialize(using=JsonArtifactInfoDeserializer.class)
+ private List<IArtifactInfo> artifacts;
+
+ public JsonResourceInfo() {
+
+ }
+
+ @Override
+ public List<IArtifactInfo> getArtifacts() {
+ return artifacts;
+ }
+
+ @Override
+ public String getResourceInstanceName() {
+ return (String)attributesMap.get("resourceInstanceName");
+ }
+
+ @Override
+ public String getResourceInvariantUUID() {
+ return (String)attributesMap.get("resourceInvariantUUID");
+ }
+
+ @Override
+ public String getResourceName() {
+ return (String)attributesMap.get("resourceName");
+ }
+
+ @Override
+ public String getResourceType() {
+ return (String)attributesMap.get("resourceType");
+ }
+
+ @Override
+ public String getResourceUUID() {
+ return (String)attributesMap.get("resourceUUID");
+ }
+
+ @Override
+ public String getResourceVersion() {
+ return (String)attributesMap.get("resourceVersion");
+ }
+
+ @SuppressWarnings("unused")
+ @JsonAnySetter
+ public final void setAttribute(String attrName, Object attrValue) {
+ if ((null != attrName) && (!attrName.isEmpty()) && (null != attrValue) && (null != attrValue.toString())) {
+ this.attributesMap.put(attrName,attrValue);
+ }
+ }
+}
diff --git a/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonResourceInfoDeserializer.java b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonResourceInfoDeserializer.java
new file mode 100644
index 0000000000..5ff92f7533
--- /dev/null
+++ b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonResourceInfoDeserializer.java
@@ -0,0 +1,23 @@
+package org.openecomp.mso.global_tests.asdc.notif_emulator;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.codehaus.jackson.JsonParser;
+import org.codehaus.jackson.JsonProcessingException;
+import org.codehaus.jackson.map.DeserializationContext;
+import org.codehaus.jackson.map.JsonDeserializer;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.type.TypeReference;
+
+public class JsonResourceInfoDeserializer extends JsonDeserializer<List<JsonResourceInfo>>{
+
+ @Override
+ public List<JsonResourceInfo> deserialize(JsonParser jp, DeserializationContext ctxt)
+ throws IOException, JsonProcessingException {
+ List<JsonResourceInfo> jsonResourceInfoList = new ObjectMapper().readValue(jp, new TypeReference<List<JsonResourceInfo>>(){});
+
+ return jsonResourceInfoList;
+ }
+
+}
diff --git a/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonVfModuleMetaData.java b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonVfModuleMetaData.java
new file mode 100644
index 0000000000..dbf953f955
--- /dev/null
+++ b/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/global_tests/asdc/notif_emulator/JsonVfModuleMetaData.java
@@ -0,0 +1,63 @@
+package org.openecomp.mso.global_tests.asdc.notif_emulator;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.codehaus.jackson.annotate.JsonAnySetter;
+import org.codehaus.jackson.annotate.JsonIgnore;
+import org.codehaus.jackson.annotate.JsonProperty;
+import org.openecomp.sdc.api.notification.IVfModuleMetadata;
+
+public class JsonVfModuleMetaData implements IVfModuleMetadata {
+
+ @JsonProperty("artifacts")
+ private List<String> artifacts;
+
+ @JsonIgnore
+ private Map<String,Object> attributesMap = new HashMap<>();
+
+ @Override
+ public List<String> getArtifacts() {
+ return artifacts;
+ }
+
+ @Override
+ public String getVfModuleModelDescription() {
+ return (String)attributesMap.get("vfModuleModelDescription");
+ }
+
+ @Override
+ public String getVfModuleModelInvariantUUID() {
+ return (String)attributesMap.get("vfModuleModelInvariantUUID");
+ }
+
+ @Override
+ public String getVfModuleModelName() {
+ return (String)attributesMap.get("vfModuleModelName");
+ }
+
+ @Override
+ public String getVfModuleModelUUID() {
+ return (String)attributesMap.get("vfModuleModelUUID");
+ }
+
+ @Override
+ public String getVfModuleModelVersion() {
+ return (String)attributesMap.get("vfModuleModelVersion");
+ }
+
+ @Override
+ public boolean isBase() {
+ return (boolean)attributesMap.get("isBase");
+ }
+
+ @SuppressWarnings("unused")
+ @JsonAnySetter
+ public final void setAttribute(String attrName, Object attrValue) {
+ if ((null != attrName) && (!attrName.isEmpty()) && (null != attrValue) && (null != attrValue.toString())) {
+ this.attributesMap.put(attrName,attrValue);
+ }
+ }
+
+}