diff options
Diffstat (limited to 'bpmn/so-bpmn-tasks/src/test')
7 files changed, 885 insertions, 3 deletions
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/BaseIntegrationTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/BaseIntegrationTest.java index 3bb8fb70f2..43e4ce3ebd 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/BaseIntegrationTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/BaseIntegrationTest.java @@ -23,9 +23,11 @@ import java.io.IOException; import java.io.InputStream; import org.junit.Before; import org.junit.runner.RunWith; +import org.onap.so.bpmn.buildingblock.OofHomingV2; import org.onap.so.bpmn.buildingblock.SniroHomingV2; import org.onap.so.bpmn.common.data.TestDataSetup; import org.onap.so.client.appc.ApplicationControllerAction; +import org.onap.so.client.oof.OofClient; import org.onap.so.client.orchestration.SDNOHealthCheckResources; import org.onap.so.client.sdnc.SDNCClient; import org.onap.so.client.sniro.SniroClient; @@ -63,6 +65,12 @@ public abstract class BaseIntegrationTest extends TestDataSetup { @SpyBean protected SniroClient sniroClient; + @SpyBean + protected OofHomingV2 oofHoming; + + @SpyBean + protected OofClient oofClient; + @MockBean protected ApplicationControllerAction appCClient; diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/OofHomingV2IT.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/OofHomingV2IT.java new file mode 100644 index 0000000000..e066058796 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/OofHomingV2IT.java @@ -0,0 +1,594 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. & Intel Corp. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.bpmn.infrastructure.flowspecific.tasks; + +import com.fasterxml.jackson.core.JsonProcessingException; +import org.camunda.bpm.engine.delegate.BpmnError; +import org.json.JSONArray; +import org.json.JSONObject; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.onap.so.BaseIntegrationTest; +import org.onap.so.bpmn.servicedecomposition.bbobjects.AllottedResource; +import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer; +import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf; +import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance; +import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceProxy; +import org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBondingLink; +import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext; +import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestParameters; +import org.onap.so.bpmn.servicedecomposition.homingobjects.Candidate; +import org.onap.so.bpmn.servicedecomposition.homingobjects.CandidateType; +import org.onap.so.client.exception.BadResponseException; +import org.onap.so.client.oof.beans.OofRequest; +import org.skyscreamer.jsonassert.JSONAssert; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +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.urlEqualTo; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.isA; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +public class OofHomingV2IT extends BaseIntegrationTest { + + private ServiceInstance serviceInstance; + + private RequestContext requestContext; + + private Customer customer; + + private static final String RESOURCE_PATH = "__files/BuildingBlocks/OofHoming/"; + + + String mockResponse = + "{\"transactionId\": \"123456789\", \"requestId\": \"1234\", \"statusMessage\": \"homing request accepted\", \"requestStatus\": \"accepted\"}"; + + @Before + public void before() { + serviceInstance = setServiceInstance(); + customer = setCustomer(); + customer.setGlobalCustomerId("testCustomerId"); + customer.setSubscriberName("testCustomerName"); + customer.getServiceSubscription().getServiceInstances().add(serviceInstance); + customer.setCustomerLatitude("customerLatitude"); + customer.setCustomerLongitude("customerLongitude"); + + requestContext = setRequestContext(); + requestContext.setMsoRequestId("requestId"); + + RequestParameters params = new RequestParameters(); + params.setaLaCarte(false); + params.setSubscriptionServiceType("testSubscriptionServiceType"); + requestContext.setRequestParameters(params); + } + + public void beforeVpnBondingLink(String id) { + VpnBondingLink bondingLink = new VpnBondingLink(); + bondingLink.setVpnBondingLinkId("testVpnBondingId" + id); + bondingLink.getServiceProxies().add(setServiceProxy("1", "transport")); + ServiceProxy sp2 = setServiceProxy("2", "infrastructure"); + Candidate requiredCandidate = new Candidate(); + requiredCandidate.setIdentifierType(CandidateType.VNF_ID); + List<String> c = new ArrayList<String>(); + c.add("testVnfId"); + requiredCandidate.setIdentifiers(c); + sp2.addRequiredCandidates(requiredCandidate); + bondingLink.getServiceProxies().add(sp2); + serviceInstance.getVpnBondingLinks().add(bondingLink); + + } + + public void beforeAllottedResource() { + serviceInstance.getAllottedResources().add(setAllottedResource("1")); + serviceInstance.getAllottedResources().add(setAllottedResource("2")); + serviceInstance.getAllottedResources().add(setAllottedResource("3")); + } + + public void beforeVnf() { + setGenericVnf(); + } + + @Test + public void testCallOof_success_1VpnLink() throws BadResponseException, IOException { + beforeVpnBondingLink("1"); + + wireMockServer.stubFor(post(urlEqualTo("/api/oof/v1/placement")).willReturn( + aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(mockResponse))); + + oofHoming.callOof(execution); + + String request = readResourceFile(RESOURCE_PATH + "oofRequest1Vpn.json"); + request = request.replace("28080", wireMockPort); + + ArgumentCaptor<OofRequest> argument = ArgumentCaptor.forClass(OofRequest.class); + verify(oofClient, times(1)).postDemands(argument.capture()); + JSONAssert.assertEquals(request, argument.getValue().toJsonString(), false); + } + + @Test + public void testCallOof_success_3VpnLink() throws JsonProcessingException, BadResponseException { + beforeVpnBondingLink("1"); + beforeVpnBondingLink("2"); + beforeVpnBondingLink("3"); + + wireMockServer.stubFor(post(urlEqualTo("/api/oof/v1/placement")).willReturn( + aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(mockResponse))); + + oofHoming.callOof(execution); + + String request = readResourceFile(RESOURCE_PATH + "oofRequest3Vpn.json"); + request = request.replace("28080", wireMockPort); + + ArgumentCaptor<OofRequest> argument = ArgumentCaptor.forClass(OofRequest.class); + verify(oofClient, times(1)).postDemands(argument.capture()); + JSONAssert.assertEquals(request, argument.getValue().toJsonString(), false); + } + + @Test + public void testCallOof_success_3Allotteds() throws BadResponseException, JsonProcessingException { + beforeAllottedResource(); + + wireMockServer.stubFor(post(urlEqualTo("/api/oof/v1/placement")).willReturn( + aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(mockResponse))); + + oofHoming.callOof(execution); + + String request = readResourceFile(RESOURCE_PATH + "oofRequest3Ar.json"); + request = request.replace("28080", wireMockPort); + + ArgumentCaptor<OofRequest> argument = ArgumentCaptor.forClass(OofRequest.class); + verify(oofClient, times(1)).postDemands(argument.capture()); + JSONAssert.assertEquals(request, argument.getValue().toJsonString(), false); + } + + @Test + public void testCallOof_success_1Vnf() throws JsonProcessingException, BadResponseException { + beforeVnf(); + + wireMockServer.stubFor(post(urlEqualTo("/api/oof/v1/placement")).willReturn( + aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(mockResponse))); + + oofHoming.callOof(execution); + + ArgumentCaptor<OofRequest> argument = ArgumentCaptor.forClass(OofRequest.class); + verify(oofClient, times(1)).postDemands(argument.capture()); + // TODO assertEquals(request, argument.getValue().toJsonString()); + } + + @Test + public void testCallOof_success_3Allotteds1Vnf() throws JsonProcessingException, BadResponseException { + beforeAllottedResource(); + beforeVnf(); + + wireMockServer.stubFor(post(urlEqualTo("/api/oof/v1/placement")).willReturn( + aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(mockResponse))); + + oofHoming.callOof(execution); + + verify(oofClient, times(1)).postDemands(isA(OofRequest.class)); + } + + @Test + public void testProcessSolution_success_1VpnLink_1Solution() { + beforeVpnBondingLink("1"); + + JSONObject asyncResponse = new JSONObject(); + asyncResponse.put("transactionId", "transactionId").put("requestId", "testRequestId").put("requestState", + "completed"); + JSONArray solution1 = new JSONArray(); + solution1.put(new JSONObject().put("serviceResourceId", "testProxyId1") + .put("solution", + new JSONObject().put("identifierType", "serviceInstanceId").put("identifiers", + new JSONArray().put("testServiceInstanceId1"))) + .put("assignmentInfo", + new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "False")) + .put(new JSONObject().put("key", "cloudOwner").put("value", "aic")) + .put(new JSONObject().put("key", "vnfHostName").put("value", "testVnfHostName1")) + .put(new JSONObject().put("key", "aicClli").put("value", "testAicClli1")) + .put(new JSONObject().put("key", "aicVersion").put("value", "3")) + .put(new JSONObject().put("key", "vnfId").put("value", "testVnfId1")) + .put(new JSONObject().put("key", "cloudRegionId").put("value", "testSloudRegionId1")))); + solution1.put(new JSONObject().put("serviceResourceId", "testProxyId2") + .put("solution", + new JSONObject().put("identifierType", "serviceInstanceId").put("identifiers", + new JSONArray().put("testServiceInstanceId2"))) + .put("assignmentInfo", + new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "False")) + .put(new JSONObject().put("key", "cloudOwner").put("value", "aic")) + .put(new JSONObject().put("key", "primaryPnfName").put("value", "testPrimaryPnfName2")) + .put(new JSONObject().put("key", "aicClli").put("value", "testAicClli2")) + .put(new JSONObject().put("key", "aicVersion").put("value", "3")) + .put(new JSONObject().put("key", "secondaryPnfName").put("value", + "testSecondaryPnfName2")) + .put(new JSONObject().put("key", "cloudRegionId").put("value", "testSloudRegionId2")))); + + asyncResponse.put("solutions", new JSONObject().put("placementSolutions", new JSONArray().put(solution1)) + .put("licenseSolutions", new JSONArray())); + + oofHoming.processSolution(execution, asyncResponse.toString()); + + ServiceInstance si = + execution.getGeneralBuildingBlock().getCustomer().getServiceSubscription().getServiceInstances().get(0); + + assertFalse(si.getVpnBondingLinks().isEmpty()); + VpnBondingLink link = si.getVpnBondingLinks().get(0); + assertNotNull(link); + assertFalse(link.getServiceProxies().isEmpty()); + + assertEquals("testServiceInstanceId1", + link.getServiceProxy("testProxyId1").getServiceInstance().getServiceInstanceId()); + assertNotNull(link.getServiceProxy("testProxyId1").getServiceInstance().getSolutionInfo()); + assertEquals("testVnfHostName1", + link.getServiceProxy("testProxyId1").getServiceInstance().getVnfs().get(0).getVnfName()); + + assertEquals("testServiceInstanceId2", + link.getServiceProxy("testProxyId2").getServiceInstance().getServiceInstanceId()); + assertNotNull(link.getServiceProxy("testProxyId2").getServiceInstance().getSolutionInfo()); + assertFalse(link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().isEmpty()); + assertEquals("testPrimaryPnfName2", + link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(0).getPnfName()); + assertEquals("primary", link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(0).getRole()); + assertEquals("testSecondaryPnfName2", + link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(1).getPnfName()); + assertEquals("secondary", link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(1).getRole()); + } + + @Test + public void testProcessSolution_success_1VpnLink_2Solutions() { + beforeVpnBondingLink("1"); + + JSONObject asyncResponse = new JSONObject(); + asyncResponse.put("transactionId", "transactionId").put("requestId", "testRequestId").put("requestState", + "completed"); + JSONArray solution1 = new JSONArray(); + solution1.put(new JSONObject().put("serviceResourceId", "testProxyId1") + .put("solution", + new JSONObject().put("identifierType", "serviceInstanceId").put("identifiers", + new JSONArray().put("testServiceInstanceId1"))) + .put("assignmentInfo", + new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "False")) + .put(new JSONObject().put("key", "cloudOwner").put("value", "aic")) + .put(new JSONObject().put("key", "vnfHostName").put("value", "testVnfHostName1")) + .put(new JSONObject().put("key", "aicClli").put("value", "testAicClli1")) + .put(new JSONObject().put("key", "aicVersion").put("value", "3")) + .put(new JSONObject().put("key", "vnfId").put("value", "testVnfId1")) + .put(new JSONObject().put("key", "cloudRegionId").put("value", "testSloudRegionId1")))); + solution1.put(new JSONObject().put("serviceResourceId", "testProxyId2") + .put("solution", + new JSONObject().put("identifierType", "serviceInstanceId").put("identifiers", + new JSONArray().put("testServiceInstanceId2"))) + .put("assignmentInfo", + new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "False")) + .put(new JSONObject().put("key", "cloudOwner").put("value", "aic")) + .put(new JSONObject().put("key", "primaryPnfName").put("value", "testPrimaryPnfName2")) + .put(new JSONObject().put("key", "aicClli").put("value", "testAicClli2")) + .put(new JSONObject().put("key", "aicVersion").put("value", "3")) + .put(new JSONObject().put("key", "secondaryPnfName").put("value", + "testSecondaryPnfName2")) + .put(new JSONObject().put("key", "cloudRegionId").put("value", "testSloudRegionId2")))); + + JSONArray solution2 = new JSONArray(); + solution2.put(new JSONObject().put("serviceResourceId", "testProxyId1") + .put("solution", + new JSONObject().put("identifierType", "serviceInstanceId").put("identifiers", + new JSONArray().put("testServiceInstanceId3"))) + .put("assignmentInfo", + new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "False")) + .put(new JSONObject().put("key", "cloudOwner").put("value", "aic")) + .put(new JSONObject().put("key", "vnfHostName").put("value", "testVnfHostName3")) + .put(new JSONObject().put("key", "aicClli").put("value", "testAicClli3")) + .put(new JSONObject().put("key", "aicVersion").put("value", "3")) + .put(new JSONObject().put("key", "vnfId").put("value", "testVnfId3")) + .put(new JSONObject().put("key", "cloudRegionId").put("value", "testSloudRegionId3")))); + solution2.put(new JSONObject().put("serviceResourceId", "testProxyId2") + .put("solution", + new JSONObject().put("identifierType", "serviceInstanceId").put("identifiers", + new JSONArray().put("testServiceInstanceId4"))) + .put("assignmentInfo", + new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "False")) + .put(new JSONObject().put("key", "cloudOwner").put("value", "aic")) + .put(new JSONObject().put("key", "primaryPnfName").put("value", "testPrimaryPnfName4")) + .put(new JSONObject().put("key", "aicClli").put("value", "testAicClli4")) + .put(new JSONObject().put("key", "aicVersion").put("value", "3")) + .put(new JSONObject().put("key", "secondaryPnfName").put("value", + "testSecondaryPnfName4")) + .put(new JSONObject().put("key", "cloudRegionId").put("value", "testSloudRegionId4")))); + + asyncResponse.put("solutions", + new JSONObject().put("placementSolutions", new JSONArray().put(solution1).put(solution2)) + .put("licenseSolutions", new JSONArray())); + + oofHoming.processSolution(execution, asyncResponse.toString()); + + ServiceInstance si = + execution.getGeneralBuildingBlock().getCustomer().getServiceSubscription().getServiceInstances().get(0); + + assertFalse(si.getVpnBondingLinks().isEmpty()); + VpnBondingLink link = si.getVpnBondingLinks().get(0); + VpnBondingLink link2 = si.getVpnBondingLinks().get(1); + assertNotNull(link); + assertFalse(link.getServiceProxies().isEmpty()); + + assertEquals("testServiceInstanceId1", + link.getServiceProxy("testProxyId1").getServiceInstance().getServiceInstanceId()); + assertNotNull(link.getServiceProxy("testProxyId1").getServiceInstance().getSolutionInfo()); + assertEquals("testVnfHostName1", + link.getServiceProxy("testProxyId1").getServiceInstance().getVnfs().get(0).getVnfName()); + + assertEquals("testServiceInstanceId2", + link.getServiceProxy("testProxyId2").getServiceInstance().getServiceInstanceId()); + assertNotNull(link.getServiceProxy("testProxyId2").getServiceInstance().getSolutionInfo()); + assertFalse(link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().isEmpty()); + assertEquals("testPrimaryPnfName2", + link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(0).getPnfName()); + assertEquals("primary", link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(0).getRole()); + assertEquals("testSecondaryPnfName2", + link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(1).getPnfName()); + assertEquals("secondary", link.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(1).getRole()); + + assertNotNull(link2); + assertFalse(link2.getServiceProxies().isEmpty()); + + assertEquals("testServiceInstanceId3", + link2.getServiceProxy("testProxyId1").getServiceInstance().getServiceInstanceId()); + assertNotNull(link2.getServiceProxy("testProxyId1").getServiceInstance().getSolutionInfo()); + assertEquals("testVnfHostName3", + link2.getServiceProxy("testProxyId1").getServiceInstance().getVnfs().get(0).getVnfName()); + + assertEquals("testServiceInstanceId4", + link2.getServiceProxy("testProxyId2").getServiceInstance().getServiceInstanceId()); + assertNotNull(link2.getServiceProxy("testProxyId2").getServiceInstance().getSolutionInfo()); + assertFalse(link2.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().isEmpty()); + assertEquals("testPrimaryPnfName4", + link2.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(0).getPnfName()); + assertEquals("primary", link2.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(0).getRole()); + assertEquals("testSecondaryPnfName4", + link2.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(1).getPnfName()); + assertEquals("secondary", + link2.getServiceProxy("testProxyId2").getServiceInstance().getPnfs().get(1).getRole()); + + } + + @Test + public void testProcessSolution_success_3VpnLink_2Solutions() { + // TODO + } + + @Test + public void testProcessSolution_success_3Allotteds_1Solution() { + beforeAllottedResource(); + + JSONObject asyncResponse = new JSONObject(); + asyncResponse.put("transactionId", "transactionId").put("requestId", "testRequestId").put("requestState", + "completed"); + JSONArray solution1 = new JSONArray(); + solution1.put(new JSONObject().put("serviceResourceId", "testAllottedResourceId1") + .put("solution", + new JSONObject().put("identifierType", "serviceInstanceId").put("identifiers", + new JSONArray().put("testServiceInstanceId1"))) + .put("assignmentInfo", + new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "True")) + .put(new JSONObject().put("key", "cloudOwner").put("value", "aic")) + .put(new JSONObject().put("key", "vnfHostName").put("value", "testVnfHostName1")) + .put(new JSONObject().put("key", "aicClli").put("value", "testAicClli1")) + .put(new JSONObject().put("key", "aicVersion").put("value", "3")) + .put(new JSONObject().put("key", "vnfId").put("value", "testVnfId1")) + .put(new JSONObject().put("key", "cloudRegionId").put("value", "testCloudRegionId1")))); + solution1.put(new JSONObject().put("serviceResourceId", "testAllottedResourceId2") + .put("solution", + new JSONObject().put("identifierType", "serviceInstanceId").put("identifiers", + new JSONArray().put("testServiceInstanceId2"))) + .put("assignmentInfo", + new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "True")) + .put(new JSONObject().put("key", "cloudOwner").put("value", "aic")) + .put(new JSONObject().put("key", "vnfHostName").put("value", "testVnfHostName2")) + .put(new JSONObject().put("key", "aicClli").put("value", "testAicClli2")) + .put(new JSONObject().put("key", "aicVersion").put("value", "3")) + .put(new JSONObject().put("key", "vnfId").put("value", "testVnfId1")) + .put(new JSONObject().put("key", "cloudRegionId").put("value", "testCloudRegionId2")))); + solution1.put(new JSONObject().put("serviceResourceId", "testAllottedResourceId3") + .put("solution", + new JSONObject().put("identifierType", "cloudRegionId").put("identifiers", + new JSONArray().put("testCloudRegionId3"))) + .put("assignmentInfo", + new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "True")) + .put(new JSONObject().put("key", "cloudOwner").put("value", "aic")) + .put(new JSONObject().put("key", "aicClli").put("value", "testAicClli2")) + .put(new JSONObject().put("key", "aicVersion").put("value", "3")))); + + asyncResponse.put("solutions", new JSONObject().put("placementSolutions", new JSONArray().put(solution1)) + .put("licenseSolutions", new JSONArray())); + + oofHoming.processSolution(execution, asyncResponse.toString()); + + ServiceInstance si = + execution.getGeneralBuildingBlock().getCustomer().getServiceSubscription().getServiceInstances().get(0); + + assertFalse(si.getAllottedResources().isEmpty()); + AllottedResource ar = si.getAllottedResources().get(0); + assertNotNull(ar); + assertEquals("testServiceInstanceId1", ar.getParentServiceInstance().getServiceInstanceId()); + assertNotNull(ar.getParentServiceInstance().getSolutionInfo()); + assertEquals("testVnfHostName1", ar.getParentServiceInstance().getVnfs().get(0).getVnfName()); + + AllottedResource ar2 = si.getAllottedResources().get(1); + assertNotNull(ar2); + assertEquals("testServiceInstanceId2", ar2.getParentServiceInstance().getServiceInstanceId()); + assertNotNull(ar2.getParentServiceInstance().getSolutionInfo()); + assertEquals("testVnfHostName2", ar2.getParentServiceInstance().getVnfs().get(0).getVnfName()); + + AllottedResource ar3 = si.getAllottedResources().get(2); + assertNotNull(ar3); + assertNotNull(ar3.getParentServiceInstance().getSolutionInfo()); + assertEquals("testCloudRegionId3", + ar3.getParentServiceInstance().getSolutionInfo().getTargetedCloudRegion().getLcpCloudRegionId()); + } + + @Test + public void testProcessSolution_success_3Allotteds1Vnf_1Solution() { + beforeVnf(); + beforeAllottedResource(); + + JSONObject asyncResponse = new JSONObject(); + asyncResponse.put("transactionId", "transactionId").put("requestId", "testRequestId").put("requestState", + "completed"); + JSONArray solution1 = new JSONArray(); + JSONArray licenseSolution = new JSONArray(); + solution1.put(new JSONObject().put("serviceResourceId", "testAllottedResourceId1") + .put("solution", + new JSONObject().put("identifierType", "serviceInstanceId").put("identifiers", + new JSONArray().put("testServiceInstanceId1"))) + .put("assignmentInfo", + new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "True")) + .put(new JSONObject().put("key", "cloudOwner").put("value", "aic")) + .put(new JSONObject().put("key", "vnfHostName").put("value", "testVnfHostName1")) + .put(new JSONObject().put("key", "aicClli").put("value", "testAicClli1")) + .put(new JSONObject().put("key", "aicVersion").put("value", "3")) + .put(new JSONObject().put("key", "vnfId").put("value", "testVnfId1")) + .put(new JSONObject().put("key", "cloudRegionId").put("value", "testCloudRegionId1")))); + solution1.put(new JSONObject().put("serviceResourceId", "testAllottedResourceId2") + .put("solution", + new JSONObject().put("identifierType", "serviceInstanceId").put("identifiers", + new JSONArray().put("testServiceInstanceId2"))) + .put("assignmentInfo", + new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "True")) + .put(new JSONObject().put("key", "cloudOwner").put("value", "aic")) + .put(new JSONObject().put("key", "vnfHostName").put("value", "testVnfHostName2")) + .put(new JSONObject().put("key", "aicClli").put("value", "testAicClli2")) + .put(new JSONObject().put("key", "aicVersion").put("value", "3")) + .put(new JSONObject().put("key", "vnfId").put("value", "testVnfId1")) + .put(new JSONObject().put("key", "cloudRegionId").put("value", "testCloudRegionId2")))); + solution1.put(new JSONObject().put("serviceResourceId", "testAllottedResourceId3") + .put("solution", + new JSONObject().put("identifierType", "cloudRegionId").put("identifiers", + new JSONArray().put("testCloudRegionId3"))) + .put("assignmentInfo", + new JSONArray().put(new JSONObject().put("key", "isRehome").put("value", "True")) + .put(new JSONObject().put("key", "cloudOwner").put("value", "aic")) + .put(new JSONObject().put("key", "aicClli").put("value", "testAicClli2")) + .put(new JSONObject().put("key", "aicVersion").put("value", "3")))); + + licenseSolution.put(new JSONObject().put("serviceResourceId", "testVnfId1") + .put("entitlementPoolUUID", + new JSONArray().put("f1d563e8-e714-4393-8f99-cc480144a05e") + .put("j1d563e8-e714-4393-8f99-cc480144a05e")) + .put("licenseKeyGroupUUID", new JSONArray().put("s1d563e8-e714-4393-8f99-cc480144a05e") + .put("b1d563e8-e714-4393-8f99-cc480144a05e"))); + + asyncResponse.put("solutions", new JSONObject().put("placementSolutions", new JSONArray().put(solution1)) + .put("licenseSolutions", licenseSolution)); + + oofHoming.processSolution(execution, asyncResponse.toString()); + + ServiceInstance si = + execution.getGeneralBuildingBlock().getCustomer().getServiceSubscription().getServiceInstances().get(0); + + assertFalse(si.getAllottedResources().isEmpty()); + AllottedResource ar = si.getAllottedResources().get(0); + assertNotNull(ar); + assertEquals("testServiceInstanceId1", ar.getParentServiceInstance().getServiceInstanceId()); + assertNotNull(ar.getParentServiceInstance().getSolutionInfo()); + assertEquals("testVnfHostName1", ar.getParentServiceInstance().getVnfs().get(0).getVnfName()); + + AllottedResource ar2 = si.getAllottedResources().get(1); + assertNotNull(ar2); + assertEquals("testServiceInstanceId2", ar2.getParentServiceInstance().getServiceInstanceId()); + assertNotNull(ar2.getParentServiceInstance().getSolutionInfo()); + assertEquals("testVnfHostName2", ar2.getParentServiceInstance().getVnfs().get(0).getVnfName()); + + AllottedResource ar3 = si.getAllottedResources().get(2); + assertNotNull(ar3); + assertNotNull(ar3.getParentServiceInstance().getSolutionInfo()); + assertEquals("testCloudRegionId3", + ar3.getParentServiceInstance().getSolutionInfo().getTargetedCloudRegion().getLcpCloudRegionId()); + + GenericVnf vnf = si.getVnfs().get(0); + assertNotNull(vnf); + assertNotNull(vnf.getLicense()); + assertEquals(2, vnf.getLicense().getEntitlementPoolUuids().size()); + assertEquals("s1d563e8-e714-4393-8f99-cc480144a05e", vnf.getLicense().getLicenseKeyGroupUuids().get(0)); + + } + + @Test + public void testProcessSolution_success_1Vnf_1Solution() { + beforeVnf(); + + JSONObject asyncResponse = new JSONObject(); + asyncResponse.put("transactionId", "transactionId").put("requestId", "testRequestId").put("requestState", + "completed"); + JSONArray licenseSolution = new JSONArray(); + + licenseSolution.put(new JSONObject().put("serviceResourceId", "testVnfId1") + .put("entitlementPoolUUID", + new JSONArray().put("f1d563e8-e714-4393-8f99-cc480144a05e") + .put("j1d563e8-e714-4393-8f99-cc480144a05e")) + .put("licenseKeyGroupUUID", new JSONArray().put("s1d563e8-e714-4393-8f99-cc480144a05e") + .put("b1d563e8-e714-4393-8f99-cc480144a05e"))); + + asyncResponse.put("solutions", new JSONObject().put("licenseSolutions", licenseSolution)); + + oofHoming.processSolution(execution, asyncResponse.toString()); + + ServiceInstance si = + execution.getGeneralBuildingBlock().getCustomer().getServiceSubscription().getServiceInstances().get(0); + + GenericVnf vnf = si.getVnfs().get(0); + assertNotNull(vnf); + assertNotNull(vnf.getLicense()); + assertEquals(2, vnf.getLicense().getEntitlementPoolUuids().size()); + assertEquals(2, vnf.getLicense().getLicenseKeyGroupUuids().size()); + assertEquals("f1d563e8-e714-4393-8f99-cc480144a05e", vnf.getLicense().getEntitlementPoolUuids().get(0)); + assertEquals("s1d563e8-e714-4393-8f99-cc480144a05e", vnf.getLicense().getLicenseKeyGroupUuids().get(0)); + + + } + + @Test(expected = BpmnError.class) + public void testCallOof_error_0Resources() throws BadResponseException, JsonProcessingException { + + oofHoming.callOof(execution); + + verify(oofClient, times(0)).postDemands(isA(OofRequest.class)); + } + + @Test(expected = BpmnError.class) + public void testCallOof_error_badResponse() throws BadResponseException, JsonProcessingException { + beforeAllottedResource(); + + mockResponse = + "{\"transactionId\": \"123456789\", \"requestId\": \"1234\", \"statusMessage\": \"\", \"requestStatus\": \"failed\"}"; + wireMockServer.stubFor(post(urlEqualTo("/api/oof/v1/placement")).willReturn( + aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(mockResponse))); + + oofHoming.callOof(execution); + + verify(oofClient, times(1)).postDemands(isA(OofRequest.class)); + } + +} diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/oof/OofClientTestIT.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/oof/OofClientTestIT.java index ce7d557254..3ae0db627a 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/oof/OofClientTestIT.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/oof/OofClientTestIT.java @@ -27,6 +27,7 @@ import static org.junit.Assert.assertEquals; import org.junit.Test; import org.onap.so.BaseIntegrationTest; import org.onap.so.client.exception.BadResponseException; +import org.onap.so.client.oof.beans.LicenseInfo; import org.onap.so.client.oof.beans.ModelInfo; import org.onap.so.client.oof.beans.OofRequest; import org.onap.so.client.oof.beans.OofRequestParameters; @@ -36,6 +37,7 @@ import org.onap.so.client.oof.beans.RequestInfo; import org.onap.so.client.oof.beans.ResourceModelInfo; import org.onap.so.client.oof.beans.ServiceInfo; import org.onap.so.client.oof.beans.SubscriberInfo; +import org.skyscreamer.jsonassert.JSONAssert; import org.springframework.beans.factory.annotation.Autowired; import com.fasterxml.jackson.core.JsonProcessingException; import java.util.ArrayList; @@ -114,7 +116,7 @@ public class OofClientTestIT extends BaseIntegrationTest { oofRequest.setRequestInformation(requestInfo); oofRequest.setPlacementInformation(placementInfo); oofRequest.setServiceInformation(serviceInfo); - oofRequest.setLicenseInformation(""); + oofRequest.setLicenseInformation(new LicenseInfo()); wireMockServer.stubFor(post(urlEqualTo("/api/oof/v1/placement")).willReturn( aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(mockResponse))); @@ -122,7 +124,7 @@ public class OofClientTestIT extends BaseIntegrationTest { client.postDemands(oofRequest); String oofRequestOutput = oofRequest.toJsonString(); - assertEquals("{\n" + " \"requestInfo\" : {\n" + " \"transactionId\" : \"transactionId\",\n" + JSONAssert.assertEquals("{\n" + " \"requestInfo\" : {\n" + " \"transactionId\" : \"transactionId\",\n" + " \"requestId\" : \"requestId\",\n" + " \"callbackUrl\" : \"callBackUrl\",\n" + " \"sourceId\" : \"sourceId\",\n" + " \"requestType\" : \"requestType\",\n" + " \"numSolutions\" : 1,\n" + " \"optimizers\" : [ \"optimizer1\", \"optimizer2\" ],\n" @@ -147,7 +149,8 @@ public class OofClientTestIT extends BaseIntegrationTest { + " \"modelInvariantId\" : \"invarianteId\",\n" + " \"modelVersionId\" : \"versionId\",\n" + " \"modelName\" : \"modelName\",\n" + " \"modelVersion\" : \"version\",\n" + " \"modelCustomizationName\" : \"modelCustomizationName\"\n" + " }\n" + " } ]\n" - + " },\n" + " \"licenseInfo\" : \"\"\n" + "}", oofRequestOutput); + + " },\n" + " \"licenseInfo\" : { \n" + " \"licenseDemands\" : [ ]\n" + "}\n" + "}", + oofRequestOutput, false); } @Test diff --git a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest1Vpn.json b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest1Vpn.json new file mode 100644 index 0000000000..99ce7fb2bf --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest1Vpn.json @@ -0,0 +1,58 @@ +{ + "requestInfo":{ + "transactionId":"requestId", + "requestId":"requestId", + "callbackUrl":"http://localhost:28080/mso/WorkflowMesssage/OofResponse/requestId", + "sourceId":"mso", + "requestType":"create", + "numSolutions":1, + "optimizers":[ "placement" ], + "timeout":1800 + }, + "serviceInfo":{ + "serviceInstanceId":"testServiceInstanceId1", + "serviceName":"testServiceType1", + "modelInfo":{ + "modelInvariantId":"testModelInvariantUUID1", + "modelVersionId":"testModelUUID1", + "modelName":"testModelName1", + "modelVersion":"testModelVersion1" + } + }, + "placementInfo":{ + "requestParameters":{ + "customerLatitude":"customerLatitude", + "customerLongitude":"customerLongitude", + "customerName":"testCustomerName" + }, + "subscriberInfo":{ + "globalSubscriberId":"testCustomerId", + "subscriberName":"testCustomerName" + }, + "placementDemands":[ + { + "resourceModuleName":"testProxyInstanceName1", + "serviceResourceId":"testProxyId1", + "resourceModelInfo":{ + "modelInvariantId":"testProxyModelInvariantUuid1", + "modelVersionId":"testProxyModelUuid1", + "modelName":"testProxyModelName1", + "modelVersion":"testProxyModelVersion1" + } + }, + { + "resourceModuleName":"testProxyInstanceName2", + "serviceResourceId":"testProxyId2", + "resourceModelInfo":{ + "modelInvariantId":"testProxyModelInvariantUuid2", + "modelVersionId":"testProxyModelUuid2", + "modelName":"testProxyModelName2", + "modelVersion":"testProxyModelVersion2" + } + } + ] + }, + "licenseInfo":{ + "licenseDemands" : [ ] + } +} diff --git a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest1VpnOpt.json b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest1VpnOpt.json new file mode 100644 index 0000000000..d149b328df --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest1VpnOpt.json @@ -0,0 +1,61 @@ +{ + "requestInfo" : { + "transactionId" : "requestId", + "requestId" : "requestId", + "callbackUrl" : "http://localhost:28080/mso/WorkflowMesssage/OofResponse/requestId", + "sourceId" : "mso", + "requestType" : "create", + "numSolutions" : 1, + "optimizers" : [ "placement" ], + "timeout" : 1800 + }, + "serviceInfo" : { + "serviceInstanceId" : "serviceInstanceId", + "serviceName" : "serviceName", + "modelInfo" : { + "modelType" : "modelType-Service", + "modelInvariantId" : "modelInvariantId-Service", + "modelVersionId" : "modelVersionId-Service", + "modelName" : "modelName-Service", + "modelVersion" : "modelVersion-Service", + "modelCustomizationName" : "modelCustomizationName-Service" + } + }, + "placementInfo" : { + "requestParameters" : { + "customerLatitude" : "customerLatitude", + "customerLongitude" : "customerLongitude", + "customerName" : "customerName" + }, + "subscriberInfo" : { + "globalSubscriberId" : "globalSubscriberId", + "subscriberName" : "subscriberName" + }, + "placementDemands" : [ { + "serviceResourceId" : "testProxyId1", + "resourceModuleName" : "testProxyInstanceName1", + "resourceModelInfo" : { + "modelName" : "testProxyModelName1", + "modelVersionId" : "testProxyModelUuid1", + "modelVersion" : "testProxyModelVersion1", + "modelInvariantId" : "testProxyModelInvariantUuid1" + } + }, { + "serviceResourceId" : "testProxyId2", + "resourceModuleName" : "testProxyInstanceName2", + "resourceModelInfo" : { + "modelName" : "testProxyModelName2", + "modelVersionId" : "testProxyModelUuid2", + "modelVersion" : "testProxyModelVersion2", + "modelInvariantId" : "testProxyModelInvariantUuid2" + }, + "requiredCandidates" : [ { + "identifierType" : "vnfId", + "identifiers" : [ "testVnfId" ] + } ] + } ] + }, + "licenseInfo" : { + "licenseDemands" : [ ] + } +} diff --git a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest3Ar.json b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest3Ar.json new file mode 100644 index 0000000000..9b251aac9a --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest3Ar.json @@ -0,0 +1,67 @@ +{ + "requestInfo" : { + "transactionId" : "requestId", + "requestId" : "requestId", + "callbackUrl" : "http://localhost:28080/mso/WorkflowMesssage/OofResponse/requestId", + "sourceId" : "mso", + "requestType" : "create", + "numSolutions" : 1, + "optimizers" : [ "placement" ], + "timeout" : 1800 + }, + "serviceInfo" : { + "serviceInstanceId" : "testServiceInstanceId1", + "serviceName" : "testServiceType1", + "modelInfo" : { + "modelInvariantId" : "testModelInvariantUUID1", + "modelVersionId" : "testModelUUID1", + "modelName" : "testModelName1", + "modelVersion" : "testModelVersion1" + } + }, + "placementInfo" : { + "requestParameters": { + "customerLatitude": "customerLatitude", + "customerLongitude": "customerLongitude", + "customerName": "testCustomerName" + }, + "subscriberInfo": { + "globalSubscriberId" : "testCustomerId", + "subscriberName" : "testCustomerName" + }, + "placementDemands": [ + { + "serviceResourceId": "testAllottedResourceId1", + "resourceModuleName": "testAllottedModelInstanceName1", + "resourceModelInfo": { + "modelName": "testAllottedModelName1", + "modelVersionId": "testAllottedModelUuid1", + "modelVersion": "testAllottedModelVersion1", + "modelInvariantId": "testAllottedModelInvariantUuid1" + } + }, + { + "serviceResourceId": "testAllottedResourceId2", + "resourceModuleName": "testAllottedModelInstanceName2", + "resourceModelInfo": { + "modelName": "testAllottedModelName2", + "modelVersionId": "testAllottedModelUuid2", + "modelVersion": "testAllottedModelVersion2", + "modelInvariantId": "testAllottedModelInvariantUuid2" + } + }, + { + "serviceResourceId": "testAllottedResourceId3", + "resourceModuleName": "testAllottedModelInstanceName3", + "resourceModelInfo": { + "modelName": "testAllottedModelName3", + "modelVersionId": "testAllottedModelUuid3", + "modelVersion": "testAllottedModelVersion3", + "modelInvariantId": "testAllottedModelInvariantUuid3" + } + } ] + }, + "licenseInfo" : { + "licenseDemands" : [ ] + } +} diff --git a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest3Vpn.json b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest3Vpn.json new file mode 100644 index 0000000000..e3a735df00 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest3Vpn.json @@ -0,0 +1,91 @@ +{ + "requestInfo" : { + "transactionId" : "requestId", + "requestId" : "requestId", + "callbackUrl" : "http://localhost:28080/mso/WorkflowMesssage/OofResponse/requestId", + "sourceId" : "mso", + "requestType" : "create", + "numSolutions" : 1, + "optimizers" : [ "placement" ], + "timeout" : 1800 + }, + "serviceInfo" : { + "serviceInstanceId" : "testServiceInstanceId1", + "serviceName" : "testServiceType1", + "modelInfo":{ + "modelInvariantId":"testModelInvariantUUID1", + "modelVersionId":"testModelUUID1", + "modelName":"testModelName1", + "modelVersion":"testModelVersion1" + } + }, + "placementInfo" : { + "requestParameters" : { + "customerLatitude" : "customerLatitude", + "customerLongitude" : "customerLongitude", + "customerName" : "testCustomerName" + }, + "subscriberInfo" : { + "globalSubscriberId" : "testCustomerId", + "subscriberName" : "testCustomerName" + }, + "placementDemands" : [ { + "resourceModuleName" : "testProxyInstanceName1", + "serviceResourceId" : "testProxyId1", + "resourceModelInfo" : { + "modelInvariantId" : "testProxyModelInvariantUuid1", + "modelVersionId" : "testProxyModelUuid1", + "modelName" : "testProxyModelName1", + "modelVersion" : "testProxyModelVersion1" + } + }, { + "resourceModuleName" : "testProxyInstanceName2", + "serviceResourceId" : "testProxyId2", + "resourceModelInfo" : { + "modelInvariantId" : "testProxyModelInvariantUuid2", + "modelVersionId" : "testProxyModelUuid2", + "modelName" : "testProxyModelName2", + "modelVersion" : "testProxyModelVersion2" + } + }, { + "resourceModuleName" : "testProxyInstanceName1", + "serviceResourceId" : "testProxyId1", + "resourceModelInfo" : { + "modelInvariantId" : "testProxyModelInvariantUuid1", + "modelVersionId" : "testProxyModelUuid1", + "modelName" : "testProxyModelName1", + "modelVersion" : "testProxyModelVersion1" + } + }, { + "resourceModuleName" : "testProxyInstanceName2", + "serviceResourceId" : "testProxyId2", + "resourceModelInfo" : { + "modelInvariantId" : "testProxyModelInvariantUuid2", + "modelVersionId" : "testProxyModelUuid2", + "modelName" : "testProxyModelName2", + "modelVersion" : "testProxyModelVersion2" + } + }, { + "resourceModuleName" : "testProxyInstanceName1", + "serviceResourceId" : "testProxyId1", + "resourceModelInfo" : { + "modelInvariantId" : "testProxyModelInvariantUuid1", + "modelVersionId" : "testProxyModelUuid1", + "modelName" : "testProxyModelName1", + "modelVersion" : "testProxyModelVersion1" + } + }, { + "resourceModuleName" : "testProxyInstanceName2", + "serviceResourceId" : "testProxyId2", + "resourceModelInfo" : { + "modelInvariantId" : "testProxyModelInvariantUuid2", + "modelVersionId" : "testProxyModelUuid2", + "modelName" : "testProxyModelName2", + "modelVersion" : "testProxyModelVersion2" + } + } ] + }, + "licenseInfo" : { + "licenseDemands" : [ ] + } +} |