Merge "SOL003 Adapter Package Management - Subscribe Fix"
authorByung-Woo Jun <byung-woo.jun@est.tech>
Tue, 18 Feb 2020 14:07:27 +0000 (14:07 +0000)
committerGerrit Code Review <gerrit@onap.org>
Tue, 18 Feb 2020 14:07:27 +0000 (14:07 +0000)
15 files changed:
adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/db/catalog/client/CatalogDbClientTest.java
bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/aai/groovyflows/AAIDeleteServiceInstance.java
bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/aai/groovyflows/AAIServiceInstance.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/WorkflowSpecificationsHandler.java
mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/WorkflowSpecificationsHandlerTest.java
mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/catalogdb/Empty_workflowActivitySpecSequence_Response.json [new file with mode: 0644]
mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/catalogdb/WorkflowSpecificationsForPnf.json [new file with mode: 0644]
mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/catalogdb/WorkflowSpecificationsForPnfQuery_Response.json [new file with mode: 0644]
mso-catalog-db/src/main/java/org/onap/so/db/catalog/client/CatalogDbClient.java
mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/WorkflowRepository.java
mso-catalog-db/src/test/java/org/onap/so/db/catalog/data/repository/WorkflowRepositoryTest.java
packages/docker/pom.xml
pom.xml

index 739b4b6..b4dfca3 100644 (file)
@@ -718,8 +718,8 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
     }
 
     @Test
