Merge "Removed deprecated Matcher imports"
authorSteve Smokowski <ss835w@att.com>
Fri, 25 Jan 2019 13:53:23 +0000 (13:53 +0000)
committerGerrit Code Review <gerrit@onap.org>
Fri, 25 Jan 2019 13:53:23 +0000 (13:53 +0000)
42 files changed:
adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/nwrest/CreateNetworkRequest.java
adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/nwrest/UpdateNetworkRequest.java
adapters/mso-adapters-rest-interface/src/test/java/org/onap/so/adapters/nwrest/NetworkRequestTest.java
adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapter.java
adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsync.java
adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImpl.java
adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java
adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/NetworkAdapterRest.java
adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImplTest.java
adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/NetworkAdapterRestTest.java
adapters/mso-openstack-adapters/src/test/resources/CreateNetwork4.json [new file with mode: 0644]
adapters/mso-openstack-adapters/src/test/resources/__files/CreateNetworkResponse4.json [new file with mode: 0644]
asdc-controller/pom.xml
asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
asdc-controller/src/main/java/org/onap/so/asdc/util/ASDCNotificationLogging.java
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/exception/ExceptionBuilder.java
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ActivateVfModuleBB.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.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/ActivateVfModuleBBTest.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ActivateVfModule.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/mapper/NetworkAdapterObjectMapper.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ActivateVfModuleTest.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/network/mapper/NetworkAdapterObjectMapperTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAINetworkResourcesTest.java
common/src/main/java/org/onap/so/client/aai/AAIObjectPlurals.java
common/src/main/java/org/onap/so/client/aai/AAIObjectType.java
common/src/main/java/org/onap/so/client/aai/entities/uri/HttpLookupUri.java
common/src/main/java/org/onap/so/client/graphinventory/entities/uri/SimpleUri.java
common/src/main/java/org/onap/so/client/graphinventory/exceptions/IncorrectNumberOfUriKeys.java [new file with mode: 0644]
common/src/test/java/org/onap/so/client/aai/entities/uri/IncorrectNumberOfUriKeysTest.java [new file with mode: 0644]
mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ContactCamundaException.java [new file with mode: 0644]
mso-api-handlers/mso-api-handler-infra/pom.xml
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ServiceInstances.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/SDCClientHelper.java
mso-api-handlers/mso-api-handler-infra/src/main/resources/application.yaml
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/__files/Camunda/HistoryCheckResponse.json [new file with mode: 0644]
mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/Camunda/HistoryCheckResponseCompleted.json [new file with mode: 0644]
mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/InfraActiveRequests/createInfraActiveRequests.json

