Bug fixes October 16 58/70658/1
authorBenjamin, Max (mb388a) <mb388a@us.att.com>
Tue, 16 Oct 2018 20:46:17 +0000 (16:46 -0400)
committerBenjamin, Max (mb388a) <mb388a@us.att.com>
Wed, 17 Oct 2018 14:02:42 +0000 (10:02 -0400)
Treat the VfModule returned from PrepareUpdateAAIVfModule call as an
AAI object
collection create, connect instanceGroup to cloudRegion
Fix a typo in the name of the method for getting a variable
testing mapping of instance group role
test NetworkInstanceGroup role to be SUB-INTERFACE
use enum value with hyphen for subtype
Some updates based on feedback to java codes
updated client to use optional instead of passing null
added case where client sends null due to mapping issue
added generic response object and pinc returns response
build relationship now correctly removes wrapper
Ensure that no null object gets referenced while checking if VNF is
empty.

Change-Id: I6177877518475c1f2e8e4e9dbd2ad1e2f3e10d18
Issue-ID: SO-1144
Signed-off-by: Benjamin, Max (mb388a) <mb388a@us.att.com>
15 files changed:
bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/DeleteAAIVfModule.groovy
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/baseclient/BaseClient.java
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateNetworkCollectionBB.bpmn
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateNetworkCollectionBBTest.java
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteVfModule.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteVnf.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoUpdateVfModule.groovy
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/CreateNetworkCollection.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAINetworkResources.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/CreateNetworkCollectionTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/aai/mapper/AAIObjectMapperTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAINetworkResourcesTest.java
common/src/main/java/org/onap/so/client/aai/AAIResourcesClient.java
common/src/test/java/org/onap/so/client/aai/AAIResourcesClientTest.java
mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/SubType.java

