aboutsummaryrefslogtreecommitdiffstats
path: root/bpmn/so-bpmn-tasks/src/test
diff options
context:
space:
mode:
authorMarcus G K Williams <marcus.williams@intel.com>2019-04-08 21:59:29 -0700
committerMarcus G K Williams <marcus.williams@intel.com>2019-04-09 10:52:34 -0700
commit6efc32aa77960316bcb1ea93bf042e5b1b2dd303 (patch)
tree4ff9380bc27bfa2c996e2360cd069ae10ed391ec /bpmn/so-bpmn-tasks/src/test
parentc6d3ec1230b2d68548587b28d4a9b02e9e96101f (diff)
Refactor OofHomingV2
Refactor OofHomingV2 Java to working state and fix IT tests. Issue-ID: SO-1469 Change-Id: I8647058adf5ed41c5bebebee79f9dbc4d80c2974 Signed-off-by: Marcus G K Williams <marcus.williams@intel.com>
Diffstat (limited to 'bpmn/so-bpmn-tasks/src/test')
-rw-r--r--bpmn/so-bpmn-tasks/src/test/java/org/onap/so/BaseIntegrationTest.java8
-rw-r--r--bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/OofHomingV2IT.java594
-rw-r--r--bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/oof/OofClientTestIT.java9
-rw-r--r--bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest1Vpn.json58
-rw-r--r--bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest1VpnOpt.json61
-rw-r--r--bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest3Ar.json67
-rw-r--r--bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/OofHoming/oofRequest3Vpn.json91
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" : [ ]
+ }
+}