From 5223788222fd78c9e50680471eb0529361645230 Mon Sep 17 00:00:00 2001 From: Elena Kuleshov Date: Mon, 15 Apr 2019 22:59:18 -0400 Subject: Use distribution json for workflow install Use distribution json for workflow install Change-Id: I2eec3700d0ba92794b6ca11bd43683d91fb480ee Issue-ID: SO-1726 Signed-off-by: Kuleshov, Elena --- .../client/test/rest/ASDCRestInterfaceTest.java | 63 +++++++++++- .../so/asdc/installer/bpmn/BpmnInstallerTest.java | 4 +- .../asdc/installer/bpmn/WorkflowResourceTest.java | 109 +++++++++++++++++++++ .../src/test/resources/application-test.yaml | 1 + .../WorkflowBpmn/TestBpmnFromSDC.bpmn | 44 +++++++++ .../WorkflowBpmn/TestWF2-1_0.bpmn | 16 +++ .../testvf0/artifacts/TestWF-1_0.bpmn | 16 +++ .../testvf0/artifacts/TestWF-2_0.bpmn | 20 ++++ .../testvf0/artifacts/TestWF2-1_0.bpmn | 16 +++ .../service-Testparentservice-csar.csar | Bin 0 -> 48128 bytes .../WorkflowBpmn/workflow-distribution.json | 76 ++++++++++++++ 11 files changed, 361 insertions(+), 4 deletions(-) create mode 100644 asdc-controller/src/test/java/org/onap/so/asdc/installer/bpmn/WorkflowResourceTest.java create mode 100644 asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/TestBpmnFromSDC.bpmn create mode 100644 asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/TestWF2-1_0.bpmn create mode 100644 asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/sdc/v1/catalog/services/Testparentservice/1.0/resourceInstances/testvf0/artifacts/TestWF-1_0.bpmn create mode 100644 asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/sdc/v1/catalog/services/Testparentservice/1.0/resourceInstances/testvf0/artifacts/TestWF-2_0.bpmn create mode 100644 asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/sdc/v1/catalog/services/Testparentservice/1.0/resourceInstances/testvf0/artifacts/TestWF2-1_0.bpmn create mode 100644 asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/service-Testparentservice-csar.csar create mode 100644 asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/workflow-distribution.json (limited to 'asdc-controller/src/test') diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/client/test/rest/ASDCRestInterfaceTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/rest/ASDCRestInterfaceTest.java index 2e5ad13c21..ac107f6449 100644 --- a/asdc-controller/src/test/java/org/onap/so/asdc/client/test/rest/ASDCRestInterfaceTest.java +++ b/asdc-controller/src/test/java/org/onap/so/asdc/client/test/rest/ASDCRestInterfaceTest.java @@ -22,12 +22,15 @@ package org.onap.so.asdc.client.test.rest; import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching; import static com.shazam.shazamcrest.MatcherAssert.assertThat; import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import java.io.File; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.HashSet; import java.util.Set; import javax.transaction.Transactional; @@ -43,9 +46,11 @@ import org.onap.so.asdc.client.test.emulators.NotificationDataImpl; import org.onap.so.db.catalog.beans.AllottedResource; import org.onap.so.db.catalog.beans.AllottedResourceCustomization; import org.onap.so.db.catalog.beans.Service; +import org.onap.so.db.catalog.beans.Workflow; import org.onap.so.db.catalog.data.repository.AllottedResourceRepository; import org.onap.so.db.catalog.data.repository.NetworkResourceRepository; import org.onap.so.db.catalog.data.repository.ServiceRepository; +import org.onap.so.db.catalog.data.repository.WorkflowRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.boot.web.server.LocalServerPort; @@ -66,6 +71,9 @@ public class ASDCRestInterfaceTest extends BaseTest { @Autowired private NetworkResourceRepository networkRepo; + @Autowired + private WorkflowRepository workflowRepo; + @Autowired private ASDCRestInterface asdcRestInterface; @@ -97,6 +105,10 @@ public class ASDCRestInterfaceTest extends BaseTest { wireMockServer.stubFor(post(urlPathMatching("/aai/.*")) .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json"))); + wireMockServer.stubFor(post(urlPathMatching("/v1.0/activity-spec")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withStatus(org.springframework.http.HttpStatus.ACCEPTED.value()))); + ObjectMapper mapper = new ObjectMapper(); NotificationDataImpl request = mapper.readValue(new File("src/test/resources/resource-examples/allottedresource/notif-portm.json"), @@ -146,6 +158,10 @@ public class ASDCRestInterfaceTest extends BaseTest { wireMockServer.stubFor(post(urlPathMatching("/aai/.*")) .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json"))); + wireMockServer.stubFor(post(urlPathMatching("/v1.0/activity-spec")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withStatus(org.springframework.http.HttpStatus.ACCEPTED.value()))); + ObjectMapper mapper = new ObjectMapper(); NotificationDataImpl request = mapper.readValue( new File("src/test/resources/resource-examples/vFW/notification.json"), NotificationDataImpl.class); @@ -175,16 +191,59 @@ public class ASDCRestInterfaceTest extends BaseTest { assertEquals(expectedService.getModelName(), actualService.getModelName()); } + @Test + @Transactional + public void testWorkflowDistribution() throws Exception { + + wireMockServer.stubFor(post(urlPathMatching("/aai/.*")) + .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json"))); + + wireMockServer.stubFor(post(urlPathMatching("/v1.0/activity-spec")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withStatus(org.springframework.http.HttpStatus.ACCEPTED.value()))); + + wireMockServer.stubFor( + post(urlPathEqualTo("/sobpmnengine/deployment/create")).willReturn(aResponse().withStatus(200))); + + ObjectMapper mapper = new ObjectMapper(); + NotificationDataImpl request = mapper.readValue( + new File("src/test/resources/resource-examples/WorkflowBpmn/workflow-distribution.json"), + NotificationDataImpl.class); + headers.add("resource-location", "src/test/resources/resource-examples/WorkflowBpmn/"); + HttpEntity entity = new HttpEntity(request, headers); + + ResponseEntity response = restTemplate.exchange(createURLWithPort("test/treatNotification/v1"), + HttpMethod.POST, entity, String.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + + Workflow actualResponse = workflowRepo.findByArtifactUUID("a90f8eaa-7c20-422f-8c81-aacbca6fb9e7"); + + if (actualResponse == null) + throw new Exception("No Workflow Written to database"); + + String expectedBody = new String( + Files.readAllBytes(Paths.get("src/test/resources/resource-examples/WorkflowBpmn/TestWF2-1_0.bpmn"))); + assertEquals(actualResponse.getArtifactChecksum(), "ZjUzNjg1NDMyMTc4MWJmZjFlNDcyOGQ0Zjc1YWQwYzQ\u003d"); + assertEquals(actualResponse.getArtifactName(), "TestWF2-1_0.bpmn"); + assertEquals(actualResponse.getDescription(), "Workflow Artifact Description"); + assertEquals(actualResponse.getBody(), expectedBody); + + Workflow shouldNotBeFound = workflowRepo.findByArtifactUUID("f27066a1-c3a7-4672-b02e-1251b74b7b71"); + assertNull(shouldNotBeFound); + } + @Test public void invokeASDCStatusDataNullTest() { String request = ""; + wireMockServer.stubFor(post(urlPathMatching("/v1.0/activity-spec")) + .willReturn(aResponse().withHeader("Content-Type", "application/json") + .withStatus(org.springframework.http.HttpStatus.ACCEPTED.value()))); Response response = asdcRestInterface.invokeASDCStatusData(request); assertNull(response); } - - protected String createURLWithPort(String uri) { return "http://localhost:" + port + uri; } diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/installer/bpmn/BpmnInstallerTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/installer/bpmn/BpmnInstallerTest.java index 6efb04fc35..7071a68a23 100644 --- a/asdc-controller/src/test/java/org/onap/so/asdc/installer/bpmn/BpmnInstallerTest.java +++ b/asdc-controller/src/test/java/org/onap/so/asdc/installer/bpmn/BpmnInstallerTest.java @@ -81,7 +81,7 @@ public class BpmnInstallerTest { public void buildMimeMultiPart_Test() throws Exception { Path tempFilePath = Paths.get(tempDirectoryPath.toAbsolutePath().toString(), "TestBB.bpmn"); Files.createFile(tempFilePath); - HttpEntity entity = bpmnInstaller.buildMimeMultipart("TestBB.bpmn"); + HttpEntity entity = bpmnInstaller.buildMimeMultipart("TestBB.bpmn", ""); String mimeMultipartBodyFilePath = "src/test/resources" + "/mime-multipart-body.txt"; File mimeMultipartBody = new File(mimeMultipartBodyFilePath); @@ -99,7 +99,7 @@ public class BpmnInstallerTest { HttpClient httpClient = mock(HttpClient.class); doReturn(response).when(httpClient).execute(any(HttpPost.class)); bpmnInstallerSpy.installBpmn(TEST_CSAR); - verify(bpmnInstallerSpy, times(1)).sendDeploymentRequest(anyString()); + verify(bpmnInstallerSpy, times(1)).sendDeploymentRequest(anyString(), anyString()); } @Test diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/installer/bpmn/WorkflowResourceTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/installer/bpmn/WorkflowResourceTest.java new file mode 100644 index 0000000000..e655245c31 --- /dev/null +++ b/asdc-controller/src/test/java/org/onap/so/asdc/installer/bpmn/WorkflowResourceTest.java @@ -0,0 +1,109 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Modifications Copyright (c) 2019 Samsung + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.asdc.installer.bpmn; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import javax.transaction.Transactional; +import org.apache.commons.io.IOUtils; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.ProtocolVersion; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.message.BasicHttpResponse; +import org.apache.http.message.BasicStatusLine; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.onap.sdc.api.notification.IArtifactInfo; + +@Transactional +public class WorkflowResourceTest { + + private WorkflowResource workflowResource = new WorkflowResource(); + + private static final String TEST_CSAR = "src/test/resources/resource-examples/WorkflowBpmn/service-CxSvc-csar.csar"; + private Path tempDirectoryPath; + + @Test + public void getActivityNameList_Test() throws Exception { + String bpmnContent = new String(Files + .readAllBytes(Paths.get("src/test/resources/resource-examples/WorkflowBpmn/TestBpmnFromSDC.bpmn"))); + List activityNames = workflowResource.getActivityNameList(bpmnContent); + assertEquals("VNFSetInMaintFlagActivity", activityNames.get(0)); + } + + @Test + public void getWorkflowNameStandard_Test() { + String workflowName = workflowResource.getWorkflowNameFromArtifactName("TestWF2-1_0.bpmn"); + assertEquals("TestWF2", workflowName); + } + + @Test + public void getWorkflowNameNoVersion_Test() { + String workflowName = workflowResource.getWorkflowNameFromArtifactName("TestWF2.bpmn"); + assertEquals("TestWF2", workflowName); + } + + @Test + public void getWorkflowNameNoSuffix_Test() { + String workflowName = workflowResource.getWorkflowNameFromArtifactName("TestWF2-1_0"); + assertEquals("TestWF2", workflowName); + } + + @Test + public void getWorkflowVersionStandard_Test() { + Double workflowVersion = workflowResource.getWorkflowVersionFromArtifactName("TestWF2-1_0.bpmn"); + assertTrue(workflowVersion == 1.0); + } + + @Test + public void getWorkflowVersionNoVersion_Test() { + Double workflowVersion = workflowResource.getWorkflowVersionFromArtifactName("TestWF2.bpmn"); + assertNull(workflowVersion); + } + + @Test + public void getWorkflowVersionNoSuffix_Test() { + Double workflowVersion = workflowResource.getWorkflowVersionFromArtifactName("TestWF2-1_0"); + assertTrue(workflowVersion == 1.0); + } + +} diff --git a/asdc-controller/src/test/resources/application-test.yaml b/asdc-controller/src/test/resources/application-test.yaml index ec536491a1..9fa20550db 100644 --- a/asdc-controller/src/test/resources/application-test.yaml +++ b/asdc-controller/src/test/resources/application-test.yaml @@ -66,6 +66,7 @@ mso: db: spring: endpoint: "http://localhost:" + camundaURL: http://localhost:${wiremock.server.port}/ db: auth: Basic YnBlbDptc28tZGItMTUwNyE= site-name: siteName diff --git a/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/TestBpmnFromSDC.bpmn b/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/TestBpmnFromSDC.bpmn new file mode 100644 index 0000000000..f3a5c7cc68 --- /dev/null +++ b/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/TestBpmnFromSDC.bpmn @@ -0,0 +1,44 @@ + + + + + + + + SequenceFlow_1v7ptqz + + + + + + SequenceFlow_1v7ptqz + SequenceFlow_16i7mid + + + SequenceFlow_16i7mid + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/TestWF2-1_0.bpmn b/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/TestWF2-1_0.bpmn new file mode 100644 index 0000000000..11378cfbb6 --- /dev/null +++ b/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/TestWF2-1_0.bpmn @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/sdc/v1/catalog/services/Testparentservice/1.0/resourceInstances/testvf0/artifacts/TestWF-1_0.bpmn b/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/sdc/v1/catalog/services/Testparentservice/1.0/resourceInstances/testvf0/artifacts/TestWF-1_0.bpmn new file mode 100644 index 0000000000..4e21a47a27 --- /dev/null +++ b/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/sdc/v1/catalog/services/Testparentservice/1.0/resourceInstances/testvf0/artifacts/TestWF-1_0.bpmn @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/sdc/v1/catalog/services/Testparentservice/1.0/resourceInstances/testvf0/artifacts/TestWF-2_0.bpmn b/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/sdc/v1/catalog/services/Testparentservice/1.0/resourceInstances/testvf0/artifacts/TestWF-2_0.bpmn new file mode 100644 index 0000000000..e54d79aee4 --- /dev/null +++ b/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/sdc/v1/catalog/services/Testparentservice/1.0/resourceInstances/testvf0/artifacts/TestWF-2_0.bpmn @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/sdc/v1/catalog/services/Testparentservice/1.0/resourceInstances/testvf0/artifacts/TestWF2-1_0.bpmn b/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/sdc/v1/catalog/services/Testparentservice/1.0/resourceInstances/testvf0/artifacts/TestWF2-1_0.bpmn new file mode 100644 index 0000000000..11378cfbb6 --- /dev/null +++ b/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/sdc/v1/catalog/services/Testparentservice/1.0/resourceInstances/testvf0/artifacts/TestWF2-1_0.bpmn @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/service-Testparentservice-csar.csar b/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/service-Testparentservice-csar.csar new file mode 100644 index 0000000000..fe99318fe3 Binary files /dev/null and b/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/service-Testparentservice-csar.csar differ diff --git a/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/workflow-distribution.json b/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/workflow-distribution.json new file mode 100644 index 0000000000..9f49be5bbb --- /dev/null +++ b/asdc-controller/src/test/resources/resource-examples/WorkflowBpmn/workflow-distribution.json @@ -0,0 +1,76 @@ +{ + "distributionID": "48cc0f04-1d42-4fb4-a5ab-9fa62f8d64c1", + "serviceName": "TestParentService", + "serviceVersion": "1.0", + "serviceUUID": "2f55da47-c58a-453e-909f-172c94765fba", + "serviceDescription": "TestParentService", + "serviceInvariantUUID": "13b817ae-6388-40cf-9261-1619b607f1de", + "resources": [ + { + "resourceInstanceName": "TestVF 0", + "resourceName": "TestVF", + "resourceVersion": "1.0", + "resoucreType": "VF", + "resourceUUID": "5185253e-4bef-4eb4-bbf9-8c328c787ebd", + "resourceInvariantUUID": "ea8264db-3e24-4324-87cc-12c6903ed43d", + "resourceCustomizationUUID": "a959a3cb-4988-435c-9cb7-5a40ef2ef2ac", + "category": "Allotted Resource", + "subcategory": "Contrail Route", + "artifacts": [ + { + "artifactName": "TestWF2-1_0.bpmn", + "artifactType": "WORKFLOW", + "artifactURL": "/sdc/v1/catalog/services/Testparentservice/1.0/resourceInstances/testvf0/artifacts/TestWF2-1_0.bpmn", + "artifactChecksum": "ZjUzNjg1NDMyMTc4MWJmZjFlNDcyOGQ0Zjc1YWQwYzQ\u003d", + "artifactDescription": "Workflow Artifact Description", + "artifactTimeout": 120, + "artifactUUID": "a90f8eaa-7c20-422f-8c81-aacbca6fb9e7", + "artifactVersion": "1" + }, + { + "artifactName": "TestWF-1_0.bpmn", + "artifactType": "WORKFLOW", + "artifactURL": "/sdc/v1/catalog/services/Testparentservice/1.0/resourceInstances/testvf0/artifacts/TestWF-1_0.bpmn", + "artifactChecksum": "YzA4NDY3M2E3Njk3Y2FjMmViZjRlODIzNTY1NDY3MDY\u003d", + "artifactDescription": "Workflow Artifact Description", + "artifactTimeout": 120, + "artifactUUID": "f27066a1-c3a7-4672-b02e-1251b74b7b71", + "artifactVersion": "1" + }, + { + "artifactName": "TestWF-2_0.bpmn", + "artifactType": "WORKFLOW", + "artifactURL": "/sdc/v1/catalog/services/Testparentservice/1.0/resourceInstances/testvf0/artifacts/TestWF-2_0.bpmn", + "artifactChecksum": "MTE0MDA2ZGNjZmY3YWEyNzNlNjUwZDQ2OGU4YTM5ZjU\u003d", + "artifactDescription": "Workflow Artifact Description", + "artifactTimeout": 120, + "artifactUUID": "f51d2203-d1f5-43f1-9492-e59d12facb8f", + "artifactVersion": "1" + } + ] + } + ], + "serviceArtifacts": [ + { + "artifactName": "service-Testparentservice-template.yml", + "artifactType": "TOSCA_TEMPLATE", + "artifactURL": "/sdc/v1/catalog/services/Testparentservice/1.0/artifacts/service-Testparentservice-template.yml", + "artifactChecksum": "YWZlYWMwMjNkODBlYTI2MzZlNjg3YzEzODZiNzNkNTg\u003d", + "artifactDescription": "TOSCA representation of the asset", + "artifactTimeout": 0, + "artifactUUID": "8ec96c3f-d527-48bd-8dc5-1e7682bda676", + "artifactVersion": "1" + }, + { + "artifactName": "service-Testparentservice-csar.csar", + "artifactType": "TOSCA_CSAR", + "artifactURL": "service-Testparentservice-csar.csar", + "artifactChecksum": "MTc4OWU0MGRhOTE4OGZiM2JiMjM3YmI3NzI2YWZjNjI\u003d", + "artifactDescription": "TOSCA definition package of the asset", + "artifactTimeout": 0, + "artifactUUID": "8dac522d-8e00-4794-819e-88e559ebc170", + "artifactVersion": "1" + } + ], + "workloadContext": "Production" +} \ No newline at end of file -- cgit 1.2.3-korg