Merge "Deploy activities to SDC from Catalog"
authorSteve Smokowski <ss835w@att.com>
Mon, 15 Apr 2019 12:44:23 +0000 (12:44 +0000)
committerGerrit Code Review <gerrit@onap.org>
Mon, 15 Apr 2019 12:44:23 +0000 (12:44 +0000)
31 files changed:
adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V5.7.1__WorkFlowDesignerTables.sql [moved from adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V5.7__WorkFlowDesignerTables.sql with 100% similarity]
adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V5.7__Use_ID_Configuration_Customization.sql [new file with mode: 0644]
adapters/mso-openstack-adapters/src/test/java/org/onap/so/heatbridge/factory/MsoCloudClientFactoryImplTest.java [new file with mode: 0644]
adapters/mso-openstack-adapters/src/test/resources/schema.sql
asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInstallerTest.java
asdc-controller/src/test/resources/schema.sql
bpmn/mso-infrastructure-bpmn/pom.xml
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/AssignVnfBB.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/HomingBB.bpmn
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/BaseBPMNTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/AssignVnfBBTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/HomingBBTest.java
bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/pnf/PnfNotificationEvent.java [deleted file]
bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/pnf/delegate/InformDmaapClient.java
bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/pnf/dmaap/PnfEventReadyDmaapClient.java
bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CancelDmaapSubscriptionTest.java
bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/InformDmaapClientTest.java
bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/dmaap/PnfEventReadyDmaapClientTest.java
bpmn/so-bpmn-infrastructure-flows/src/test/java/org/onap/so/bpmn/infrastructure/process/CreateVcpeResCustServiceSimplifiedTest.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/buildingblock/SniroHomingV2.java
mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/BaseTest.java
mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ServiceInstancesTest.java
mso-api-handlers/mso-api-handler-infra/src/test/resources/schema.sql
mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/ConfigurationResourceCustomization.java
mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/Service.java
mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/ConfigurationResourceCustomizationRepository.java
mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/VnfcInstanceGroupCustomizationRepository.java
mso-catalog-db/src/test/java/org/onap/so/db/catalog/data/repository/VnfcInstanceGroupCustomizationRepositoryTest.java [new file with mode: 0644]
mso-catalog-db/src/test/resources/data.sql
mso-catalog-db/src/test/resources/schema.sql

diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V5.7__Use_ID_Configuration_Customization.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V5.7__Use_ID_Configuration_Customization.sql
new file mode 100644 (file)
index 0000000..b393312
--- /dev/null
@@ -0,0 +1,75 @@
+USE catalogdb;
+
+/* Drop existing foreign key */
+ALTER TABLE `catalogdb`.`configuration_customization` 
+DROP FOREIGN KEY IF EXISTS `fk_configuration_customization__configuration_customization1`;
+
+ALTER TABLE `catalogdb`.`configuration_customization` 
+DROP FOREIGN KEY IF EXISTS `fk_configuration_resource_customization__configuration_resour1`;
+/* Drop existing index */
+ALTER TABLE `catalogdb`.`configuration_customization` 
+DROP INDEX IF EXISTS `fk_configuration_customization__configuration_customization_idx` ;
+
+/* Create a new table */
+CREATE TABLE `tmp_configuration_customization` (
+    `ID` INT(11) NOT NULL AUTO_INCREMENT,
+    `MODEL_CUSTOMIZATION_UUID` VARCHAR(200) NOT NULL,
+    `MODEL_INSTANCE_NAME` VARCHAR(200) NOT NULL,
+    `CONFIGURATION_TYPE` VARCHAR(200) DEFAULT NULL,
+    `CONFIGURATION_ROLE` VARCHAR(200) DEFAULT NULL,
+    `CONFIGURATION_FUNCTION` VARCHAR(200) DEFAULT NULL,
+    `CREATION_TIMESTAMP` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+    `CONFIGURATION_MODEL_UUID` VARCHAR(200) NOT NULL,
+    `SERVICE_PROXY_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID` VARCHAR(200) DEFAULT NULL,
+       `CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_ID` int(11) DEFAULT NULL,
+    `SERVICE_MODEL_UUID` VARCHAR(200) NOT NULL,
+    PRIMARY KEY (`ID`) ,
+    KEY `fk_configuration_customization__configuration_idx` (`CONFIGURATION_MODEL_UUID`),
+    KEY `fk_configuration_customization__service_idx` (`SERVICE_MODEL_UUID`),
+       UNIQUE KEY `uk_configuration_customization`  (`MODEL_CUSTOMIZATION_UUID` ASC, `SERVICE_MODEL_UUID` ASC),
+       CONSTRAINT `fk_configuration_customization__configuration1` FOREIGN KEY (`CONFIGURATION_MODEL_UUID`)
+        REFERENCES `configuration` (`MODEL_UUID`)
+        ON DELETE CASCADE ON UPDATE CASCADE,
+    CONSTRAINT `fk_configuration_customization__service1` FOREIGN KEY (`SERVICE_MODEL_UUID`)
+        REFERENCES `service` (`MODEL_UUID`)
+        ON DELETE CASCADE ON UPDATE CASCADE
+       
+)  ENGINE=INNODB DEFAULT CHARSET=LATIN1;
+
+/* Migrate the existing data */
+INSERT INTO tmp_configuration_customization 
+(`model_customization_uuid` ,
+                 `model_instance_name`,
+                 `configuration_type` ,
+                 `configuration_role` ,
+                 `configuration_function` ,
+                 `creation_timestamp` ,
+                 `configuration_model_uuid` ,
+                 `service_proxy_customization_model_customization_uuid` ,
+                 `service_model_uuid`)
+SELECT `config`.`model_customization_uuid`,
+    `config`.`model_instance_name`,
+    `config`.`configuration_type`,
+    `config`.`configuration_role`,
+    `config`.`configuration_function`,
+    `config`.`creation_timestamp`,
+    `config`.`configuration_model_uuid`,
+    `config`.`service_proxy_customization_model_customization_uuid`,
+    `svc`.`model_uuid` service_model_uuid FROM
+    configuration_customization config,
+    service svc,
+    configuration_customization_to_service config_svc
+WHERE
+    config_svc.service_model_uuid = svc.model_uuid
+        AND config_svc.resource_model_customization_uuid = config.model_customization_uuid;
+      
+/* Drop the old tables */
+
+DROP TABLE `catalogdb`.`configuration_customization`;
+
+DROP TABLE `catalogdb`.`configuration_customization_to_service`;
+
+/* Rename the table */
+RENAME TABLE tmp_configuration_customization TO configuration_customization;       
+        
+       
\ No newline at end of file
diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/heatbridge/factory/MsoCloudClientFactoryImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/heatbridge/factory/MsoCloudClientFactoryImplTest.java
new file mode 100644 (file)
index 0000000..701ed65
--- /dev/null
@@ -0,0 +1,71 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2019 Nokia.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.heatbridge.factory;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.so.heatbridge.HeatBridgeException;
+import org.onap.so.heatbridge.openstack.api.OpenstackAccess;
+import org.onap.so.heatbridge.openstack.factory.OpenstackClientFactory;
+import org.onap.so.utils.CryptoUtils;
+
+public class MsoCloudClientFactoryImplTest {
+
+    private static final String URL_V2 = "http://localhost:8080/v2.0";
+    private static final String URL_V3 = "http://localhost:8080/v3";
+    private static final String URL_WITH_UNSUPPORTED_VERSION = "http://localhost:8080/v4";
+
+    private static final String MSO_ID = "testMsoId";
+    private static final String ENCRYPTED_PASSWORD = CryptoUtils.encryptCloudConfigPassword("testPassword");
+    private static final String CLOUD_REGION_ID = "testCloudRegionId";
+    private static final String TENANT_ID = "testTenantId";
+
+    private MsoCloudClientFactoryImpl testedObject;
+    private OpenstackClientFactory openstackClientFactoryMock;
+
+    @Before
+    public void setup() {
+        openstackClientFactoryMock = mock(OpenstackClientFactory.class);
+        testedObject = new MsoCloudClientFactoryImpl(openstackClientFactoryMock);
+    }
+
+    @Test
+    public void getOpenstackClientWithVersion2() throws Exception {
+        testedObject.getOpenstackClient(URL_V2, MSO_ID, ENCRYPTED_PASSWORD, CLOUD_REGION_ID, TENANT_ID);
+        verify(openstackClientFactoryMock).createOpenstackV2Client(any(OpenstackAccess.class));
+    }
+
+    @Test
+    public void getOpenstackClientWithVersion3() throws Exception {
+        testedObject.getOpenstackClient(URL_V3, MSO_ID, ENCRYPTED_PASSWORD, CLOUD_REGION_ID, TENANT_ID);
+        verify(openstackClientFactoryMock).createOpenstackV3Client(any(OpenstackAccess.class));
+    }
+
+    @Test(expected = HeatBridgeException.class)
+    public void getOpenstackClient_unsupportedVersion() throws Exception {
+        testedObject.getOpenstackClient(URL_WITH_UNSUPPORTED_VERSION, MSO_ID, ENCRYPTED_PASSWORD, CLOUD_REGION_ID,
+                TENANT_ID);
+    }
+
+}
index 29a81e8..dbb3469 100644 (file)
@@ -280,6 +280,7 @@ DROP TABLE IF EXISTS `configuration_customization`;
 /*!40101 SET @saved_cs_client     = @@character_set_client */;
 /*!40101 SET character_set_client = utf8 */;
 CREATE TABLE `configuration_customization` (
+  `ID` int(11) NOT NULL AUTO_INCREMENT,
   `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL,
   `MODEL_INSTANCE_NAME` varchar(200) NOT NULL,
   `CONFIGURATION_TYPE` varchar(200) DEFAULT NULL,
@@ -288,27 +289,18 @@ CREATE TABLE `configuration_customization` (
   `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `CONFIGURATION_MODEL_UUID` varchar(200) NOT NULL,
   `SERVICE_PROXY_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID` varchar(200) DEFAULT NULL,
-  `CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID` varchar(200) DEFAULT NULL,
-  PRIMARY KEY (`MODEL_CUSTOMIZATION_UUID`),
-  KEY `fk_configuration_customization__configuration_idx` (`CONFIGURATION_MODEL_UUID`),
-  KEY `fk_configuration_customization__service_proxy_customization_idx` (`SERVICE_PROXY_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID`),
-  KEY `fk_configuration_customization__configuration_customization_idx` (`CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID`),
-  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,
-  CONSTRAINT `fk_configuration_resource_customization__configuration_resour1` FOREIGN KEY (`CONFIGURATION_MODEL_UUID`) REFERENCES `configuration` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `configuration_customization_to_service`
---
-
-DROP TABLE IF EXISTS `configuration_customization_to_service`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-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`)
+  `CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_ID` int(11) DEFAULT NULL,
+  `SERVICE_MODEL_UUID` varchar(200),
+   PRIMARY KEY (`ID`),
+   KEY `fk_configuration_customization__configuration_idx` (`CONFIGURATION_MODEL_UUID`),
+   KEY `fk_configuration_customization__service_idx` (`SERVICE_MODEL_UUID`),
+   UNIQUE KEY `uk_configuration_customization`  (`MODEL_CUSTOMIZATION_UUID` ASC, `SERVICE_MODEL_UUID` ASC),
+   CONSTRAINT `fk_configuration_customization__configuration1` FOREIGN KEY (`CONFIGURATION_MODEL_UUID`)
+        REFERENCES `configuration` (`MODEL_UUID`)
+        ON DELETE CASCADE ON UPDATE CASCADE,
+   CONSTRAINT `fk_configuration_customization__service1` FOREIGN KEY (`SERVICE_MODEL_UUID`)
+        REFERENCES `service` (`MODEL_UUID`)
+        ON DELETE CASCADE ON UPDATE CASCADE
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 /*!40101 SET character_set_client = @saved_cs_client */;
 
index f3a4958..d3eab9a 100644 (file)
@@ -35,6 +35,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
+import org.hibernate.StaleObjectStateException;
 import org.hibernate.exception.ConstraintViolationException;
 import org.hibernate.exception.LockAcquisitionException;
 import org.onap.sdc.api.notification.IArtifactInfo;
@@ -55,7 +56,6 @@ import org.onap.sdc.toscaparser.api.Property;
 import org.onap.sdc.toscaparser.api.RequirementAssignment;
 import org.onap.sdc.toscaparser.api.RequirementAssignments;
 import org.onap.sdc.toscaparser.api.elements.Metadata;
-import org.onap.sdc.toscaparser.api.elements.StatefulEntityType;
 import org.onap.sdc.toscaparser.api.functions.GetInput;
 import org.onap.sdc.toscaparser.api.parameters.Input;
 import org.onap.sdc.utils.DistributionStatusEnum;
@@ -122,7 +122,6 @@ import org.onap.so.db.catalog.data.repository.ServiceRepository;
 import org.onap.so.db.catalog.data.repository.TempNetworkHeatTemplateRepository;
 import org.onap.so.db.catalog.data.repository.VFModuleCustomizationRepository;
 import org.onap.so.db.catalog.data.repository.VFModuleRepository;
-import org.onap.so.db.catalog.data.repository.VnfCustomizationRepository;
 import org.onap.so.db.catalog.data.repository.VnfResourceRepository;
 import org.onap.so.db.catalog.data.repository.VnfcCustomizationRepository;
 import org.onap.so.db.catalog.data.repository.VnfcInstanceGroupCustomizationRepository;
@@ -308,6 +307,7 @@ public class ToscaResourceInstaller {
         }
     }
 
+
     @Transactional(rollbackFor = {ArtifactInstallerException.class})
     public void installTheResource(ToscaResourceStructure toscaResourceStruct, ResourceStructure resourceStruct)
             throws ArtifactInstallerException {
@@ -408,8 +408,10 @@ public class ToscaResourceInstaller {
             processNetworkCollections(toscaResourceStruct, service);
             // Process Service Proxy & Configuration
             processServiceProxyAndConfiguration(toscaResourceStruct, service);
+
             logger.info("Saving Service: {} ", service.getModelName());
-            serviceRepo.save(service);
+            service = serviceRepo.save(service);
+            correlateConfigCustomResources(service);
 
             WatchdogComponentDistributionStatus status = new WatchdogComponentDistributionStatus(
                     vfResourceStruct.getNotification().getDistributionID(), MSO);
@@ -637,7 +639,8 @@ public class ToscaResourceInstaller {
     }
 
     protected ConfigurationResourceCustomization getConfigurationResourceCustomization(NodeTemplate nodeTemplate,
-            ToscaResourceStructure toscaResourceStructure, ServiceProxyResourceCustomization spResourceCustomization) {
+            ToscaResourceStructure toscaResourceStructure, ServiceProxyResourceCustomization spResourceCustomization,
+            Service service) {
         Metadata metadata = nodeTemplate.getMetaData();
 
         ConfigurationResource configResource = getConfigurationResource(nodeTemplate);
@@ -660,31 +663,15 @@ public class ToscaResourceInstaller {
                 .setServiceProxyResourceCustomizationUUID(spResourceCustomization.getModelCustomizationUUID());
 
         configCustomizationResource.setConfigurationResource(configResource);
+        configCustomizationResource.setService(service);
         configResourceCustomizationSet.add(configCustomizationResource);
 
         configResource.setConfigurationResourceCustomization(configResourceCustomizationSet);
+
         return configCustomizationResource;
     }
 
 
-    protected Optional<ConfigurationResourceCustomization> getVnrNodeTemplate(
-            List<NodeTemplate> configurationNodeTemplatesList, ToscaResourceStructure toscaResourceStructure,
-            ServiceProxyResourceCustomization spResourceCustomization) {
-        Optional<ConfigurationResourceCustomization> configurationResourceCust = Optional.empty();
-        for (NodeTemplate nodeTemplate : configurationNodeTemplatesList) {
-            StatefulEntityType entityType = nodeTemplate.getTypeDefinition();
-            String type = entityType.getType();
-
-            if (VLAN_NETWORK_RECEPTOR.equals(type)) {
-                configurationResourceCust = Optional.of(getConfigurationResourceCustomization(nodeTemplate,
-                        toscaResourceStructure, spResourceCustomization));
-                break;
-            }
-        }
-
-        return configurationResourceCust;
-    }
-
     protected void processServiceProxyAndConfiguration(ToscaResourceStructure toscaResourceStruct, Service service) {
 
         List<NodeTemplate> serviceProxyResourceList =
@@ -703,8 +690,6 @@ public class ToscaResourceInstaller {
             for (NodeTemplate spNode : serviceProxyResourceList) {
                 serviceProxy = createServiceProxy(spNode, service, toscaResourceStruct);
                 serviceProxyList.add(serviceProxy);
-                Optional<ConfigurationResourceCustomization> vnrResourceCustomization =
-                        getVnrNodeTemplate(configurationNodeTemplatesList, toscaResourceStruct, serviceProxy);
 
                 for (NodeTemplate configNode : configurationNodeTemplatesList) {
 
@@ -712,19 +697,21 @@ public class ToscaResourceInstaller {
                             toscaResourceStruct.getSdcCsarHelper().getRequirementsOf(configNode).getAll();
                     for (RequirementAssignment requirement : requirementsList) {
                         if (requirement.getNodeTemplateName().equals(spNode.getName())) {
-                            ConfigurationResourceCustomization configurationResource = createConfiguration(configNode,
-                                    toscaResourceStruct, serviceProxy, vnrResourceCustomization);
-
-                            Optional<ConfigurationResourceCustomization> matchingObject = configurationResourceList
-                                    .stream()
-                                    .filter(configurationResourceCustomization -> configNode.getMetaData()
-                                            .getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID)
-                                            .equals(configurationResource.getModelCustomizationUUID()))
-                                    .findFirst();
+                            ConfigurationResourceCustomization configurationResource =
+                                    createConfiguration(configNode, toscaResourceStruct, serviceProxy, service);
+
+                            Optional<ConfigurationResourceCustomization> matchingObject =
+                                    configurationResourceList.stream()
+                                            .filter(configurationResourceCustomization -> configNode.getMetaData()
+                                                    .getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID)
+                                                    .equals(configurationResource.getModelCustomizationUUID()))
+                                            .filter(configurationResourceCustomization -> configurationResourceCustomization
+                                                    .getModelInstanceName()
+                                                    .equals(configurationResource.getModelInstanceName()))
+                                            .findFirst();
                             if (!matchingObject.isPresent()) {
                                 configurationResourceList.add(configurationResource);
                             }
-
                             break;
                         }
                     }
@@ -737,6 +724,37 @@ public class ToscaResourceInstaller {
         service.setServiceProxyCustomizations(serviceProxyList);
     }
 
+    /*
+     * ConfigurationResourceCustomization objects have their IDs auto incremented in the database. Unless we know their
+     * IDs we cannot possibly associate their related records. So these ConfigResourceCustomizations are persisted first
+     * and subsequently correlated.
+     */
+
+    protected void correlateConfigCustomResources(Service service) {
+        /* Assuming that we have only one pair of VRF-VNR */
+        ConfigurationResourceCustomization vrfConfigCustomResource = null;
+        ConfigurationResourceCustomization vnrConfigCustomResource = null;
+        List<ConfigurationResourceCustomization> configCustomList = service.getConfigurationCustomizations();
+        for (ConfigurationResourceCustomization configResource : configCustomList) {
+            String nodeType = configResource.getConfigurationResource().getToscaNodeType();
+            if (NODES_VRF_ENTRY.equalsIgnoreCase(nodeType)) {
+                vrfConfigCustomResource = configResource;
+            } else if (VLAN_NETWORK_RECEPTOR.equalsIgnoreCase(nodeType)) {
+                vnrConfigCustomResource = configResource;
+            }
+        }
+
+        if (vrfConfigCustomResource != null) {
+            vrfConfigCustomResource.setConfigResourceCustomization(vnrConfigCustomResource);
+            configCustomizationRepo.save(vrfConfigCustomResource);
+
+        }
+        if (vnrConfigCustomResource != null) {
+            vnrConfigCustomResource.setConfigResourceCustomization(vrfConfigCustomResource);
+            configCustomizationRepo.save(vnrConfigCustomResource);
+        }
+    }
+
     protected void processNetworkCollections(ToscaResourceStructure toscaResourceStruct, Service service) {
 
         List<NodeTemplate> networkCollectionList =
@@ -1229,22 +1247,15 @@ public class ToscaResourceInstaller {
 
     protected ConfigurationResourceCustomization createConfiguration(NodeTemplate nodeTemplate,
             ToscaResourceStructure toscaResourceStructure, ServiceProxyResourceCustomization spResourceCustomization,
-            Optional<ConfigurationResourceCustomization> vnrResourceCustomization) {
+            Service service) {
 
-        ConfigurationResourceCustomization configCustomizationResource =
-                getConfigurationResourceCustomization(nodeTemplate, toscaResourceStructure, spResourceCustomization);
+        ConfigurationResourceCustomization configCustomizationResource = getConfigurationResourceCustomization(
+                nodeTemplate, toscaResourceStructure, spResourceCustomization, service);
 
         ConfigurationResource configResource = getConfigurationResource(nodeTemplate);
 
         Set<ConfigurationResourceCustomization> configResourceCustomizationSet = new HashSet<>();
 
-        StatefulEntityType entityType = nodeTemplate.getTypeDefinition();
-        String type = entityType.getType();
-
-        if (NODES_VRF_ENTRY.equals(type)) {
-            configCustomizationResource.setConfigResourceCustomization(vnrResourceCustomization.orElse(null));
-        }
-
         configCustomizationResource.setConfigurationResource(configResource);
 
         configResourceCustomizationSet.add(configCustomizationResource);
@@ -1353,6 +1364,7 @@ public class ToscaResourceInstaller {
 
             networkCustomizationRepo.saveAndFlush(networkResourceCustomization);
 
+
         } else if (networkResourceCustomization == null) {
             networkResourceCustomization =
                     createNetworkResourceCustomization(networkNodeTemplate, toscaResourceStructure);
index d3c0bde..ce70a25 100644 (file)
 
 package org.onap.so.asdc.installer.heat;
 
-import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
 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.assertTrue;
 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 java.util.ArrayList;
 import java.util.List;
-import java.util.Optional;
 import org.hibernate.exception.LockAcquisitionException;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
 import org.onap.sdc.api.notification.IResourceInstance;
 import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
@@ -58,13 +56,17 @@ import org.onap.so.asdc.client.test.emulators.NotificationDataImpl;
 import org.onap.so.asdc.installer.ToscaResourceStructure;
 import org.onap.so.db.catalog.beans.ConfigurationResource;
 import org.onap.so.db.catalog.beans.ConfigurationResourceCustomization;
+import org.onap.so.db.catalog.beans.Service;
 import org.onap.so.db.catalog.beans.ServiceProxyResourceCustomization;
 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.ConfigurationResourceCustomizationRepository;
 import org.onap.so.db.catalog.data.repository.ServiceRepository;
 import org.onap.so.db.request.beans.WatchdogComponentDistributionStatus;
 import org.onap.so.db.request.data.repository.WatchdogComponentDistributionStatusRepository;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.util.ReflectionTestUtils;
+
 
 public class ToscaResourceInstallerTest extends BaseTest {
     @Autowired
@@ -99,6 +101,8 @@ public class ToscaResourceInstallerTest extends BaseTest {
     private ISdcCsarHelper csarHelper;
     @Mock
     private StatefulEntityType entityType;
+    @Mock
+    private Service service;
 
     private NotificationDataImpl notificationData;
     private JsonStatusData statusData;
@@ -350,8 +354,9 @@ public class ToscaResourceInstallerTest extends BaseTest {
     public void getConfigurationResourceCustomizationTest() {
         prepareConfigurationResourceCustomization();
 
-        ConfigurationResourceCustomization configurationResourceCustomization = toscaInstaller
-                .getConfigurationResourceCustomization(nodeTemplate, toscaResourceStructure, spResourceCustomization);
+        ConfigurationResourceCustomization configurationResourceCustomization =
+                toscaInstaller.getConfigurationResourceCustomization(nodeTemplate, toscaResourceStructure,
+                        spResourceCustomization, service);
         assertNotNull(configurationResourceCustomization);
         assertNotNull(configurationResourceCustomization.getConfigurationResource());
         assertEquals(MockConstants.MODEL_CUSTOMIZATIONUUID,
@@ -359,16 +364,34 @@ public class ToscaResourceInstallerTest extends BaseTest {
     }
 
     @Test
-    public void getVnrNodeTemplateTest() {
-        prepareConfigurationResourceCustomization();
-        List<NodeTemplate> nodeTemplateList = new ArrayList<>();
-        doReturn(ToscaResourceInstaller.VLAN_NETWORK_RECEPTOR).when(entityType).getType();
-        doReturn(entityType).when(nodeTemplate).getTypeDefinition();
-        nodeTemplateList.add(nodeTemplate);
-        Optional<ConfigurationResourceCustomization> vnrResourceCustomization =
-                toscaInstaller.getVnrNodeTemplate(nodeTemplateList, toscaResourceStructure, spResourceCustomization);
-        assertTrue(vnrResourceCustomization.isPresent());
-        assertEquals(ToscaResourceInstaller.VLAN_NETWORK_RECEPTOR, entityType.getType());
+    public void correlateConfigCustomResourcesTest() {
+        ConfigurationResource vrfConfigResource = mock(ConfigurationResource.class);
+        ConfigurationResourceCustomization vrfConfigCustom = mock(ConfigurationResourceCustomization.class);
+        doReturn(ToscaResourceInstaller.NODES_VRF_ENTRY).when(vrfConfigResource).getToscaNodeType();
+        doReturn(vrfConfigResource).when(vrfConfigCustom).getConfigurationResource();
+
+        ConfigurationResource vnrConfigResource = mock(ConfigurationResource.class);
+        ConfigurationResourceCustomization vnrConfigCustom = mock(ConfigurationResourceCustomization.class);
+        doReturn(ToscaResourceInstaller.VLAN_NETWORK_RECEPTOR).when(vnrConfigResource).getToscaNodeType();
+        doReturn(vnrConfigResource).when(vnrConfigCustom).getConfigurationResource();
+
+        ConfigurationResourceCustomizationRepository configCustomizationRepo =
+                spy(ConfigurationResourceCustomizationRepository.class);
+        ReflectionTestUtils.setField(toscaInstaller, "configCustomizationRepo", configCustomizationRepo);
+        doReturn(vrfConfigCustom).when(configCustomizationRepo).save(vrfConfigCustom);
+        doReturn(vnrConfigCustom).when(configCustomizationRepo).save(vnrConfigCustom);
+
+        List<ConfigurationResourceCustomization> configList = new ArrayList<>();
+        configList.add(vrfConfigCustom);
+        configList.add(vnrConfigCustom);
+        doReturn(configList).when(service).getConfigurationCustomizations();
+
+        toscaInstaller.correlateConfigCustomResources(service);
+        verify(vrfConfigCustom, times(1)).getConfigurationResource();
+        verify(vrfConfigCustom, times(1)).setConfigResourceCustomization(vnrConfigCustom);
+        verify(service, times(1)).getConfigurationCustomizations();
+        verify(vnrConfigCustom, times(1)).getConfigurationResource();
+        verify(vnrConfigCustom, times(1)).setConfigResourceCustomization(vrfConfigCustom);
     }
 
     class MockConstants {
@@ -381,5 +404,6 @@ public class ToscaResourceInstallerTest extends BaseTest {
         public final static String TEMPLATE_TYPE = "org.openecomp.nodes.VLANNetworkReceptor";
         public final static String TEMPLATE_NAME = "VLAN Network Receptor Configuration 0";
 
+
     }
 }
index dc92631..8cc5ee9 100644 (file)
@@ -283,6 +283,7 @@ DROP TABLE IF EXISTS `configuration_customization`;
 /*!40101 SET @saved_cs_client     = @@character_set_client */;
 /*!40101 SET character_set_client = utf8 */;
 CREATE TABLE `configuration_customization` (
+  `ID` int(11) NOT NULL AUTO_INCREMENT,
   `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL,
   `MODEL_INSTANCE_NAME` varchar(200) NOT NULL,
   `CONFIGURATION_TYPE` varchar(200) DEFAULT NULL,
@@ -291,27 +292,18 @@ CREATE TABLE `configuration_customization` (
   `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `CONFIGURATION_MODEL_UUID` varchar(200) NOT NULL,
   `SERVICE_PROXY_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID` varchar(200) DEFAULT NULL,
-  `CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID` varchar(200) DEFAULT NULL,
-  PRIMARY KEY (`MODEL_CUSTOMIZATION_UUID`),
-  KEY `fk_configuration_customization__configuration_idx` (`CONFIGURATION_MODEL_UUID`),
-  KEY `fk_configuration_customization__service_proxy_customization_idx` (`SERVICE_PROXY_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID`),
-  KEY `fk_configuration_customization__configuration_customization_idx` (`CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID`),
-  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,
-  CONSTRAINT `fk_configuration_resource_customization__configuration_resour1` FOREIGN KEY (`CONFIGURATION_MODEL_UUID`) REFERENCES `configuration` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `configuration_customization_to_service`
---
-
-DROP TABLE IF EXISTS `configuration_customization_to_service`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-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`)
+  `CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_ID` int(11) DEFAULT NULL,
+  `SERVICE_MODEL_UUID` varchar(200),
+   PRIMARY KEY (`ID`),
+   KEY `fk_configuration_customization__configuration_idx` (`CONFIGURATION_MODEL_UUID`),
+   KEY `fk_configuration_customization__service_idx` (`SERVICE_MODEL_UUID`),
+   UNIQUE KEY `uk_configuration_customization`  (`MODEL_CUSTOMIZATION_UUID` ASC, `SERVICE_MODEL_UUID` ASC),
+   CONSTRAINT `fk_configuration_customization__configuration1` FOREIGN KEY (`CONFIGURATION_MODEL_UUID`)
+        REFERENCES `configuration` (`MODEL_UUID`)
+        ON DELETE CASCADE ON UPDATE CASCADE,
+   CONSTRAINT `fk_configuration_customization__service1` FOREIGN KEY (`SERVICE_MODEL_UUID`)
+        REFERENCES `service` (`MODEL_UUID`)
+        ON DELETE CASCADE ON UPDATE CASCADE
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 /*!40101 SET character_set_client = @saved_cs_client */;
 
index eb58732..4dd7a46 100644 (file)
     </dependencies>
   </dependencyManagement>
   <dependencies>
-    <dependency>
-      <groupId>org.camunda.bpm.springboot</groupId>
-      <artifactId>camunda-bpm-spring-boot-starter</artifactId>
-      <version>${camunda.springboot.version}</version>
-    </dependency>
     <dependency>
       <groupId>org.camunda.bpm.springboot</groupId>
       <artifactId>camunda-bpm-spring-boot-starter-rest</artifactId>
       <version>${camunda.springboot.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>org.camunda.bpmn</groupId>
+            <artifactId>camunda-engine-rest-core</artifactId>
+          </exclusion>
+        </exclusions>
     </dependency>
     <dependency>
       <groupId>org.camunda.bpm.springboot</groupId>
index ea762c8..7bb9793 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.8.2">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.3">
   <bpmn:process id="AssignVnfBB" name="AssignVnfBB" isExecutable="true">
     <bpmn:startEvent id="Start_AssignVnfBB">
       <bpmn:outgoing>SequenceFlow_0zaz9o2</bpmn:outgoing>
@@ -24,7 +24,7 @@
     <bpmn:sequenceFlow id="SequenceFlow_1nle8kc" sourceRef="Task_createInstanceGroups" targetRef="ExclusiveGateway_02tchpp" />
     <bpmn:sequenceFlow id="SequenceFlow_11jum90" name="no" sourceRef="ExclusiveGateway_02tchpp" targetRef="ExclusiveGateway_1blf52g" />
     <bpmn:sequenceFlow id="SequenceFlow_1uiok7v" name="yes" sourceRef="ExclusiveGateway_02tchpp" targetRef="Task_callHoming">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("callHoming")}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("homing")}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:sequenceFlow id="SequenceFlow_0v8d14a" sourceRef="Task_callHoming" targetRef="ExclusiveGateway_1blf52g" />
     <bpmn:callActivity id="Task_callHoming" name="Call Homing" calledElement="HomingBB">
