summaryrefslogtreecommitdiffstats
path: root/bpmn
diff options
context:
space:
mode:
Diffstat (limited to 'bpmn')
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/appc/payload/PayloadClient.java17
-rw-r--r--bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/appc/payload/PayloadClientTest.java5
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AnNssmfutils.groovy52
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DeleteCommunicationService.groovy7
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DeleteSliceService.groovy8
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoActivateTnNssi.groovy16
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateAccessNSSI.groovy53
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy3
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy15
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeallocateNSSI.groovy103
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeallocateTnNssi.groovy19
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteSliceService.groovy76
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/QueryJobStatus.groovy14
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnAllocateNssi.groovy2
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy38
-rw-r--r--bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/ServiceLevelUpgrade.bpmn2
-rw-r--r--bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoActivateTransportNSSI.bpmn112
-rw-r--r--bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoAllocateAccessNSSI.bpmn8
-rw-r--r--bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoAllocateTransportNSSI.bpmn2
-rw-r--r--bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateTnNssiInstance.bpmn62
-rw-r--r--bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeallocateNSSI.bpmn30
-rw-r--r--bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeallocateTransportNSSI.bpmn98
-rw-r--r--bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteSliceService.bpmn10
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/AaiResourceIdValidator.java220
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/UserParamsServiceTraversal.java232
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java460
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionConstants.java35
-rw-r--r--bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/BaseTaskTest.java4
-rw-r--r--bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/AaiResourceIdValidatorTest.java765
-rw-r--r--bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java962
30 files changed, 1866 insertions, 1564 deletions
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/appc/payload/PayloadClient.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/appc/payload/PayloadClient.java
index d966528f6c..c18680afae 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/appc/payload/PayloadClient.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/appc/payload/PayloadClient.java
@@ -20,23 +20,24 @@
package org.onap.so.bpmn.appc.payload;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Optional;
+import org.onap.so.bpmn.appc.payload.beans.ConfigurationParametersDistributeTraffic;
+import org.onap.so.bpmn.appc.payload.beans.ConfigurationParametersHealthCheck;
import org.onap.so.bpmn.appc.payload.beans.ConfigurationParametersQuiesce;
import org.onap.so.bpmn.appc.payload.beans.ConfigurationParametersResumeTraffic;
-import org.onap.so.bpmn.appc.payload.beans.ConfigurationParametersDistributeTraffic;
import org.onap.so.bpmn.appc.payload.beans.ConfigurationParametersUpgrade;
+import org.onap.so.bpmn.appc.payload.beans.DistributeTrafficAction;
+import org.onap.so.bpmn.appc.payload.beans.DistributeTrafficCheckAction;
import org.onap.so.bpmn.appc.payload.beans.HealthCheckAction;
import org.onap.so.bpmn.appc.payload.beans.QuiesceTrafficAction;
import org.onap.so.bpmn.appc.payload.beans.RequestParametersHealthCheck;
import org.onap.so.bpmn.appc.payload.beans.ResumeTrafficAction;
-import org.onap.so.bpmn.appc.payload.beans.DistributeTrafficAction;
-import org.onap.so.bpmn.appc.payload.beans.DistributeTrafficCheckAction;
import org.onap.so.bpmn.appc.payload.beans.SnapshotAction;
import org.onap.so.bpmn.appc.payload.beans.StartStopAction;
import org.onap.so.bpmn.appc.payload.beans.UpgradeAction;
import org.onap.so.bpmn.core.json.JsonUtils;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
public class PayloadClient {
@@ -122,6 +123,12 @@ public class PayloadClient {
RequestParametersHealthCheck requestParams = new RequestParametersHealthCheck();
requestParams.setHostIpAddress(vnfHostIpAddress);
payloadResult.setRequestParameters(requestParams);
+
+ ConfigurationParametersHealthCheck configurationParametersHealthCheck =
+ new ConfigurationParametersHealthCheck();
+ configurationParametersHealthCheck.setVnfName(vnfName);
+ payloadResult.setConfigurationParameters(configurationParametersHealthCheck);
+
return Optional.of((mapper.writeValueAsString(payloadResult)));
}
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/appc/payload/PayloadClientTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/appc/payload/PayloadClientTest.java
index 2ecf741869..2e16572069 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/appc/payload/PayloadClientTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/appc/payload/PayloadClientTest.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP - SO
* ================================================================================
- * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2018 AT&T Intellectual Property. 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.
@@ -66,7 +66,8 @@ public class PayloadClientTest {
@Test
public void healthCheckFormatTest() throws Exception {
- String payloadResult = "{\"request-parameters\":{\"host-ip-address\":\"hostIpAddress1\"}}";
+ String payloadResult =
+ "{\"request-parameters\":{\"host-ip-address\":\"hostIpAddress1\"},\"configuration-parameters\":{\"vnf_name\":\"vnfName1\"}}";
Optional<String> payloadClient = PayloadClient.healthCheckFormat("vnfName1", "hostIpAddress1");
assertEquals(payloadResult, payloadClient.get());
}
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AnNssmfutils.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AnNssmfutils.groovy
index 1d8de352fb..da9584771c 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AnNssmfutils.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AnNssmfutils.groovy
@@ -55,7 +55,7 @@ import org.onap.aai.domain.yang.ServiceInstance
import org.onap.aai.domain.yang.SliceProfile
import org.onap.aai.domain.yang.SliceProfiles
import org.onap.aai.domain.yang.Relationship
-
+import com.google.gson.Gson
class AnNssmfUtils {
@@ -193,7 +193,7 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
ANNF_sliceProfileInstance.setServiceType(serviceType)
String serviceStatus = "deactivated"
ANNF_sliceProfileInstance.setOrchestrationStatus(serviceStatus)
- String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "pLMNIdList")
+ String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "plmnIdList")
ANNF_sliceProfileInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
String serviceRole = "slice-profile-instance"
ANNF_sliceProfileInstance.setServiceRole(serviceRole)
@@ -213,7 +213,7 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
serviceType = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "sST")
TNFH_sliceProfileInstance.setServiceType(serviceType)
TNFH_sliceProfileInstance.setOrchestrationStatus(serviceStatus)
- serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "pLMNIdList")
+ serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "plmnIdList")
TNFH_sliceProfileInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
TNFH_sliceProfileInstance.setServiceRole(serviceRole)
TNFH_sliceProfileInstance.setEnvironmentContext(snssai)
@@ -230,7 +230,7 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
serviceType = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "sST")
TNMH_sliceProfileInstance.setServiceType(serviceType)
TNMH_sliceProfileInstance.setOrchestrationStatus(serviceStatus)
- serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "pLMNIdList")
+ serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "plmnIdList")
TNMH_sliceProfileInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
TNMH_sliceProfileInstance.setServiceRole(serviceRole)
TNMH_sliceProfileInstance.setEnvironmentContext(snssai)
@@ -268,7 +268,7 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
Map<String,Object> profile
switch(domainType) {
case "AN-NF":
- profile = objectMapper.readValue(execution.getVariable("ranNfSliceProfile"), Map.class)//pending fields - maxBandwidth, sST, pLMNIdList, cSReliabilityMeanTime,
+ profile = objectMapper.readValue(execution.getVariable("ranNfSliceProfile"), Map.class)//pending fields - maxBandwidth, sST, plmnIdList, cSReliabilityMeanTime,
//msgSizeByte, maxNumberofPDUSessions,overallUserDensity,transferIntervalTarget
result.setJitter(profile.get("jitter"))
result.setLatency(profile.get("latency"))
@@ -286,14 +286,14 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
result.setProfileId(execution.getVariable("ANNF_sliceProfileId"))
break
case "TN-FH":
- profile = objectMapper.readValue(execution.getVariable("tnFhSliceProfile"), Map.class) //pending fields - maxBandwidth, sST, pLMNIdList
+ profile = objectMapper.readValue(execution.getVariable("tnFhSliceProfile"), Map.class) //pending fields - maxBandwidth, sST, plmnIdList
result.setJitter(profile.get("jitter"))
result.setLatency(profile.get("latency"))
result.setResourceSharingLevel(profile.get("resourceSharingLevel"))
result.setProfileId(execution.getVariable("TNFH_sliceProfileId"))
break
case "TN-MH":
- profile = objectMapper.readValue(execution.getVariable("tnMhSliceProfile"), Map.class)//pending fields - maxBandwidth, sST, pLMNIdList
+ profile = objectMapper.readValue(execution.getVariable("tnMhSliceProfile"), Map.class)//pending fields - maxBandwidth, sST, plmnIdList
result.setJitter(profile.get("jitter"))
result.setLatency(profile.get("latency"))
result.setResourceSharingLevel(profile.get("resourceSharingLevel"))
@@ -342,16 +342,17 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
public String buildCreateNSSMFRequest(DelegateExecution execution, String domainType, String action) {
JsonObject esrInfo = new JsonObject()
- esrInfo.addProperty("networkType", "tn")
- esrInfo.addProperty("vendor", "ONAP_internal")
+ esrInfo.addProperty("networkType", "tn")
+ esrInfo.addProperty("vendor", "ONAP_internal")
JsonObject response = new JsonObject()
JsonObject allocateTnNssi = new JsonObject()
JsonObject serviceInfo = new JsonObject()
JsonArray transportSliceNetworksList = new JsonArray()
JsonArray connectionLinksList = new JsonArray()
JsonObject connectionLinks = new JsonObject()
+ Gson jsonConverter = new Gson()
if(action.equals("allocate")){
- Map<String, String> endpoints
+ JsonObject endpoints = new JsonObject()
if(domainType.equals("TN_FH")) {
serviceInfo.addProperty("serviceInvariantUuid", execution.getVariable("TNFH_modelInvariantUuid"))
serviceInfo.addProperty("serviceUuid", execution.getVariable("TNFH_modelUuid"))
@@ -359,12 +360,10 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
allocateTnNssi.addProperty("nssiName", execution.getVariable("TNFH_modelName"))
Map<String,Object> sliceProfile = objectMapper.readValue(execution.getVariable("tnFhSliceProfile"), Map.class)
sliceProfile.put("sliceProfileId", execution.getVariable("TNFH_sliceProfileInstanceId"))
- String sliceProfileString = objectMapper.writeValueAsString(sliceProfile)
- allocateTnNssi.addProperty("sliceProfile", sliceProfileString)
- endpoints.put("transportEndpointA", execution.getVariable("tranportEp_ID_RU"))
- endpoints.put("transportEndpointB", execution.getVariable("tranportEp_ID_DUIN"))
- String endpointsString = objectMapper.writeValueAsString(endpoints)
- connectionLinksList.add(endpointsString)
+ allocateTnNssi.add("sliceProfile", jsonConverter.toJsonTree(sliceProfile))
+ endpoints.addProperty("transportEndpointA", execution.getVariable("tranportEp_ID_RU"))
+ endpoints.addProperty("transportEndpointB", execution.getVariable("tranportEp_ID_DUIN"))
+ connectionLinksList.add(endpoints)
}else if(domainType.equals("TN_MH")) {
serviceInfo.addProperty("serviceInvariantUuid", execution.getVariable("TNMH_modelInvariantUuid"))
serviceInfo.addProperty("serviceUuid", execution.getVariable("TNMH_modelUuid"))
@@ -372,41 +371,32 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
allocateTnNssi.addProperty("nssiName", execution.getVariable("TNMH_modelName"))
Map<String,Object> sliceProfile = objectMapper.readValue(execution.getVariable("tnMhSliceProfile"), Map.class)
sliceProfile.put("sliceProfileId", execution.getVariable("TNMH_sliceProfileInstanceId"))
- String sliceProfileString = objectMapper.writeValueAsString(sliceProfile)
- allocateTnNssi.addProperty("sliceProfile", sliceProfileString)
- endpoints.put("transportEndpointA", execution.getVariable("tranportEp_ID_DUEG"))
- endpoints.put("transportEndpointB", execution.getVariable("tranportEp_ID_CUIN"))
- String endpointsString = objectMapper.writeValueAsString(endpoints)
- connectionLinksList.add(endpointsString)
+ allocateTnNssi.add("sliceProfile", jsonConverter.toJsonTree(sliceProfile))
+ endpoints.addProperty("transportEndpointA", execution.getVariable("tranportEp_ID_DUEG"))
+ endpoints.addProperty("transportEndpointB", execution.getVariable("tranportEp_ID_CUIN"))
+ connectionLinksList.add(endpoints)
}
//Connection links
connectionLinks.add("connectionLinks", connectionLinksList)
transportSliceNetworksList.add(connectionLinks)
allocateTnNssi.add("transportSliceNetworks", transportSliceNetworksList)
- allocateTnNssi.addProperty("nssiId", null)
- serviceInfo.addProperty("nssiId", null)
}else if(action.equals("modify-allocate")) {
if(domainType.equals("TN_FH")) {
- serviceInfo.addProperty("serviceInvariantUuid", null)
- serviceInfo.addProperty("serviceUuid", null)
- allocateTnNssi.addProperty("nsstId", null)
allocateTnNssi.addProperty("nssiName", execution.getVariable("TNFH_nssiName"))
allocateTnNssi.addProperty("sliceProfileId", execution.getVariable("TNFH_sliceProfileInstanceId"))
allocateTnNssi.addProperty("nssiId", execution.getVariable("TNFH_NSSI"))
serviceInfo.addProperty("nssiId", execution.getVariable("TNFH_NSSI"))
}else if(domainType.equals("TN_MH")) {
- serviceInfo.addProperty("serviceInvariantUuid", null)
- serviceInfo.addProperty("serviceUuid", null)
- allocateTnNssi.addProperty("nsstId", null)
allocateTnNssi.addProperty("nssiName", execution.getVariable("TNMH_nssiName"))
allocateTnNssi.addProperty("sliceProfileId", execution.getVariable("TNMH_sliceProfileInstanceId"))
allocateTnNssi.addProperty("nssiId", execution.getVariable("TNMH_NSSI"))
serviceInfo.addProperty("nssiId", execution.getVariable("TNMH_NSSI"))
}
}
+ JsonParser parser = new JsonParser()
String nsiInfo = jsonUtil.getJsonValue(execution.getVariable("sliceParams"), "nsiInfo")
- allocateTnNssi.addProperty("nsiInfo", nsiInfo)
+ allocateTnNssi.add("nsiInfo",(JsonObject) parser.parse(nsiInfo))
allocateTnNssi.addProperty("scriptName", "TN1")
serviceInfo.addProperty("nsiId", execution.getVariable("nsiId"))
serviceInfo.addProperty("globalSubscriberId", execution.getVariable("globalSubscriberId"))
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DeleteCommunicationService.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DeleteCommunicationService.groovy
index 8cab146006..b94c81b41f 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DeleteCommunicationService.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DeleteCommunicationService.groovy
@@ -215,11 +215,12 @@ class DeleteCommunicationService extends AbstractServiceTaskProcessor {
String msoKey = UrnPropertiesReader.getVariable("mso.msoKey", execution)
String basicAuth = UrnPropertiesReader.getVariable("mso.infra.endpoint.auth", execution)
- String basicAuthValue = utils.encrypt(basicAuth, msoKey)
- String encodeString = utils.getBasicAuth(basicAuthValue, msoKey)
+// String basicAuthValue = utils.encrypt(basicAuth, msoKey)
+// String encodeString = utils.getBasicAuth(basicAuthValue, msoKey)
HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
- httpClient.addAdditionalHeader("Authorization", encodeString)
+// httpClient.addAdditionalHeader("Authorization", encodeString)
+ httpClient.addAdditionalHeader("Authorization", basicAuth)
httpClient.addAdditionalHeader("Accept", "application/json")
Response httpResponse = httpClient.delete(requestBody)
handleNSSMFWFResponse(httpResponse, execution)
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DeleteSliceService.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DeleteSliceService.groovy
index 4c008a2eb9..8c04675193 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DeleteSliceService.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DeleteSliceService.groovy
@@ -20,6 +20,8 @@
package org.onap.so.bpmn.infrastructure.scripts
+import org.onap.aaiclient.client.aai.entities.uri.AAISimpleUri
+
import static org.apache.commons.lang3.StringUtils.isBlank
import javax.ws.rs.NotFoundException
import org.camunda.bpm.engine.delegate.BpmnError
@@ -176,11 +178,11 @@ class DeleteSliceService extends AbstractServiceTaskProcessor {
ServiceProfile serviceProfile = serviceProfiles.getServiceProfile().get(0)
profileId = serviceProfile ? serviceProfile.getProfileId() : ""
}
- resourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(serviceInstanceId).serviceProfile(profileId))
- if (!getAAIClient().exists(resourceUri)) {
+ AAISimpleUri profileUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(serviceInstanceId).serviceProfile(profileId))
+ if (!getAAIClient().exists(profileUri)) {
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service Instance was not found in aai")
}
- getAAIClient().delete(resourceUri)
+ getAAIClient().delete(profileUri)
}
catch (any)
{
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoActivateTnNssi.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoActivateTnNssi.groovy
index 05996d3671..f3f8c8bacf 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoActivateTnNssi.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoActivateTnNssi.groovy
@@ -83,6 +83,7 @@ public class DoActivateTnNssi extends AbstractServiceTaskProcessor {
String actionType = operationType.equals("activateInstance") ? "activate" : "deactivate"
execution.setVariable("actionType", actionType)
+ tnNssmfUtils.setEnableSdncConfig(execution)
logger.debug("Finish preProcessRequest")
}
@@ -142,20 +143,17 @@ public class DoActivateTnNssi extends AbstractServiceTaskProcessor {
String status,
String progress,
String statusDescription) {
- String serviceId = execution.getVariable("sliceServiceInstanceId")
+ String ssInstanceId = execution.getVariable("sliceServiceInstanceId")
+ String modelUuid = execution.getVariable("modelUuid")
String jobId = execution.getVariable("jobId")
String nsiId = execution.getVariable("nsiId")
String operType = execution.getVariable("actionType")
+ operType = operType.toUpperCase()
+
+ ResourceOperationStatus roStatus = tnNssmfUtils.buildRoStatus(modelUuid, ssInstanceId,
+ jobId, nsiId, operType, status, progress, statusDescription)
- ResourceOperationStatus roStatus = new ResourceOperationStatus()
- roStatus.setServiceId(serviceId)
- roStatus.setOperationId(jobId)
- roStatus.setResourceTemplateUUID(nsiId)
- roStatus.setOperType(operType)
- roStatus.setProgress(progress)
- roStatus.setStatus(status)
- roStatus.setStatusDescription(statusDescription)
requestDBUtil.prepareUpdateResourceOperationStatus(execution, roStatus)
}
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateAccessNSSI.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateAccessNSSI.groovy
index e1719aa5d6..33724bd011 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateAccessNSSI.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateAccessNSSI.groovy
@@ -34,6 +34,7 @@ import org.slf4j.LoggerFactory
import java.util.List
import static org.apache.commons.lang3.StringUtils.isBlank
import com.google.gson.JsonObject
+import com.google.gson.Gson
import com.fasterxml.jackson.databind.ObjectMapper
import com.google.gson.JsonArray
import com.google.gson.JsonParser
@@ -98,8 +99,8 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
execution.setVariable("sliceProfile", sliceProfile)
}
String sliceProfileId = jsonUtil.getJsonValue(sliceProfile, "sliceProfileId")
- def snssaiList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceProfile, "sNSSAI"))
- def plmnIdList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceProfile, "pLMNIdList"))
+ def snssaiList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceProfile, "snssaiList"))
+ def plmnIdList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceProfile, "plmnIdList"))
def coverageAreaTAList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceProfile, "coverageAreaTAList"))
if (isBlank(sliceProfileId) || (snssaiList.empty) || (plmnIdList.empty)
@@ -577,7 +578,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
def createSdnrRequest = { DelegateExecution execution ->
logger.debug(Prefix+"createSdnrRequest method start")
String callbackUrl = UrnPropertiesReader.getVariable("mso.workflow.message.endpoint") + "/AsyncSdnrResponse/"+execution.getVariable("msoRequestId")
- String sdnrRequest = buildSdnrAllocateRequest(execution, "allocate", "InstantiateRANSlice", callbackUrl)
+ String sdnrRequest = buildSdnrAllocateRequest(execution, "allocate", "instantiateRANSlice", callbackUrl)
execution.setVariable("createNSSI_sdnrRequest", sdnrRequest)
execution.setVariable("createNSSI_timeout", "PT10M")
execution.setVariable("createNSSI_correlator", execution.getVariable("msoRequestId"))
@@ -697,12 +698,12 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
}
def createFhAllocateNssiJobQuery = { DelegateExecution execution ->
- logger.debug(Prefix+"createModifyNssiQueryJobStatus method start")
+ logger.debug(Prefix+"createFhAllocateNssiJobQuery method start")
createTnAllocateNssiJobQuery(execution, "TN_FH")
}
def createMhAllocateNssiJobQuery = { DelegateExecution execution ->
- logger.debug(Prefix+"createModifyNssiQueryJobStatus method start")
+ logger.debug(Prefix+"createMhAllocateNssiJobQuery method start")
createTnAllocateNssiJobQuery(execution, "TN_MH")
}
@@ -712,7 +713,6 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
esrInfo.addProperty("vendor", "ONAP_internal")
execution.setVariable("esrInfo", esrInfo.toString())
JsonObject serviceInfo = new JsonObject()
- serviceInfo.addProperty("nssiId", null)
serviceInfo.addProperty("nsiId", execution.getVariable("nsiId"))
String sST = jsonUtil.getJsonValue(execution.getVariable("sliceProfile"), "sST")
serviceInfo.addProperty("sST", sST)
@@ -736,14 +736,14 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
logger.debug(Prefix+"processJobStatusRsp method start")
String jobResponse = execution.getVariable("TNFH_jobResponse")
logger.debug("Job status response "+jobResponse)
- String status = jsonUtil.getJsonValue(jobResponse, "responseDescriptor.status")
- String nssi = jsonUtil.getJsonValue(jobResponse, "responseDescriptor.nssi")
+ String status = jsonUtil.getJsonValue(jobResponse, "status")
+ String nssi = jsonUtil.getJsonValue(jobResponse, "nssiId")
if(status.equalsIgnoreCase("finished")) {
execution.setVariable("TNFH_NSSI", nssi)
logger.debug("Job successfully completed ... proceeding with flow for nssi : "+nssi)
}
else {
- String statusDescription = jsonUtil.getJsonValue(jobResponse, "responseDescriptor.statusDescription")
+ String statusDescription = jsonUtil.getJsonValue(jobResponse, "statusDescription")
logger.error("received failed status from job status query for nssi : "+nssi+" with status description : "+ statusDescription)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000,"received failed status from job status query for nssi : "+nssi+" with status description : "+ statusDescription)
}
@@ -753,14 +753,14 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
logger.debug(Prefix+"processJobStatusRsp method start")
String jobResponse = execution.getVariable("TNMH_jobResponse")
logger.debug("Job status response "+jobResponse)
- String status = jsonUtil.getJsonValue(jobResponse, "responseDescriptor.status")
- String nssi = jsonUtil.getJsonValue(jobResponse, "responseDescriptor.nssi")
+ String status = jsonUtil.getJsonValue(jobResponse, "status")
+ String nssi = jsonUtil.getJsonValue(jobResponse, "nssiId")
if(status.equalsIgnoreCase("finished")) {
execution.setVariable("TNMH_NSSI", nssi)
logger.debug("Job successfully completed ... proceeding with flow for nssi : "+nssi)
}
else {
- String statusDescription = jsonUtil.getJsonValue(jobResponse, "responseDescriptor.statusDescription")
+ String statusDescription = jsonUtil.getJsonValue(jobResponse, "statusDescription")
logger.error("received failed status from job status query for nssi : "+nssi+" with status description : "+ statusDescription)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000,"received failed status from job status query for nssi : "+nssi+" with status description : "+ statusDescription)
}
@@ -770,13 +770,13 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
logger.debug(Prefix+"processJobStatusRsp method start")
String jobResponse = execution.getVariable("jobResponse")
logger.debug("Job status response "+jobResponse)
- String status = jsonUtil.getJsonValue(jobResponse, "responseDescriptor.status")
- String nssi = jsonUtil.getJsonValue(jobResponse, "responseDescriptor.nssi")
+ String status = jsonUtil.getJsonValue(jobResponse, "status")
+ String nssi = jsonUtil.getJsonValue(jobResponse, "nssiId")
if(status.equalsIgnoreCase("finished")) {
logger.debug("Job successfully completed ... proceeding with flow for nssi : "+nssi)
}
else {
- String statusDescription = jsonUtil.getJsonValue(jobResponse, "responseDescriptor.statusDescription")
+ String statusDescription = jsonUtil.getJsonValue(jobResponse, "statusDescription")
logger.error("received failed status from job status query for nssi : "+nssi+" with status description : "+ statusDescription)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000,"received failed status from job status query for nssi : "+nssi+" with status description : "+ statusDescription)
}
@@ -899,29 +899,30 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
sliceProfile.put("maxNumberofConns", sliceProfile.get("maxNumberofPDUSessions"))
sliceProfile.put("uLThptPerSlice", sliceProfile.get("expDataRateUL"))
sliceProfile.put("dLThptPerSlice", sliceProfile.get("expDataRateDL"))
- String sliceProfileString = objectMapper.writeValueAsString(sliceProfile)
+
JsonObject response = new JsonObject()
JsonObject body = new JsonObject()
JsonObject input = new JsonObject()
JsonObject commonHeader = new JsonObject()
JsonObject payload = new JsonObject()
JsonObject payloadInput = new JsonObject()
- commonHeader.addProperty("TimeStamp",new Date(System.currentTimeMillis()).format("yyyy-MM-dd'T'HH:mm:ss.sss", TimeZone.getDefault()))
- commonHeader.addProperty("APIver", "1.0")
- commonHeader.addProperty("RequestID", requestId)
- commonHeader.addProperty("SubRequestID", "1")
- commonHeader.add("RequestTrack", new JsonObject())
- commonHeader.add("Flags", new JsonObject())
- payloadInput.addProperty("sliceProfile", sliceProfileString)
+ commonHeader.addProperty("TimeStamp",new Date(System.currentTimeMillis()).format("yyyy-MM-dd'T'HH:mm:ss.sss'Z'", TimeZone.getDefault()))
+ commonHeader.addProperty("api-ver", "1.0")
+ commonHeader.addProperty("request-id", requestId)
+ commonHeader.addProperty("sub-request-id", "1")
+ commonHeader.add("request-track", new JsonObject())
+ commonHeader.add("flags", new JsonObject())
+ Gson jsonConverter = new Gson()
+ payloadInput.add("sliceProfile", jsonConverter.toJsonTree(sliceProfile))
payloadInput.addProperty("RANNSSIId", execution.getVariable("RANServiceInstanceId"))
payloadInput.addProperty("NSIID", execution.getVariable("nsiId"))
payloadInput.addProperty("RANNFNSSIId", execution.getVariable("RANNFServiceInstanceId"))
payloadInput.addProperty("callbackURL", callbackUrl)
payloadInput.add("additionalproperties", new JsonObject())
payload.add("input", payloadInput)
- input.add("CommonHeader", commonHeader)
- input.addProperty("Action", action)
- input.addProperty("Payload", payload.toString())
+ input.add("common-header", commonHeader)
+ input.addProperty("action", action)
+ input.addProperty("payload", payload.toString())
body.add("input", input)
response.add("body", body)
response.addProperty("version", "1.0")
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy
index 0311c3d856..059a209336 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy
@@ -394,6 +394,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2AnProfile()
+ allocateAnNssi.sliceProfile.sliceProfileId = sliceTaskInfo.sliceInstanceId
allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
allocateAnNssi.nssiId = sliceTaskInfo.suggestNssiId
allocateAnNssi.nssiName = "nssi_an" + execution.getVariable("sliceServiceInstanceName")
@@ -537,6 +538,8 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
allocateCnNssi.nssiName = "nssi_cn" + execution.getVariable("sliceServiceInstanceName")
allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
+ allocateCnNssi.sliceProfile.sliceProfileId = sliceTaskInfo.sliceInstanceId
+
NsiInfo nsiInfo = new NsiInfo()
nsiInfo.nsiId = sliceParams.suggestNsiId
nsiInfo.nsiName = sliceParams.suggestNsiName
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy
index 4eb70a5302..04f07b66d4 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy
@@ -34,6 +34,8 @@ import org.onap.so.bpmn.core.json.JsonUtils
import org.slf4j.Logger
import org.slf4j.LoggerFactory
+import static org.apache.commons.lang3.StringUtils.isBlank
+
class DoCreateTnNssiInstance extends AbstractServiceTaskProcessor {
private static final Logger logger = LoggerFactory.getLogger(DoCreateTnNssiInstance.class);
@@ -61,6 +63,8 @@ class DoCreateTnNssiInstance extends AbstractServiceTaskProcessor {
}"""
execution.setVariable("serviceModelInfo", serviceModelInfo)
+ tnNssmfUtils.setEnableSdncConfig(execution)
+
logger.trace("Exit preProcessRequest")
}
@@ -109,15 +113,18 @@ class DoCreateTnNssiInstance extends AbstractServiceTaskProcessor {
org.onap.aai.domain.yang.ServiceInstance ss = new org.onap.aai.domain.yang.ServiceInstance()
ss.setServiceInstanceId(ssInstanceId)
String sliceInstanceName = execution.getVariable("sliceServiceInstanceName")
+ if (isBlank(sliceInstanceName)) {
+ logger.error("ERROR: createServiceInstance: sliceInstanceName is null")
+ sliceInstanceName = ssInstanceId
+ }
ss.setServiceInstanceName(sliceInstanceName)
ss.setServiceType(serviceType)
- String serviceStatus = "activated"
+ String serviceStatus = "deactivated"
ss.setOrchestrationStatus(serviceStatus)
String modelInvariantUuid = execution.getVariable("modelInvariantUuid")
String modelUuid = execution.getVariable("modelUuid")
- //TODO: need valid model ID from the caller, as AAI does not accept invalid IDs
- //ss.setModelInvariantId(modelInvariantUuid)
- //ss.setModelVersionId(modelUuid)
+ ss.setModelInvariantId(modelInvariantUuid)
+ ss.setModelVersionId(modelUuid)
String serviceInstanceLocationid = tnNssmfUtils.getFirstPlmnIdFromSliceProfile(sliceProfileStr)
ss.setServiceInstanceLocationId(serviceInstanceLocationid)
String snssai = tnNssmfUtils.getFirstSnssaiFromSliceProfile(sliceProfileStr)
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeallocateNSSI.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeallocateNSSI.groovy
index f3bc47e7cf..147e623ece 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeallocateNSSI.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeallocateNSSI.groovy
@@ -21,25 +21,26 @@ package org.onap.so.bpmn.infrastructure.scripts
import com.fasterxml.jackson.databind.ObjectMapper
import org.camunda.bpm.engine.delegate.DelegateExecution
+import org.onap.aai.domain.yang.SliceProfiles
+import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
+import org.onap.aaiclient.client.aai.entities.uri.AAIPluralResourceUri
import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
+import org.onap.aaiclient.client.aai.entities.uri.AAISimpleUri
import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
-import org.onap.so.beans.nsmf.DeAllocateNssi
-import org.onap.so.beans.nsmf.EsrInfo
-import org.onap.so.beans.nsmf.NetworkType
-import org.onap.so.beans.nsmf.NssiResponse
-import org.onap.so.beans.nsmf.ServiceInfo
+import org.onap.so.beans.nsmf.*
+import org.onap.so.beans.nsmf.oof.SubnetType
import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
import org.onap.so.bpmn.common.scripts.ExceptionUtil
import org.onap.so.bpmn.common.scripts.NssmfAdapterUtils
import org.onap.so.bpmn.common.scripts.RequestDBUtil
-import org.onap.so.bpmn.core.domain.ServiceArtifact
import org.onap.so.bpmn.core.domain.ServiceDecomposition
import org.onap.so.bpmn.core.json.JsonUtils
import org.onap.so.db.request.beans.OperationStatus
import org.slf4j.Logger
import org.slf4j.LoggerFactory
+import javax.ws.rs.NotFoundException
class DoDeallocateNSSI extends AbstractServiceTaskProcessor
{
@@ -103,15 +104,13 @@ class DoDeallocateNSSI extends AbstractServiceTaskProcessor
try {
ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition") as ServiceDecomposition
- ServiceArtifact serviceArtifact = serviceDecomposition ?.getServiceInfo()?.getServiceArtifact()?.get(0)
- String content = serviceArtifact.getContent()
- String vendor = jsonUtil.getJsonValue(content, "metadata.vendor")
- String domainType = jsonUtil.getJsonValue(content, "metadata.domainType")
+ String vendor = serviceDecomposition ?.getServiceRole()
+ NetworkType domainType = convertServiceCategory(serviceDecomposition.getServiceCategory())
def currentNSSI = execution.getVariable("currentNSSI")
currentNSSI['vendor'] = vendor
currentNSSI['domainType'] = domainType
- LOGGER.info("processDecomposition, current vendor-domainType:" +String.join("-", vendor, domainType))
+ LOGGER.info("processDecomposition, current vendor-domainType:" +String.join("-", vendor, domainType.toString()))
} catch (any) {
String exceptionMessage = "Bpmn error encountered in deallocate nssi. processDecomposition() - " + any.getMessage()
@@ -120,6 +119,27 @@ class DoDeallocateNSSI extends AbstractServiceTaskProcessor
}
LOGGER.debug("*****${PREFIX} Exit processDecomposition *****")
}
+
+
+ /**
+ * get subnetType from serviceCategory
+ * @return
+ */
+ private NetworkType convertServiceCategory(String serviceCategory){
+ if(serviceCategory ==~ /CN.*/){
+ return SubnetType.CN.getNetworkType()
+ }
+ if (serviceCategory ==~ /AN.*NF.*/){
+ return SubnetType.AN.getNetworkType()
+ }
+ if (serviceCategory ==~ /TN.*BH.*/){
+ return SubnetType.TN_BH.getNetworkType()
+ }
+ if(serviceCategory ==~ /TN.*MH.*/){
+ return SubnetType.TN_MH.getNetworkType()
+ }
+ return null
+ }
/**
* send deallocate request to nssmf
@@ -136,9 +156,9 @@ class DoDeallocateNSSI extends AbstractServiceTaskProcessor
String scriptName = execution.getVariable("scriptName")
String serviceInvariantUuid = currentNSSI['modelInvariantId']
- String serviceUuid = currentNSSI['modelId']
+ String serviceUuid = currentNSSI['modelVersionId']
String globalSubscriberId = currentNSSI['globalSubscriberId']
- String subscriptionServiceType = execution.getVariable("serviceType")
+ String subscriptionServiceType = currentNSSI['serviceType']
DeAllocateNssi deAllocateNssi = new DeAllocateNssi()
deAllocateNssi.setNsiId(nsiId)
@@ -191,8 +211,6 @@ class DoDeallocateNSSI extends AbstractServiceTaskProcessor
{
def currentNSSI = execution.getVariable("currentNSSI")
String jobId = currentNSSI['jobId']
-
- execution.setVariable("responseId", "3")
execution.setVariable("jobId", jobId)
}
@@ -245,11 +263,11 @@ class DoDeallocateNSSI extends AbstractServiceTaskProcessor
private EsrInfo getEsrInfo(def currentNSSI)
{
- String domaintype = currentNSSI['domainType']
+ NetworkType domainType = currentNSSI['domainType']
String vendor = currentNSSI['vendor']
EsrInfo info = new EsrInfo()
- info.setNetworkType(NetworkType.fromString(domaintype))
+ info.setNetworkType(domainType)
info.setVendor(vendor)
return info
}
@@ -264,17 +282,17 @@ class DoDeallocateNSSI extends AbstractServiceTaskProcessor
def currentNSSI = execution.getVariable("currentNSSI")
int currentProgress = currentNSSI["jobProgress"]
def proportion = currentNSSI['proportion']
- def statusDes = currentNSSI["statusDescription"]
int progress = (currentProgress as int) == 0 ? 0 : (currentProgress as int) / 100 * (proportion as int)
def status = currentNSSI['status']
-
+
+
OperationStatus operationStatus = new OperationStatus()
operationStatus.setServiceId(currentNSSI['e2eServiceInstanceId'] as String)
operationStatus.setOperationId(currentNSSI['operationId'] as String)
operationStatus.setOperation("DELETE")
- operationStatus.setResult(status as String)
+ operationStatus.setResult("processing")
operationStatus.setProgress(progress as String)
- operationStatus.setOperationContent(statusDes as String)
+ operationStatus.setOperationContent(currentNSSI['domainType'].toString() + " " + status.toString())
requestDBUtil.prepareUpdateOperationStatus(execution, operationStatus)
LOGGER.debug("update operation, currentProgress=${currentProgress}, proportion=${proportion}, progress = ${progress}" )
}
@@ -283,20 +301,20 @@ class DoDeallocateNSSI extends AbstractServiceTaskProcessor
* delete slice profile from aai
* @param execution
*/
- void delSliceProfileFromAAI(DelegateExecution execution)
+ void delSliceProfileServiceFromAAI(DelegateExecution execution)
{
LOGGER.debug("*****${PREFIX} start delSliceProfileFromAAI *****")
def currentNSSI = execution.getVariable("currentNSSI")
String nssiServiceInstanceId = currentNSSI['nssiServiceInstanceId']
String profileId = currentNSSI['profileId']
String globalSubscriberId = currentNSSI["globalSubscriberId"]
- String serviceType = execution.getVariable("serviceType")
+ String serviceType = currentNSSI['serviceType']
try
{
LOGGER.debug("delete nssiServiceInstanceId:${nssiServiceInstanceId}, profileId:${profileId}")
AAIResourceUri resourceUri = AAIUriFactory.createResourceUri(
- AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(nssiServiceInstanceId).sliceProfile(profileId))
+ AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(profileId))
if (!getAAIClient().exists(resourceUri)) {
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service Instance was not found in aai")
}
@@ -310,4 +328,41 @@ class DoDeallocateNSSI extends AbstractServiceTaskProcessor
}
LOGGER.debug("*****${PREFIX} Exist delSliceProfileFromAAI *****")
}
+
+ void delSliceProfileFromAAI(DelegateExecution execution){
+
+ LOGGER.debug("*****${PREFIX} start delSliceProfileFromAAI *****")
+ def currentNSSI = execution.getVariable("currentNSSI")
+ String globalSubscriberId = currentNSSI["globalSubscriberId"]
+ String serviceType = currentNSSI['serviceType']
+ String sliceProfileInstId = currentNSSI['profileId']
+
+ try
+ {
+ AAIPluralResourceUri resourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(sliceProfileInstId).sliceProfiles())
+ AAIResultWrapper wrapper = getAAIClient().get(resourceUri, NotFoundException.class)
+ Optional<SliceProfiles> sliceProfilesOpt =wrapper.asBean(SliceProfiles.class)
+ SliceProfiles sliceProfiles
+ String profileId
+ if(sliceProfilesOpt.isPresent()){
+ sliceProfiles = sliceProfilesOpt.get()
+ org.onap.aai.domain.yang.SliceProfile sliceProfile = sliceProfiles.getSliceProfile().get(0)
+ profileId = sliceProfile ? sliceProfile.getProfileId() : ""
+ }
+ if (profileId){
+ AAISimpleUri profileUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(sliceProfileInstId).sliceProfile(profileId))
+ if (!getAAIClient().exists(profileUri)) {
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service Instance was not found in aai")
+ }
+ getAAIClient().delete(profileUri)
+ }
+
+ }
+ catch (any)
+ {
+ String msg = "delete service profile from aai failed! cause-"+any.getCause()
+ LOGGER.error(any.printStackTrace())
+ exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg);
+ }
+ }
}
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeallocateTnNssi.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeallocateTnNssi.groovy
index c817eaad61..a715e7799d 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeallocateTnNssi.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeallocateTnNssi.groovy
@@ -25,7 +25,6 @@ import groovy.json.JsonSlurper
import org.camunda.bpm.engine.delegate.BpmnError
import org.camunda.bpm.engine.delegate.DelegateExecution
import org.onap.aai.domain.yang.ServiceInstance
-import org.onap.aaiclient.client.aai.AAIObjectType
import org.onap.aaiclient.client.aai.AAIResourcesClient
import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
@@ -81,6 +80,9 @@ class DoDeallocateTnNssi extends AbstractServiceTaskProcessor {
"modelVersion":""
}"""
execution.setVariable("serviceModelInfo", serviceModelInfo)
+
+ tnNssmfUtils.setEnableSdncConfig(execution)
+
logger.debug("Finish preProcessRequest")
}
@@ -150,18 +152,15 @@ class DoDeallocateTnNssi extends AbstractServiceTaskProcessor {
String status,
String progress,
String statusDescription) {
- String serviceId = execution.getVariable("sliceServiceInstanceId")
+ String ssInstanceId = execution.getVariable("sliceServiceInstanceId")
+ String modelUuid = execution.getVariable("modelUuid")
String jobId = execution.getVariable("jobId")
String nsiId = execution.getVariable("nsiId")
- ResourceOperationStatus roStatus = new ResourceOperationStatus()
- roStatus.setServiceId(serviceId)
- roStatus.setOperationId(jobId)
- roStatus.setResourceTemplateUUID(nsiId)
- roStatus.setOperType("Deallocate")
- roStatus.setProgress(progress)
- roStatus.setStatus(status)
- roStatus.setStatusDescription(statusDescription)
+ ResourceOperationStatus roStatus = tnNssmfUtils.buildRoStatus(modelUuid, ssInstanceId,
+ jobId, nsiId, "DEALLOCATE", status, progress, statusDescription)
+
+ logger.debug("DoDeallocateTnNssi: roStatus={}", roStatus)
requestDBUtil.prepareUpdateResourceOperationStatus(execution, roStatus)
}
}
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteSliceService.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteSliceService.groovy
index c4321220fd..2889f79c30 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteSliceService.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteSliceService.groovy
@@ -19,6 +19,9 @@
*/
package org.onap.so.bpmn.infrastructure.scripts
+import org.onap.aai.domain.yang.SliceProfiles
+import org.onap.aaiclient.client.aai.entities.uri.AAIPluralResourceUri
+
import static org.apache.commons.lang3.StringUtils.isBlank
import javax.ws.rs.NotFoundException
import javax.ws.rs.core.Response
@@ -99,7 +102,7 @@ class DoDeleteSliceService extends AbstractServiceTaskProcessor {
* save snssai
* @param execution
*/
- void queryE2ESliceSeriveFromAAI(DelegateExecution execution)
+ void queryServiceProfileFromAAI(DelegateExecution execution)
{
LOGGER.trace(" *****${PREFIX} Start queryE2ESliceSeriveFromAAI *****")
String serviceInstanceId = execution.getVariable("serviceInstanceId")
@@ -111,11 +114,11 @@ class DoDeleteSliceService extends AbstractServiceTaskProcessor {
if(si.isPresent())
{
String snssai = si.get()?.getEnvironmentContext()
- ServiceProfiles serviceProfiles = si.get()?.getServiceProfiles()
- ServiceProfile serviceProfile = serviceProfiles.getServiceProfile().get(0)
- String serviceProfileId = serviceProfile ? serviceProfile.getProfileId() : ""
execution.setVariable("snssai", snssai ?: "")
- execution.setVariable("serviceProfileId",serviceProfileId)
+// ServiceProfiles serviceProfiles = si.get()?.getServiceProfiles()
+// ServiceProfile serviceProfile = serviceProfiles.getServiceProfile().get(0)
+// String serviceProfileId = serviceProfile ? serviceProfile.getProfileId() : ""
+// execution.setVariable("serviceProfileId", serviceProfileId)
List<ServiceInstance> sliceProfileList = []
List<Relationship> relationshipList = si.get().getRelationshipList().getRelationship()
for (Relationship relationship : relationshipList) {
@@ -127,7 +130,7 @@ class DoDeleteSliceService extends AbstractServiceTaskProcessor {
Optional<ServiceInstance> serviceInstance = wrapper1.asBean(ServiceInstance.class)
if (serviceInstance.isPresent()) {
ServiceInstance instance = serviceInstance.get()
- if ("slice-profile-instance".equalsIgnoreCase(instance.getServiceRole())) {
+ if ("slice-profile".equalsIgnoreCase(instance.getServiceRole())) {
sliceProfileList.add(instance)
}
}
@@ -158,7 +161,7 @@ class DoDeleteSliceService extends AbstractServiceTaskProcessor {
try
{
String errorMsg = "query allotted resource from aai failed."
- AAIResultWrapper wrapper = queryAAI(execution, Types.ALLOTTED_RESOURCES, serviceInstanceId, errorMsg)
+ AAIResultWrapper wrapper = queryAAI(execution, Types.ALLOTTED_RESOURCE, serviceInstanceId, errorMsg)
Optional<AllottedResources> ars = wrapper?.asBean(AllottedResources.class)
if(ars.isPresent() && ars.get().getAllottedResource())
{
@@ -209,6 +212,7 @@ class DoDeleteSliceService extends AbstractServiceTaskProcessor {
String instanceId = relatedLink ? relatedLink.substring(relatedLink.lastIndexOf("/") + 1,relatedLink.length()) : ""
AAIResultWrapper wrapper1 = queryAAI(execution, Types.SERVICE_INSTANCE, instanceId, errorMsg)
Optional<ServiceInstance> serviceInstance = wrapper1.asBean(ServiceInstance.class)
+ def nssiId
if (serviceInstance.isPresent()) {
ServiceInstance instance = serviceInstance.get()
if ("nssi".equalsIgnoreCase(instance.getServiceRole())) {
@@ -274,14 +278,39 @@ class DoDeleteSliceService extends AbstractServiceTaskProcessor {
List<ServiceInstance> nssiInstanceList = execution.getVariable("nssiInstanceList")
List<ServiceInstance> sliceProfileList = execution.getVariable("sliceProfileList")
int currentIndex = execution.getVariable("currentNSSIIndex") as int
- String profileId = ""
+ String profileInstId = ""
ServiceInstance nssi = nssiInstanceList?.get(currentIndex)
+ List<Relationship> relationshipList = nssi.getRelationshipList()?.getRelationship()
for(ServiceInstance sliceProfileInstance : sliceProfileList) {
- if(sliceProfileInstance.getWorkloadContext().equalsIgnoreCase(nssi.getWorkloadContext()))
- {
- profileId = sliceProfileInstance.getServiceInstanceId()
+ for (Relationship relationship : relationshipList) {
+ String relatedTo = relationship.getRelatedTo()
+ if (relatedTo == "service-instance"){
+ String relatedLink = relationship.getRelatedLink()?:""
+ String instanceId = relatedLink ? relatedLink.substring(relatedLink.lastIndexOf("/") + 1,relatedLink.length()) : ""
+ if(instanceId.equals(sliceProfileInstance.getServiceInstanceId())){
+ profileInstId = sliceProfileInstance.getServiceInstanceId()
+ break
+ }
+ }
+ }
+ if(profileInstId){
+ break
}
}
+
+ //@TODO Temp begin*******************
+// AAIPluralResourceUri resourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("serviceType")).serviceInstance(profileInstId).sliceProfiles())
+// AAIResultWrapper wrapper = getAAIClient().get(resourceUri, NotFoundException.class)
+// Optional<SliceProfiles> sliceProfilesOpt =wrapper.asBean(SliceProfiles.class)
+// SliceProfiles sliceProfiles
+// String sliceProfileId
+// if(sliceProfilesOpt.isPresent()){
+// sliceProfiles = sliceProfilesOpt.get()
+// org.onap.aai.domain.yang.SliceProfile sliceProfile = sliceProfiles.getSliceProfile().get(0)
+// sliceProfileId = sliceProfile ? sliceProfile.getProfileId() : ""
+// }
+ //@TODO Temp end*******************
+
def currentNSSI = [:]
currentNSSI['nssiServiceInstanceId'] = nssi?.getServiceInstanceId()
currentNSSI['modelInvariantId'] = nssi?.getModelInvariantId()
@@ -289,7 +318,10 @@ class DoDeleteSliceService extends AbstractServiceTaskProcessor {
currentNSSI['nssiName'] = nssi?.getServiceInstanceName()
currentNSSI['sST'] = nssi?.getServiceType()
currentNSSI['PLMNIdList'] = nssi?.getServiceInstanceLocationId()
- currentNSSI['profileId'] = profileId
+ //@TODO Temp
+
+ currentNSSI['profileId'] = profileInstId
+// currentNSSI['profileId'] = sliceProfileId
currentNSSI['snssai'] = execution.getVariable("snssai") ?: ""
currentNSSI['nsiServiceInstanceId'] = execution.getVariable("nsiId") ?: ""
currentNSSI['operationId'] = execution.getVariable("operationId") ?: ""
@@ -343,7 +375,7 @@ class DoDeleteSliceService extends AbstractServiceTaskProcessor {
org.onap.aaiclient.client.generated.fluentbuilders.ServiceInstance serviceInstanceType = AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(instanceId)
def type
- if (aaiObjectName == Types.ALLOTTED_RESOURCES) {
+ if (aaiObjectName == Types.ALLOTTED_RESOURCE) {
type = serviceInstanceType.allottedResources()
} else if (aaiObjectName == Types.SLICE_PROFILES) {
type = serviceInstanceType.sliceProfiles()
@@ -361,8 +393,10 @@ class DoDeleteSliceService extends AbstractServiceTaskProcessor {
void terminateNSIQuery(DelegateExecution execution)
{
- logger.debug("Start terminateNSIQuery")
-
+ LOGGER.debug("Start terminateNSIQuery")
+
+ return
+ //To test
String requestId = execution.getVariable("msoRequestId")
String nxlId = currentNSSI['nsiServiceInstanceId']
String nxlType = "NSI"
@@ -375,17 +409,17 @@ class DoDeleteSliceService extends AbstractServiceTaskProcessor {
String basicAuthValue = utils.encrypt(basicAuth, msokey)
if (basicAuthValue != null) {
- logger.debug( "Obtained BasicAuth username and password for OOF: " + basicAuthValue)
+ LOGGER.debug( "Obtained BasicAuth username and password for OOF: " + basicAuthValue)
try {
authHeader = utils.getBasicAuth(basicAuthValue, msokey)
execution.setVariable("BasicAuthHeaderValue", authHeader)
} catch (Exception ex) {
- logger.debug( "Unable to encode username and password string: " + ex)
+ LOGGER.debug( "Unable to encode username and password string: " + ex)
exceptionUtil.buildAndThrowWorkflowException(execution, 401, "Internal Error - Unable to " +
"encode username and password string")
}
} else {
- logger.debug( "Unable to obtain BasicAuth - BasicAuth value null")
+ LOGGER.debug( "Unable to obtain BasicAuth - BasicAuth value null")
exceptionUtil.buildAndThrowWorkflowException(execution, 401, "Internal Error - BasicAuth " +
"value null")
}
@@ -397,7 +431,7 @@ class DoDeleteSliceService extends AbstractServiceTaskProcessor {
Response httpResponse = httpClient.post(oofRequest)
int responseCode = httpResponse.getStatus()
- logger.debug("OOF sync response code is: " + responseCode)
+ LOGGER.debug("OOF sync response code is: " + responseCode)
if(responseCode != 200){
exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, "Received a Bad Sync Response from OOF.")
@@ -407,9 +441,9 @@ class DoDeleteSliceService extends AbstractServiceTaskProcessor {
boolean terminateResponse = resMap.get("terminateResponse")
execution.setVariable("terminateNSI", terminateResponse)
} catch (Exception ex) {
- logger.debug( "Failed to get terminate Response suggested by OOF.")
+ LOGGER.debug( "Failed to get terminate Response suggested by OOF.")
exceptionUtil.buildAndThrowWorkflowException(execution, 401, "Failed to get terminate Response suggested by OOF.")
}
- logger.debug("Finish terminateNSIQuery")
+ LOGGER.debug("Finish terminateNSIQuery")
}
}
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/QueryJobStatus.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/QueryJobStatus.groovy
index 5cdf540173..74c9a49911 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/QueryJobStatus.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/QueryJobStatus.groovy
@@ -20,9 +20,11 @@
package org.onap.so.bpmn.infrastructure.scripts
+import com.fasterxml.jackson.databind.ObjectMapper
import groovy.json.JsonSlurper
import org.json.JSONObject
import org.camunda.bpm.engine.delegate.DelegateExecution
+import org.onap.so.beans.nsmf.JobStatusRequest
import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
import org.onap.so.bpmn.common.scripts.ExceptionUtil
import org.onap.so.bpmn.core.json.JsonUtils
@@ -43,16 +45,15 @@ public class QueryJobStatus extends AbstractServiceTaskProcessor{
try{
String requestId = execution.getVariable("msoRequestId")
logger.debug("RequestId :" + requestId)
- String responseId = execution.getVariable("responseId")
- String jobId = execution.getVariable("jobId")
+ String jobId = execution.getVariable("jobId")
def jsonSlurper = new JsonSlurper()
- HashMap<String,?> esrInfo=jsonSlurper.parseText(execution.getVariable("esrInfo"))
+ HashMap<String,?> esrInfo = jsonSlurper.parseText(execution.getVariable("esrInfo"))
logger.debug("esrInfo" + esrInfo.toString())
- HashMap<String,?> serviceInfo=jsonSlurper.parseText(execution.getVariable("serviceInfo"))
+ HashMap<String,?> serviceInfo = jsonSlurper.parseText(execution.getVariable("serviceInfo"))
logger.debug("serviceInfo" + serviceInfo.toString())
-
+
execution.setVariable("esrInfo", esrInfo)
execution.setVariable("serviceInfo", serviceInfo)
@@ -60,10 +61,9 @@ public class QueryJobStatus extends AbstractServiceTaskProcessor{
String endPoint = String.format("/api/rest/provMns/v1/NSS/jobs/%s", jobId)
String url = nssmfEndpoint + endPoint
execution.setVariable("NSSMF_AdapterEndpoint", url)
-
+
String payload = """
{
- "responseId": "${responseId}",
"esrInfo": ${execution.getVariable("esrInfo") as JSONObject},
"serviceInfo": ${execution.getVariable("serviceInfo") as JSONObject}
}
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnAllocateNssi.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnAllocateNssi.groovy
index 88db2161f7..deeec94b74 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnAllocateNssi.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnAllocateNssi.groovy
@@ -72,7 +72,7 @@ class TnAllocateNssi extends AbstractServiceTaskProcessor {
String additionalPropJsonStr = execution.getVariable("sliceParams")
- String tnNssiId = execution.getVariable("serviceInstanceID")
+ String tnNssiId = jsonUtil.getJsonValue(additionalPropJsonStr, "serviceInstanceID") //for debug
if (isBlank(tnNssiId)) {
tnNssiId = UUID.randomUUID().toString()
}
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy
index d97f416db9..009b0a1941 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy
@@ -32,6 +32,7 @@ import org.onap.so.bpmn.core.RollbackData
import org.onap.so.bpmn.core.UrnPropertiesReader
import org.onap.so.bpmn.core.WorkflowException
import org.onap.so.bpmn.core.json.JsonUtils
+import org.onap.so.db.request.beans.ResourceOperationStatus
import org.slf4j.Logger
import org.slf4j.LoggerFactory
@@ -122,7 +123,7 @@ class TnNssmfUtils {
}
String sdncRequest =
- """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.onap/so/request/types/v1"
+ """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.onap/so/request/types/v1"
xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1"
xmlns:sdncadapter="http://org.onap/workflow/sdnc/adapter/schema/v1">
<sdncadapter:RequestHeader>
@@ -332,4 +333,39 @@ class TnNssmfUtils {
createRelationShipInAAI(execution, aaiResourceUri, relationship)
}
+
+ ResourceOperationStatus buildRoStatus(String nsstId,
+ String nssiId,
+ String jobId,
+ String nsiId,
+ String action,
+ String status,
+ String progress,
+ String statusDescription) {
+ ResourceOperationStatus roStatus = new ResourceOperationStatus()
+ roStatus.setResourceTemplateUUID(nsstId)
+ roStatus.setResourceInstanceID(nssiId)
+ roStatus.setServiceId(nsiId)
+ roStatus.setOperationId(jobId)
+ roStatus.setOperType(action)
+ roStatus.setProgress(progress)
+ roStatus.setStatus(status)
+ roStatus.setStatusDescription(statusDescription)
+
+ return roStatus
+ }
+
+
+ void setEnableSdncConfig(DelegateExecution execution) {
+ String enableSdnc = UrnPropertiesReader.getVariable(
+ "mso.workflow.TnNssmf.enableSDNCNetworkConfig")
+ if (isBlank(enableSdnc)) {
+ logger.debug("mso.workflow.TnNssmf.enableSDNCNetworkConfig is undefined, so use default value (true)")
+ enableSdnc = "true"
+ }
+
+ logger.debug("setEnableSdncConfig: enableSdnc=" + enableSdnc)
+
+ execution.setVariable("enableSdnc", enableSdnc)
+ }
}
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/ServiceLevelUpgrade.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/ServiceLevelUpgrade.bpmn
index 8ff1a1efec..a12d8fef34 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/ServiceLevelUpgrade.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/ServiceLevelUpgrade.bpmn
@@ -415,4 +415,4 @@ pnfSwUpgrade.prepareFalloutHandler(execution)</bpmn:script>
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions> \ No newline at end of file
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoActivateTransportNSSI.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoActivateTransportNSSI.bpmn
index 4447b32f4a..51448b027c 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoActivateTransportNSSI.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoActivateTransportNSSI.bpmn
@@ -36,6 +36,7 @@ runScript.prepareUpdateJobStatus(execution,"finished","100","Activate or Deactiv
<bpmn:sequenceFlow id="SequenceFlow_1qv8qw1" sourceRef="ScriptTask_1ssh2l9" targetRef="Activity_0nhxd67" />
<bpmn:scriptTask id="ScriptTask_19uxoi8" name="Update AAI Status" scriptFormat="groovy">
<bpmn:incoming>SequenceFlow_1jdb2oq</bpmn:incoming>
+ <bpmn:incoming>Flow_0b2uim4</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_0kixzdj</bpmn:outgoing>
<bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
def actionType = execution.getVariable("actionType")
@@ -45,7 +46,7 @@ runScript.updateAAIOrchStatus(execution)</bpmn:script>
</bpmn:scriptTask>
<bpmn:sequenceFlow id="SequenceFlow_0kixzdj" sourceRef="ScriptTask_19uxoi8" targetRef="ScriptTask_1ssh2l9" />
<bpmn:scriptTask id="Activity_1tw8eyy" name="PreProcess SDNC Activate or Deactivate TN NSSI Request" scriptFormat="groovy">
- <bpmn:incoming>SequenceFlow_07e12rt</bpmn:incoming>
+ <bpmn:incoming>Flow_0046aj5</bpmn:incoming>
<bpmn:outgoing>Flow_0cpctye</bpmn:outgoing>
<bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
def runScript = new DoActivateTnNssi()
@@ -84,7 +85,7 @@ runScript.validateSDNCResponse(execution, response)</bpmn:script>
def runScript = new DoActivateTnNssi()
runScript.preProcessRequest(execution)</bpmn:script>
</bpmn:scriptTask>
- <bpmn:sequenceFlow id="SequenceFlow_07e12rt" sourceRef="ScriptTask_1tc44ge" targetRef="Activity_1tw8eyy" />
+ <bpmn:sequenceFlow id="SequenceFlow_07e12rt" sourceRef="ScriptTask_1tc44ge" targetRef="Gateway_1v41rsb" />
<bpmn:serviceTask id="Activity_0nhxd67" name="Update Resource Operation Status">
<bpmn:extensionElements>
<camunda:connector>
@@ -108,46 +109,69 @@ runScript.preProcessRequest(execution)</bpmn:script>
<bpmn:outgoing>Flow_1032bi1</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:sequenceFlow id="Flow_1032bi1" sourceRef="Activity_0nhxd67" targetRef="EndEvent_05h01gx" />
+ <bpmn:exclusiveGateway id="Gateway_1v41rsb" name="Enable SDNC?">
+ <bpmn:incoming>SequenceFlow_07e12rt</bpmn:incoming>
+ <bpmn:outgoing>Flow_0046aj5</bpmn:outgoing>
+ <bpmn:outgoing>Flow_0b2uim4</bpmn:outgoing>
+ </bpmn:exclusiveGateway>
+ <bpmn:sequenceFlow id="Flow_0046aj5" name="Yes" sourceRef="Gateway_1v41rsb" targetRef="Activity_1tw8eyy">
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("enableSdnc" ) == true)}</bpmn:conditionExpression>
+ </bpmn:sequenceFlow>
+ <bpmn:sequenceFlow id="Flow_0b2uim4" name="No" sourceRef="Gateway_1v41rsb" targetRef="ScriptTask_19uxoi8" />
</bpmn:process>
<bpmn:message id="Message_0c4b2r5" name="SliceServiceTask" />
<bpmn:error id="Error_03akl5v" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
<bpmn:error id="Error_0p2naox" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoActivateTransportNSSI">
+ <bpmndi:BPMNEdge id="Flow_1032bi1_di" bpmnElement="Flow_1032bi1">
+ <di:waypoint x="1040" y="380" />
+ <di:waypoint x="1192" y="380" />
+ </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_07e12rt_di" bpmnElement="SequenceFlow_07e12rt">
<di:waypoint x="385" y="121" />
- <di:waypoint x="509" y="121" />
+ <di:waypoint x="465" y="121" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1jdb2oq_di" bpmnElement="SequenceFlow_1jdb2oq">
- <di:waypoint x="1080" y="121" />
- <di:waypoint x="1220" y="121" />
- <di:waypoint x="1220" y="210" />
- <di:waypoint x="335" y="210" />
- <di:waypoint x="335" y="310" />
+ <di:waypoint x="1210" y="121" />
+ <di:waypoint x="1310" y="121" />
+ <di:waypoint x="1310" y="260" />
+ <di:waypoint x="490" y="260" />
+ <di:waypoint x="490" y="340" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0fuabjs_di" bpmnElement="Flow_0fuabjs">
- <di:waypoint x="850" y="121" />
- <di:waypoint x="959" y="121" />
+ <di:waypoint x="990" y="121" />
+ <di:waypoint x="1089" y="121" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0cpctye_di" bpmnElement="Flow_0cpctye">
- <di:waypoint x="630" y="121" />
- <di:waypoint x="729" y="121" />
+ <di:waypoint x="730" y="121" />
+ <di:waypoint x="869" y="121" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_0kixzdj_di" bpmnElement="SequenceFlow_0kixzdj">
- <di:waypoint x="385" y="350" />
- <di:waypoint x="530" y="350" />
+ <di:waypoint x="540" y="380" />
+ <di:waypoint x="685" y="380" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_1qv8qw1_di" bpmnElement="SequenceFlow_1qv8qw1">
- <di:waypoint x="630" y="350" />
- <di:waypoint x="740" y="350" />
+ <di:waypoint x="785" y="380" />
+ <di:waypoint x="940" y="380" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_03s744c_di" bpmnElement="SequenceFlow_03s744c">
<di:waypoint x="214" y="121" />
<di:waypoint x="285" y="121" />
</bpmndi:BPMNEdge>
- <bpmndi:BPMNEdge id="Flow_1032bi1_di" bpmnElement="Flow_1032bi1">
- <di:waypoint x="840" y="350" />
- <di:waypoint x="1002" y="350" />
+ <bpmndi:BPMNEdge id="Flow_0046aj5_di" bpmnElement="Flow_0046aj5">
+ <di:waypoint x="515" y="121" />
+ <di:waypoint x="609" y="121" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="553" y="103" width="19" height="14" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="Flow_0b2uim4_di" bpmnElement="Flow_0b2uim4">
+ <di:waypoint x="490" y="146" />
+ <di:waypoint x="490" y="340" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="498" y="166" width="14" height="14" />
+ </bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="StartEvent_1nbljfd_di" bpmnElement="StartEvent_1nbljfd">
<dc:Bounds x="178" y="103" width="36" height="36" />
@@ -155,8 +179,35 @@ runScript.preProcessRequest(execution)</bpmn:script>
<dc:Bounds x="163" y="146" width="81" height="53" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="EndEvent_05h01gx_di" bpmnElement="EndEvent_05h01gx">
+ <dc:Bounds x="1192" y="362" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="1200" y="405" width="20" height="14" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0nhxd67_di" bpmnElement="Activity_0nhxd67">
- <dc:Bounds x="740" y="310" width="100" height="80" />
+ <dc:Bounds x="940" y="340" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ScriptTask_1ssh2l9_di" bpmnElement="ScriptTask_1ssh2l9">
+ <dc:Bounds x="685" y="340" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="Activity_0phv8e5_di" bpmnElement="Activity_0phv8e5">
+ <dc:Bounds x="1089" y="74" width="121" height="94" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="Activity_0p20esb_di" bpmnElement="Activity_0p20esb">
+ <dc:Bounds x="869" y="74" width="121" height="94" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="Activity_1tw8eyy_di" bpmnElement="Activity_1tw8eyy">
+ <dc:Bounds x="609" y="74" width="121" height="94" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="Gateway_1v41rsb_di" bpmnElement="Gateway_1v41rsb" isMarkerVisible="true">
+ <dc:Bounds x="465" y="96" width="50" height="50" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="453" y="73" width="75" height="14" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ScriptTask_19uxoi8_di" bpmnElement="ScriptTask_19uxoi8">
+ <dc:Bounds x="440" y="340" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="SubProcess_1yv9i68_di" bpmnElement="SubProcess_1yv9i68" isExpanded="true">
<dc:Bounds x="685" y="1080" width="781" height="196" />
@@ -178,27 +229,6 @@ runScript.preProcessRequest(execution)</bpmn:script>
<bpmndi:BPMNShape id="ScriptTask_1swzdpw_di" bpmnElement="ScriptTask_1swzdpw">
<dc:Bounds x="979" y="1144" width="100" height="80" />
</bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="EndEvent_05h01gx_di" bpmnElement="EndEvent_05h01gx">
- <dc:Bounds x="1002" y="332" width="36" height="36" />
- <bpmndi:BPMNLabel>
- <dc:Bounds x="1010" y="375" width="20" height="14" />
- </bpmndi:BPMNLabel>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="ScriptTask_1ssh2l9_di" bpmnElement="ScriptTask_1ssh2l9">
- <dc:Bounds x="530" y="310" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="ScriptTask_19uxoi8_di" bpmnElement="ScriptTask_19uxoi8">
- <dc:Bounds x="285" y="310" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="Activity_1tw8eyy_di" bpmnElement="Activity_1tw8eyy">
- <dc:Bounds x="509" y="74" width="121" height="94" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="Activity_0p20esb_di" bpmnElement="Activity_0p20esb">
- <dc:Bounds x="729" y="74" width="121" height="94" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="Activity_0phv8e5_di" bpmnElement="Activity_0phv8e5">
- <dc:Bounds x="959" y="74" width="121" height="94" />
- </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="ScriptTask_1tc44ge_di" bpmnElement="ScriptTask_1tc44ge">
<dc:Bounds x="285" y="81" width="100" height="80" />
</bpmndi:BPMNShape>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoAllocateAccessNSSI.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoAllocateAccessNSSI.bpmn
index 9c12200657..9b449013b1 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoAllocateAccessNSSI.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoAllocateAccessNSSI.bpmn
@@ -193,7 +193,7 @@ nss.prepareDecomposeService(execution)</bpmn:script>
<camunda:in source="esrInfo" target="esrInfo" />
<camunda:in source="serviceInfo" target="serviceInfo" />
<camunda:in source="TNFH_jobId" target="jobId" />
- <camunda:out source="jobResponse" target="TNFH_jobResponse" />
+ <camunda:out source="responseDescriptor" target="TNFH_jobResponse" />
<camunda:in source="responseId" target="responseId" />
<camunda:in source="job_timeout" target="timeout" />
</bpmn:extensionElements>
@@ -206,7 +206,7 @@ nss.prepareDecomposeService(execution)</bpmn:script>
<camunda:in source="esrInfo" target="esrInfo" />
<camunda:in source="serviceInfo" target="serviceInfo" />
<camunda:in source="TNMH_jobId" target="jobId" />
- <camunda:out source="jobResponse" target="TNMH_jobResponse" />
+ <camunda:out source="responseDescriptor" target="TNMH_jobResponse" />
<camunda:in source="responseId" target="responseId" />
<camunda:in source="job_timeout" target="timeout" />
</bpmn:extensionElements>
@@ -318,7 +318,7 @@ nss.prepareModifyAccessNssiInputs(execution)</bpmn:script>
<camunda:in source="esrInfo" target="esrInfo" />
<camunda:in source="serviceInfo" target="serviceInfo" />
<camunda:in source="modifyRanNssiJobId" target="jobId" />
- <camunda:out source="jobResponse" target="jobResponse" />
+ <camunda:out source="responseDescriptor" target="jobResponse" />
<camunda:in source="responseId" target="responseId" />
<camunda:in source="job_timeout" target="timeout" />
</bpmn:extensionElements>
@@ -435,7 +435,7 @@ nss.updateAaiWithRANInstances(execution)</bpmn:script>
<bpmn:sequenceFlow id="Flow_1exjm0h" sourceRef="Activity_0pa8al6" targetRef="Event_15zn4zi" />
<bpmn:sequenceFlow id="Flow_0bd6dhi" sourceRef="Activity_0zn4e4n" targetRef="Activity_0vf28ld" />
<bpmn:sequenceFlow id="Flow_0kcvava" sourceRef="Activity_0vf28ld" targetRef="Event_0u9308h" />
- <bpmn:scriptTask id="Activity_0vf28ld" name="update AAI relationships">
+ <bpmn:scriptTask id="Activity_0vf28ld" name="update AAI relationships" scriptFormat="groovy">
<bpmn:incoming>Flow_0bd6dhi</bpmn:incoming>
<bpmn:outgoing>Flow_0kcvava</bpmn:outgoing>
<bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoAllocateTransportNSSI.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoAllocateTransportNSSI.bpmn
index 4f83c872a1..f3bd700d9a 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoAllocateTransportNSSI.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoAllocateTransportNSSI.bpmn
@@ -164,7 +164,7 @@ css.prepareOofSelection(execution)</bpmn:script>
<bpmn:incoming>SequenceFlow_0n4xku8</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_0kixzdj</bpmn:outgoing>
<bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
-execution.setVariable("orchestrationStatus", "activated")
+execution.setVariable("orchestrationStatus", "deactivated")
def runScript = new TnAllocateNssi()
runScript.updateAAIOrchStatus(execution)</bpmn:script>
</bpmn:scriptTask>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateTnNssiInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateTnNssiInstance.bpmn
index fefa022bb9..1f29f817b8 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateTnNssiInstance.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateTnNssiInstance.bpmn
@@ -29,7 +29,7 @@ dcsi.createServiceInstance(execution)</bpmn:script>
def dcsi = new DoCreateTnNssiInstance()
dcsi.createAllottedResource(execution)</bpmn:script>
</bpmn:scriptTask>
- <bpmn:sequenceFlow id="SequenceFlow_17u69c4" sourceRef="ScriptTask_18rzwzb" targetRef="Event_1a9swwa" />
+ <bpmn:sequenceFlow id="SequenceFlow_17u69c4" sourceRef="ScriptTask_18rzwzb" targetRef="Gateway_1cehbyc" />
<bpmn:intermediateCatchEvent id="Event_0l9vk9p" name="Start SDNC Operation">
<bpmn:outgoing>Flow_1c8zr59</bpmn:outgoing>
<bpmn:linkEventDefinition id="LinkEventDefinition_0uwmpn2" name="SdncOperation" />
@@ -67,13 +67,23 @@ dcsi.validateSDNCResponse(execution, response, "allocate")</bpmn:script>
<bpmn:sequenceFlow id="Flow_1c8zr59" name="" sourceRef="Event_0l9vk9p" targetRef="Activity_0eh82ds" />
<bpmn:sequenceFlow id="Flow_0pko5tm" name="" sourceRef="Activity_0eh82ds" targetRef="Activity_1fs2182" />
<bpmn:sequenceFlow id="Flow_11kadz7" name="" sourceRef="Activity_1fs2182" targetRef="Activity_16luyg1" />
- <bpmn:endEvent id="Event_1rsf7yb">
+ <bpmn:endEvent id="Event_1rsf7yb" name="No">
<bpmn:incoming>SequenceFlow_1uiz85h</bpmn:incoming>
+ <bpmn:incoming>Flow_07tmxxo</bpmn:incoming>
</bpmn:endEvent>
<bpmn:intermediateThrowEvent id="Event_1a9swwa" name="Goto SDNC operation">
- <bpmn:incoming>SequenceFlow_17u69c4</bpmn:incoming>
+ <bpmn:incoming>Flow_0dp5afv</bpmn:incoming>
<bpmn:linkEventDefinition id="LinkEventDefinition_1skl6p7" name="SdncOperation" />
</bpmn:intermediateThrowEvent>
+ <bpmn:exclusiveGateway id="Gateway_1cehbyc" name="Enable SDNC?">
+ <bpmn:incoming>SequenceFlow_17u69c4</bpmn:incoming>
+ <bpmn:outgoing>Flow_0dp5afv</bpmn:outgoing>
+ <bpmn:outgoing>Flow_07tmxxo</bpmn:outgoing>
+ </bpmn:exclusiveGateway>
+ <bpmn:sequenceFlow id="Flow_0dp5afv" name="Yes" sourceRef="Gateway_1cehbyc" targetRef="Event_1a9swwa">
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("enableSdnc" ) == true)}</bpmn:conditionExpression>
+ </bpmn:sequenceFlow>
+ <bpmn:sequenceFlow id="Flow_07tmxxo" name="No" sourceRef="Gateway_1cehbyc" targetRef="Event_1rsf7yb" />
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoCreateTnNssiInstance">
@@ -91,7 +101,7 @@ dcsi.validateSDNCResponse(execution, response, "allocate")</bpmn:script>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_17u69c4_di" bpmnElement="SequenceFlow_17u69c4">
<di:waypoint x="830" y="129" />
- <di:waypoint x="982" y="129" />
+ <di:waypoint x="895" y="129" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_0g5bwvl_di" bpmnElement="SequenceFlow_0g5bwvl">
<di:waypoint x="600" y="129" />
@@ -118,12 +128,36 @@ dcsi.validateSDNCResponse(execution, response, "allocate")</bpmn:script>
<dc:Bounds x="266" y="123" width="0" height="12" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="Flow_0dp5afv_di" bpmnElement="Flow_0dp5afv">
+ <di:waypoint x="945" y="129" />
+ <di:waypoint x="1072" y="129" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="1000" y="113" width="19" height="14" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="Flow_07tmxxo_di" bpmnElement="Flow_07tmxxo">
+ <di:waypoint x="920" y="154" />
+ <di:waypoint x="920" y="375" />
+ <di:waypoint x="972" y="375" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="929" y="262" width="14" height="14" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="allocateTnNssi_StartEvent">
<dc:Bounds x="175" y="111" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="153" y="147" width="86" height="27" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ScriptTask_03j6ogo_di" bpmnElement="PreprocessIncomingRequest_task">
+ <dc:Bounds x="310" y="89" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ScriptTask_1qmmew8_di" bpmnElement="instantiate_NSTask">
+ <dc:Bounds x="500" y="89" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ScriptTask_18rzwzb_di" bpmnElement="ScriptTask_18rzwzb">
+ <dc:Bounds x="730" y="89" width="100" height="80" />
+ </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0l9vk9p_di" bpmnElement="Event_0l9vk9p">
<dc:Bounds x="175" y="357" width="36" height="36" />
<bpmndi:BPMNLabel>
@@ -141,21 +175,21 @@ dcsi.validateSDNCResponse(execution, response, "allocate")</bpmn:script>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1rsf7yb_di" bpmnElement="Event_1rsf7yb">
<dc:Bounds x="972" y="357" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="983" y="400" width="14" height="14" />
+ </bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1a9swwa_di" bpmnElement="Event_1a9swwa">
- <dc:Bounds x="982" y="111" width="36" height="36" />
+ <dc:Bounds x="1072" y="111" width="36" height="36" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="973" y="154" width="59" height="27" />
+ <dc:Bounds x="1063" y="154" width="59" height="27" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="ScriptTask_18rzwzb_di" bpmnElement="ScriptTask_18rzwzb">
- <dc:Bounds x="730" y="89" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="ScriptTask_1qmmew8_di" bpmnElement="instantiate_NSTask">
- <dc:Bounds x="500" y="89" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="ScriptTask_03j6ogo_di" bpmnElement="PreprocessIncomingRequest_task">
- <dc:Bounds x="310" y="89" width="100" height="80" />
+ <bpmndi:BPMNShape id="Gateway_1cehbyc_di" bpmnElement="Gateway_1cehbyc" isMarkerVisible="true">
+ <dc:Bounds x="895" y="104" width="50" height="50" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="884" y="74" width="75" height="14" />
+ </bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeallocateNSSI.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeallocateNSSI.bpmn
index a745f7c50d..85533e72dc 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeallocateNSSI.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeallocateNSSI.bpmn
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_0884541" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.2">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_0884541" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.4.1">
<bpmn:process id="DoDeallocateNSSIV1" name="DoDeallocateNSSIV1" isExecutable="true">
<bpmn:startEvent id="StartEvent_1" name="start">
<bpmn:outgoing>SequenceFlow_05jfhy6</bpmn:outgoing>
@@ -33,7 +33,7 @@ def dnssi= new DoDeallocateNSSI()
dnssi.processDecomposition(execution)</bpmn:script>
</bpmn:scriptTask>
<bpmn:sequenceFlow id="SequenceFlow_1e7o57n" sourceRef="Task_15ut397" targetRef="Task_0vi4ijv" />
- <bpmn:scriptTask id="Task_0vi4ijv" name="Send deallocate request to NSSMF" scriptFormat="groovy">
+ <bpmn:scriptTask id="Task_0vi4ijv" name="Send request to NSSMF" scriptFormat="groovy">
<bpmn:incoming>SequenceFlow_1e7o57n</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_1wj89r5</bpmn:outgoing>
<bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
@@ -53,9 +53,9 @@ def dnssi= new DoDeallocateNSSI()
dnssi.delSliceProfileFromAAI(execution)</bpmn:script>
</bpmn:scriptTask>
<bpmn:endEvent id="EndEvent_1f579t4" name="end">
- <bpmn:incoming>SequenceFlow_1ii5002</bpmn:incoming>
+ <bpmn:incoming>SequenceFlow_0hyn6ca</bpmn:incoming>
</bpmn:endEvent>
- <bpmn:sequenceFlow id="SequenceFlow_1ii5002" sourceRef="Task_13vaezk" targetRef="EndEvent_1f579t4" />
+ <bpmn:sequenceFlow id="SequenceFlow_1ii5002" sourceRef="Task_13vaezk" targetRef="Task_0ocemjg" />
<bpmn:sequenceFlow id="SequenceFlow_0xq380j" name="yes" sourceRef="ExclusiveGateway_0nhfsui" targetRef="Task_13vaezk">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("isNSSIDeAllocated" ) == true)}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
@@ -102,7 +102,6 @@ dnssi.prepareUpdateOperationStatus(execution)</bpmn:script>
<camunda:in source="esrInfo" target="esrInfo" />
<camunda:in source="serviceInfo" target="serviceInfo" />
<camunda:in source="jobId" target="jobId" />
- <camunda:in source="responseId" target="responseId" />
<camunda:out source="responseDescriptor" target="responseDescriptor" />
</bpmn:extensionElements>
<bpmn:incoming>SequenceFlow_0w01l14</bpmn:incoming>
@@ -133,6 +132,14 @@ dnssi.prepareJobStatusRequest(execution)</bpmn:script>
<bpmn:errorEventDefinition id="ErrorEventDefinition_11pdh1q" errorRef="Error_1o5kb95" />
</bpmn:endEvent>
<bpmn:sequenceFlow id="SequenceFlow_1wpbkt9" name="no" sourceRef="ExclusiveGateway_0nhfsui" targetRef="Event_11u9vp2" />
+ <bpmn:sequenceFlow id="SequenceFlow_0hyn6ca" sourceRef="Task_0ocemjg" targetRef="EndEvent_1f579t4" />
+ <bpmn:scriptTask id="Task_0ocemjg" name="Delete Slice Profile Service From AAI" scriptFormat="groovy">
+ <bpmn:incoming>SequenceFlow_1ii5002</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_0hyn6ca</bpmn:outgoing>
+ <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def dnssi= new DoDeallocateNSSI()
+dnssi.delSliceProfileServiceFromAAI(execution)</bpmn:script>
+ </bpmn:scriptTask>
</bpmn:process>
<bpmn:error id="Error_1o5kb95" name="MSO Workflow Exception" errorCode="MSOWorkflowException" />
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
@@ -181,7 +188,7 @@ dnssi.prepareJobStatusRequest(execution)</bpmn:script>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_1ii5002_di" bpmnElement="SequenceFlow_1ii5002">
<di:waypoint x="2040" y="130" />
- <di:waypoint x="2102" y="130" />
+ <di:waypoint x="2090" y="130" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_1e7o57n_di" bpmnElement="SequenceFlow_1e7o57n">
<di:waypoint x="800" y="130" />
@@ -227,9 +234,9 @@ dnssi.prepareJobStatusRequest(execution)</bpmn:script>
<dc:Bounds x="1940" y="90" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="EndEvent_1f579t4_di" bpmnElement="EndEvent_1f579t4">
- <dc:Bounds x="2102" y="112" width="36" height="36" />
+ <dc:Bounds x="2272" y="112" width="36" height="36" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="2111" y="155" width="19" height="14" />
+ <dc:Bounds x="2281" y="155" width="19" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="ScriptTask_1dytya8_di" bpmnElement="Task_1vste9s">
@@ -253,6 +260,13 @@ dnssi.prepareJobStatusRequest(execution)</bpmn:script>
<bpmndi:BPMNShape id="Event_11u9vp2_di" bpmnElement="Event_11u9vp2">
<dc:Bounds x="1842" y="212" width="36" height="36" />
</bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_0hyn6ca_di" bpmnElement="SequenceFlow_0hyn6ca">
+ <di:waypoint x="2190" y="130" />
+ <di:waypoint x="2272" y="130" />
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="ScriptTask_12dnirp_di" bpmnElement="Task_0ocemjg">
+ <dc:Bounds x="2090" y="90" width="100" height="80" />
+ </bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeallocateTransportNSSI.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeallocateTransportNSSI.bpmn
index bd759caffd..de8391428d 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeallocateTransportNSSI.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeallocateTransportNSSI.bpmn
@@ -29,13 +29,13 @@ ex.processJavaException(execution)</bpmn:script>
<bpmn:incoming>SequenceFlow_1jygjln</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_1qv8qw1</bpmn:outgoing>
<bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
-def runScript = new TnAllocateNssi()
+def runScript = new DoDeallocateTnNssi()
runScript.prepareUpdateJobStatus(execution,"finished","100","Deallocated TN NSSI successfully")</bpmn:script>
</bpmn:scriptTask>
<bpmn:sequenceFlow id="SequenceFlow_03s744c" sourceRef="StartEvent_1nbljfd" targetRef="ScriptTask_1tc44ge" />
<bpmn:sequenceFlow id="SequenceFlow_1qv8qw1" sourceRef="ScriptTask_1ssh2l9" targetRef="Activity_0rgeefb" />
<bpmn:scriptTask id="Activity_1tw8eyy" name="PreProcess SDNC Deallocate TN NSSI Request" scriptFormat="groovy">
- <bpmn:incoming>SequenceFlow_07e12rt</bpmn:incoming>
+ <bpmn:incoming>Flow_0sj0mtu</bpmn:incoming>
<bpmn:outgoing>Flow_0cpctye</bpmn:outgoing>
<bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
def runScript = new DoDeallocateTnNssi()
@@ -68,6 +68,7 @@ runScript.validateSDNCResponse(execution, response, "deallocate")</bpmn:script>
</bpmn:scriptTask>
<bpmn:scriptTask id="Activity_013rjwc" name="Delete Service Instance (TN NSSI) in AAI" scriptFormat="groovy">
<bpmn:incoming>SequenceFlow_1jdb2oq</bpmn:incoming>
+ <bpmn:incoming>Flow_0dirb5b</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_1jygjln</bpmn:outgoing>
<bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
def runScript = new DoDeallocateTnNssi()
@@ -81,7 +82,7 @@ runScript.deleteServiceInstance(execution)</bpmn:script>
def runScript = new DoDeallocateTnNssi()
runScript.preProcessRequest(execution)</bpmn:script>
</bpmn:scriptTask>
- <bpmn:sequenceFlow id="SequenceFlow_07e12rt" sourceRef="ScriptTask_1tc44ge" targetRef="Activity_1tw8eyy" />
+ <bpmn:sequenceFlow id="SequenceFlow_07e12rt" sourceRef="ScriptTask_1tc44ge" targetRef="Gateway_1spi9lo" />
<bpmn:sequenceFlow id="SequenceFlow_1jygjln" sourceRef="Activity_013rjwc" targetRef="ScriptTask_1ssh2l9" />
<bpmn:serviceTask id="Activity_0rgeefb" name="Update Resource Operation Status">
<bpmn:extensionElements>
@@ -106,6 +107,15 @@ runScript.preProcessRequest(execution)</bpmn:script>
<bpmn:outgoing>Flow_0ca4l8d</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:sequenceFlow id="Flow_0ca4l8d" sourceRef="Activity_0rgeefb" targetRef="EndEvent_05h01gx" />
+ <bpmn:exclusiveGateway id="Gateway_1spi9lo" name="Enable SDNC?">
+ <bpmn:incoming>SequenceFlow_07e12rt</bpmn:incoming>
+ <bpmn:outgoing>Flow_0sj0mtu</bpmn:outgoing>
+ <bpmn:outgoing>Flow_0dirb5b</bpmn:outgoing>
+ </bpmn:exclusiveGateway>
+ <bpmn:sequenceFlow id="Flow_0sj0mtu" name="Yes" sourceRef="Gateway_1spi9lo" targetRef="Activity_1tw8eyy">
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("enableSdnc" ) == true)}</bpmn:conditionExpression>
+ </bpmn:sequenceFlow>
+ <bpmn:sequenceFlow id="Flow_0dirb5b" name="No" sourceRef="Gateway_1spi9lo" targetRef="Activity_013rjwc" />
</bpmn:process>
<bpmn:message id="Message_0c4b2r5" name="SliceServiceTask" />
<bpmn:error id="Error_03akl5v" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
@@ -113,40 +123,54 @@ runScript.preProcessRequest(execution)</bpmn:script>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoDeallocateTransportNSSI">
<bpmndi:BPMNEdge id="Flow_0ca4l8d_di" bpmnElement="Flow_0ca4l8d">
- <di:waypoint x="840" y="350" />
- <di:waypoint x="1022" y="350" />
+ <di:waypoint x="1030" y="410" />
+ <di:waypoint x="1152" y="410" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1jygjln_di" bpmnElement="SequenceFlow_1jygjln">
- <di:waypoint x="360" y="350" />
- <di:waypoint x="520" y="350" />
+ <di:waypoint x="530" y="410" />
+ <di:waypoint x="660" y="410" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_07e12rt_di" bpmnElement="SequenceFlow_07e12rt">
<di:waypoint x="385" y="121" />
- <di:waypoint x="509" y="121" />
+ <di:waypoint x="455" y="121" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1jdb2oq_di" bpmnElement="SequenceFlow_1jdb2oq">
- <di:waypoint x="1080" y="121" />
+ <di:waypoint x="1130" y="121" />
<di:waypoint x="1220" y="121" />
- <di:waypoint x="1220" y="230" />
- <di:waypoint x="310" y="230" />
- <di:waypoint x="310" y="310" />
+ <di:waypoint x="1220" y="260" />
+ <di:waypoint x="480" y="260" />
+ <di:waypoint x="480" y="370" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0fuabjs_di" bpmnElement="Flow_0fuabjs">
- <di:waypoint x="850" y="121" />
- <di:waypoint x="959" y="121" />
+ <di:waypoint x="910" y="121" />
+ <di:waypoint x="1009" y="121" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0cpctye_di" bpmnElement="Flow_0cpctye">
- <di:waypoint x="630" y="121" />
- <di:waypoint x="729" y="121" />
+ <di:waypoint x="690" y="121" />
+ <di:waypoint x="789" y="121" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_1qv8qw1_di" bpmnElement="SequenceFlow_1qv8qw1">
- <di:waypoint x="620" y="350" />
- <di:waypoint x="740" y="350" />
+ <di:waypoint x="760" y="410" />
+ <di:waypoint x="930" y="410" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_03s744c_di" bpmnElement="SequenceFlow_03s744c">
<di:waypoint x="214" y="121" />
<di:waypoint x="285" y="121" />
</bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="Flow_0sj0mtu_di" bpmnElement="Flow_0sj0mtu">
+ <di:waypoint x="505" y="121" />
+ <di:waypoint x="569" y="121" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="529" y="103" width="19" height="14" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="Flow_0dirb5b_di" bpmnElement="Flow_0dirb5b">
+ <di:waypoint x="480" y="146" />
+ <di:waypoint x="480" y="370" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="483" y="166" width="14" height="14" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="StartEvent_1nbljfd_di" bpmnElement="StartEvent_1nbljfd">
<dc:Bounds x="178" y="103" width="36" height="36" />
<bpmndi:BPMNLabel>
@@ -154,17 +178,35 @@ runScript.preProcessRequest(execution)</bpmn:script>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="ScriptTask_1ssh2l9_di" bpmnElement="ScriptTask_1ssh2l9">
- <dc:Bounds x="520" y="310" width="100" height="80" />
+ <dc:Bounds x="660" y="370" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="Activity_013rjwc_di" bpmnElement="Activity_013rjwc">
+ <dc:Bounds x="430" y="370" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0rgeefb_di" bpmnElement="Activity_0rgeefb">
- <dc:Bounds x="740" y="310" width="100" height="80" />
+ <dc:Bounds x="930" y="370" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="EndEvent_05h01gx_di" bpmnElement="EndEvent_05h01gx">
- <dc:Bounds x="1022" y="332" width="36" height="36" />
+ <dc:Bounds x="1152" y="392" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="1160" y="435" width="20" height="14" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="Activity_1tw8eyy_di" bpmnElement="Activity_1tw8eyy">
+ <dc:Bounds x="569" y="74" width="121" height="94" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="Gateway_1spi9lo_di" bpmnElement="Gateway_1spi9lo" isMarkerVisible="true">
+ <dc:Bounds x="455" y="96" width="50" height="50" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="1030" y="375" width="20" height="14" />
+ <dc:Bounds x="443" y="73" width="75" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="Activity_0p20esb_di" bpmnElement="Activity_0p20esb">
+ <dc:Bounds x="789" y="74" width="121" height="94" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="Activity_0phv8e5_di" bpmnElement="Activity_0phv8e5">
+ <dc:Bounds x="1009" y="74" width="121" height="94" />
+ </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="SubProcess_1yv9i68_di" bpmnElement="SubProcess_1yv9i68" isExpanded="true">
<dc:Bounds x="685" y="1080" width="781" height="196" />
</bpmndi:BPMNShape>
@@ -185,18 +227,6 @@ runScript.preProcessRequest(execution)</bpmn:script>
<bpmndi:BPMNShape id="ScriptTask_1swzdpw_di" bpmnElement="ScriptTask_1swzdpw">
<dc:Bounds x="979" y="1144" width="100" height="80" />
</bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="Activity_1tw8eyy_di" bpmnElement="Activity_1tw8eyy">
- <dc:Bounds x="509" y="74" width="121" height="94" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="Activity_0p20esb_di" bpmnElement="Activity_0p20esb">
- <dc:Bounds x="729" y="74" width="121" height="94" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="Activity_0phv8e5_di" bpmnElement="Activity_0phv8e5">
- <dc:Bounds x="959" y="74" width="121" height="94" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="Activity_013rjwc_di" bpmnElement="Activity_013rjwc">
- <dc:Bounds x="260" y="310" width="100" height="80" />
- </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="ScriptTask_1tc44ge_di" bpmnElement="ScriptTask_1tc44ge">
<dc:Bounds x="285" y="81" width="100" height="80" />
</bpmndi:BPMNShape>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteSliceService.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteSliceService.bpmn
index 5510dcde38..9edb6127f0 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteSliceService.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteSliceService.bpmn
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_1p1suc9" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.2">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_1p1suc9" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.4.1">
<bpmn:process id="DoDeleteSliceServiceV1" name="DoDeleteSliceServiceV1" isExecutable="true">
<bpmn:startEvent id="StartEvent_1" name="start">
<bpmn:outgoing>SequenceFlow_0ep5het</bpmn:outgoing>
@@ -68,14 +68,14 @@ ddss.parseNextNSSI(execution)</bpmn:script>
</bpmn:scriptTask>
<bpmn:sequenceFlow id="SequenceFlow_15z9iio" sourceRef="ScriptTask_159855t" targetRef="ExclusiveGateway_1ogbunu" />
<bpmn:sequenceFlow id="SequenceFlow_029u1wr" sourceRef="Task_13k9usx" targetRef="Task_1ujnqtj" />
- <bpmn:scriptTask id="Task_13k9usx" name="Query E2ESlice Serive From AAI" scriptFormat="groovy">
+ <bpmn:scriptTask id="Task_13k9usx" name="Query ServiceProfile From AAI" scriptFormat="groovy">
<bpmn:incoming>SequenceFlow_0npmman</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_029u1wr</bpmn:outgoing>
<bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
def ddss= new DoDeleteSliceService()
-ddss.queryE2ESliceSeriveFromAAI(execution)</bpmn:script>
+ddss.queryServiceProfileFromAAI(execution)</bpmn:script>
</bpmn:scriptTask>
- <bpmn:callActivity id="Task_1rc7mcw" name="Do Deallocate NSSI " calledElement="DoDeallocateNSSIV1">
+ <bpmn:callActivity id="Task_1rc7mcw" name="Do Deallocate NSSI" calledElement="DoDeallocateNSSIV1">
<bpmn:extensionElements>
<camunda:in source="currentNSSI" target="currentNSSI" />
<camunda:in source="msoRequestId" target="msoRequestId" />
@@ -90,7 +90,7 @@ ddss.queryE2ESliceSeriveFromAAI(execution)</bpmn:script>
<bpmn:incoming>SequenceFlow_1aa2ek0</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_1252rbf</bpmn:outgoing>
<bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
-def dss= new DeleteSliceService()
+def dss= new DoDeleteSliceService()
dss.terminateNSIQuery(execution)</bpmn:script>
</bpmn:scriptTask>
<bpmn:sequenceFlow id="SequenceFlow_17tvomo" sourceRef="Task_1iomfas" targetRef="Task_1rc7mcw" />
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/AaiResourceIdValidator.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/AaiResourceIdValidator.java
new file mode 100644
index 0000000000..6d90070b96
--- /dev/null
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/AaiResourceIdValidator.java
@@ -0,0 +1,220 @@
+package org.onap.so.bpmn.infrastructure.workflow.tasks;
+
+import java.util.Map;
+import java.util.Optional;
+import org.onap.aai.domain.yang.GenericVnf;
+import org.onap.aai.domain.yang.GenericVnfs;
+import org.onap.aai.domain.yang.L3Network;
+import org.onap.aai.domain.yang.ServiceInstance;
+import org.onap.aai.domain.yang.ServiceInstances;
+import org.onap.aai.domain.yang.VolumeGroup;
+import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder;
+import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
+import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils;
+import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.DuplicateNameException;
+import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.MultipleObjectsFoundException;
+import org.onap.so.serviceinstancebeans.RequestDetails;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+@Component
+public class AaiResourceIdValidator {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(AaiResourceIdValidator.class);
+
+ private static final String SERVICE_INSTANCE = "serviceInstance";
+ private static final String NAME_EXISTS_WITH_DIFF_VERSION_ID = "(%s) and different version id (%s)";
+ private static final String WORKFLOW_ACTION_WAS_UNABLE_TO_VERIFY_IF_THE_INSTANCE_NAME_ALREADY_EXIST_IN_AAI =
+ "WorkflowAction was unable to verify if the instance name already exist in AAI.";
+ private static final String NAME_EXISTS_MULTIPLE =
+ "(%s) and multiple combination of model-version-id + service-type + global-customer-id";
+ private static final String NAME_EXISTS_WITH_DIFF_COMBINATION =
+ "(%s) and global-customer-id (%s), service-type (%s), model-version-id (%s)";
+ private static final String NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID =
+ "(%s), same parent and different customization id (%s)";
+ private static final String NAME_EXISTS_WITH_DIFF_PARENT = "(%s) id (%s) and different parent relationship";
+
+
+ private final BBInputSetupUtils bbInputSetupUtils;
+
+ public AaiResourceIdValidator(BBInputSetupUtils bbInputSetupUtils) {
+ this.bbInputSetupUtils = bbInputSetupUtils;
+ }
+
+ protected String validateResourceIdInAAI(String generatedResourceId, WorkflowType type, String instanceName,
+ RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws Exception {
+ try {
+ if ("SERVICE".equalsIgnoreCase(type.toString())) {
+ return validateServiceResourceIdInAAI(generatedResourceId, instanceName, reqDetails);
+ } else if ("NETWORK".equalsIgnoreCase(type.toString())) {
+ return validateNetworkResourceIdInAAI(generatedResourceId, instanceName, reqDetails,
+ workflowResourceIds);
+ } else if ("VNF".equalsIgnoreCase(type.toString())) {
+ return validateVnfResourceIdInAAI(generatedResourceId, instanceName, reqDetails, workflowResourceIds);
+ } else if ("VFMODULE".equalsIgnoreCase(type.toString())) {
+ return validateVfModuleResourceIdInAAI(generatedResourceId, instanceName, reqDetails,
+ workflowResourceIds);
+ } else if ("VOLUMEGROUP".equalsIgnoreCase(type.toString())) {
+ return validateVolumeGroupResourceIdInAAI(generatedResourceId, instanceName, reqDetails,
+ workflowResourceIds);
+ } else if ("CONFIGURATION".equalsIgnoreCase(type.toString())) {
+ return validateConfigurationResourceIdInAAI(generatedResourceId, instanceName, reqDetails,
+ workflowResourceIds);
+ }
+ return generatedResourceId;
+ } catch (DuplicateNameException dne) {
+ throw dne;
+ } catch (Exception ex) {
+ LOGGER.error(WORKFLOW_ACTION_WAS_UNABLE_TO_VERIFY_IF_THE_INSTANCE_NAME_ALREADY_EXIST_IN_AAI, ex);
+ throw new IllegalStateException(
+ WORKFLOW_ACTION_WAS_UNABLE_TO_VERIFY_IF_THE_INSTANCE_NAME_ALREADY_EXIST_IN_AAI);
+ }
+ }
+
+ protected String validateServiceResourceIdInAAI(String generatedResourceId, String instanceName,
+ RequestDetails reqDetails) throws DuplicateNameException {
+ String globalCustomerId = reqDetails.getSubscriberInfo().getGlobalSubscriberId();
+ String serviceType = reqDetails.getRequestParameters().getSubscriptionServiceType();
+ if (instanceName != null) {
+ Optional<ServiceInstance> serviceInstanceAAI =
+ bbInputSetupUtils.getAAIServiceInstanceByName(globalCustomerId, serviceType, instanceName);
+ if (serviceInstanceAAI.isPresent()) {
+ if (serviceInstanceAAI.get().getModelVersionId()
+ .equalsIgnoreCase(reqDetails.getModelInfo().getModelVersionId())) {
+ return serviceInstanceAAI.get().getServiceInstanceId();
+ } else {
+ throw new DuplicateNameException(SERVICE_INSTANCE, String.format(NAME_EXISTS_WITH_DIFF_VERSION_ID,
+ instanceName, reqDetails.getModelInfo().getModelVersionId()));
+ }
+ } else {
+ ServiceInstances aaiServiceInstances =
+ bbInputSetupUtils.getAAIServiceInstancesGloballyByName(instanceName);
+ if (aaiServiceInstances != null) {
+ if (aaiServiceInstances.getServiceInstance() != null
+ && !aaiServiceInstances.getServiceInstance().isEmpty()) {
+ if (aaiServiceInstances.getServiceInstance().size() > 1) {
+ throw new DuplicateNameException(SERVICE_INSTANCE,
+ String.format(NAME_EXISTS_MULTIPLE, instanceName));
+ } else {
+ ServiceInstance si = aaiServiceInstances.getServiceInstance().stream().findFirst().get();
+ Map<String, String> keys =
+ bbInputSetupUtils.getURIKeysFromServiceInstance(si.getServiceInstanceId());
+
+ throw new DuplicateNameException(SERVICE_INSTANCE, String.format(
+ NAME_EXISTS_WITH_DIFF_COMBINATION, instanceName,
+ keys.get(AAIFluentTypeBuilder.Types.CUSTOMER.getUriParams().globalCustomerId),
+ keys.get(
+ AAIFluentTypeBuilder.Types.SERVICE_SUBSCRIPTION.getUriParams().serviceType),
+ si.getModelVersionId()));
+ }
+ }
+ }
+ }
+ }
+ return generatedResourceId;
+ }
+
+ protected String validateNetworkResourceIdInAAI(String generatedResourceId, String instanceName,
+ RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds)
+ throws DuplicateNameException, MultipleObjectsFoundException {
+ Optional<L3Network> network = bbInputSetupUtils
+ .getRelatedNetworkByNameFromServiceInstance(workflowResourceIds.getServiceInstanceId(), instanceName);
+ if (network.isPresent()) {
+ if (network.get().getModelCustomizationId()
+ .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) {
+ return network.get().getNetworkId();
+ } else {
+ throw new DuplicateNameException("l3Network", String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID,
+ instanceName, network.get().getModelCustomizationId()));
+ }
+ }
+ if (bbInputSetupUtils.existsAAINetworksGloballyByName(instanceName)) {
+ throw new DuplicateNameException("l3Network", String.format(NAME_EXISTS_WITH_DIFF_PARENT, instanceName,
+ workflowResourceIds.getServiceInstanceId()));
+ }
+ return generatedResourceId;
+ }
+
+ protected String validateVnfResourceIdInAAI(String generatedResourceId, String instanceName,
+ RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException {
+ Optional<GenericVnf> vnf = bbInputSetupUtils
+ .getRelatedVnfByNameFromServiceInstance(workflowResourceIds.getServiceInstanceId(), instanceName);
+ if (vnf.isPresent()) {
+ if (vnf.get().getModelCustomizationId()
+ .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) {
+ return vnf.get().getVnfId();
+ } else {
+ throw new DuplicateNameException("generic-vnf", String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID,
+ instanceName, vnf.get().getModelCustomizationId()));
+ }
+ }
+ GenericVnfs vnfs = bbInputSetupUtils.getAAIVnfsGloballyByName(instanceName);
+ if (vnfs != null) {
+ throw new DuplicateNameException("generic-vnf",
+ String.format(NAME_EXISTS_WITH_DIFF_PARENT, instanceName, vnfs.getGenericVnf().get(0).getVnfId()));
+ }
+ return generatedResourceId;
+ }
+
+ protected String validateVfModuleResourceIdInAAI(String generatedResourceId, String instanceName,
+ RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException {
+ GenericVnf vnf = bbInputSetupUtils.getAAIGenericVnf(workflowResourceIds.getVnfId());
+ if (vnf != null && vnf.getVfModules() != null) {
+ for (org.onap.aai.domain.yang.VfModule vfModule : vnf.getVfModules().getVfModule()) {
+ if (vfModule.getVfModuleName().equalsIgnoreCase(instanceName)) {
+ if (vfModule.getModelCustomizationId()
+ .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) {
+ return vfModule.getVfModuleId();
+ } else {
+ throw new DuplicateNameException("vfModule",
+ String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID, instanceName,
+ reqDetails.getModelInfo().getModelCustomizationId()));
+ }
+ }
+ }
+ }
+ if (bbInputSetupUtils.existsAAIVfModuleGloballyByName(instanceName)) {
+ throw new DuplicateNameException("vfModule", instanceName);
+ }
+ return generatedResourceId;
+ }
+
+ protected String validateVolumeGroupResourceIdInAAI(String generatedResourceId, String instanceName,
+ RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException {
+ Optional<VolumeGroup> volumeGroup =
+ bbInputSetupUtils.getRelatedVolumeGroupByNameFromVnf(workflowResourceIds.getVnfId(), instanceName);
+ if (volumeGroup.isPresent()) {
+ if (volumeGroup.get().getVfModuleModelCustomizationId()
+ .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) {
+ return volumeGroup.get().getVolumeGroupId();
+ } else {
+ throw new DuplicateNameException("volumeGroup", volumeGroup.get().getVolumeGroupName());
+ }
+ }
+ if (bbInputSetupUtils.existsAAIVolumeGroupGloballyByName(instanceName)) {
+ throw new DuplicateNameException("volumeGroup", instanceName);
+ }
+ return generatedResourceId;
+ }
+
+ protected String validateConfigurationResourceIdInAAI(String generatedResourceId, String instanceName,
+ RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException {
+ Optional<org.onap.aai.domain.yang.Configuration> configuration =
+ bbInputSetupUtils.getRelatedConfigurationByNameFromServiceInstance(
+ workflowResourceIds.getServiceInstanceId(), instanceName);
+ if (configuration.isPresent()) {
+ if (configuration.get().getModelCustomizationId()
+ .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) {
+ return configuration.get().getConfigurationId();
+ } else {
+ throw new DuplicateNameException("configuration", String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID,
+ instanceName, configuration.get().getConfigurationId()));
+ }
+ }
+ if (bbInputSetupUtils.existsAAIConfigurationGloballyByName(instanceName)) {
+ throw new DuplicateNameException("configuration", instanceName);
+ }
+ return generatedResourceId;
+ }
+}
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/UserParamsServiceTraversal.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/UserParamsServiceTraversal.java
new file mode 100644
index 0000000000..3556cc024c
--- /dev/null
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/UserParamsServiceTraversal.java
@@ -0,0 +1,232 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
+ * Modifications Copyright (c) 2020 Nokia
+ * ================================================================================
+ * Modifications Copyright (c) 2020 Tech Mahindra
+ * ================================================================================
+ * 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.workflow.tasks;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.camunda.bpm.engine.delegate.DelegateExecution;
+import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.so.db.catalog.beans.CollectionResourceCustomization;
+import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
+import org.onap.so.db.catalog.beans.CvnfcCustomization;
+import org.onap.so.db.catalog.beans.VfModuleCustomization;
+import org.onap.so.db.catalog.client.CatalogDbClient;
+import org.onap.so.serviceinstancebeans.Networks;
+import org.onap.so.serviceinstancebeans.Pnfs;
+import org.onap.so.serviceinstancebeans.Service;
+import org.onap.so.serviceinstancebeans.VfModules;
+import org.onap.so.serviceinstancebeans.Vnfs;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.CREATE_INSTANCE;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.FABRIC_CONFIGURATION;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.USER_PARAM_SERVICE;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.WORKFLOW_ACTION_ERROR_MESSAGE;
+
+@Component
+public class UserParamsServiceTraversal {
+
+ private static final Logger logger = LoggerFactory.getLogger(UserParamsServiceTraversal.class);
+
+ private final CatalogDbClient catalogDbClient;
+ private final ExceptionBuilder exceptionBuilder;
+
+ UserParamsServiceTraversal(CatalogDbClient catalogDbClient, ExceptionBuilder exceptionBuilder) {
+ this.catalogDbClient = catalogDbClient;
+ this.exceptionBuilder = exceptionBuilder;
+ }
+
+ protected List<Resource> getResourceListFromUserParams(DelegateExecution execution,
+ List<Map<String, Object>> userParams, String serviceModelVersionId, String requestAction)
+ throws IOException {
+ List<Resource> resourceList = new ArrayList<>();
+ boolean foundVfModuleOrVG = false;
+ String vnfCustomizationUUID = "";
+ String vfModuleCustomizationUUID = "";
+ if (userParams != null) {
+ for (Map<String, Object> params : userParams) {
+ if (params.containsKey(USER_PARAM_SERVICE)) {
+ ObjectMapper obj = new ObjectMapper();
+ String input = obj.writeValueAsString(params.get(USER_PARAM_SERVICE));
+ Service validate = obj.readValue(input, Service.class);
+ resourceList.add(
+ new Resource(WorkflowType.SERVICE, validate.getModelInfo().getModelVersionId(), false));
+ if (validate.getResources().getVnfs() != null) {
+ for (Vnfs vnf : validate.getResources().getVnfs()) {
+ resourceList.add(new Resource(WorkflowType.VNF,
+ vnf.getModelInfo().getModelCustomizationId(), false));
+ if (vnf.getModelInfo() != null && vnf.getModelInfo().getModelCustomizationUuid() != null) {
+ vnfCustomizationUUID = vnf.getModelInfo().getModelCustomizationUuid();
+ }
+ if (vnf.getVfModules() != null) {
+ for (VfModules vfModule : vnf.getVfModules()) {
+ VfModuleCustomization vfModuleCustomization =
+ catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(
+ vfModule.getModelInfo().getModelCustomizationUuid());
+ if (vfModuleCustomization != null) {
+
+ if (vfModuleCustomization.getVfModule() != null
+ && vfModuleCustomization.getVfModule().getVolumeHeatTemplate() != null
+ && vfModuleCustomization.getVolumeHeatEnv() != null) {
+ resourceList.add(new Resource(WorkflowType.VOLUMEGROUP,
+ vfModuleCustomization.getModelCustomizationUUID(), false));
+ foundVfModuleOrVG = true;
+ }
+
+ if ((vfModuleCustomization.getVfModule() != null)
+ && ((vfModuleCustomization.getVfModule().getModuleHeatTemplate() != null
+ && vfModuleCustomization.getHeatEnvironment() != null))
+ || (vfModuleCustomization.getVfModule().getModelName() != null
+ && vfModuleCustomization.getVfModule().getModelName()
+ .contains("helm"))) {
+ foundVfModuleOrVG = true;
+ Resource resource = new Resource(WorkflowType.VFMODULE,
+ vfModuleCustomization.getModelCustomizationUUID(), false);
+ resource.setBaseVfModule(
+ vfModuleCustomization.getVfModule().getIsBase() != null
+ && vfModuleCustomization.getVfModule().getIsBase());
+ resourceList.add(resource);
+ if (vfModule.getModelInfo() != null
+ && vfModule.getModelInfo().getModelCustomizationUuid() != null) {
+ vfModuleCustomizationUUID =
+ vfModule.getModelInfo().getModelCustomizationUuid();
+ }
+ if (!vnfCustomizationUUID.isEmpty()
+ && !vfModuleCustomizationUUID.isEmpty()) {
+ List<CvnfcConfigurationCustomization> configs =
+ traverseCatalogDbForConfiguration(
+ validate.getModelInfo().getModelVersionId(),
+ vnfCustomizationUUID, vfModuleCustomizationUUID);
+ for (CvnfcConfigurationCustomization config : configs) {
+ Resource configResource = new Resource(WorkflowType.CONFIGURATION,
+ config.getConfigurationResource().getModelUUID(), false);
+ resource.setVnfCustomizationId(
+ vnf.getModelInfo().getModelCustomizationId());
+ resource.setVfModuleCustomizationId(
+ vfModule.getModelInfo().getModelCustomizationId());
+ resourceList.add(configResource);
+ }
+ }
+ }
+ if (!foundVfModuleOrVG) {
+ buildAndThrowException(execution,
+ "Could not determine if vfModule was a vfModule or volume group. Heat template and Heat env are null");
+ }
+ }
+ }
+ }
+ }
+ }
+ if (validate.getResources().getPnfs() != null) {
+ for (Pnfs pnf : validate.getResources().getPnfs()) {
+ resourceList.add(new Resource(WorkflowType.PNF,
+ pnf.getModelInfo().getModelCustomizationId(), false));
+ }
+ }
+ if (validate.getResources().getNetworks() != null) {
+ for (Networks network : validate.getResources().getNetworks()) {
+ resourceList.add(new Resource(WorkflowType.NETWORK,
+ network.getModelInfo().getModelCustomizationId(), false));
+ }
+ if (requestAction.equals(CREATE_INSTANCE)) {
+ String networkColCustId =
+ queryCatalogDbForNetworkCollection(execution, serviceModelVersionId);
+ if (networkColCustId != null) {
+ resourceList.add(new Resource(WorkflowType.NETWORKCOLLECTION, networkColCustId, false));
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ return resourceList;
+ }
+
+
+ private List<CvnfcConfigurationCustomization> traverseCatalogDbForConfiguration(String serviceModelUUID,
+ String vnfCustomizationUUID, String vfModuleCustomizationUUID) {
+ List<CvnfcConfigurationCustomization> configurations = new ArrayList<>();
+ try {
+ List<CvnfcCustomization> cvnfcCustomizations = catalogDbClient.getCvnfcCustomization(serviceModelUUID,
+ vnfCustomizationUUID, vfModuleCustomizationUUID);
+ for (CvnfcCustomization cvnfc : cvnfcCustomizations) {
+ for (CvnfcConfigurationCustomization customization : cvnfc.getCvnfcConfigurationCustomization()) {
+ if (customization.getConfigurationResource().getToscaNodeType().contains(FABRIC_CONFIGURATION)) {
+ configurations.add(customization);
+ }
+ }
+ }
+ logger.debug("found {} fabric configuration(s)", configurations.size());
+ return configurations;
+ } catch (Exception ex) {
+ logger.error("Error in finding configurations", ex);
+ return configurations;
+ }
+ }
+
+ private String queryCatalogDbForNetworkCollection(DelegateExecution execution, String serviceModelVersionId) {
+ org.onap.so.db.catalog.beans.Service service = catalogDbClient.getServiceByID(serviceModelVersionId);
+ if (service != null) {
+ CollectionResourceCustomization networkCollection = this.findCatalogNetworkCollection(execution, service);
+ if (networkCollection != null) {
+ return networkCollection.getModelCustomizationUUID();
+ }
+ }
+ return null;
+ }
+
+ private CollectionResourceCustomization findCatalogNetworkCollection(DelegateExecution execution,
+ org.onap.so.db.catalog.beans.Service service) {
+ CollectionResourceCustomization networkCollection = null;
+ int count = 0;
+ for (CollectionResourceCustomization collectionCustom : service.getCollectionResourceCustomizations()) {
+ if (catalogDbClient.getNetworkCollectionResourceCustomizationByID(
+ collectionCustom.getModelCustomizationUUID()) != null) {
+ networkCollection = collectionCustom;
+ count++;
+ }
+ }
+ if (count == 0) {
+ return null;
+ } else if (count > 1) {
+ buildAndThrowException(execution,
+ "Found multiple Network Collections in the Service model, only one per Service is supported.");
+ }
+ return networkCollection;
+ }
+
+ private void buildAndThrowException(DelegateExecution execution, String msg) {
+ logger.error(msg);
+ execution.setVariable(WORKFLOW_ACTION_ERROR_MESSAGE, msg);
+ exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, msg);
+ }
+}
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java
index 5d95f973bf..662cad542c 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java
@@ -26,27 +26,13 @@
package org.onap.so.bpmn.infrastructure.workflow.tasks;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.UUID;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.SerializationUtils;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.javatuples.Pair;
-import org.onap.aai.domain.yang.GenericVnf;
-import org.onap.aai.domain.yang.GenericVnfs;
-import org.onap.aai.domain.yang.L3Network;
import org.onap.aai.domain.yang.Relationship;
import org.onap.aai.domain.yang.ServiceInstance;
-import org.onap.aai.domain.yang.ServiceInstances;
import org.onap.aai.domain.yang.Vnfc;
import org.onap.aai.domain.yang.VolumeGroup;
import org.onap.aai.domain.yang.VpnBinding;
@@ -68,16 +54,12 @@ import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetup;
import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils;
-import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.DuplicateNameException;
-import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.MultipleObjectsFoundException;
import org.onap.so.client.exception.ExceptionBuilder;
import org.onap.so.client.orchestration.AAIConfigurationResources;
import org.onap.so.client.orchestration.AAIEntityNotFoundException;
import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
import org.onap.so.db.catalog.beans.CollectionResourceCustomization;
import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
-import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
-import org.onap.so.db.catalog.beans.CvnfcCustomization;
import org.onap.so.db.catalog.beans.InstanceGroup;
import org.onap.so.db.catalog.beans.VfModuleCustomization;
import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
@@ -86,33 +68,37 @@ import org.onap.so.db.catalog.client.CatalogDbClient;
import org.onap.so.serviceinstancebeans.CloudConfiguration;
import org.onap.so.serviceinstancebeans.ModelInfo;
import org.onap.so.serviceinstancebeans.ModelType;
-import org.onap.so.serviceinstancebeans.Networks;
-import org.onap.so.serviceinstancebeans.Pnfs;
import org.onap.so.serviceinstancebeans.RelatedInstance;
import org.onap.so.serviceinstancebeans.RelatedInstanceList;
import org.onap.so.serviceinstancebeans.RequestDetails;
-import org.onap.so.serviceinstancebeans.Service;
import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
-import org.onap.so.serviceinstancebeans.VfModules;
-import org.onap.so.serviceinstancebeans.Vnfs;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.UUID;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.CREATE_INSTANCE;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.FABRIC_CONFIGURATION;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.USER_PARAM_SERVICE;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.WORKFLOW_ACTION_ERROR_MESSAGE;
@Component
public class WorkflowAction {
- private static final String WORKFLOW_ACTION_ERROR_MESSAGE = "WorkflowActionErrorMessage";
private static final String SERVICE_INSTANCES = "serviceInstances";
- private static final String SERVICE_INSTANCE = "serviceInstance";
private static final String VF_MODULES = "vfModules";
- private static final String WORKFLOW_ACTION_WAS_UNABLE_TO_VERIFY_IF_THE_INSTANCE_NAME_ALREADY_EXIST_IN_AAI =
- "WorkflowAction was unable to verify if the instance name already exist in AAI.";
private static final String VNF_TYPE = "vnfType";
private static final String SERVICE = "Service";
private static final String VNF = "Vnf";
@@ -123,26 +109,15 @@ public class WorkflowAction {
private static final String NETWORKCOLLECTION = "NetworkCollection";
private static final String CONFIGURATION = "Configuration";
private static final String ASSIGNINSTANCE = "assignInstance";
- private static final String CREATEINSTANCE = "createInstance";
private static final String REPLACEINSTANCE = "replaceInstance";
private static final String REPLACEINSTANCERETAINASSIGNMENTS = "replaceInstanceRetainAssignments";
- private static final String USERPARAMSERVICE = "service";
private static final String SUPPORTEDTYPES =
"vnfs|vfModules|networks|networkCollections|volumeGroups|serviceInstances|instanceGroups";
private static final String HOMINGSOLUTION = "Homing_Solution";
- private static final String FABRIC_CONFIGURATION = "FabricConfiguration";
private static final String SERVICE_TYPE_TRANSPORT = "TRANSPORT";
private static final String SERVICE_TYPE_BONDING = "BONDING";
private static final String CLOUD_OWNER = "DEFAULT";
private static final Logger logger = LoggerFactory.getLogger(WorkflowAction.class);
- private static final String NAME_EXISTS_WITH_DIFF_VERSION_ID = "(%s) and different version id (%s)";
- private static final String NAME_EXISTS_MULTIPLE =
- "(%s) and multiple combination of model-version-id + service-type + global-customer-id";
- private static final String NAME_EXISTS_WITH_DIFF_COMBINATION =
- "(%s) and global-customer-id (%s), service-type (%s), model-version-id (%s)";
- private static final String NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID =
- "(%s), same parent and different customization id (%s)";
- private static final String NAME_EXISTS_WITH_DIFF_PARENT = "(%s) id (%s) and different parent relationship";
private static final String CREATENETWORKBB = "CreateNetworkBB";
private static final String ACTIVATENETWORKBB = "ActivateNetworkBB";
private static final String VOLUMEGROUP_DELETE_PATTERN = "(Un|De)(.*)Volume(.*)";
@@ -167,6 +142,10 @@ public class WorkflowAction {
private VrfValidation vrfValidation;
@Autowired
private Environment environment;
+ @Autowired
+ private UserParamsServiceTraversal userParamsServiceTraversal;
+ @Autowired
+ private AaiResourceIdValidator aaiResourceIdValidator;
public void setBbInputSetupUtils(BBInputSetupUtils bbInputSetupUtils) {
this.bbInputSetupUtils = bbInputSetupUtils;
@@ -238,7 +217,7 @@ public class WorkflowAction {
requestDetails, requestAction, resourceId, flowsToExecute, vnfType, orchFlows,
apiVersion, resourceKey, replaceInfo);
} else {
- if (isConfiguration(orchFlows) && !requestAction.equalsIgnoreCase(CREATEINSTANCE)) {
+ if (isConfiguration(orchFlows) && !requestAction.equalsIgnoreCase(CREATE_INSTANCE)) {
addConfigBuildingBlocksToFlowsToExecuteList(execution, sIRequest, requestId,
workflowResourceIds, requestDetails, requestAction, resourceId, flowsToExecute,
vnfType, apiVersion, resourceKey, replaceInfo, orchFlows);
@@ -255,36 +234,41 @@ public class WorkflowAction {
}
}
} else {
- boolean foundRelated = false;
boolean containsService = false;
List<Resource> resourceList = new ArrayList<>();
List<Pair<WorkflowType, String>> aaiResourceIds = new ArrayList<>();
+ List<Map<String, Object>> userParams =
+ sIRequest.getRequestDetails().getRequestParameters().getUserParams();
if (resourceType == WorkflowType.SERVICE && requestAction.equalsIgnoreCase(ASSIGNINSTANCE)) {
// SERVICE-MACRO-ASSIGN will always get user params with a
// service.
- if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
+
+ if (userParams != null) {
containsService = isContainsService(sIRequest);
if (containsService) {
- traverseUserParamsService(execution, resourceList, sIRequest, requestAction);
+ resourceList = userParamsServiceTraversal.getResourceListFromUserParams(execution,
+ userParams, serviceInstanceId, requestAction);
}
} else {
buildAndThrowException(execution,
"Service-Macro-Assign request details must contain user params with a service");
}
- } else if (resourceType == WorkflowType.SERVICE && requestAction.equalsIgnoreCase(CREATEINSTANCE)) {
+ } else if (resourceType == WorkflowType.SERVICE
+ && requestAction.equalsIgnoreCase(CREATE_INSTANCE)) {
// SERVICE-MACRO-CREATE will get user params with a service,
// a service with a network, a service with a
- // networkcollection, OR an empty service.
+ // network collection, OR an empty service.
// If user params is just a service or null and macro
// queries the SI and finds a VNF, macro fails.
- if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
+ if (userParams != null) {
containsService = isContainsService(sIRequest);
}
if (containsService) {
- foundRelated = traverseUserParamsService(execution, resourceList, sIRequest, requestAction);
+ resourceList = userParamsServiceTraversal.getResourceListFromUserParams(execution,
+ userParams, serviceInstanceId, requestAction);
}
- if (!foundRelated) {
+ if (!foundRelated(resourceList)) {
traverseCatalogDbService(execution, sIRequest, resourceList, aaiResourceIds);
}
} else if (resourceType == WorkflowType.SERVICE
@@ -333,15 +317,15 @@ public class WorkflowAction {
logger.info("Sorting for Vlan Tagging");
flowsToExecute = sortExecutionPathByObjectForVlanTagging(flowsToExecute, requestAction);
}
- // By default, enable homing at VNF level for CREATEINSTANCE and ASSIGNINSTANCE
+ // By default, enable homing at VNF level for CREATE_INSTANCE and ASSIGNINSTANCE
if (resourceType == WorkflowType.SERVICE
- && (requestAction.equals(CREATEINSTANCE) || requestAction.equals(ASSIGNINSTANCE))
+ && (requestAction.equals(CREATE_INSTANCE) || requestAction.equals(ASSIGNINSTANCE))
&& resourceList.stream().anyMatch(x -> WorkflowType.VNF.equals(x.getResourceType()))) {
execution.setVariable(HOMING, true);
execution.setVariable("calledHoming", false);
}
if (resourceType == WorkflowType.SERVICE && (requestAction.equalsIgnoreCase(ASSIGNINSTANCE)
- || requestAction.equalsIgnoreCase(CREATEINSTANCE))) {
+ || requestAction.equalsIgnoreCase(CREATE_INSTANCE))) {
generateResourceIds(flowsToExecute, resourceList, serviceInstanceId);
} else {
updateResourceIdsFromAAITraversal(flowsToExecute, resourceList, aaiResourceIds,
@@ -351,9 +335,8 @@ public class WorkflowAction {
}
// If the user set "Homing_Solution" to "none", disable homing, else if "Homing_Solution" is specified,
// enable it.
- if (sIRequest.getRequestDetails().getRequestParameters() != null
- && sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
- List<Map<String, Object>> userParams = getListOfUserParams(sIRequest);
+ List<Map<String, Object>> userParams = sIRequest.getRequestDetails().getRequestParameters().getUserParams();
+ if (sIRequest.getRequestDetails().getRequestParameters() != null && userParams != null) {
for (Map<String, Object> params : userParams) {
if (params.containsKey(HOMINGSOLUTION)) {
execution.setVariable(HOMING, !"none".equals(params.get(HOMINGSOLUTION)));
@@ -400,14 +383,12 @@ public class WorkflowAction {
private boolean isContainsService(ServiceInstancesRequest sIRequest) {
boolean containsService;
- List<Map<String, Object>> userParams = getListOfUserParams(sIRequest);
- containsService = userParams.stream().anyMatch(param -> param.containsKey(USERPARAMSERVICE));
+ List<Map<String, Object>> userParams = sIRequest.getRequestDetails().getRequestParameters().getUserParams();
+ containsService = userParams.stream().anyMatch(param -> param.containsKey(USER_PARAM_SERVICE));
return containsService;
}
- private List<Map<String, Object>> getListOfUserParams(ServiceInstancesRequest sIRequest) {
- return sIRequest.getRequestDetails().getRequestParameters().getUserParams();
- }
+
private List<ExecuteBuildingBlock> loadExecuteBuildingBlocks(DelegateExecution execution, String requestId,
String errorMessage) {
@@ -625,6 +606,18 @@ public class WorkflowAction {
return flowsToExecuteConfigs;
}
+ protected void buildAndThrowException(DelegateExecution execution, String msg) {
+ logger.error(msg);
+ execution.setVariable(WORKFLOW_ACTION_ERROR_MESSAGE, msg);
+ exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, msg);
+ }
+
+ protected void buildAndThrowException(DelegateExecution execution, String msg, Exception ex) {
+ logger.error(msg, ex);
+ execution.setVariable(WORKFLOW_ACTION_ERROR_MESSAGE, msg + ex.getMessage());
+ exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, msg + ex.getMessage());
+ }
+
protected List<OrchestrationFlow> getVfModuleReplaceBuildingBlocks(ConfigBuildingBlocksDataObject dataObj)
throws Exception {
@@ -1214,150 +1207,6 @@ public class WorkflowAction {
}
}
- protected boolean traverseUserParamsService(DelegateExecution execution, List<Resource> resourceList,
- ServiceInstancesRequest sIRequest, String requestAction) throws IOException {
- boolean foundRelated = false;
- boolean foundVfModuleOrVG = false;
- String vnfCustomizationUUID = "";
- String vfModuleCustomizationUUID = "";
- if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
- List<Map<String, Object>> userParams = getListOfUserParams(sIRequest);
- for (Map<String, Object> params : userParams) {
- if (params.containsKey(USERPARAMSERVICE)) {
- ObjectMapper obj = new ObjectMapper();
- String input = obj.writeValueAsString(params.get(USERPARAMSERVICE));
- Service validate = obj.readValue(input, Service.class);
- resourceList.add(
- new Resource(WorkflowType.SERVICE, validate.getModelInfo().getModelVersionId(), false));
- if (validate.getResources().getVnfs() != null) {
- for (Vnfs vnf : validate.getResources().getVnfs()) {
- resourceList.add(new Resource(WorkflowType.VNF,
- vnf.getModelInfo().getModelCustomizationId(), false));
- foundRelated = true;
- if (vnf.getModelInfo() != null && vnf.getModelInfo().getModelCustomizationUuid() != null) {
- vnfCustomizationUUID = vnf.getModelInfo().getModelCustomizationUuid();
- }
- if (vnf.getVfModules() != null) {
- for (VfModules vfModule : vnf.getVfModules()) {
- VfModuleCustomization vfModuleCustomization =
- catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(
- vfModule.getModelInfo().getModelCustomizationUuid());
- if (vfModuleCustomization != null) {
-
- if (vfModuleCustomization.getVfModule() != null
- && vfModuleCustomization.getVfModule().getVolumeHeatTemplate() != null
- && vfModuleCustomization.getVolumeHeatEnv() != null) {
- resourceList.add(new Resource(WorkflowType.VOLUMEGROUP,
- vfModuleCustomization.getModelCustomizationUUID(), false));
- foundVfModuleOrVG = true;
- }
-
- if ((vfModuleCustomization.getVfModule() != null)
- && ((vfModuleCustomization.getVfModule().getModuleHeatTemplate() != null
- && vfModuleCustomization.getHeatEnvironment() != null))
- || (vfModuleCustomization.getVfModule().getModelName() != null
- && vfModuleCustomization.getVfModule().getModelName()
- .contains("helm"))) {
- foundVfModuleOrVG = true;
- Resource resource = new Resource(WorkflowType.VFMODULE,
- vfModuleCustomization.getModelCustomizationUUID(), false);
- resource.setBaseVfModule(
- vfModuleCustomization.getVfModule().getIsBase() != null
- && vfModuleCustomization.getVfModule().getIsBase());
- resourceList.add(resource);
- if (vfModule.getModelInfo() != null
- && vfModule.getModelInfo().getModelCustomizationUuid() != null) {
- vfModuleCustomizationUUID =
- vfModule.getModelInfo().getModelCustomizationUuid();
- }
- if (!vnfCustomizationUUID.isEmpty()
- && !vfModuleCustomizationUUID.isEmpty()) {
- List<CvnfcConfigurationCustomization> configs =
- traverseCatalogDbForConfiguration(
- validate.getModelInfo().getModelVersionId(),
- vnfCustomizationUUID, vfModuleCustomizationUUID);
- for (CvnfcConfigurationCustomization config : configs) {
- Resource configResource = new Resource(WorkflowType.CONFIGURATION,
- config.getConfigurationResource().getModelUUID(), false);
- resource.setVnfCustomizationId(
- vnf.getModelInfo().getModelCustomizationId());
- resource.setVfModuleCustomizationId(
- vfModule.getModelInfo().getModelCustomizationId());
- resourceList.add(configResource);
- }
- }
- }
- if (!foundVfModuleOrVG) {
- buildAndThrowException(execution,
- "Could not determine if vfModule was a vfModule or volume group. Heat template and Heat env are null");
- }
- }
- }
- }
- }
- }
- if (validate.getResources().getPnfs() != null) {
- for (Pnfs pnf : validate.getResources().getPnfs()) {
- resourceList.add(new Resource(WorkflowType.PNF,
- pnf.getModelInfo().getModelCustomizationId(), false));
- foundRelated = true;
- }
- }
- if (validate.getResources().getNetworks() != null) {
- for (Networks network : validate.getResources().getNetworks()) {
- resourceList.add(new Resource(WorkflowType.NETWORK,
- network.getModelInfo().getModelCustomizationId(), false));
- foundRelated = true;
- }
- if (requestAction.equals(CREATEINSTANCE)) {
- String networkColCustId = queryCatalogDBforNetworkCollection(execution, sIRequest);
- if (networkColCustId != null) {
- resourceList.add(new Resource(WorkflowType.NETWORKCOLLECTION, networkColCustId, false));
- foundRelated = true;
- }
- }
- }
- break;
- }
- }
- }
- return foundRelated;
- }
-
- protected List<CvnfcConfigurationCustomization> traverseCatalogDbForConfiguration(String serviceModelUUID,
- String vnfCustomizationUUID, String vfModuleCustomizationUUID) {
- List<CvnfcConfigurationCustomization> configurations = new ArrayList<>();
- try {
- List<CvnfcCustomization> cvnfcCustomizations = catalogDbClient.getCvnfcCustomization(serviceModelUUID,
- vnfCustomizationUUID, vfModuleCustomizationUUID);
- for (CvnfcCustomization cvnfc : cvnfcCustomizations) {
- for (CvnfcConfigurationCustomization customization : cvnfc.getCvnfcConfigurationCustomization()) {
- if (customization.getConfigurationResource().getToscaNodeType().contains(FABRIC_CONFIGURATION)) {
- configurations.add(customization);
- }
- }
- }
- logger.debug("found {} fabric configuration(s)", configurations.size());
- return configurations;
- } catch (Exception ex) {
- logger.error("Error in finding configurations", ex);
- return configurations;
- }
- }
-
- protected String queryCatalogDBforNetworkCollection(DelegateExecution execution,
- ServiceInstancesRequest sIRequest) {
- org.onap.so.db.catalog.beans.Service service =
- catalogDbClient.getServiceByID(sIRequest.getRequestDetails().getModelInfo().getModelVersionId());
- if (service != null) {
- CollectionResourceCustomization networkCollection = this.findCatalogNetworkCollection(execution, service);
- if (networkCollection != null) {
- return networkCollection.getModelCustomizationUUID();
- }
- }
- return null;
- }
-
protected WorkflowResourceIds populateResourceIdsFromApiHandler(DelegateExecution execution) {
return WorkflowResourceIdsUtils.getWorkflowResourceIdsFromExecution(execution);
}
@@ -1397,36 +1246,6 @@ public class WorkflowAction {
}
}
- protected String validateResourceIdInAAI(String generatedResourceId, WorkflowType type, String instanceName,
- RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws Exception {
- try {
- if ("SERVICE".equalsIgnoreCase(type.toString())) {
- return validateServiceResourceIdInAAI(generatedResourceId, instanceName, reqDetails);
- } else if ("NETWORK".equalsIgnoreCase(type.toString())) {
- return validateNetworkResourceIdInAAI(generatedResourceId, instanceName, reqDetails,
- workflowResourceIds);
- } else if ("VNF".equalsIgnoreCase(type.toString())) {
- return validateVnfResourceIdInAAI(generatedResourceId, instanceName, reqDetails, workflowResourceIds);
- } else if ("VFMODULE".equalsIgnoreCase(type.toString())) {
- return validateVfModuleResourceIdInAAI(generatedResourceId, instanceName, reqDetails,
- workflowResourceIds);
- } else if ("VOLUMEGROUP".equalsIgnoreCase(type.toString())) {
- return validateVolumeGroupResourceIdInAAI(generatedResourceId, instanceName, reqDetails,
- workflowResourceIds);
- } else if ("CONFIGURATION".equalsIgnoreCase(type.toString())) {
- return validateConfigurationResourceIdInAAI(generatedResourceId, instanceName, reqDetails,
- workflowResourceIds);
- }
- return generatedResourceId;
- } catch (DuplicateNameException dne) {
- throw dne;
- } catch (Exception ex) {
- logger.error(WORKFLOW_ACTION_WAS_UNABLE_TO_VERIFY_IF_THE_INSTANCE_NAME_ALREADY_EXIST_IN_AAI, ex);
- throw new IllegalStateException(
- WORKFLOW_ACTION_WAS_UNABLE_TO_VERIFY_IF_THE_INSTANCE_NAME_ALREADY_EXIST_IN_AAI);
- }
- }
-
protected String convertTypeFromPlural(String type) {
if (!type.matches(SUPPORTEDTYPES)) {
return type;
@@ -1442,7 +1261,7 @@ public class WorkflowAction {
protected List<ExecuteBuildingBlock> sortExecutionPathByObjectForVlanTagging(List<ExecuteBuildingBlock> orchFlows,
String requestAction) {
List<ExecuteBuildingBlock> sortedOrchFlows = new ArrayList<>();
- if (requestAction.equals(CREATEINSTANCE)) {
+ if (requestAction.equals(CREATE_INSTANCE)) {
for (ExecuteBuildingBlock ebb : orchFlows) {
if (ebb.getBuildingBlock().getBpmnFlowName().equals("AssignNetworkBB")) {
String key = ebb.getBuildingBlock().getKey();
@@ -1555,7 +1374,7 @@ public class WorkflowAction {
} else if (orchFlow.getFlowName().contains(VFMODULE) || (orchFlow.getFlowName().contains(CONTROLLER)
&& (VFMODULE).equalsIgnoreCase(orchFlow.getBpmnScope()))) {
List<Resource> vfModuleResourcesSorted;
- if (requestAction.equals(CREATEINSTANCE) || requestAction.equals(ASSIGNINSTANCE)
+ if (requestAction.equals(CREATE_INSTANCE) || requestAction.equals(ASSIGNINSTANCE)
|| requestAction.equals("activateInstance")) {
vfModuleResourcesSorted = sortVfModulesByBaseFirst(resourceList.stream()
.filter(x -> WorkflowType.VFMODULE == x.getResourceType()).collect(Collectors.toList()));
@@ -1686,18 +1505,6 @@ public class WorkflowAction {
return listToExecute;
}
- protected void buildAndThrowException(DelegateExecution execution, String msg, Exception ex) {
- logger.error(msg, ex);
- execution.setVariable(WORKFLOW_ACTION_ERROR_MESSAGE, msg + ex.getMessage());
- exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, msg + ex.getMessage());
- }
-
- protected void buildAndThrowException(DelegateExecution execution, String msg) {
- logger.error(msg);
- execution.setVariable(WORKFLOW_ACTION_ERROR_MESSAGE, msg);
- exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, msg);
- }
-
public void handleRuntimeException(DelegateExecution execution) {
StringBuilder wfeExpMsg = new StringBuilder("Runtime error ");
String runtimeErrorMessage;
@@ -1724,155 +1531,20 @@ public class WorkflowAction {
protected boolean isRequestMacroServiceResume(boolean aLaCarte, WorkflowType resourceType, String requestAction,
String serviceInstanceId) {
return (!aLaCarte && resourceType == WorkflowType.SERVICE
- && (requestAction.equalsIgnoreCase(ASSIGNINSTANCE) || requestAction.equalsIgnoreCase(CREATEINSTANCE))
+ && (requestAction.equalsIgnoreCase(ASSIGNINSTANCE) || requestAction.equalsIgnoreCase(CREATE_INSTANCE))
&& (serviceInstanceId != null && serviceInstanceId.trim().length() > 1)
&& (bbInputSetupUtils.getAAIServiceInstanceById(serviceInstanceId) != null));
}
- protected String validateServiceResourceIdInAAI(String generatedResourceId, String instanceName,
- RequestDetails reqDetails) throws DuplicateNameException {
- String globalCustomerId = reqDetails.getSubscriberInfo().getGlobalSubscriberId();
- String serviceType = reqDetails.getRequestParameters().getSubscriptionServiceType();
- if (instanceName != null) {
- Optional<ServiceInstance> serviceInstanceAAI =
- bbInputSetupUtils.getAAIServiceInstanceByName(globalCustomerId, serviceType, instanceName);
- if (serviceInstanceAAI.isPresent()) {
- if (serviceInstanceAAI.get().getModelVersionId()
- .equalsIgnoreCase(reqDetails.getModelInfo().getModelVersionId())) {
- return serviceInstanceAAI.get().getServiceInstanceId();
- } else {
- throw new DuplicateNameException(SERVICE_INSTANCE, String.format(NAME_EXISTS_WITH_DIFF_VERSION_ID,
- instanceName, reqDetails.getModelInfo().getModelVersionId()));
- }
- } else {
- ServiceInstances aaiServiceInstances =
- bbInputSetupUtils.getAAIServiceInstancesGloballyByName(instanceName);
- if (aaiServiceInstances != null) {
- if (aaiServiceInstances.getServiceInstance() != null
- && !aaiServiceInstances.getServiceInstance().isEmpty()) {
- if (aaiServiceInstances.getServiceInstance().size() > 1) {
- throw new DuplicateNameException(SERVICE_INSTANCE,
- String.format(NAME_EXISTS_MULTIPLE, instanceName));
- } else {
- ServiceInstance si = aaiServiceInstances.getServiceInstance().stream().findFirst().get();
- Map<String, String> keys =
- bbInputSetupUtils.getURIKeysFromServiceInstance(si.getServiceInstanceId());
-
- throw new DuplicateNameException(SERVICE_INSTANCE, String.format(
- NAME_EXISTS_WITH_DIFF_COMBINATION, instanceName,
- keys.get(AAIFluentTypeBuilder.Types.CUSTOMER.getUriParams().globalCustomerId),
- keys.get(
- AAIFluentTypeBuilder.Types.SERVICE_SUBSCRIPTION.getUriParams().serviceType),
- si.getModelVersionId()));
- }
- }
- }
- }
- }
- return generatedResourceId;
- }
-
- protected String validateNetworkResourceIdInAAI(String generatedResourceId, String instanceName,
- RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds)
- throws DuplicateNameException, MultipleObjectsFoundException {
- Optional<L3Network> network = bbInputSetupUtils
- .getRelatedNetworkByNameFromServiceInstance(workflowResourceIds.getServiceInstanceId(), instanceName);
- if (network.isPresent()) {
- if (network.get().getModelCustomizationId()
- .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) {
- return network.get().getNetworkId();
- } else {
- throw new DuplicateNameException("l3Network", String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID,
- instanceName, network.get().getModelCustomizationId()));
- }
- }
- if (bbInputSetupUtils.existsAAINetworksGloballyByName(instanceName)) {
- throw new DuplicateNameException("l3Network", String.format(NAME_EXISTS_WITH_DIFF_PARENT, instanceName,
- workflowResourceIds.getServiceInstanceId()));
- }
- return generatedResourceId;
- }
-
- protected String validateVnfResourceIdInAAI(String generatedResourceId, String instanceName,
- RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException {
- Optional<GenericVnf> vnf = bbInputSetupUtils
- .getRelatedVnfByNameFromServiceInstance(workflowResourceIds.getServiceInstanceId(), instanceName);
- if (vnf.isPresent()) {
- if (vnf.get().getModelCustomizationId()
- .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) {
- return vnf.get().getVnfId();
- } else {
- throw new DuplicateNameException("generic-vnf", String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID,
- instanceName, vnf.get().getModelCustomizationId()));
- }
- }
- GenericVnfs vnfs = bbInputSetupUtils.getAAIVnfsGloballyByName(instanceName);
- if (vnfs != null) {
- throw new DuplicateNameException("generic-vnf",
- String.format(NAME_EXISTS_WITH_DIFF_PARENT, instanceName, vnfs.getGenericVnf().get(0).getVnfId()));
- }
- return generatedResourceId;
- }
-
- protected String validateVfModuleResourceIdInAAI(String generatedResourceId, String instanceName,
- RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException {
- GenericVnf vnf = bbInputSetupUtils.getAAIGenericVnf(workflowResourceIds.getVnfId());
- if (vnf != null && vnf.getVfModules() != null) {
- for (org.onap.aai.domain.yang.VfModule vfModule : vnf.getVfModules().getVfModule()) {
- if (vfModule.getVfModuleName().equalsIgnoreCase(instanceName)) {
- if (vfModule.getModelCustomizationId()
- .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) {
- return vfModule.getVfModuleId();
- } else {
- throw new DuplicateNameException("vfModule",
- String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID, instanceName,
- reqDetails.getModelInfo().getModelCustomizationId()));
- }
- }
- }
- }
- if (bbInputSetupUtils.existsAAIVfModuleGloballyByName(instanceName)) {
- throw new DuplicateNameException("vfModule", instanceName);
- }
- return generatedResourceId;
- }
-
- protected String validateVolumeGroupResourceIdInAAI(String generatedResourceId, String instanceName,
- RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException {
- Optional<VolumeGroup> volumeGroup =
- bbInputSetupUtils.getRelatedVolumeGroupByNameFromVnf(workflowResourceIds.getVnfId(), instanceName);
- if (volumeGroup.isPresent()) {
- if (volumeGroup.get().getVfModuleModelCustomizationId()
- .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) {
- return volumeGroup.get().getVolumeGroupId();
- } else {
- throw new DuplicateNameException("volumeGroup", volumeGroup.get().getVolumeGroupName());
- }
- }
- if (bbInputSetupUtils.existsAAIVolumeGroupGloballyByName(instanceName)) {
- throw new DuplicateNameException("volumeGroup", instanceName);
- }
- return generatedResourceId;
+ protected boolean foundRelated(List<Resource> resourceList) {
+ return (containsWorkflowType(resourceList, WorkflowType.VNF)
+ || containsWorkflowType(resourceList, WorkflowType.PNF)
+ || containsWorkflowType(resourceList, WorkflowType.NETWORK)
+ || containsWorkflowType(resourceList, WorkflowType.NETWORKCOLLECTION));
}
- protected String validateConfigurationResourceIdInAAI(String generatedResourceId, String instanceName,
- RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException {
- Optional<org.onap.aai.domain.yang.Configuration> configuration =
- bbInputSetupUtils.getRelatedConfigurationByNameFromServiceInstance(
- workflowResourceIds.getServiceInstanceId(), instanceName);
- if (configuration.isPresent()) {
- if (configuration.get().getModelCustomizationId()
- .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) {
- return configuration.get().getConfigurationId();
- } else {
- throw new DuplicateNameException("configuration", String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID,
- instanceName, configuration.get().getConfigurationId()));
- }
- }
- if (bbInputSetupUtils.existsAAIConfigurationGloballyByName(instanceName)) {
- throw new DuplicateNameException("configuration", instanceName);
- }
- return generatedResourceId;
+ protected boolean containsWorkflowType(List<Resource> resourceList, WorkflowType workflowType) {
+ return resourceList.stream().anyMatch(resource -> resource.getResourceType().equals(workflowType));
}
private void fillExecutionDefault(DelegateExecution execution) {
@@ -1904,7 +1576,7 @@ public class WorkflowAction {
WorkflowResourceIds workflowResourceIds) throws Exception {
if (resource.isGenerated() && requestAction.equalsIgnoreCase("createInstance")
&& requestDetails.getRequestInfo().getInstanceName() != null) {
- return validateResourceIdInAAI(resource.getResourceId(), resource.getResourceType(),
+ return aaiResourceIdValidator.validateResourceIdInAAI(resource.getResourceId(), resource.getResourceType(),
requestDetails.getRequestInfo().getInstanceName(), requestDetails, workflowResourceIds);
} else {
return resource.getResourceId();
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionConstants.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionConstants.java
new file mode 100644
index 0000000000..bffa2592c1
--- /dev/null
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionConstants.java
@@ -0,0 +1,35 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
+ * Modifications Copyright (c) 2020 Nokia
+ * ================================================================================
+ * Modifications Copyright (c) 2020 Tech Mahindra
+ * ================================================================================
+ * 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.workflow.tasks;
+
+public final class WorkflowActionConstants {
+
+ static final String USER_PARAM_SERVICE = "service";
+ static final String CREATE_INSTANCE = "createInstance";
+ static final String FABRIC_CONFIGURATION = "FabricConfiguration";
+ static final String WORKFLOW_ACTION_ERROR_MESSAGE = "WorkflowActionErrorMessage";
+}
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/BaseTaskTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/BaseTaskTest.java
index e8ce828652..ab83acaec2 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/BaseTaskTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/BaseTaskTest.java
@@ -24,7 +24,6 @@ package org.onap.so.bpmn;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
-import org.onap.so.bpmn.common.BuildingBlockExecution;
import org.onap.so.bpmn.common.InjectionHelper;
import org.onap.so.bpmn.common.data.TestDataSetup;
import org.onap.so.bpmn.infrastructure.flowspecific.tasks.AssignNetworkBBUtils;
@@ -33,8 +32,6 @@ import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetup;
import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils;
import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
import org.onap.aaiclient.client.aai.AAIResourcesClient;
-import org.onap.aaiclient.client.aai.entities.AAIResultWrapper;
-import org.onap.aaiclient.client.aai.entities.Relationships;
import org.onap.so.client.aai.mapper.AAIObjectMapper;
import org.onap.so.client.adapter.network.mapper.NetworkAdapterObjectMapper;
import org.onap.so.client.appc.ApplicationControllerAction;
@@ -162,5 +159,4 @@ public abstract class BaseTaskTest extends TestDataSetup {
@Mock
protected NamingRequestObject namingRequestObject;
-
}
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/AaiResourceIdValidatorTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/AaiResourceIdValidatorTest.java
new file mode 100644
index 0000000000..ead6c0b4cf
--- /dev/null
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/AaiResourceIdValidatorTest.java
@@ -0,0 +1,765 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
+ * Modifications Copyright (c) 2020 Nokia
+ * ================================================================================
+ * 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.workflow.tasks;
+
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.when;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.aai.domain.yang.GenericVnf;
+import org.onap.aai.domain.yang.GenericVnfs;
+import org.onap.aai.domain.yang.L3Network;
+import org.onap.aai.domain.yang.ServiceInstance;
+import org.onap.aai.domain.yang.ServiceInstances;
+import org.onap.aai.domain.yang.VfModule;
+import org.onap.aai.domain.yang.VfModules;
+import org.onap.aai.domain.yang.VolumeGroup;
+import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder;
+import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
+import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils;
+import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.DuplicateNameException;
+import org.onap.so.serviceinstancebeans.ModelInfo;
+import org.onap.so.serviceinstancebeans.RequestDetails;
+import org.onap.so.serviceinstancebeans.RequestParameters;
+import org.onap.so.serviceinstancebeans.SubscriberInfo;
+
+@RunWith(MockitoJUnitRunner.class)
+public class AaiResourceIdValidatorTest {
+
+ @Mock
+ private BBInputSetupUtils bbInputSetupUtilsMock;
+
+ @InjectMocks
+ private AaiResourceIdValidator testedObject;
+
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ @Test
+ public void validateResourceIdInAAIVnfTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setServiceInstanceId("siId123");
+ GenericVnf vnf = new GenericVnf();
+ vnf.setVnfId("id123");
+ vnf.setModelCustomizationId("1234567");
+ Optional<GenericVnf> opVnf = Optional.of(vnf);
+ GenericVnf vnf2 = new GenericVnf();
+ vnf2.setVnfId("id123");
+ vnf2.setModelCustomizationId("222");
+ Optional<GenericVnf> opVnf2 = Optional.of(vnf2);
+ when(bbInputSetupUtilsMock.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf);
+ when(bbInputSetupUtilsMock.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName222")).thenReturn(opVnf2);
+ String id = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName123", reqDetails,
+ workflowResourceIds);
+ assertEquals("id123", id);
+ String id2 = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "nameTest", reqDetails,
+ workflowResourceIds);
+ assertEquals("generatedId123", id2);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "generic-vnf with name (vnfName222), same parent and different customization id (222) already exists. The name must be unique."));
+ testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName222", reqDetails,
+ workflowResourceIds);
+ }
+
+ @Test
+ public void validateResourceIdInAAIVnfNotGloballyUniqueTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ GenericVnfs genericVnfs = new GenericVnfs();
+ GenericVnf vnf3 = new GenericVnf();
+ vnf3.setVnfId("id123");
+
+ genericVnfs.getGenericVnf().add(vnf3);
+ when(bbInputSetupUtilsMock.getAAIVnfsGloballyByName("vnfName333")).thenReturn(genericVnfs);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "generic-vnf with name (vnfName333) id (id123) and different parent relationship already exists. The name must be unique."));
+ testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName333", reqDetails,
+ new WorkflowResourceIds());
+ }
+
+ @Test
+ public void validateResourceIdInAAINetworkTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setServiceInstanceId("siId123");
+ L3Network network = new L3Network();
+ network.setNetworkId("id123");
+ network.setModelCustomizationId("1234567");
+ Optional<L3Network> opNetwork = Optional.of(network);
+ L3Network network2 = new L3Network();
+ network2.setNetworkId("id123");
+ network2.setModelCustomizationId("222");
+ Optional<L3Network> opNetwork2 = Optional.of(network2);
+
+ when(bbInputSetupUtilsMock.getRelatedNetworkByNameFromServiceInstance("siId123", "name123"))
+ .thenReturn(opNetwork);
+ when(bbInputSetupUtilsMock.getRelatedNetworkByNameFromServiceInstance("siId123", "networkName222"))
+ .thenReturn(opNetwork2);
+ String id = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "name123", reqDetails,
+ workflowResourceIds);
+ assertEquals("id123", id);
+ String id2 = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "111111", reqDetails,
+ workflowResourceIds);
+ assertEquals("generatedId123", id2);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "l3Network with name (networkName222), same parent and different customization id (222) already exists. The name must be unique."));
+ testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "networkName222", reqDetails,
+ workflowResourceIds);
+ }
+
+ @Test
+ public void validateNetworkResourceNameExistsInAAITest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setServiceInstanceId("siId123");
+
+ when(bbInputSetupUtilsMock.existsAAINetworksGloballyByName("networkName333")).thenReturn(true);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "l3Network with name (networkName333) id (siId123) and different parent relationship already exists. The name must be unique."));
+ testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "networkName333", reqDetails,
+ workflowResourceIds);
+ }
+
+ @Test
+ public void validateResourceIdInAAIVfModuleTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setVnfId("id123");
+
+ GenericVnf vnf = new GenericVnf();
+ VfModules vfModules = new VfModules();
+ VfModule vfModule = new VfModule();
+ vfModule.setVfModuleId("id123");
+ vfModule.setVfModuleName("name123");
+ vfModule.setModelCustomizationId("1234567");
+ vfModules.getVfModule().add(vfModule);
+ vnf.setVfModules(vfModules);
+
+ when(bbInputSetupUtilsMock.getAAIGenericVnf("id123")).thenReturn(vnf);
+ String id = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "name123", reqDetails,
+ workflowResourceIds);
+ assertEquals("id123", id);
+
+ GenericVnf vnf1 = new GenericVnf();
+ VfModules vfModules2 = new VfModules();
+ VfModule vfModule2 = new VfModule();
+ vfModule2.setVfModuleName("vFModName222");
+ vfModule2.setModelCustomizationId("222");
+ vfModules2.getVfModule().add(vfModule2);
+ vnf1.setVfModules(vfModules2);
+ workflowResourceIds.setVnfId("id111");
+ when(bbInputSetupUtilsMock.getAAIGenericVnf("id111")).thenReturn(vnf1);
+ String id2 = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "111111", reqDetails,
+ workflowResourceIds);
+ assertEquals("generatedId123", id2);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "vfModule with name (vFModName222), same parent and different customization id (1234567) already exists. The name must be unique."));
+ testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "vFModName222", reqDetails,
+ workflowResourceIds);
+ }
+
+ @Test
+ public void validateResourceIdInAAIVfModuleNotGloballyUniqueTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+
+ when(bbInputSetupUtilsMock.existsAAIVfModuleGloballyByName("vFModName333")).thenReturn(true);
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(
+ containsString("vfModule with name vFModName333 already exists. The name must be unique."));
+ testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "vFModName333", reqDetails,
+ new WorkflowResourceIds());
+ }
+
+ @Test
+ public void validateResourceIdInAAIVolumeGroupTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setVnfId("id123");
+ VolumeGroup volumeGroup = new VolumeGroup();
+ volumeGroup.setVolumeGroupId("id123");
+ volumeGroup.setVolumeGroupName("name123");
+ volumeGroup.setVfModuleModelCustomizationId("1234567");
+ Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup);
+
+ when(bbInputSetupUtilsMock.getRelatedVolumeGroupByNameFromVnf("id123", "name123")).thenReturn(opVolumeGroup);
+ String id = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123",
+ reqDetails, workflowResourceIds);
+ assertEquals("id123", id);
+
+ String id2 = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "111111",
+ reqDetails, workflowResourceIds);
+ assertEquals("generatedId123", id2);
+ }
+
+
+ @Test
+ public void validateSourceIdInAAIVolumeGroupNotGloballyUniqueTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ when(bbInputSetupUtilsMock.existsAAIVolumeGroupGloballyByName("testVolumeGroup")).thenReturn(true);
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(
+ containsString("volumeGroup with name testVolumeGroup already exists. The name must be unique."));
+ testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "testVolumeGroup", reqDetails,
+ new WorkflowResourceIds());
+ }
+
+ @Test
+ public void validateResourceIdInAAIConfigurationTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setServiceInstanceId("siId123");
+
+ org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
+ configuration.setConfigurationId("id123");
+ configuration.setModelCustomizationId("1234567");
+ Optional<org.onap.aai.domain.yang.Configuration> opConfiguration = Optional.of(configuration);
+
+ org.onap.aai.domain.yang.Configuration configuration2 = new org.onap.aai.domain.yang.Configuration();
+ configuration2.setConfigurationId("id123");
+ configuration2.setModelCustomizationId("222");
+ Optional<org.onap.aai.domain.yang.Configuration> opConfiguration2 = Optional.of(configuration2);
+
+ when(bbInputSetupUtilsMock.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123"))
+ .thenReturn(opConfiguration);
+ String id = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "name123",
+ reqDetails, workflowResourceIds);
+ assertEquals("id123", id);
+
+ String id2 = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "111111",
+ reqDetails, workflowResourceIds);
+ assertEquals("generatedId123", id2);
+
+ when(bbInputSetupUtilsMock.getRelatedConfigurationByNameFromServiceInstance("siId123", "name222"))
+ .thenReturn(opConfiguration2);
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "configuration with name (name222), same parent and different customization id (id123) already exists. The name must be unique."));
+ testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "name222", reqDetails,
+ workflowResourceIds);
+ }
+
+ @Test
+ public void validateResourceIdInAAIConfigurationNotGloballyUniqueTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ when(bbInputSetupUtilsMock.existsAAIConfigurationGloballyByName("testConfig")).thenReturn(true);
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(
+ containsString("configuration with name testConfig already exists. The name must be unique."));
+ testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "testConfig", reqDetails,
+ new WorkflowResourceIds());
+ }
+
+ @Test
+ public void validateResourceIdInAAISITest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ reqDetails.getModelInfo().setModelVersionId("1234567");
+
+ ServiceInstance si = new ServiceInstance();
+ si.setServiceInstanceId("siId123");
+ si.setModelVersionId("1234567");
+ ServiceInstances serviceInstances = new ServiceInstances();
+ serviceInstances.getServiceInstance().add(si);
+ Optional<ServiceInstance> siOp = Optional.of(si);
+ ServiceInstance si2 = new ServiceInstance();
+ si2.setServiceInstanceId("siId222");
+ si2.setModelVersionId("22222");
+ si2.setServiceInstanceName("siName222");
+ Optional<ServiceInstance> siOp2 = Optional.of(si2);
+ ServiceInstances serviceInstances2 = new ServiceInstances();
+ serviceInstances2.getServiceInstance().add(si2);
+
+ when(bbInputSetupUtilsMock.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123"))
+ .thenReturn(siOp);
+ when(bbInputSetupUtilsMock.getAAIServiceInstanceByName("id123", "subServiceType123", "siName222"))
+ .thenReturn(siOp2);
+ String id = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123",
+ reqDetails, new WorkflowResourceIds());
+ assertEquals("siId123", id);
+ String id2 = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "111111", reqDetails,
+ new WorkflowResourceIds());
+ assertEquals("generatedId123", id2);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "serviceInstance with name (siName222) and different version id (1234567) already exists. The name must be unique."));
+ testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName222", reqDetails,
+ new WorkflowResourceIds());
+ }
+
+ @Test
+ public void validateResourceIdInAAIMultipleSITest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ reqDetails.getModelInfo().setModelVersionId("1234567");
+ ServiceInstance si = new ServiceInstance();
+ ServiceInstances serviceInstances = new ServiceInstances();
+ serviceInstances.getServiceInstance().add(si);
+ ServiceInstance si2 = new ServiceInstance();
+ serviceInstances.getServiceInstance().add(si2);
+ when(bbInputSetupUtilsMock.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "serviceInstance with name (siName123) and multiple combination of model-version-id + service-type + global-customer-id already exists. The name must be unique."));
+ testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", reqDetails,
+ new WorkflowResourceIds());
+ }
+
+ @Test
+ public void validateResourceIdInAAISIExistsTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ reqDetails.getModelInfo().setModelVersionId("1234567");
+
+ ServiceInstance si = new ServiceInstance();
+ si.setServiceInstanceId("siId123");
+ si.setModelVersionId("1234567");
+ ServiceInstances serviceInstances = new ServiceInstances();
+ serviceInstances.getServiceInstance().add(si);
+
+ Map<String, String> uriKeys = new HashMap<>();
+ uriKeys.put(AAIFluentTypeBuilder.Types.CUSTOMER.getUriParams().globalCustomerId, "globalCustomerId");
+ uriKeys.put(AAIFluentTypeBuilder.Types.SERVICE_SUBSCRIPTION.getUriParams().serviceType, "serviceType");
+
+ when(bbInputSetupUtilsMock.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances);
+ when(bbInputSetupUtilsMock.getURIKeysFromServiceInstance("siId123")).thenReturn(uriKeys);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "serviceInstance with name (siName123) and global-customer-id (globalCustomerId), service-type (serviceType), model-version-id (1234567) already exists. The name must be unique."));
+ testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", reqDetails,
+ new WorkflowResourceIds());
+ }
+
+ @Test
+ public void validateServiceResourceIdInAAINoDupTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ String id = testedObject.validateServiceResourceIdInAAI("generatedId123", "siName123", reqDetails);
+ assertEquals("generatedId123", id);
+ }
+
+ @Test
+ public void validateServiceResourceIdInAAISameModelVersionId() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ reqDetails.getModelInfo().setModelVersionId("1234567");
+
+ ServiceInstance si = new ServiceInstance();
+ si.setServiceInstanceId("siId123");
+ si.setModelVersionId("1234567");
+ Optional<ServiceInstance> siOp = Optional.of(si);
+
+ when(bbInputSetupUtilsMock.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123"))
+ .thenReturn(siOp);
+ String id = testedObject.validateServiceResourceIdInAAI("generatedId123", "siName123", reqDetails);
+ assertEquals("siId123", id);
+ }
+
+ @Test
+ public void validateServiceResourceIdInAAIDifferentModelVersionId() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ reqDetails.getModelInfo().setModelVersionId("1234567");
+
+ ServiceInstance si = new ServiceInstance();
+ si.setModelVersionId("9999999");
+ ServiceInstances serviceInstances = new ServiceInstances();
+ serviceInstances.getServiceInstance().add(si);
+ Optional<ServiceInstance> siOp = Optional.of(si);
+
+ when(bbInputSetupUtilsMock.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123"))
+ .thenReturn(siOp);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "serviceInstance with name (siName123) and different version id (1234567) already exists. The name must be unique."));
+
+ String id = testedObject.validateServiceResourceIdInAAI("generatedId123", "siName123", reqDetails);
+ assertEquals("siId123", id);
+ }
+
+ @Test
+ public void validateServiceResourceIdInAAIDuplicateNameTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ ServiceInstance si = new ServiceInstance();
+ si.setModelVersionId("1234567");
+ ServiceInstances serviceInstances = new ServiceInstances();
+ serviceInstances.getServiceInstance().add(si);
+
+ when(bbInputSetupUtilsMock.getAAIServiceInstancesGloballyByName("siName")).thenReturn(serviceInstances);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "serviceInstance with name (siName) and global-customer-id (null), service-type (null), model-version-id (1234567) already exists. The name must be unique."));
+
+ testedObject.validateServiceResourceIdInAAI("generatedId123", "siName", reqDetails);
+ }
+
+ @Test
+ public void validateServiceResourceIdInAAIDuplicateNameMultipleTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ ServiceInstances serviceInstances = new ServiceInstances();
+ serviceInstances.getServiceInstance().add(new ServiceInstance());
+ serviceInstances.getServiceInstance().add(new ServiceInstance());
+
+ when(bbInputSetupUtilsMock.getAAIServiceInstancesGloballyByName("siName")).thenReturn(serviceInstances);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "serviceInstance with name (siName) and multiple combination of model-version-id + service-type + global-customer-id already exists. The name must be unique."));
+
+ testedObject.validateServiceResourceIdInAAI("generatedId123", "siName", reqDetails);
+ }
+
+ @Test
+ public void validateNetworkResourceIdInAAITest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ String id = testedObject.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails,
+ new WorkflowResourceIds());
+ assertEquals("generatedId123", id);
+ }
+
+ @Test
+ public void validateNetworkResourceIdInAAISameModelCustIdTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setServiceInstanceId("siId123");
+ L3Network network = new L3Network();
+ network.setNetworkId("id123");
+ network.setModelCustomizationId("1234567");
+ Optional<L3Network> opNetwork = Optional.of(network);
+
+ when(bbInputSetupUtilsMock.getRelatedNetworkByNameFromServiceInstance("siId123", "name123"))
+ .thenReturn(opNetwork);
+
+ String id = testedObject.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails,
+ workflowResourceIds);
+ assertEquals("id123", id);
+ }
+
+ @Test
+ public void validateNetworkResourceIdInAAIDuplicateNameTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setServiceInstanceId("siId123");
+ L3Network network = new L3Network();
+ network.setModelCustomizationId("9999999");
+ Optional<L3Network> opNetwork = Optional.of(network);
+
+ when(bbInputSetupUtilsMock.getRelatedNetworkByNameFromServiceInstance("siId123", "name123"))
+ .thenReturn(opNetwork);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "l3Network with name (name123), same parent and different customization id (9999999) already exists. The name must be unique."));
+
+ testedObject.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds);
+ }
+
+ @Test
+ public void validateNetworkResourceIdInAAINotGloballyUniqueTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setServiceInstanceId("siId123");
+
+ when(bbInputSetupUtilsMock.existsAAINetworksGloballyByName("name123")).thenReturn(true);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "l3Network with name (name123) id (siId123) and different parent relationship already exists. The name must be unique."));
+
+ testedObject.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds);
+ }
+
+ @Test
+ public void validateVnfResourceIdInAAITest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ String id = testedObject.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails,
+ new WorkflowResourceIds());
+ assertEquals("generatedId123", id);
+ }
+
+ @Test
+ public void validateVnfResourceIdInAAISameModelCustomizationIdTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setServiceInstanceId("siId123");
+
+ GenericVnf vnf = new GenericVnf();
+ vnf.setVnfId("id123");
+ vnf.setModelCustomizationId("1234567");
+ Optional<GenericVnf> opVnf = Optional.of(vnf);
+
+ when(bbInputSetupUtilsMock.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf);
+ String id = testedObject.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails,
+ workflowResourceIds);
+ assertEquals("id123", id);
+ }
+
+ @Test
+ public void validateVnfResourceIdInAAIDiffModelCustomizationIdTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setServiceInstanceId("siId123");
+ GenericVnf vnf = new GenericVnf();
+ vnf.setModelCustomizationId("9999999");
+ Optional<GenericVnf> opVnf = Optional.of(vnf);
+
+ when(bbInputSetupUtilsMock.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "generic-vnf with name (vnfName123), same parent and different customization id (9999999) already exists. The name must be unique."));
+
+ testedObject.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails, workflowResourceIds);
+ }
+
+ @Test
+ public void validateVnfResourceIdInAAINotGloballyUniqueTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ GenericVnf vnf = new GenericVnf();
+ vnf.setVnfId("id123");
+ GenericVnfs genericVnfs = new GenericVnfs();
+ genericVnfs.getGenericVnf().add(vnf);
+
+ when(bbInputSetupUtilsMock.getAAIVnfsGloballyByName("vnfName123")).thenReturn(genericVnfs);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "generic-vnf with name (vnfName123) id (id123) and different parent relationship already exists. The name must be unique."));
+
+ testedObject.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails, new WorkflowResourceIds());
+ }
+
+ @Test
+ public void validateVfModuleResourceIdTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ String id = testedObject.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails,
+ new WorkflowResourceIds());
+ assertEquals("generatedId123", id);
+ }
+
+ @Test
+ public void validateVfModuleResourceIdSameModelCustIdTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setVnfId("vnfId123");
+ VfModules vfModules = new VfModules();
+ VfModule vfModule = new VfModule();
+ vfModule.setVfModuleId("id123");
+ vfModule.setVfModuleName("name123");
+ vfModule.setModelCustomizationId("1234567");
+ vfModules.getVfModule().add(vfModule);
+ GenericVnf vnf = new GenericVnf();
+ vnf.setVfModules(vfModules);
+
+ when(bbInputSetupUtilsMock.getAAIGenericVnf("vnfId123")).thenReturn(vnf);
+
+ String id = testedObject.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails,
+ workflowResourceIds);
+ assertEquals("id123", id);
+ }
+
+ @Test
+ public void validateVfModuleResourceIdDifferentModelCustIdTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setVnfId("vnfId123");
+ VfModules vfModules = new VfModules();
+ VfModule vfModule = new VfModule();
+ vfModule.setVfModuleName("name123");
+ vfModule.setModelCustomizationId("9999999");
+ vfModules.getVfModule().add(vfModule);
+ GenericVnf vnf = new GenericVnf();
+ vnf.setVfModules(vfModules);
+
+ when(bbInputSetupUtilsMock.getAAIGenericVnf("vnfId123")).thenReturn(vnf);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "vfModule with name (name123), same parent and different customization id (1234567) already exists. The name must be unique."));
+
+ testedObject.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds);
+ }
+
+ @Test
+ public void validateVfModuleResourceIdNotGloballyUniqueTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ when(bbInputSetupUtilsMock.existsAAIVfModuleGloballyByName("name123")).thenReturn(true);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException
+ .expectMessage(containsString("vfModule with name name123 already exists. The name must be unique."));
+
+ testedObject.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds);
+ }
+
+ @Test
+ public void validateVolumeGroupResourceIdInAAITest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ String id = testedObject.validateVolumeGroupResourceIdInAAI("generatedId123", "name123", reqDetails,
+ new WorkflowResourceIds());
+ assertEquals("generatedId123", id);
+ }
+
+ @Test
+ public void validateVolumeGroupResourceIdInAAISameModelCustIdTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setVnfId("vnfId123");
+ VolumeGroup volumeGroup = new VolumeGroup();
+ volumeGroup.setVolumeGroupId("id123");
+ volumeGroup.setVfModuleModelCustomizationId("1234567");
+ Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup);
+
+ when(bbInputSetupUtilsMock.getRelatedVolumeGroupByNameFromVnf("vnfId123", "name123")).thenReturn(opVolumeGroup);
+ String id = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123",
+ reqDetails, workflowResourceIds);
+
+ assertEquals("id123", id);
+ }
+
+ @Test
+ public void validateVolumeGroupResourceIdInAAIDifferentModelCustIdTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setVnfId("vnfId123");
+ VolumeGroup volumeGroup = new VolumeGroup();
+ volumeGroup.setVolumeGroupName("name123");
+ volumeGroup.setVfModuleModelCustomizationId("9999999");
+ Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup);
+
+ when(bbInputSetupUtilsMock.getRelatedVolumeGroupByNameFromVnf("vnfId123", "name123")).thenReturn(opVolumeGroup);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(
+ containsString("volumeGroup with name name123 already exists. The name must be unique."));
+
+ testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", reqDetails,
+ workflowResourceIds);
+ }
+
+ @Test
+ public void validateVolumeGroupResourceIdInAAINotGloballyUniqueTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ when(bbInputSetupUtilsMock.existsAAIVolumeGroupGloballyByName("name123")).thenReturn(true);
+
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(
+ containsString("volumeGroup with name name123 already exists. The name must be unique."));
+
+ testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", reqDetails,
+ workflowResourceIds);
+ }
+
+ @Test
+ public void validateConfigurationResourceIdInAAITest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ String id = testedObject.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails,
+ new WorkflowResourceIds());
+ assertEquals("generatedId123", id);
+ }
+
+ @Test
+ public void validateConfigurationResourceIdInAAISameModelCustIdTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setServiceInstanceId("siId123");
+ org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
+ configuration.setConfigurationId("id123");
+ configuration.setModelCustomizationId("1234567");
+ Optional<org.onap.aai.domain.yang.Configuration> opConfiguration = Optional.of(configuration);
+
+ when(bbInputSetupUtilsMock.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123"))
+ .thenReturn(opConfiguration);
+
+ String id = testedObject.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails,
+ workflowResourceIds);
+ assertEquals("id123", id);
+ }
+
+ @Test
+ public void validateConfigurationResourceIdInAAIDifferentModelCustIdTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setServiceInstanceId("siId123");
+ org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
+ configuration.setConfigurationId("id123");
+ configuration.setModelCustomizationId("9999999");
+ Optional<org.onap.aai.domain.yang.Configuration> opConfiguration = Optional.of(configuration);
+
+ when(bbInputSetupUtilsMock.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123"))
+ .thenReturn(opConfiguration);
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(containsString(
+ "configuration with name (name123), same parent and different customization id (id123) already exists. The name must be unique."));
+
+ testedObject.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds);
+ }
+
+ @Test
+ public void validateConfigurationResourceIdInAAINotGloballyUniqueTest() throws Exception {
+ RequestDetails reqDetails = setupRequestDetails();
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+
+ when(bbInputSetupUtilsMock.existsAAIConfigurationGloballyByName("name123")).thenReturn(true);
+ this.expectedException.expect(DuplicateNameException.class);
+ this.expectedException.expectMessage(
+ containsString("configuration with name name123 already exists. The name must be unique."));
+
+ testedObject.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds);
+ }
+
+ private RequestDetails setupRequestDetails() {
+ RequestDetails reqDetails = new RequestDetails();
+ SubscriberInfo subInfo = new SubscriberInfo();
+ subInfo.setGlobalSubscriberId("id123");
+ reqDetails.setSubscriberInfo(subInfo);
+ RequestParameters reqParams = new RequestParameters();
+ reqParams.setSubscriptionServiceType("subServiceType123");
+ reqDetails.setRequestParameters(reqParams);
+ ModelInfo modelInfo = new ModelInfo();
+ modelInfo.setModelCustomizationId("1234567");
+ reqDetails.setModelInfo(modelInfo);
+ return reqDetails;
+ }
+}
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java
index 7f22c5138e..5f9356d066 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java
@@ -35,6 +35,7 @@ import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.ArgumentMatchers.anyObject;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
@@ -50,9 +51,7 @@ import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import org.camunda.bpm.engine.delegate.BpmnError;
@@ -67,15 +66,10 @@ import org.junit.rules.ExpectedException;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
-import org.onap.aai.domain.yang.GenericVnf;
-import org.onap.aai.domain.yang.GenericVnfs;
-import org.onap.aai.domain.yang.L3Network;
import org.onap.aai.domain.yang.Relationship;
import org.onap.aai.domain.yang.RelationshipList;
import org.onap.aai.domain.yang.ServiceInstance;
-import org.onap.aai.domain.yang.ServiceInstances;
import org.onap.aai.domain.yang.VfModule;
-import org.onap.aai.domain.yang.VfModules;
import org.onap.aai.domain.yang.VolumeGroup;
import org.onap.aaiclient.client.aai.entities.AAIResultWrapper;
import org.onap.aaiclient.client.aai.entities.Relationships;
@@ -107,11 +101,8 @@ import org.onap.so.db.catalog.beans.Service;
import org.onap.so.db.catalog.beans.VfModuleCustomization;
import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
-import org.onap.so.serviceinstancebeans.ModelInfo;
import org.onap.so.serviceinstancebeans.RequestDetails;
-import org.onap.so.serviceinstancebeans.RequestParameters;
import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
-import org.onap.so.serviceinstancebeans.SubscriberInfo;
import org.springframework.core.env.Environment;
public class WorkflowActionTest extends BaseTaskTest {
@@ -127,8 +118,13 @@ public class WorkflowActionTest extends BaseTaskTest {
@Mock
protected Environment environment;
+ @Mock
+ protected UserParamsServiceTraversal userParamsServiceTraversal;
+ @Mock
+ private AaiResourceIdValidator aaiResourceIdValidator;
@InjectMocks
protected WorkflowAction workflowAction;
+
private DelegateExecution execution;
@InjectMocks
@@ -237,7 +233,7 @@ public class WorkflowActionTest extends BaseTaskTest {
doThrow(new DuplicateNameException(
"serviceInstance with name (instanceName) and different version id (3c40d244-808e-42ca-b09a-256d83d19d0a) already exists. The name must be unique."))
- .when(SPY_workflowAction).validateResourceIdInAAI(anyString(), eq(WorkflowType.SERVICE),
+ .when(aaiResourceIdValidator).validateResourceIdInAAI(anyString(), eq(WorkflowType.SERVICE),
eq("test"), any(RequestDetails.class), any(WorkflowResourceIds.class));
SPY_workflowAction.selectExecutionList(execution);
@@ -286,6 +282,8 @@ public class WorkflowActionTest extends BaseTaskTest {
VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
+ when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
+ .thenReturn(prepareListWithResources());
when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
@@ -334,6 +332,8 @@ public class WorkflowActionTest extends BaseTaskTest {
VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
+ when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
+ .thenReturn(prepareListWithResources());
when(environment.getProperty("org.onap.so.cloud-owner")).thenReturn("att-aic");
when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
false, "att-aic")).thenReturn(northBoundRequest);
@@ -606,6 +606,8 @@ public class WorkflowActionTest extends BaseTaskTest {
VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
+ when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
+ .thenReturn(prepareListWithResources());
when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
@@ -622,6 +624,7 @@ public class WorkflowActionTest extends BaseTaskTest {
"ActivateVolumeGroupBB", "CreateVfModuleBB", "CreateVfModuleBB", "CreateVfModuleBB",
"ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB",
"ActivateServiceInstanceBB");
+
assertEquals(3, ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
int randomUUIDLength = UUID.randomUUID().toString().length();
assertEquals(randomUUIDLength, ebbs.get(1).getWorkflowResourceIds().getVnfId().length());
@@ -2010,906 +2013,6 @@ public class WorkflowActionTest extends BaseTaskTest {
assertNull(x.getVolumeGroupId());
}
- private RequestDetails setupRequestDetails(String globalSubscriberId, String subscriptionServiceType,
- String modelCustomizationId) {
- RequestDetails reqDetails = new RequestDetails();
- SubscriberInfo subInfo = new SubscriberInfo();
- subInfo.setGlobalSubscriberId(globalSubscriberId);
- reqDetails.setSubscriberInfo(subInfo);
- RequestParameters reqParams = new RequestParameters();
- reqParams.setSubscriptionServiceType(subscriptionServiceType);
- reqDetails.setRequestParameters(reqParams);
- ModelInfo modelInfo = new ModelInfo();
- modelInfo.setModelCustomizationId(modelCustomizationId);
- reqDetails.setModelInfo(modelInfo);
- return reqDetails;
- }
-
- @Test
- public void validateResourceIdInAAIVnfTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
- // Vnf
- GenericVnf vnf = new GenericVnf();
- vnf.setVnfId("id123");
- vnf.setVnfName("vnfName123");
- vnf.setModelCustomizationId("1234567");
- Optional<GenericVnf> opVnf = Optional.of(vnf);
- GenericVnf vnf2 = new GenericVnf();
- vnf2.setVnfId("id123");
- vnf2.setVnfName("vnfName222");
- vnf2.setModelCustomizationId("222");
- Optional<GenericVnf> opVnf2 = Optional.of(vnf2);
- when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf);
- when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName222")).thenReturn(opVnf2);
- when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "111111")).thenReturn(Optional.empty());
- String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName123", reqDetails,
- workflowResourceIds);
- assertEquals("id123", id);
- String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "111111", reqDetails,
- workflowResourceIds);
- assertEquals("generatedId123", id2);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "generic-vnf with name (vnfName222), same parent and different customization id (222) already exists. The name must be unique."));
- workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName222", reqDetails,
- workflowResourceIds);
- }
-
- @Test
- public void validateResourceIdInAAIVnfNotGloballyUniqueTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- // Vnf
- GenericVnfs genericVnfs = new GenericVnfs();
- GenericVnf vnf3 = new GenericVnf();
- vnf3.setVnfId("id123");
- vnf3.setVnfName("vnfName333");
- genericVnfs.getGenericVnf().add(vnf3);
- when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName333")).thenReturn(Optional.empty());
- when(bbSetupUtils.getAAIVnfsGloballyByName("vnfName333")).thenReturn(genericVnfs);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "generic-vnf with name (vnfName333) id (id123) and different parent relationship already exists. The name must be unique."));
- workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName333", reqDetails,
- workflowResourceIds);
- }
-
- @Test
- public void validateResourceIdInAAINetworkTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- // Network
- L3Network network = new L3Network();
- network.setNetworkId("id123");
- network.setNetworkName("name123");
- network.setModelCustomizationId("1234567");
- workflowResourceIds.setServiceInstanceId("siId123");
- Optional<L3Network> opNetwork = Optional.of(network);
- L3Network network2 = new L3Network();
- network2.setNetworkId("id123");
- network2.setNetworkName("networkName222");
- network2.setModelCustomizationId("222");
- Optional<L3Network> opNetwork2 = Optional.of(network2);
- when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")).thenReturn(opNetwork);
- when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "networkName222"))
- .thenReturn(opNetwork2);
- when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "111111")).thenReturn(Optional.empty());
- String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "name123",
- reqDetails, workflowResourceIds);
- assertEquals("id123", id);
- String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "111111",
- reqDetails, workflowResourceIds);
- assertEquals("generatedId123", id2);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "l3Network with name (networkName222), same parent and different customization id (222) already exists. The name must be unique."));
- workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "networkName222", reqDetails,
- workflowResourceIds);
- }
-
- @Test
- public void validateNetworkResourceNameExistsInAAITest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- // Network
- L3Network network = new L3Network();
- network.setNetworkId("id123");
- network.setNetworkName("name123");
- network.setModelCustomizationId("1234567");
- workflowResourceIds.setServiceInstanceId("siId123");
-
- when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("networkName333", "111111"))
- .thenReturn(Optional.empty());
- when(bbSetupUtils.existsAAINetworksGloballyByName("networkName333")).thenReturn(true);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "l3Network with name (networkName333) id (siId123) and different parent relationship already exists. The name must be unique."));
- workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "networkName333", reqDetails,
- workflowResourceIds);
- }
-
- @Test
- public void validateResourceIdInAAIVfModuleTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- GenericVnf vnf = new GenericVnf();
- vnf.setVnfId("id123");
- vnf.setVnfName("vnfName123");
- vnf.setModelCustomizationId("222");
-
- // VfModule
- VfModules vfModules = new VfModules();
- VfModule vfModule = new VfModule();
- vfModule.setVfModuleId("id123");
- vfModule.setVfModuleName("name123");
- vfModule.setModelCustomizationId("1234567");
- vfModules.getVfModule().add(vfModule);
- vnf.setVfModules(vfModules);
- workflowResourceIds.setVnfId("id123");
- when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf);
- String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "name123",
- reqDetails, workflowResourceIds);
- assertEquals("id123", id);
-
- GenericVnf vnf1 = new GenericVnf();
- VfModules vfModules2 = new VfModules();
- VfModule vfModule2 = new VfModule();
- vfModule2.setVfModuleId("id123");
- vfModule2.setVfModuleName("vFModName222");
- vfModule2.setModelCustomizationId("222");
- vfModules2.getVfModule().add(vfModule2);
- vnf1.setVfModules(vfModules2);
- workflowResourceIds.setVnfId("id111");
- when(bbSetupUtils.getAAIGenericVnf("id111")).thenReturn(vnf1);
- String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "111111",
- reqDetails, workflowResourceIds);
- assertEquals("generatedId123", id2);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "vfModule with name (vFModName222), same parent and different customization id (1234567) already exists. The name must be unique."));
- workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "vFModName222", reqDetails,
- workflowResourceIds);
- }
-
- @Test
- public void validateResourceIdInAAIVfModuleNotGloballyUniqueTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setVnfId("id111");
-
- GenericVnf vnf1 = new GenericVnf();
- workflowResourceIds.setVnfId("id111");
- when(bbSetupUtils.getAAIGenericVnf("id111")).thenReturn(vnf1);
-
- when(bbSetupUtils.existsAAIVfModuleGloballyByName("vFModName333")).thenReturn(true);
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(
- containsString("vfModule with name vFModName333 already exists. The name must be unique."));
- workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "vFModName333", reqDetails,
- workflowResourceIds);
- }
-
- @Test
- public void validateResourceIdInAAIVolumeGroupTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- GenericVnf vnf = new GenericVnf();
- vnf.setVnfId("id123");
- vnf.setVnfName("vnfName123");
- vnf.setModelCustomizationId("1234567");
-
- GenericVnf vnf2 = new GenericVnf();
- vnf2.setVnfId("id123");
- vnf2.setVnfName("vnfName123");
- vnf2.setModelCustomizationId("222");
-
- // VolumeGroup
- VolumeGroup volumeGroup = new VolumeGroup();
- volumeGroup.setVolumeGroupId("id123");
- volumeGroup.setVolumeGroupName("name123");
- volumeGroup.setVfModuleModelCustomizationId("1234567");
- workflowResourceIds.setVnfId("id123");
- Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup);
-
- workflowResourceIds.setVnfId("id123");
-
- when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf);
- when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123", "name123")).thenReturn(opVolumeGroup);
- String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123",
- reqDetails, workflowResourceIds);
- assertEquals("id123", id);
-
- when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf2);
- when(bbSetupUtils.getRelatedVolumeGroupByNameFromVfModule("id123", "id123", "111111"))
- .thenReturn(opVolumeGroup);
-
- when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123", "111111")).thenReturn(Optional.empty());
- String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "111111",
- reqDetails, workflowResourceIds);
- assertEquals("generatedId123", id2);
- }
-
- @Test
- public void validatesourceIdInAAIVolumeGroupNotGloballyUniqueTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setVnfId("id123");
- GenericVnf vnf = new GenericVnf();
- vnf.setVnfId("id123");
- when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf);
- when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123", "testVolumeGroup")).thenReturn(Optional.empty());
-
- when(bbSetupUtils.existsAAIVolumeGroupGloballyByName("testVolumeGroup")).thenReturn(true);
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(
- containsString("volumeGroup with name testVolumeGroup already exists. The name must be unique."));
- workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "testVolumeGroup",
- reqDetails, workflowResourceIds);
- }
-
- @Test
- public void validateResourceIdInAAIConfigurationTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- // Configuration
- org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
- configuration.setConfigurationId("id123");
- configuration.setConfigurationName("name123");
- configuration.setModelCustomizationId("1234567");
- Optional<org.onap.aai.domain.yang.Configuration> opConfiguration = Optional.of(configuration);
-
- org.onap.aai.domain.yang.Configuration configuration2 = new org.onap.aai.domain.yang.Configuration();
- configuration2.setConfigurationId("id123");
- configuration2.setConfigurationName("name123");
- configuration2.setModelCustomizationId("222");
- Optional<org.onap.aai.domain.yang.Configuration> opConfiguration2 = Optional.of(configuration2);
-
- workflowResourceIds.setVnfId("id123");
-
- when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123"))
- .thenReturn(opConfiguration);
- String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "name123",
- reqDetails, workflowResourceIds);
- assertEquals("id123", id);
-
- when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "111111"))
- .thenReturn(Optional.empty());
- String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "111111",
- reqDetails, workflowResourceIds);
- assertEquals("generatedId123", id2);
-
- when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name222"))
- .thenReturn(opConfiguration2);
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "configuration with name (name222), same parent and different customization id (id123) already exists. The name must be unique."));
- workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "name222", reqDetails,
- workflowResourceIds);
- }
-
- @Test
- public void validateResourceIdInAAIConfigurationNotGloballyUniqueTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "testConfig"))
- .thenReturn(Optional.empty());
- when(bbSetupUtils.existsAAIConfigurationGloballyByName("testConfig")).thenReturn(true);
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(
- containsString("configuration with name testConfig already exists. The name must be unique."));
- workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "testConfig", reqDetails,
- workflowResourceIds);
- }
-
- @Test
- public void validateResourceIdInAAISITest() throws Exception {
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- reqDetails.getModelInfo().setModelVersionId("1234567");
-
- ServiceInstance si = new ServiceInstance();
- si.setServiceInstanceId("siId123");
- si.setModelVersionId("1234567");
- ServiceInstances serviceInstances = new ServiceInstances();
- serviceInstances.getServiceInstance().add(si);
- Optional<ServiceInstance> siOp = Optional.of(si);
- ServiceInstance si2 = new ServiceInstance();
- si2.setServiceInstanceId("siId222");
- si2.setModelVersionId("22222");
- si2.setServiceInstanceName("siName222");
- Optional<ServiceInstance> siOp2 = Optional.of(si2);
- ServiceInstances serviceInstances2 = new ServiceInstances();
- serviceInstances2.getServiceInstance().add(si2);
-
- when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")).thenReturn(siOp);
- when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName222")).thenReturn(siOp2);
- when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "111111"))
- .thenReturn(Optional.empty());
-
- when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances);
- String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123",
- reqDetails, workflowResourceIds);
- assertEquals("siId123", id);
- String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "111111",
- reqDetails, workflowResourceIds);
- assertEquals("generatedId123", id2);
-
- when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName222")).thenReturn(serviceInstances2);
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "serviceInstance with name (siName222) and different version id (1234567) already exists. The name must be unique."));
- workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName222", reqDetails,
- workflowResourceIds);
- }
-
- @Test
- public void validateResourceIdInAAIMultipleSITest() throws Exception {
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- reqDetails.getModelInfo().setModelVersionId("1234567");
-
- ServiceInstance si = new ServiceInstance();
- si.setServiceInstanceId("siId123");
- si.setModelVersionId("1234567");
- ServiceInstances serviceInstances = new ServiceInstances();
- serviceInstances.getServiceInstance().add(si);
-
- ServiceInstance si2 = new ServiceInstance();
- si2.setServiceInstanceId("siId222");
- si2.setModelVersionId("22222");
- si2.setServiceInstanceName("siName222");
- serviceInstances.getServiceInstance().add(si2);
-
- when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siId123"))
- .thenReturn(Optional.empty());
-
- when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "serviceInstance with name (siName123) and multiple combination of model-version-id + service-type + global-customer-id already exists. The name must be unique."));
- workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", reqDetails,
- workflowResourceIds);
- }
-
- @Test
- public void validateResourceIdInAAISIExistsTest() throws Exception {
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- reqDetails.getModelInfo().setModelVersionId("1234567");
-
- ServiceInstance si = new ServiceInstance();
- si.setServiceInstanceId("siId123");
- si.setModelVersionId("1234567");
- ServiceInstances serviceInstances = new ServiceInstances();
- serviceInstances.getServiceInstance().add(si);
-
- when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siId123"))
- .thenReturn(Optional.empty());
-
- when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances);
-
- Map<String, String> uriKeys = new HashMap<>();
- uriKeys.put(AAIFluentTypeBuilder.Types.CUSTOMER.getUriParams().globalCustomerId, "globalCustomerId");
- uriKeys.put(AAIFluentTypeBuilder.Types.SERVICE_SUBSCRIPTION.getUriParams().serviceType, "serviceType");
-
- when(bbSetupUtils.getURIKeysFromServiceInstance("siId123")).thenReturn(uriKeys);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "serviceInstance with name (siName123) and global-customer-id (globalCustomerId), service-type (serviceType), model-version-id (1234567) already exists. The name must be unique."));
- workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", reqDetails,
- workflowResourceIds);
- }
-
- @Test
- public void validateServiceResourceIdInAAINoDupTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- reqDetails.getModelInfo().setModelVersionId("1234567");
- when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123"))
- .thenReturn(Optional.empty());
- when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(null);
- String id = workflowAction.validateServiceResourceIdInAAI("generatedId123", "siName123", reqDetails);
- assertEquals("generatedId123", id);
- }
-
- @Test
- public void validateServiceResourceIdInAAISameModelVersionId() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- reqDetails.getModelInfo().setModelVersionId("1234567");
-
- ServiceInstance si = new ServiceInstance();
- si.setServiceInstanceId("siId123");
- si.setModelVersionId("1234567");
- Optional<ServiceInstance> siOp = Optional.of(si);
-
- when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")).thenReturn(siOp);
- String id = workflowAction.validateServiceResourceIdInAAI("generatedId123", "siName123", reqDetails);
- assertEquals("siId123", id);
- }
-
- @Test
- public void validateServiceResourceIdInAAIDifferentModelVersionId() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- reqDetails.getModelInfo().setModelVersionId("1234567");
-
- ServiceInstance si = new ServiceInstance();
- si.setServiceInstanceId("siId123");
- si.setModelVersionId("9999999");
- ServiceInstances serviceInstances = new ServiceInstances();
- serviceInstances.getServiceInstance().add(si);
- Optional<ServiceInstance> siOp = Optional.of(si);
-
- when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")).thenReturn(siOp);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "serviceInstance with name (siName123) and different version id (1234567) already exists. The name must be unique."));
-
- String id = workflowAction.validateServiceResourceIdInAAI("generatedId123", "siName123", reqDetails);
- assertEquals("siId123", id);
- }
-
- @Test
- public void validateServiceResourceIdInAAIDuplicateNameTest() throws Exception {
-
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- reqDetails.getModelInfo().setModelVersionId("1234567");
-
- ServiceInstance si = new ServiceInstance();
- si.setServiceInstanceId("siId123");
- si.setModelVersionId("1234567");
-
- ServiceInstances serviceInstances = new ServiceInstances();
- serviceInstances.getServiceInstance().add(si);
-
- when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName"))
- .thenReturn(Optional.empty());
- when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName")).thenReturn(serviceInstances);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "serviceInstance with name (siName) and global-customer-id (null), service-type (null), model-version-id (1234567) already exists. The name must be unique."));
-
- workflowAction.validateServiceResourceIdInAAI("generatedId123", "siName", reqDetails);
- }
-
- @Test
- public void validateServiceResourceIdInAAIDuplicateNameMultipleTest() throws Exception {
-
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- reqDetails.getModelInfo().setModelVersionId("1234567");
-
- ServiceInstance si = new ServiceInstance();
- si.setServiceInstanceId("siId123");
- si.setModelVersionId("1234567");
-
- ServiceInstance si2 = new ServiceInstance();
- si2.setServiceInstanceId("siId222");
- si2.setModelVersionId("22222");
- si2.setServiceInstanceName("siName222");
-
- ServiceInstances serviceInstances = new ServiceInstances();
- serviceInstances.getServiceInstance().add(si);
- serviceInstances.getServiceInstance().add(si2);
-
- when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName"))
- .thenReturn(Optional.empty());
- when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName")).thenReturn(serviceInstances);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "serviceInstance with name (siName) and multiple combination of model-version-id + service-type + global-customer-id already exists. The name must be unique."));
-
- workflowAction.validateServiceResourceIdInAAI("generatedId123", "siName", reqDetails);
- }
-
- @Test
- public void validateNetworkResourceIdInAAITest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123"))
- .thenReturn(Optional.empty());
- when(bbSetupUtils.existsAAINetworksGloballyByName("name123")).thenReturn(false);
-
- String id = workflowAction.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails,
- workflowResourceIds);
- assertEquals("generatedId123", id);
- }
-
- @Test
- public void validateNetworkResourceIdInAAISameModelCustIdTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- L3Network network = new L3Network();
- network.setNetworkId("id123");
- network.setNetworkName("name123");
- network.setModelCustomizationId("1234567");
- Optional<L3Network> opNetwork = Optional.of(network);
-
- when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")).thenReturn(opNetwork);
-
- String id = workflowAction.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails,
- workflowResourceIds);
- assertEquals("id123", id);
- }
-
- @Test
- public void validateNetworkResourceIdInAAIDuplicateNameTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- L3Network network = new L3Network();
- network.setNetworkId("id123");
- network.setNetworkName("name123");
- network.setModelCustomizationId("9999999");
- Optional<L3Network> opNetwork = Optional.of(network);
-
- when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")).thenReturn(opNetwork);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "l3Network with name (name123), same parent and different customization id (9999999) already exists. The name must be unique."));
-
- workflowAction.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds);
- }
-
- @Test
- public void validateNetworkResourceIdInAAINotGloballyUniqueTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123"))
- .thenReturn(Optional.empty());
- when(bbSetupUtils.existsAAINetworksGloballyByName("name123")).thenReturn(true);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "l3Network with name (name123) id (siId123) and different parent relationship already exists. The name must be unique."));
-
- workflowAction.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds);
- }
-
- @Test
- public void validateVnfResourceIdInAAITest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
- when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(Optional.empty());
- String id = workflowAction.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails,
- workflowResourceIds);
- assertEquals("generatedId123", id);
- }
-
- @Test
- public void validateVnfResourceIdInAAISameModelCustomizationIdTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- GenericVnf vnf = new GenericVnf();
- vnf.setVnfId("id123");
- vnf.setVnfName("vnfName123");
- vnf.setModelCustomizationId("1234567");
- Optional<GenericVnf> opVnf = Optional.of(vnf);
-
- when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf);
- String id = workflowAction.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails,
- workflowResourceIds);
- assertEquals("id123", id);
- }
-
- @Test
- public void validateVnfResourceIdInAAIDiffModelCustomizationIdTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- GenericVnf vnf = new GenericVnf();
- vnf.setVnfId("id123");
- vnf.setVnfName("vnfName123");
- vnf.setModelCustomizationId("9999999");
- Optional<GenericVnf> opVnf = Optional.of(vnf);
-
- when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "generic-vnf with name (vnfName123), same parent and different customization id (9999999) already exists. The name must be unique."));
-
- workflowAction.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails, workflowResourceIds);
- }
-
- @Test
- public void validateVnfResourceIdInAAINotGloballyUniqueTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
-
- GenericVnf vnf = new GenericVnf();
- vnf.setVnfId("id123");
- vnf.setVnfName("vnfName123");
- GenericVnfs genericVnfs = new GenericVnfs();
- genericVnfs.getGenericVnf().add(vnf);
-
- when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(Optional.empty());
- when(bbSetupUtils.getAAIVnfsGloballyByName("vnfName123")).thenReturn(genericVnfs);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "generic-vnf with name (vnfName123) id (id123) and different parent relationship already exists. The name must be unique."));
-
- workflowAction.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails, workflowResourceIds);
- }
-
- @Test
- public void validateVfModuleResourceIdTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setVnfId("vnfId123");
-
- when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(null);
- when(bbSetupUtils.existsAAIVfModuleGloballyByName("name123")).thenReturn(false);
-
- String id = workflowAction.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails,
- workflowResourceIds);
- assertEquals("generatedId123", id);
- }
-
- @Test
- public void validateVfModuleResourceIdSameModelCustIdTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setVnfId("vnfId123");
-
- VfModules vfModules = new VfModules();
- VfModule vfModule = new VfModule();
- vfModule.setVfModuleId("id123");
- vfModule.setVfModuleName("name123");
- vfModule.setModelCustomizationId("1234567");
- vfModules.getVfModule().add(vfModule);
-
- GenericVnf vnf = new GenericVnf();
- vnf.setVnfId("id123");
- vnf.setVnfName("vnfName123");
- vnf.setVfModules(vfModules);
-
- when(bbSetupUtils.getAAIGenericVnf("vnfId123")).thenReturn(vnf);
-
- String id = workflowAction.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails,
- workflowResourceIds);
- assertEquals("id123", id);
- }
-
- @Test
- public void validateVfModuleResourceIdDifferentModelCustIdTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setVnfId("vnfId123");
-
- VfModules vfModules = new VfModules();
- VfModule vfModule = new VfModule();
- vfModule.setVfModuleId("id123");
- vfModule.setVfModuleName("name123");
- vfModule.setModelCustomizationId("9999999");
- vfModules.getVfModule().add(vfModule);
-
- GenericVnf vnf = new GenericVnf();
- vnf.setVnfId("id123");
- vnf.setVnfName("vnfName123");
- vnf.setVfModules(vfModules);
-
- when(bbSetupUtils.getAAIGenericVnf("vnfId123")).thenReturn(vnf);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "vfModule with name (name123), same parent and different customization id (1234567) already exists. The name must be unique."));
-
- workflowAction.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds);
-
- }
-
- @Test
- public void validateVfModuleResourceIdNotGloballyUniqueTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setVnfId("vnfId123");
-
- when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(null);
- when(bbSetupUtils.existsAAIVfModuleGloballyByName("name123")).thenReturn(true);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException
- .expectMessage(containsString("vfModule with name name123 already exists. The name must be unique."));
-
- workflowAction.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds);
- }
-
- @Test
- public void validateVolumeGroupResourceIdInAAITest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setVnfId("vnfId123");
-
- when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123", "name123")).thenReturn(Optional.empty());
- when(bbSetupUtils.existsAAIVolumeGroupGloballyByName("name123")).thenReturn(false);
-
- String id = workflowAction.validateVolumeGroupResourceIdInAAI("generatedId123", "name123", reqDetails,
- workflowResourceIds);
- assertEquals("generatedId123", id);
- }
-
- @Test
- public void validateVolumeGroupResourceIdInAAISameModelCustIdTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
- workflowResourceIds.setVnfId("vnfId123");
-
- VolumeGroup volumeGroup = new VolumeGroup();
- volumeGroup.setVolumeGroupId("id123");
- volumeGroup.setVolumeGroupName("name123");
- volumeGroup.setVfModuleModelCustomizationId("1234567");
-
- Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup);
-
- when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("vnfId123", "name123")).thenReturn(opVolumeGroup);
- String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123",
- reqDetails, workflowResourceIds);
-
- assertEquals("id123", id);
- }
-
- @Test
- public void validateVolumeGroupResourceIdInAAIDifferentModelCustIdTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
- workflowResourceIds.setVnfId("vnfId123");
-
- VolumeGroup volumeGroup = new VolumeGroup();
- volumeGroup.setVolumeGroupId("id123");
- volumeGroup.setVolumeGroupName("name123");
- volumeGroup.setVfModuleModelCustomizationId("9999999");
-
- Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup);
-
- when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("vnfId123", "name123")).thenReturn(opVolumeGroup);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(
- containsString("volumeGroup with name name123 already exists. The name must be unique."));
-
- workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", reqDetails,
- workflowResourceIds);
- }
-
- @Test
- public void validateVolumeGroupResourceIdInAAINotGloballyUniqueTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setVnfId("vnfId123");
-
- when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("vnfId123", "name123")).thenReturn(Optional.empty());
- when(bbSetupUtils.existsAAIVolumeGroupGloballyByName("name123")).thenReturn(true);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(
- containsString("volumeGroup with name name123 already exists. The name must be unique."));
-
- workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", reqDetails,
- workflowResourceIds);
- }
-
- @Test
- public void validateConfigurationResourceIdInAAITest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123"))
- .thenReturn(Optional.empty());
- when(bbSetupUtils.existsAAIConfigurationGloballyByName("name123")).thenReturn(false);
-
- String id = workflowAction.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails,
- workflowResourceIds);
- assertEquals("generatedId123", id);
- }
-
- @Test
- public void validateConfigurationResourceIdInAAISameModelCustIdTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
- configuration.setConfigurationId("id123");
- configuration.setConfigurationName("name123");
- configuration.setModelCustomizationId("1234567");
- Optional<org.onap.aai.domain.yang.Configuration> opConfiguration = Optional.of(configuration);
-
- when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123"))
- .thenReturn(opConfiguration);
- when(bbSetupUtils.existsAAIConfigurationGloballyByName("name123")).thenReturn(false);
-
- String id = workflowAction.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails,
- workflowResourceIds);
- assertEquals("id123", id);
- }
-
- @Test
- public void validateConfigurationResourceIdInAAIDifferentModelCustIdTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
- configuration.setConfigurationId("id123");
- configuration.setConfigurationName("name123");
- configuration.setModelCustomizationId("9999999");
- Optional<org.onap.aai.domain.yang.Configuration> opConfiguration = Optional.of(configuration);
-
- when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123"))
- .thenReturn(opConfiguration);
- when(bbSetupUtils.existsAAIConfigurationGloballyByName("name123")).thenReturn(false);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(containsString(
- "configuration with name (name123), same parent and different customization id (id123) already exists. The name must be unique."));
-
- workflowAction.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails,
- workflowResourceIds);
- }
-
- @Test
- public void validateConfigurationResourceIdInAAINotGloballyUniqueTest() throws Exception {
- RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567");
- WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
- workflowResourceIds.setServiceInstanceId("siId123");
-
- when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123"))
- .thenReturn(Optional.empty());
- when(bbSetupUtils.existsAAIConfigurationGloballyByName("name123")).thenReturn(true);
-
- this.expectedException.expect(DuplicateNameException.class);
- this.expectedException.expectMessage(
- containsString("configuration with name name123 already exists. The name must be unique."));
-
- workflowAction.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails,
- workflowResourceIds);
- }
-
@Test
public void handleRuntimeExceptionTest() {
execution.setVariable("BPMN_javaExpMsg", "test runtime error message");
@@ -3100,6 +2203,32 @@ public class WorkflowActionTest extends BaseTaskTest {
}
}
+ @Test
+ public void foundRelatedTest() {
+ List<Resource> resourceList = new ArrayList<>();
+ resourceList.add(new Resource(WorkflowType.PNF, "model customization id", false));
+ resourceList.add(new Resource(WorkflowType.VNF, "model customization id", false));
+ resourceList.add(new Resource(WorkflowType.NETWORK, "model customization id", false));
+ resourceList.add(new Resource(WorkflowType.NETWORKCOLLECTION, "model customization id", false));
+
+ assertEquals(workflowAction.foundRelated(resourceList), true);
+ }
+
+ @Test
+ public void containsWorkflowTypeTest() {
+ List<Resource> resourceList = new ArrayList<>();
+ resourceList.add(new Resource(WorkflowType.PNF, "resource id", false));
+ resourceList.add(new Resource(WorkflowType.VNF, "model customization id", false));
+ resourceList.add(new Resource(WorkflowType.NETWORK, "model customization id", false));
+ resourceList.add(new Resource(WorkflowType.NETWORKCOLLECTION, "model customization id", false));
+
+ assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.PNF), true);
+ assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.VNF), true);
+ assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.NETWORK), true);
+ assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.NETWORKCOLLECTION), true);
+ assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.CONFIGURATION), false);
+ }
+
private List<Pair<WorkflowType, String>> getExpectedResourceIds() {
List<Pair<WorkflowType, String>> resourceIds = new ArrayList<>();
resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VNF, "testVnfId1"));
@@ -3141,4 +2270,15 @@ public class WorkflowActionTest extends BaseTaskTest {
private String readBpmnRequestFromFile(String fileName) throws IOException {
return new String(Files.readAllBytes(Paths.get("src/test/resources/__files/" + fileName)));
}
+
+ private List<Resource> prepareListWithResources() {
+ List<Resource> resourceList = new ArrayList<>();
+ resourceList.add(new Resource(WorkflowType.SERVICE, "3c40d244-808e-42ca-b09a-256d83d19d0a", false));
+ resourceList.add(new Resource(WorkflowType.VNF, "ab153b6e-c364-44c0-bef6-1f2982117f04", false));
+ resourceList.add(new Resource(WorkflowType.VOLUMEGROUP, "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f", false));
+ resourceList.add(new Resource(WorkflowType.VFMODULE, "72d9d1cd-f46d-447a-abdb-451d6fb05fa8", false));
+ resourceList.add(new Resource(WorkflowType.VFMODULE, "3c40d244-808e-42ca-b09a-256d83d19d0a", false));
+ resourceList.add(new Resource(WorkflowType.VFMODULE, "72d9d1cd-f46d-447a-abdb-451d6fb05fa8", false));
+ return resourceList;
+ }
}