index 178b4d1..6da1f6d 100644 (file)
@@ -132,7 +132,7 @@ public class DeleteAAIVfModule extends AbstractServiceTaskProcessor{
                def responseData = ""
                try {
                        String vnfId = execution.getVariable("DAAIVfMod_vnfId")
-                       String vfModuleId = execution.setVariable("DAAIVfMod_vfModuleId")
+                       String vfModuleId = execution.getVariable("DAAIVfMod_vfModuleId")
                        String resourceVersion =  execution.getVariable("DAAIVfMod_vfModRsrcVer")
                        
                        AaiUtil aaiUriUtil = new AaiUtil(this)
index 78f3e96..af93c1b 100644 (file)
 
 package org.onap.so.bpmn.common.baseclient;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.onap.so.logging.jaxrs.filter.SpringClientFilter;
 import org.springframework.core.ParameterizedTypeReference;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.http.client.BufferingClientHttpRequestFactory;
 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
@@ -40,6 +44,17 @@ public class BaseClient<I,O> {
        public HttpHeaders getHttpHeader() {
                return httpHeader;
        }
+       
+    public HttpHeaders setDefaultHttpHeaders(String auth) {
+       httpHeader = new HttpHeaders();
+        httpHeader.set("Authorization", auth);
+        httpHeader.setContentType(MediaType.APPLICATION_JSON);
+        List<MediaType> acceptMediaTypes = new ArrayList<MediaType>();
+        acceptMediaTypes.add(MediaType.APPLICATION_JSON);
+        acceptMediaTypes.add(MediaType.TEXT_PLAIN);
+        httpHeader.setAccept(acceptMediaTypes);
+        return httpHeader;
+    }
 
        public void setHttpHeader(HttpHeaders httpHeader) {
                this.httpHeader = httpHeader;
index fb2bfae..293ba5d 100644 (file)
@@ -1,5 +1,5 @@
 <?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:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0" 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:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.7.2" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="CreateNetworkCollectionBB" name="CreateNetworkCollectionBB" isExecutable="true">
     <bpmn2:startEvent id="createNetworkCollection_startEvent">
       <bpmn2:outgoing>SequenceFlow_1maepy7</bpmn2:outgoing>
     </bpmn2:serviceTask>
     <bpmn2:serviceTask id="ServiceTask_Connect_Collection_to_InstanceGroup" name="&#10;AAI&#10;Connect&#10;(net collection)&#10;" camunda:expression="${CreateNetworkCollection.connectCollectionToInstanceGroup(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}  ">
       <bpmn2:incoming>SequenceFlow_0z4c30j</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_1hij1px</bpmn2:outgoing>
+      <bpmn2:outgoing>SequenceFlow_0904jyg</bpmn2:outgoing>
     </bpmn2:serviceTask>
     <bpmn2:sequenceFlow id="SequenceFlow_05yxpu5" sourceRef="ServiceTask_create_NetworkCollection" targetRef="ServiceTask_create_NetworkCollectionInstanceGroup" />
     <bpmn2:sequenceFlow id="SequenceFlow_0z4c30j" sourceRef="ServiceTask_create_NetworkCollectionInstanceGroup" targetRef="ServiceTask_Connect_Collection_to_InstanceGroup" />
     <bpmn2:serviceTask id="ServiceTask_Connect_Collection_to_ServiceInstance" name="&#10;AAI&#10;Connect&#10;(svc instance)&#10;" camunda:expression="${CreateNetworkCollection.connectCollectionToServiceInstance(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}  ">
-      <bpmn2:incoming>SequenceFlow_1hij1px</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_0gkrvg6</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_0hhklb4</bpmn2:outgoing>
     </bpmn2:serviceTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_1hij1px" sourceRef="ServiceTask_Connect_Collection_to_InstanceGroup" targetRef="ServiceTask_Connect_Collection_to_ServiceInstance" />
     <bpmn2:sequenceFlow id="SequenceFlow_0hhklb4" sourceRef="ServiceTask_Connect_Collection_to_ServiceInstance" targetRef="createNetworkCollection_EndEvent" />
+    <bpmn2:serviceTask id="ServiceTask_Connect_InstanceGroup_to_CloudRegion" name="&#10;AAI&#10;Connect&#10;(group to cloud)&#10;" camunda:expression="${CreateNetworkCollection.connectInstanceGroupToCloudRegion(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}  ">
+      <bpmn2:incoming>SequenceFlow_0904jyg</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0gkrvg6</bpmn2:outgoing>
+    </bpmn2:serviceTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_0904jyg" sourceRef="ServiceTask_Connect_Collection_to_InstanceGroup" targetRef="ServiceTask_Connect_InstanceGroup_to_CloudRegion" />
+    <bpmn2:sequenceFlow id="SequenceFlow_0gkrvg6" sourceRef="ServiceTask_Connect_InstanceGroup_to_CloudRegion" targetRef="ServiceTask_Connect_Collection_to_ServiceInstance" />
   </bpmn2:process>
   <bpmn2:error id="Error_2" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
   <bpmn2:error id="Error_1" name="java.lang.Exception" errorCode="java.lang.Exception" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="CreateNetworkCollectionBB">
       <bpmndi:BPMNShape id="StartEvent_0lbwmd1_di" bpmnElement="createNetworkCollection_startEvent">
-        <dc:Bounds x="236" y="-55" width="36" height="36" />
+        <dc:Bounds x="255" y="-55" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="229" y="-14" width="50" height="12" />
+          <dc:Bounds x="228" y="-14" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_10l9a3s_di" bpmnElement="createNetworkCollection_EndEvent">
-        <dc:Bounds x="1132" y="-55" width="36" height="36" />
+        <dc:Bounds x="1280" y="-55" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1128" y="-19" width="46" height="12" />
+          <dc:Bounds x="1254" y="-19" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_08q9eo4_di" bpmnElement="BuildName_ServiceTask">
         <dc:Bounds x="346" y="-77" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1maepy7_di" bpmnElement="SequenceFlow_1maepy7">
-        <di:waypoint xsi:type="dc:Point" x="272" y="-37" />
+        <di:waypoint xsi:type="dc:Point" x="291" y="-37" />
         <di:waypoint xsi:type="dc:Point" x="346" y="-37" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="309" y="-52" width="0" height="0" />
+          <dc:Bounds x="273.5" y="-52" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_02qnccl_di" bpmnElement="ServiceTask_create_NetworkCollection">
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_15u6tzt_di" bpmnElement="ServiceTask_Connect_Collection_to_ServiceInstance">
-        <dc:Bounds x="982" y="-77" width="100" height="80" />
+        <dc:Bounds x="1124" y="-77" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1hij1px_di" bpmnElement="SequenceFlow_1hij1px">
+      <bpmndi:BPMNEdge id="SequenceFlow_0hhklb4_di" bpmnElement="SequenceFlow_0hhklb4">
+        <di:waypoint xsi:type="dc:Point" x="1224" y="-37" />
+        <di:waypoint xsi:type="dc:Point" x="1280" y="-37" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1207" y="-52" width="90" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_0kpj3lv_di" bpmnElement="ServiceTask_Connect_InstanceGroup_to_CloudRegion">
+        <dc:Bounds x="971" y="-77" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0904jyg_di" bpmnElement="SequenceFlow_0904jyg">
         <di:waypoint xsi:type="dc:Point" x="917" y="-37" />
-        <di:waypoint xsi:type="dc:Point" x="982" y="-37" />
+        <di:waypoint xsi:type="dc:Point" x="971" y="-37" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="950" y="-62" width="0" height="0" />
+          <dc:Bounds x="944" y="-58" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0hhklb4_di" bpmnElement="SequenceFlow_0hhklb4">
-        <di:waypoint xsi:type="dc:Point" x="1082" y="-37" />
-        <di:waypoint xsi:type="dc:Point" x="1132" y="-37" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0gkrvg6_di" bpmnElement="SequenceFlow_0gkrvg6">
+        <di:waypoint xsi:type="dc:Point" x="1071" y="-37" />
+        <di:waypoint xsi:type="dc:Point" x="1124" y="-37" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1107" y="-62" width="0" height="0" />
+          <dc:Bounds x="1097.5" y="-58" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
index bd285f1..421e09c 100644 (file)
@@ -35,7 +35,7 @@ public class CreateNetworkCollectionBBTest extends BaseBPMNTest{
     public void sunnyDayCreateNetworkCollection_Test() throws InterruptedException {
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateNetworkCollectionBB",variables);
         assertThat(pi).isNotNull();
-        assertThat(pi).isStarted().hasPassedInOrder("createNetworkCollection_startEvent", "BuildName_ServiceTask", "ServiceTask_create_NetworkCollection", "ServiceTask_create_NetworkCollectionInstanceGroup", "ServiceTask_Connect_Collection_to_InstanceGroup", "ServiceTask_Connect_Collection_to_ServiceInstance", "createNetworkCollection_EndEvent");     
+        assertThat(pi).isStarted().hasPassedInOrder("createNetworkCollection_startEvent", "BuildName_ServiceTask", "ServiceTask_create_NetworkCollection", "ServiceTask_create_NetworkCollectionInstanceGroup", "ServiceTask_Connect_Collection_to_InstanceGroup", "ServiceTask_Connect_InstanceGroup_to_CloudRegion", "ServiceTask_Connect_Collection_to_ServiceInstance", "createNetworkCollection_EndEvent");     
         assertThat(pi).isEnded();
     }
 
index 1a3e8aa..85e67c5 100644 (file)
@@ -217,8 +217,8 @@ public class DoDeleteVfModule extends AbstractServiceTaskProcessor{
                // Get vfModuleName from AAI response if it was not specified on the request
                if (vfModuleName == null || vfModuleName.isEmpty()) {
                        if (execution.getVariable("vfModuleFromAAI") != null) {
-                               VfModule vfModuleFromAAI = execution.getVariable("vfModuleFromAAI")
-                               vfModuleName = vfModuleFromAAI.getElementText("vf-module-name")
+                               org.onap.aai.domain.yang.VfModule vfModuleFromAAI = execution.getVariable("vfModuleFromAAI")
+                               vfModuleName = vfModuleFromAAI.getVfModuleName()
                        }
                }
                String vfModuleModelName = execution.getVariable("vfModuleModelName")
index 456a9cf..47a4d55 100644 (file)
@@ -118,8 +118,12 @@ class DoDeleteVnf extends AbstractServiceTaskProcessor {
                                }
 
                                Optional<GenericVnf> vnf = wrapper.asBean(GenericVnf.class)
-                               if(!vnf.get().getVfModules().getVfModule().isEmpty()){
-                                       execution.setVariable("DoDVNF_vnfInUse", true)
+                               if (vnf.get() != null) {
+                                       if (vnf.get().getVfModules() != null) {
+                                               if((vnf.get().getVfModules().getVfModule() != null) && !vnf.get().getVfModules().getVfModule().isEmpty()){                      
+                                                       execution.setVariable("DoDVNF_vnfInUse", true)
+                                               }
+                                       }                       
                                }
                        }else{
                                execution.setVariable("GENGV_FoundIndicator", false)
index bce1979..33cb6d4 100644 (file)
@@ -458,8 +458,11 @@ public class DoUpdateVfModule extends VfModuleBase {
                        def vnfType = execution.getVariable('DOUPVfMod_vnfType')
                        def vfModuleId = execution.getVariable('DOUPVfMod_vfModuleId')
                        def vfModuleModelName = execution.getVariable('DOUPVfMod_vfModuleModelName')
-                       def VfModule vfModule = (VfModule) execution.getVariable('DOUPVfMod_vfModule')
-                       def vfModuleName = vfModule.getElementText('vf-module-name')
+                       def vfModuleName = ""
+                       if (execution.getVariable('DOUPVfMod_vfModule') != null) {
+                               org.onap.aai.domain.yang.VfModule vfModule = execution.getVariable('DOUPVfMod_vfModule')
+                               vfModuleName = vfModule.getVfModuleName()                       
+                       }                       
                        def tenantId = execution.getVariable('DOUPVfMod_tenantId')
                        def aicCloudRegion = execution.getVariable('DOUPVfMod_aicCloudRegion')
                        boolean usePreload = execution.getVariable("DOUPVfMod_usePreload")
@@ -616,8 +619,11 @@ public class DoUpdateVfModule extends VfModuleBase {
                        def tenantId = execution.getVariable('DOUPVfMod_tenantId')
                        def volumeGroupId = execution.getVariable('DOUPVfMod_volumeGroupId')
                        def volumeGroupStackId = execution.getVariable('DOUPVfMod_volumeGroupStackId')
-                       def VfModule vfModule = (VfModule) execution.getVariable('DOUPVfMod_vfModule')
-                       def heatStackId = vfModule.getElementText('heat-stack-id')
+                       def heatStackId = ""
+                       if (execution.getVariable('DOUPVfMod_vfModule') != null) {
+                               org.onap.aai.domain.yang.VfModule vfModule = execution.getVariable('DOUPVfMod_vfModule')
+                               heatStackId = vfModule.getHeatStackId()
+                       }                       
                        def cloudId = execution.getVariable('DOUPVfMod_aicCloudRegion')
                        def vnfType = execution.getVariable('DOUPVfMod_vnfType')
                        def vnfName = execution.getVariable('DOUPVfMod_vnfName')
@@ -836,8 +842,11 @@ public class DoUpdateVfModule extends VfModuleBase {
                        def vnfType = execution.getVariable('DOUPVfMod_vnfType')
                        def vfModuleId = execution.getVariable('DOUPVfMod_vfModuleId')
                        def vfModuleModelName = execution.getVariable('DOUPVfMod_vfModuleModelName')
-                       def VfModule vfModule = (VfModule) execution.getVariable('DOUPVfMod_vfModule')
-                       def vfModuleName = vfModule.getElementText('vf-module-name')
+                       def vfModuleName = ""
+                       if (execution.getVariable('DOUPVfMod_vfModule') != null) {
+                               org.onap.aai.domain.yang.VfModule vfModule = execution.getVariable('DOUPVfMod_vfModule')
+                               vfModuleName = vfModule.getVfModuleName()
+                       }                       
                        def tenantId = execution.getVariable('DOUPVfMod_tenantId')
                        def aicCloudRegion = execution.getVariable('DOUPVfMod_aicCloudRegion')
 
index 222a548..c8c4d43 100644 (file)
@@ -90,6 +90,23 @@ public class CreateNetworkCollection {
                }
        }
        
+       /**
+        * BPMN access method to connect Instance Group to Cloud Region
+        * @param execution
+        * @throws Exception
+        */
+       public void connectInstanceGroupToCloudRegion(BuildingBlockExecution execution) throws Exception {
+               execution.setVariable("connectInstanceGroupToCloudRegionRollback", false);
+               try{
+                       ServiceInstance serviceInstance =  extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID, execution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID));
+                       Collection networkCollection =  serviceInstance.getCollection();
+                       aaiNetworkResources.connectInstanceGroupToCloudRegion(networkCollection.getInstanceGroup(), execution.getGeneralBuildingBlock().getCloudRegion());
+                       execution.setVariable("connectInstanceGroupToCloudRegionRollback", true);
+               } catch (Exception ex) {
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+               }
+       }
+       
        /**
         * BPMN access method to connect Network Collection
         * @param execution
index dc5ba64..a4c705b 100644 (file)
@@ -33,6 +33,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet;
 import org.onap.so.client.aai.AAIObjectType;
+import org.onap.so.client.aai.entities.AAIEdgeLabel;
 import org.onap.so.client.aai.entities.AAIResultWrapper;
 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
@@ -144,6 +145,13 @@ public class AAINetworkResources {
                injectionHelper.getAaiClient().connect(networkCollectionUri, netwrokCollectionInstanceGroupURI);
        }
        
+       public void connectInstanceGroupToCloudRegion(InstanceGroup instanceGroup, CloudRegion cloudRegion) {
+               AAIResourceUri cloudRegionURI = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, 
+                               cloudRegion.getCloudOwner(), cloudRegion.getLcpCloudRegionId());
+               AAIResourceUri instanceGroupURI = AAIUriFactory.createResourceUri(AAIObjectType.INSTANCE_GROUP, instanceGroup.getId());
+               injectionHelper.getAaiClient().connect(instanceGroupURI, cloudRegionURI, AAIEdgeLabel.USES);
+       }
+       
        public void connectNetworkCollectionToServiceInstance(Collection networkCollection, ServiceInstance networkCollectionServiceInstance) {
                AAIResourceUri networkCollectionUri = AAIUriFactory.createResourceUri(AAIObjectType.COLLECTION, networkCollection.getId());
                AAIResourceUri networkCollectionServiceInstanceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, networkCollectionServiceInstance.getServiceInstanceId());
index cde7797..207447a 100644 (file)
@@ -30,6 +30,7 @@ import org.camunda.bpm.engine.delegate.BpmnError;
 import org.junit.Before;
 import org.junit.Test;
 import org.onap.so.bpmn.BaseTaskTest;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.generalobjects.OrchestrationContext;
@@ -43,11 +44,13 @@ public class CreateNetworkCollectionTest extends BaseTaskTest{
        private L3Network network;
        private ServiceInstance serviceInstance;
        private OrchestrationContext orchestrationContext;
+       private CloudRegion cloudRegion;
        
        @Before
        public void before() {
                serviceInstance = setServiceInstance();
                network = setL3Network();
+               cloudRegion = setCloudRegion();
                
                List<L3Network> l3NetworkList = new ArrayList<L3Network>();
                l3NetworkList.add(network);
@@ -92,4 +95,11 @@ public class CreateNetworkCollectionTest extends BaseTaskTest{
                createNetworkCollection.connectCollectionToServiceInstance(execution);
                verify(aaiNetworkResources, times(1)).connectNetworkCollectionToServiceInstance(serviceInstance.getCollection(), serviceInstance);
        }
+       
+       @Test
+       public void connectInstanceGroupToCloudRegionTest() throws Exception {
+               doNothing().when(aaiNetworkResources).connectInstanceGroupToCloudRegion(serviceInstance.getCollection().getInstanceGroup(), cloudRegion);
+               createNetworkCollection.connectInstanceGroupToCloudRegion(execution);
+               verify(aaiNetworkResources, times(1)).connectInstanceGroupToCloudRegion(serviceInstance.getCollection().getInstanceGroup(), cloudRegion);
+       }
 }
index d86453b..db01399 100644 (file)
@@ -280,7 +280,6 @@ public class AAIObjectMapperTest {
                instanceGroup.setInstanceGroupName("test-instanceGroupName");
                instanceGroup.setResourceVersion("test-resourceVersion");
 
-
                ModelInfoInstanceGroup model = new ModelInfoInstanceGroup();
                model.setFunction("test-function");
                model.setInstanceGroupRole("SUB-INTERFACE");
@@ -288,6 +287,7 @@ public class AAIObjectMapperTest {
                model.setModelInvariantUUID("modelInvariantUUID-000");
                model.setModelUUID("modelUUID-000");
                model.setDescription("test-description");
+               model.setInstanceGroupRole("SUB-INTERFACE");
 
                instanceGroup.setModelInfoInstanceGroup(model);
 
@@ -311,6 +311,7 @@ public class AAIObjectMapperTest {
                assertEquals(aaiInstanceGroup.getModelVersionId(), instanceGroup.getModelInfoInstanceGroup().getModelUUID());
                assertEquals(aaiInstanceGroup.getResourceVersion(), instanceGroup.getResourceVersion());
                assertEquals(aaiInstanceGroup.getInstanceGroupType(), instanceGroup.getModelInfoInstanceGroup().getType());
+               assertEquals(aaiInstanceGroup.getInstanceGroupRole(), instanceGroup.getModelInfoInstanceGroup().getInstanceGroupRole());
        }
 
        @Test
index cf270c2..bd61424 100644 (file)
@@ -58,6 +58,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet;
 import org.onap.so.client.aai.AAIObjectType;
 import org.onap.so.client.aai.AAIResourcesClient;
+import org.onap.so.client.aai.entities.AAIEdgeLabel;
 import org.onap.so.client.aai.entities.AAIResultWrapper;
 import org.onap.so.client.aai.entities.Relationships;
 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
@@ -330,4 +331,13 @@ public class AAINetworkResourcesTest extends TestDataSetup{
 
                verify(MOCK_aaiResourcesClient, times(1)).update(any(AAIResourceUri.class), isA(org.onap.aai.domain.yang.Subnet.class));
        }
+       
+       @Test
+       public void connectInstanceGroupToCloudRegionTest() throws Exception {
+               aaiNetworkResources.connectInstanceGroupToCloudRegion(instanceGroup, cloudRegion);
+               verify(MOCK_aaiResourcesClient, times(1)).connect(
+                               eq(AAIUriFactory.createResourceUri(AAIObjectType.INSTANCE_GROUP, instanceGroup.getId())),
+                               eq(AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, cloudRegion.getCloudOwner(), cloudRegion.getLcpCloudRegionId())),
+                               eq(AAIEdgeLabel.USES));
+       }
 }
index e91dc43..87951d5 100644 (file)
@@ -269,18 +269,18 @@ public class AAIResourcesClient extends AAIClient {
                return e;
        }
        
-       private Relationship buildRelationship(AAIResourceUri uri) {
+       protected Relationship buildRelationship(AAIResourceUri uri) {
                return buildRelationship(uri, Optional.empty());
        }
        
-       private Relationship buildRelationship(AAIResourceUri uri, AAIEdgeLabel label) {
+       protected Relationship buildRelationship(AAIResourceUri uri, AAIEdgeLabel label) {
                return buildRelationship(uri, Optional.of(label));
        }
-       private Relationship buildRelationship(AAIResourceUri uri, Optional<AAIEdgeLabel> label) {
+       protected Relationship buildRelationship(AAIResourceUri uri, Optional<AAIEdgeLabel> label) {
                final Relationship result = new Relationship();
                result.setRelatedLink(uri.build().toString());
                if (label.isPresent()) {
-                       result.setRelationshipLabel(label.toString());
+                       result.setRelationshipLabel(label.get().toString());
                }
                return result;
        }
index 63f8f65..22dc1ca 100644 (file)
@@ -28,15 +28,18 @@ import static com.github.tomakehurst.wiremock.client.WireMock.post;
 import static com.github.tomakehurst.wiremock.client.WireMock.put;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
 import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
+import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
 
-import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.onap.aai.domain.yang.Relationship;
+import org.onap.so.client.aai.entities.AAIEdgeLabel;
 import org.onap.so.client.aai.entities.AAIResultWrapper;
 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
@@ -183,6 +186,21 @@ public class AAIResourcesClientTest {
                AAIResultWrapper result = client.get(path, NotFoundException.class);
        }
        
+       @Test
+       public void buildRelationshipTest() {
+               AAIResourcesClient client = createClient();
+               AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test");
+               Relationship relationship = new Relationship();
+               relationship.setRelatedLink(uri.build().toString());
+               Relationship actual = client.buildRelationship(uri);
+               assertThat("expect equal no label", actual, sameBeanAs(relationship));
+               
+               relationship.setRelationshipLabel(AAIEdgeLabel.USES.toString());
+               actual = client.buildRelationship(uri, AAIEdgeLabel.USES);
+               assertThat("expect equal has label", actual, sameBeanAs(relationship));
+               
+       }
+       
        private AAIResourcesClient createClient() {
                AAIResourcesClient client = spy(new AAIResourcesClient());
                doReturn(new DefaultAAIPropertiesImpl()).when(client).getRestProperties();
index bc4f07b..3230d84 100644 (file)
 package org.onap.so.db.catalog.beans;
 
 public enum SubType {
-       SUB_INTERFACE
+       SUB_INTERFACE("SUB-INTERFACE");
+       
+       private final String value;
+       SubType(String value){
+               this.value = value;
+       }
+       @Override
+       public String toString() {
+               return this.value;
+       }
 }