index cd62636..b66ecfa 100644 (file)
@@ -1,10 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="_vwRmIBsREeeIQtzUKIjH4g" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.7.1" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="_vwRmIBsREeeIQtzUKIjH4g" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.3" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="HomingBB" name="HomingBB" isExecutable="true">
     <bpmn2:startEvent id="start">
-      <bpmn2:outgoing>SequenceFlow_1x9usa6</bpmn2:outgoing>
+      <bpmn2:outgoing>SequenceFlow_0jtjlbu</bpmn2:outgoing>
     </bpmn2:startEvent>
-    <bpmn2:sequenceFlow id="SequenceFlow_1x9usa6" sourceRef="start" targetRef="sniroOofCheck" />
     <bpmn2:subProcess id="bpmnErrorSubprocess" name="Error Handling Subprocess" triggeredByEvent="true">
       <bpmn2:endEvent id="endBpmnError">
         <bpmn2:incoming>SequenceFlow_1rf4vs8</bpmn2:incoming>
@@ -43,7 +42,7 @@ ex.processJavaException(execution)]]></bpmn2:script>
       <bpmn2:sequenceFlow id="SequenceFlow_0kamg53" name="" sourceRef="startJavaError" targetRef="processJavaException" />
       <bpmn2:sequenceFlow id="SequenceFlow_1o7154s" name="" sourceRef="processJavaException" targetRef="endJavaError" />
     </bpmn2:subProcess>
