Passing Instance params for SO Macro request 82/111482/1
authoraleemraja <ar00500721@techmahindra.com>
Thu, 20 Aug 2020 13:36:27 +0000 (19:06 +0530)
committeraleemraja <ar00500721@techmahindra.com>
Thu, 20 Aug 2020 13:36:42 +0000 (19:06 +0530)
- Added Support for Instance params for SO Macro request at Service level and VNF level.
- Added JUnit Test cases for ExecutionTask and ToscaInfoProcessor.
- Updated timeout for StatusResourceTest.

Issue-ID: EXTAPI-369
Change-Id: Ibbbbbd2d7021c16ea6291cc899e310ae26200999
Signed-off-by: aleemraja <ar00500721@techmahindra.com>
14 files changed:
src/main/java/org/onap/nbi/apis/servicecatalog/ServiceSpecificationResource.java
src/main/java/org/onap/nbi/apis/servicecatalog/ToscaInfosProcessor.java
src/main/java/org/onap/nbi/apis/serviceorder/workflow/PostSoProcessor.java
src/test/java/org/onap/nbi/apis/assertions/ServiceOrderExecutionTaskAssertions.java
src/test/java/org/onap/nbi/apis/servicecatalog/ToscaInfosProcessorTest.java
src/test/java/org/onap/nbi/test/ExecutionTaskTest.java
src/test/resources/__files/toscafile/service-DummyService-csar.csar [new file with mode: 0644]
src/test/resources/__files/toscafile/service-VfwCnf1308Service-csar.csar [new file with mode: 0644]
src/test/resources/karatetest/features/04--StatusRessourceTest.feature
src/test/resources/mappings/sdc/sdc_get_3bed38ff-a4fd-4463-9784-caf738d46dbc.json [new file with mode: 0644]
src/test/resources/mappings/sdc/sdc_get_3bed38ff-a4fd-4463-9784-caf738d46dbc_tosca.json [new file with mode: 0644]
src/test/resources/mappings/sdc/sdc_get_edf094cc-281f-4be9-a284-e047ded86066.json [new file with mode: 0644]
src/test/resources/mappings/sdc/sdc_get_edf094cc-281f-4be9-a284-e047ded86066_tosca.json [new file with mode: 0644]
src/test/resources/toscafile/service-VfwCnf1308Service-csar.csar [new file with mode: 0644]