-    public void getWorkflowByModelUUID_validUuid_expectedOutput() {
-        List<Workflow> workflows = client.findWorkflowByModelUUID("ff2ae348-214a-11e7-93ae-92361f002671");
+    public void getWorkflowByVnfModelUUID_validUuid_expectedOutput() {
+        List<Workflow> workflows = client.findWorkflowByVnfModelUUID("ff2ae348-214a-11e7-93ae-92361f002671");
         assertTrue(workflows != null);
         assertTrue(workflows.size() != 0);
 
index fb95ae3..11707c4 100644 (file)
@@ -7,9 +7,9 @@
  * 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.
@@ -27,9 +27,15 @@ import org.onap.so.client.aai.AAIObjectType;
 import org.onap.so.client.aai.AAIResourcesClient;
 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class AAIDeleteServiceInstance implements JavaDelegate {
 
+    private static final Logger logger = LoggerFactory.getLogger(AAIDeleteServiceInstance.class);
+    private static final String ERROR_MESSAGE =
+            "Exception in Delete Serivce Instance. Service Instance could not be deleted in AAI.";
+
     ExceptionUtil exceptionUtil = new ExceptionUtil();
 
     public void execute(DelegateExecution execution) throws Exception {
@@ -41,8 +47,8 @@ public class AAIDeleteServiceInstance implements JavaDelegate {
             aaiRC.delete(serviceInstanceURI);
             execution.setVariable("GENDS_SuccessIndicator", true);
         } catch (Exception ex) {
-            String msg = "Exception in Delete Serivce Instance. Service Instance could not be deleted in AAI."
-                    + ex.getMessage();
+            logger.debug(ERROR_MESSAGE, ex);
+            String msg = ERROR_MESSAGE + ex.getMessage();
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg);
         }
 
index 2d69351..f7b0c66 100644 (file)
@@ -7,9 +7,9 @@
  * 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.
@@ -30,17 +30,70 @@ public class AAIServiceInstance {
     String environmentContext;
     String workloadContext;
 
-    public AAIServiceInstance(String serviceInstanceName, String serviceType, String serviceRole,
-            String orchestrationStatus, String modelInvariantUuid, String modelVersionId, String environmentContext,
-            String workloadContext) {
-        this.serviceInstanceName = serviceInstanceName;
-        this.serviceType = serviceType;
-        this.serviceRole = serviceRole;
-        this.orchestrationStatus = orchestrationStatus;
-        this.modelInvariantUuid = modelInvariantUuid;
-        this.modelVersionId = modelVersionId;
-        this.environmentContext = environmentContext;
-        this.workloadContext = workloadContext;
+    public class AAIServiceInstanceBuilder {
+        private String serviceInstanceName;
+        private String serviceType;
+        private String serviceRole;
+        private String orchestrationStatus;
+        private String modelInvariantUuid;
+        private String modelVersionId;
+        private String environmentContext;
+        private String workloadContext;
+
+        public AAIServiceInstanceBuilder setServiceInstanceName(String serviceInstanceName) {
+            this.serviceInstanceName = serviceInstanceName;
+            return this;
+        }
+
+        public AAIServiceInstanceBuilder setServiceType(String serviceType) {
+            this.serviceType = serviceType;
+            return this;
+        }
+
+        public AAIServiceInstanceBuilder setServiceRole(String serviceRole) {
+            this.serviceRole = serviceRole;
+            return this;
+        }
+
+        public AAIServiceInstanceBuilder setOrchestrationStatus(String orchestrationStatus) {
+            this.orchestrationStatus = orchestrationStatus;
+            return this;
+        }
+
+        public AAIServiceInstanceBuilder setModelInvariantUuid(String modelInvariantUuid) {
+            this.modelInvariantUuid = modelInvariantUuid;
+            return this;
+        }
+
+        public AAIServiceInstanceBuilder setModelVersionId(String modelVersionId) {
+            this.modelVersionId = modelVersionId;
+            return this;
+        }
+
+        public AAIServiceInstanceBuilder setEnvironmentContext(String environmentContext) {
+            this.environmentContext = environmentContext;
+            return this;
+        }
+
+        public AAIServiceInstanceBuilder setWorkloadContext(String workloadContext) {
+            this.workloadContext = workloadContext;
+            return this;
+        }
+
+        public AAIServiceInstance createAAIServiceInstance() {
+            return new AAIServiceInstance(this);
+        }
+    }
+
+    public AAIServiceInstance(AAIServiceInstanceBuilder aaiServiceInstanceBuilder) {
+        this.serviceInstanceName = aaiServiceInstanceBuilder.serviceInstanceName;
+        this.serviceType = aaiServiceInstanceBuilder.serviceType;
+        this.serviceRole = aaiServiceInstanceBuilder.serviceRole;
+        this.orchestrationStatus = aaiServiceInstanceBuilder.orchestrationStatus;
+        this.modelInvariantUuid = aaiServiceInstanceBuilder.modelInvariantUuid;
+        this.modelVersionId = aaiServiceInstanceBuilder.modelVersionId;
+        this.environmentContext = aaiServiceInstanceBuilder.environmentContext;
+        this.workloadContext = aaiServiceInstanceBuilder.workloadContext;
     }
 
     public String getServiceInstanceName() {
index 80c6f0b..2284c4a 100644 (file)
@@ -431,7 +431,12 @@ public class WorkflowAction {
             execution.setVariable("isRollbackComplete", false);
 
         } catch (Exception ex) {
-            buildAndThrowException(execution, "Exception while setting execution list. ", ex);
+            if (!(execution.hasVariable("WorkflowException")
+                    || execution.hasVariable("WorkflowExceptionExceptionMessage"))) {
+                buildAndThrowException(execution, "Exception while setting execution list. ", ex);
+            } else {
+                throw ex;
+            }
         }
     }
 
@@ -537,7 +542,7 @@ public class WorkflowAction {
             if (configurations.size() > 1) {
                 String multipleRelationshipsError =
                         "Multiple relationships exist from VNFC " + vnfc.getVnfcName() + " to Configurations";
-                buildAndThrowException(dataObj.getExecution(), multipleRelationshipsError,
+                buildAndThrowException(dataObj.getExecution(), "Exception in getConfigBuildingBlock: ",
                         new Exception(multipleRelationshipsError));
             }
             for (org.onap.aai.domain.yang.Configuration configuration : configurations) {
index 8e47c34..4fdd97d 100644 (file)
@@ -41,6 +41,7 @@ import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.isA;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.when;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import java.io.IOException;
@@ -227,6 +228,77 @@ public class WorkflowActionTest extends BaseTaskTest {
         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "ActivateServiceInstanceBB");
     }
 
+    @Test
+    public void selectExecutionListExceptionAlreadyBuiltTest() throws Exception {
+        DelegateExecution delegateExecution = new DelegateExecutionFake();
+        String gAction = "deleteInstance";
+        String resource = "VfModule";
+        delegateExecution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
+        delegateExecution.setVariable("requestAction", gAction);
+        String bpmnRequest =
+                new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
+        delegateExecution.setVariable("bpmnRequest", bpmnRequest);
+        delegateExecution.setVariable("aLaCarte", true);
+        delegateExecution.setVariable("apiVersion", "7");
+        delegateExecution.setVariable("requestUri",
+                "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
+
+        NorthBoundRequest northBoundRequest = new NorthBoundRequest();
+        List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
+                "UnassignVfModuleBB", "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB");
+        northBoundRequest.setOrchestrationFlowList(orchFlows);
+
+        when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
+                true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
+
+        doAnswer(invocation -> {
+            DelegateExecutionFake execution = invocation.getArgument(0);
+            execution.setVariable("WorkflowException", "exception");
+            execution.setVariable("WorkflowExceptionErrorMessage", "errorMessage");
+            throw new BpmnError("WorkflowException");
+        }).when(exceptionUtil).buildAndThrowWorkflowException(delegateExecution, 7000,
+                "Exception in getConfigBuildingBlock: Multiple relationships exist from VNFC testVnfcName to Configurations");
+
+
+        org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
+        vnf.setVnfId("vnf0");
+        vnf.setModelCustomizationId("modelCustomizationId");
+        when(bbSetupUtils.getAAIGenericVnf(any())).thenReturn(vnf);
+
+        org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
+        vfModule.setModelCustomizationId("modelCustomizationId");
+        when(bbSetupUtils.getAAIVfModule(any(), any())).thenReturn(vfModule);
+
+        List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
+        org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
+        vnfc.setModelInvariantId("modelInvariantId");
+        vnfc.setVnfcName("testVnfcName");
+        vnfcs.add(vnfc);
+        doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(any(), any(), any(), any());
+
+        List<org.onap.aai.domain.yang.Configuration> configurations =
+                new ArrayList<org.onap.aai.domain.yang.Configuration>();
+        org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
+        configuration.setConfigurationId("configurationId");
+        configuration.setModelCustomizationId("modelCustimizationId");
+        configuration.setConfigurationName("testConfigurationName");
+        configurations.add(configuration);
+        org.onap.aai.domain.yang.Configuration configuration1 = new org.onap.aai.domain.yang.Configuration();
+        configuration1.setConfigurationId("configurationId");
+        configuration1.setModelCustomizationId("modelCustimizationId");
+        configuration1.setConfigurationName("testConfigurationName");
+        configurations.add(configuration1);
+        doReturn(configurations).when(SPY_workflowAction).getRelatedResourcesInVnfc(any(), any(), any());
+
+        doReturn("testName").when(SPY_workflowAction).getVnfcNameForConfiguration(any());
+
+        thrown.expect(BpmnError.class);
+        SPY_workflowAction.selectExecutionList(delegateExecution);
+        assertEquals(
+                "Exception in getConfigBuildingBlock: Multiple relationships exist from VNFC testVnfcName to Configurations",
+                delegateExecution.getVariable("WorkflowException"));
+    }
+
     @Test
     public void selectExecutionListDuplicateNameExceptionTest() throws Exception {
         String gAction = "createInstance";
index 925d101..0d0e6ee 100644 (file)
@@ -23,6 +23,8 @@ package org.onap.so.apihandlerinfra;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.TreeSet;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -90,21 +92,40 @@ public class WorkflowSpecificationsHandler {
     @Transactional
 
     public Response queryWorkflowSpecifications(@QueryParam("vnfModelVersionId") String vnfModelVersionId,
-            @PathParam("version") String version) throws Exception {
-
+            @QueryParam("pnfModelVersionId") String pnfModelVersionId, @PathParam("version") String version)
+            throws Exception {
         String apiVersion = version.substring(1);
 
-        ObjectMapper mapper1 = new ObjectMapper();
-        mapper1.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
-        List<Workflow> workflows = catalogDbClient.findWorkflowByModelUUID(vnfModelVersionId);
+        List<Workflow> workflows = new ArrayList<>();
+        if (vnfModelVersionId == null && pnfModelVersionId == null) {
+            workflows.addAll(queryWorkflowSpecificationsForAll());
+        } else {
+            // 1. query workflow specifications for given vnfModelVersionId if need.
+            if (vnfModelVersionId != null) {
+                List<Workflow> vnfWorkflows = queryWorkflowSpecificationsForVnf(vnfModelVersionId);
+                logger.debug("Retrieved " + vnfWorkflows.size() + " workflows for given vnfModelVersionId.");
+                if (vnfWorkflows.size() > 0) {
+                    workflows.addAll(vnfWorkflows);
+                }
+            }
 
-        List<Workflow> nativeWorkflows = catalogDbClient.findWorkflowBySource(NATIVE_WORKFLOW);
-        if (nativeWorkflows != null && !nativeWorkflows.isEmpty()) {
-            workflows.addAll(nativeWorkflows);
+            // 2. query workflow specifications for given pnfModelVersionId if need.
+            if (pnfModelVersionId != null) {
+                List<Workflow> pnfWorkflows = queryWorkflowSpecificationsForPnf(pnfModelVersionId);
+                logger.debug("Retrieved " + pnfWorkflows.size() + " workflows for given pnfModelVerionId.");
+                if (pnfWorkflows.size() > 0) {
+                    workflows.addAll(pnfWorkflows);
+                }
+            }
         }
 
-        WorkflowSpecifications workflowSpecifications = mapWorkflowsToWorkflowSpecifications(workflows);
+        // Deduplication
+        List<Workflow> retWorkflows = workflows.stream()
+                .collect(Collectors.collectingAndThen(
+                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Workflow::getArtifactUUID))),
+                        ArrayList::new));
+
+        WorkflowSpecifications workflowSpecifications = mapWorkflowsToWorkflowSpecifications(retWorkflows);
 
         String jsonResponse;
         try {
@@ -239,4 +260,24 @@ public class WorkflowSpecificationsHandler {
         }
         return validationList;
     }
+
+    private List<Workflow> queryWorkflowSpecificationsForAll() {
+        List<Workflow> workflows = catalogDbClient.findWorkflowBySource(NATIVE_WORKFLOW);
+        return workflows;
+    }
+
+    private List<Workflow> queryWorkflowSpecificationsForVnf(String vnfModelVersionId) {
+        List<Workflow> workflows = catalogDbClient.findWorkflowByVnfModelUUID(vnfModelVersionId);
+
+        List<Workflow> nativeWorkflows = catalogDbClient.findWorkflowBySource(NATIVE_WORKFLOW);
+        if (!nativeWorkflows.isEmpty()) {
+            workflows.addAll(nativeWorkflows);
+        }
+        return workflows;
+    }
+
+    private List<Workflow> queryWorkflowSpecificationsForPnf(String pnfModelVersionId) {
+        List<Workflow> workflows = catalogDbClient.findWorkflowByPnfModelUUID(pnfModelVersionId);
+        return workflows;
+    }
 }
index 0beab1b..7af92cb 100644 (file)
@@ -68,7 +68,7 @@ public class WorkflowSpecificationsHandlerTest extends BaseTest {
     private final String basePath = "onap/so/infra/workflowSpecifications/v1/workflows";
 
     @Test
-    public void queryWorkflowSpecifications_Test_Success()
+    public void queryWorkflowSpecificationsByVnfModelUUID_Test_Success()
             throws ParseException, JSONException, JsonParseException, JsonMappingException, IOException {
 
         HttpHeaders headers = new HttpHeaders();
@@ -77,7 +77,7 @@ public class WorkflowSpecificationsHandlerTest extends BaseTest {
         HttpEntity<String> entity = new HttpEntity<String>(null, headers);
 
         wireMockServer.stubFor(get(urlMatching(
-                "/workflow/search/findWorkflowByModelUUID[?]vnfResourceModelUUID=b5fa707a-f55a-11e7-a796-005056856d52"))
+                "/workflow/search/findWorkflowByVnfModelUUID[?]vnfResourceModelUUID=b5fa707a-f55a-11e7-a796-005056856d52"))
                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
                                 .withBody(getWiremockResponseForCatalogdb("WorkflowSpecificationsQuery_Response.json"))
                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
@@ -324,6 +324,52 @@ public class WorkflowSpecificationsHandlerTest extends BaseTest {
         assertThat(expectedResult, sameBeanAs(workflowSpecifications).ignoring(WorkflowInputParameter.class));
     }
 
+    @Test
+    public void queryWorkflowSpecificationsByPnfModelUUID_Test_Success()
+            throws ParseException, JSONException, JsonParseException, JsonMappingException, IOException {
+
+        HttpHeaders headers = new HttpHeaders();
+        headers.set("Accept", MediaType.APPLICATION_JSON);
+        headers.set("Content-Type", MediaType.APPLICATION_JSON);
+        HttpEntity<String> entity = new HttpEntity<String>(null, headers);
+
+        wireMockServer.stubFor(get(urlMatching(
+                "/workflow/search/findWorkflowByPnfModelUUID[?]pnfResourceModelUUID=f2d1f2b2-88bb-49da-b716-36ae420ccbff"))
+                        .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+                                .withBody(getWiremockResponseForCatalogdb(
+                                        "WorkflowSpecificationsForPnfQuery_Response.json"))
+                                .withStatus(org.apache.http.HttpStatus.SC_OK)));
+
+        wireMockServer.stubFor(get(urlMatching("/workflow/4/workflowActivitySpecSequence"))
+                .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+                        .withBody(getWiremockResponseForCatalogdb("Empty_workflowActivitySpecSequence_Response.json"))
+                        .withStatus(org.apache.http.HttpStatus.SC_OK)));
+
+        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(basePath))
+                .queryParam("pnfModelVersionId", "f2d1f2b2-88bb-49da-b716-36ae420ccbff");
+
+        ResponseEntity<String> response =
+                restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class);
+
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
+
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+
+        WorkflowSpecifications expectedResponse = mapper.readValue(
+                new String(Files.readAllBytes(
+                        Paths.get("src/test/resources/__files/catalogdb/WorkflowSpecificationsForPnf.json"))),
+                WorkflowSpecifications.class);
+        WorkflowSpecifications realResponse = mapper.readValue(response.getBody(), WorkflowSpecifications.class);
+
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
+        assertThat(expectedResponse, sameBeanAs(realResponse));
+        assertEquals("application/json", response.getHeaders().get(HttpHeaders.CONTENT_TYPE).get(0));
+        assertEquals("0", response.getHeaders().get("X-MinorVersion").get(0));
+        assertEquals("0", response.getHeaders().get("X-PatchVersion").get(0));
+        assertEquals("1.0.0", response.getHeaders().get("X-LatestVersion").get(0));
+    }
+
     private String getWiremockResponseForCatalogdb(String file) {
         try {
             File resource = ResourceUtils.getFile("classpath:__files/catalogdb/" + file);
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/catalogdb/Empty_workflowActivitySpecSequence_Response.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/catalogdb/Empty_workflowActivitySpecSequence_Response.json
new file mode 100644 (file)
index 0000000..89675e8
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "_embedded": {
+    "workflowActivitySpecSequence": []
+  }
+}
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/catalogdb/WorkflowSpecificationsForPnf.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/catalogdb/WorkflowSpecificationsForPnf.json
new file mode 100644 (file)
index 0000000..257b9dc
--- /dev/null
@@ -0,0 +1,20 @@
+{
+    "workflowSpecificationList": [
+        {
+            "workflowSpecification": {
+                "artifactInfo": {
+                    "artifactType": "workflow",
+                    "artifactUuid": "b2fd5627-55e4-4f4f-8064-9e6f443e9152",
+                    "artifactName": "DummyPnfWorkflow",
+                    "artifactVersion": "1.0",
+                    "artifactDescription": "Dummy Pnf Workflow to test custom Pnf workflow",
+                    "workflowName": "Dummy Pnf Workflow",
+                    "operationName": "DummyPnfWorkflow",
+                    "workflowSource": "native",
+                    "workflowResourceTarget": "pnf"
+                },
+                "workflowInputParameters": []
+            }
+        }
+    ]
+}
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/catalogdb/WorkflowSpecificationsForPnfQuery_Response.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/catalogdb/WorkflowSpecificationsForPnfQuery_Response.json
new file mode 100644 (file)
index 0000000..a4e1bbc
--- /dev/null
@@ -0,0 +1,41 @@
+{
+    "_embedded": {
+        "workflow": [
+            {
+                "artifactChecksum": "MANUAL RECORD",
+                "artifactName": "DummyPnfWorkflow",
+                "artifactUUID": "b2fd5627-55e4-4f4f-8064-9e6f443e9152",
+                "body": null,
+                "created": "2020-02-18T08:28:15.000+0000",
+                "description": "Dummy Pnf Workflow to test custom Pnf workflow",
+                "id": 4,
+                "name": "Dummy Pnf Workflow",
+                "operationName": "DummyPnfWorkflow",
+                "pnfResourceWorkflow": null,
+                "resourceTarget": "pnf",
+                "source": "native",
+                "timeoutMinutes": null,
+                "version": 1.0,
+                "_links": {
+                    "self": {
+                        "href": "http://localhost:8090/workflow/search/findWorkflowByPnfModelUUID?pnfResourceModelUUID=f2d1f2b2-88bb-49da-b716-36ae420ccbff"
+                    },
+                    "workflow": {
+                        "href": "http://localhost:8090/workflow/4"
+                    },
+                    "workflowActivitySpecSequence": {
+                        "href": "http://localhost:8090/workflow/4/workflowActivitySpecSequence"
+                    }
+                }
+            }
+        ]
+    },
+    "_links": {
+        "self": {
+            "href": "http://localhost:8090/workflow/search/findWorkflowByPnfModelUUID?pnfResourceModelUUID=f2d1f2b2-88bb-49da-b716-36ae420ccbff"
+        },
+        "workflowActivitySpecSequence": {
+            "href": "http://localhost:8090/workflow/4/workflowActivitySpecSequence"
+        }
+    }
+}
index 161ca2a..4090e19 100644 (file)
@@ -201,7 +201,7 @@ public class CatalogDbClient {
     private String findServiceByServiceInstanceId = "/findServiceByServiceInstanceId";
     private String findPnfResourceCustomizationByModelUuid = "/findPnfResourceCustomizationByModelUuid";
     private String findWorkflowByArtifactUUID = "/findByArtifactUUID";
-    private String findWorkflowByModelUUID = "/findWorkflowByModelUUID";
+    private String findWorkflowByVnfModelUUID = "/findWorkflowByVnfModelUUID";
     private String findWorkflowByPnfModelUUID = "/findWorkflowByPnfModelUUID";
     private String findWorkflowBySource = "/findBySource";
     private String findVnfResourceCustomizationByModelUuid = "/findVnfResourceCustomizationByModelUuid";
@@ -339,7 +339,7 @@ public class CatalogDbClient {
                 endpoint + PNF_RESOURCE_CUSTOMIZATION + SEARCH + findPnfResourceCustomizationByModelUuid;
 
         findWorkflowByArtifactUUID = endpoint + WORKFLOW + SEARCH + findWorkflowByArtifactUUID;
-        findWorkflowByModelUUID = endpoint + WORKFLOW + SEARCH + findWorkflowByModelUUID;
+        findWorkflowByVnfModelUUID = endpoint + WORKFLOW + SEARCH + findWorkflowByVnfModelUUID;
         findWorkflowByPnfModelUUID = endpoint + WORKFLOW + SEARCH + findWorkflowByPnfModelUUID;
         findWorkflowBySource = endpoint + WORKFLOW + SEARCH + findWorkflowBySource;
 
@@ -1049,8 +1049,8 @@ public class CatalogDbClient {
                 .queryParam(ARTIFACT_UUID, artifactUUID).build().toString()));
     }
 
-    public List<Workflow> findWorkflowByModelUUID(String vnfResourceModelUUID) {
-        return this.getMultipleResources(workflowClient, getUri(UriBuilder.fromUri(findWorkflowByModelUUID)
+    public List<Workflow> findWorkflowByVnfModelUUID(String vnfResourceModelUUID) {
+        return this.getMultipleResources(workflowClient, getUri(UriBuilder.fromUri(findWorkflowByVnfModelUUID)
                 .queryParam(VNF_RESOURCE_MODEL_UUID, vnfResourceModelUUID).build().toString()));
     }
 
index f1b3993..91c6940 100644 (file)
@@ -37,14 +37,14 @@ public interface WorkflowRepository extends JpaRepository<Workflow, Integer> {
      * Used to fetch the @{link Workflow} by the Model UUID.
      *
      * This operation is required by {@link org.onap.so.db.catalog.client.CatalogDbClient} to provide Workflow based on
-     * model UUID without projection.
+     * vnf model UUID without projection.
      *
      * @param vnfResourceModelUUID UUID
      * @return List of Workflow
      */
     @Query(value = "select b.* from vnf_resource_to_workflow a join workflow b where a.WORKFLOW_ID = b.ID and a.VNF_RESOURCE_MODEL_UUID = ?1",
             nativeQuery = true)
-    List<Workflow> findWorkflowByModelUUID(String vnfResourceModelUUID);
+    List<Workflow> findWorkflowByVnfModelUUID(String vnfResourceModelUUID);
 
     /**
      * Used to fetch the @{link Workflow} by the Pnf Model UUID.
index 7d1b8d0..b07e82b 100644 (file)
@@ -36,7 +36,8 @@ public class WorkflowRepositoryTest extends BaseTest {
 
     @Test
     public void findByVnfResourceModelUUIDTest() throws Exception {
-        List<Workflow> workflows = workflowRepository.findWorkflowByModelUUID("ff2ae348-214a-11e7-93ae-92361f002671");
+        List<Workflow> workflows =
+                workflowRepository.findWorkflowByVnfModelUUID("ff2ae348-214a-11e7-93ae-92361f002671");
 
         Assert.assertTrue(workflows != null);
         Assert.assertTrue(workflows.size() != 0);
index 44d94df..c78979e 100644 (file)
                     <dependencySets>
                       <dependencySet>
                         <includes>
-                          <include>org.onap.so:so-simulator</include>
+                          <include>org.onap.so.simulator:so-simulator</include>
                         </includes>
                         <outputFileNameMapping>app.jar</outputFileNameMapping>
                       </dependencySet>
       <version>${project.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.onap.so</groupId>
+      <groupId>org.onap.so.simulator</groupId>
       <artifactId>so-simulator</artifactId>
       <version>${project.version}</version>
     </dependency>
diff --git a/pom.xml b/pom.xml
index 9f453d4..0955338 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -32,8 +32,8 @@
     <module>cloudify-client</module>
     <module>cxf-logging</module>
     <module>so-monitoring</module>
-    <module>packages</module>
     <module>so-simulator</module>
+    <module>packages</module>
   </modules>
   <properties>
     <project.mso.base.folder>.</project.mso.base.folder>
     <sonar.language>java</sonar.language>
     <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
     <sonar.surefire.reportsPath>${project.build.directory}/surefire-reports</sonar.surefire.reportsPath>
-    <sonar.jacoco.reportPath>${project.build.directory}/code-coverage/jacoco-ut.exec</sonar.jacoco.reportPath>
+    <sonar.coverage.jacoco.xmlReportPaths>${project.reporting.outputDirectory}/jacoco-ut/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
     <!--sonar.jacoco.itReportPath>${project.mso.base.folder}/packages/arquillian-unit-tests/target/mso-automated-tests/jacoco-it.exec</sonar.jacoco.itReportPath -->
     <sonar.jacoco.reportMissing.force.zero>true</sonar.jacoco.reportMissing.force.zero>
     <sonar.projectVersion>${project.version}</sonar.projectVersion>
     <sonar.cpd.exclusions>**/*</sonar.cpd.exclusions>
-    <jacoco.version>0.7.5.201505241946</jacoco.version>
+    <jacoco.version>0.8.5</jacoco.version>
     <org.apache.maven.user-settings />
     <openstack.version>1.5.1</openstack.version>
     <maven.build.timestamp.format>yyyyMMdd'T'HHmm</maven.build.timestamp.format>
         </configuration>
       </plugin>
       <plugin>
-        <groupId>org.jacoco</groupId>
-        <artifactId>jacoco-maven-plugin</artifactId>
-        <version>${jacoco.version}</version>
-        <executions>
-          <execution>
-            <id>default-prepare-agent</id>
-            <goals>
-              <goal>prepare-agent</goal>
-            </goals>
-          </execution>
-          <execution>
-            <id>default-report</id>
-            <goals>
-              <goal>report</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
+       <groupId>org.jacoco</groupId>
+       <artifactId>jacoco-maven-plugin</artifactId>
+       <version>${jacoco.version}</version>
+       <executions>
+         <execution>
+            <id>prepare-agent</id>
+             <goals>
+              <goal>prepare-agent</goal>
+            </goals>
+         </execution>
+         <execution>
+            <id>report</id>
+            <goals>
+               <goal>report</goal>
+            </goals>
+            <configuration>
+               <dataFile>${project.build.directory}/code-coverage/jacoco.exec</dataFile>
+               <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
+            </configuration>
+          </execution>
+       </executions>
+      </plugin> 
       <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>license-maven-plugin</artifactId>