-    <bpmn2:callActivity id="receiveAsyncCallback" name="Receive Async Callback" calledElement="ReceiveWorkflowMessage" camunda:modelerTemplate="receiveWorkflowMessage">
+    <bpmn2:callActivity id="receiveAsyncCallback" name="Receive Async Callback" camunda:modelerTemplate="receiveWorkflowMessage" calledElement="ReceiveWorkflowMessage">
       <bpmn2:extensionElements>
         <camunda:in source="true" target="isDebugLogEnabled" />
         <camunda:out source="WorkflowException" target="WorkflowException" />
@@ -52,278 +51,145 @@ ex.processJavaException(execution)]]></bpmn2:script>
         <camunda:in source="asyncTimeout" target="RCVWFMSG_timeout" />
         <camunda:out source="WorkflowResponse" target="asyncResponse" />
       </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_1qbnm82</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1fipbmk</bpmn2:outgoing>
+      <bpmn2:incoming>SequenceFlow_0qrwjzu</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_03cy5y5</bpmn2:outgoing>
     </bpmn2:callActivity>
-    <bpmn2:sequenceFlow id="SequenceFlow_1fipbmk" sourceRef="receiveAsyncCallback" targetRef="sniroOofCheck2" />
-    <bpmn2:sequenceFlow id="SequenceFlow_01apjvo" sourceRef="processSniroSolution" targetRef="ExclusiveGateway_1kvzxpb" />
     <bpmn2:endEvent id="end">
-      <bpmn2:incoming>SequenceFlow_1urt5i6</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_138xgla</bpmn2:incoming>
       <bpmn2:terminateEventDefinition />
     </bpmn2:endEvent>
-    <bpmn2:sequenceFlow id="SequenceFlow_0lc15i7" sourceRef="callSniro" targetRef="ExclusiveGateway_1ckp059" />
-    <bpmn2:sequenceFlow id="SequenceFlow_1dtador" name="Sniro" sourceRef="sniroOofCheck" targetRef="callSniro" />
-    <bpmn2:sequenceFlow id="SequenceFlow_1qbnm82" sourceRef="ExclusiveGateway_1ckp059" targetRef="receiveAsyncCallback" />
-    <bpmn2:sequenceFlow id="SequenceFlow_08k112s" name="Sniro" sourceRef="sniroOofCheck2" targetRef="processSniroSolution" />
-    <bpmn2:sequenceFlow id="SequenceFlow_0m6nhqg" name="Oof" sourceRef="sniroOofCheck" targetRef="callOof">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[${execution.getVariable("homingService") == "oof"}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
-    <bpmn2:sequenceFlow id="SequenceFlow_0kvax6n" sourceRef="callOof" targetRef="ExclusiveGateway_1ckp059" />
-    <bpmn2:sequenceFlow id="SequenceFlow_0oixz4g" name="Oof" sourceRef="sniroOofCheck2" targetRef="processOofSolution">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[${execution.getVariable("homingService") == "oof"}]]></bpmn2:conditionExpression>
-    </bpmn2:sequenceFlow>
-    <bpmn2:sequenceFlow id="SequenceFlow_0ph4paa" sourceRef="processOofSolution" targetRef="ExclusiveGateway_1kvzxpb" />
-    <bpmn2:sequenceFlow id="SequenceFlow_1urt5i6" sourceRef="ExclusiveGateway_1kvzxpb" targetRef="end" />
-    <bpmn2:serviceTask id="callSniro" name="&#10;SNIRO&#10;Post&#10;(demands)&#10;" camunda:expression="${SniroHoming.callSniro(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
-      <bpmn2:incoming>SequenceFlow_1dtador</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_0lc15i7</bpmn2:outgoing>
+    <bpmn2:serviceTask id="callHoming" name="Homing&#10;Post&#10;(Send demand)&#10;" camunda:expression="${HomingV2.callHoming(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn2:incoming>SequenceFlow_0jtjlbu</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0qrwjzu</bpmn2:outgoing>
     </bpmn2:serviceTask>
-    <bpmn2:serviceTask id="processSniroSolution" name="&#10;Process&#10;Solution&#10;" camunda:expression="${SniroHoming.processSolution(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)), asyncResponse)}">
-      <bpmn2:incoming>SequenceFlow_08k112s</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_01apjvo</bpmn2:outgoing>
+    <bpmn2:serviceTask id="processHomingSolution" name="Homing&#10;Process&#10;Solution&#10;" camunda:expression="${HomingV2.processSolution(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)), asyncResponse)}">
+      <bpmn2:incoming>SequenceFlow_03cy5y5</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_138xgla</bpmn2:outgoing>
     </bpmn2:serviceTask>
-    <bpmn2:serviceTask id="callOof" name="&#10;OOF&#10;Post&#10;(demands)&#10;" camunda:expression="${OofHoming.callSniro(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
-      <bpmn2:incoming>SequenceFlow_0m6nhqg</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_0kvax6n</bpmn2:outgoing>
-    </bpmn2:serviceTask>
-    <bpmn2:serviceTask id="processOofSolution" name="&#10;Process&#10;Solution&#10;" camunda:expression="${OofHoming.processSolution(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)), asyncResponse)}">
-      <bpmn2:incoming>SequenceFlow_0oixz4g</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_0ph4paa</bpmn2:outgoing>
-    </bpmn2:serviceTask>
-    <bpmn2:inclusiveGateway id="sniroOofCheck" name="Homing&#10;Service?&#10;" default="SequenceFlow_1dtador">
-      <bpmn2:incoming>SequenceFlow_1x9usa6</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1dtador</bpmn2:outgoing>
-      <bpmn2:outgoing>SequenceFlow_0m6nhqg</bpmn2:outgoing>
-    </bpmn2:inclusiveGateway>
-    <bpmn2:inclusiveGateway id="ExclusiveGateway_1ckp059">
-      <bpmn2:incoming>SequenceFlow_0lc15i7</bpmn2:incoming>
-      <bpmn2:incoming>SequenceFlow_0kvax6n</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1qbnm82</bpmn2:outgoing>
-    </bpmn2:inclusiveGateway>
-    <bpmn2:inclusiveGateway id="sniroOofCheck2" name="Homing&#10;Service?" default="SequenceFlow_08k112s">
-      <bpmn2:incoming>SequenceFlow_1fipbmk</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_08k112s</bpmn2:outgoing>
-      <bpmn2:outgoing>SequenceFlow_0oixz4g</bpmn2:outgoing>
-    </bpmn2:inclusiveGateway>
-    <bpmn2:inclusiveGateway id="ExclusiveGateway_1kvzxpb">
-      <bpmn2:incoming>SequenceFlow_01apjvo</bpmn2:incoming>
-      <bpmn2:incoming>SequenceFlow_0ph4paa</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1urt5i6</bpmn2:outgoing>
-    </bpmn2:inclusiveGateway>
+    <bpmn2:sequenceFlow id="SequenceFlow_0jtjlbu" sourceRef="start" targetRef="callHoming" />
+    <bpmn2:sequenceFlow id="SequenceFlow_0qrwjzu" sourceRef="callHoming" targetRef="receiveAsyncCallback" />
+    <bpmn2:sequenceFlow id="SequenceFlow_03cy5y5" sourceRef="receiveAsyncCallback" targetRef="processHomingSolution" />
+    <bpmn2:sequenceFlow id="SequenceFlow_138xgla" sourceRef="processHomingSolution" targetRef="end" />
   </bpmn2:process>
   <bpmn2:error id="Error_10hit0u" name="MSO Workflow Exception" errorCode="MSOWorkflowException" />
   <bpmn2:error id="Error_1lwpypa" name="Java Lang Exception" errorCode="java.lang.Exception" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="HomingBB">
       <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="start">