index f9f5e07..128bc6c 100644 (file)
@@ -49,6 +49,7 @@ public class ServiceSpecificationResource extends ResourceManagement {
            ArrayList<Map<String, Object>> resourseSpecificationMap= (ArrayList<Map<String, Object>>) response.get("resourceSpecification");
            for (Map<String, Object> map : resourseSpecificationMap) {
                map.remove("childResourceSpecification");
+               map.remove("serviceInstanceParams");
                map.remove("InstanceSpecification");
            }
            response.put("resourceSpecification", resourseSpecificationMap);
index 586d0b5..67f157e 100644 (file)
@@ -22,6 +22,7 @@ import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 
 import org.onap.nbi.apis.serviceorder.model.consumer.VFModelInfo;
@@ -35,6 +36,7 @@ import org.onap.sdc.tosca.parser.impl.SdcPropertyNames;
 import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory;
 import org.onap.sdc.toscaparser.api.NodeTemplate;
 import org.onap.sdc.toscaparser.api.elements.Metadata;
+import org.onap.sdc.toscaparser.api.functions.GetInput;
 import org.onap.sdc.toscaparser.api.parameters.Input;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -137,11 +139,12 @@ public class ToscaInfosProcessor {
                List<IEntityDetails> vfEntityList = sdcCsarHelper.getEntity(EntityQuery.newBuilder(SdcTypes.VF).build(),
                                TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE).build(), false);
 
+               Map<String, org.onap.sdc.toscaparser.api.Property> groupProperties = null;
                Map<String, String> listOfInstanceParameters = new HashMap<>();
                if (!vfEntityList.isEmpty()) {
 
                        IEntityDetails iEntityDetails = vfEntityList.get(0);
-                       Map<String, org.onap.sdc.toscaparser.api.Property> groupProperties = iEntityDetails.getProperties();
+                       groupProperties = iEntityDetails.getProperties();
 
                        for (String key : groupProperties.keySet()) {
                                org.onap.sdc.toscaparser.api.Property property = groupProperties.get(key);
@@ -254,11 +257,45 @@ public class ToscaInfosProcessor {
                                if (!vfModuleEntityList.isEmpty()) {
                                        resourceSpecification.put("childResourceSpecification", listOfVfModelInfo);
                                }
-                               resourceSpecification.put("InstanceSpecification", listOfInstanceParameters);
-
+                               HashMap<String, Object> serviceInstanceParams = getServiceLevelInstanceParams(inputs);
+                               resourceSpecification.put("serviceInstanceParams", serviceInstanceParams);
+                               HashMap<String, Object> vnfInstanceParams = getUserDefinedVFLevelInstanceParams(groupProperties, listOfInstanceParameters);
+                               resourceSpecification.put("InstanceSpecification", vnfInstanceParams);
                        }
                }
        }
+    
+ // Get List of Service Level InputParams as Key Value
+       private HashMap<String, Object> getServiceLevelInstanceParams(List<Input> listOfServiceLevelInputs) {
+
+               HashMap<String, Object> serviceLevelInstanceParams = new HashMap<>();
+
+               for (Input input : listOfServiceLevelInputs) {
+                       serviceLevelInstanceParams.put(input.getName(), input.getDefault());
+               }
+
+               return serviceLevelInstanceParams;
+       }
+       
+       private HashMap<String, Object> getUserDefinedVFLevelInstanceParams(
+                       Map<String, org.onap.sdc.toscaparser.api.Property> groupProperties, Map listOfVFLevelInputs) {
+
+               HashMap<String, Object> vnfLevelInstanceParams = new HashMap<>();
+               
+               for (Entry<String, org.onap.sdc.toscaparser.api.Property> entry : groupProperties.entrySet()) {
+
+                       org.onap.sdc.toscaparser.api.Property property = entry.getValue();
+                       
+                       if ((property.getValue().getClass() == GetInput.class)) {
+                               GetInput getInput = (GetInput) property.getValue();
+                               listOfVFLevelInputs.put(getInput.getInputName(), getInput.result());
+                               listOfVFLevelInputs.remove(property.getName());
+                       }
+               }
+
+               return (HashMap<String, Object>) listOfVFLevelInputs;           
+       }
+
 
     private static String testNull(Object object) {
         if (object == null) {
index e590afc..17b72e4 100644 (file)
@@ -20,6 +20,8 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
 
 import org.onap.nbi.apis.servicecatalog.ServiceSpecificationService;
 import org.onap.nbi.apis.serviceorder.SoClient;
@@ -248,21 +250,31 @@ public class PostSoProcessor {
 
                Map<String, Object> resourseSpecificationMap = resourseSpecificationArray.get(0);
 
+               Map serviceInstanceParam = (Map) resourseSpecificationMap.get("serviceInstanceParams");
                Map instanceSpecification = (Map) resourseSpecificationMap.get("InstanceSpecification");
                ArrayList<VFModelInfo> childResourceSpecification = (ArrayList<VFModelInfo>) resourseSpecificationMap
                                .get("childResourceSpecification");
+               
+               HashMap<String, Object> instanceParamsFromServiceCharacteristics = retrieveInstanceParamsFromServiceCharacteristics(
+                               orderItem.getService().getServiceCharacteristic());
+               
+               HashMap<String, Object> instanceParams = (HashMap<String, Object>) buildAndDistinguishServiceAndVnfLevelParams(
+                               instanceParamsFromServiceCharacteristics, instanceSpecification, serviceInstanceParam);
 
+               HashMap<String, Object> vnfInstanceParams = (HashMap<String, Object>) instanceParams.get("vnf");
                List<Object> serviceObject = new ArrayList<>();
 
                ArrayList<Object> vnfInstanceParam = new ArrayList<>();
 
                //Differentiating vnf with cnf(Can be discussed and improved)
                if (instanceSpecification.get("public_net_id") != null) {
+                       Map<String, Object> instanceParam = new HashMap<>();
+                       //Merge instanceSpecification with vnfInstanceParams
+                       instanceSpecification.putAll(vnfInstanceParams);
                        vnfInstanceParam.add(instanceSpecification);
                } else {
-                       Map<String, Object> instanceParam = new HashMap<>();
-                       instanceParam.put("k8s-rb-profile-name", k8sRbProfileName);
-                       vnfInstanceParam.add(instanceParam);
+                       vnfInstanceParams.put("k8s-rb-profile-name", k8sRbProfileName);
+                       vnfInstanceParam.add(vnfInstanceParams);
                }
 
                List resSpec = (ArrayList) sdcInfos.get("resourceSpecification");
@@ -349,7 +361,7 @@ public class PostSoProcessor {
                // For now it is empty to comply with so request
 
                List<Map<String, String>> listOfServiceLevelInstanceParams = new ArrayList<>();
-               Map<String, String> serviceInstanceParams= new HashMap<>();
+               Map<String, String> serviceInstanceParams = (HashMap<String, String>) instanceParams.get("service");
                listOfServiceLevelInstanceParams.add(serviceInstanceParams);
                
                Map<String, Object> serviceData = new HashMap<>();
@@ -563,5 +575,89 @@ public class PostSoProcessor {
 
         return userParams;
     }
+    
+    /**
+        * Build a list of InstanceParams for the SO Macro request by browsing a list of
+        * ServiceCharacteristics
+        */
+       private HashMap<String, Object> retrieveInstanceParamsFromServiceCharacteristics(
+                       List<ServiceCharacteristic> characteristics) {
+
+               HashMap<String, Object> instanceParams = new HashMap<>();
+
+               if (!CollectionUtils.isEmpty(characteristics)) {
+                       for (ServiceCharacteristic characteristic : characteristics) {
+                               // Check is the characteristic is of type object, if proceed as before to allow
+                               // for
+                               // backwards compatibility.
+                               if (characteristic.getValueType() != null && !characteristic.getValueType().isEmpty()
+                                               && characteristic.getValueType().equals("object")) {
+                                       ObjectMapper mapper = new ObjectMapper();
+                                       JsonNode jsonNode = null;
+                                       try {
+                                               jsonNode = mapper.readTree(characteristic.getValue().getServiceCharacteristicValue());
+                                       } catch (IOException e) {
+                                               LOGGER.error("Failed to read object json {} , exception is ",
+                                                               characteristic.getValue().getServiceCharacteristicValue(), e.getMessage());
+                                       }
+                                       ObjectNode objectNode = (ObjectNode) jsonNode;
+                                       Iterator<Map.Entry<String, JsonNode>> iter = objectNode.fields();
+                                       while (iter.hasNext()) {
+                                               Map.Entry<String, JsonNode> entry = iter.next();
+                                               if (!entry.getValue().isArray()) {
+                                                       instanceParams.put(entry.getKey(), entry.getValue().asText());
+                                               } else {
+                                                       ArrayNode arrayNode = (ArrayNode) entry.getValue();
+                                                       String arrayNodeValueString = arrayNode.toString();
+                                                       instanceParams.put(entry.getKey(), arrayNodeValueString);
+                                               }
+                                       }
+                               } else {
+                                       instanceParams.put(characteristic.getName(),
+                                                       characteristic.getValue().getServiceCharacteristicValue());
+                               }
+                       }
+               }
+
+               return instanceParams;
+       }
+       
+       /**
+        * Build and distinguish InstanceParams at VNF Level and Service level and overwrite values from ServiceOrder JSON Request.
+        * Can be used as buildAndDistinguishServiceAndVnfLevelParams.get("vnf"); or buildAndDistinguishServiceAndVnfLevelParams.get("cnf");
+        */
+       private Map<String, Object> buildAndDistinguishServiceAndVnfLevelParams(
+                       Map<String, Object> instanceParamsFromServiceCharacteristic, Map<String, Object> existingVNFParams,
+                       Map<String, Object> existingServiceParams) {
+
+               //To be used by passing key as "vnf" or "service" for respective instanceParams
+               Map<String, Object> serviceAndVNFLevelInstanceParams = new HashMap<>();
+
+               Map<String, Object> resultVNFParams = new HashMap<>();
+               Map<String, Object> resultServiceParams = new HashMap<>();
+
+               // First Filter VNF level Params From Service Characteristics and overwrite
+               // values
+               resultVNFParams = instanceParamsFromServiceCharacteristic.entrySet().stream()
+                               .filter(entry -> existingVNFParams.containsKey(entry.getKey()))
+                               .collect(Collectors.toMap(Entry::getKey, Entry::getValue));
+
+               //Add it as VNF level Params
+               serviceAndVNFLevelInstanceParams.put("vnf", resultVNFParams);
+
+               // Filter VNF level Params From Service Level
+               existingServiceParams.entrySet().removeIf(e -> existingVNFParams.containsKey(e.getKey()));
+
+               // Filter Service level Params From Service Characteristics and overwrite values
+               resultServiceParams = instanceParamsFromServiceCharacteristic.entrySet().stream()
+                               .filter(entry -> existingServiceParams.containsKey(entry.getKey()))
+                               .collect(Collectors.toMap(Entry::getKey, Entry::getValue));
+
+               //Add it as Service level params
+               serviceAndVNFLevelInstanceParams.put("service", resultServiceParams);
+
+               return serviceAndVNFLevelInstanceParams;
+
+       }
 
 }
\ No newline at end of file
index 621a938..430cd84 100644 (file)
@@ -161,6 +161,74 @@ public class ServiceOrderExecutionTaskAssertions {
         return serviceOrder;
 
     }
+    
+    public static ServiceOrder createTestServiceOrderForMacroVnf(ActionType actionType) {
+               ServiceOrder serviceOrder = new ServiceOrder();
+               serviceOrder.setExternalId("LudONAP001");
+               serviceOrder.setPriority("1");
+               serviceOrder.setDescription("Ludo first ONAP Order");
+               serviceOrder.setCategory("Consumer");
+               serviceOrder.setRequestedStartDate(new Date());
+               serviceOrder.setRequestedCompletionDate(new Date());
+               serviceOrder.setBaseType("toto");
+               serviceOrder.setCompletionDateTime(new Date());
+               serviceOrder.setExpectedCompletionDate(new Date());
+               serviceOrder.setSchemaLocation("/tutu");
+
+               OrderRelationship orderRelationship = new OrderRelationship();
+               orderRelationship.setId("test");
+               orderRelationship.setHref("test");
+               orderRelationship.setReferredType("test");
+               orderRelationship.setType("type");
+               List<OrderRelationship> relationships = new ArrayList<>();
+               serviceOrder.setOrderRelationship(relationships);
+
+               RelatedParty party = new RelatedParty();
+               party.setId("6490");
+               party.setRole("ONAPcustomer");
+               party.setReferredType("individual");
+               party.setName("Jean Pontus");
+               List<RelatedParty> relatedPartyList = new ArrayList<>();
+               relatedPartyList.add(party);
+               serviceOrder.setRelatedParty(relatedPartyList);
+
+               List<ServiceOrderItem> items = new ArrayList<>();
+
+               ServiceOrderItem itemA = new ServiceOrderItem();
+               itemA.id("A");
+               itemA.action(actionType);
+               Service serviceA = new Service();
+       
+               serviceA.setServiceState("active");
+               ServiceSpecificationRef serviceSpecificationRefA = new ServiceSpecificationRef();
+               serviceSpecificationRefA.setId("3bed38ff-a4fd-4463-9784-caf738d46dbc");
+               serviceA.setServiceSpecification(serviceSpecificationRefA);
+               itemA.setService(serviceA);
+               items.add(itemA);
+
+               ServiceOrderItem itemB = new ServiceOrderItem();
+               itemB.id("B");
+               itemB.action(actionType);
+               Service serviceB = new Service();
+               if (actionType != ActionType.ADD) {
+                       serviceB.setId("e4688e5f-61a0-4f8b-ae02-a2fbde623bcb");
+               }
+               serviceB.setServiceState("active");
+               ServiceSpecificationRef serviceSpecificationRefB = new ServiceSpecificationRef();
+               serviceSpecificationRefB.setId("3bed38ff-a4fd-4463-9784-caf738d46dbc");
+               serviceB.setServiceSpecification(serviceSpecificationRefB);
+               itemB.setService(serviceB);
+               List<OrderItemRelationship> orderItemRelationships = new ArrayList<>();
+               OrderItemRelationship orderItemRelationship = new OrderItemRelationship();
+               orderItemRelationship.setId("A");
+               orderItemRelationship.setType(RelationshipType.RELIESON);
+               orderItemRelationships.add(orderItemRelationship);
+               itemB.setOrderItemRelationship(orderItemRelationships);
+               items.add(itemB);
+               serviceOrder.setOrderItem(items);
+               return serviceOrder;
+       }
+
 
     public static ServiceOrder createTestServiceOrderForMacro(ActionType actionType) {
        ServiceOrder serviceOrder = new ServiceOrder();
@@ -508,6 +576,250 @@ public class ServiceOrderExecutionTaskAssertions {
         return executionTaskA;
     }
     
+    public static ExecutionTask setUpBddForMacroExecutionTaskSucessVnf(ServiceOrderRepository serviceOrderRepository,
+                       ExecutionTaskRepository executionTaskRepository, ActionType actionType) {
+
+               ServiceOrder testServiceOrder = createTestServiceOrderForMacroVnf(actionType);
+
+               for (ServiceOrderItem serviceOrderItem : testServiceOrder.getOrderItem()) {
+                       serviceOrderItem.setState(StateType.ACKNOWLEDGED);
+                       List<ServiceCharacteristic> serviceCharacteristics = new ArrayList();
+                       ServiceCharacteristic serviceCharacteristic1 = new ServiceCharacteristic();
+                       serviceCharacteristic1.setName("serviceProperty1");
+                       Value value1 = new Value();
+                       value1.setServiceCharacteristicValue("1234765");
+                       serviceCharacteristic1.setValue(value1);
+                       serviceCharacteristics.add(serviceCharacteristic1);
+                       ServiceCharacteristic serviceCharacteristic2 = new ServiceCharacteristic();
+                       serviceCharacteristic2.setName("dummy_vsp0_vfLevelProperty2");
+                       Value value2 = new Value();
+                       value2.setServiceCharacteristicValue("654321");
+                       serviceCharacteristic2.setValue(value2);
+                       serviceCharacteristics.add(serviceCharacteristic2);
+                       serviceOrderItem.getService().setServiceCharacteristic(serviceCharacteristics);
+               }
+
+               testServiceOrder.setState(StateType.ACKNOWLEDGED);
+               testServiceOrder.setId("test");
+               serviceOrderRepository.save(testServiceOrder);
+
+               LinkedHashMap<String, Object> sdcResponse = new LinkedHashMap<>();
+               sdcResponse.put("invariantUUID", "b96687b0-5353-4e4d-bbd5-a49796fc3f11");
+               sdcResponse.put("name", "dummy_service");
+               sdcResponse.put("version", "2.0");
+               sdcResponse.put("category", "Network Service");
+               sdcResponse.put("instantiationType", "Macro");
+
+               List<ResourceSpecification> resourceSpecs = new ArrayList<>();
+               ResourceSpecification resourceSpecificationA = new ResourceSpecification();
+               resourceSpecificationA.setId("725860b4-1a98-4da6-9451-6c04a581eb44");
+               resourceSpecificationA.setInstanceName("dummy_vsp");
+               resourceSpecificationA.setName("dummy_vsp");
+               resourceSpecificationA.setType("VF");
+               resourceSpecificationA.setVersion("1.0");
+               resourceSpecificationA.setResourceInvariantUUID("0fa0d33d-b268-42ce-b393-7d3c6fde6ca9");
+               resourceSpecs.add(resourceSpecificationA);
+
+               sdcResponse.put("resourceSpecification", resourceSpecs);
+
+               ServiceOrderInfo serviceOrderInfo = new ServiceOrderInfo();
+               serviceOrderInfo.setServiceOrderId("test");
+               SubscriberInfo subscriberInfo = new SubscriberInfo();
+               subscriberInfo.setGlobalSubscriberId("6490");
+               subscriberInfo.setSubscriberName("edgar");
+               serviceOrderInfo.setSubscriberInfo(subscriberInfo);
+
+               ServiceOrderItemInfo serviceOrderItemInfoA = new ServiceOrderItemInfo();
+               serviceOrderItemInfoA.setId("A");
+               serviceOrderItemInfoA.setCatalogResponse(sdcResponse);
+
+               ServiceOrderItemInfo serviceOrderItemInfoB = new ServiceOrderItemInfo();
+               serviceOrderItemInfoB.setId("B");
+               serviceOrderItemInfoB.setCatalogResponse(sdcResponse);
+               serviceOrderInfo.addServiceOrderItemInfos("A", serviceOrderItemInfoA);
+               serviceOrderInfo.addServiceOrderItemInfos("B", serviceOrderItemInfoB);
+
+               
+
+               String json = JsonEntityConverter.convertServiceOrderInfoToJson(serviceOrderInfo);
+
+               ExecutionTask executionTaskA = new ExecutionTask();
+               executionTaskA.setCreateDate(new Date());
+               executionTaskA.setOrderItemId("A");
+               executionTaskA.setServiceOrderInfoJson(json);
+               executionTaskA = executionTaskRepository.save(executionTaskA);
+               ExecutionTask executionTaskB = new ExecutionTask();
+               executionTaskB.setCreateDate(new Date());
+               executionTaskB.setOrderItemId("B");
+               executionTaskB.setReliedTasks(String.valueOf(executionTaskA.getInternalId()));
+               executionTaskB.setServiceOrderInfoJson(json);
+               executionTaskRepository.save(executionTaskB);
+               return executionTaskA;
+           }
+    
+    public static ServiceOrder createTestServiceOrderForMacroCNF(ActionType actionType) {
+               ServiceOrder serviceOrder = new ServiceOrder();
+               serviceOrder.setExternalId("LudONAP001");
+               serviceOrder.setPriority("1");
+               serviceOrder.setDescription("Ludo first ONAP Order");
+               serviceOrder.setCategory("Consumer");
+               serviceOrder.setRequestedStartDate(new Date());
+               serviceOrder.setRequestedCompletionDate(new Date());
+               serviceOrder.setBaseType("toto");
+               serviceOrder.setCompletionDateTime(new Date());
+               serviceOrder.setExpectedCompletionDate(new Date());
+               serviceOrder.setSchemaLocation("/tutu");
+
+               OrderRelationship orderRelationship = new OrderRelationship();
+               orderRelationship.setId("test");
+               orderRelationship.setHref("test");
+               orderRelationship.setReferredType("test");
+               orderRelationship.setType("type");
+               List<OrderRelationship> relationships = new ArrayList<>();
+               serviceOrder.setOrderRelationship(relationships);
+
+               RelatedParty party = new RelatedParty();
+               party.setId("6490");
+               party.setRole("ONAPcustomer");
+               party.setReferredType("individual");
+               party.setName("Jean Pontus");
+               List<RelatedParty> relatedPartyList = new ArrayList<>();
+               relatedPartyList.add(party);
+               serviceOrder.setRelatedParty(relatedPartyList);
+
+               List<ServiceOrderItem> items = new ArrayList<>();
+
+               ServiceOrderItem itemA = new ServiceOrderItem();
+               itemA.id("A");
+               itemA.action(actionType);
+               Service serviceA = new Service();
+
+               serviceA.setId("edf094cc-281f-4be9-a284-e047ded86066");
+               serviceA.setServicetype("vfwk8s");
+
+               serviceA.setServiceState("active");
+               ServiceSpecificationRef serviceSpecificationRefA = new ServiceSpecificationRef();
+               serviceSpecificationRefA.setId("edf094cc-281f-4be9-a284-e047ded86066");
+               serviceA.setServiceSpecification(serviceSpecificationRefA);
+               itemA.setService(serviceA);
+               items.add(itemA);
+
+               ServiceOrderItem itemB = new ServiceOrderItem();
+               itemB.id("B");
+               itemB.action(actionType);
+               Service serviceB = new Service();
+               //serviceB.setId("edf094cc-281f-4be9-a284-e047ded86066");
+
+               serviceB.setServiceState("active");
+               ServiceSpecificationRef serviceSpecificationRefB = new ServiceSpecificationRef();
+               serviceSpecificationRefB.setId("edf094cc-281f-4be9-a284-e047ded86066");
+               serviceB.setServiceSpecification(serviceSpecificationRefB);
+               itemB.setService(serviceB);
+               List<OrderItemRelationship> orderItemRelationships = new ArrayList<>();
+               OrderItemRelationship orderItemRelationship = new OrderItemRelationship();
+               orderItemRelationship.setId("A");
+               orderItemRelationship.setType(RelationshipType.RELIESON);
+               orderItemRelationships.add(orderItemRelationship);
+               itemB.setOrderItemRelationship(orderItemRelationships);
+               items.add(itemB);
+               serviceOrder.setOrderItem(items);
+               System.out.println(serviceOrder);
+               return serviceOrder;
+    }
+    
+  //setup for CNF MacroFLow
+    public static ExecutionTask setUpBddForMacroExecutionTaskSucessForCNF(ServiceOrderRepository serviceOrderRepository,
+                       ExecutionTaskRepository executionTaskRepository, ActionType actionType) {
+
+               ServiceOrder testServiceOrder = createTestServiceOrderForMacroCNF(actionType);
+
+               for (ServiceOrderItem serviceOrderItem : testServiceOrder.getOrderItem()) {
+                       serviceOrderItem.setState(StateType.ACKNOWLEDGED);
+                       List<ServiceCharacteristic> serviceCharacteristics = new ArrayList();
+                       ServiceCharacteristic serviceCharacteristic1 = new ServiceCharacteristic();
+                       serviceCharacteristic1.setName("vfw_cnf_13080_dummy_vf_2");
+                       Value value1 = new Value();
+                       value1.setServiceCharacteristicValue("ggg");
+                       serviceCharacteristic1.setValue(value1);
+                       serviceCharacteristics.add(serviceCharacteristic1);
+                       ServiceCharacteristic serviceCharacteristic2 = new ServiceCharacteristic();
+                       serviceCharacteristic2.setName("vfw_cnf_13080_dummy_vf_1");
+                       Value value2 = new Value();
+                       value2.setServiceCharacteristicValue("hhhh");
+                       serviceCharacteristic2.setValue(value2);
+                       serviceCharacteristics.add(serviceCharacteristic2);
+                       ServiceCharacteristic serviceCharacteristic3 = new ServiceCharacteristic();
+                       serviceCharacteristic3.setName("dummy_ser_2");
+                       Value value3 = new Value();
+                       value3.setServiceCharacteristicValue("serv2");
+                       serviceCharacteristic3.setValue(value3);
+                       serviceCharacteristics.add(serviceCharacteristic3);
+                       ServiceCharacteristic serviceCharacteristic4 = new ServiceCharacteristic();
+                       serviceCharacteristic4.setName("dummy_ser_1");
+                       Value value4 = new Value();
+                       value4.setServiceCharacteristicValue("serv1");
+                       serviceCharacteristic4.setValue(value4);
+                       serviceCharacteristics.add(serviceCharacteristic4);
+                       
+                       serviceOrderItem.getService().setServiceCharacteristic(serviceCharacteristics);
+               }
+
+               testServiceOrder.setState(StateType.ACKNOWLEDGED);
+               testServiceOrder.setId("test");
+               serviceOrderRepository.save(testServiceOrder);
+
+               LinkedHashMap<String, Object> sdcResponse = new LinkedHashMap<>();
+               sdcResponse.put("invariantUUID", "uuid");
+               sdcResponse.put("name", "vfw_cnf_1308");
+               sdcResponse.put("version", "1.0");
+               sdcResponse.put("category", "Network Service");
+               sdcResponse.put("instantiationType", "Macro");
+
+               List<ResourceSpecification> resourceSpecs = new ArrayList<>();
+               ResourceSpecification resourceSpecificationA = new ResourceSpecification();
+               resourceSpecificationA.setId("679effb6-35e7-425e-9272-4b4e6b2b8382");
+               resourceSpecificationA.setInstanceName("vfw_cnf_1308 0");
+               resourceSpecificationA.setName("vfw_cnf_1308 0");
+               resourceSpecificationA.setType("VF");
+               resourceSpecificationA.setVersion("1.0");
+               resourceSpecificationA.setResourceInvariantUUID("2c9870d3-21cd-4140-afa0-3ba770bef206");
+               resourceSpecs.add(resourceSpecificationA);
+
+               sdcResponse.put("resourceSpecification", resourceSpecs);
+
+               ServiceOrderInfo serviceOrderInfo = new ServiceOrderInfo();
+               serviceOrderInfo.setServiceOrderId("test");
+               SubscriberInfo subscriberInfo = new SubscriberInfo();
+               subscriberInfo.setGlobalSubscriberId("6490");
+               subscriberInfo.setSubscriberName("edgar");
+               serviceOrderInfo.setSubscriberInfo(subscriberInfo);
+
+               ServiceOrderItemInfo serviceOrderItemInfoA = new ServiceOrderItemInfo();
+               serviceOrderItemInfoA.setId("A");
+               serviceOrderItemInfoA.setCatalogResponse(sdcResponse);
+
+               ServiceOrderItemInfo serviceOrderItemInfoB = new ServiceOrderItemInfo();
+               serviceOrderItemInfoB.setId("B");
+               serviceOrderItemInfoB.setCatalogResponse(sdcResponse);
+               serviceOrderInfo.addServiceOrderItemInfos("A", serviceOrderItemInfoA);
+               serviceOrderInfo.addServiceOrderItemInfos("B", serviceOrderItemInfoB);
+
+               String json = JsonEntityConverter.convertServiceOrderInfoToJson(serviceOrderInfo);
+
+               ExecutionTask executionTaskA = new ExecutionTask();
+               executionTaskA.setCreateDate(new Date());
+               executionTaskA.setOrderItemId("A");
+               executionTaskA.setServiceOrderInfoJson(json);
+               executionTaskA = executionTaskRepository.save(executionTaskA);
+               ExecutionTask executionTaskB = new ExecutionTask();
+               executionTaskB.setCreateDate(new Date());
+               executionTaskB.setOrderItemId("B");
+               executionTaskB.setReliedTasks(String.valueOf(executionTaskA.getInternalId()));
+               executionTaskB.setServiceOrderInfoJson(json);
+               executionTaskRepository.save(executionTaskB);
+               return executionTaskA;
+    }
+    
     public static ExecutionTask setUpBddForMacroExecutionTaskSucess(ServiceOrderRepository serviceOrderRepository,
                ExecutionTaskRepository executionTaskRepository, ActionType actionType) {
 
index 026c81f..fe348de 100644 (file)
@@ -379,4 +379,63 @@ public class ToscaInfosProcessorTest {
        assertThat(instanceSpecificationTestData).isEqualTo(instanceSpecification);
 
     }
+    
+    @Test
+       public void testBuildAndSaveResponseWithSdcToscaParserWithServiceAndVFNFLevelParams() {
+
+               ClassLoader classLoader = getClass().getClassLoader();
+
+               // Adding Path to TOSCA File to provide as parameter
+               Path path = new File(classLoader.getResource("toscafile/service-VfwCnf1308Service-csar.csar").getFile())
+                               .toPath().toAbsolutePath();
+
+               // Creating response to provide as parameter
+               LinkedHashMap response = new LinkedHashMap();
+               response.put("version", "1.0");
+               response.put("name", "vfw_cnf_1308");
+               response.put("description", "vfw_cnf_1308");
+               response.put("id", "edf094cc-281f-4be9-a284-e047ded86066");
+
+               // Resources
+               List<LinkedHashMap> resources = new ArrayList<>();
+               LinkedHashMap resource1 = new LinkedHashMap();
+               resource1.put("id", "679effb6-35e7-425e-9272-4b4e6b2b8382");
+               resources.add(resource1);
+
+               // instanceSpecification Test Data
+               Map instanceSpecificationTestData = new LinkedHashMap<>();
+               instanceSpecificationTestData.put("vfw_cnf_13080_dummy_vf_2", "xyz");
+               instanceSpecificationTestData.put("vfw_cnf_13080_dummy_vf_1", "abc");
+
+               // serviceParams Test Data
+               Map serviceParamsTestData = new LinkedHashMap<>();
+               serviceParamsTestData.put("dummy_ser_2", "jklm");
+               serviceParamsTestData.put("skip_post_instantiation_configuration", true);
+               serviceParamsTestData.put("controller_actor", "SO-REF-DATA");
+               serviceParamsTestData.put("dummy_ser_1", "pqrs");
+               serviceParamsTestData.put("cds_model_version", null);
+               serviceParamsTestData.put("cds_model_name", null);
+               serviceParamsTestData.put("vfw_cnf_13080_dummy_vf_2", "xyz");
+               serviceParamsTestData.put("vfw_cnf_13080_dummy_vf_1", "abc");
+
+               // Resources to put in response as resourceSpecification
+               response.put("resourceSpecification", resources);
+
+               try {
+                       toscaInfosProcessor.buildAndSaveResponseWithSdcToscaParser(path, response);
+               } catch (SdcToscaParserException e) {
+                       throw new TechnicalException("unable to build response from tosca csar using sdc-parser : "
+                                       + path.toString() + " " + e.getMessage());
+               }
+
+               // Getting
+               List<LinkedHashMap> resourceSpecifications = (List<LinkedHashMap>) response.get("resourceSpecification");
+
+               Map instanceSpecification = (HashMap) (resourceSpecifications.get(0)).get("InstanceSpecification");
+
+               Map serviceParams = (HashMap) (resourceSpecifications.get(0)).get("serviceInstanceParams");
+               // Test against test data and returned response's data for instanceSpecification and serviceParams
+               assertThat(instanceSpecificationTestData).isEqualTo(instanceSpecification);
+               assertThat(serviceParamsTestData).isEqualTo(serviceParams);
+    }
 }
index 2b28eff..2632872 100644 (file)
@@ -331,40 +331,108 @@ public class ExecutionTaskTest {
 
     }
     
-    // Macro Flow Execution Task
-    @Test
-    public void testMacroExecutionTaskSuccess() throws Exception {
-
-        ExecutionTask executionTaskA =
-            ServiceOrderExecutionTaskAssertions.setUpBddForMacroExecutionTaskSucess(
-                serviceOrderRepository, executionTaskRepository, ActionType.ADD);
-        ExecutionTask executionTaskB;
-
-        SoTaskProcessor.processOrderItem(executionTaskA);
-        ServiceOrder serviceOrderChecked = getServiceOrder("test");
-        assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
-        for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
-            if (serviceOrderItem.getId().equals("A")) {
-                assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
-            } else {
-                assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
-            }
-        }
-
-        executionTaskB = getExecutionTask("B");
-        assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
-        executionTaskA = getExecutionTask("A");
-        assertThat(executionTaskA).isNull();
-
-        SoTaskProcessor.processOrderItem(executionTaskB);
-        serviceOrderChecked = getServiceOrder("test");
-
-        assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
-        for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
-            assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
-
-        }
-    }
+ // Macro Flow Execution Task
+       @Test
+       public void testMacroExecutionTaskSuccess() throws Exception {
+
+               ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
+                               .setUpBddForMacroExecutionTaskSucess(serviceOrderRepository, executionTaskRepository, ActionType.ADD);
+               ExecutionTask executionTaskB;
+
+               SoTaskProcessor.processOrderItem(executionTaskA);
+               ServiceOrder serviceOrderChecked = getServiceOrder("test");
+               assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
+               for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
+                       if (serviceOrderItem.getId().equals("A")) {
+                               assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
+                       } else {
+                               assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
+                       }
+               }
+
+               executionTaskB = getExecutionTask("B");
+               assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
+               executionTaskA = getExecutionTask("A");
+               assertThat(executionTaskA).isNull();
+
+               SoTaskProcessor.processOrderItem(executionTaskB);
+               serviceOrderChecked = getServiceOrder("test");
+
+               assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
+               for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
+                       assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
+
+               }
+       }
+       
+       // Macro Flow Execution Task for VNF with Service and VNF level Params
+        @Test
+           public void testMacroExecutionTaskSuccessForVNFWithServceAndVnfLevelParams() throws Exception {
+
+               ExecutionTask executionTaskA =
+                   ServiceOrderExecutionTaskAssertions.setUpBddForMacroExecutionTaskSucessVnf(
+                       serviceOrderRepository, executionTaskRepository, ActionType.ADD);
+               ExecutionTask executionTaskB;
+
+               SoTaskProcessor.processOrderItem(executionTaskA);
+               ServiceOrder serviceOrderChecked = getServiceOrder("test");
+               assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
+               for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
+                   if (serviceOrderItem.getId().equals("A")) {
+                       assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
+                   } else {
+                       assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
+                   }
+               }
+
+               executionTaskB = getExecutionTask("B");
+               assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
+               executionTaskA = getExecutionTask("A");
+               assertThat(executionTaskA).isNull();
+
+               SoTaskProcessor.processOrderItem(executionTaskB);
+               serviceOrderChecked = getServiceOrder("test");
+
+               assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
+               for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
+                   assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
+
+               }
+           }
+       
+       // Macro Flow Execution Task with CNF with InstanceParams
+               @Test
+               public void testMacroExecutionTaskSuccessforCNFWithServiceAndVNFLevelParams() throws Exception {
+
+                       ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
+                                       .setUpBddForMacroExecutionTaskSucessForCNF(serviceOrderRepository, executionTaskRepository, ActionType.ADD);
+                       ExecutionTask executionTaskB;
+
+                       SoTaskProcessor.processOrderItem(executionTaskA);
+                       ServiceOrder serviceOrderChecked = getServiceOrder("test");
+                       assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
+                       for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
+                               if (serviceOrderItem.getId().equals("A")) {
+                                       assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
+                               } else {
+                                       assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
+                               }
+                       }
+
+                       executionTaskB = getExecutionTask("B");
+                       assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
+                       executionTaskA = getExecutionTask("A");
+                       assertThat(executionTaskA).isNull();
+
+                       SoTaskProcessor.processOrderItem(executionTaskB);
+                       serviceOrderChecked = getServiceOrder("test");
+
+                       assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
+                       for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
+                               assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
+
+                       }
+               }
     
     @Test
     public void testExecutionTaskFailed() throws Exception {
diff --git a/src/test/resources/__files/toscafile/service-DummyService-csar.csar b/src/test/resources/__files/toscafile/service-DummyService-csar.csar
new file mode 100644 (file)
index 0000000..10db0b3
Binary files /dev/null and b/src/test/resources/__files/toscafile/service-DummyService-csar.csar differ
diff --git a/src/test/resources/__files/toscafile/service-VfwCnf1308Service-csar.csar b/src/test/resources/__files/toscafile/service-VfwCnf1308Service-csar.csar
new file mode 100644 (file)
index 0000000..e9644e9
Binary files /dev/null and b/src/test/resources/__files/toscafile/service-VfwCnf1308Service-csar.csar differ
index fdcc138..a2fddc5 100644 (file)
@@ -22,6 +22,7 @@ Feature: Status Resource
 Background:
 * url nbiBaseUrl
 * def Context = Java.type('org.onap.nbi.test.Context');
+* configure readTimeout = 10000
 * call Context.startServers();
     
 Scenario: testHealthCheck
diff --git a/src/test/resources/mappings/sdc/sdc_get_3bed38ff-a4fd-4463-9784-caf738d46dbc.json b/src/test/resources/mappings/sdc/sdc_get_3bed38ff-a4fd-4463-9784-caf738d46dbc.json
new file mode 100644 (file)
index 0000000..65df09e
--- /dev/null
@@ -0,0 +1,85 @@
+{
+       "request": {
+               "method": "GET",
+               "url": "/sdc/v1/catalog/services/3bed38ff-a4fd-4463-9784-caf738d46dbc/metadata"
+       },
+       "response": {
+               "status": 200,
+               "jsonBody": {
+  "uuid": "3bed38ff-a4fd-4463-9784-caf738d46dbc",
+  "invariantUUID": "b96687b0-5353-4e4d-bbd5-a49796fc3f11",
+  "name": "dummy_service",
+  "version": "2.0",
+  "toscaModelURL": "/sdc/v1/catalog/services/3bed38ff-a4fd-4463-9784-caf738d46dbc/toscaModel",
+  "category": "Network Service",
+  "lifecycleState": "CERTIFIED",
+  "lastUpdaterUserId": "cs0008",
+  "distributionStatus": "DISTRIBUTED",
+  "lastUpdaterFullName": "Carlos Santana",
+  "resources": [{
+    "resourceInstanceName": "dummy_vsp 0",
+    "resourceName": "dummy_vsp",
+    "resourceInvariantUUID": "0fa0d33d-b268-42ce-b393-7d3c6fde6ca9",
+    "resourceVersion": "1.0",
+    "resoucreType": "VF",
+    "resourceUUID": "725860b4-1a98-4da6-9451-6c04a581eb44",
+    "artifacts": [{
+      "artifactName": "vf-license-model.xml",
+      "artifactType": "VF_LICENSE",
+      "artifactURL": "/sdc/v1/catalog/services/3bed38ff-a4fd-4463-9784-caf738d46dbc/resourceInstances/dummy_vsp0/artifacts/ac6dae44-91d7-4eb9-aa1d-da056f6a2c6c",
+      "artifactDescription": "VF license file",
+      "artifactChecksum": "YWZjYWY4MDIzMzRjMDFlMDg3NDcyOWNiZjU2ODk1MDU=",
+      "artifactUUID": "ac6dae44-91d7-4eb9-aa1d-da056f6a2c6c",
+      "artifactVersion": "1",
+      "artifactLabel": "vflicense",
+      "artifactGroupType": "DEPLOYMENT"
+    }, {
+      "artifactName": "dummy_vsp0_modules.json",
+      "artifactType": "VF_MODULES_METADATA",
+      "artifactURL": "/sdc/v1/catalog/services/3bed38ff-a4fd-4463-9784-caf738d46dbc/resourceInstances/dummy_vsp0/artifacts/362dd42f-3eff-45dd-8163-0821d191ebd3",
+      "artifactDescription": "Auto-generated VF Modules information artifact",
+      "artifactChecksum": "YzdlZTU5MmI1YmIwOTYzZGE2MmYyMWNmYTI3Yjc1ZWE=",
+      "artifactUUID": "362dd42f-3eff-45dd-8163-0821d191ebd3",
+      "artifactVersion": "2",
+      "artifactLabel": "vfModulesMetadata",
+      "artifactGroupType": "DEPLOYMENT"
+    }, {
+      "artifactName": "base_bono.yaml",
+      "artifactType": "HEAT",
+      "artifactURL": "/sdc/v1/catalog/services/3bed38ff-a4fd-4463-9784-caf738d46dbc/resourceInstances/dummy_vsp0/artifacts/b9d286f7-cd3c-4a54-a028-c673b7028c19",
+      "artifactDescription": "created from csar",
+      "artifactTimeout": 30,
+      "artifactChecksum": "NTYzNmFlM2ZkMWQ4Y2U3YTc5YzM3Nzc2OTRmMjBlMWU=",
+      "artifactUUID": "b9d286f7-cd3c-4a54-a028-c673b7028c19",
+      "artifactVersion": "1",
+      "artifactLabel": "heat1",
+      "artifactGroupType": "DEPLOYMENT"
+    }, {
+      "artifactName": "vendor-license-model.xml",
+      "artifactType": "VENDOR_LICENSE",
+      "artifactURL": "/sdc/v1/catalog/services/3bed38ff-a4fd-4463-9784-caf738d46dbc/resourceInstances/dummy_vsp0/artifacts/207fc34f-dc47-47ec-8dc4-669960c9e338",
+      "artifactDescription": " Vendor license file",
+      "artifactChecksum": "YmY4NDI2MTk2OTU1NWJmZDMzZmI0OWZkNzU1ZDliODQ=",
+      "artifactUUID": "207fc34f-dc47-47ec-8dc4-669960c9e338",
+      "artifactVersion": "1",
+      "artifactLabel": "vendorlicense",
+      "artifactGroupType": "DEPLOYMENT"
+    }, {
+      "artifactName": "base_bono.env",
+      "artifactType": "HEAT_ENV",
+      "artifactURL": "/sdc/v1/catalog/services/3bed38ff-a4fd-4463-9784-caf738d46dbc/resourceInstances/dummy_vsp0/artifacts/2f18acf8-89d9-4b4f-8b98-b8143e21d485",
+      "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+      "artifactChecksum": "ZDliY2ZhZWRkNjJlZTEzMTg4MzYwOTA3ZTMwNjM2MzI=",
+      "artifactUUID": "2f18acf8-89d9-4b4f-8b98-b8143e21d485",
+      "artifactVersion": "3",
+      "generatedFromUUID": "3fad956a-8ee5-4870-99a4-a13cfadb222b.heat1",
+      "artifactLabel": "heat1env",
+      "artifactGroupType": "DEPLOYMENT"
+    }]
+  }]
+},
+               "headers": {
+                       "Content-Type": "application/json"
+               }
+       }
+}
\ No newline at end of file
diff --git a/src/test/resources/mappings/sdc/sdc_get_3bed38ff-a4fd-4463-9784-caf738d46dbc_tosca.json b/src/test/resources/mappings/sdc/sdc_get_3bed38ff-a4fd-4463-9784-caf738d46dbc_tosca.json
new file mode 100644 (file)
index 0000000..cf8e2c2
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "request": {
+        "method": "GET",
+        "url": "/sdc/v1/catalog/services/3bed38ff-a4fd-4463-9784-caf738d46dbc/toscaModel"
+    },
+    "response": {
+        "status": 200,
+        "bodyFileName": "toscafile/service-DummyService-csar.csar"
+    }
+}
\ No newline at end of file
diff --git a/src/test/resources/mappings/sdc/sdc_get_edf094cc-281f-4be9-a284-e047ded86066.json b/src/test/resources/mappings/sdc/sdc_get_edf094cc-281f-4be9-a284-e047ded86066.json
new file mode 100644 (file)
index 0000000..32f42a8
--- /dev/null
@@ -0,0 +1,272 @@
+{
+       "request": {
+               "method": "GET",
+               "url": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/metadata"
+       },
+       "response": {
+               "status": 200,
+               "jsonBody": {
+                       "uuid": "edf094cc-281f-4be9-a284-e047ded86066",
+                       "invariantUUID": "fa8cd207-ae25-4b4d-baa7-ba841907ab69",
+                       "name": "vfw_cnf_1308_service",
+                       "version": "2.0",
+                       "toscaModelURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/toscaModel",
+                       "category": "Network Service",
+                       "lifecycleState": "CERTIFIED",
+                       "lastUpdaterUserId": "cs0008",
+                       "distributionStatus": "DISTRIBUTED",
+                       "lastUpdaterFullName": "Carlos Santana",
+                       "resources": [
+                               {
+                                       "resourceInstanceName": "vfw_cnf_1308 0",
+                                       "resourceName": "vfw_cnf_1308",
+                                       "resourceInvariantUUID": "2c9870d3-21cd-4140-afa0-3ba770bef206",
+                                       "resourceVersion": "1.0",
+                                       "resoucreType": "VF",
+                                       "resourceUUID": "679effb6-35e7-425e-9272-4b4e6b2b8382",
+                                       "artifacts": [
+                                               {
+                                                       "artifactName": "vf-license-model.xml",
+                                                       "artifactType": "VF_LICENSE",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/64e27d2e-108c-41a5-81a5-5e7de8279f65",
+                                                       "artifactDescription": "VF license file",
+                                                       "artifactChecksum": "ZGM1YjI1ODQyYzM5NGU2NWYzNTU2ZWY4ZGUwYmIwZDU=",
+                                                       "artifactUUID": "64e27d2e-108c-41a5-81a5-5e7de8279f65",
+                                                       "artifactVersion": "1",
+                                                       "artifactLabel": "vflicense",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "base_template_cloudtech_k8s_charts.env",
+                                                       "artifactType": "HEAT_ENV",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/aa0020b4-5476-4c49-b2f4-3a1e63812f45",
+                                                       "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                                                       "artifactChecksum": "MTA2MjAxNDAyMmY0NmMwYTlmMDMyN2FjZDUxODkzNWI=",
+                                                       "artifactUUID": "aa0020b4-5476-4c49-b2f4-3a1e63812f45",
+                                                       "artifactVersion": "3",
+                                                       "generatedFromUUID": "7176f506-6215-4ecb-9417-a90542cba39c.cloudtechnologyspecificartifact12",
+                                                       "artifactLabel": "cloudtechnologyspecificartifact12env",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "vfw_cnf_13080_modules.json",
+                                                       "artifactType": "VF_MODULES_METADATA",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/49a4cca7-0af3-4671-a5b1-5ffb1cd51ed9",
+                                                       "artifactDescription": "Auto-generated VF Modules information artifact",
+                                                       "artifactChecksum": "NTY1NGI4YTViNGY5OGM1MDgyNDc5NmQxNTIwMzAwM2M=",
+                                                       "artifactUUID": "49a4cca7-0af3-4671-a5b1-5ffb1cd51ed9",
+                                                       "artifactVersion": "2",
+                                                       "artifactLabel": "vfModulesMetadata",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "vfw_cloudtech_k8s_charts.env",
+                                                       "artifactType": "HEAT_ENV",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/0433412e-cb99-4717-ae20-2461932a7862",
+                                                       "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                                                       "artifactChecksum": "MTA2MjAxNDAyMmY0NmMwYTlmMDMyN2FjZDUxODkzNWI=",
+                                                       "artifactUUID": "0433412e-cb99-4717-ae20-2461932a7862",
+                                                       "artifactVersion": "3",
+                                                       "generatedFromUUID": "7176f506-6215-4ecb-9417-a90542cba39c.cloudtechnologyspecificartifact11",
+                                                       "artifactLabel": "cloudtechnologyspecificartifact11env",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "vsn_cloudtech_k8s_charts.tgz",
+                                                       "artifactType": "CLOUD_TECHNOLOGY_SPECIFIC_ARTIFACT",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/dcfe1cc8-0ebf-46a3-a754-8896e97f6280",
+                                                       "artifactDescription": "created from csar",
+                                                       "artifactTimeout": 30,
+                                                       "artifactChecksum": "N2FlMmViOWU4ZTU4ZWVkYTY4ZDYwOTBmNTBkYmZmYWY=",
+                                                       "artifactUUID": "dcfe1cc8-0ebf-46a3-a754-8896e97f6280",
+                                                       "artifactVersion": "1",
+                                                       "artifactLabel": "cloudtechnologyspecificartifact9",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "vsn.yaml",
+                                                       "artifactType": "HEAT",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/2e87a975-4816-4bbe-951a-68ca36a011c8",
+                                                       "artifactDescription": "created from csar",
+                                                       "artifactTimeout": 30,
+                                                       "artifactChecksum": "NzE1Njc2ZmI5MTIzNGQwYWQ1ZWU0YjU5ZGNiZDYwM2M=",
+                                                       "artifactUUID": "2e87a975-4816-4bbe-951a-68ca36a011c8",
+                                                       "artifactVersion": "1",
+                                                       "artifactLabel": "heat1",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "vpkg.yaml",
+                                                       "artifactType": "HEAT",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/2d2b3a58-d942-424c-9b44-19ce996dead3",
+                                                       "artifactDescription": "created from csar",
+                                                       "artifactTimeout": 30,
+                                                       "artifactChecksum": "YjM5ZmU2NGUwMTQ4ZjJmYjNkYTk4ZmRmYjEwM2ZiMjI=",
+                                                       "artifactUUID": "2d2b3a58-d942-424c-9b44-19ce996dead3",
+                                                       "artifactVersion": "1",
+                                                       "artifactLabel": "heat3",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "vendor-license-model.xml",
+                                                       "artifactType": "VENDOR_LICENSE",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/dd8567f8-fa6a-4f26-bf7c-9a2dcf605250",
+                                                       "artifactDescription": " Vendor license file",
+                                                       "artifactChecksum": "M2ZmZGI0M2JlYzljZTU4YWNmZjJmNGQ2NGNlZGNiY2I=",
+                                                       "artifactUUID": "dd8567f8-fa6a-4f26-bf7c-9a2dcf605250",
+                                                       "artifactVersion": "1",
+                                                       "artifactLabel": "vendorlicense",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "vfw.yaml",
+                                                       "artifactType": "HEAT",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/5c22f875-5425-4b0c-9823-afba9ac75d20",
+                                                       "artifactDescription": "created from csar",
+                                                       "artifactTimeout": 30,
+                                                       "artifactChecksum": "ODE4MTU4ZDc4YjZkOTAxNjBiN2Q4N2JkZDExYTRmZjM=",
+                                                       "artifactUUID": "5c22f875-5425-4b0c-9823-afba9ac75d20",
+                                                       "artifactVersion": "1",
+                                                       "artifactLabel": "heat5",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "base_template.yaml",
+                                                       "artifactType": "HEAT",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/c51b7dcf-796b-4355-b35c-54b49633e89b",
+                                                       "artifactDescription": "created from csar",
+                                                       "artifactTimeout": 30,
+                                                       "artifactChecksum": "ZGYxYjZjOWY4NmFhY2Q5YTVhMThhMjNiYzEzMDk1ZGY=",
+                                                       "artifactUUID": "c51b7dcf-796b-4355-b35c-54b49633e89b",
+                                                       "artifactVersion": "1",
+                                                       "artifactLabel": "heat7",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "base_template_cloudtech_k8s_charts.tgz",
+                                                       "artifactType": "CLOUD_TECHNOLOGY_SPECIFIC_ARTIFACT",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/cd7f5867-fb30-4282-bd89-ca0ff33e78a9",
+                                                       "artifactDescription": "created from csar",
+                                                       "artifactTimeout": 30,
+                                                       "artifactChecksum": "NmUwYjIzMmJhZjE0OTA4OTY4ODI0MzQ1ZTU1N2RiNzA=",
+                                                       "artifactUUID": "cd7f5867-fb30-4282-bd89-ca0ff33e78a9",
+                                                       "artifactVersion": "1",
+                                                       "artifactLabel": "cloudtechnologyspecificartifact12",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "vpkg_cloudtech_k8s_charts.tgz",
+                                                       "artifactType": "CLOUD_TECHNOLOGY_SPECIFIC_ARTIFACT",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/da443669-c1f6-4dfa-9cc8-d666b276906a",
+                                                       "artifactDescription": "created from csar",
+                                                       "artifactTimeout": 30,
+                                                       "artifactChecksum": "Nzk4NmQzZWVhYzQ5OGE0ZWQyZDYyYjBhZWM2MDcyMzk=",
+                                                       "artifactUUID": "da443669-c1f6-4dfa-9cc8-d666b276906a",
+                                                       "artifactVersion": "1",
+                                                       "artifactLabel": "cloudtechnologyspecificartifact10",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "vfw_cloudtech_k8s_charts.tgz",
+                                                       "artifactType": "CLOUD_TECHNOLOGY_SPECIFIC_ARTIFACT",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/8ba2f2d2-cc5e-4350-989a-707a1f84d761",
+                                                       "artifactDescription": "created from csar",
+                                                       "artifactTimeout": 30,
+                                                       "artifactChecksum": "M2ZhOWFkOTk4MjFiZTM4Yjk1ZGQ0YThjN2ViMTM0ZjU=",
+                                                       "artifactUUID": "8ba2f2d2-cc5e-4350-989a-707a1f84d761",
+                                                       "artifactVersion": "1",
+                                                       "artifactLabel": "cloudtechnologyspecificartifact11",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "base_template.env",
+                                                       "artifactType": "HEAT_ENV",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/83a9702c-27ff-4b06-a2a8-ca08c8188317",
+                                                       "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                                                       "artifactChecksum": "YWZkMzRjZWU2MDQ1MGVhYmQ2YWRiNWFiNWMzOTlkYjc=",
+                                                       "artifactUUID": "83a9702c-27ff-4b06-a2a8-ca08c8188317",
+                                                       "artifactVersion": "3",
+                                                       "generatedFromUUID": "7176f506-6215-4ecb-9417-a90542cba39c.heat7",
+                                                       "artifactLabel": "heat7env",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "vpkg_cloudtech_k8s_charts.env",
+                                                       "artifactType": "HEAT_ENV",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/e3fb742e-eb30-4821-8adf-af3d002fe8c0",
+                                                       "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                                                       "artifactChecksum": "MTA2MjAxNDAyMmY0NmMwYTlmMDMyN2FjZDUxODkzNWI=",
+                                                       "artifactUUID": "e3fb742e-eb30-4821-8adf-af3d002fe8c0",
+                                                       "artifactVersion": "3",
+                                                       "generatedFromUUID": "7176f506-6215-4ecb-9417-a90542cba39c.cloudtechnologyspecificartifact10",
+                                                       "artifactLabel": "cloudtechnologyspecificartifact10env",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "CBA.zip",
+                                                       "artifactType": "CONTROLLER_BLUEPRINT_ARCHIVE",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/a4cac5d7-8d96-441c-afd2-4ea75e7cfd91",
+                                                       "artifactDescription": "created from csar",
+                                                       "artifactChecksum": "NmFiM2VjOWMxNTljNjcwYzQ2ODRlMjJmY2E3YzU4NjA=",
+                                                       "artifactUUID": "a4cac5d7-8d96-441c-afd2-4ea75e7cfd91",
+                                                       "artifactVersion": "1",
+                                                       "artifactLabel": "controllerblueprintarchive13",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "vsn_cloudtech_k8s_charts.env",
+                                                       "artifactType": "HEAT_ENV",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/fe315410-d43c-4168-89a2-2bc5cac9f606",
+                                                       "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                                                       "artifactChecksum": "MTA2MjAxNDAyMmY0NmMwYTlmMDMyN2FjZDUxODkzNWI=",
+                                                       "artifactUUID": "fe315410-d43c-4168-89a2-2bc5cac9f606",
+                                                       "artifactVersion": "3",
+                                                       "generatedFromUUID": "7176f506-6215-4ecb-9417-a90542cba39c.cloudtechnologyspecificartifact9",
+                                                       "artifactLabel": "cloudtechnologyspecificartifact9env",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "vfw.env",
+                                                       "artifactType": "HEAT_ENV",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/32d57f44-aea3-458f-b30d-080d8cc3f359",
+                                                       "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                                                       "artifactChecksum": "NTk0OWFlMWU5NGYyNmZjZjhiNzhkOTdmYmM3ZmVkZjg=",
+                                                       "artifactUUID": "32d57f44-aea3-458f-b30d-080d8cc3f359",
+                                                       "artifactVersion": "3",
+                                                       "generatedFromUUID": "7176f506-6215-4ecb-9417-a90542cba39c.heat5",
+                                                       "artifactLabel": "heat5env",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "vpkg.env",
+                                                       "artifactType": "HEAT_ENV",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/9305bcc3-4ef2-4659-9707-9a61420ac500",
+                                                       "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                                                       "artifactChecksum": "MWRhYTA5ZDBhZWYxZjEwMDExZDliOWYyMDI2NzAyYzE=",
+                                                       "artifactUUID": "9305bcc3-4ef2-4659-9707-9a61420ac500",
+                                                       "artifactVersion": "3",
+                                                       "generatedFromUUID": "7176f506-6215-4ecb-9417-a90542cba39c.heat3",
+                                                       "artifactLabel": "heat3env",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               },
+                                               {
+                                                       "artifactName": "vsn.env",
+                                                       "artifactType": "HEAT_ENV",
+                                                       "artifactURL": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/resourceInstances/vfw_cnf_13080/artifacts/70cdee61-ab45-4d89-a5a8-6f450304930a",
+                                                       "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+                                                       "artifactChecksum": "YTQ1NTY0YzA2MTk4M2IwMGUxZThlMTBlOTRjZjgyNTA=",
+                                                       "artifactUUID": "70cdee61-ab45-4d89-a5a8-6f450304930a",
+                                                       "artifactVersion": "3",
+                                                       "generatedFromUUID": "7176f506-6215-4ecb-9417-a90542cba39c.heat1",
+                                                       "artifactLabel": "heat1env",
+                                                       "artifactGroupType": "DEPLOYMENT"
+                                               }
+                                       ]
+                               }
+                       ]
+               },
+               "headers": {
+                       "Content-Type": "application/json"
+               }
+       }
+}
\ No newline at end of file
diff --git a/src/test/resources/mappings/sdc/sdc_get_edf094cc-281f-4be9-a284-e047ded86066_tosca.json b/src/test/resources/mappings/sdc/sdc_get_edf094cc-281f-4be9-a284-e047ded86066_tosca.json
new file mode 100644 (file)
index 0000000..d0037a9
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "request": {
+        "method": "GET",
+        "url": "/sdc/v1/catalog/services/edf094cc-281f-4be9-a284-e047ded86066/toscaModel"
+    },
+    "response": {
+        "status": 200,
+        "bodyFileName": "toscafile/service-VfwCnf1308Service-csar.csar"
+    }
+}
\ No newline at end of file
diff --git a/src/test/resources/toscafile/service-VfwCnf1308Service-csar.csar b/src/test/resources/toscafile/service-VfwCnf1308Service-csar.csar
new file mode 100644 (file)
index 0000000..e9644e9
Binary files /dev/null and b/src/test/resources/toscafile/service-VfwCnf1308Service-csar.csar differ