index 3e4d18c..153ee78 100644 (file)
@@ -54,7 +54,7 @@ public class CreateNetworkRequest extends NetworkRequestCommon {
        private String networkType;
        private String networkTypeVersion;
        private String modelCustomizationUuid;
-       private NetworkTechnology networkTechnology = NetworkTechnology.NEUTRON;
+       private String networkTechnology = "NEUTRON";
        private List<Subnet> subnets;
        private ProviderVlanNetwork providerVlanNetwork;
        private ContrailNetwork contrailNetwork;
@@ -62,7 +62,6 @@ public class CreateNetworkRequest extends NetworkRequestCommon {
        private Boolean backout = true;
        private Map<String,String> networkParams = new HashMap<>();
        private MsoRequest msoRequest = new MsoRequest();
-       @JsonProperty
        private boolean contrailRequest;
 
        public CreateNetworkRequest() {
@@ -125,13 +124,12 @@ public class CreateNetworkRequest extends NetworkRequestCommon {
                this.networkTypeVersion = networkTypeVersion;
        }
 
-       public NetworkTechnology getNetworkTechnology() {
+       public String getNetworkTechnology() {
                return networkTechnology;
        }
 
-       public void setNetworkTechnology(NetworkTechnology networkTechnology) {
+       public void setNetworkTechnology(String networkTechnology) {
                this.networkTechnology = networkTechnology;
-               this.contrailRequest = determineContrail();
        }
 
        public List<Subnet> getSubnets() {
@@ -156,7 +154,6 @@ public class CreateNetworkRequest extends NetworkRequestCommon {
 
        public void setContrailNetwork(ContrailNetwork contrailNetwork) {
                this.contrailNetwork = contrailNetwork;
-               this.contrailRequest = determineContrail();
        }
 
        public Boolean getFailIfExists() {
@@ -195,12 +192,8 @@ public class CreateNetworkRequest extends NetworkRequestCommon {
                return this.contrailRequest;
        }
        
-       @JsonIgnore
-       protected void setContrailRequest(boolean contrailRequest) {
+       public void setContrailRequest(boolean contrailRequest) {
                this.contrailRequest = contrailRequest;
        }
        
-       private boolean determineContrail() {
-               return (networkTechnology == NetworkTechnology.CONTRAIL && (contrailNetwork != null));
-       }
 }
index a797684..5956622 100644 (file)
@@ -52,7 +52,7 @@ public class UpdateNetworkRequest extends NetworkRequestCommon {
        private String networkType;
        private String networkTypeVersion;
        private String modelCustomizationUuid;
-       private NetworkTechnology networkTechnology = NetworkTechnology.NEUTRON;
+       private String networkTechnology = "NEUTRON";
        private List<Subnet> subnets;
        private ProviderVlanNetwork providerVlanNetwork;
        private ContrailNetwork contrailNetwork;
@@ -130,13 +130,12 @@ public class UpdateNetworkRequest extends NetworkRequestCommon {
                this.networkTypeVersion = networkTypeVersion;
        }
 
-       public NetworkTechnology getNetworkTechnology() {
+       public String getNetworkTechnology() {
                return networkTechnology;
        }
 
-       public void setNetworkTechnology(NetworkTechnology networkTechnology) {
+       public void setNetworkTechnology(String networkTechnology) {
                this.networkTechnology = networkTechnology;
-               this.contrailRequest = determineContrail();
        }
 
        public List<Subnet> getSubnets() {
@@ -161,7 +160,6 @@ public class UpdateNetworkRequest extends NetworkRequestCommon {
 
        public void setContrailNetwork(ContrailNetwork contrailNetwork) {
                this.contrailNetwork = contrailNetwork;
-               this.contrailRequest = determineContrail();
        }
 
        public Boolean getBackout() {
@@ -195,8 +193,4 @@ public class UpdateNetworkRequest extends NetworkRequestCommon {
                return contrailRequest;
        }
        
-       private boolean determineContrail() {
-               return (networkTechnology == NetworkTechnology.CONTRAIL && (contrailNetwork != null));
-       }
-       
 }
index 08851c2..5e04fc4 100644 (file)
@@ -38,13 +38,4 @@ public class NetworkRequestTest {
                assertEquals(true, networkResponse.isSynchronous());
        }
        
-       @Test
-       public void isContrailRequest() {
-               CreateNetworkRequest networkResponse = new CreateNetworkRequest();
-               assertEquals(false, networkResponse.isContrailRequest());
-               networkResponse.setNetworkTechnology(NetworkTechnology.CONTRAIL);
-               assertEquals(false, networkResponse.isContrailRequest());
-               networkResponse.setContrailNetwork(new ContrailNetwork());
-               assertEquals(true, networkResponse.isContrailRequest());
-       }
 }
index 27829a6..6e2fcb0 100644 (file)
@@ -55,9 +55,12 @@ public interface MsoNetworkAdapter
                                                        @WebParam(name="networkName") @XmlElement(required=true) String networkName,
                                                        @WebParam(name="physicalNetworkName") String physicalNetworkName,
                                                        @WebParam(name="vlans") List<Integer> vlans,
+                                                       @WebParam(name="shared") String shared,
+                                                       @WebParam(name="external") String external,
                                                        @WebParam(name="failIfExists") Boolean failIfExists,
                                                        @WebParam(name="backout") Boolean backout,
                                                        @WebParam(name="subnets") List<Subnet> subnets,
+                                                       @WebParam(name="networkParams") Map<String, String> networkParams,
                                                        @WebParam(name="request") MsoRequest msoRequest,
                                                        @WebParam(name="networkId", mode=Mode.OUT) Holder<String> networkId,
                                                        @WebParam(name="neutronNetworkId", mode=Mode.OUT) Holder<String> neutronNetworkId,
@@ -77,6 +80,7 @@ public interface MsoNetworkAdapter
                                                        @WebParam(name="failIfExists") Boolean failIfExists,
                                                        @WebParam(name="backout") Boolean backout,
                                                        @WebParam(name="subnets") List<Subnet> subnets,
+                                                       @WebParam(name="networkParams") Map<String, String> networkParams,
                                                        @WebParam(name="policyFqdns") List<String> policyFqdns,
                                                        @WebParam(name="routeTableFqdns") List<String> routeTableFqdns,
                                                        @WebParam(name="request") MsoRequest msoRequest,
@@ -100,7 +104,10 @@ public interface MsoNetworkAdapter
                                                        @WebParam(name="networkName") @XmlElement(required=true) String networkName,
                                                        @WebParam(name="physicalNetworkName") @XmlElement(required=true) String physicalNetworkName,
                                                        @WebParam(name="vlans") @XmlElement(required=true) List<Integer> vlans,
+                                                       @WebParam(name="shared") String shared,
+                                                       @WebParam(name="external") String external,
                                                        @WebParam(name="subnets") List<Subnet> subnets,
+                                                       @WebParam(name="networkParams") Map<String,String> networkParams,
                                                        @WebParam(name="request") MsoRequest msoRequest,
                                                        @WebParam(name="subnetIdMap", mode=Mode.OUT) Holder<Map<String, String>> subnetIdMap,
                                                        @WebParam(name="rollback", mode=Mode.OUT) Holder<NetworkRollback> rollback )
@@ -117,6 +124,7 @@ public interface MsoNetworkAdapter
                                                        @WebParam(name="shared") String shared,
                                                        @WebParam(name="external") String external,
                                                        @WebParam(name="subnets") List<Subnet> subnets,
+                                                       @WebParam(name="networkParams") Map<String,String> networkParams,
                                                        @WebParam(name="policyFqdns") List<String> policyFqdns,
                                                        @WebParam(name="routeTableFqdns") List<String> routeTableFqdns,
                                                        @WebParam(name="request") MsoRequest msoRequest,
index 99f590b..a85da58 100644 (file)
@@ -22,6 +22,7 @@ package org.onap.so.adapters.network;
 
 
 import java.util.List;
+import java.util.Map;
 
 import javax.jws.Oneway;
 import javax.jws.WebMethod;
@@ -56,6 +57,7 @@ public interface MsoNetworkAdapterAsync
                                                        @WebParam(name="failIfExists") Boolean failIfExists,
                                                        @WebParam(name="backout") Boolean backout,
                                                        @WebParam(name="subnets") List<Subnet> subnets,
+                                                       @WebParam(name="networkParams") Map<String, String> networkParams,
                                                        @WebParam(name="messageId") @XmlElement(required=true) String messageId,
                                                        @WebParam(name="request") MsoRequest msoRequest,
                                                        @WebParam(name="notificationUrl") @XmlElement(required=true) String notificationUrl );
@@ -71,6 +73,7 @@ public interface MsoNetworkAdapterAsync
                                                @WebParam(name="physicalNetworkName") @XmlElement(required=true) String physicalNetworkName,
                                                @WebParam(name="vlans") @XmlElement(required=true) List<Integer> vlans,
                                                @WebParam(name="subnets") List<Subnet> subnets,
+                                               @WebParam(name="networkParams") Map<String, String> networkParams,
                                                @WebParam(name="messageId") @XmlElement(required=true) String messageId,
                                                @WebParam(name="request") MsoRequest msoRequest,
                                                @WebParam(name="notificationUrl") @XmlElement(required=true) String notificationUrl );
index 608f39a..8181714 100644 (file)
@@ -122,6 +122,7 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync {
                                 Boolean failIfExists,
                                 Boolean backout,
                                 List <Subnet> subnets,
+                                Map<String,String> networkParams,
                                 String messageId,
                                 MsoRequest msoRequest,
                                 String notificationUrl) {
@@ -145,6 +146,16 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync {
         Holder <String> neutronNetworkId = new Holder <> ();
         Holder <NetworkRollback> networkRollback = new Holder <> ();
         Holder <Map <String, String>> subnetIdMap = new Holder <> ();
+        
+        HashMap<String, String> params = (HashMap<String,String>) networkParams;
+        if (params == null)
+               params = new HashMap<String,String>();
+        String shared = null;
+        String external = null;
+        if (params.containsKey("shared"))
+               shared = params.get("shared");
+        if (params.containsKey("external"))
+               external = params.get("external");
 
         try {
             networkAdapter.createNetwork (cloudSiteId,
@@ -154,9 +165,12 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync {
                                           networkName,
                                           physicalNetworkName,
                                           vlans,
+                                          shared,
+                                          external,
                                           failIfExists,
                                           backout,
                                           subnets,
+                                          params,
                                           msoRequest,
                                           networkId,
                                           neutronNetworkId,
@@ -239,6 +253,7 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync {
                                 String physicalNetworkName,
                                 List <Integer> vlans,
                                 List <Subnet> subnets,
+                                Map <String,String> networkParams,
                                 String messageId,
                                 MsoRequest msoRequest,
                                 String notificationUrl) {
@@ -261,6 +276,16 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync {
         // Synchronous Web Service Outputs
         Holder <NetworkRollback> networkRollback = new Holder <> ();
         Holder <Map <String, String>> subnetIdMap = new Holder <> ();
+        
+        HashMap<String, String> params = (HashMap<String,String>) networkParams;
+        if (params == null)
+               params = new HashMap<String,String>();
+        String shared = null;
+        String external = null;
+        if (params.containsKey("shared"))
+               shared = params.get("shared");
+        if (params.containsKey("external"))
+               external = params.get("external");
 
         try {
             networkAdapter.updateNetwork (cloudSiteId,
@@ -271,7 +296,10 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync {
                                           networkName,
                                           physicalNetworkName,
                                           vlans,
+                                          shared,
+                                          external,
                                           subnets,
+                                          params,
                                           msoRequest,
                                           subnetIdMap,
                                           networkRollback);
index 45285d0..d250561 100644 (file)
@@ -138,9 +138,12 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter {
                                String networkName,
                                String physicalNetworkName,
                                List <Integer> vlans,
+                               String shared,
+                               String external,
                                Boolean failIfExists,
                                Boolean backout,
                                List <Subnet> subnets,
+                               Map<String, String> networkParams,
                                MsoRequest msoRequest,
                                Holder <String> networkId,
                                Holder <String> neutronNetworkId,
@@ -155,8 +158,8 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter {
                        physicalNetworkName,
                        vlans,
                        null,
-                       null,
-                       null,
+                       shared,
+                       external,
                        failIfExists,
                        backout,
                        subnets,
@@ -182,6 +185,7 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter {
                                        Boolean failIfExists,
                                        Boolean backout,
                                        List <Subnet> subnets,
+                                       Map<String, String> networkParams,
                                        List <String> policyFqdns,
                                        List<String> routeTableFqdns,
                                        MsoRequest msoRequest,
@@ -660,7 +664,10 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter {
                                String networkName,
                                String physicalNetworkName,
                                List <Integer> vlans,
+                               String shared,
+                               String external,
                                List <Subnet> subnets,
+                               Map<String,String> networkParams,
                                MsoRequest msoRequest,
                                Holder <Map <String, String>> subnetIdMap,
                                Holder <NetworkRollback> rollback) throws NetworkException {
@@ -673,8 +680,8 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter {
                        physicalNetworkName,
                        vlans,
                        null,
-                       null,
-                       null,
+                       shared,
+                       external,
                        subnets,
                        null,
                        null,
@@ -695,6 +702,7 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter {
                                        String shared,
                                        String external,
                                        List <Subnet> subnets,
+                                       Map<String, String> networkParams,
                                        List <String> policyFqdns,
                                        List<String> routeTableFqdns,
                                        MsoRequest msoRequest,
index effe7a8..8d08b3b 100644 (file)
@@ -168,6 +168,13 @@ public class NetworkAdapterRest {
                                Holder<String> networkFqdn = new Holder<>();
                                Holder<Map<String, String>> subnetIdMap = new Holder<>();
                                Holder<NetworkRollback> rollback = new Holder<>();
+                               
+                               HashMap<String, String> params = (HashMap<String, String>) req.getNetworkParams();
+                               if (params == null) {
+                                       params = new HashMap<String,String>();
+                               }
+                               String shared = null;
+                               String external = null;
 
                                String cloudsite = req.getCloudSiteId();
                                if (cloudsite != null && cloudsite.equals(TESTING_KEYWORD)) {
@@ -186,6 +193,20 @@ public class NetworkAdapterRest {
                                                ctn = new ContrailNetwork();
                                                req.setContrailNetwork(ctn);
                                        }
+                                       if (params.containsKey("shared")) {
+                                               shared = params.get("shared");
+                                       } else {
+                                               if (ctn.getShared() != null) {
+                                                       shared = ctn.getShared();
+                                               }
+                                       }
+                                       if (params.containsKey("external")) {
+                                               external = params.get("external");
+                                       } else {
+                                               if (ctn.getExternal() != null) {
+                                                       external = ctn.getExternal();
+                                               }
+                                       }
                                        adapter.createNetworkContrail(
                                                req.getCloudSiteId(),
                                                req.getTenantId(),
@@ -193,11 +214,12 @@ public class NetworkAdapterRest {
                                                req.getModelCustomizationUuid(),
                                                req.getNetworkName(),
                         req.getContrailNetwork().getRouteTargets(),
-                        req.getContrailNetwork().getShared(),
-                        req.getContrailNetwork().getExternal(),
+                        shared,
+                        external,
                         req.getFailIfExists(),
                         req.getBackout(),
                         req.getSubnets(),
+                        params,
                         req.getContrailNetwork().getPolicyFqdns(),
                         req.getContrailNetwork().getRouteTableFqdns(),
                                req.getMsoRequest(),
@@ -212,6 +234,10 @@ public class NetworkAdapterRest {
                                                pvn = new ProviderVlanNetwork();
                                                req.setProviderVlanNetwork(pvn);
                                        }
+                                       if (params.containsKey("shared"))
+                                               shared = params.get("shared");
+                                       if (params.containsKey("external"))
+                                               external = params.get("external");
                                        adapter.createNetwork(
                                                req.getCloudSiteId(),
                                                req.getTenantId(),
@@ -220,9 +246,12 @@ public class NetworkAdapterRest {
                                                req.getNetworkName(),
                                                req.getProviderVlanNetwork().getPhysicalNetworkName(),
                                                req.getProviderVlanNetwork().getVlans(),
+                                               shared,
+                                               external,
                         req.getFailIfExists(),
                         req.getBackout(),
                         req.getSubnets(),
+                        params,
                         req.getMsoRequest(),
                                        networkId,
                                        neutronNetworkId,
@@ -593,6 +622,12 @@ public class NetworkAdapterRest {
                        try {
                                Holder<Map<String, String>> subnetIdMap = new Holder<>();
                                Holder<NetworkRollback> rollback = new Holder<> ();
+                               HashMap<String, String> params = (HashMap<String, String>) req.getNetworkParams();
+                               if (params == null) {
+                                       params = new HashMap<String,String>();
+                               }
+                               String shared = null;
+                               String external = null;
 
                                if (req.getCloudSiteId().equals(TESTING_KEYWORD)) {
                                        subnetIdMap.value = testMap();
@@ -607,6 +642,20 @@ public class NetworkAdapterRest {
                                                ctn = new ContrailNetwork();
                                                req.setContrailNetwork(ctn);
                                        }
+                                       if (params.containsKey("shared")) {
+                                               shared = params.get("shared");
+                                       } else {
+                                               if (ctn.getShared() != null) {
+                                                       shared = ctn.getShared();
+                                               }
+                                       }
+                                       if (params.containsKey("external")) {
+                                               external = params.get("external");
+                                       } else {
+                                               if (ctn.getExternal() != null) {
+                                                       external = ctn.getExternal();
+                                               }
+                                       }
                                        adapter.updateNetworkContrail(
                                                req.getCloudSiteId(),
                                                req.getTenantId(),
@@ -615,9 +664,10 @@ public class NetworkAdapterRest {
                                                req.getNetworkStackId(),
                                                req.getNetworkName(),
                                                req.getContrailNetwork().getRouteTargets(),
-                           req.getContrailNetwork().getShared(),
-                           req.getContrailNetwork().getExternal(),
+                                               shared,
+                                               external,
                            req.getSubnets(),
+                           params,
                            req.getContrailNetwork().getPolicyFqdns(),
                            req.getContrailNetwork().getRouteTableFqdns(),
                            req.getMsoRequest(),
@@ -629,6 +679,12 @@ public class NetworkAdapterRest {
                                                pvn = new ProviderVlanNetwork();
                                                req.setProviderVlanNetwork(pvn);
                                        }
+                                       if (params.containsKey("shared")) {
+                                               shared = params.get("shared");
+                                       } 
+                                       if (params.containsKey("external")) {
+                                               external = params.get("external");
+                                       } 
                                        adapter.updateNetwork(
                                                req.getCloudSiteId(),
                                                req.getTenantId(),
@@ -638,7 +694,10 @@ public class NetworkAdapterRest {
                                                req.getNetworkName(),
                                                req.getProviderVlanNetwork().getPhysicalNetworkName(),
                                                req.getProviderVlanNetwork().getVlans(),
+                                               shared,
+                                               external,
                                                req.getSubnets(),
+                                               params,
                                                req.getMsoRequest(),
                                                subnetIdMap,
                                                rollback);
index 094d308..f8dcddd 100644 (file)
@@ -25,10 +25,12 @@ import org.junit.Test;
 import org.onap.so.adapters.vnf.BaseRestTestUtils;
 import org.onap.so.entity.MsoRequest;
 import org.onap.so.openstack.beans.NetworkRollback;
+import org.onap.so.openstack.beans.Subnet;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.HashMap;
 
 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
 import static com.github.tomakehurst.wiremock.client.WireMock.containing;
@@ -184,8 +186,11 @@ public class MsoNetworkAdapterAsyncImplTest extends BaseRestTestUtils {
                                                                "   </soapenv:Body>\n" +
                                                                "</soapenv:Envelope>")
                                                .withStatus(HttpStatus.SC_OK)));
+               HashMap<String,String> networkParams = new HashMap<String,String>();
+               networkParams.put("shared", "true");
+               networkParams.put("external", "false");
                impl.updateNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "dvspg-VCE_VPE-mtjnj40avbc",
-                               "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<>(), "messageId",
+                               "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<Subnet>(), networkParams, "messageId",
                                new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl");
        }
 
@@ -199,14 +204,17 @@ public class MsoNetworkAdapterAsyncImplTest extends BaseRestTestUtils {
                mockOpenStackGetStackCreated_200("OpenstackResponse_Stack_Created.json", "dvspg-VCE_VPE-mtjnj40avbc");
                mockOpenStackGetStackDeleteOrUpdateComplete_200("OpenstackResponse_Stack_UpdateComplete.json");
                mockOpenStackPutPublicUrlStackByNameAndID_NETWORK2_200();
+               HashMap<String,String> networkParams = new HashMap<String,String>();
+               networkParams.put("shared", "true");
+               networkParams.put("external", "false");
                impl.updateNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "dvspg-VCE_VPE-mtjnj40avbc",
-                               "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<>(), "messageId",
+                               "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<>(), networkParams, "messageId",
                                new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); }
 
        @Test
        public void updateNetworkATest_NetworkException() {
                impl.updateNetworkA("cloudSiteId", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "networkId",
-                               "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<>(), "messageId",
+                               "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<>(), new HashMap<String,String>(), "messageId",
                                new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl");
        }
 
@@ -237,8 +245,10 @@ public class MsoNetworkAdapterAsyncImplTest extends BaseRestTestUtils {
                                                .withStatus(HttpStatus.SC_OK)));
                mockOpenStackGetStackCreatedVUSP_200();
                mockOpenStackPostStacks_200();
+               mockOpenStackPostStacks_200();
+               HashMap<String,String> networkParams = new HashMap<String,String>();
                impl.createNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0",
-                               "physicalNetworkName", new ArrayList<>(), false, false, new ArrayList<>(), "messageId",
+                               "physicalNetworkName", new ArrayList<>(), false, false, new ArrayList<>(), networkParams, "messageId",
                                new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl");
        }
 
@@ -251,15 +261,18 @@ public class MsoNetworkAdapterAsyncImplTest extends BaseRestTestUtils {
                                                .withStatus(HttpStatus.SC_OK)));
                mockOpenStackGetStackCreatedVUSP_200();
                mockOpenStackPostStacks_200();
+               HashMap<String,String> networkParams = new HashMap<String,String>();
+               networkParams.put("shared", "true");
+               networkParams.put("external", "false");
                impl.createNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0",
-                               "physicalNetworkName", new ArrayList<>(), false, false, new ArrayList<>(), "messageId",
+                               "physicalNetworkName", new ArrayList<>(), false, false, new ArrayList<>(), networkParams, "messageId",
                                new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl");
        }
 
        @Test
        public void createNetworkATest_NetworkException()  {
                impl.createNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0",
-                               "physicalNetworkName", new ArrayList<>(), false, false, new ArrayList<>(), "messageId",
+                               "physicalNetworkName", new ArrayList<>(), false, false, new ArrayList<>(), new HashMap<String,String>(), "messageId",
                                new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl");
        }
 }
index 6123415..3910d9e 100644 (file)
@@ -88,7 +88,7 @@ public class NetworkAdapterRestTest extends BaseRestTestUtils {
                request.setSkipAAI(true);
                request.setFailIfExists(false);
                MsoRequest msoReq = new MsoRequest();
-               NetworkTechnology networkTechnology = NetworkTechnology.CONTRAIL;
+               String networkTechnology = "CONTRAIL";
 
                msoReq.setRequestId(MSO_REQUEST_ID);
                msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
@@ -296,6 +296,33 @@ public class NetworkAdapterRestTest extends BaseRestTestUtils {
                assertThat(response.getBody(), sameBeanAs(expectedResponse));
        }
        
+       @Test
+       public void testCreateNetworkNC_Shared_JSON() throws JSONException, JsonParseException, JsonMappingException, IOException {
+               
+               mockOpenStackResponseAccess(wireMockPort);
+
+               mockOpenStackPostPublicUrlWithBodyFile_200();
+
+               mockOpenStackGetStackCreatedAppC_200();
+               
+               mockOpenStackGetStackAppC_404();
+               
+               headers.add("Content-Type", MediaType.APPLICATION_JSON);
+               headers.add("Accept", MediaType.APPLICATION_JSON);
+               
+               String request = readJsonFileAsString("src/test/resources/CreateNetwork4.json");
+               HttpEntity<String> entity = new HttpEntity<String>(request, headers);
+
+               ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange(
+                               createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class);
+
+               CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
+                               new File("src/test/resources/__files/CreateNetworkResponse4.json"), CreateNetworkResponse.class);
+               
+               assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
+               assertThat(response.getBody(), sameBeanAs(expectedResponse));
+       }
+       
        @Override
        protected String readJsonFileAsString(String fileLocation) throws JsonParseException, JsonMappingException, IOException{
                return new String(Files.readAllBytes(Paths.get(fileLocation)));
diff --git a/adapters/mso-openstack-adapters/src/test/resources/CreateNetwork4.json b/adapters/mso-openstack-adapters/src/test/resources/CreateNetwork4.json
new file mode 100644 (file)
index 0000000..3a116a6
--- /dev/null
@@ -0,0 +1,46 @@
+{
+       "createNetworkRequest": {
+               "skipAAI": true,
+               "messageId": "c4c44af4-4310-4d8b-a1eb-656fc99fe709",
+               "synchronous": true,
+               "cloudSiteId": "mtn13",
+               "tenantId": "ba38bc24a2ef4fb2ad2810c894f1938f",
+               "networkId": "da886914-efb2-4917-b335-c8381528d90b",
+               "networkName": "APP-C-24595-T-IST-04AShared_untrusted_vDBE_net_3",
+               "networkType": "CONTRAIL30_BASIC",
+               "modelCustomizationUuid": "3bdbb104-ffff-483e-9f8b-c095b3d30844",
+               "networkTechnology": "NEUTRON",
+               "subnets": [{
+                       "subnetName": "APP-C-24595-T-IST-04AShared_untrusted_vDBE_net_3_subnet_1",
+                       "subnetId": "da60501d-9aa8-48d2-99b7-26644fa01093",
+                       "cidr": "20",
+                       "gatewayIp": "",
+                       "ipVersion": "4",
+                       "enableDHCP": false,
+                       "addrFromStart": true,
+                       "hostRoutes": []
+               }],
+               "providerVlanNetwork": {
+                       "physicalNetworkName": "FALSE",
+                       "vlans": []
+               },
+               "contrailNetwork": {
+                       "shared": "false",
+                       "external": "false",
+                       "routeTargets": [],
+                       "policyFqdns": [],
+                       "routeTableFqdns": []
+               },
+               "failIfExists": true,
+               "backout": false,
+               "networkParams": {
+                       "shared": "true",
+                       "external": "false"
+               },
+               "msoRequest": {
+                       "requestId": "5349f419-b3e9-4546-b3a1-094bd568d6b7",
+                       "serviceInstanceId": "cf965caf-a003-4189-abf9-e0ed77056dd6"
+               },
+               "contrailRequest": false
+       }
+}
\ No newline at end of file
diff --git a/adapters/mso-openstack-adapters/src/test/resources/__files/CreateNetworkResponse4.json b/adapters/mso-openstack-adapters/src/test/resources/__files/CreateNetworkResponse4.json
new file mode 100644 (file)
index 0000000..2e5517c
--- /dev/null
@@ -0,0 +1,25 @@
+{
+       "createNetworkResponse": {
+               "networkId": "da886914-efb2-4917-b335-c8381528d90b",
+               "neutronNetworkId": null,
+               "networkStackId": "stackname/stackId",
+               "networkFqdn": null,
+               "networkCreated": true,
+               "subnetMap": {
+
+               },
+               "rollback": {
+                       "networkStackId": "stackname/stackId",
+                       "tenantId": "ba38bc24a2ef4fb2ad2810c894f1938f",
+                       "cloudId": "mtn13",
+                       "networkType": "CONTRAIL30_BASIC",
+                       "modelCustomizationUuid": "3bdbb104-ffff-483e-9f8b-c095b3d30844",
+                       "networkCreated": true,
+                       "msoRequest": {
+                               "requestId": "5349f419-b3e9-4546-b3a1-094bd568d6b7",
+                               "serviceInstanceId": "cf965caf-a003-4189-abf9-e0ed77056dd6"
+                       }
+               },
+               "messageId": "c4c44af4-4310-4d8b-a1eb-656fc99fe709"
+       }
+}
\ No newline at end of file
index 2a20b96..50fbdd4 100644 (file)
                <dependency>
                        <groupId>org.onap.sdc.sdc-tosca</groupId>
                        <artifactId>sdc-tosca</artifactId>
-                       <version>1.4.4</version>
+                       <version>1.4.8</version>
                </dependency> 
                <dependency>
                        <groupId>org.onap.sdc.jtosca</groupId>
                        <artifactId>jtosca</artifactId>
-                       <version>1.4.4</version>
+                       <version>1.4.8</version>
                </dependency> 
                <dependency>
                        <groupId>org.onap.so</groupId>
index 722e159..e455d2d 100644 (file)
@@ -35,8 +35,8 @@ import org.hibernate.exception.LockAcquisitionException;
 import org.onap.sdc.api.notification.IArtifactInfo;
 import org.onap.sdc.api.notification.IResourceInstance;
 import org.onap.sdc.api.notification.IStatusData;
+import org.onap.sdc.tosca.parser.enums.SdcTypes;
 import org.onap.sdc.tosca.parser.impl.SdcPropertyNames;
-import org.onap.sdc.tosca.parser.impl.SdcTypes;
 import org.onap.sdc.toscaparser.api.CapabilityAssignment;
 import org.onap.sdc.toscaparser.api.CapabilityAssignments;
 import org.onap.sdc.toscaparser.api.Group;
index f7c761f..24304ba 100644 (file)
@@ -28,8 +28,8 @@ import org.onap.sdc.api.notification.IArtifactInfo;
 import org.onap.sdc.api.notification.INotificationData;
 import org.onap.sdc.api.notification.IResourceInstance;
 import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
+import org.onap.sdc.tosca.parser.enums.SdcTypes;
 import org.onap.sdc.tosca.parser.impl.SdcPropertyNames;
-import org.onap.sdc.tosca.parser.impl.SdcTypes;
 import org.onap.sdc.toscaparser.api.Group;
 import org.onap.sdc.toscaparser.api.NodeTemplate;
 import org.onap.sdc.toscaparser.api.elements.Metadata;
index 42da725..adffee6 100644 (file)
@@ -61,6 +61,35 @@ public class ExceptionBuilder {
                        msg = msg.concat(exception.getMessage());
                buildAndThrowWorkflowException(execution, errorCode, msg);
        }
+       
+       public void buildAndThrowWorkflowException(DelegateExecution execution, int errorCode, Exception exception) {
+               String msg = "Exception in %s.%s ";
+               try{
+                       msoLogger.error(exception);
+
+                       String errorVariable = "Error%s%s";
+
+                       StackTraceElement[] trace = Thread.currentThread().getStackTrace();
+                       for (StackTraceElement traceElement : trace) {
+                               if (!traceElement.getClassName().equals(this.getClass().getName()) && !traceElement.getClassName().equals(Thread.class.getName())) {
+                                       msg = String.format(msg, traceElement.getClassName(), traceElement.getMethodName());
+                                       String shortClassName = traceElement.getClassName().substring(traceElement.getClassName().lastIndexOf(".") + 1);
+                                       errorVariable = String.format(errorVariable,  shortClassName, traceElement.getMethodName());
+                                       break;
+                               }
+                       }
+
+                       msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, msg, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, msg.toString());
+                       execution.setVariable(errorVariable, exception.getMessage());
+               } catch (Exception ex){
+                       //log trace, allow process to complete gracefully
+                       msoLogger.error(ex);
+               }
+
+               if (exception.getMessage() != null)
+                       msg = msg.concat(exception.getMessage());
+               buildAndThrowWorkflowException(execution, errorCode, msg);
+       }
 
        public void buildAndThrowWorkflowException(BuildingBlockExecution execution, int errorCode, String errorMessage) {
                if (execution instanceof DelegateExecutionImpl) {
@@ -74,6 +103,7 @@ public class ExceptionBuilder {
 
                WorkflowException exception = new WorkflowException(processKey, errorCode, errorMessage);
                execution.setVariable("WorkflowException", exception);
+               execution.setVariable("WorkflowExceptionErrorMessage", errorMessage);
                msoLogger.info("Outgoing WorkflowException is " + exception);
                msoLogger.info("Throwing MSOWorkflowException");
                throw new BpmnError("MSOWorkflowException");
index ef19e6e..3670676 100644 (file)
@@ -1,16 +1,16 @@
 <?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="2.0.3">
   <bpmn:process id="ActivateVfModuleBB" name="ActivateVfModuleBB" isExecutable="true">
     <bpmn:startEvent id="ActivateVfModuleBB_Start">
       <bpmn:outgoing>SequenceFlow_0ieafii</bpmn:outgoing>
     </bpmn:startEvent>
-    <bpmn:sequenceFlow id="SequenceFlow_0ieafii" sourceRef="ActivateVfModuleBB_Start" targetRef="ActivateVfModule" />
+    <bpmn:sequenceFlow id="SequenceFlow_0ieafii" sourceRef="ActivateVfModuleBB_Start" targetRef="SetTimerDuration" />
     <bpmn:endEvent id="ActivateVfModuleBB_End">
       <bpmn:incoming>SequenceFlow_0xsp0pv</bpmn:incoming>
     </bpmn:endEvent>
     <bpmn:serviceTask id="ActivateVfModule" name="&#10;SDNC&#10;Activate&#10;(vf module)&#10;" camunda:expression="${SDNCActivateTasks.activateVfModule(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
-      <bpmn:incoming>SequenceFlow_0ieafii</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1a495wm</bpmn:outgoing>
+      <bpmn:incoming>SequenceFlow_0e44ywc</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1yzril6</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:serviceTask id="UpdateVfModuleActiveStatus" name="&#10;AAI&#10;Update&#10;(vf module)&#10;" camunda:expression="${AAIUpdateTasks.updateOrchestrationStatusActivateVfModule(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
       <bpmn:incoming>SequenceFlow_1j4x1ej</bpmn:incoming>
         <camunda:out source="WorkflowException" target="WorkflowException" />
         <camunda:in source="mso-request-id" target="mso-request-id" />
       </bpmn:extensionElements>
-      <bpmn:incoming>SequenceFlow_1a495wm</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_1yzril6</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1j4x1ej</bpmn:outgoing>
     </bpmn:callActivity>
-    <bpmn:sequenceFlow id="SequenceFlow_1a495wm" sourceRef="ActivateVfModule" targetRef="CallActivity_sdncHandler" />
     <bpmn:sequenceFlow id="SequenceFlow_1j4x1ej" sourceRef="CallActivity_sdncHandler" targetRef="UpdateVfModuleActiveStatus" />
+    <bpmn:serviceTask id="SetTimerDuration" name="Set Timer Duration" camunda:expression="${ActivateVfModule.setTimerDuration(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_0ieafii</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0qc2sao</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:intermediateCatchEvent id="Timer" name="Timer">
+      <bpmn:incoming>SequenceFlow_0qc2sao</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0e44ywc</bpmn:outgoing>
+      <bpmn:timerEventDefinition>
+        <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">${execution.getVariable("vfModuleActivateTimerDuration")}</bpmn:timeDuration>
+      </bpmn:timerEventDefinition>
+    </bpmn:intermediateCatchEvent>
+    <bpmn:sequenceFlow id="SequenceFlow_0qc2sao" sourceRef="SetTimerDuration" targetRef="Timer" />
+    <bpmn:sequenceFlow id="SequenceFlow_0e44ywc" sourceRef="Timer" targetRef="ActivateVfModule" />
+    <bpmn:sequenceFlow id="SequenceFlow_1yzril6" sourceRef="ActivateVfModule" targetRef="CallActivity_sdncHandler" />
   </bpmn:process>
   <bpmn:error id="Error_0q258vt" name="gDelegateError" errorCode="7000" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0ieafii_di" bpmnElement="SequenceFlow_0ieafii">
-        <di:waypoint xsi:type="dc:Point" x="209" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="262" y="120" />
+        <di:waypoint x="209" y="120" />
+        <di:waypoint x="274" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="190.5" y="99" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_1v967li_di" bpmnElement="ActivateVfModuleBB_End">
-        <dc:Bounds x="736" y="102" width="36" height="36" />
+        <dc:Bounds x="956" y="102" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="710" y="142" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_0hawa84_di" bpmnElement="ActivateVfModule">
-        <dc:Bounds x="262" y="80" width="100" height="80" />
+        <dc:Bounds x="490" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_175e9ul_di" bpmnElement="UpdateVfModuleActiveStatus">
-        <dc:Bounds x="600" y="80" width="100" height="80" />
+        <dc:Bounds x="770" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0xsp0pv_di" bpmnElement="SequenceFlow_0xsp0pv">
-        <di:waypoint xsi:type="dc:Point" x="700" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="736" y="120" />
+        <di:waypoint x="870" y="120" />
+        <di:waypoint x="956" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="673" y="99" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_03jkesd_di" bpmnElement="CallActivity_sdncHandler">
-        <dc:Bounds x="420" y="80" width="100" height="80" />
+        <dc:Bounds x="639" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1a495wm_di" bpmnElement="SequenceFlow_1a495wm">
-        <di:waypoint xsi:type="dc:Point" x="362" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="420" y="120" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1j4x1ej_di" bpmnElement="SequenceFlow_1j4x1ej">
+        <di:waypoint x="739" y="120" />
+        <di:waypoint x="770" y="120" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="391" y="99" width="0" height="12" />
+          <dc:Bounds x="560" y="99" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1j4x1ej_di" bpmnElement="SequenceFlow_1j4x1ej">
-        <di:waypoint xsi:type="dc:Point" x="520" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="600" y="120" />
+      <bpmndi:BPMNShape id="ServiceTask_0tg4hn9_di" bpmnElement="SetTimerDuration">
+        <dc:Bounds x="274" y="80" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="IntermediateCatchEvent_17kjdjp_di" bpmnElement="Timer">
+        <dc:Bounds x="417" y="102" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="560" y="99" width="0" height="12" />
+          <dc:Bounds x="421" y="145" width="29" height="14" />
         </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0qc2sao_di" bpmnElement="SequenceFlow_0qc2sao">
+        <di:waypoint x="374" y="120" />
+        <di:waypoint x="417" y="120" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0e44ywc_di" bpmnElement="SequenceFlow_0e44ywc">
+        <di:waypoint x="453" y="120" />
+        <di:waypoint x="490" y="120" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1yzril6_di" bpmnElement="SequenceFlow_1yzril6">
+        <di:waypoint x="590" y="120" />
+        <di:waypoint x="639" y="120" />
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
index 70ae02b..a389e80 100644 (file)
@@ -22,7 +22,6 @@
         <camunda:out source="orchestrationStatusValidationResult" target="orchestrationStatusValidationResult" />
         <camunda:out source="RetryDuration" target="RetryDuration" />
         <camunda:in source="suppressRollback" target="suppressRollback" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
       </bpmn:extensionElements>
       <bpmn:incoming>SequenceFlow_0mew9im</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_07h9d4y</bpmn:outgoing>
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index 1e3f175..f501151 100644 (file)
@@ -50,6 +50,7 @@ import org.onap.so.bpmn.infrastructure.adapter.vnf.tasks.VnfAdapterCreateTasks;
 import org.onap.so.bpmn.infrastructure.adapter.vnf.tasks.VnfAdapterDeleteTasks;
 import org.onap.so.bpmn.infrastructure.adapter.vnf.tasks.VnfAdapterImpl;
 import org.onap.so.bpmn.infrastructure.appc.tasks.AppcRunTasks;
+import org.onap.so.bpmn.infrastructure.flowspecific.tasks.ActivateVfModule;
 import org.onap.so.bpmn.infrastructure.flowspecific.tasks.AssignNetwork;
 import org.onap.so.bpmn.infrastructure.flowspecific.tasks.AssignNetworkBBUtils;
 import org.onap.so.bpmn.infrastructure.flowspecific.tasks.AssignVnf;
@@ -170,6 +171,9 @@ public abstract class BaseBPMNTest {
        @MockBean
        protected AAICommonTasks aaiCommonTasks;
 
+       @MockBean
+       protected ActivateVfModule activateVfModule;
+       
        @MockBean
        protected AssignVnf assignVnf;
 
index 2c27771..1bce605 100644 (file)
@@ -22,22 +22,30 @@ package org.onap.so.bpmn.infrastructure.bpmn.subprocess;
 import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
-
 import java.io.IOException;
-
 import org.camunda.bpm.engine.delegate.BpmnError;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Before;
 import org.junit.Test;
 import org.onap.so.bpmn.BaseBPMNTest;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 
 public class ActivateVfModuleBBTest extends BaseBPMNTest{
+       
+       @Before
+       public void before() {
+               variables.put("vfModuleActivateTimerDuration", "PT2S");
+       }
+
        @Test
        public void sunnyDay() throws InterruptedException, IOException {
                mockSubprocess("SDNCHandler", "My Mock Process Name", "GenericStub");
                ProcessInstance pi = runtimeService.startProcessInstanceByKey("ActivateVfModuleBB", variables);
+               while(runtimeService.createProcessInstanceQuery().processInstanceId(pi.getId()).singleResult() != null) {
+                       Thread.sleep(1000);
+               }
                assertThat(pi).isNotNull();
-               assertThat(pi).isStarted().hasPassedInOrder("ActivateVfModuleBB_Start", "ActivateVfModule", "CallActivity_sdncHandler",
+               assertThat(pi).isStarted().hasPassedInOrder("ActivateVfModuleBB_Start", "SetTimerDuration", "Timer", "ActivateVfModule", "CallActivity_sdncHandler",
                                "UpdateVfModuleActiveStatus", "ActivateVfModuleBB_End");
                assertThat(pi).isEnded();
        }
@@ -47,8 +55,11 @@ public class ActivateVfModuleBBTest extends BaseBPMNTest{
                mockSubprocess("SDNCHandler", "My Mock Process Name", "GenericStub");
                doThrow(BpmnError.class).when(aaiUpdateTasks).updateOrchestrationStatusActivateVfModule(any(BuildingBlockExecution.class));
                ProcessInstance pi = runtimeService.startProcessInstanceByKey("ActivateVfModuleBB", variables);
+               while(runtimeService.createProcessInstanceQuery().processInstanceId(pi.getId()).singleResult() != null) {
+                       Thread.sleep(1000);
+               }
                assertThat(pi).isNotNull().isStarted()
-                               .hasPassedInOrder("ActivateVfModuleBB_Start", "ActivateVfModule", "UpdateVfModuleActiveStatus")
+                               .hasPassedInOrder("ActivateVfModuleBB_Start", "SetTimerDuration", "Timer", "ActivateVfModule", "UpdateVfModuleActiveStatus")
                                .hasNotPassed("ActivateVfModuleBB_End");
        }
 }
index d821223..d919c53 100644 (file)
@@ -68,8 +68,8 @@ public class NetworkAdapterRestV1 {
                                throw new Exception("No Network Request was created. networkAdapterRequest was null.");
                        }
                } catch (Exception ex) {
-                       exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, ex.getStackTrace().toString());
-               }       
+                       exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, ex);
+               }
        }
        
        public void processCallback (DelegateExecution execution) {
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ActivateVfModule.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ActivateVfModule.java
new file mode 100644 (file)
index 0000000..32c852b
--- /dev/null
@@ -0,0 +1,35 @@
+package org.onap.so.bpmn.infrastructure.flowspecific.tasks;
+
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.client.exception.ExceptionBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ActivateVfModule {
+
+    private static final Logger logger = LoggerFactory.getLogger(ActivateVfModule.class);
+       
+       protected static final String VF_MODULE_TIMER_DURATION_PATH = "mso.workflow.vfModuleActivate.timer.duration";
+       protected static final String DEFAULT_TIMER_DURATION = "PT180S";
+       
+       @Autowired
+       private ExceptionBuilder exceptionUtil;
+       
+       @Autowired
+    private Environment environment;
+
+
+       public void setTimerDuration(BuildingBlockExecution execution) {
+               try {
+                       String waitDuration = this.environment.getProperty(VF_MODULE_TIMER_DURATION_PATH, DEFAULT_TIMER_DURATION);
+                       logger.debug("Sleeping before proceeding with SDNC activate. Timer duration: {}", waitDuration);
+                       execution.setVariable("vfModuleActivateTimerDuration", waitDuration);
+               } catch (Exception e) {
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, e);
+               }
+       }
+}
index d18fd00..bff320a 100644 (file)
@@ -303,8 +303,9 @@ public class WorkflowAction {
                                }
                        }
 
-                       // If the user set "Homing_Solution" to "none", disable homing, else if "Homing_Solution" is specified, enable it.
-                       if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
+                       // If the user set "Homing_Solution" to "none", disable homing, else if "Homing_Solution" is specified, enable it.                      
+                       if (sIRequest.getRequestDetails().getRequestParameters() != null && 
+                                       sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
                                List<Map<String, Object>> userParams = sIRequest.getRequestDetails().getRequestParameters().getUserParams();
                                for (Map<String, Object> params : userParams) {
                                        if (params.containsKey(HOMINGSOLUTION)) {
index 794314b..4c84ee4 100644 (file)
@@ -22,6 +22,7 @@ package org.onap.so.client.adapter.network.mapper;
 
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -92,14 +93,19 @@ public class NetworkAdapterObjectMapper {
                        networkTechnology = l3Network.getNetworkTechnology();
                        logger.warn("NetworkTechnology was null in CatalogDB. Using field from AAI: " + networkTechnology);
                }
-               createNetworkRequest.setNetworkTechnology(setNetworkTechnology(networkTechnology));
+               if (networkTechnology != null) {
+                       createNetworkRequest.setNetworkTechnology(networkTechnology.toUpperCase());
+                       if (createNetworkRequest.getNetworkTechnology().contains("CONTRAIL")) {
+                               createNetworkRequest.setContrailRequest(true);
+                       }
+               }
                
                //build and set Contrail Network
                ContrailNetwork contrailNetwork = buildContrailNetwork(l3Network, customer);
                createNetworkRequest.setContrailNetwork(contrailNetwork);
                
-               //set Network Parameters from VID request
-               createNetworkRequest.setNetworkParams(userInput);
+               //set Network Parameters from VID request, add "shared" and "external" to this map
+               createNetworkRequest.setNetworkParams(addSharedAndExternal(userInput, l3Network));
                
                createNetworkRequest = setFlowFlags(createNetworkRequest, orchestrationContext);
 
@@ -112,16 +118,6 @@ public class NetworkAdapterObjectMapper {
                return createNetworkRequest;
        }
 
-       protected NetworkTechnology setNetworkTechnology(String networkTechnology) {
-               if(networkTechnology.equalsIgnoreCase("Contrail")) {
-                       return NetworkTechnology.CONTRAIL;
-               } else if(networkTechnology.equalsIgnoreCase("Neutron")){
-                       return NetworkTechnology.NEUTRON;
-               } else {
-                       return NetworkTechnology.VMWARE;
-               }
-       }
-       
        public DeleteNetworkRequest deleteNetworkRequestMapper(RequestContext requestContext, CloudRegion cloudRegion, ServiceInstance serviceInstance, L3Network l3Network) throws UnsupportedEncodingException {
                DeleteNetworkRequest deleteNetworkRequest = new DeleteNetworkRequest();
                
@@ -182,7 +178,7 @@ public class NetworkAdapterObjectMapper {
                updateNetworkRequest.setSubnets(buildOpenstackSubnetList(l3Network));
                updateNetworkRequest.setProviderVlanNetwork(buildProviderVlanNetwork(l3Network));
                updateNetworkRequest.setContrailNetwork(buildContrailNetwork(l3Network, customer));
-               updateNetworkRequest.setNetworkParams(userInput);
+               updateNetworkRequest.setNetworkParams(addSharedAndExternal(userInput, l3Network));
                updateNetworkRequest.setMsoRequest(createMsoRequest(requestContext, serviceInstance));
                
                setFlowFlags(updateNetworkRequest, orchestrationContext);
@@ -371,4 +367,16 @@ public class NetworkAdapterObjectMapper {
                updateNetworkRequest.setBackout(Boolean.TRUE.equals(orchestrationContext.getIsRollbackEnabled()));
                //NetworkTechnology(NetworkTechnology.NEUTRON); NOOP - default
        }
-}
\ No newline at end of file
+       
+       private Map<String, String> addSharedAndExternal(Map<String, String> userInput, L3Network l3Network) {
+               if (userInput == null)
+                       userInput = new HashMap<String, String>();
+               if (!userInput.containsKey("shared")) {
+                       userInput.put("shared", Optional.ofNullable(l3Network.isIsSharedNetwork()).orElse(false).toString());
+               }
+               if (!userInput.containsKey("external")) {
+                       userInput.put("external", Optional.ofNullable(l3Network.isIsExternalNetwork()).orElse(false).toString());
+               }
+               return userInput;
+       }
+}
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ActivateVfModuleTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ActivateVfModuleTest.java
new file mode 100644 (file)
index 0000000..57e463c
--- /dev/null
@@ -0,0 +1,24 @@
+package org.onap.so.bpmn.infrastructure.flowspecific.tasks;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.onap.so.bpmn.BaseTaskTest;
+
+public class ActivateVfModuleTest extends BaseTaskTest {
+       
+       @InjectMocks
+       private ActivateVfModule activateVfModule = new ActivateVfModule();
+       
+       @Test
+       public void setWaitBeforeDurationTest() throws Exception {
+               when(env.getProperty(ActivateVfModule.VF_MODULE_TIMER_DURATION_PATH, ActivateVfModule.DEFAULT_TIMER_DURATION)).thenReturn("PT300S");
+               activateVfModule.setTimerDuration(execution);
+               verify(env, times(1)).getProperty(ActivateVfModule.VF_MODULE_TIMER_DURATION_PATH, ActivateVfModule.DEFAULT_TIMER_DURATION);
+               assertEquals("PT300S", (String) execution.getVariable("vfModuleActivateTimerDuration"));
+       }
+
+}
index 7da4e87..4bdbd1a 100644 (file)
@@ -30,6 +30,7 @@ import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -98,24 +99,6 @@ public class NetworkAdapterObjectMapperTest extends TestDataSetup{
                customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
        }
        
-       @Test
-       public void testSetNetworkTechnology() {
-               String networkTechnology = "Contrail";
-               NetworkTechnology expectedNetworkTechnology = NetworkTechnology.CONTRAIL;
-               NetworkTechnology actualNetworkTechnology = SPY_networkAdapterObjectMapper.setNetworkTechnology(networkTechnology);
-               assertEquals("NetworkTechnology matches", expectedNetworkTechnology, actualNetworkTechnology);
-               
-               networkTechnology = "Neutron";
-               expectedNetworkTechnology = NetworkTechnology.NEUTRON;
-               actualNetworkTechnology = SPY_networkAdapterObjectMapper.setNetworkTechnology(networkTechnology);
-               assertEquals("NetworkTechnology matches", expectedNetworkTechnology, actualNetworkTechnology);
-               
-               networkTechnology = "Vmware";
-               expectedNetworkTechnology = NetworkTechnology.VMWARE;
-               actualNetworkTechnology = SPY_networkAdapterObjectMapper.setNetworkTechnology(networkTechnology);
-               assertEquals("NetworkTechnology matches", expectedNetworkTechnology, actualNetworkTechnology);
-               
-       }
        @Test
        public void buildCreateNetworkRequestFromBbobjectTest() throws Exception {
 
@@ -129,12 +112,17 @@ public class NetworkAdapterObjectMapperTest extends TestDataSetup{
                expectedCreateNetworkRequest.setNetworkType(l3Network.getNetworkType());
                expectedCreateNetworkRequest.setBackout(false);
                expectedCreateNetworkRequest.setFailIfExists(true);
-               expectedCreateNetworkRequest.setNetworkTechnology(NetworkTechnology.CONTRAIL);
+               expectedCreateNetworkRequest.setNetworkTechnology("CONTRAIL");
                MsoRequest msoRequest = new MsoRequest();
                msoRequest.setRequestId(requestContext.getMsoRequestId());
                msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId());
                expectedCreateNetworkRequest.setMsoRequest(msoRequest);
                expectedCreateNetworkRequest.setSkipAAI(true);
+               HashMap<String, String> networkParams = new HashMap<String, String>();
+               networkParams.put("shared", "true");
+               networkParams.put("external", "false");
+               networkParams.put("testUserInputKey", "testUserInputValue");
+               expectedCreateNetworkRequest.setNetworkParams(networkParams);
                
                expectedCreateNetworkRequest.setNotificationUrl("endpoint/NetworkAResponse/messageId");
                
@@ -148,13 +136,15 @@ public class NetworkAdapterObjectMapperTest extends TestDataSetup{
                subnetList.add(openstackSubnet);
                l3Network.getSubnets().add(openstackSubnet);
                l3Network.setNetworkTechnology("Contrail");
+               l3Network.setIsSharedNetwork(true);
+               l3Network.setIsExternalNetwork(false);
 
                doReturn("endpoint/").when(SPY_networkAdapterObjectMapper).getEndpoint();
                doReturn("messageId").when(SPY_networkAdapterObjectMapper).getRandomUuid();
                
                CreateNetworkRequest createNetworkRequest  = SPY_networkAdapterObjectMapper.createNetworkRequestMapper(requestContext, cloudRegion, orchestrationContext, serviceInstance, l3Network, userInput, cloudRegionPo, customer);
                
-               assertThat(createNetworkRequest, sameBeanAs(expectedCreateNetworkRequest).ignoring("contrailRequest").ignoring("contrailNetwork").ignoring("providerVlanNetwork").ignoring("subnets").ignoring("networkParams").ignoring("messageId"));
+               assertThat(createNetworkRequest, sameBeanAs(expectedCreateNetworkRequest).ignoring("contrailRequest").ignoring("contrailNetwork").ignoring("providerVlanNetwork").ignoring("subnets").ignoring("messageId"));
        }
        
        @Test
@@ -243,6 +233,12 @@ public class NetworkAdapterObjectMapperTest extends TestDataSetup{
                l3Network.getSubnets().add(actualSubnet);
                l3Network.getNetworkPolicies().add(networkPolicy);
                l3Network.getContrailNetworkRouteTableReferences().add(routeTableReference);
+               l3Network.setIsSharedNetwork(false);
+               l3Network.setIsExternalNetwork(false);
+               HashMap<String, String> networkParams = new HashMap<String, String>();
+               networkParams.put("shared", "false");
+               networkParams.put("external", "false");
+               networkParams.put("testUserInputKey", "testUserInputValue");
                                
                UpdateNetworkRequest expectedUpdateNetworkRequest = new UpdateNetworkRequest();
                expectedUpdateNetworkRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
@@ -256,7 +252,7 @@ public class NetworkAdapterObjectMapperTest extends TestDataSetup{
                expectedUpdateNetworkRequest.setSubnets(subnets);
                expectedUpdateNetworkRequest.setProviderVlanNetwork(providerVlanNetwork);
                expectedUpdateNetworkRequest.setContrailNetwork(contrailNetwork);
-               expectedUpdateNetworkRequest.setNetworkParams(userInput);
+               expectedUpdateNetworkRequest.setNetworkParams(networkParams);
                expectedUpdateNetworkRequest.setMsoRequest(msoRequest);
                expectedUpdateNetworkRequest.setSkipAAI(true);
                expectedUpdateNetworkRequest.setBackout(Boolean.TRUE.equals(orchestrationContext.getIsRollbackEnabled()));
index f5ce1d3..82ffdf9 100644 (file)
@@ -159,7 +159,7 @@ public class AAINetworkResourcesTest extends TestDataSetup{
                final String content = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiVpnBinding.json")));
                AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
                Optional<VpnBinding> oVpnBinding = Optional.empty();
-               AAIResourceUri aaiUri = AAIUriFactory.createResourceUri(AAIObjectType.VPN_BINDING, "ModelInvariantUUID", "serviceModelVersionId");
+               AAIResourceUri aaiUri = AAIUriFactory.createResourceUri(AAIObjectType.VPN_BINDING, "ModelInvariantUUID");
                
                doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
                oVpnBinding = aaiNetworkResources.getVpnBinding(aaiUri);
@@ -176,7 +176,7 @@ public class AAINetworkResourcesTest extends TestDataSetup{
                final String content = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiNetworkPolicy.json")));
                AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
                Optional<NetworkPolicy> oNetPolicy = Optional.empty();
-               AAIResourceUri netPolicyUri = AAIUriFactory.createResourceUri(AAIObjectType.NETWORK_POLICY, "ModelInvariantUUID", "serviceModelVersionId");
+               AAIResourceUri netPolicyUri = AAIUriFactory.createResourceUri(AAIObjectType.NETWORK_POLICY, "ModelInvariantUUID");
                
                doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
                oNetPolicy = aaiNetworkResources.getNetworkPolicy(netPolicyUri);
@@ -193,7 +193,7 @@ public class AAINetworkResourcesTest extends TestDataSetup{
                final String content = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiNetworkTableRefs.json")));
                AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
                Optional<RouteTableReference> oRtref = Optional.empty();
-               AAIResourceUri rTRefUri = AAIUriFactory.createResourceUri(AAIObjectType.ROUTE_TABLE_REFERENCE, "ModelInvariantUUID", "serviceModelVersionId");
+               AAIResourceUri rTRefUri = AAIUriFactory.createResourceUri(AAIObjectType.ROUTE_TABLE_REFERENCE, "ModelInvariantUUID");
                
                doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
                oRtref = aaiNetworkResources.getRouteTable(rTRefUri);
index 4f3816a..b3bfcc1 100644 (file)
@@ -30,6 +30,7 @@ public enum AAIObjectPlurals implements GraphInventoryObjectPlurals {
 
        CUSTOMER(AAINamespaceConstants.BUSINESS, "/customers"),
        GENERIC_VNF(AAINamespaceConstants.NETWORK, "/generic-vnfs"),
+       PORT_GROUP(AAIObjectType.VCE.uriTemplate(), "/port-groups"),
        PSERVER(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, "/pservers"),
        P_INTERFACE(AAIObjectType.PSERVER.uriTemplate(), "/p-interfaces"),
        L3_NETWORK(AAINamespaceConstants.NETWORK, "/l3-networks"),
index f003dc0..0237f91 100644 (file)
@@ -45,9 +45,10 @@ import org.onap.aai.domain.yang.OwningEntity;
 import org.onap.aai.domain.yang.PInterface;
 import org.onap.aai.domain.yang.PhysicalLink;
 import org.onap.aai.domain.yang.Platform;
+import org.onap.aai.domain.yang.PortGroup;
 import org.onap.aai.domain.yang.Project;
 import org.onap.aai.domain.yang.Pserver;
-import org.onap.aai.domain.yang.RouteTableReferences;
+import org.onap.aai.domain.yang.RouteTableReference;
 import org.onap.aai.domain.yang.ServiceInstance;
 import org.onap.aai.domain.yang.ServiceSubscription;
 import org.onap.aai.domain.yang.SpPartner;
@@ -80,9 +81,10 @@ public enum AAIObjectType implements GraphInventoryObjectType {
        NETWORK_POLICY(AAINamespaceConstants.NETWORK, NetworkPolicy.class),
        NODES_QUERY("/search", "/nodes-query"),
        CUSTOM_QUERY("/query", ""),
-       ROUTE_TABLE_REFERENCE(AAINamespaceConstants.NETWORK, RouteTableReferences.class),
+       ROUTE_TABLE_REFERENCE(AAINamespaceConstants.NETWORK, RouteTableReference.class),
        DEFAULT_TENANT(AAINamespaceConstants.CLOUD_INFRASTRUCTURE + "/cloud-regions/cloud-region/" + Defaults.CLOUD_OWNER + "/AAIAIC25", "/tenants/tenant/{tenant-id}"),
        VCE(AAINamespaceConstants.NETWORK, Vce.class),
+       PORT_GROUP(AAIObjectType.VCE.uriTemplate(), PortGroup.class),
        VPN_BINDING(AAINamespaceConstants.NETWORK, VpnBinding.class),
        CONFIGURATION(AAINamespaceConstants.NETWORK, Configuration.class),
        PSERVER(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, Pserver.class),
index 884f8c6..324bb8a 100644 (file)
@@ -22,7 +22,6 @@ package org.onap.so.client.aai.entities.uri;
 
 import java.io.IOException;
 import java.net.URI;
-import java.util.Arrays;
 import java.util.Map;
 import java.util.Optional;
 
@@ -38,6 +37,7 @@ import org.onap.so.client.graphinventory.entities.uri.HttpAwareUri;
 import org.onap.so.client.graphinventory.exceptions.GraphInventoryPayloadException;
 import org.onap.so.client.graphinventory.exceptions.GraphInventoryUriComputationException;
 import org.onap.so.client.graphinventory.exceptions.GraphInventoryUriNotFoundException;
+import org.onap.so.client.graphinventory.exceptions.IncorrectNumberOfUriKeys;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -118,6 +118,18 @@ public abstract class HttpLookupUri extends AAISimpleUri implements HttpAwareUri
        @Override
        public abstract HttpLookupUri clone();
        
+       @Override
+       public void validateValuesSize(String template, Object... values) {
+               try {
+                       super.validateValuesSize(template, values);
+               } catch (IncorrectNumberOfUriKeys e) {
+                       if (values.length == 1) {
+                               //Special case where we perform an http look up
+                       } else {
+                               throw e;
+                       }
+               }
+       }
        public AAIResourcesClient getResourcesClient() {
                return new AAIResourcesClient();
        }
index 2876f77..93de913 100644 (file)
@@ -24,11 +24,11 @@ import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 import javax.ws.rs.core.UriBuilder;
 
@@ -39,6 +39,7 @@ import org.onap.so.client.graphinventory.GraphInventoryObjectPlurals;
 import org.onap.so.client.graphinventory.GraphInventoryObjectType;
 import org.onap.so.client.graphinventory.entities.uri.parsers.UriParser;
 import org.onap.so.client.graphinventory.entities.uri.parsers.UriParserSpringImpl;
+import org.onap.so.client.graphinventory.exceptions.IncorrectNumberOfUriKeys;
 import org.springframework.web.util.UriUtils;
 
 public class SimpleUri implements GraphInventoryResourceUri, Serializable {
@@ -56,6 +57,7 @@ public class SimpleUri implements GraphInventoryResourceUri, Serializable {
                this.pluralType = null;
                this.internalURI = UriBuilder.fromPath(this.getTemplate(type));
                this.values = values;
+               validateValuesSize(this.getTemplate(type), values);
        }
        protected SimpleUri(GraphInventoryObjectType type, URI uri) {
                this.type = type;
@@ -86,12 +88,14 @@ public class SimpleUri implements GraphInventoryResourceUri, Serializable {
                this.pluralType = type;
                this.internalURI = UriBuilder.fromPath(this.getTemplate(type));
                this.values = values;
+               validateValuesSize(this.getTemplate(type), values);
        }
        protected SimpleUri(GraphInventoryResourceUri parentUri, GraphInventoryObjectType childType, Object... childValues) {
                this.type = childType;
                this.pluralType = null;
                this.internalURI = UriBuilder.fromUri(parentUri.build()).path(childType.partialUri());
                this.values = childValues;
+               validateValuesSize(childType.partialUri(), values);
        }
        
        protected void setInternalURI(UriBuilder builder) {
@@ -232,6 +236,14 @@ public class SimpleUri implements GraphInventoryResourceUri, Serializable {
                return this;
        }
        
+       public void validateValuesSize(String template, Object... values) {
+               UriParser parser = new UriParserSpringImpl(template);
+               Set<String> variables = parser.getVariables();
+               if (variables.size() != values.length) {
+                       throw new IncorrectNumberOfUriKeys(String.format("Expected %s variables: %s", variables.size(), variables));
+               }
+       }
+       
        protected String getTemplate(GraphInventoryObjectType type) {
                return type.uriTemplate();
        }
diff --git a/common/src/main/java/org/onap/so/client/graphinventory/exceptions/IncorrectNumberOfUriKeys.java b/common/src/main/java/org/onap/so/client/graphinventory/exceptions/IncorrectNumberOfUriKeys.java
new file mode 100644 (file)
index 0000000..c94e561
--- /dev/null
@@ -0,0 +1,11 @@
+package org.onap.so.client.graphinventory.exceptions;
+
+public class IncorrectNumberOfUriKeys extends RuntimeException {
+
+       private static final long serialVersionUID = 2189285428827817518L;
+       
+       public IncorrectNumberOfUriKeys(String message) {
+               super(message);
+       }
+
+}
diff --git a/common/src/test/java/org/onap/so/client/aai/entities/uri/IncorrectNumberOfUriKeysTest.java b/common/src/test/java/org/onap/so/client/aai/entities/uri/IncorrectNumberOfUriKeysTest.java
new file mode 100644 (file)
index 0000000..729f0e5
--- /dev/null
@@ -0,0 +1,50 @@
+package org.onap.so.client.aai.entities.uri;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onap.so.client.aai.AAIObjectPlurals;
+import org.onap.so.client.aai.AAIObjectType;
+import org.onap.so.client.graphinventory.exceptions.IncorrectNumberOfUriKeys;
+
+public class IncorrectNumberOfUriKeysTest {
+
+       @Rule
+       public ExpectedException thrown = ExpectedException.none();
+       
+       @Test
+       public void verifyIncorrectNumberOfKeysSingle() {
+               
+               thrown.expect(IncorrectNumberOfUriKeys.class);
+               thrown.expectMessage(equalTo("Expected 3 variables: [cloud-owner, cloud-region-id, volume-group-id]"));
+               AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.VOLUME_GROUP, "volume-group-id");
+               
+       }
+       
+       @Test
+       public void verifyIncorrectNumberOfKeysPlural() {
+               
+               thrown.expect(IncorrectNumberOfUriKeys.class);
+               AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.VOLUME_GROUP, "my-cloud-owner");
+               
+       }
+       
+       @Test
+       public void verifyIncorrectNumberOfKeysFromParent() {
+               
+               thrown.expect(IncorrectNumberOfUriKeys.class);
+               AAIResourceUri parentUri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, "my-cloud-owner", "my-cloud-region-id");
+               AAIResourceUri uri = AAIUriFactory.createResourceFromParentURI(parentUri, AAIObjectType.VOLUME_GROUP);
+       }
+       
+       @Test
+       public void verifyIncorrectNumberOfKeysHttpAware() {
+
+               thrown.expect(IncorrectNumberOfUriKeys.class);
+               AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, "customer-id", "subscription-id");
+       }
+}
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ContactCamundaException.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ContactCamundaException.java
new file mode 100644 (file)
index 0000000..e1ec46a
--- /dev/null
@@ -0,0 +1,43 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.apihandlerinfra.exceptions;
+
+public class ContactCamundaException extends ApiException {
+
+    private static final String contactCamundaErrorMessage = "Unable to get process-instance history from Camunda for requestId: %s due to error: %s";
+
+    private ContactCamundaException(Builder builder) {
+        super(builder);
+    }
+
+    public static class Builder extends ApiException.Builder<Builder>{
+
+
+        public Builder(String requestId, String error, int httpResponseCode, String messageID) {
+            super(contactCamundaErrorMessage.format(contactCamundaErrorMessage, requestId, error),httpResponseCode,messageID);
+        }
+
+        public ContactCamundaException build() {
+            return new ContactCamundaException(this);
+        }
+    }
+
+}
index f212081..12b4d34 100644 (file)
@@ -14,6 +14,8 @@
        <name>mso-api-handler-infra</name>
        <description>ONAP SO API Handler Infra</description>
        <properties>
+               <camunda.version>7.9.0</camunda.version>
+               <camunda.bpm.assert.version>1.2</camunda.bpm.assert.version>
                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
                <swagger-version>1.3.0</swagger-version>
                                <type>pom</type>
                                <scope>import</scope>
                        </dependency>
+                       <dependency>
+                               <!-- Import dependency management from camunda -->
+                               <groupId>org.camunda.bpm</groupId>
+                               <artifactId>camunda-bom</artifactId>
+                               <version>${camunda.version}</version>
+                               <scope>import</scope>
+                               <type>pom</type>
+                       </dependency>
                </dependencies>
        </dependencyManagement>
        <dependencies>
+               <dependency>
+             <groupId>org.camunda.bpm</groupId>
+             <artifactId>camunda-engine</artifactId>
+           </dependency>       
                <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-web</artifactId>
index 8c00eb0..66b04b6 100644 (file)
@@ -44,6 +44,7 @@ import org.onap.so.apihandler.common.ResponseHandler;
 import org.onap.so.apihandlerinfra.exceptions.ApiException;
 import org.onap.so.apihandlerinfra.exceptions.BPMNFailureException;
 import org.onap.so.apihandlerinfra.exceptions.ClientConnectionException;
+import org.onap.so.apihandlerinfra.exceptions.ContactCamundaException;
 import org.onap.so.apihandlerinfra.exceptions.DuplicateRequestException;
 import org.onap.so.apihandlerinfra.exceptions.RecipeNotFoundException;
 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
@@ -51,6 +52,7 @@ import org.onap.so.apihandlerinfra.exceptions.ValidateException;
 import org.onap.so.apihandlerinfra.exceptions.VfModuleNotFoundException;
 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
 import org.onap.so.db.catalog.beans.NetworkResource;
+import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
 import org.onap.so.db.catalog.beans.Recipe;
 import org.onap.so.db.catalog.beans.ServiceRecipe;
 import org.onap.so.db.catalog.beans.VfModule;
@@ -82,8 +84,17 @@ import org.onap.so.serviceinstancebeans.Vnfs;
 import org.onap.so.utils.UUIDChecker;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.ParameterizedTypeReference;
 import org.springframework.core.env.Environment;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
+import org.springframework.web.client.HttpStatusCodeException;
+import org.springframework.web.client.RestTemplate;
+import org.camunda.bpm.engine.history.HistoricProcessInstance;
+import org.camunda.bpm.engine.impl.persistence.entity.HistoricProcessInstanceEntity;
 
 import javax.transaction.Transactional;
 import javax.ws.rs.Consumes;
@@ -135,6 +146,9 @@ public class ServiceInstances {
        @Autowired
        private MsoRequest msoRequest;
        
+       @Autowired
+       private RestTemplate restTemplate;
+       
        @POST
     @Path("/{version:[vV][5-7]}/serviceInstances")
        @Consumes(MediaType.APPLICATION_JSON)
@@ -718,11 +732,15 @@ public class ServiceInstances {
                }
                
                InfraActiveRequests dup = null;
-                               
+               boolean inProgress = false;             
 
                dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, instanceName,requestScope, currentActiveReq);
 
-               if (dup != null) {
+               if(dup != null){
+                       inProgress = camundaHistoryCheck(dup, currentActiveReq);
+               }
+               
+               if (dup != null && inProgress) {
             buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, instanceName, requestScope, dup);
                }
                ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
@@ -881,8 +899,13 @@ public class ServiceInstances {
                }
                
                InfraActiveRequests dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, null, requestScope, currentActiveReq);
-
-               if (dup != null) {
+               boolean inProgress = false;
+               
+               if(dup != null){
+                       inProgress = camundaHistoryCheck(dup, currentActiveReq);
+               }
+               
+               if (dup != null && inProgress) {
             buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, null, requestScope, dup);
                }
                
@@ -1149,6 +1172,42 @@ public class ServiceInstances {
                }
                return dup;
        }
+    protected boolean camundaHistoryCheck(InfraActiveRequests duplicateRecord, InfraActiveRequests currentActiveReq) throws RequestDbFailureException, ContactCamundaException{
+       String requestId = duplicateRecord.getRequestId();
+       String path = env.getProperty("mso.camunda.rest.history.uri") + requestId;
+       String targetUrl = env.getProperty("mso.camundaURL") + path;
+       HttpHeaders headers = setHeaders(env.getProperty("mso.camundaAuth")); 
+       HttpEntity<?> requestEntity = new HttpEntity<>(headers);
+       ResponseEntity<List<HistoricProcessInstanceEntity>> response = null;
+       try{
+               response = restTemplate.exchange(targetUrl, HttpMethod.GET, requestEntity, new ParameterizedTypeReference<List<HistoricProcessInstanceEntity>>(){});
+       }catch(HttpStatusCodeException e){
+               ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DUPLICATE_CHECK_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
+            ContactCamundaException contactCamundaException= new ContactCamundaException.Builder(requestId, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
+                    .errorInfo(errorLoggerInfo).build();
+            updateStatus(currentActiveReq, Status.FAILED, contactCamundaException.getMessage());
+            throw contactCamundaException;
+               }
+       if(response.getBody().isEmpty()){
+               updateStatus(duplicateRecord, Status.COMPLETE, "Request Completed");
+       }
+               for(HistoricProcessInstance instance : response.getBody()){
+                       if(instance.getState().equals("ACTIVE")){
+                               return true;
+                       }else{
+                               updateStatus(duplicateRecord, Status.COMPLETE, "Request Completed");
+                       }
+       }       
+               return false;
+       }
+    private HttpHeaders setHeaders(String auth) {
+               HttpHeaders headers = new HttpHeaders();
+               List<org.springframework.http.MediaType> acceptableMediaTypes = new ArrayList<>();
+               acceptableMediaTypes.add(org.springframework.http.MediaType.APPLICATION_JSON);
+               headers.setAccept(acceptableMediaTypes);
+               headers.add(HttpHeaders.AUTHORIZATION, auth);
+               return headers;
+       }
 
        private ServiceInstancesRequest convertJsonToServiceInstanceRequest(String requestJSON, Actions action, long startTime,
                                                                         ServiceInstancesRequest sir, MsoRequest msoRequest, String requestId, String requestUri) throws ApiException {
@@ -1672,7 +1731,9 @@ public class ServiceInstances {
                Recipe recipe = null;
 
                if(modelInfo.getModelCustomizationId()!=null){
-            NetworkResource networkResource = catalogDbClient.getNetworkResourceCustomizationByModelCustomizationUUID(modelInfo.getModelCustomizationId()).getNetworkResource();
+            NetworkResourceCustomization networkResourceCustomization = catalogDbClient.getNetworkResourceCustomizationByModelCustomizationUUID(modelInfo.getModelCustomizationId());
+                       if(networkResourceCustomization != null){
+                               NetworkResource networkResource = networkResourceCustomization.getNetworkResource();
                        if(networkResource!=null){
                                if(modelInfo.getModelVersionId() == null) {
                                        modelInfo.setModelVersionId(networkResource.getModelUUID());
@@ -1681,6 +1742,9 @@ public class ServiceInstances {
                        }else{
                                throw new ValidationException("no catalog entry found");
                        }
+                       }else if(action != Action.deleteInstance){
+                               throw new ValidationException("modelCustomizationId for networkResourceCustomization lookup", true);
+                       }
                }else{
                        //ok for version < 3 and action delete
                        if(modelName != null){
@@ -1733,6 +1797,7 @@ public class ServiceInstances {
                String serviceInstanceId = (instanceIdMap ==null)? null:instanceIdMap.get("serviceInstanceId");
                Boolean aLaCarte = null;
                String apiVersion = version.substring(1);
+               boolean inProgress = false;
                
                long startTime = System.currentTimeMillis ();
                ServiceInstancesRequest sir = null;             
@@ -1750,8 +1815,12 @@ public class ServiceInstances {
                InfraActiveRequests dup = null;
                
                dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, instanceName,requestScope, currentActiveReq);
+               
+               if(dup != null){
+                       inProgress = camundaHistoryCheck(dup, currentActiveReq);
+               }
 
-               if (instanceIdMap != null && dup != null) {
+               if (instanceIdMap != null && dup != null && inProgress) {
             buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, instanceName, requestScope, dup);
                }
                
@@ -1829,7 +1898,7 @@ public class ServiceInstances {
                        return postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri, requestScope);
        }
 
-    public String getRequestId(ContainerRequestContext requestContext) throws ValidateException {
+       public String getRequestId(ContainerRequestContext requestContext) throws ValidateException {
        String requestId = null;
        if (requestContext.getProperty("requestId") != null) {
                requestId = requestContext.getProperty("requestId").toString();
index 4e8e956..5ead7dd 100644 (file)
@@ -21,6 +21,7 @@
 package org.onap.so.apihandlerinfra.tenantisolation.helpers;
 
 import java.net.URL;
+import java.util.UUID;
 
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriBuilder;
@@ -92,6 +93,11 @@ public class SDCClientHelper {
 
                        HttpClient httpClient = httpClientFactory.newJsonClient(url, TargetEntity.SDC);
                        httpClient.addBasicAuthHeader(sdcClientAuth, msoKey);
+                       httpClient.addAdditionalHeader("X-ECOMP-InstanceID", sdcActivateInstanceId);
+                       httpClient.addAdditionalHeader("X-ECOMP-RequestID", UUID.randomUUID().toString());
+                       httpClient.addAdditionalHeader("Content-Type", SDCClientHelper.SDC_CONTENT_TYPE);
+                       httpClient.addAdditionalHeader("Accept", SDCClientHelper.SDC_ACCEPT_TYPE);
+                       httpClient.addAdditionalHeader("USER_ID", sdcActivateUserId);
 
                        Response apiResponse = setHttpPostResponse(httpClient, jsonPayload);
                        int statusCode = apiResponse.getStatus();;
index 5b52d33..a4c0c45 100644 (file)
@@ -23,7 +23,8 @@ mso:
     rest:
       task:
         uri: /sobpmnengine/task
-    
+      history:
+        uri: /sobpmnengine/history/process-instance?variables=mso-request-id_eq_
                 
 spring:
   datasource:
index f84c2be..18bcc82 100644 (file)
@@ -29,6 +29,7 @@ import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
@@ -52,6 +53,8 @@ import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
 import org.onap.logging.ref.slf4j.ONAPLogConstants;
+import org.onap.so.apihandlerinfra.exceptions.ContactCamundaException;
+import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
 import org.onap.so.db.catalog.beans.Service;
 import org.onap.so.db.catalog.beans.ServiceRecipe;
 import org.onap.so.db.request.beans.InfraActiveRequests;
@@ -87,6 +90,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent;
 public class ServiceInstancesTest extends BaseTest{
 
        private final ObjectMapper mapper = new ObjectMapper();
+       private ObjectMapper errorMapper = new ObjectMapper();
        
     @Autowired
     private ServiceInstances servInstances;
@@ -104,6 +108,9 @@ public class ServiceInstancesTest extends BaseTest{
 
        @Before
        public  void beforeClass() {
+               mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+               errorMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+               errorMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
         // set headers
                headers = new HttpHeaders();
         headers.set(ONAPLogConstants.Headers.PARTNER_NAME, "test_name");        
@@ -218,9 +225,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v5/serviceInstances";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         //then         
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
@@ -290,9 +294,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceUriPrev7 + "v5";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstancePrev7.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         //then         
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
@@ -461,9 +462,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/activate";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceActivate.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -508,9 +506,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/deactivate";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDeactivate.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -553,9 +548,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a8868/";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDelete.json"), uri, HttpMethod.DELETE, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -598,9 +590,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/assign";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceAssign.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -644,9 +633,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/unassign";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceUnassign.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -665,9 +651,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v5" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstancePortConfiguration.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));                
@@ -695,9 +678,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations/f7ce78bb-423b-11e7-93f8-0050569a7970";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstance.json"), uri, HttpMethod.DELETE, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));                
@@ -716,9 +696,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations/f7ce78bb-423b-11e7-93f8-0050569a7970/enablePort";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceEnablePort.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
@@ -737,9 +714,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations/f7ce78bb-423b-11e7-93f8-0050569a7970/disablePort";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDisablePort.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
@@ -758,9 +732,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations/f7ce78bb-423b-11e7-93f8-0050569a7970/activate";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceActivatePort.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
@@ -779,9 +750,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations/f7ce78bb-423b-11e7-93f8-0050569a7970/deactivate";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDeactivatePort.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
@@ -800,9 +768,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/addRelationships";
         ResponseEntity<String> response = sendRequest(inputStream("/AddRelationships.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -821,9 +786,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/removeRelationships";
         ResponseEntity<String> response = sendRequest(inputStream("/RemoveRelationships.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -859,9 +821,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/49585b36-2b5a-443a-8b10-c75d34bb5e46/vnfs";
         ResponseEntity<String> response = sendRequest(inputStream("/VnfCreateDefault.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -901,9 +860,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs";
         ResponseEntity<String> response = sendRequest(inputStream("/VnfWithServiceRelatedInstance.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -920,13 +876,9 @@ public class ServiceInstancesTest extends BaseTest{
     public void createVnfInstanceInvalidVnfResource() throws IOException {             
         uri = servInstanceuri + "v7" + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs";
         ResponseEntity<String> response = sendRequest(inputStream("/NoVnfResource.json"), uri, HttpMethod.POST);
-
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-        mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
-
+        
         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
-        RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
         assertEquals("No valid vnfResource is specified", realResponse.getServiceException().getText());
     }
     @Test
@@ -958,9 +910,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/replace";
         ResponseEntity<String> response = sendRequest(inputStream("/ReplaceVnf.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -995,8 +944,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/replace";
         ResponseEntity<String> response = sendRequest(inputStream("/ReplaceVnfRecreate.json"), uri, HttpMethod.POST, headers);
         logger.debug(response.getBody());
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
 
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
@@ -1032,8 +979,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/recreate";
         ResponseEntity<String> response = sendRequest(inputStream("/VnfRecreate.json"), uri, HttpMethod.POST, headers);
         logger.debug(response.getBody());
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
 
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
@@ -1070,9 +1015,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000";
         ResponseEntity<String> response = sendRequest(inputStream("/UpdateVnf.json"), uri, HttpMethod.PUT, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1099,9 +1041,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/applyUpdatedConfig";
         ResponseEntity<String> response = sendRequest(inputStream("/ApplyUpdatedConfig.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1125,17 +1064,13 @@ public class ServiceInstancesTest extends BaseTest{
         expectedResponse.setRequestReferences(requestReferences);
         uri = servInstanceuri + "v5" + "/serviceInstances/e446b97d-9c35-437a-95a2-6b4c542c4507/vnfs/49befbfe-fccb-421d-bb4c-0734a43f5ea0";
         ResponseEntity<String> response = sendRequest(inputStream("/DeleteVnfV5.json"), uri, HttpMethod.DELETE, headers);
-
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
+        
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
     }
     @Test
     public void createVfModuleInstance() throws IOException {
-
         stubFor(get(urlMatching(".*/vfModuleCustomization/cb82ffd8-252a-11e7-93ae-92361f002671"))
                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
                         .withBody(getWiremockResponseForCatalogdb("vfModuleCustomization_Response.json"))
@@ -1169,9 +1104,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/7a88cbeb-0ec8-4765-a271-4f9e90c3da7b/vnfs/cbba721b-4803-4df7-9347-307c9a955426/vfModules";
         ResponseEntity<String> response = sendRequest(inputStream("/VfModuleWithRelatedInstances.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1285,6 +1217,7 @@ public class ServiceInstancesTest extends BaseTest{
         expectedResponse.setRequestReferences(requestReferences);
         uri = servInstanceuri + "v6" + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules/ff305d54-75b4-431b-adb2-eb6b9e5ff000";
         ResponseEntity<String> response = sendRequest(inputStream("/VfModuleNoMatchingModelUUID.json"), uri, HttpMethod.DELETE, headers);
+        
 
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ObjectMapper mapper = new ObjectMapper();
@@ -1318,11 +1251,9 @@ public class ServiceInstancesTest extends BaseTest{
            
            uri = servInstanceuri + "v6" + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules";
         ResponseEntity<String> response = sendRequest(inputStream("/VfModuleInvalid.json"), uri, HttpMethod.POST, headers);
-
+        
         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE,  true);
-        RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
         assertEquals("No valid vfModuleCustomization is specified", realResponse.getServiceException().getText());
     }
     @Test
@@ -1351,9 +1282,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules/ff305d54-75b4-431b-adb2-eb6b9e5ff000/replace";
         ResponseEntity<String> response = sendRequest(inputStream("/ReplaceVfModule.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1395,9 +1323,6 @@ public class ServiceInstancesTest extends BaseTest{
         ResponseEntity<String> response = sendRequest(inputStream("/UpdateVfModule.json"), uri, HttpMethod.PUT, headers);
         logger.debug(response.getBody());
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1447,9 +1372,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/inPlaceSoftwareUpdate";
         ResponseEntity<String> response = sendRequest(inputStream("/InPlaceSoftwareUpdate.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1482,9 +1404,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules/ff305d54-75b4-431b-adb2-eb6b9e5ff000";
         ResponseEntity<String> response = sendRequest(inputStream("/DeleteVfModule.json"), uri, HttpMethod.DELETE, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1510,9 +1429,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/196b4a84-0858-4317-a1f6-497e2e52ae43/vnfs/36e4f902-ec32-451e-8d53-e3edc19e40a4/vfModules/09f3a38d-933f-450a-8784-9e6c4dec3f72";
         ResponseEntity<String> response = sendRequest(inputStream("/DeleteVfModuleNoModelInvariantId.json"), uri, HttpMethod.DELETE, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1543,10 +1459,7 @@ public class ServiceInstancesTest extends BaseTest{
         expectedResponse.setRequestReferences(requestReferences);
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules/ff305d54-75b4-431b-adb2-eb6b9e5ff000/deactivateAndCloudDelete";
         ResponseEntity<String> response = sendRequest(inputStream("/DeactivateAndCloudDeleteVfModule.json"), uri, HttpMethod.POST, headers);
-
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
+        
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1582,9 +1495,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/volumeGroups";
         ResponseEntity<String> response = sendRequest(inputStream("/VolumeGroup.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1621,9 +1531,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/volumeGroups/ff305d54-75b4-431b-adb2-eb6b9e5ff000";
         ResponseEntity<String> response = sendRequest(inputStream("/UpdateVolumeGroup.json"), uri, HttpMethod.PUT, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1662,10 +1569,7 @@ public class ServiceInstancesTest extends BaseTest{
         expectedResponse.setRequestReferences(requestReferences);
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/volumeGroups/ff305d54-75b4-431b-adb2-eb6b9e5ff000";
         ResponseEntity<String> response = sendRequest(inputStream("/DeleteVolumeGroup.json"), uri, HttpMethod.DELETE, headers);
-
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
+        
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1701,9 +1605,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks";
         ResponseEntity<String> response = sendRequest(inputStream("/NetworkCreate.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1738,9 +1639,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb";
         ResponseEntity<String> response = sendRequest(inputStream("/UpdateNetwork.json"), uri, HttpMethod.PUT, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1777,9 +1675,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb";
         ResponseEntity<String> response = sendRequest(inputStream("/NetworkInstance.json"), uri, HttpMethod.DELETE, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1806,9 +1701,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v6" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb";
         ResponseEntity<String> response = sendRequest(inputStream("/NetworkInstanceNoReqParams.json"), uri, HttpMethod.DELETE, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1876,9 +1768,6 @@ public class ServiceInstancesTest extends BaseTest{
         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7","32807a28-1a14-4b88-b7b3-2950918aa76d"));        
         expectedResponse.setRequestReferences(requestReferences);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1916,9 +1805,6 @@ public class ServiceInstancesTest extends BaseTest{
         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7","32807a28-1a14-4b88-b7b3-2950918aa76d"));        
         expectedResponse.setRequestReferences(requestReferences);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -1939,9 +1825,6 @@ public class ServiceInstancesTest extends BaseTest{
         requestReferences.setInstanceId("1882939");
         expectedResponse.setRequestReferences(requestReferences);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
     }
 
@@ -1977,9 +1860,6 @@ public class ServiceInstancesTest extends BaseTest{
         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7","32807a28-1a14-4b88-b7b3-2950918aa76d"));        
         expectedResponse.setRequestReferences(requestReferences);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -2017,9 +1897,6 @@ public class ServiceInstancesTest extends BaseTest{
         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7","32807a28-1a14-4b88-b7b3-2950918aa76d"));
         expectedResponse.setRequestReferences(requestReferences);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -2059,9 +1936,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v5" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7999/activate";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstancePrev8.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -2106,13 +1980,9 @@ public class ServiceInstancesTest extends BaseTest{
         
         uri = servInstanceuri + "v5/serviceInstances";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
-
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-        mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
-
+        
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
-        RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
         assertEquals("Request Failed due to BPEL error with HTTP Status = 202{\"instanceId\": \"1882939\"}", realResponse.getServiceException().getText());
     }
     @Test
@@ -2144,12 +2014,8 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v5/serviceInstances";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-        mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
-
         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
-        RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
         assertEquals("Exception caught mapping Camunda JSON response to object", realResponse.getServiceException().getText());
     }
 
@@ -2180,13 +2046,9 @@ public class ServiceInstancesTest extends BaseTest{
                         .withStatus(HttpStatus.SC_OK)));
         uri = servInstanceuri + "v5/serviceInstances";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
-
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-        mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
-
+    
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
-        RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
         assertTrue(realResponse.getServiceException().getText().contains("<aetgt:ErrorMessage>Exception in create execution list 500"));
     }
 
@@ -2228,9 +2090,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceUriPrev7 + "v5";
         ResponseEntity<String> response = sendRequest(inputStream("/MacroServiceInstance.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         //then         
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
@@ -2311,9 +2170,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v7" + "/serviceInstances/7a88cbeb-0ec8-4765-a271-4f9e90c3da7b/vnfs/cbba721b-4803-4df7-9347-307c9a955426/vfModules/scaleOut";
         ResponseEntity<String> response = sendRequest(inputStream("/ScaleOutRequest.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
@@ -2346,13 +2202,9 @@ public class ServiceInstancesTest extends BaseTest{
           
           uri = servInstanceuri + "v5/serviceInstances";
           ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
-
-          ObjectMapper mapper = new ObjectMapper();
-          mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-          mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
-
+          
           assertEquals(Response.Status.NOT_ACCEPTABLE.getStatusCode(), response.getStatusCode().value());
-          RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
+          RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
           assertEquals("Exception caught mapping Camunda JSON response to object", realResponse.getServiceException().getText());
     }
     @Test
@@ -2363,15 +2215,59 @@ public class ServiceInstancesTest extends BaseTest{
           
         uri = servInstanceuri + "v5/serviceInstances";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
-
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-        mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
+       
+        assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
+        assertEquals("Unable to check for duplicate instance due to error contacting requestDb: org.springframework.web.client.HttpServerErrorException: 500 Server Error", realResponse.getServiceException().getText());
+    }
+    @Test
+    public void createServiceInstanceDuplicateHistoryCheck() throws IOException{
+               stubFor(post(urlMatching(".*/infraActiveRequests/checkInstanceNameDuplicate"))
+                               .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+                                               .withBodyFile("InfraActiveRequests/createInfraActiveRequests.json")
+                                               .withStatus(HttpStatus.SC_ACCEPTED)));
+               stubFor(get(("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
+                .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+                        .withBodyFile("Camunda/HistoryCheckResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
+          
+        uri = servInstanceuri + "v5/serviceInstances";
+        ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
+        
+        assertEquals(Response.Status.CONFLICT.getStatusCode(), response.getStatusCode().value());
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
+        assertEquals("Error: Locked instance - This service (testService9) already has a request being worked with a status of UNLOCKED (RequestId - f0a35706-efc4-4e27-80ea-a995d7a2a40f). The existing request must finish or be cleaned up before proceeding.", realResponse.getServiceException().getText());
+    }
+    @Test
+    public void createServiceInstanceDuplicateHistoryCheckException() throws IOException{
+               stubFor(post(urlMatching(".*/infraActiveRequests/checkInstanceNameDuplicate"))
+                               .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+                                               .withBodyFile("InfraActiveRequests/createInfraActiveRequests.json")
+                                               .withStatus(HttpStatus.SC_ACCEPTED)));
+               stubFor(get(("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
+                .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+                        .withStatus(org.apache.http.HttpStatus.SC_INTERNAL_SERVER_ERROR)));
+          
+        uri = servInstanceuri + "v5/serviceInstances";
+        ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
+  
+        assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
+        assertEquals("Unable to get process-instance history from Camunda for requestId: f0a35706-efc4-4e27-80ea-a995d7a2a40f due to error: org.springframework.web.client.HttpServerErrorException: 500 Server Error", realResponse.getServiceException().getText());
+    }
+    @Test
+    public void createServiceInstanceDuplicate() throws IOException{
+               stubFor(post(urlMatching(".*/infraActiveRequests/checkInstanceNameDuplicate"))
+                               .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+                                               .withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR)));
+          
+        uri = servInstanceuri + "v5/serviceInstances";
+        ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
 
         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
-        RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
         assertEquals("Unable to check for duplicate instance due to error contacting requestDb: org.springframework.web.client.HttpServerErrorException: 500 Server Error", realResponse.getServiceException().getText());
     }
+    
     @Test
     public void createServiceInstanceSaveError() throws IOException{
        ServiceRecipe serviceRecipe = new ServiceRecipe();
@@ -2398,12 +2294,8 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "v5/serviceInstances";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-        mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
-
         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
-        RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
         assertEquals("Unable to save instance to db due to error contacting requestDb: org.springframework.web.client.HttpServerErrorException: 500 Server Error", realResponse.getServiceException().getText());
     }
     @Test
@@ -2417,13 +2309,9 @@ public class ServiceInstancesTest extends BaseTest{
         
         uri = servInstanceuri + "v5" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstancePortConfiguration.json"), uri, HttpMethod.POST, headers);
-
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-        mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
-
         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
-        RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
         assertEquals("Unable to save instance to db due to error contacting requestDb: org.springframework.web.client.HttpServerErrorException: 500 Server Error", realResponse.getServiceException().getText());
     }
     @Test
@@ -2434,13 +2322,9 @@ public class ServiceInstancesTest extends BaseTest{
        
         uri = servInstanceuri + "v5" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations";
         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceParseFail.json"), uri, HttpMethod.POST, headers);
-
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-        mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
-
+  
         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
-        RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
         assertEquals("Unable to save instance to db due to error contacting requestDb: org.springframework.web.client.HttpServerErrorException: 500 Server Error", realResponse.getServiceException().getText());
     }
     @Test
@@ -2474,9 +2358,6 @@ public class ServiceInstancesTest extends BaseTest{
         expectedResponse.setRequestReferences(requestReferences);
         uri = servInstanceuri + "v7/serviceInstances/e05864f0-ab35-47d0-8be4-56fd9619ba3c/vnfs/f501ce76-a9bc-4601-9837-74fd9f4d5eca";
         ResponseEntity<String> response = sendRequest(inputStream("/VnfwithNeteworkInstanceGroup.json"), uri, HttpMethod.PUT, headers);
-
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
         //then         
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
@@ -2506,9 +2387,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "/v7/instanceGroups";
         ResponseEntity<String> response = sendRequest(inputStream("/CreateInstanceGroup.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         //then         
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
@@ -2529,9 +2407,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c";
         ResponseEntity<String> response = sendRequest(null, uri, HttpMethod.DELETE, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         //then         
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
@@ -2541,14 +2416,9 @@ public class ServiceInstancesTest extends BaseTest{
     public void deleteInstanceGroupNoRequestIdHeader() throws IOException{
         uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c";
         ResponseEntity<String> response = sendRequest(null, uri, HttpMethod.DELETE);
-
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-        mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
-
         //then         
         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
-        RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
         assertEquals(realResponse.getServiceException().getText(), "No valid X-ONAP-RequestID header is specified");   
     }
     @Test
@@ -2557,14 +2427,9 @@ public class ServiceInstancesTest extends BaseTest{
        noPartnerHeaders.set(ONAPLogConstants.Headers.REQUEST_ID, "eca3a1b1-43ab-457e-ab1c-367263d148b4");
         uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c";
         ResponseEntity<String> response = sendRequest(null, uri, HttpMethod.DELETE, noPartnerHeaders);
-
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-        mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
-
         //then         
         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
-        RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
         assertEquals(realResponse.getServiceException().getText(), "No valid X-ONAP-PartnerName header is specified"); 
     }
     @Test
@@ -2579,14 +2444,10 @@ public class ServiceInstancesTest extends BaseTest{
         expectedResponse.setRequestReferences(requestReferences);
         uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c";
         ResponseEntity<String> response = sendRequest(null, uri, HttpMethod.DELETE, noRequestorIdHheaders);
-
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-        mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
-
+        
         //then         
         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
-        RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
         assertEquals(realResponse.getServiceException().getText(), "No valid X-RequestorID header is specified");      
     }
     @Test
@@ -2603,9 +2464,6 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c/addMembers";
         ResponseEntity<String> response = sendRequest(inputStream("/AddMembers.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         //then         
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
@@ -2625,14 +2483,54 @@ public class ServiceInstancesTest extends BaseTest{
         uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c/removeMembers";
         ResponseEntity<String> response = sendRequest(inputStream("/RemoveMembers.json"), uri, HttpMethod.POST, headers);
 
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
         //then         
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
     }
+    @Test
+    public void deleteNetworkInstanceNoCustomizationEntry() throws IOException {
+        stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
+                .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+                        .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
+
+        stubFor(get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac"))
+                .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+                        .withStatus(HttpStatus.SC_NOT_FOUND)));
+
+        stubFor(get(urlMatching(".*/networkRecipe/search/findFirstByModelNameAndAction[?]" +
+                "modelName=VNF-API-DEFAULT&action=deleteInstance"))
+                .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+                        .withBody(getWiremockResponseForCatalogdb("networkRecipe_Response.json"))
+                        .withStatus(org.apache.http.HttpStatus.SC_OK)));
+        
+        //expected response
+        ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
+        RequestReferences requestReferences = new RequestReferences();
+        requestReferences.setInstanceId("1882939");
+        requestReferences.setRequestSelfLink(createExpectedSelfLink("v7","32807a28-1a14-4b88-b7b3-2950918aa76d"));        
+        expectedResponse.setRequestReferences(requestReferences);
+        uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb";
+        ResponseEntity<String> response = sendRequest(inputStream("/NetworkInstance.json"), uri, HttpMethod.DELETE, headers);
+
+        assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
+        ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
+        assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));        
+    }
+    @Test
+    public void updateNetworkInstanceNoCustomizationEntry() throws IOException {
+       stubFor(get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac"))
+                .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+                        .withStatus(HttpStatus.SC_NOT_FOUND)));
+       
+        uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb";
+        ResponseEntity<String> response = sendRequest(inputStream("/UpdateNetwork.json"), uri, HttpMethod.PUT, headers);
+        
+        assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
+        RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
+        assertEquals(realResponse.getServiceException().getText(), "No valid modelCustomizationId for networkResourceCustomization lookup is specified");
+    }
+    
     @Test
     public void setServiceTypeTestALaCarte() throws JsonProcessingException{
        String requestScope = ModelType.service.toString();
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/Camunda/HistoryCheckResponse.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/Camunda/HistoryCheckResponse.json
new file mode 100644 (file)
index 0000000..196c71e
--- /dev/null
@@ -0,0 +1,21 @@
+[
+   {
+      "id":"d1a0456e-1458-11e9-8afb-0242ac190006",
+      "businessKey":null,
+      "processDefinitionId":"86cfa113-141a-11e9-8afb-0242ac190006",
+      "processDefinitionKey":"UnassignServiceInstanceATTBB",
+      "processDefinitionName":"UnassignServiceInstanceATTBB",
+      "processDefinitionVersion":1,
+      "startTime":"2019-01-09T21:52:11.813+0000",
+      "endTime":"2019-01-09T21:52:12.353+0000",
+      "durationInMillis":540,
+      "startUserId":null,
+      "startActivityId":"Start_UnassignServiceInstanceBB",
+      "deleteReason":null,
+      "superProcessInstanceId":"d15f6c9e-1458-11e9-8afb-0242ac190006",
+      "superCaseInstanceId":null,
+      "caseInstanceId":null,
+      "tenantId":null,
+      "state":"ACTIVE"
+   }
+]
\ No newline at end of file
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/Camunda/HistoryCheckResponseCompleted.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/Camunda/HistoryCheckResponseCompleted.json
new file mode 100644 (file)
index 0000000..fdf0e9a
--- /dev/null
@@ -0,0 +1,21 @@
+[
+   {
+      "id":"d1a0456e-1458-11e9-8afb-0242ac190006",
+      "businessKey":null,
+      "processDefinitionId":"86cfa113-141a-11e9-8afb-0242ac190006",
+      "processDefinitionKey":"UnassignServiceInstanceATTBB",
+      "processDefinitionName":"UnassignServiceInstanceATTBB",
+      "processDefinitionVersion":1,
+      "startTime":"2019-01-09T21:52:11.813+0000",
+      "endTime":"2019-01-09T21:52:12.353+0000",
+      "durationInMillis":540,
+      "startUserId":null,
+      "startActivityId":"Start_UnassignServiceInstanceBB",
+      "deleteReason":null,
+      "superProcessInstanceId":"d15f6c9e-1458-11e9-8afb-0242ac190006",
+      "superCaseInstanceId":null,
+      "caseInstanceId":null,
+      "tenantId":null,
+      "state":"COMPLETED"
+   }
+]
\ No newline at end of file
index 822d847..6be0156 100644 (file)
@@ -1 +1,50 @@
-{"requestId":"%1$s","clientRequestId":null,"action":"activateInstance","requestStatus":"UNLOCKED","statusMessage":null,"progress":20,"startTime":1506422369000,"endTime":null,"source":"VID","vnfId":null,"vnfName":null,"vnfType":null,"serviceType":null,"aicNodeClli":null,"tenantId":null,"provStatus":null,"vnfParams":null,"vnfOutputs":null,"requestBody":"{\"modelInfo\":{\"modelCustomizationName\":null,\"modelInvariantId\":\"1587cf0e-f12f-478d-8530-5c55ac578c39\",\"modelType\":\"configuration\",\"modelNameVersionId\":null,\"modelName\":null,\"modelVersion\":null,\"modelCustomizationUuid\":null,\"modelVersionId\":\"36a3a8ea-49a6-4ac8-b06c-89a545444455\",\"modelCustomizationId\":\"68dc9a92-214c-11e7-93ae-92361f002671\",\"modelUuid\":null,\"modelInvariantUuid\":null,\"modelInstanceName\":null},\"requestInfo\":{\"billingAccountNumber\":null,\"callbackUrl\":null,\"correlator\":null,\"orderNumber\":null,\"productFamilyId\":null,\"orderVersion\":null,\"source\":\"VID\",\"instanceName\":null,\"suppressRollback\":false,\"requestorId\":\"xxxxxx\"},\"relatedInstanceList\":[{\"relatedInstance\":{\"instanceName\":null,\"instanceId\":\"9e15a443-af65-4f05-9000-47ae495e937d\",\"modelInfo\":{\"modelCustomizationName\":null,\"modelInvariantId\":\"de19ae10-9a25-11e7-abc4-cec278b6b50a\",\"modelType\":\"service\",\"modelNameVersionId\":null,\"modelName\":\"Infra_Configuration_Service\",\"modelVersion\":\"1.0\",\"modelCustomizationUuid\":null,\"modelVersionId\":\"ee938612-9a25-11e7-abc4-cec278b6b50a\",\"modelCustomizationId\":null,\"modelUuid\":null,\"modelInvariantUuid\":null,\"modelInstanceName\":null},\"instanceDirection\":null}}],\"subscriberInfo\":null,\"cloudConfiguration\":{\"aicNodeClli\":null,\"tenantId\":null,\"lcpCloudRegionId\":\"n6\"},\"requestParameters\":{\"subscriptionServiceType\":null,\"userParams\":[],\"aLaCarte\":false,\"autoBuildVfModules\":false,\"cascadeDelete\":false,\"usePreload\":true},\"project\":null,\"owningEntity\":null,\"platform\":null,\"lineOfBusiness\":null}","responseBody":null,"lastModifiedBy":"APIH","modifyTime":1532945172000,"requestType":null,"volumeGroupId":null,"volumeGroupName":null,"vfModuleId":null,"vfModuleName":null,"vfModuleModelName":null,"aaiServiceId":null,"aicCloudRegion":"n6","callBackUrl":null,"correlator":null,"serviceInstanceId":"9e15a443-af65-4f05-9000-47ae495e937d","serviceInstanceName":null,"requestScope":"configuration","requestAction":"activateInstance","networkId":null,"networkName":null,"networkType":null,"requestorId":"xxxxxx","configurationId":"26ef7f15-57bb-48df-8170-e59edc26234c","configurationName":null,"operationalEnvId":null,"operationalEnvName":null,"handler":{},"requestURI":"http://localhost:8087/infraActiveRequests/%1$s"}
+{
+   "requestId":"f0a35706-efc4-4e27-80ea-a995d7a2a40f",
+   "clientRequestId":null,
+   "action":"activateInstance",
+   "requestStatus":"UNLOCKED",
+   "statusMessage":null,
+   "progress":20,
+   "startTime":1506422369000,
+   "endTime":null,
+   "source":"VID",
+   "vnfId":null,
+   "vnfName":null,
+   "vnfType":null,
+   "serviceType":null,
+   "aicNodeClli":null,
+   "tenantId":null,
+   "provStatus":null,
+   "vnfParams":null,
+   "vnfOutputs":null,
+   "requestBody":"{\"modelInfo\":{\"modelCustomizationName\":null,\"modelInvariantId\":\"1587cf0e-f12f-478d-8530-5c55ac578c39\",\"modelType\":\"configuration\",\"modelNameVersionId\":null,\"modelName\":null,\"modelVersion\":null,\"modelCustomizationUuid\":null,\"modelVersionId\":\"36a3a8ea-49a6-4ac8-b06c-89a545444455\",\"modelCustomizationId\":\"68dc9a92-214c-11e7-93ae-92361f002671\",\"modelUuid\":null,\"modelInvariantUuid\":null,\"modelInstanceName\":null},\"requestInfo\":{\"billingAccountNumber\":null,\"callbackUrl\":null,\"correlator\":null,\"orderNumber\":null,\"productFamilyId\":null,\"orderVersion\":null,\"source\":\"VID\",\"instanceName\":null,\"suppressRollback\":false,\"requestorId\":\"xxxxxx\"},\"relatedInstanceList\":[{\"relatedInstance\":{\"instanceName\":null,\"instanceId\":\"9e15a443-af65-4f05-9000-47ae495e937d\",\"modelInfo\":{\"modelCustomizationName\":null,\"modelInvariantId\":\"de19ae10-9a25-11e7-abc4-cec278b6b50a\",\"modelType\":\"service\",\"modelNameVersionId\":null,\"modelName\":\"Infra_Configuration_Service\",\"modelVersion\":\"1.0\",\"modelCustomizationUuid\":null,\"modelVersionId\":\"ee938612-9a25-11e7-abc4-cec278b6b50a\",\"modelCustomizationId\":null,\"modelUuid\":null,\"modelInvariantUuid\":null,\"modelInstanceName\":null},\"instanceDirection\":null}}],\"subscriberInfo\":null,\"cloudConfiguration\":{\"aicNodeClli\":null,\"tenantId\":null,\"lcpCloudRegionId\":\"n6\"},\"requestParameters\":{\"subscriptionServiceType\":null,\"userParams\":[],\"aLaCarte\":false,\"autoBuildVfModules\":false,\"cascadeDelete\":false,\"usePreload\":true},\"project\":null,\"owningEntity\":null,\"platform\":null,\"lineOfBusiness\":null}",
+   "responseBody":null,
+   "lastModifiedBy":"APIH",
+   "modifyTime":1532945172000,
+   "requestType":null,
+   "volumeGroupId":null,
+   "volumeGroupName":null,
+   "vfModuleId":null,
+   "vfModuleName":null,
+   "vfModuleModelName":null,
+   "aaiServiceId":null,
+   "aicCloudRegion":"n6",
+   "callBackUrl":null,
+   "correlator":null,
+   "serviceInstanceId":"9e15a443-af65-4f05-9000-47ae495e937d",
+   "serviceInstanceName":null,
+   "requestScope":"configuration",
+   "requestAction":"activateInstance",
+   "networkId":null,
+   "networkName":null,
+   "networkType":null,
+   "requestorId":"xxxxxx",
+   "configurationId":"26ef7f15-57bb-48df-8170-e59edc26234c",
+   "configurationName":null,
+   "operationalEnvId":null,
+   "operationalEnvName":null,
+   "handler":{
+
+   },
+   "requestURI":"http://localhost:8087/infraActiveRequests/%1$s"
+}
\ No newline at end of file