-        <dc:Bounds x="135" y="275" width="36" height="36" />
+        <dc:Bounds x="153" y="275" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="108" y="311" width="90" height="20" />
+          <dc:Bounds x="126" y="311" width="90" height="20" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1x9usa6_di" bpmnElement="SequenceFlow_1x9usa6">
-        <di:waypoint xsi:type="dc:Point" x="171" y="293" />
-        <di:waypoint xsi:type="dc:Point" x="291" y="293" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="186" y="278" width="90" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="SubProcess_16p12qo_di" bpmnElement="bpmnErrorSubprocess" isExpanded="true">
-        <dc:Bounds x="254" y="496" width="409" height="168" />
+        <dc:Bounds x="312" y="405" width="409" height="168" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="SubProcess_12gjiy8_di" bpmnElement="javaExceptionSubProcess" isExpanded="true">
-        <dc:Bounds x="284" y="679" width="350" height="159" />
+        <dc:Bounds x="342" y="588" width="350" height="159" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_07tjq3v_di" bpmnElement="endBpmnError">
-        <dc:Bounds x="579" y="570" width="36" height="36" />
+        <dc:Bounds x="637" y="479" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="552" y="611" width="90" height="0" />
+          <dc:Bounds x="610" y="520" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="StartEvent_1qiitb2_di" bpmnElement="startBpmnError">
-        <dc:Bounds x="299" y="570" width="36" height="36" />
+        <dc:Bounds x="357" y="479" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="272" y="611" width="90" height="0" />
+          <dc:Bounds x="330" y="520" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_03hs6s9_di" bpmnElement="processMsoWorkflowException">
-        <dc:Bounds x="406" y="548" width="100" height="80" />
+        <dc:Bounds x="464" y="457" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_19gqykh_di" bpmnElement="processJavaException">
-        <dc:Bounds x="410" y="727" width="100" height="80" />
+        <dc:Bounds x="468" y="636" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="StartEvent_1fbpeuw_di" bpmnElement="startJavaError">
-        <dc:Bounds x="318" y="749" width="36" height="36" />
+        <dc:Bounds x="376" y="658" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="291" y="790" width="90" height="0" />
+          <dc:Bounds x="349" y="699" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_0jbvnr0_di" bpmnElement="endJavaError">
-        <dc:Bounds x="567" y="749" width="36" height="36" />
+        <dc:Bounds x="625" y="658" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="540" y="790" width="90" height="0" />
+          <dc:Bounds x="598" y="699" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1rf4vs8_di" bpmnElement="SequenceFlow_1rf4vs8">
-        <di:waypoint xsi:type="dc:Point" x="506" y="588" />
-        <di:waypoint xsi:type="dc:Point" x="579" y="588" />
+        <di:waypoint xsi:type="dc:Point" x="564" y="497" />
+        <di:waypoint xsi:type="dc:Point" x="637" y="497" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="498" y="573" width="90" height="0" />
+          <dc:Bounds x="556" y="482" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_00nlh7l_di" bpmnElement="SequenceFlow_00nlh7l">
-        <di:waypoint xsi:type="dc:Point" x="335" y="588" />
-        <di:waypoint xsi:type="dc:Point" x="363" y="588" />
-        <di:waypoint xsi:type="dc:Point" x="363" y="588" />
-        <di:waypoint xsi:type="dc:Point" x="406" y="588" />
+        <di:waypoint xsi:type="dc:Point" x="393" y="497" />
+        <di:waypoint xsi:type="dc:Point" x="421" y="497" />
+        <di:waypoint xsi:type="dc:Point" x="421" y="497" />
+        <di:waypoint xsi:type="dc:Point" x="464" y="497" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="333" y="588" width="90" height="0" />
+          <dc:Bounds x="391" y="497" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0kamg53_di" bpmnElement="SequenceFlow_0kamg53">
-        <di:waypoint xsi:type="dc:Point" x="354" y="767" />
-        <di:waypoint xsi:type="dc:Point" x="410" y="767" />
+        <di:waypoint xsi:type="dc:Point" x="412" y="676" />
+        <di:waypoint xsi:type="dc:Point" x="468" y="676" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="337" y="752" width="90" height="0" />
+          <dc:Bounds x="395" y="661" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1o7154s_di" bpmnElement="SequenceFlow_1o7154s">
-        <di:waypoint xsi:type="dc:Point" x="510" y="767" />
-        <di:waypoint xsi:type="dc:Point" x="567" y="767" />
+        <di:waypoint xsi:type="dc:Point" x="568" y="676" />
+        <di:waypoint xsi:type="dc:Point" x="625" y="676" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="494" y="752" width="90" height="0" />
+          <dc:Bounds x="552" y="661" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_031b5m3_di" bpmnElement="receiveAsyncCallback">
-        <dc:Bounds x="547" y="253" width="100" height="80" />
+        <dc:Bounds x="464" y="253" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1fipbmk_di" bpmnElement="SequenceFlow_1fipbmk">
-        <di:waypoint xsi:type="dc:Point" x="647" y="293" />
-        <di:waypoint xsi:type="dc:Point" x="677" y="293" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="617" y="272" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_01apjvo_di" bpmnElement="SequenceFlow_01apjvo">
-        <di:waypoint xsi:type="dc:Point" x="847" y="214" />
-        <di:waypoint xsi:type="dc:Point" x="885" y="214" />
-        <di:waypoint xsi:type="dc:Point" x="885" y="268" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="821" y="193" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_07i1a5x_di" bpmnElement="end">
-        <dc:Bounds x="1034" y="275" width="36" height="36" />
+        <dc:Bounds x="837" y="275" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1006" y="315" width="90" height="12" />
+          <dc:Bounds x="809" y="315" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0lc15i7_di" bpmnElement="SequenceFlow_0lc15i7">
-        <di:waypoint xsi:type="dc:Point" x="462" y="214" />
-        <di:waypoint xsi:type="dc:Point" x="500" y="214" />
-        <di:waypoint xsi:type="dc:Point" x="500" y="267" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="436" y="193" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1dtador_di" bpmnElement="SequenceFlow_1dtador">
-        <di:waypoint xsi:type="dc:Point" x="316" y="268" />
-        <di:waypoint xsi:type="dc:Point" x="316" y="214" />
-        <di:waypoint xsi:type="dc:Point" x="362" y="214" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="322.2567567567568" y="221" width="25" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1qbnm82_di" bpmnElement="SequenceFlow_1qbnm82">
-        <di:waypoint xsi:type="dc:Point" x="525" y="292" />
-        <di:waypoint xsi:type="dc:Point" x="547" y="292" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="536" y="271" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_08k112s_di" bpmnElement="SequenceFlow_08k112s">
-        <di:waypoint xsi:type="dc:Point" x="702" y="268" />
-        <di:waypoint xsi:type="dc:Point" x="702" y="214" />
-        <di:waypoint xsi:type="dc:Point" x="747" y="214" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="707.7837837837837" y="221" width="25" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0m6nhqg_di" bpmnElement="SequenceFlow_0m6nhqg">
-        <di:waypoint xsi:type="dc:Point" x="316" y="318" />
-        <di:waypoint xsi:type="dc:Point" x="316" y="368" />
-        <di:waypoint xsi:type="dc:Point" x="362" y="368" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="323" y="344" width="19" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0kvax6n_di" bpmnElement="SequenceFlow_0kvax6n">
-        <di:waypoint xsi:type="dc:Point" x="462" y="368" />
-        <di:waypoint xsi:type="dc:Point" x="500" y="368" />
-        <di:waypoint xsi:type="dc:Point" x="500" y="317" />
+      <bpmndi:BPMNShape id="ServiceTask_0rcv8sl_di" bpmnElement="callHoming">
+        <dc:Bounds x="292" y="253" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_0fs2fyg_di" bpmnElement="processHomingSolution">
+        <dc:Bounds x="649" y="253" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0jtjlbu_di" bpmnElement="SequenceFlow_0jtjlbu">
+        <di:waypoint xsi:type="dc:Point" x="189" y="293" />
+        <di:waypoint xsi:type="dc:Point" x="292" y="293" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="481" y="347" width="0" height="12" />
+          <dc:Bounds x="240.5" y="272" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0oixz4g_di" bpmnElement="SequenceFlow_0oixz4g">
-        <di:waypoint xsi:type="dc:Point" x="702" y="318" />
-        <di:waypoint xsi:type="dc:Point" x="702" y="368" />
-        <di:waypoint xsi:type="dc:Point" x="747" y="368" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0qrwjzu_di" bpmnElement="SequenceFlow_0qrwjzu">
+        <di:waypoint xsi:type="dc:Point" x="392" y="293" />
+        <di:waypoint xsi:type="dc:Point" x="464" y="293" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="708.3513513513514" y="345" width="19" height="12" />
+          <dc:Bounds x="428" y="272" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0ph4paa_di" bpmnElement="SequenceFlow_0ph4paa">
-        <di:waypoint xsi:type="dc:Point" x="847" y="368" />
-        <di:waypoint xsi:type="dc:Point" x="885" y="368" />
-        <di:waypoint xsi:type="dc:Point" x="885" y="318" />
+      <bpmndi:BPMNEdge id="SequenceFlow_03cy5y5_di" bpmnElement="SequenceFlow_03cy5y5">
+        <di:waypoint xsi:type="dc:Point" x="564" y="293" />
+        <di:waypoint xsi:type="dc:Point" x="649" y="293" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="866" y="347" width="0" height="12" />
+          <dc:Bounds x="606.5" y="272" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1urt5i6_di" bpmnElement="SequenceFlow_1urt5i6">
-        <di:waypoint xsi:type="dc:Point" x="910" y="293" />
-        <di:waypoint xsi:type="dc:Point" x="1034" y="293" />
+      <bpmndi:BPMNEdge id="SequenceFlow_138xgla_di" bpmnElement="SequenceFlow_138xgla">
+        <di:waypoint xsi:type="dc:Point" x="749" y="293" />
+        <di:waypoint xsi:type="dc:Point" x="837" y="293" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="972" y="272" width="0" height="12" />
+          <dc:Bounds x="793" y="272" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_0388svf_di" bpmnElement="callSniro">
-        <dc:Bounds x="362" y="174" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ServiceTask_1o0vjzl_di" bpmnElement="processSniroSolution">
-        <dc:Bounds x="747" y="174" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ServiceTask_0rcv8sl_di" bpmnElement="callOof">
-        <dc:Bounds x="362" y="328" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ServiceTask_0fs2fyg_di" bpmnElement="processOofSolution">
-        <dc:Bounds x="747" y="328" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="InclusiveGateway_0ssv6eg_di" bpmnElement="sniroOofCheck">
-        <dc:Bounds x="291" y="268" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="344" y="283" width="43" height="36" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="InclusiveGateway_0pf91to_di" bpmnElement="ExclusiveGateway_1ckp059">
-        <dc:Bounds x="475" y="267" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="500" y="321" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="InclusiveGateway_17vx4ua_di" bpmnElement="sniroOofCheck2">
-        <dc:Bounds x="677" y="268" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="730" y="281" width="43" height="24" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="InclusiveGateway_1610p1j_di" bpmnElement="ExclusiveGateway_1kvzxpb">
-        <dc:Bounds x="860" y="268" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="885" y="322" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn2:definitions>
index 2a0fef0..5ef4d7e 100644 (file)
@@ -34,7 +34,7 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.runner.RunWith;
 import org.onap.so.TestApplication;
-import org.onap.so.bpmn.buildingblock.SniroHomingV2;
+import org.onap.so.bpmn.buildingblock.HomingV2;
 import org.onap.so.bpmn.common.DelegateExecutionImpl;
 import org.onap.so.bpmn.common.validation.BuildingBlockValidatorRunner;
 import org.onap.so.bpmn.infrastructure.aai.tasks.AAICommonTasks;
@@ -230,7 +230,7 @@ public abstract class BaseBPMNTest {
     protected SDNCClient sdncClient;
 
     @MockBean
-    protected SniroHomingV2 sniroHoming;
+    protected HomingV2 homing;
 
     @MockBean
     protected NamingServiceDeleteTasks namingServiceDeleteTasks;
index 9943e39..f46331f 100644 (file)
@@ -33,7 +33,7 @@ import org.onap.so.bpmn.common.BuildingBlockExecution;
 public class AssignVnfBBTest extends BaseBPMNTest {
     @Test
     public void sunnyDayAssignVnfBBTest() throws InterruptedException, IOException {
-        variables.put("callHoming", true);
+        variables.put("homing", true);
         mockSubprocess("SDNCHandler", "My Mock Process Name", "GenericStub");
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("AssignVnfBB", variables);
         assertThat(pi).isNotNull();
index f1bb146..bca4d3a 100644 (file)
@@ -25,12 +25,9 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
 import org.camunda.bpm.engine.delegate.BpmnError;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.so.bpmn.buildingblock.SniroHomingV2;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
-import org.springframework.boot.test.mock.mockito.MockBean;
 
 
 public class HomingBBTest extends BaseBPMNTest {
@@ -40,28 +37,28 @@ public class HomingBBTest extends BaseBPMNTest {
         mockSubprocess("ReceiveWorkflowMessage", "Mock ReceiveWorkflowMessage", "GenericStub");
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("HomingBB", variables);
         assertThat(pi).isNotNull();
-        assertThat(pi).isStarted().hasPassedInOrder("start", "sniroOofCheck", "callSniro", "ExclusiveGateway_1ckp059",
-                "receiveAsyncCallback", "sniroOofCheck2", "processSniroSolution", "ExclusiveGateway_1kvzxpb", "end");
+        assertThat(pi).isStarted().hasPassedInOrder("start", "callHoming", "receiveAsyncCallback",
+                "processHomingSolution", "end");
         assertThat(pi).isEnded();
     }
 
     @Test
     public void testHomingV2_error_bpmnError() {
-        doThrow(new BpmnError("MSOWorkflowException")).when(sniroHoming).callSniro(any(BuildingBlockExecution.class));
+        doThrow(new BpmnError("MSOWorkflowException")).when(homing).callHoming(any(BuildingBlockExecution.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("HomingBB", variables);
         assertThat(pi).isNotNull();
-        assertThat(pi).isStarted().hasPassed("start", "sniroOofCheck", "startBpmnError", "bpmnErrorSubprocess",
+        assertThat(pi).isStarted().hasPassed("start", "callHoming", "startBpmnError", "bpmnErrorSubprocess",
                 "processMsoWorkflowException", "endBpmnError").hasNotPassed("callReceiveAsync");
         assertThat(pi).isEnded();
     }
 
     @Test
     public void testHomingV2_error_javaException() {
-        doThrow(new RuntimeException("Test")).when(sniroHoming).callSniro(any(BuildingBlockExecution.class));
+        doThrow(new RuntimeException("Test")).when(homing).callHoming(any(BuildingBlockExecution.class));
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("HomingBB", variables);
         assertThat(pi).isNotNull();
-        assertThat(pi).isStarted().hasPassed("start", "sniroOofCheck", "callSniro", "startJavaError",
-                "processJavaException", "javaExceptionSubProcess", "endJavaError").hasNotPassed("callReceiveAsync");
+        assertThat(pi).isStarted().hasPassed("start", "callHoming", "startJavaError", "processJavaException",
+                "javaExceptionSubProcess", "endJavaError").hasNotPassed("callReceiveAsync");
         assertThat(pi).isEnded();
     }
 
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/pnf/PnfNotificationEvent.java b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/pnf/PnfNotificationEvent.java
deleted file mode 100644 (file)
index 267ddbf..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2019 Nordix Foundation.
- * ================================================================================
- * 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.so.bpmn.infrastructure.pnf;
-
-import org.springframework.context.ApplicationEvent;
-
-public class PnfNotificationEvent extends ApplicationEvent {
-
-    private String pnfCorrelationId;
-
-    /**
-     * Create a new ApplicationEvent.
-     *
-     * @param source the object on which the event initially occurred (never {@code null})
-     */
-    public PnfNotificationEvent(Object source, String pnfCorrelationId) {
-        super(source);
-        this.pnfCorrelationId = pnfCorrelationId;
-    }
-
-    public String getPnfCorrelationId() {
-        return pnfCorrelationId;
-    }
-}
index e2dc375..94cedda 100644 (file)
@@ -23,40 +23,30 @@ package org.onap.so.bpmn.infrastructure.pnf.delegate;
 import org.camunda.bpm.engine.RuntimeService;
 import org.camunda.bpm.engine.delegate.DelegateExecution;
 import org.camunda.bpm.engine.delegate.JavaDelegate;
-import org.onap.so.bpmn.infrastructure.pnf.PnfNotificationEvent;
+import org.camunda.bpm.engine.runtime.Execution;
 import org.onap.so.bpmn.infrastructure.pnf.dmaap.DmaapClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationListener;
 import org.springframework.stereotype.Component;
 
 @Component
-public class InformDmaapClient implements JavaDelegate, ApplicationListener<PnfNotificationEvent> {
+public class InformDmaapClient implements JavaDelegate {
 
     private Logger logger = LoggerFactory.getLogger(getClass());
     private DmaapClient dmaapClient;
-    private DelegateExecution execution;
 
     @Override
     public void execute(DelegateExecution execution) {
         String pnfCorrelationId = (String) execution.getVariable(ExecutionVariableNames.PNF_CORRELATION_ID);
         RuntimeService runtimeService = execution.getProcessEngineServices().getRuntimeService();
+        String processBusinessKey = execution.getProcessBusinessKey();
         dmaapClient.registerForUpdate(pnfCorrelationId, () -> runtimeService.createMessageCorrelation("WorkflowMessage")
-                .processInstanceBusinessKey(execution.getProcessBusinessKey()).correlateWithResult());
-        this.execution = execution;
+                .processInstanceBusinessKey(processBusinessKey).correlateWithResult());
     }
 
     @Autowired
     public void setDmaapClient(DmaapClient dmaapClient) {
         this.dmaapClient = dmaapClient;
     }
-
-    @Override
-    public void onApplicationEvent(PnfNotificationEvent event) {
-        logger.info("Received application event for pnfCorrelationId: {}", event.getPnfCorrelationId());
-        RuntimeService runtimeService = execution.getProcessEngineServices().getRuntimeService();
-        runtimeService.createMessageCorrelation("WorkflowMessage")
-                .processInstanceBusinessKey(execution.getProcessBusinessKey()).correlateWithResult();
-    }
 }
index 2869111..96562fe 100644 (file)
@@ -35,11 +35,9 @@ import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.util.EntityUtils;
-import org.onap.so.bpmn.infrastructure.pnf.PnfNotificationEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
 
@@ -55,11 +53,8 @@ public class PnfEventReadyDmaapClient implements DmaapClient {
     private volatile ScheduledThreadPoolExecutor executor;
     private volatile boolean dmaapThreadListenerIsRunning;
 
-    private ApplicationEventPublisher applicationEventPublisher;
-
     @Autowired
-    public PnfEventReadyDmaapClient(Environment env, ApplicationEventPublisher applicationEventPublisher) {
-        this.applicationEventPublisher = applicationEventPublisher;
+    public PnfEventReadyDmaapClient(Environment env) {
         httpClient = HttpClientBuilder.create().build();
         pnfCorrelationIdToThreadMap = new ConcurrentHashMap<>();
         topicListenerDelayInSeconds = env.getProperty("pnf.dmaap.topicListenerDelayInSeconds", Integer.class);
@@ -135,9 +130,11 @@ public class PnfEventReadyDmaapClient implements DmaapClient {
         }
 
         private void informAboutPnfReadyIfPnfCorrelationIdFound(String pnfCorrelationId) {
-            unregister(pnfCorrelationId);
-            PnfNotificationEvent pnfNotificationEvent = new PnfNotificationEvent(this, pnfCorrelationId);
-            applicationEventPublisher.publishEvent(pnfNotificationEvent);
+            Runnable runnable = unregister(pnfCorrelationId);
+            if (runnable != null) {
+                logger.debug("dmaap listener gets pnf ready event for pnfCorrelationId: {}", pnfCorrelationId);
+                runnable.run();
+            }
         }
     }
 }
index c67b44e..e755214 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.pnf.delegate;
 
-import org.camunda.bpm.engine.delegate.DelegateExecution;
-import org.junit.Test;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
+import org.camunda.bpm.engine.delegate.DelegateExecution;
+import org.junit.Test;
 
 public class CancelDmaapSubscriptionTest {
 
+    private static final String TEST_PNF_CORRELATION_ID = "testPnfCorrelationId";
+
     @Test
     public void shouldCancelSubscription() throws Exception {
         // given
@@ -37,7 +39,7 @@ public class CancelDmaapSubscriptionTest {
         delegate.setDmaapClient(dmaapClientTest);
         DelegateExecution delegateExecution = mock(DelegateExecution.class);
         when(delegateExecution.getVariable(eq(ExecutionVariableNames.PNF_CORRELATION_ID)))
-                .thenReturn("testPnfCorrelationId");
+                .thenReturn(TEST_PNF_CORRELATION_ID);
         when(delegateExecution.getProcessBusinessKey()).thenReturn("testBusinessKey");
         dmaapClientTest.registerForUpdate("testPnfCorrelationId", () -> {
         });
index 96c3db0..df060ed 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.pnf.delegate;
 
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
 import org.camunda.bpm.engine.ProcessEngineServices;
 import org.camunda.bpm.engine.RuntimeService;
 import org.camunda.bpm.engine.delegate.DelegateExecution;
@@ -27,14 +34,8 @@ import org.camunda.bpm.engine.runtime.MessageCorrelationBuilder;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.InOrder;
-import org.onap.so.bpmn.infrastructure.pnf.PnfNotificationEvent;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.*;
 
 public class InformDmaapClientTest {
-
     @Before
     public void setUp() throws Exception {
         informDmaapClient = new InformDmaapClient();
@@ -73,19 +74,6 @@ public class InformDmaapClientTest {
         inOrder.verify(messageCorrelationBuilder).correlateWithResult();
     }
 
-    @Test
-    public void onApplicationEvent_validPnfNotificationEvent_expectedOutput() {
-
-        PnfNotificationEvent pnfNotificationEvent = new PnfNotificationEvent(this, "testPnfCorrelationId");
-
-        informDmaapClient.execute(delegateExecution);
-        informDmaapClient.onApplicationEvent(pnfNotificationEvent);
-
-        InOrder inOrder = inOrder(messageCorrelationBuilder);
-        inOrder.verify(messageCorrelationBuilder).processInstanceBusinessKey("testBusinessKey");
-        inOrder.verify(messageCorrelationBuilder).correlateWithResult();
-    }
-
     private DelegateExecution mockDelegateExecution() {
         DelegateExecution delegateExecution = mock(DelegateExecution.class);
         when(delegateExecution.getVariable(eq(ExecutionVariableNames.PNF_CORRELATION_ID)))
index 9f31e2a..19e08d9 100644 (file)
 package org.onap.so.bpmn.infrastructure.pnf.dmaap;
 
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyObject;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
@@ -49,12 +47,9 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
-import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
-import org.onap.so.bpmn.infrastructure.pnf.PnfNotificationEvent;
 import org.onap.so.bpmn.infrastructure.pnf.dmaap.PnfEventReadyDmaapClient.DmaapTopicListenerThread;
-import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.core.env.Environment;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -85,9 +80,6 @@ public class PnfEventReadyDmaapClientTest {
     private Runnable threadMockToNotifyCamundaFlow;
     private ScheduledThreadPoolExecutor executorMock;
 
-    @Mock
-    private ApplicationEventPublisher applicationEventPublisher;
-
     @Before
     public void init() throws NoSuchFieldException, IllegalAccessException {
         when(env.getProperty(eq("pnf.dmaap.port"), eq(Integer.class))).thenReturn(PORT);
@@ -99,7 +91,7 @@ public class PnfEventReadyDmaapClientTest {
         when(env.getProperty(eq("pnf.dmaap.consumerGroup"))).thenReturn(CONSUMER_GROUP);
         when(env.getProperty(eq("pnf.dmaap.topicListenerDelayInSeconds"), eq(Integer.class)))
                 .thenReturn(TOPIC_LISTENER_DELAY_IN_SECONDS);
-        testedObject = new PnfEventReadyDmaapClient(env, applicationEventPublisher);
+        testedObject = new PnfEventReadyDmaapClient(env);
         testedObjectInnerClassThread = testedObject.new DmaapTopicListenerThread();
         httpClientMock = mock(HttpClient.class);
         threadMockToNotifyCamundaFlow = mock(Runnable.class);
@@ -131,10 +123,7 @@ public class PnfEventReadyDmaapClientTest {
         assertEquals(captor1.getValue().getURI().getPath(),
                 "/" + URI_PATH_PREFIX + "/" + EVENT_TOPIC_TEST + "/" + CONSUMER_GROUP + "/" + CONSUMER_ID + "");
 
-        /**
-         * Two PNF returned from HTTP request.
-         */
-        verify(applicationEventPublisher, times(2)).publishEvent(any(PnfNotificationEvent.class));
+        verify(threadMockToNotifyCamundaFlow).run();
         verify(executorMock).shutdown();
     }
 
index b0517ac..f51ea00 100644 (file)
@@ -36,6 +36,7 @@ import java.util.UUID;
 import org.camunda.bpm.engine.runtime.Execution;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.onap.ccsdk.cds.controllerblueprints.common.api.ActionIdentifiers;
 import org.onap.ccsdk.cds.controllerblueprints.common.api.CommonHeader;
@@ -51,8 +52,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 /**
  * Basic Integration test for createVcpeResCustService_Simplified.bpmn workflow.
  */
+@Ignore
 public class CreateVcpeResCustServiceSimplifiedTest extends BaseBPMNTest {
 
+    private static final long WORKFLOW_WAIT_TIME = 1000L;
     private Logger logger = LoggerFactory.getLogger(getClass());
 
     private static final String TEST_PROCESSINSTANCE_KEY = "CreateVcpeResCustService_simplified";
@@ -101,7 +104,7 @@ public class CreateVcpeResCustServiceSimplifiedTest extends BaseBPMNTest {
     }
 
     @Test
-    public void workflow_validInput_expectedOuput() {
+    public void workflow_validInput_expectedOuput() throws InterruptedException {
 
         mockCatalogDb();
         mockRequestDb();
@@ -112,26 +115,25 @@ public class CreateVcpeResCustServiceSimplifiedTest extends BaseBPMNTest {
                 runtimeService.startProcessInstanceByKey(TEST_PROCESSINSTANCE_KEY, testBusinessKey, variables);
         assertThat(pi).isNotNull();
 
-        Execution execution = runtimeService.createExecutionQuery().processDefinitionKey("CreateAndActivatePnfResource")
-                .activityId("WaitForDmaapPnfReadyNotification").singleResult();
+        Thread.sleep(WORKFLOW_WAIT_TIME);
 
-        if (!execution.isSuspended() && !execution.isEnded()) {
-            try {
+        Execution execution = runtimeService.createExecutionQuery().processInstanceBusinessKey(testBusinessKey)
+                .messageEventSubscriptionName("WorkflowMessage").singleResult();
 
-                runtimeService.signal(execution.getId());
-            } catch (Exception e) {
-                logger.info(e.getMessage(), e);
-            }
+        assertThat(execution).isNotNull();
+
+        int waitCount = 10;
+        while (!pi.isEnded() && waitCount >= 0) {
+            Thread.sleep(WORKFLOW_WAIT_TIME);
+            waitCount--;
         }
 
-        assertThat(pi).isStarted().hasPassedInOrder("createVCPE_startEvent", "preProcessRequest_ScriptTask",
+        assertThat(pi).isEnded().hasPassedInOrder("createVCPE_startEvent", "preProcessRequest_ScriptTask",
                 "sendSyncAckResponse_ScriptTask", "ScriptTask_0cdtchu", "DecomposeService", "ScriptTask_0lpv2da",
                 "ScriptTask_1y241p8", "CallActivity_1vc4jeh", "ScriptTask_1y5lvl7", "GeneratePnfUuid", "Task_14l19kv",
                 "Pnf_Con", "setPONR_ScriptTask", "postProcessAndCompletionRequest_ScriptTask",
                 "callCompleteMsoProcess_CallActivity", "ScriptTask_2", "CreateVCPE_EndEvent");
 
-        assertThat(pi).isEnded();
-
         List<ExecutionServiceInput> detailedMessages = grpcNettyServer.getDetailedMessages();
         assertThat(detailedMessages).hasSize(2);
         try {
@@ -144,6 +146,8 @@ public class CreateVcpeResCustServiceSimplifiedTest extends BaseBPMNTest {
     }
 
     private void checkConfigAssign(ExecutionServiceInput executionServiceInput) {
+
+        logger.info("Checking the configAssign request");
         ActionIdentifiers actionIdentifiers = executionServiceInput.getActionIdentifiers();
 
         /**
@@ -173,6 +177,8 @@ public class CreateVcpeResCustServiceSimplifiedTest extends BaseBPMNTest {
     }
 
     private void checkConfigDeploy(ExecutionServiceInput executionServiceInput) {
+
+        logger.info("Checking the configDeploy request");
         ActionIdentifiers actionIdentifiers = executionServiceInput.getActionIdentifiers();
 
         /**
index 2903798..2f898b6 100644 (file)
@@ -531,7 +531,7 @@ public class SniroHomingV2 {
             si.setServiceInstanceId(identifierValue);
             si.setOrchestrationStatus(OrchestrationStatus.CREATED);
             cloud.setLcpCloudRegionId(assignmentsMap.get("cloudRegionId"));
-            if (assignmentsMap.containsKey("vnfHostName")) {
+            if (assignmentsMap.containsKey("vnfHostName") && !assignmentsMap.get("vnfHostName").isEmpty()) {
                 logger.debug("Resources has been homed to a vnf");
                 GenericVnf vnf = setVnf(assignmentsMap);
                 vnf.setCloudRegion(cloud);
index da37be9..5da16f4 100644 (file)
@@ -28,10 +28,12 @@ import javax.transaction.Transactional;
 import org.junit.After;
 import org.junit.BeforeClass;
 import org.junit.runner.RunWith;
+import org.onap.so.db.request.client.RequestsDbClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.SpyBean;
 import org.springframework.boot.test.web.client.TestRestTemplate;
 import org.springframework.boot.web.server.LocalServerPort;
 import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
@@ -52,6 +54,9 @@ public abstract class BaseTest {
     protected Logger logger = LoggerFactory.getLogger(BaseTest.class);
     protected TestRestTemplate restTemplate = new TestRestTemplate("test", "test");
 
+    @SpyBean
+    protected RequestsDbClient requestsDbClient;
+
     @Autowired
     protected Environment env;
 
index 1bb3932..db6273d 100644 (file)
@@ -55,6 +55,7 @@ import javax.ws.rs.core.Response;
 import org.apache.http.HttpStatus;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mockito;
 import org.onap.logging.ref.slf4j.ONAPLogConstants;
 import org.onap.so.db.catalog.beans.Service;
 import org.onap.so.db.catalog.beans.ServiceRecipe;
@@ -124,6 +125,7 @@ public class ServiceInstancesTest extends BaseTest {
         }
         wireMockServer.stubFor(post(urlMatching(".*/infraActiveRequests.*")).willReturn(aResponse()
                 .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON).withStatus(HttpStatus.SC_OK)));
+        Mockito.doReturn(null).when(requestsDbClient).getInfraActiveRequestbyRequestId(Mockito.any());
     }
 
     public String inputStream(String JsonInput) throws IOException {
index 2c03173..bc9003f 100644 (file)
@@ -283,6 +283,7 @@ DROP TABLE IF EXISTS `configuration_customization`;
 /*!40101 SET @saved_cs_client     = @@character_set_client */;
 /*!40101 SET character_set_client = utf8 */;
 CREATE TABLE `configuration_customization` (
+  `ID` int(11) NOT NULL AUTO_INCREMENT,
   `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL,
   `MODEL_INSTANCE_NAME` varchar(200) NOT NULL,
   `CONFIGURATION_TYPE` varchar(200) DEFAULT NULL,
@@ -291,29 +292,20 @@ CREATE TABLE `configuration_customization` (
   `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `CONFIGURATION_MODEL_UUID` varchar(200) NOT NULL,
   `SERVICE_PROXY_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID` varchar(200) DEFAULT NULL,
-  `CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID` varchar(200) DEFAULT NULL,
-  PRIMARY KEY (`MODEL_CUSTOMIZATION_UUID`),
-  KEY `fk_configuration_customization__configuration_idx` (`CONFIGURATION_MODEL_UUID`),
-  KEY `fk_configuration_customization__service_proxy_customization_idx` (`SERVICE_PROXY_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID`),
-  KEY `fk_configuration_customization__configuration_customization_idx` (`CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID`),
-  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,
-  CONSTRAINT `fk_configuration_resource_customization__configuration_resour1` FOREIGN KEY (`CONFIGURATION_MODEL_UUID`) REFERENCES `configuration` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `configuration_customization_to_service`
---
-
-DROP TABLE IF EXISTS `configuration_customization_to_service`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-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`)
+  `CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_ID` int(11) DEFAULT NULL,
+  `SERVICE_MODEL_UUID` varchar(200),
+   PRIMARY KEY (`ID`),
+   KEY `fk_configuration_customization__configuration_idx` (`CONFIGURATION_MODEL_UUID`),
+   KEY `fk_configuration_customization__service_idx` (`SERVICE_MODEL_UUID`),
+   UNIQUE KEY `uk_configuration_customization`  (`MODEL_CUSTOMIZATION_UUID` ASC, `SERVICE_MODEL_UUID` ASC),
+   CONSTRAINT `fk_configuration_customization__configuration1` FOREIGN KEY (`CONFIGURATION_MODEL_UUID`)
+        REFERENCES `configuration` (`MODEL_UUID`)
+        ON DELETE CASCADE ON UPDATE CASCADE,
+   CONSTRAINT `fk_configuration_customization__service1` FOREIGN KEY (`SERVICE_MODEL_UUID`)
+        REFERENCES `service` (`MODEL_UUID`)
+        ON DELETE CASCADE ON UPDATE CASCADE
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
+/*!40101 SET character_set_client = @saved_cs_client */;/*!40101 SET character_set_client = @saved_cs_client */;
 
 --
 -- Table structure for table `controller_selection_reference`
index 059935f..1117648 100644 (file)
@@ -27,6 +27,8 @@ import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
@@ -52,8 +54,12 @@ public class ConfigurationResourceCustomization implements Serializable {
      */
     private static final long serialVersionUID = 1230671937560638856L;
 
-    @BusinessKey
     @Id
+    @BusinessKey
+    @Column(name = "ID")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
     @Column(name = "MODEL_CUSTOMIZATION_UUID")
     private String modelCustomizationUUID;
 
@@ -77,18 +83,30 @@ public class ConfigurationResourceCustomization implements Serializable {
     private String serviceProxyResourceCustomizationUUID;
 
     @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
-    @JoinColumn(name = "CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID")
+    @JoinColumn(name = "CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_ID")
     private ConfigurationResourceCustomization configResourceCustomization;
 
     @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
     @JoinColumn(name = "CONFIGURATION_MODEL_UUID")
     private ConfigurationResource configurationResource;
 
+    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+    @JoinColumn(name = "SERVICE_MODEL_UUID")
+    private Service service;
+
     @PrePersist
     protected void onCreate() {
         this.created = new Date();
     }
 
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
     public String getModelCustomizationUUID() {
         return modelCustomizationUUID;
     }
@@ -141,6 +159,7 @@ public class ConfigurationResourceCustomization implements Serializable {
         this.serviceProxyResourceCustomizationUUID = serviceProxyResourceCustomizationUUID;
     }
 
+
     @LinkedResource
     public ConfigurationResourceCustomization getConfigResourceCustomization() {
         return configResourceCustomization;
@@ -159,14 +178,22 @@ public class ConfigurationResourceCustomization implements Serializable {
         this.configurationResource = configurationResource;
     }
 
+    public Service getService() {
+        return service;
+    }
+
+    public void setService(Service service) {
+        this.service = service;
+    }
+
     @Override
     public String toString() {
-        return new ToStringBuilder(this).append("modelCustomizationUUID", modelCustomizationUUID)
+        return new ToStringBuilder(this).append("id", id).append("modelCustomizationUUID", modelCustomizationUUID)
                 .append("modelInstanceName", modelInstanceName).append("nfFunction", nfFunction)
                 .append("nfType", nfType).append("nfRole", nfRole).append("created", created)
                 // .append("serviceProxyResourceCustomization", serviceProxyResourceCustomization)
                 .append("configResourceCustomization", configResourceCustomization)
-                .append("configurationResource", configurationResource).toString();
+                .append("configurationResource", configurationResource).append("service", service).toString();
     }
 
     @Override
@@ -175,12 +202,12 @@ public class ConfigurationResourceCustomization implements Serializable {
             return false;
         }
         ConfigurationResourceCustomization castOther = (ConfigurationResourceCustomization) other;
-        return new EqualsBuilder().append(modelCustomizationUUID, castOther.modelCustomizationUUID).isEquals();
+        return new EqualsBuilder().append(id, castOther.id).isEquals();
     }
 
     @Override
     public int hashCode() {
-        return new HashCodeBuilder().append(modelCustomizationUUID).toHashCode();
+        return new HashCodeBuilder().append(id).toHashCode();
     }
 
 }
index c333033..ffcc8e9 100644 (file)
@@ -119,9 +119,7 @@ public class Service implements Serializable {
             inverseJoinColumns = @JoinColumn(name = "RESOURCE_MODEL_CUSTOMIZATION_UUID"))
     private List<ServiceProxyResourceCustomization> serviceProxyCustomizations;
 
-    @OneToMany(cascade = CascadeType.ALL)
-    @JoinTable(name = "configuration_customization_to_service", joinColumns = @JoinColumn(name = "SERVICE_MODEL_UUID"),
-            inverseJoinColumns = @JoinColumn(name = "RESOURCE_MODEL_CUSTOMIZATION_UUID"))
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "service")
     private List<ConfigurationResourceCustomization> configurationCustomizations;
 
     @OneToMany(cascade = CascadeType.ALL)
index 4310498..74c4c8c 100644 (file)
@@ -26,6 +26,6 @@ import org.springframework.data.rest.core.annotation.RepositoryRestResource;
 @RepositoryRestResource(collectionResourceRel = "configurationResourceCustomization",
         path = "configurationResourceCustomization")
 public interface ConfigurationResourceCustomizationRepository
-        extends JpaRepository<ConfigurationResourceCustomization, String> {
+        extends JpaRepository<ConfigurationResourceCustomization, Integer> {
 
 }
index 0b9d50f..4108464 100644 (file)
@@ -28,5 +28,5 @@ import org.springframework.data.rest.core.annotation.RepositoryRestResource;
 @RepositoryRestResource(collectionResourceRel = "vnfcInstanceGroupCustomization",
         path = "vnfcInstanceGroupCustomization")
 public interface VnfcInstanceGroupCustomizationRepository
-        extends JpaRepository<VnfcInstanceGroupCustomization, String> {
+        extends JpaRepository<VnfcInstanceGroupCustomization, Integer> {
 }
diff --git a/mso-catalog-db/src/test/java/org/onap/so/db/catalog/data/repository/VnfcInstanceGroupCustomizationRepositoryTest.java b/mso-catalog-db/src/test/java/org/onap/so/db/catalog/data/repository/VnfcInstanceGroupCustomizationRepositoryTest.java
new file mode 100644 (file)
index 0000000..8dcf89e
--- /dev/null
@@ -0,0 +1,46 @@
+/*-
+ * ============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.db.catalog.data.repository;
+
+import java.util.List;
+import org.junit.Assert;
+import org.junit.Test;
+import org.onap.so.db.catalog.BaseTest;
+import org.onap.so.db.catalog.beans.VnfcInstanceGroupCustomization;
+import org.onap.so.db.catalog.exceptions.NoEntityFoundException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+
+public class VnfcInstanceGroupCustomizationRepositoryTest extends BaseTest {
+    @Autowired
+    private VnfcInstanceGroupCustomizationRepository vnfcInstanceGroupCustomizationRepository;
+
+    @Test
+    public void findAllTest() throws Exception {
+        List<VnfcInstanceGroupCustomization> vnfcInstanceGroupCustomizationList =
+                vnfcInstanceGroupCustomizationRepository.findAll();
+        Assert.assertFalse(CollectionUtils.isEmpty(vnfcInstanceGroupCustomizationList));
+
+        VnfcInstanceGroupCustomization vnfcInstanceGroupCustomization = vnfcInstanceGroupCustomizationRepository
+                .findById(1450).orElseThrow(() -> new NoEntityFoundException("Cannot Find Operation"));
+        Assert.assertTrue(vnfcInstanceGroupCustomization.getFunction().equalsIgnoreCase("FUNCTION"));
+    }
+}
index 54bb5fc..f6d0426 100644 (file)
@@ -100,9 +100,11 @@ insert into vnf_resource(orchestration_mode, description, creation_timestamp, mo
 ('HEAT', '1607 vSAMP10a - inherent network', '2017-04-14 21:46:28', 'ff2ae348-214a-11e7-93ae-92361f002672', '', '', '2fff5b20-214b-11e7-93ae-92361f002671', '2.0', 'vSAMP10a', 'VF', null);
 
 
-insert into vnf_resource_customization(model_customization_uuid, model_instance_name, min_instances, max_instances, availability_zone_max_count, nf_type, nf_role, nf_function, nf_naming_code, creation_timestamp, vnf_resource_model_uuid, multi_stage_design,SERVICE_MODEL_UUID) values
-('68dc9a92-214c-11e7-93ae-92361f002672', 'vSAMP10a 2', '0', '0', '0', 'vSAMP', 'vSAMP', 'vSAMP', 'vSAMP', '2017-05-26 15:08:24', 'ff2ae348-214a-11e7-93ae-92361f002672', null,'5df8b6de-2083-11e7-93ae-92361f002672');
+insert into vnf_resource_customization(id, model_customization_uuid, model_instance_name, min_instances, max_instances, availability_zone_max_count, nf_type, nf_role, nf_function, nf_naming_code, creation_timestamp, vnf_resource_model_uuid, multi_stage_design,SERVICE_MODEL_UUID) values
+('1429', '68dc9a92-214c-11e7-93ae-92361f002672', 'vSAMP10a 2', '0', '0', '0', 'vSAMP', 'vSAMP', 'vSAMP', 'vSAMP', '2017-05-26 15:08:24', 'ff2ae348-214a-11e7-93ae-92361f002672', null,'5df8b6de-2083-11e7-93ae-92361f002672');
 
+INSERT INTO vnfc_instance_group_customization (`ID`, `INSTANCE_GROUP_MODEL_UUID`, `FUNCTION`, `VNF_RESOURCE_CUSTOMIZATION_ID`) VALUES 
+('1450', '21e43a7c-d823-4f5b-a427-5235f63035ff', 'FUNCTION', '1429');
 
 
 
index 5e43f8f..f5e7d52 100644 (file)
@@ -280,6 +280,7 @@ DROP TABLE IF EXISTS `configuration_customization`;
 /*!40101 SET @saved_cs_client     = @@character_set_client */;
 /*!40101 SET character_set_client = utf8 */;
 CREATE TABLE `configuration_customization` (
+  `ID` int(11) NOT NULL AUTO_INCREMENT,
   `MODEL_CUSTOMIZATION_UUID` varchar(200) NOT NULL,
   `MODEL_INSTANCE_NAME` varchar(200) NOT NULL,
   `CONFIGURATION_TYPE` varchar(200) DEFAULT NULL,
@@ -288,27 +289,18 @@ CREATE TABLE `configuration_customization` (
   `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `CONFIGURATION_MODEL_UUID` varchar(200) NOT NULL,
   `SERVICE_PROXY_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID` varchar(200) DEFAULT NULL,
-  `CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID` varchar(200) DEFAULT NULL,
-  PRIMARY KEY (`MODEL_CUSTOMIZATION_UUID`),
-  KEY `fk_configuration_customization__configuration_idx` (`CONFIGURATION_MODEL_UUID`),
-  KEY `fk_configuration_customization__service_proxy_customization_idx` (`SERVICE_PROXY_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID`),
-  KEY `fk_configuration_customization__configuration_customization_idx` (`CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_UUID`),
-  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,
-  CONSTRAINT `fk_configuration_resource_customization__configuration_resour1` FOREIGN KEY (`CONFIGURATION_MODEL_UUID`) REFERENCES `configuration` (`MODEL_UUID`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Table structure for table `configuration_customization_to_service`
---
-
-DROP TABLE IF EXISTS `configuration_customization_to_service`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-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`)
+  `CONFIGURATION_CUSTOMIZATION_MODEL_CUSTOMIZATION_ID` int(11) DEFAULT NULL,
+  `SERVICE_MODEL_UUID` varchar(200),
+   PRIMARY KEY (`ID`),
+   KEY `fk_configuration_customization__configuration_idx` (`CONFIGURATION_MODEL_UUID`),
+   KEY `fk_configuration_customization__service_idx` (`SERVICE_MODEL_UUID`),
+   UNIQUE KEY `uk_configuration_customization`  (`MODEL_CUSTOMIZATION_UUID` ASC, `SERVICE_MODEL_UUID` ASC),
+   CONSTRAINT `fk_configuration_customization__configuration1` FOREIGN KEY (`CONFIGURATION_MODEL_UUID`)
+        REFERENCES `configuration` (`MODEL_UUID`)
+        ON DELETE CASCADE ON UPDATE CASCADE,
+   CONSTRAINT `fk_configuration_customization__service1` FOREIGN KEY (`SERVICE_MODEL_UUID`)
+        REFERENCES `service` (`MODEL_UUID`)
+        ON DELETE CASCADE ON UPDATE CASCADE
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 /*!40101 SET character_set_client = @saved_cs_client */;