summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INFO.yaml79
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/flowmanipulator/FlowManipulatorListenerRunner.java3
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/ResourceKey.java4
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/WorkflowResourceIds.java18
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java60
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/exceptions/ResourceNotFoundException.java14
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVfModule.java21
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVnf.java18
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VfModuleCDSRequestProvider.java4
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VnfCDSRequestProvider.java4
-rw-r--r--bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java46
-rw-r--r--bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/AbstractVnfCDSRequestProviderTest.java1
-rw-r--r--bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/ConfigureInstanceParamsForVfModuleTest.java134
-rw-r--r--bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/ConfigureInstanceParamsForVnfTest.java114
-rw-r--r--bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/VfModuleCDSRequestProviderTest.java16
-rw-r--r--bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/VnfCDSRequestProviderTest.java3
-rw-r--r--bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.bpmn53
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AllocateSliceSubnet.groovy2
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCommunicationService.groovy4
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateAccessNSSI.groovy10
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy12
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyAccessNSSI.groovy4
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/ModifySliceSubnet.groovy3
-rw-r--r--bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/AllocateSliceSubnet.bpmn6
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/Resource.java10
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java49
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java19
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversal.java2
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtils.java39
-rw-r--r--bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/service/level/ServiceLevelTest.java35
-rw-r--r--bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasksTest.java2
-rw-r--r--bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java138
-rw-r--r--bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversalTest.java81
-rw-r--r--bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtilsTest.java48
-rw-r--r--bpmn/so-bpmn-tasks/src/test/resources/__files/Macro/ServiceMacroCreateMultipleSameModelVnfsAndVfModules.json187
-rw-r--r--common/pom.xml3
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java2
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/validation/UserParamsValidation.java63
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/validation/UserParamsValidationTest.java177
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/Network.json12
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/NetworkCloudConfig.json12
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/NetworkModelCustomizationId.json12
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/NetworkModelVersionId.json12
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/SuccessfulValidation/ServiceAssign.json12
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/test/resources/ServiceInstanceTest/ServiceAssign.json6
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json193
-rw-r--r--pom.xml2
47 files changed, 1519 insertions, 230 deletions
diff --git a/INFO.yaml b/INFO.yaml
index 25ed7eb86e..bc297f931b 100644
--- a/INFO.yaml
+++ b/INFO.yaml
@@ -1,40 +1,4 @@
----
-project: 'so'
-project_creation_date: '2017-01-30'
-lifecycle_state: 'Incubation'
-project_category: ''
-project_lead: &onap_releng_ptl
- name: 'Seshu Kumar'
- email: 'seshu.kumar.m@huawei.com'
- id: 'seshukm'
- company: 'Huawei'
- timezone: 'India/Bangalore'
-primary_contact: *onap_releng_ptl
-issue_tracking:
- type: 'jira'
- url: 'https://jira.onap.org/projects/SO'
- key: 'SO'
-mailing_list:
- type: 'groups.io'
- url: 'lists.onap.org'
- tag: '<[sub-project_name]>'
-realtime_discussion: ''
-meetings:
- - type: 'zoom'
- agenda: 'https://wiki.onap.org/display/DW/Minutes+Of+Meeting'
- url: 'https://wiki.onap.org/display/DW/Service+Orchestrator+Project'
- server: 'n/a'
- channel: 'n/a'
- repeats: 'weekly'
- time: '13:30 UTC'
-repositories:
- - so
- - so-chef-repo
- - so-docker-config
- - so-libs
- - so-so-config
-committers:
- - <<: *onap_releng_ptl
+
- name: 'Chuanyu Chen'
email: 'chenchuanyu@huawei.com'
company: 'Huawei'
@@ -65,39 +29,76 @@ tsc:
changes:
- type: 'removal'
name: 'Tal Liron'
+ link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
+ - type: 'removal'
name: 'Heliu Zhong'
+ link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
+ - type: 'removal'
name: 'Yuanwei Yang'
+ link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
+ - type: 'removal'
name: 'Christophe Closset'
+ link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
+ - type: 'removal'
name: 'Claude Noshpitz'
+ link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
+ - type: 'removal'
name: 'maopeng zhang'
+ link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
+ - type: 'removal'
name: 'Bin Hou'
+ link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
+ - type: 'removal'
name: 'Fu Jinhua'
+ link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
+ - type: 'removal'
name: 'Jie Feng'
+ link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
+ - type: 'removal'
name: 'jackie tian'
+ link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
+ - type: 'removal'
name: 'Deng Hui'
link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
- type: 'addition'
name: 'Marcus Williams'
+ link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
+ - type: 'addition'
name: 'Sanchita Pathak'
link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
- type: 'addition'
name: 'Steve Smokowski'
+ link: 'https://lists.onap.org/g/onap-tsc/message/4320'
+ - type: 'addition'
name: 'Subhash Kumar Singh'
+ link: 'https://lists.onap.org/g/onap-tsc/message/4320'
+ - type: 'addition'
name: 'Lukasz Muszkieta'
link: 'https://lists.onap.org/g/onap-tsc/message/4320'
- type: 'removal'
name: 'Rob Daugherty'
+ link: 'https://lists.onap.org/g/onap-tsc/message/4320'
- type: 'addition'
name: 'Max Benjamin'
- link: 'https://lists.onap.org/g/onap-tsc/message/4981?p=,,,20,0,0,0::Created,,committer,20,2,0,31638681'
+ link: 'https://lists.onap.org/g/onap-tsc/message/4320'
- type: 'removal'
name: 'DeWayne Filppi'
+ link: 'https://wiki.onap.org/display/Meetings/TSC+2020-12-03'
+ - type: 'removal'
name: 'Yan Yang'
+ link: 'https://wiki.onap.org/display/Meetings/TSC+2020-12-03'
+ - type: 'removal'
name: 'Marcus Williams'
+ link: 'https://wiki.onap.org/display/Meetings/TSC+2020-12-03'
+ - type: 'removal'
name: 'Sanchita Pathak'
+ link: 'https://wiki.onap.org/display/Meetings/TSC+2020-12-03'
+ - type: 'removal'
name: 'Subhash Kumar Singh'
+ link: 'https://wiki.onap.org/display/Meetings/TSC+2020-12-03'
- type: 'addition'
name: 'Ramesh Parthasarathy'
link: 'https://wiki.onap.org/display/Meetings/TSC+2020-12-03'
- type: 'removal'
- name: 'Max Benjamin'
+ name: 'Max Benjamin'
+ link: 'https://wiki.onap.org/display/DW/2021+TSC+Decisions'
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/flowmanipulator/FlowManipulatorListenerRunner.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/flowmanipulator/FlowManipulatorListenerRunner.java
index 054cc378ef..c6d92cc9ab 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/flowmanipulator/FlowManipulatorListenerRunner.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/flowmanipulator/FlowManipulatorListenerRunner.java
@@ -60,6 +60,9 @@ public class FlowManipulatorListenerRunner extends ListenerRunner {
int sequenceBeforeFlowManipulator;
do {
sequenceBeforeFlowManipulator = execution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
+ if (sequenceBeforeFlowManipulator >= flowsToExecute.size()) {
+ break;
+ }
ExecuteBuildingBlock currentBB = flowsToExecute.get(execution.getCurrentSequence());
List<PreFlowManipulator> filtered = filterListeners(flowManipulators,
(item -> item.shouldRunFor(currentBB.getBuildingBlock().getBpmnFlowName(),
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/ResourceKey.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/ResourceKey.java
index 30a6e1fe35..641cd35027 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/ResourceKey.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/ResourceKey.java
@@ -34,5 +34,7 @@ public enum ResourceKey {
VPN_ID,
VPN_BONDING_LINK_ID,
INSTANCE_GROUP_ID,
- PNF
+ PNF,
+ VNF_INSTANCE_NAME,
+ VF_MODULE_INSTANCE_NAME
}
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/WorkflowResourceIds.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/WorkflowResourceIds.java
index 508709e12c..5df7c60f74 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/WorkflowResourceIds.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/WorkflowResourceIds.java
@@ -40,6 +40,8 @@ public class WorkflowResourceIds implements Serializable {
private String networkCollectionId;
private String configurationId;
private String instanceGroupId;
+ private String vnfInstanceName;
+ private String vfModuleInstanceName;
public WorkflowResourceIds() {
@@ -139,4 +141,20 @@ public class WorkflowResourceIds implements Serializable {
public void setInstanceGroupId(String instanceGroupId) {
this.instanceGroupId = instanceGroupId;
}
+
+ public String getVnfInstanceName() {
+ return vnfInstanceName;
+ }
+
+ public void setVnfInstanceName(String vnfInstanceName) {
+ this.vnfInstanceName = vnfInstanceName;
+ }
+
+ public String getVfModuleInstanceName() {
+ return vfModuleInstanceName;
+ }
+
+ public void setVfModuleInstanceName(String vfModuleInstanceName) {
+ this.vfModuleInstanceName = vfModuleInstanceName;
+ }
}
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java
index 83d1f5249f..569f6b1c77 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java
@@ -31,6 +31,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
+import org.apache.commons.lang3.StringUtils;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.JavaDelegate;
import org.javatuples.Pair;
@@ -74,6 +75,7 @@ import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
import org.onap.so.bpmn.servicedecomposition.generalobjects.OrchestrationContext;
import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.NoServiceInstanceFoundException;
+import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.ResourceNotFoundException;
import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.ServiceModelNotFoundException;
import org.onap.so.client.exception.ExceptionBuilder;
import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
@@ -258,6 +260,8 @@ public class BBInputSetup implements JavaDelegate {
lookupKeyMap.put(ResourceKey.VOLUME_GROUP_ID, workflowResourceIds.getVolumeGroupId());
lookupKeyMap.put(ResourceKey.CONFIGURATION_ID, workflowResourceIds.getConfigurationId());
lookupKeyMap.put(ResourceKey.INSTANCE_GROUP_ID, workflowResourceIds.getInstanceGroupId());
+ lookupKeyMap.put(ResourceKey.VNF_INSTANCE_NAME, workflowResourceIds.getVnfInstanceName());
+ lookupKeyMap.put(ResourceKey.VF_MODULE_INSTANCE_NAME, workflowResourceIds.getVfModuleInstanceName());
}
protected GeneralBuildingBlock getGBBALaCarteNonService(ExecuteBuildingBlock executeBB,
@@ -1581,7 +1585,13 @@ public class BBInputSetup implements JavaDelegate {
.setBbName(bbName).setServiceInstance(serviceInstance).setLookupKeyMap(lookupKeyMap).build();
if (bbName.contains(VNF) || (bbName.contains(CONTROLLER)
&& (VNF).equalsIgnoreCase(executeBB.getBuildingBlock().getBpmnScope()))) {
- vnfs = findVnfsByKey(key, resources, vnfs);
+ String vnfInstanceName = lookupKeyMap.get(ResourceKey.VNF_INSTANCE_NAME);
+ if (StringUtils.isNotBlank(vnfInstanceName)) {
+ vnfs = findVnfsByInstanceName(vnfInstanceName, resources);
+ } else {
+ vnfs = findVnfsByKey(key, resources);
+ }
+
String vnfId = lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID);
// This stores the vnf id in request db to be retrieved later when
// working on a vf module or volume group
@@ -1611,15 +1621,15 @@ public class BBInputSetup implements JavaDelegate {
.ifPresent(pnfs -> BBInputSetupPnf.populatePnfToServiceInstance(pnfs, pnfId, serviceInstance));
} else if (bbName.contains(VF_MODULE) || bbName.contains(VOLUME_GROUP) || (bbName.contains(CONTROLLER)
&& (VF_MODULE).equalsIgnoreCase(executeBB.getBuildingBlock().getBpmnScope()))) {
- Pair<Vnfs, VfModules> vnfsAndVfModules = getVfModulesAndItsVnfsByKey(key, resources);
- if (vnfsAndVfModules != null) {
- vfModules = vnfsAndVfModules.getValue1();
- vnfs = vnfsAndVfModules.getValue0();
+ String vfModuleInstanceName = lookupKeyMap.get(ResourceKey.VF_MODULE_INSTANCE_NAME);
+ if (StringUtils.isNotBlank(vfModuleInstanceName)) {
+ vfModules = getVfModulesByInstanceName(vfModuleInstanceName, resources);
+ } else {
+ vfModules = getVfModulesByKey(key, resources);
}
+
lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, getVnfId(executeBB, lookupKeyMap));
- if (vnfs == null) {
- throw new Exception("Could not find Vnf to orchestrate VfModule");
- }
+
parameter.setModelInfo(vfModules.getModelInfo());
if (bbName.contains(VOLUME_GROUP)) {
parameter.setResourceId(lookupKeyMap.get(ResourceKey.VOLUME_GROUP_ID));
@@ -1682,25 +1692,45 @@ public class BBInputSetup implements JavaDelegate {
return null;
}
- protected Pair<Vnfs, VfModules> getVfModulesAndItsVnfsByKey(String key, Resources resources) {
+ protected VfModules getVfModulesByInstanceName(String vfModuleInstanceName, Resources resources) {
+ for (Vnfs vnfs : resources.getVnfs()) {
+ for (VfModules vfModules : vnfs.getVfModules()) {
+ if (vfModules.getInstanceName().equals(vfModuleInstanceName)) {
+ return vfModules;
+ }
+ }
+ }
+ throw new ResourceNotFoundException(
+ "Could not find vf-module with instanceName: " + vfModuleInstanceName + " in userparams");
+ }
+
+ protected VfModules getVfModulesByKey(String key, Resources resources) {
for (Vnfs vnfs : resources.getVnfs()) {
for (VfModules vfModules : vnfs.getVfModules()) {
if (vfModules.getModelInfo().getModelCustomizationId().equalsIgnoreCase(key)) {
- return new Pair<Vnfs, VfModules>(vnfs, vfModules);
+ return vfModules;
}
}
}
- return null;
+ throw new ResourceNotFoundException("Could not find vf-module with key: " + key + " in userparams");
+ }
+
+ protected Vnfs findVnfsByInstanceName(String instanceName, Resources resources) {
+ for (Vnfs tempVnfs : resources.getVnfs()) {
+ if (tempVnfs.getInstanceName().equals(instanceName)) {
+ return tempVnfs;
+ }
+ }
+ throw new ResourceNotFoundException("Could not find vnf with instanceName: " + instanceName + " in userparams");
}
- protected Vnfs findVnfsByKey(String key, Resources resources, Vnfs vnfs) {
+ protected Vnfs findVnfsByKey(String key, Resources resources) {
for (Vnfs tempVnfs : resources.getVnfs()) {
if (tempVnfs.getModelInfo().getModelCustomizationId().equalsIgnoreCase(key)) {
- vnfs = tempVnfs;
- break;
+ return tempVnfs;
}
}
- return vnfs;
+ throw new ResourceNotFoundException("Could not find vnf with key: " + key + " in userparams");
}
protected CloudRegion getCloudRegionFromMacroRequest(CloudConfiguration cloudConfiguration, Resources resources) {
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/exceptions/ResourceNotFoundException.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/exceptions/ResourceNotFoundException.java
new file mode 100644
index 0000000000..d8eed9610a
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/exceptions/ResourceNotFoundException.java
@@ -0,0 +1,14 @@
+package org.onap.so.bpmn.servicedecomposition.tasks.exceptions;
+
+public class ResourceNotFoundException extends RuntimeException {
+
+ static final long serialVersionUID = -2741357347054072719L;
+
+ public ResourceNotFoundException() {
+ super();
+ }
+
+ public ResourceNotFoundException(String message) {
+ super(message);
+ }
+}
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVfModule.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVfModule.java
index 6f850fa898..eeaecb9264 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVfModule.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVfModule.java
@@ -21,7 +21,7 @@
package org.onap.so.client.cds;
import com.google.gson.JsonObject;
-import org.onap.so.client.cds.ExtractServiceFromUserParameters;
+import org.apache.commons.lang3.StringUtils;
import org.onap.so.client.exception.PayloadGenerationException;
import org.onap.so.serviceinstancebeans.Service;
import org.onap.so.serviceinstancebeans.VfModules;
@@ -47,12 +47,17 @@ public class ConfigureInstanceParamsForVfModule {
* @throws PayloadGenerationException- If it doesn't able to populate instance parameters from SO payload.
*/
public void populateInstanceParams(JsonObject jsonObject, List<Map<String, Object>> userParamsFromRequest,
- String vnfCustomizationUuid, String vfModuleCustomizationUuid) throws PayloadGenerationException {
+ String vnfCustomizationUuid, String vfModuleCustomizationUuid, String vfModuleInstanceName)
+ throws PayloadGenerationException {
try {
Service service = extractServiceFromUserParameters.getServiceFromRequestUserParams(userParamsFromRequest);
- List<Map<String, String>> instanceParamsList =
- getInstanceParams(service, vnfCustomizationUuid, vfModuleCustomizationUuid);
+ List<Map<String, String>> instanceParamsList;
+ if (StringUtils.isNotBlank(vfModuleInstanceName)) {
+ instanceParamsList = getInstanceParamsByInstanceNames(service, vfModuleInstanceName);
+ } else {
+ instanceParamsList = getInstanceParams(service, vnfCustomizationUuid, vfModuleCustomizationUuid);
+ }
instanceParamsList.stream().flatMap(instanceParamsMap -> instanceParamsMap.entrySet().stream())
.forEachOrdered(entry -> jsonObject.addProperty(entry.getKey(), entry.getValue()));
@@ -61,6 +66,14 @@ public class ConfigureInstanceParamsForVfModule {
}
}
+ private List<Map<String, String>> getInstanceParamsByInstanceNames(Service service, String vfModuleInstanceName)
+ throws PayloadGenerationException {
+ return service.getResources().getVnfs().stream().map(Vnfs::getVfModules).flatMap(List::stream)
+ .filter(vfm -> vfModuleInstanceName.equals(vfm.getInstanceName())).findFirst()
+ .map(VfModules::getInstanceParams).orElseThrow(() -> new PayloadGenerationException(
+ "Could not find vfModule with instanceName: " + vfModuleInstanceName));
+ }
+
private List<Map<String, String>> getInstanceParams(Service service, String vnfCustomizationUuid,
String vfModuleCustomizationUuid) throws PayloadGenerationException {
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVnf.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVnf.java
index 22c9a7bee4..43283ac98b 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVnf.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVnf.java
@@ -21,6 +21,7 @@
package org.onap.so.client.cds;
import com.google.gson.JsonObject;
+import org.apache.commons.lang3.StringUtils;
import org.onap.so.client.exception.PayloadGenerationException;
import org.onap.so.serviceinstancebeans.Service;
import org.onap.so.serviceinstancebeans.Vnfs;
@@ -45,10 +46,16 @@ public class ConfigureInstanceParamsForVnf {
* @throws PayloadGenerationException if it doesn't able to populate instance parameters from SO payload.
*/
public void populateInstanceParams(JsonObject jsonObject, List<Map<String, Object>> userParamsFromRequest,
- String modelCustomizationUuid) throws PayloadGenerationException {
+ String modelCustomizationUuid, String vnfInstanceName) throws PayloadGenerationException {
try {
Service service = extractServiceFromUserParameters.getServiceFromRequestUserParams(userParamsFromRequest);
- List<Map<String, String>> instanceParamsList = getInstanceParamForVnf(service, modelCustomizationUuid);
+
+ List<Map<String, String>> instanceParamsList;
+ if (StringUtils.isNotBlank(vnfInstanceName)) {
+ instanceParamsList = getInstanceParamByVnfInstanceName(service, vnfInstanceName);
+ } else {
+ instanceParamsList = getInstanceParamForVnf(service, modelCustomizationUuid);
+ }
instanceParamsList.stream().flatMap(instanceParamsMap -> instanceParamsMap.entrySet().stream())
.forEachOrdered(entry -> jsonObject.addProperty(entry.getKey(), entry.getValue()));
@@ -57,6 +64,13 @@ public class ConfigureInstanceParamsForVnf {
}
}
+ private List<Map<String, String>> getInstanceParamByVnfInstanceName(Service service, String instanceName)
+ throws PayloadGenerationException {
+ return service.getResources().getVnfs().stream().filter(vnf -> instanceName.equals(vnf.getInstanceName()))
+ .findFirst().map(Vnfs::getInstanceParams).orElseThrow(
+ () -> new PayloadGenerationException("Could not find vnf with instanceName: " + instanceName));
+ }
+
private List<Map<String, String>> getInstanceParamForVnf(Service service, String genericVnfModelCustomizationUuid)
throws PayloadGenerationException {
Optional<Vnfs> foundedVnf = service.getResources().getVnfs().stream()
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VfModuleCDSRequestProvider.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VfModuleCDSRequestProvider.java
index 478b65c349..06ab84a114 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VfModuleCDSRequestProvider.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VfModuleCDSRequestProvider.java
@@ -104,9 +104,11 @@ public class VfModuleCDSRequestProvider implements CDSRequestProvider {
final GeneralBuildingBlock buildingBlock = execution.getGeneralBuildingBlock();
List<Map<String, Object>> userParamsFromRequest =
buildingBlock.getRequestContext().getRequestParameters().getUserParams();
+ String vfModuleInstanceName =
+ execution.getLookupMap().getOrDefault(ResourceKey.VF_MODULE_INSTANCE_NAME, "");
if (userParamsFromRequest != null && userParamsFromRequest.size() != 0) {
configureInstanceParamsForVfModule.populateInstanceParams(vfModuleObject, userParamsFromRequest,
- modelCustomizationUuidForVnf, modelCustomizationUuidForVfModule);
+ modelCustomizationUuidForVnf, modelCustomizationUuidForVfModule, vfModuleInstanceName);
}
} catch (Exception e) {
throw new PayloadGenerationException("Failed to buildPropertyObject for VF-Module", e);
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VnfCDSRequestProvider.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VnfCDSRequestProvider.java
index 6251eb6fad..5f63732458 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VnfCDSRequestProvider.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VnfCDSRequestProvider.java
@@ -23,6 +23,7 @@
package org.onap.so.client.cds;
import com.google.gson.JsonObject;
+import org.apache.commons.lang3.StringUtils;
import org.onap.so.bpmn.common.BuildingBlockExecution;
import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
@@ -93,9 +94,10 @@ public class VnfCDSRequestProvider implements CDSRequestProvider {
final GeneralBuildingBlock buildingBlock = execution.getGeneralBuildingBlock();
List<Map<String, Object>> userParamsFromRequest =
buildingBlock.getRequestContext().getRequestParameters().getUserParams();
+ String vnfInstanceName = execution.getLookupMap().getOrDefault(ResourceKey.VNF_INSTANCE_NAME, "");
if (userParamsFromRequest != null && userParamsFromRequest.size() != 0) {
configureInstanceParamsForVnf.populateInstanceParams(vnfObject, userParamsFromRequest,
- modelCustomizationUuid);
+ modelCustomizationUuid, vnfInstanceName);
}
} catch (Exception e) {
throw new PayloadGenerationException("Failed to buildPropertyObjectForVnf", e);
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java
index 127253a72e..8961c996a8 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java
@@ -131,6 +131,8 @@ import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.onap.so.serviceinstancebeans.VfModules;
+import org.onap.so.serviceinstancebeans.Vnfs;
@RunWith(MockitoJUnitRunner.class)
public class BBInputSetupTest {
@@ -2116,6 +2118,8 @@ public class BBInputSetupTest {
String volumeGroupId = "volumeGroupId";
String configurationId = "configurationId";
String instanceGroupId = "instancegroupId";
+ String vnfInstanceName = "vnfInstanceName";
+ String vfModuleInstanceName = "vfModuleInstanceName";
expected.put(ResourceKey.SERVICE_INSTANCE_ID, serviceInstanceId);
expected.put(ResourceKey.NETWORK_ID, networkId);
@@ -2125,6 +2129,8 @@ public class BBInputSetupTest {
expected.put(ResourceKey.VOLUME_GROUP_ID, volumeGroupId);
expected.put(ResourceKey.CONFIGURATION_ID, configurationId);
expected.put(ResourceKey.INSTANCE_GROUP_ID, instanceGroupId);
+ expected.put(ResourceKey.VNF_INSTANCE_NAME, vnfInstanceName);
+ expected.put(ResourceKey.VF_MODULE_INSTANCE_NAME, vfModuleInstanceName);
WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
workflowResourceIds.setServiceInstanceId(serviceInstanceId);
@@ -2135,6 +2141,8 @@ public class BBInputSetupTest {
workflowResourceIds.setVolumeGroupId(volumeGroupId);
workflowResourceIds.setConfigurationId(configurationId);
workflowResourceIds.setInstanceGroupId(instanceGroupId);
+ workflowResourceIds.setVnfInstanceName(vnfInstanceName);
+ workflowResourceIds.setVfModuleInstanceName(vfModuleInstanceName);
SPY_bbInputSetup.populateLookupKeyMapWithIds(workflowResourceIds, actual);
@@ -2142,6 +2150,44 @@ public class BBInputSetupTest {
}
@Test
+ public void testGetVfModulesByInstanceName() throws IOException {
+ org.onap.so.serviceinstancebeans.Service serviceMacro = mapper.readValue(
+ new File(RESOURCE_PATH + "ServiceMacroVfModules.json"), org.onap.so.serviceinstancebeans.Service.class);
+ Resources resources = serviceMacro.getResources();
+ VfModules expectedVfModule = resources.getVnfs().get(0).getVfModules().get(2);
+ assertEquals(expectedVfModule,
+ SPY_bbInputSetup.getVfModulesByInstanceName("vmxnjr001_AVPN_base_vRE_BV_expansion_002", resources));
+ }
+
+ @Test
+ public void testGetVfModulesByKey() throws IOException {
+ org.onap.so.serviceinstancebeans.Service serviceMacro = mapper.readValue(
+ new File(RESOURCE_PATH + "ServiceMacroVfModules.json"), org.onap.so.serviceinstancebeans.Service.class);
+ Resources resources = serviceMacro.getResources();
+ VfModules expectedVfModule = resources.getVnfs().get(0).getVfModules().get(0);
+ assertEquals(expectedVfModule,
+ SPY_bbInputSetup.getVfModulesByKey("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f", resources));
+ }
+
+ @Test
+ public void testFindVnfsByInstanceName() throws IOException {
+ org.onap.so.serviceinstancebeans.Service serviceMacro = mapper.readValue(
+ new File(RESOURCE_PATH + "ServiceMacroVfModules.json"), org.onap.so.serviceinstancebeans.Service.class);
+ Resources resources = serviceMacro.getResources();
+ Vnfs expectedVnf = resources.getVnfs().get(0);
+ assertEquals(expectedVnf, SPY_bbInputSetup.findVnfsByInstanceName("vmxnjr001", resources));
+ }
+
+ @Test
+ public void testVnfsByKey() throws IOException {
+ org.onap.so.serviceinstancebeans.Service serviceMacro = mapper.readValue(
+ new File(RESOURCE_PATH + "ServiceMacroVfModules.json"), org.onap.so.serviceinstancebeans.Service.class);
+ Resources resources = serviceMacro.getResources();
+ Vnfs expectedVnf = resources.getVnfs().get(0);
+ assertEquals(expectedVnf, SPY_bbInputSetup.findVnfsByKey("ab153b6e-c364-44c0-bef6-1f2982117f04", resources));
+ }
+
+ @Test
public void testGBBMacroNoUserParamsVrfConfiguration() throws Exception {
String resourceId = "123";
String vnfType = "vnfType";
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/AbstractVnfCDSRequestProviderTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/AbstractVnfCDSRequestProviderTest.java
index 06defaa84c..6de1364a47 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/AbstractVnfCDSRequestProviderTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/AbstractVnfCDSRequestProviderTest.java
@@ -82,6 +82,7 @@ public abstract class AbstractVnfCDSRequestProviderTest {
@Before
public void setUp() {
buildingBlockExecution = createBuildingBlockExecution();
+ buildingBlockExecution.setVariable("lookupKeyMap", new HashMap<>());
executeBuildingBlock = new ExecuteBuildingBlock();
}
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/ConfigureInstanceParamsForVfModuleTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/ConfigureInstanceParamsForVfModuleTest.java
index 9baf5dc5bf..0273b9dbf6 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/ConfigureInstanceParamsForVfModuleTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/ConfigureInstanceParamsForVfModuleTest.java
@@ -20,27 +20,27 @@
package org.onap.so.client.cds;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
import com.google.gson.JsonObject;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
-import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
import org.onap.so.serviceinstancebeans.ModelInfo;
import org.onap.so.serviceinstancebeans.Resources;
import org.onap.so.serviceinstancebeans.Service;
import org.onap.so.serviceinstancebeans.VfModules;
import org.onap.so.serviceinstancebeans.Vnfs;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.anyList;
-import static org.mockito.Mockito.doReturn;
-@RunWith(MockitoJUnitRunner.Silent.class)
+@RunWith(MockitoJUnitRunner.class)
public class ConfigureInstanceParamsForVfModuleTest {
@InjectMocks
@@ -49,79 +49,77 @@ public class ConfigureInstanceParamsForVfModuleTest {
@Mock
private ExtractServiceFromUserParameters extractServiceFromUserParameters;
- private static final String TEST_VNF_MODEL_CUSTOMIZATION_UUID = "23ce9ac4-e5dd-11e9-81b4-2a2ae2dbcce4";
- private static final String TEST_VF_MODULE_CUSTOMIZATION_UUID = "23ce9ac4-e5dd-11e9-81b4-2a2ae2dbcce2";
- private static final String TEST_INSTANCE_PARAM_VALUE_1 = "vf-module-1-value";
- private static final String TEST_INSTANCE_PARAM_VALUE_2 = "vf-module-2-value";
- private static final String TEST_INSTANCE_PARAM_KEY_1 = "instance-param-1";
- private static final String TEST_INSTANCE_PARAM_KEY_2 = "instance-param-2";
+ private static final String VNF_CUSTOMIZATION_ID = UUID.randomUUID().toString();
+ private static final String VFMODULE_1_CUSTOMIZATION_ID = UUID.randomUUID().toString();
+ private static final String VFMODULE_2_CUSTOMIZATION_ID = UUID.randomUUID().toString();
+ private static final String VFMODULE_1_INSTANCE_NAME = "vfmodule-instance-1";
+ private static final String VFMODULE_2_INSTANCE_NAME = "vfmodule-instance-2";
+ private static final List<Map<String, String>> VFMODULE_1_INSTANCE_PARAMS =
+ Arrays.asList(Map.of("param-1", "xyz", "param-2", "123"), Map.of("param-3", "CCC"));
+ private static final List<Map<String, String>> VFMODULE_2_INSTANCE_PARAMS =
+ Arrays.asList(Map.of("param-1", "abc", "param-2", "999"), Map.of("param-3", "AAA"));
+
@Test
- public void testInstanceParamsForVfModule() throws Exception {
- // given
- List<Map<String, Object>> userParamsFromRequest = createRequestParameters();
- JsonObject jsonObject = new JsonObject();
- doReturn(getUserParams()).when(extractServiceFromUserParameters).getServiceFromRequestUserParams(anyList());
+ public void testPopulateInstanceParamsByInstanceName() throws Exception {
+ Service service = new Service();
+ Resources resources = new Resources();
+ resources.setVnfs(createVnfs());
+ service.setResources(resources);
- // when
- configureInstanceParamsForVfModule.populateInstanceParams(jsonObject, userParamsFromRequest,
- TEST_VNF_MODEL_CUSTOMIZATION_UUID, TEST_VF_MODULE_CUSTOMIZATION_UUID);
+ when(extractServiceFromUserParameters.getServiceFromRequestUserParams(any())).thenReturn(service);
+ JsonObject jsonObject = new JsonObject();
- // verify
- assertEquals(TEST_INSTANCE_PARAM_VALUE_1, jsonObject.get(TEST_INSTANCE_PARAM_KEY_1).getAsString());
- assertEquals(TEST_INSTANCE_PARAM_VALUE_2, jsonObject.get(TEST_INSTANCE_PARAM_KEY_2).getAsString());
- }
+ configureInstanceParamsForVfModule.populateInstanceParams(jsonObject, new ArrayList<>(), VNF_CUSTOMIZATION_ID,
+ VFMODULE_2_CUSTOMIZATION_ID, VFMODULE_2_INSTANCE_NAME);
- private List<Map<String, Object>> createRequestParameters() {
- List<Map<String, Object>> userParams = new ArrayList<>();
- Map<String, Object> userParamMap = new HashMap<>();
- userParamMap.put("service", getUserParams());
- userParams.add(userParamMap);
- return userParams;
+ assertEquals("abc", jsonObject.get("param-1").getAsString());
+ assertEquals("999", jsonObject.get("param-2").getAsString());
+ assertEquals("AAA", jsonObject.get("param-3").getAsString());
}
- private Service getUserParams() {
+ @Test
+ public void testPopulateInstanceParamsByCustomizationId() throws Exception {
Service service = new Service();
Resources resources = new Resources();
resources.setVnfs(createVnfs());
service.setResources(resources);
- return service;
- }
-
- private List<Vnfs> createVnfs() {
- Vnfs searchedVnf = createVnf();
- List<Vnfs> vnfList = new ArrayList<>();
- vnfList.add(searchedVnf);
- return vnfList;
- }
-
- private Vnfs createVnf() {
- Vnfs vnf = new Vnfs();
- ModelInfo modelInfoForVnf = new ModelInfo();
- modelInfoForVnf.setModelCustomizationId(TEST_VNF_MODEL_CUSTOMIZATION_UUID);
- vnf.setModelInfo(modelInfoForVnf);
-
- VfModules vfModule = new VfModules();
- ModelInfo modelInfoForVfModule = new ModelInfo();
- modelInfoForVfModule.setModelCustomizationId(TEST_VF_MODULE_CUSTOMIZATION_UUID);
-
- vfModule.setModelInfo(modelInfoForVfModule);
-
- // Set instance parameters.
- List<Map<String, String>> instanceParamsListSearchedVfModule = new ArrayList<>();
- Map<String, String> instanceParams = new HashMap<>();
- instanceParams.put("instance-param-1", TEST_INSTANCE_PARAM_VALUE_1);
- instanceParams.put("instance-param-2", TEST_INSTANCE_PARAM_VALUE_2);
-
- instanceParamsListSearchedVfModule.add(instanceParams);
- vfModule.setInstanceParams(instanceParamsListSearchedVfModule);
+ when(extractServiceFromUserParameters.getServiceFromRequestUserParams(any())).thenReturn(service);
+ JsonObject jsonObject = new JsonObject();
- List<VfModules> vfModules = new ArrayList<>();
- vfModules.add(vfModule);
+ // No instance name is passed
+ configureInstanceParamsForVfModule.populateInstanceParams(jsonObject, new ArrayList<>(), VNF_CUSTOMIZATION_ID,
+ VFMODULE_1_CUSTOMIZATION_ID, null);
- vnf.setVfModules(vfModules);
+ assertEquals("xyz", jsonObject.get("param-1").getAsString());
+ assertEquals("123", jsonObject.get("param-2").getAsString());
+ assertEquals("CCC", jsonObject.get("param-3").getAsString());
+ }
- return vnf;
+ private List<Vnfs> createVnfs() {
+ Vnfs vnf1 = new Vnfs();
+ ModelInfo modelInfo = new ModelInfo();
+ modelInfo.setModelCustomizationId(VNF_CUSTOMIZATION_ID);
+ vnf1.setModelInfo(modelInfo);
+
+ VfModules vfModule1 = new VfModules();
+ modelInfo = new ModelInfo();
+ modelInfo.setModelCustomizationId(VFMODULE_1_CUSTOMIZATION_ID);
+ vfModule1.setModelInfo(modelInfo);
+ vfModule1.setInstanceName(VFMODULE_1_INSTANCE_NAME);
+ vfModule1.setInstanceParams(VFMODULE_1_INSTANCE_PARAMS);
+
+ VfModules vfModule2 = new VfModules();
+ modelInfo = new ModelInfo();
+ modelInfo.setModelCustomizationId(VFMODULE_2_CUSTOMIZATION_ID);
+ vfModule2.setModelInfo(modelInfo);
+ vfModule2.setInstanceName(VFMODULE_2_INSTANCE_NAME);
+ vfModule2.setInstanceParams(VFMODULE_2_INSTANCE_PARAMS);
+
+ vnf1.setVfModules(Arrays.asList(vfModule1, vfModule2));
+
+ return Arrays.asList(vnf1);
}
+
}
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/ConfigureInstanceParamsForVnfTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/ConfigureInstanceParamsForVnfTest.java
new file mode 100644
index 0000000000..547129e898
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/ConfigureInstanceParamsForVnfTest.java
@@ -0,0 +1,114 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2021 Bell Canada
+ * ================================================================================
+ * 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.client.cds;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+import com.google.gson.JsonObject;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.so.serviceinstancebeans.ModelInfo;
+import org.onap.so.serviceinstancebeans.Resources;
+import org.onap.so.serviceinstancebeans.Service;
+import org.onap.so.serviceinstancebeans.Vnfs;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ConfigureInstanceParamsForVnfTest {
+
+ @InjectMocks
+ private ConfigureInstanceParamsForVnf configureInstanceParamsForVnf;
+
+ @Mock
+ private ExtractServiceFromUserParameters extractServiceFromUserParameters;
+
+ private static final String VNF_1_CUSTOMIZATION_ID = UUID.randomUUID().toString();
+ private static final String VNF_2_CUSTOMIZATION_ID = UUID.randomUUID().toString();
+ private static final String VNF_1_INSTANCE_NAME = "vnf-instance-1";
+ private static final String VNF_2_INSTANCE_NAME = "vnf-instance-2";
+ private static final List<Map<String, String>> VNF_1_INSTANCE_PARAMS =
+ Arrays.asList(Map.of("param-1", "xyz", "param-2", "123"), Map.of("param-3", "CCC"));
+ private static final List<Map<String, String>> VNF_2_INSTANCE_PARAMS =
+ Arrays.asList(Map.of("param-1", "abc", "param-2", "999"), Map.of("param-3", "AAA"));
+
+
+ @Test
+ public void testPopulateInstanceParamsByInstanceName() throws Exception {
+ Service service = new Service();
+ Resources resources = new Resources();
+ resources.setVnfs(createVnfs());
+ service.setResources(resources);
+ when(extractServiceFromUserParameters.getServiceFromRequestUserParams(any())).thenReturn(service);
+ JsonObject jsonObject = new JsonObject();
+
+ configureInstanceParamsForVnf.populateInstanceParams(jsonObject, new ArrayList<>(), VNF_2_CUSTOMIZATION_ID,
+ VNF_2_INSTANCE_NAME);
+
+ assertEquals("abc", jsonObject.get("param-1").getAsString());
+ assertEquals("999", jsonObject.get("param-2").getAsString());
+ assertEquals("AAA", jsonObject.get("param-3").getAsString());
+ }
+
+ @Test
+ public void testPopulateInstanceParamsByCustomizationId() throws Exception {
+ Service service = new Service();
+ Resources resources = new Resources();
+ resources.setVnfs(createVnfs());
+ service.setResources(resources);
+ when(extractServiceFromUserParameters.getServiceFromRequestUserParams(any())).thenReturn(service);
+ JsonObject jsonObject = new JsonObject();
+
+ // No instance name is passed
+ configureInstanceParamsForVnf.populateInstanceParams(jsonObject, new ArrayList<>(), VNF_1_CUSTOMIZATION_ID,
+ null);
+
+ assertEquals("xyz", jsonObject.get("param-1").getAsString());
+ assertEquals("123", jsonObject.get("param-2").getAsString());
+ assertEquals("CCC", jsonObject.get("param-3").getAsString());
+ }
+
+ private List<Vnfs> createVnfs() {
+ Vnfs vnf1 = new Vnfs();
+ vnf1.setInstanceName(VNF_1_INSTANCE_NAME);
+ ModelInfo modelInfo = new ModelInfo();
+ modelInfo.setModelCustomizationId(VNF_1_CUSTOMIZATION_ID);
+ vnf1.setModelInfo(modelInfo);
+ vnf1.setInstanceParams(VNF_1_INSTANCE_PARAMS);
+
+ Vnfs vnf2 = new Vnfs();
+ modelInfo = new ModelInfo();
+ modelInfo.setModelCustomizationId(VNF_2_CUSTOMIZATION_ID);
+ vnf2.setModelInfo(modelInfo);
+ vnf2.setInstanceName(VNF_2_INSTANCE_NAME);
+ vnf2.setInstanceParams(VNF_2_INSTANCE_PARAMS);
+
+ return Arrays.asList(vnf1, vnf2);
+ }
+
+}
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/VfModuleCDSRequestProviderTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/VfModuleCDSRequestProviderTest.java
index f224ebf21e..f5045b1ea0 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/VfModuleCDSRequestProviderTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/VfModuleCDSRequestProviderTest.java
@@ -22,18 +22,28 @@ package org.onap.so.client.cds;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.JsonObject;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.UUID;
import org.junit.Test;
+import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
-import org.onap.so.client.exception.PayloadGenerationException;
+import org.onap.so.serviceinstancebeans.ModelInfo;
+import org.onap.so.serviceinstancebeans.Resources;
import org.onap.so.serviceinstancebeans.Service;
+import org.onap.so.serviceinstancebeans.VfModules;
+import org.onap.so.serviceinstancebeans.Vnfs;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.*;
@@ -68,7 +78,7 @@ public class VfModuleCDSRequestProviderTest extends AbstractVnfCDSRequestProvide
ResourceKey.VF_MODULE_ID);
doReturn(getUserParams()).when(extractServiceFromUserParameters).getServiceFromRequestUserParams(anyList());
doCallRealMethod().when(configureInstanceParamsForVfModule).populateInstanceParams(any(), any(), anyString(),
- anyString());
+ anyString(), any());
// when
vfModuleCDSRequestProvider.setExecutionObject(buildingBlockExecution);
@@ -105,7 +115,7 @@ public class VfModuleCDSRequestProviderTest extends AbstractVnfCDSRequestProvide
ResourceKey.VF_MODULE_ID);
doReturn(getUserParams()).when(extractServiceFromUserParameters).getServiceFromRequestUserParams(anyList());
doCallRealMethod().when(configureInstanceParamsForVfModule).populateInstanceParams(any(), any(), anyString(),
- anyString());
+ anyString(), any());
vfModuleCDSRequestProvider.setExecutionObject(buildingBlockExecution);
String payload = vfModuleCDSRequestProvider.buildRequestPayload(DEPLOY_ACTION).get();
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/VnfCDSRequestProviderTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/VnfCDSRequestProviderTest.java
index 7aafd900d4..e801c2afab 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/VnfCDSRequestProviderTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/cds/VnfCDSRequestProviderTest.java
@@ -50,8 +50,6 @@ public class VnfCDSRequestProviderTest extends AbstractVnfCDSRequestProviderTest
ResourceKey.SERVICE_INSTANCE_ID);
doReturn(createGenericVnf()).when(extractPojosForBB).extractByKey(buildingBlockExecution,
ResourceKey.GENERIC_VNF_ID);
- doNothing().when(configureInstanceParamsForVnf).populateInstanceParams(any(), any(), anyString());
-
// when
vnfCDSRequestProvider.setExecutionObject(buildingBlockExecution);
String payload = vnfCDSRequestProvider.buildRequestPayload(ASSIGN_ACTION).get();
@@ -81,7 +79,6 @@ public class VnfCDSRequestProviderTest extends AbstractVnfCDSRequestProviderTest
ResourceKey.SERVICE_INSTANCE_ID);
doReturn(createGenericVnf()).when(extractPojosForBB).extractByKey(buildingBlockExecution,
ResourceKey.GENERIC_VNF_ID);
- doNothing().when(configureInstanceParamsForVnf).populateInstanceParams(any(), any(), any());
// when
vnfCDSRequestProvider.setExecutionObject(buildingBlockExecution);
diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.bpmn
index 5fd9701880..6fb7b5b5b4 100644
--- a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.bpmn
+++ b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.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:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.1.2">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.6.0">
<bpmn:process id="WorkflowActionBB" name="WorkflowActionBB" isExecutable="true">
<bpmn:extensionElements>
<camunda:executionListener class="org.onap.so.bpmn.core.plugins.AsyncTaskExecutorListener" event="end" />
@@ -30,7 +30,7 @@
<camunda:in source="rollbackTargetState" target="rollbackTargetState" />
<camunda:out source="rollbackTargetState" target="rollbackTargetState" />
</bpmn:extensionElements>
- <bpmn:incoming>SequenceFlow_0mew9im</bpmn:incoming>
+ <bpmn:incoming>SequenceFlow_0duoleg</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_1hsqed1</bpmn:outgoing>
</bpmn:callActivity>
<bpmn:sequenceFlow id="SequenceFlow_0mqrkxv" sourceRef="Task_SelectBB" targetRef="ServiceTask_0e2p0xs" />
@@ -183,7 +183,7 @@
<bpmn:incoming>SequenceFlow_0mqrkxv</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_0mew9im</bpmn:outgoing>
</bpmn:serviceTask>
- <bpmn:sequenceFlow id="SequenceFlow_0mew9im" sourceRef="ServiceTask_0e2p0xs" targetRef="Call_ExecuteBB" />
+ <bpmn:sequenceFlow id="SequenceFlow_0mew9im" sourceRef="ServiceTask_0e2p0xs" targetRef="ExclusiveGateway_10j89d1" />
<bpmn:sequenceFlow id="SequenceFlow_0kf5sen" name="yes" sourceRef="ExclusiveGateway_isTopLevelFlowC" targetRef="Task_UpdateRequestComplete" />
<bpmn:sequenceFlow id="SequenceFlow_1tfizxf" sourceRef="Task_PreValidateWorkflow" targetRef="Task_SelectBB" />
<bpmn:serviceTask id="Task_PreValidateWorkflow" name="PreValidate Workflow" camunda:expression="${WorkflowValidatorRunner.preValidate(execution.getVariable(&#34;requestAction&#34;), execution)}">
@@ -193,6 +193,7 @@
</bpmn:serviceTask>
<bpmn:serviceTask id="ServiceTask_0lbkcyp" name="Post Processing Execute BB" camunda:expression="${WorkflowActionBBTasks.postProcessingExecuteBB(execution)}">
<bpmn:incoming>SequenceFlow_1hsqed1</bpmn:incoming>
+ <bpmn:incoming>SequenceFlow_1knplug</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_1fftixk</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:sequenceFlow id="SequenceFlow_1hsqed1" sourceRef="Call_ExecuteBB" targetRef="ServiceTask_0lbkcyp" />
@@ -211,6 +212,15 @@
<bpmn:incoming>SequenceFlow_0ilo6lo</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="SequenceFlow_0ilo6lo" name="yes" sourceRef="ExclusiveGateway_1dez26n" targetRef="EndEvent_12f15tu" />
+ <bpmn:exclusiveGateway id="ExclusiveGateway_10j89d1" default="SequenceFlow_0duoleg">
+ <bpmn:incoming>SequenceFlow_0mew9im</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_0duoleg</bpmn:outgoing>
+ <bpmn:outgoing>SequenceFlow_1knplug</bpmn:outgoing>
+ </bpmn:exclusiveGateway>
+ <bpmn:sequenceFlow id="SequenceFlow_0duoleg" sourceRef="ExclusiveGateway_10j89d1" targetRef="Call_ExecuteBB" />
+ <bpmn:sequenceFlow id="SequenceFlow_1knplug" name="completed = true" sourceRef="ExclusiveGateway_10j89d1" targetRef="ServiceTask_0lbkcyp">
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("completed")==true}</bpmn:conditionExpression>
+ </bpmn:sequenceFlow>
</bpmn:process>
<bpmn:error id="Error_0kd2o2a" name="java.lang.Exception" errorCode="java.lang.Exception" />
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
@@ -235,11 +245,11 @@
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="CallActivity_03m7z4y_di" bpmnElement="Call_ExecuteBB">
- <dc:Bounds x="1150" y="356" width="100" height="80" />
+ <dc:Bounds x="1200" y="356" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_0mqrkxv_di" bpmnElement="SequenceFlow_0mqrkxv">
<di:waypoint x="929" y="396" />
- <di:waypoint x="990" y="396" />
+ <di:waypoint x="960" y="396" />
<bpmndi:BPMNLabel>
<dc:Bounds x="324.5" y="105" width="90" height="0" />
</bpmndi:BPMNLabel>
@@ -531,11 +541,11 @@
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="ServiceTask_0e2p0xs_di" bpmnElement="ServiceTask_0e2p0xs">
- <dc:Bounds x="990" y="356" width="100" height="80" />
+ <dc:Bounds x="960" y="356" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_0mew9im_di" bpmnElement="SequenceFlow_0mew9im">
- <di:waypoint x="1090" y="396" />
- <di:waypoint x="1150" y="396" />
+ <di:waypoint x="1060" y="396" />
+ <di:waypoint x="1105" y="396" />
<bpmndi:BPMNLabel>
<dc:Bounds x="530" y="99" width="0" height="12" />
</bpmndi:BPMNLabel>
@@ -561,17 +571,17 @@
<dc:Bounds x="670" y="356" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="ServiceTask_0lbkcyp_di" bpmnElement="ServiceTask_0lbkcyp">
- <dc:Bounds x="1325" y="356" width="100" height="80" />
+ <dc:Bounds x="1350" y="356" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_1hsqed1_di" bpmnElement="SequenceFlow_1hsqed1">
- <di:waypoint x="1250" y="396" />
- <di:waypoint x="1325" y="396" />
+ <di:waypoint x="1300" y="396" />
+ <di:waypoint x="1350" y="396" />
<bpmndi:BPMNLabel>
<dc:Bounds x="697.5" y="99" width="0" height="12" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_1fftixk_di" bpmnElement="SequenceFlow_1fftixk">
- <di:waypoint x="1425" y="396" />
+ <di:waypoint x="1450" y="396" />
<di:waypoint x="1501" y="396" />
<bpmndi:BPMNLabel>
<dc:Bounds x="873" y="99" width="0" height="12" />
@@ -618,6 +628,25 @@
<dc:Bounds x="727" y="173" width="18" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="ExclusiveGateway_10j89d1_di" bpmnElement="ExclusiveGateway_10j89d1" isMarkerVisible="true">
+ <dc:Bounds x="1105" y="371" width="50" height="50" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="1100" y="428" width="60" height="14" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_0duoleg_di" bpmnElement="SequenceFlow_0duoleg">
+ <di:waypoint x="1155" y="396" />
+ <di:waypoint x="1200" y="396" />
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_1knplug_di" bpmnElement="SequenceFlow_1knplug">
+ <di:waypoint x="1130" y="371" />
+ <di:waypoint x="1130" y="330" />
+ <di:waypoint x="1400" y="330" />
+ <di:waypoint x="1400" y="356" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="1224" y="312" width="83" height="14" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AllocateSliceSubnet.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AllocateSliceSubnet.groovy
index 78cafa7be5..1e65c1a9dd 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AllocateSliceSubnet.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AllocateSliceSubnet.groovy
@@ -114,7 +114,7 @@ class AllocateSliceSubnet extends AbstractServiceTaskProcessor {
exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
} else
{
- execution.setVariable("networkType", networkType.toUpperCase())
+ execution.setVariable("networkType", networkType.toLowerCase())
}
//requestParameters, subscriptionServiceType is 5G
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCommunicationService.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCommunicationService.groovy
index bb6fe212b3..c7302d001c 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCommunicationService.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCommunicationService.groovy
@@ -395,6 +395,10 @@ class CreateCommunicationService extends AbstractServiceTaskProcessor {
e2eInputMap.put("dLThptPerSlice", dLThptPerSlice)
e2eInputMap.put("uLThptPerSlice", uLThptPerSlice)
e2eInputMap.put("maxNumberofConns", maxNumberofConns)
+ //TODO temp solution - service to slice profile mapping
+ e2eInputMap.put("expDataRateDL", dLThptPerSlice)
+ e2eInputMap.put("expDataRateUL", uLThptPerSlice)
+ e2eInputMap.put("maxNumberofPDUSession", maxNumberofConns)
execution.setVariable("e2eInputMap", e2eInputMap)
execution.setVariable("e2eServiceType", e2eServiceDecomposition.getServiceType())
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 f3fca050a2..a4d503a86c 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
@@ -565,7 +565,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
List<String> snssaiList = execution.getVariable("snssaiList")
String snssai = snssaiList.get(0)
//ANServiceInstance.setEnvironmentContext(snssai)
- ANServiceInstance.setEnvironmentContext("an") //Network Type
+ ANServiceInstance.setEnvironmentContext(execution.getVariable("networkType")) //Network Type
ANServiceInstance.setWorkloadContext("AN") //domain Type
logger.debug("completed AN service instance build "+ ANServiceInstance.toString())
@@ -631,7 +631,8 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
ANServiceInstance.setServiceRole(serviceRole)
List<String> snssaiList = execution.getVariable("snssaiList")
String snssai = snssaiList.get(0)
- ANServiceInstance.setEnvironmentContext(snssai)
+ //ANServiceInstance.setEnvironmentContext(snssai)
+ ANServiceInstance.setEnvironmentContext(execution.getVariable("networkType"))
String modelInvariantUuid = execution.getVariable("modelInvariantUuid")
String modelUuid = execution.getVariable("modelUuid")
ANServiceInstance.setModelInvariantId(modelInvariantUuid)
@@ -651,7 +652,8 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
ANNFServiceInstance.setServiceRole(serviceRole)
snssaiList = execution.getVariable("snssaiList")
snssai = snssaiList.get(0)
- ANNFServiceInstance.setEnvironmentContext(snssai)
+ //ANNFServiceInstance.setEnvironmentContext(snssai)
+ ANNFServiceInstance.setEnvironmentContext(execution.getVariable("networkType"))
ANNFServiceInstance.setModelInvariantId(execution.getVariable("ANNF_modelInvariantUuid"))
ANNFServiceInstance.setModelVersionId(execution.getVariable("ANNF_modelUuid"))
ANNFServiceInstance.setWorkloadContext("AN_NF")
@@ -923,7 +925,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
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'Z'", TimeZone.getDefault()))
+ 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("originator-id", "testing")
commonHeader.addProperty("request-id", requestId)
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 e4281045bd..0d64d7811b 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
@@ -127,6 +127,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
String serviceStatus = "deactivated"
String modelInvariantUuid = sliceParams.getNSTInfo().invariantUUID
String modelUuid = sliceParams.getNSTInfo().UUID
+ String serviceFunction = sliceParams.serviceProfile.get("resourceSharingLevel")
sliceParams.setSuggestNsiId(sliceInstanceId)
sliceParams.setSuggestNsiName(sliceInstanceName)
@@ -144,6 +145,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
nsi.setModelVersionId(modelUuid)
nsi.setServiceInstanceLocationId(serviceInstanceLocationid)
nsi.setServiceRole(serviceRole)
+ nsi.setServiceFunction(serviceFunction)
String msg
try {
@@ -263,7 +265,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
- String sliceProfileName = "an_" + sliceParams.serviceName
+ String sliceProfileName = "sliceprofile_an_" + sliceParams.serviceName
// create slice profile
ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
@@ -401,6 +403,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
allocateAnNssi.nssiId = sliceTaskInfo.suggestNssiId
allocateAnNssi.nssiName = "nssi_an" + execution.getVariable("sliceServiceInstanceName")
+ allocateAnNssi.scriptName = sliceTaskInfo.getScriptName()
NsiInfo nsiInfo = new NsiInfo()
nsiInfo.nsiId = sliceParams.suggestNsiId
nsiInfo.nsiName = sliceParams.suggestNsiName
@@ -458,7 +461,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
- String sliceProfileName = "cn_"+sliceParams.serviceName
+ String sliceProfileName = "sliceprofile_cn_"+sliceParams.serviceName
// create slice profile
ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
@@ -544,6 +547,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
allocateCnNssi.nssiName = "nssi_cn" + execution.getVariable("sliceServiceInstanceName")
allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
allocateCnNssi.sliceProfile.sliceProfileId = sliceTaskInfo.sliceInstanceId
+ allocateCnNssi.scriptName = sliceTaskInfo.getScriptName()
NsiInfo nsiInfo = new NsiInfo()
nsiInfo.nsiId = sliceParams.suggestNsiId
@@ -602,7 +606,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
String serviceInstanceId = UUID.randomUUID().toString()
sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
- String sliceProfileName = "tn_" + sliceParams.serviceName
+ String sliceProfileName = "sliceprofile_tn_" + sliceParams.serviceName
//execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
// create slice profile
@@ -671,6 +675,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
allocateTnNssi.setNssiId(sliceTaskInfo.suggestNssiId)
+ allocateTnNssi.scriptName = sliceTaskInfo.getScriptName()
//todo: AllocateTnNssi
//todo: endPointId -> set into tn
List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
@@ -943,6 +948,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
+ rspi.setServiceFunction(sliceTaskInfo.sliceProfile.getResourceSharingLevel())
//timestamp format YYYY-MM-DD hh:mm:ss
rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyAccessNSSI.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyAccessNSSI.groovy
index 8859af25f6..f6be861bde 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyAccessNSSI.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyAccessNSSI.groovy
@@ -388,12 +388,12 @@ class DoModifyAccessNSSI extends AbstractServiceTaskProcessor {
Optional<org.onap.aai.domain.yang.LogicalLink> resource = wrapper01.asBean(org.onap.aai.domain.yang.LogicalLink.class)
if (resource.isPresent()) {
org.onap.aai.domain.yang.LogicalLink logicalLinkInstance = resource.get()
- if(domainType.equalsIgnoreCase("TN-FH"))
+ if(domainType.equalsIgnoreCase("TN_FH"))
{
execution.setVariable("tranportEp_ID_RU",logicalLinkInstance.getLinkName())
execution.setVariable("tranportEp_ID_DUIN",logicalLinkInstance.getLinkName2())
}
- else if(domainType.equalsIgnoreCase("TN-MH"))
+ else if(domainType.equalsIgnoreCase("TN_MH"))
{
execution.setVariable("tranportEp_ID_DUEG",logicalLinkInstance.getLinkName())
execution.setVariable("tranportEp_ID_CUIN",logicalLinkInstance.getLinkName2())
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/ModifySliceSubnet.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/ModifySliceSubnet.groovy
index 7e505d1912..146ceddab4 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/ModifySliceSubnet.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/ModifySliceSubnet.groovy
@@ -142,7 +142,8 @@ class ModifySliceSubnet extends AbstractServiceTaskProcessor {
ResourceOperationStatus initStatus = new ResourceOperationStatus()
initStatus.setServiceId(nsiId)
initStatus.setOperationId(jobId)
- initStatus.setResourceTemplateUUID(modelUuid)
+ //initStatus.setResourceTemplateUUID(modelUuid)
+ initStatus.setResourceInstanceID(nssiId)
initStatus.setOperType("Modify")
requestDBUtil.prepareInitResourceOperationStatus(execution, initStatus)
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/AllocateSliceSubnet.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/AllocateSliceSubnet.bpmn
index 4012467df9..bfc8ccacb2 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/AllocateSliceSubnet.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/AllocateSliceSubnet.bpmn
@@ -55,13 +55,13 @@ nss.sendSyncResponse(execution)</bpmn:script>
<bpmn:sequenceFlow id="Flow_0ayd6dj" sourceRef="Activity_0qlstj2" targetRef="Activity_1usi32q" />
<bpmn:sequenceFlow id="Flow_0m5n6md" sourceRef="Activity_1usi32q" targetRef="Gateway_15a04ct" />
<bpmn:sequenceFlow id="Flow_1fij4ds" name="Is CN ?" sourceRef="Gateway_15a04ct" targetRef="CallDoAllocateCoreNSSI">
- <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{execution.getVariable("networkType") == "CN"}</bpmn:conditionExpression>
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{execution.getVariable("networkType") == "cn"}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_0g7721r" name="Is TN ?" sourceRef="Gateway_15a04ct" targetRef="CallDoAllocateTransportNSSI">
- <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{execution.getVariable("networkType") == "TN"}</bpmn:conditionExpression>
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{execution.getVariable("networkType") == "tn"}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_1kk0exp" name="Is AN ?" sourceRef="Gateway_15a04ct" targetRef="CallDoAllocateAccessNSSI">
- <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{execution.getVariable("networkType") == "AN"}</bpmn:conditionExpression>
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{execution.getVariable("networkType") == "an"}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_09b50tn" sourceRef="CallDoAllocateAccessNSSI" targetRef="Event_18u424w" />
<bpmn:callActivity id="CallDoAllocateAccessNSSI" name="Call ANAllocateNSSI" calledElement="DoAllocateAccessNSSI">
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/Resource.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/Resource.java
index 0d2844d08b..99cff932c5 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/Resource.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/Resource.java
@@ -23,7 +23,6 @@
package org.onap.so.bpmn.infrastructure.workflow.tasks;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
@@ -37,6 +36,7 @@ public class Resource {
private String vnfCustomizationId;
private String vfModuleCustomizationId;
private String cvnfModuleCustomizationId;
+ private String instanceName;
private int processingPriority;
private Resource parent;
private List<Resource> children;
@@ -121,6 +121,14 @@ public class Resource {
this.cvnfModuleCustomizationId = cvnfModuleCustomizationId;
}
+ public String getInstanceName() {
+ return instanceName;
+ }
+
+ public void setInstanceName(String instanceName) {
+ this.instanceName = instanceName;
+ }
+
public int getProcessingPriority() {
return processingPriority == 0 ? (isBaseVfModule() ? Integer.MIN_VALUE + 1 : 0) : processingPriority;
}
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 ce775af476..e49aed8b25 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
@@ -43,14 +43,18 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import org.apache.commons.lang3.SerializationUtils;
+import org.apache.commons.lang3.StringUtils;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.javatuples.Pair;
import org.onap.aai.domain.yang.Vnfc;
@@ -666,11 +670,12 @@ public class WorkflowAction {
for (Pair<WorkflowType, String> pair : aaiResourceIds) {
logger.debug("{}, {}", pair.getValue0(), pair.getValue1());
}
-
+ Map<Resource, String> resourceInstanceIds = new HashMap<>();
Arrays.stream(WorkflowType.values()).filter(type -> !type.equals(WorkflowType.SERVICE))
.forEach(type -> resourceList.stream().filter(resource -> type.equals(resource.getResourceType()))
- .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource.getResourceId(),
- retrieveAAIResourceId(aaiResourceIds, type), null, serviceInstanceId)));
+ .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource,
+ retrieveAAIResourceId(aaiResourceIds, type), null, serviceInstanceId,
+ resourceInstanceIds)));
}
private String retrieveAAIResourceId(List<Pair<WorkflowType, String>> aaiResourceIds, WorkflowType resource) {
@@ -687,27 +692,45 @@ public class WorkflowAction {
private void generateResourceIds(List<ExecuteBuildingBlock> flowsToExecute, List<Resource> resourceList,
String serviceInstanceId) {
+ Map<Resource, String> resourceInstanceIds = new HashMap<>();
Arrays.stream(WorkflowType.values()).filter(type -> !type.equals(WorkflowType.SERVICE))
.forEach(type -> resourceList.stream().filter(resource -> type.equals(resource.getResourceType()))
- .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource.getResourceId(),
- null, resource.getVirtualLinkKey(), serviceInstanceId)));
+ .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource, null,
+ resource.getVirtualLinkKey(), serviceInstanceId, resourceInstanceIds)));
}
protected void updateWorkflowResourceIds(List<ExecuteBuildingBlock> flowsToExecute, WorkflowType resourceType,
- String key, String id, String virtualLinkKey, String serviceInstanceId) {
+ Resource resource, String id, String virtualLinkKey, String serviceInstanceId,
+ Map<Resource, String> resourceInstanceIds) {
+ String key = resource.getResourceId();
String resourceId = id;
if (resourceId == null) {
resourceId = UUID.randomUUID().toString();
}
+ resourceInstanceIds.put(resource, resourceId);
+ Set<String> assignedFlows = new LinkedHashSet<>();
for (ExecuteBuildingBlock ebb : flowsToExecute) {
- if (key != null && key.equalsIgnoreCase(ebb.getBuildingBlock().getKey()) && (ebb.getBuildingBlock()
- .getBpmnFlowName().contains(resourceType.toString())
- || (ebb.getBuildingBlock().getBpmnFlowName().contains(CONTROLLER)
- && ebb.getBuildingBlock().getBpmnScope().equalsIgnoreCase(resourceType.toString())))) {
+ String resourceTypeStr = resourceType.toString();
+ String flowName = ebb.getBuildingBlock().getBpmnFlowName();
+ String scope = StringUtils.defaultString(ebb.getBuildingBlock().getBpmnScope());
+ String action = StringUtils.defaultString(ebb.getBuildingBlock().getBpmnAction());
+
+ if (key != null && key.equalsIgnoreCase(ebb.getBuildingBlock().getKey())
+ && isFlowAssignable(assignedFlows, ebb, resourceType, flowName + action)
+ && (flowName.contains(resourceTypeStr)
+ || (flowName.contains(CONTROLLER) && resourceTypeStr.equalsIgnoreCase(scope)))) {
WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
workflowResourceIds.setServiceInstanceId(serviceInstanceId);
+ Resource parent = resource.getParent();
+ if (parent != null && resourceInstanceIds.containsKey(parent)) {
+ WorkflowResourceIdsUtils.setResourceIdByWorkflowType(workflowResourceIds, parent.getResourceType(),
+ resourceInstanceIds.get(parent));
+ }
+ WorkflowResourceIdsUtils.setInstanceNameByWorkflowType(workflowResourceIds, resourceType,
+ resource.getInstanceName());
WorkflowResourceIdsUtils.setResourceIdByWorkflowType(workflowResourceIds, resourceType, resourceId);
ebb.setWorkflowResourceIds(workflowResourceIds);
+ assignedFlows.add(flowName + action);
}
if (virtualLinkKey != null && ebb.getBuildingBlock().isVirtualLink()
&& virtualLinkKey.equalsIgnoreCase(ebb.getBuildingBlock().getVirtualLinkKey())) {
@@ -719,6 +742,12 @@ public class WorkflowAction {
}
}
+ private boolean isFlowAssignable(Set<String> assignedFlows, ExecuteBuildingBlock ebb, WorkflowType resourceType,
+ String assignedFlowName) {
+ String id = WorkflowResourceIdsUtils.getResourceIdByWorkflowType(ebb.getWorkflowResourceIds(), resourceType);
+ return !assignedFlows.contains(assignedFlowName) && id.isEmpty();
+ }
+
protected WorkflowResourceIds populateResourceIdsFromApiHandler(DelegateExecution execution) {
return WorkflowResourceIdsUtils.getWorkflowResourceIdsFromExecution(execution);
}
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java
index cd151bafea..b76cf1eb5f 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java
@@ -111,13 +111,15 @@ public class WorkflowActionBBTasks {
}
int currentSequence = (int) execution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
- ExecuteBuildingBlock ebb = flowsToExecute.get(currentSequence);
-
- execution.setVariable("buildingBlock", ebb);
- currentSequence++;
- execution.setVariable(COMPLETED, currentSequence >= flowsToExecute.size());
- execution.setVariable(BBConstants.G_CURRENT_SEQUENCE, currentSequence);
-
+ boolean completed = false;
+ if (currentSequence < flowsToExecute.size()) {
+ ExecuteBuildingBlock ebb = flowsToExecute.get(currentSequence);
+ execution.setVariable("buildingBlock", ebb);
+ execution.setVariable(BBConstants.G_CURRENT_SEQUENCE, currentSequence + 1);
+ } else {
+ completed = true;
+ }
+ execution.setVariable(COMPLETED, completed);
} catch (Exception e) {
workflowAction.buildAndThrowException(execution, "Internal Error occured during selectBB", e);
}
@@ -425,6 +427,9 @@ public class WorkflowActionBBTasks {
final boolean aLaCarte = (boolean) execution.getVariable(BBConstants.G_ALACARTE);
int currentSequence = (int) execution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
logger.debug("Current Sequence: {}", currentSequence);
+ if (currentSequence >= flowsToExecute.size()) {
+ execution.setVariable(COMPLETED, true);
+ }
ExecuteBuildingBlock ebb = flowsToExecute.get(currentSequence - 1);
String bbFlowName = ebb.getBuildingBlock().getBpmnFlowName();
if ("ActivateVfModuleBB".equalsIgnoreCase(bbFlowName) && aLaCarte
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversal.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversal.java
index 1f932743ca..c383b4a73a 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversal.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversal.java
@@ -114,6 +114,7 @@ public class UserParamsServiceTraversal {
Resource vnfResource = new Resource(WorkflowType.VNF, vnf.getModelInfo().getModelCustomizationId(), false,
serviceResource);
vnfResource.setProcessingPriority(vnf.getProcessingPriority());
+ vnfResource.setInstanceName(vnf.getInstanceName());
resourceList.add(vnfResource);
setResourceListForVfModules(execution, resourceList, vnfResource, validate, vnf);
}
@@ -170,6 +171,7 @@ public class UserParamsServiceTraversal {
resource.setProcessingPriority(vfModule.getProcessingPriority());
resource.setBaseVfModule(vfModuleCustomization.getVfModule().getIsBase() != null
&& vfModuleCustomization.getVfModule().getIsBase());
+ resource.setInstanceName(vfModule.getInstanceName());
resourceList.add(resource);
return resource;
}
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtils.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtils.java
index d16eac147e..9cabf6665c 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtils.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtils.java
@@ -20,6 +20,7 @@
package org.onap.so.bpmn.infrastructure.workflow.tasks.utils;
+import org.apache.commons.lang3.StringUtils;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowType;
import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
@@ -63,6 +64,42 @@ public final class WorkflowResourceIdsUtils {
}
}
+ public static void setInstanceNameByWorkflowType(WorkflowResourceIds workflowResourceIds, WorkflowType resourceType,
+ String instanceName) {
+ if (resourceType == WorkflowType.VNF) {
+ workflowResourceIds.setVnfInstanceName(instanceName);
+ } else if (resourceType == WorkflowType.VFMODULE) {
+ workflowResourceIds.setVfModuleInstanceName(instanceName);
+ }
+ }
+
+ public static String getResourceIdByWorkflowType(WorkflowResourceIds workflowResourceIds,
+ WorkflowType resourceType) {
+ switch (resourceType) {
+ case SERVICE:
+ return StringUtils.defaultString(workflowResourceIds.getServiceInstanceId());
+ case VNF:
+ return StringUtils.defaultString(workflowResourceIds.getVnfId());
+ case PNF:
+ return StringUtils.defaultString(workflowResourceIds.getPnfId());
+ case VFMODULE:
+ return StringUtils.defaultString(workflowResourceIds.getVfModuleId());
+ case VOLUMEGROUP:
+ return StringUtils.defaultString(workflowResourceIds.getVolumeGroupId());
+ case NETWORK:
+ return StringUtils.defaultString(workflowResourceIds.getNetworkId());
+ case NETWORKCOLLECTION:
+ return StringUtils.defaultString(workflowResourceIds.getNetworkCollectionId());
+ case CONFIGURATION:
+ return StringUtils.defaultString(workflowResourceIds.getConfigurationId());
+ case INSTANCE_GROUP:
+ return StringUtils.defaultString(workflowResourceIds.getInstanceGroupId());
+ default:
+ return "";
+ }
+ }
+
+
public static WorkflowResourceIds getWorkflowResourceIdsFromExecution(DelegateExecution execution) {
WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
workflowResourceIds.setServiceInstanceId((String) execution.getVariable("serviceInstanceId"));
@@ -71,6 +108,8 @@ public final class WorkflowResourceIdsUtils {
workflowResourceIds.setVnfId((String) execution.getVariable("vnfId"));
workflowResourceIds.setVolumeGroupId((String) execution.getVariable("volumeGroupId"));
workflowResourceIds.setInstanceGroupId((String) execution.getVariable("instanceGroupId"));
+ workflowResourceIds.setVnfInstanceName((String) execution.getVariable("vnfInstanceName"));
+ workflowResourceIds.setVfModuleInstanceName((String) execution.getVariable("vfModuleInstanceName"));
return workflowResourceIds;
}
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/service/level/ServiceLevelTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/service/level/ServiceLevelTest.java
index fb15ffa2b3..f22932b988 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/service/level/ServiceLevelTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/service/level/ServiceLevelTest.java
@@ -25,7 +25,9 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
@@ -37,6 +39,8 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.onap.so.bpmn.infrastructure.service.level.impl.ServiceLevelConstants;
import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.so.db.catalog.beans.Workflow;
+import org.onap.so.db.catalog.client.CatalogDbClient;
@RunWith(MockitoJUnitRunner.class)
public class ServiceLevelTest {
@@ -44,11 +48,15 @@ public class ServiceLevelTest {
private static final String EXECUTION_KEY_PNF_NAME_LIST = "pnfNameList";
private static final String EXECUTION_KEY_PNF_COUNTER = "pnfCounter";
private static final String PARAM_NAME = "param1";
- private static final String SCOPE = "scope1";
private static final String PNF_NAME = "pnfName1";
+ private static final String OPERATION_NAME = ServiceLevelConstants.HEALTH_CHECK_OPERATION;
+ private static final String SCOPE = ServiceLevelConstants.PNF;
+ private static final String WORKFLOW_NAME = "workflowTestName";
@Mock
private ExceptionBuilder exceptionBuilderMock;
+ @Mock
+ private CatalogDbClient catalogDbClientMock;
@InjectMocks
private ServiceLevel testedObject;
@@ -60,6 +68,31 @@ public class ServiceLevelTest {
}
@Test
+ public void fetchWorkflowUsingScope_catalogDBReturnsEmpty() {
+ // given
+ when(catalogDbClientMock.findWorkflowByOperationName(OPERATION_NAME)).thenReturn(Collections.emptyList());
+ // when
+ String workflowResult = testedObject.fetchWorkflowUsingScope(SCOPE, OPERATION_NAME);
+ // then
+ assertThat(workflowResult).isEqualTo("GenericPnfHealthCheck");
+ }
+
+ @Test
+ public void fetchWorkflowUsingScope_catalogDBReturnsNotEmpty() {
+ // given
+ Workflow workflow = new Workflow();
+ workflow.setResourceTarget(SCOPE);
+ workflow.setName(WORKFLOW_NAME);
+ List<Workflow> workflowList = new ArrayList<>();
+ workflowList.add(workflow);
+ when(catalogDbClientMock.findWorkflowByOperationName(OPERATION_NAME)).thenReturn(workflowList);
+ // when
+ String workflowResult = testedObject.fetchWorkflowUsingScope(SCOPE, OPERATION_NAME);
+ // then
+ assertThat(workflowResult).isEqualTo(WORKFLOW_NAME);
+ }
+
+ @Test
public void pnfCounterExecution_success() {
// given
execution.setVariable(EXECUTION_KEY_PNF_NAME_LIST, createPnfNameList());
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasksTest.java
index 5cd3055b5f..cbb746d514 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasksTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasksTest.java
@@ -149,7 +149,7 @@ public class WorkflowActionBBTasksTest extends BaseTaskTest {
workflowActionBBTasks.selectBB(execution);
boolean success = (boolean) execution.getVariable("completed");
int currentSequence = (int) execution.getVariable("gCurrentSequence");
- assertTrue(success);
+ assertFalse(success);
assertEquals(1, currentSequence);
}
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 e52d2dfecf..021bac3a7a 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
@@ -51,8 +51,11 @@ import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import java.util.UUID;
+import java.util.stream.Collectors;
import org.camunda.bpm.engine.delegate.BpmnError;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
@@ -118,6 +121,8 @@ public class WorkflowActionTest extends BaseTaskTest {
private static final String MACRO_CREATE_NETWORK_COLLECTION_JSON = "Macro/CreateNetworkCollection.json";
private static final String MACRO_VNF_MACRO_REPLACE_JSON = "Macro/VnfMacroReplace.json";
private static final String MACRO_CREATE_JSON = "Macro/ServiceMacroAssignVnfAndPnf.json";
+ private static final String MACRO_CREATE_SERVICE_MULTIPLE_SAME_MODEL_VNF_VFMODULE =
+ "Macro/ServiceMacroCreateMultipleSameModelVnfsAndVfModules.json";
@Mock
protected Environment environment;
@@ -752,6 +757,139 @@ public class WorkflowActionTest extends BaseTaskTest {
}
@Test
+ public void selectExecutionListServiceMacroCreateWithMultipleSameModelVnfAndVfModules() throws Exception {
+ String gAction = "createInstance";
+ String resource = "Service";
+ String bpmnRequest = readBpmnRequestFromFile(MACRO_CREATE_SERVICE_MULTIPLE_SAME_MODEL_VNF_VFMODULE);
+ initExecution(gAction, bpmnRequest, false);
+ execution.setVariable("requestUri", "v7/serviceInstances");
+ execution.setVariable("serviceInstanceId", UUID.randomUUID().toString());
+
+ // Service-Macro-Create
+ NorthBoundRequest northBoundRequest = new NorthBoundRequest();
+ List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
+ "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "ControllerExecutionBB",
+ "AssignPnfBB", "WaitForPnfReadyBB", "ControllerExecutionBB", "ControllerExecutionBB", "ActivatePnfBB",
+ "CreateNetworkBB", "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB",
+ "CreateVfModuleBB", "ActivateVfModuleBB", "ControllerExecutionBB", "ActivateVnfBB",
+ "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
+ orchFlows.get(6).setBpmnAction("config-assign");
+ orchFlows.get(6).setBpmnScope("vnf");
+ orchFlows.get(9).setBpmnAction("config-assign");
+ orchFlows.get(9).setBpmnScope("pnf");
+ orchFlows.get(10).setBpmnAction("config-deploy");
+ orchFlows.get(10).setBpmnScope("pnf");
+ orchFlows.get(18).setBpmnAction("config-deploy");
+ orchFlows.get(18).setBpmnScope("vnf");
+ northBoundRequest.setOrchestrationFlowList(orchFlows);
+
+ Service service = new Service();
+ service.setModelUUID("f2444885-3c76-4ddc-8668-7741c0631495");
+
+ VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
+ vfModuleCustomization.setModelCustomizationUUID("3bd19000-6d21-49f1-9eb3-ea76a6eac5e0");
+ vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
+ org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
+ vfModule.setVolumeHeatTemplate(new HeatTemplate());
+ vfModuleCustomization.setVfModule(vfModule);
+
+ VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
+ vfModuleCustomization2.setModelCustomizationUUID("83677d89-428a-407b-b4ec-738e68275d84");
+ vfModuleCustomization2.setHeatEnvironment(new HeatEnvironment());
+ org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
+ vfModule2.setModuleHeatTemplate(new HeatTemplate());
+ vfModuleCustomization2.setVfModule(vfModule2);
+
+ when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
+ false, "DEFAULT")).thenReturn(northBoundRequest);
+ when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("3bd19000-6d21-49f1-9eb3-ea76a6eac5e0"))
+ .thenReturn(vfModuleCustomization);
+ when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("83677d89-428a-407b-b4ec-738e68275d84"))
+ .thenReturn(vfModuleCustomization2);
+ when(catalogDbClient.getServiceByID("f2444885-3c76-4ddc-8668-7741c0631495")).thenReturn(service);
+
+
+ Resource serviceResource =
+ new Resource(WorkflowType.SERVICE, "f2444885-3c76-4ddc-8668-7741c0631495", false, null);
+ Resource vnfResource1 =
+ new Resource(WorkflowType.VNF, "0d0ba1ee-6b7f-47fe-8266-2967993b2c08", false, serviceResource);
+ vnfResource1.setInstanceName("vnf-instanceName-1");
+ Resource vfmResource1 =
+ new Resource(WorkflowType.VFMODULE, "3bd19000-6d21-49f1-9eb3-ea76a6eac5e0", false, vnfResource1);
+ vfmResource1.setInstanceName("demo-network-1");
+ Resource vfmResource2 =
+ new Resource(WorkflowType.VFMODULE, "83677d89-428a-407b-b4ec-738e68275d84", false, vnfResource1);
+ vfmResource2.setInstanceName("demo-1");
+ Resource vnfResource2 =
+ new Resource(WorkflowType.VNF, "0d0ba1ee-6b7f-47fe-8266-2967993b2c08", false, serviceResource);
+ vnfResource2.setInstanceName("vnf-instanceName-2");
+ Resource vfmResource3 =
+ new Resource(WorkflowType.VFMODULE, "83677d89-428a-407b-b4ec-738e68275d84", false, vnfResource2);
+ vfmResource3.setInstanceName("demo-2");
+ Resource vfmResource4 =
+ new Resource(WorkflowType.VFMODULE, "83677d89-428a-407b-b4ec-738e68275d84", false, vnfResource2);
+ vfmResource4.setInstanceName("demo-3");
+
+ when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), any()))
+ .thenReturn(Arrays.asList(serviceResource, vnfResource1, vnfResource2, vfmResource1, vfmResource2,
+ vfmResource3, vfmResource4));
+
+ workflowAction.selectExecutionList(execution);
+
+ List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
+
+ Map<String, List<ExecuteBuildingBlock>> flowNamesToEbbList =
+ ebbs.stream().collect(Collectors.groupingBy(e -> e.getBuildingBlock().getBpmnFlowName()));
+
+ assertEquals(1, flowNamesToEbbList.get("AssignServiceInstanceBB").size());
+ assertEquals(2, flowNamesToEbbList.get("AssignVnfBB").size());
+ assertEquals(4, flowNamesToEbbList.get("AssignVfModuleBB").size());
+ assertEquals(4, flowNamesToEbbList.get("ControllerExecutionBB").size());
+ assertEquals(4, flowNamesToEbbList.get("CreateVfModuleBB").size());
+ assertEquals(4, flowNamesToEbbList.get("ActivateVfModuleBB").size());
+ assertEquals(2, flowNamesToEbbList.get("ActivateVnfBB").size());
+ assertEquals(1, flowNamesToEbbList.get("ActivateServiceInstanceBB").size());
+
+ String vnfInstanceId1 = flowNamesToEbbList.get("AssignVnfBB").get(0).getWorkflowResourceIds().getVnfId();
+ String vnfInstanceId2 = flowNamesToEbbList.get("AssignVnfBB").get(1).getWorkflowResourceIds().getVnfId();
+
+ // should be 3 = 1 AssignVfModuleBB + 1 CreateVfModuleBB + 1 ActivateVfModuleBB
+ boolean allEbbsForVfModule1HaveCorrectParentVnfId =
+ 3 == ebbs.stream().map(ExecuteBuildingBlock::getWorkflowResourceIds)
+ .filter(w -> "demo-network-1".equals(w.getVfModuleInstanceName())
+ && vnfInstanceId1.equals(w.getVnfId()))
+ .count();
+ boolean allEbbsForVfModule2HaveCorrectParentVnfId = 3 == ebbs.stream()
+ .map(ExecuteBuildingBlock::getWorkflowResourceIds)
+ .filter(w -> "demo-1".equals(w.getVfModuleInstanceName()) && vnfInstanceId1.equals(w.getVnfId()))
+ .count();
+ boolean allEbbsForVfModule3HaveCorrectParentVnfId = 3 == ebbs.stream()
+ .map(ExecuteBuildingBlock::getWorkflowResourceIds)
+ .filter(w -> "demo-2".equals(w.getVfModuleInstanceName()) && vnfInstanceId2.equals(w.getVnfId()))
+ .count();
+ boolean allEbbsForVfModule4HaveCorrectParentVnfId = 3 == ebbs.stream()
+ .map(ExecuteBuildingBlock::getWorkflowResourceIds)
+ .filter(w -> "demo-3".equals(w.getVfModuleInstanceName()) && vnfInstanceId2.equals(w.getVnfId()))
+ .count();
+ assertTrue(allEbbsForVfModule1HaveCorrectParentVnfId);
+ assertTrue(allEbbsForVfModule2HaveCorrectParentVnfId);
+ assertTrue(allEbbsForVfModule3HaveCorrectParentVnfId);
+ assertTrue(allEbbsForVfModule4HaveCorrectParentVnfId);
+
+ boolean controllerExecutionBBsforVnf1HaveCorrectVnfId = flowNamesToEbbList.get("ControllerExecutionBB").stream()
+ .filter(e -> vnfInstanceId1.equals(e.getWorkflowResourceIds().getVnfId()))
+ .map(ExecuteBuildingBlock::getBuildingBlock).map(BuildingBlock::getBpmnAction)
+ .collect(Collectors.toSet()).containsAll(Set.of("config-assign", "config-deploy"));
+ assertTrue(controllerExecutionBBsforVnf1HaveCorrectVnfId);
+
+ boolean controllerExecutionBBsforVnf2HaveCorrectVnfId = flowNamesToEbbList.get("ControllerExecutionBB").stream()
+ .filter(e -> vnfInstanceId2.equals(e.getWorkflowResourceIds().getVnfId()))
+ .map(ExecuteBuildingBlock::getBuildingBlock).map(BuildingBlock::getBpmnAction)
+ .collect(Collectors.toSet()).containsAll(Set.of("config-assign", "config-deploy"));
+ assertTrue(controllerExecutionBBsforVnf2HaveCorrectVnfId);
+ }
+
+ @Test
public void selectExecutionListServiceMacroDeleteTest() throws Exception {
String gAction = "deleteInstance";
String resource = "Service";
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversalTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversalTest.java
index 58fee86ade..cac7f872b3 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversalTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversalTest.java
@@ -53,6 +53,7 @@ import java.util.stream.Collectors;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
@@ -63,6 +64,8 @@ public class UserParamsServiceTraversalTest extends BaseTaskTest {
private static final String MACRO_ASSIGN_PNF_JSON = "Macro/ServiceMacroAssignPnf.json";
private static final String NETWORK_COLLECTION_JSON = "Macro/CreateNetworkCollection.json";
private static final String MACRO_CREATE_WITHOUT_RESOURCES_JSON = "Macro/ServiceMacroCreateWithoutResources.json";
+ private static final String MACRO_CREATE_SVC_SAME_MODEL_VNF_VFMODULE =
+ "Macro/ServiceMacroCreateMultipleSameModelVnfsAndVfModules.json";
private static final String serviceInstanceId = "123";
private DelegateExecution execution;
private CatalogDbClient mockCatalogDbClient;
@@ -80,8 +83,6 @@ public class UserParamsServiceTraversalTest extends BaseTaskTest {
@Test
public void getResourceListFromUserParams() throws Exception {
initExecution(requestAction, readBpmnRequestFromFile(MACRO_CREATE_WITHOUT_RESOURCES_JSON), false);
- Mockito.doReturn(getVfModuleCustomization()).when(mockCatalogDbClient)
- .getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
Mockito.doReturn(getCvnfcCustomizations()).when(mockCatalogDbClient).getCvnfcCustomization(anyString(),
anyString(), anyString());
@@ -96,9 +97,62 @@ public class UserParamsServiceTraversalTest extends BaseTaskTest {
}
@Test
+ public void getResourceListFromUserParamsMultipleSameModelVnfVfModule() throws Exception {
+ initExecution("createInstance", readBpmnRequestFromFile(MACRO_CREATE_SVC_SAME_MODEL_VNF_VFMODULE), false);
+ Mockito.doReturn(getVfModuleCustomization("3bd19000-6d21-49f1-9eb3-ea76a6eac5e0", false))
+ .when(mockCatalogDbClient)
+ .getVfModuleCustomizationByModelCuztomizationUUID("3bd19000-6d21-49f1-9eb3-ea76a6eac5e0");
+ Mockito.doReturn(getVfModuleCustomization("83677d89-428a-407b-b4ec-738e68275d84", false))
+ .when(mockCatalogDbClient)
+ .getVfModuleCustomizationByModelCuztomizationUUID("83677d89-428a-407b-b4ec-738e68275d84");
+
+ List<Resource> resources = userParamsServiceTraversal.getResourceListFromUserParams(execution, getUserParams(),
+ serviceInstanceId, requestAction);
+
+ assertEquals(7, resources.size());
+
+ Resource service = resources.get(0);
+ assertTrue(service.getResourceType() == WorkflowType.SERVICE);
+ assertEquals(2, service.getChildren().size());
+
+ Resource vnf1 = service.getChildren().get(0);
+ assertEquals(service, vnf1.getParent());
+ assertEquals("vnf-instanceName-1", vnf1.getInstanceName());
+ assertEquals("0d0ba1ee-6b7f-47fe-8266-2967993b2c08", vnf1.getResourceId());
+ assertEquals(2, vnf1.getChildren().size());
+
+ Resource vnf2 = service.getChildren().get(1);
+ assertEquals(service, vnf2.getParent());
+ assertEquals("vnf-instanceName-2", vnf2.getInstanceName());
+ assertEquals("0d0ba1ee-6b7f-47fe-8266-2967993b2c08", vnf2.getResourceId());
+ assertEquals(2, vnf2.getChildren().size());
+
+ Resource vfmodule1 = vnf1.getChildren().get(0);
+ assertEquals(vnf1, vfmodule1.getParent());
+ assertEquals("demo-network-1", vfmodule1.getInstanceName());
+ assertEquals("3bd19000-6d21-49f1-9eb3-ea76a6eac5e0", vfmodule1.getResourceId());
+
+ Resource vfmodule2 = vnf1.getChildren().get(1);
+ assertEquals(vnf1, vfmodule2.getParent());
+ assertEquals("demo-1", vfmodule2.getInstanceName());
+ assertEquals("83677d89-428a-407b-b4ec-738e68275d84", vfmodule2.getResourceId());
+
+ Resource vfmodule3 = vnf2.getChildren().get(0);
+ assertEquals(vnf2, vfmodule3.getParent());
+ assertEquals("demo-2", vfmodule3.getInstanceName());
+ assertEquals("83677d89-428a-407b-b4ec-738e68275d84", vfmodule3.getResourceId());
+
+ Resource vfmodule4 = vnf2.getChildren().get(1);
+ assertEquals(vnf2, vfmodule4.getParent());
+ assertEquals("demo-3", vfmodule4.getInstanceName());
+ assertEquals("83677d89-428a-407b-b4ec-738e68275d84", vfmodule4.getResourceId());
+ }
+
+ @Test
public void getResourceListFromUserParamsForVnfs() throws Exception {
initExecution(requestAction, readBpmnRequestFromFile(MACRO_ASSIGN_JSON), false);
- Mockito.doReturn(getVfModuleCustomization()).when(mockCatalogDbClient)
+ Mockito.doReturn(getVfModuleCustomization("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f", true))
+ .when(mockCatalogDbClient)
.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
Mockito.doReturn(getCvnfcCustomizations()).when(mockCatalogDbClient).getCvnfcCustomization(anyString(),
anyString(), anyString());
@@ -117,7 +171,8 @@ public class UserParamsServiceTraversalTest extends BaseTaskTest {
@Test
public void getResourceListFromUserParamsForVnfsWithPriorities() throws Exception {
initExecution(requestAction, readBpmnRequestFromFile(MACRO_CREATE_JSON), false);
- Mockito.doReturn(getVfModuleCustomization()).when(mockCatalogDbClient)
+ Mockito.doReturn(getVfModuleCustomization("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f", true))
+ .when(mockCatalogDbClient)
.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
Mockito.doReturn(getCvnfcCustomizations()).when(mockCatalogDbClient).getCvnfcCustomization(anyString(),
anyString(), anyString());
@@ -137,8 +192,6 @@ public class UserParamsServiceTraversalTest extends BaseTaskTest {
@Test
public void getResourceListFromUserParamsForPnfs() throws Exception {
initExecution(requestAction, readBpmnRequestFromFile(MACRO_ASSIGN_PNF_JSON), false);
- Mockito.doReturn(getVfModuleCustomization()).when(mockCatalogDbClient)
- .getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
Mockito.doReturn(getCvnfcCustomizations()).when(mockCatalogDbClient).getCvnfcCustomization(anyString(),
anyString(), anyString());
@@ -156,8 +209,6 @@ public class UserParamsServiceTraversalTest extends BaseTaskTest {
public void getResourceListFromUserParamsForNetworks() throws Exception {
requestAction = "createInstance";
initExecution(requestAction, readBpmnRequestFromFile(NETWORK_COLLECTION_JSON), false);
- Mockito.doReturn(getVfModuleCustomization()).when(mockCatalogDbClient)
- .getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
Mockito.doReturn(getCvnfcCustomizations()).when(mockCatalogDbClient).getCvnfcCustomization(anyString(),
anyString(), anyString());
Mockito.doReturn(getService()).when(mockCatalogDbClient).getServiceByID(anyString());
@@ -230,13 +281,17 @@ public class UserParamsServiceTraversalTest extends BaseTaskTest {
return service;
}
- private VfModuleCustomization getVfModuleCustomization() {
+ private VfModuleCustomization getVfModuleCustomization(String modelCustomizationUUID, boolean includeVolumeGroup) {
VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
- vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
- vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
+ vfModuleCustomization.setModelCustomizationUUID(modelCustomizationUUID);
VfModule vfModule = new VfModule();
- vfModule.setVolumeHeatTemplate(new HeatTemplate());
- vfModule.setModelName("helm");
+ if (includeVolumeGroup) {
+ vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
+ vfModule.setVolumeHeatTemplate(new HeatTemplate());
+ vfModule.setModelName("helm");
+ } else {
+ vfModuleCustomization.setHeatEnvironment(new HeatEnvironment());
+ }
vfModule.setModuleHeatTemplate(new HeatTemplate());
vfModuleCustomization.setVfModule(vfModule);
return vfModuleCustomization;
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtilsTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtilsTest.java
index 0d68cf362b..996c0c07e1 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtilsTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtilsTest.java
@@ -40,7 +40,8 @@ public class WorkflowResourceIdsUtilsTest {
private static final String PNF_ID = "pnfId";
private static final String NETWORK_COLLECTION_ID = "networkCollectionId";
private static final String CONFIGURATION_ID = "configurationId";
-
+ private static final String VNF_INSTANCE_NAME = "vnfInstanceNameId";
+ private static final String VF_MODULE_INSTANCE_NAME = "vfModuleInstanceNameId";
private WorkflowResourceIds workflowResourceIds;
@Before
@@ -57,6 +58,8 @@ public class WorkflowResourceIdsUtilsTest {
execution.setVariable("vnfId", VNF_ID);
execution.setVariable("volumeGroupId", VOLUME_GROUP_ID);
execution.setVariable("instanceGroupId", INSTANCE_GROUP_ID);
+ execution.setVariable("vnfInstanceName", VNF_INSTANCE_NAME);
+ execution.setVariable("vfModuleInstanceName", VF_MODULE_INSTANCE_NAME);
workflowResourceIds = WorkflowResourceIdsUtils.getWorkflowResourceIdsFromExecution(execution);
@@ -66,54 +69,84 @@ public class WorkflowResourceIdsUtilsTest {
assertEquals(VNF_ID, workflowResourceIds.getVnfId());
assertEquals(VOLUME_GROUP_ID, workflowResourceIds.getVolumeGroupId());
assertEquals(INSTANCE_GROUP_ID, workflowResourceIds.getInstanceGroupId());
+ assertEquals(VNF_INSTANCE_NAME, workflowResourceIds.getVnfInstanceName());
+ assertEquals(VF_MODULE_INSTANCE_NAME, workflowResourceIds.getVfModuleInstanceName());
}
@Test
public void shouldProperlySetServiceInstanceId() {
assertFieldSetProperly(WorkflowType.SERVICE, SERVICE_ID, workflowResourceIds::getServiceInstanceId);
+ assertEquals(SERVICE_ID,
+ WorkflowResourceIdsUtils.getResourceIdByWorkflowType(workflowResourceIds, WorkflowType.SERVICE));
}
@Test
public void shouldProperlySetVnfId() {
assertFieldSetProperly(WorkflowType.VNF, VNF_ID, workflowResourceIds::getVnfId);
-
+ assertEquals(VNF_ID,
+ WorkflowResourceIdsUtils.getResourceIdByWorkflowType(workflowResourceIds, WorkflowType.VNF));
}
@Test
public void shouldProperlySetPnfId() {
assertFieldSetProperly(WorkflowType.PNF, PNF_ID, workflowResourceIds::getPnfId);
+ assertEquals(PNF_ID,
+ WorkflowResourceIdsUtils.getResourceIdByWorkflowType(workflowResourceIds, WorkflowType.PNF));
}
@Test
public void shouldProperlySetVfModuleId() {
assertFieldSetProperly(WorkflowType.VFMODULE, VF_MODULE_ID, workflowResourceIds::getVfModuleId);
+ assertEquals(VF_MODULE_ID,
+ WorkflowResourceIdsUtils.getResourceIdByWorkflowType(workflowResourceIds, WorkflowType.VFMODULE));
}
@Test
public void shouldProperlySetVolumeGroupId() {
assertFieldSetProperly(WorkflowType.VOLUMEGROUP, VOLUME_GROUP_ID, workflowResourceIds::getVolumeGroupId);
+ assertEquals(VOLUME_GROUP_ID,
+ WorkflowResourceIdsUtils.getResourceIdByWorkflowType(workflowResourceIds, WorkflowType.VOLUMEGROUP));
}
@Test
public void shouldProperlySetNetworkId() {
assertFieldSetProperly(WorkflowType.NETWORK, NETWORK_ID, workflowResourceIds::getNetworkId);
+ assertEquals(NETWORK_ID,
+ WorkflowResourceIdsUtils.getResourceIdByWorkflowType(workflowResourceIds, WorkflowType.NETWORK));
}
@Test
public void shouldProperlySetNetworkCollectionId() {
assertFieldSetProperly(WorkflowType.NETWORKCOLLECTION, NETWORK_COLLECTION_ID,
workflowResourceIds::getNetworkCollectionId);
-
+ assertEquals(NETWORK_COLLECTION_ID, WorkflowResourceIdsUtils.getResourceIdByWorkflowType(workflowResourceIds,
+ WorkflowType.NETWORKCOLLECTION));
}
@Test
public void shouldProperlySetConfigurationId() {
assertFieldSetProperly(WorkflowType.CONFIGURATION, CONFIGURATION_ID, workflowResourceIds::getConfigurationId);
+ assertEquals(CONFIGURATION_ID,
+ WorkflowResourceIdsUtils.getResourceIdByWorkflowType(workflowResourceIds, WorkflowType.CONFIGURATION));
}
@Test
public void shouldProperlySetInstanceGroupId() {
assertFieldSetProperly(WorkflowType.INSTANCE_GROUP, INSTANCE_GROUP_ID, workflowResourceIds::getInstanceGroupId);
+ assertEquals(INSTANCE_GROUP_ID,
+ WorkflowResourceIdsUtils.getResourceIdByWorkflowType(workflowResourceIds, WorkflowType.INSTANCE_GROUP));
+ }
+
+ @Test
+ public void shouldPropertySetVnfInstanceName() {
+ assertFieldSetProperlyInstanceName(WorkflowType.VNF, VNF_INSTANCE_NAME,
+ workflowResourceIds::getVnfInstanceName);
+ }
+
+ @Test
+ public void shouldPropertySetVfModuleInstanceName() {
+ assertFieldSetProperlyInstanceName(WorkflowType.VFMODULE, VF_MODULE_INSTANCE_NAME,
+ workflowResourceIds::getVfModuleInstanceName);
}
private void assertFieldSetProperly(WorkflowType workflowType, String expectedId,
@@ -121,4 +154,13 @@ public class WorkflowResourceIdsUtilsTest {
WorkflowResourceIdsUtils.setResourceIdByWorkflowType(workflowResourceIds, workflowType, expectedId);
assertEquals(expectedId, testedObjectField.get());
}
+
+ private void assertFieldSetProperlyInstanceName(WorkflowType workflowType, String expectedId,
+ Supplier<String> testedObjectField) {
+ WorkflowResourceIdsUtils.setInstanceNameByWorkflowType(workflowResourceIds, workflowType, expectedId);
+ assertEquals(expectedId, testedObjectField.get());
+ }
+
+
+
}
diff --git a/bpmn/so-bpmn-tasks/src/test/resources/__files/Macro/ServiceMacroCreateMultipleSameModelVnfsAndVfModules.json b/bpmn/so-bpmn-tasks/src/test/resources/__files/Macro/ServiceMacroCreateMultipleSameModelVnfsAndVfModules.json
new file mode 100644
index 0000000000..059754846a
--- /dev/null
+++ b/bpmn/so-bpmn-tasks/src/test/resources/__files/Macro/ServiceMacroCreateMultipleSameModelVnfsAndVfModules.json
@@ -0,0 +1,187 @@
+{
+ "requestDetails": {
+ "subscriberInfo": {
+ "globalSubscriberId": "test-customer"
+ },
+ "requestInfo": {
+ "suppressRollback": false,
+ "instanceName": "test",
+ "productFamilyId": "6ea37d21-1a8d-4cd5-a727-e543191a5bb6",
+ "requestorId": "portal",
+ "source": "source"
+ },
+ "cloudConfiguration": {
+ "lcpCloudRegionId": "cloudid",
+ "tenantId": "tenantid",
+ "cloudOwner": "cloudowner"
+ },
+ "requestParameters": {
+ "subscriptionServiceType": "ubuntu",
+ "userParams": [
+ {
+ "Homing_Solution": "none"
+ },
+ {
+ "service": {
+ "instanceParams": [],
+ "resources": {
+ "vnfs": [
+ {
+ "modelInfo": {
+ "modelName": "UbuntuVF",
+ "modelVersionId": "744a1610-782e-47cf-bb45-d83319e33e17",
+ "modelInvariantUuid": "fc573bb4-d312-48ab-b81d-8b3313df4d07",
+ "modelVersion": "1.0",
+ "modelCustomizationId": "0d0ba1ee-6b7f-47fe-8266-2967993b2c08",
+ "modelInstanceName": "Ubuntu VF 0"
+ },
+ "cloudConfiguration": {
+ "lcpCloudRegionId": "cloudid",
+ "tenantId": "tenantid",
+ "cloudOwner": "cloudowner"
+ },
+ "platform": {
+ "platformName": "platform"
+ },
+ "lineOfBusiness": {
+ "lineOfBusinessName": "lob"
+ },
+ "productFamilyId": "6ea37d21-1a8d-4cd5-a727-e543191a5bb6\n",
+ "instanceName": "vnf-instanceName-1",
+ "instanceParams": [
+ {
+ "vnf-name": "vnf-vnf-name",
+ "vnf_name": "UbuntuVNFName"
+ }
+ ],
+ "vfModules": [
+ {
+ "modelInfo": {
+ "modelName": "UbuntuVF..base..module-0",
+ "modelVersionId": "8fa495ac-d057-4060-b772-868d8e97766e",
+ "modelInvariantUuid": "71dcbf41-9838-4b3d-baa4-4024d22ef0cc",
+ "modelVersion": "1",
+ "modelCustomizationId": "3bd19000-6d21-49f1-9eb3-ea76a6eac5e0"
+ },
+ "instanceName": "demo-network-1",
+ "instanceParams": [
+ {
+ "name": "demo-network-1",
+ "cidr": "10.10.10.0/24"
+ }
+ ]
+ },
+ {
+ "modelInfo": {
+ "modelName": "UbuntuVF..base..module-1",
+ "modelVersionId": "21954495-830f-48b7-b7b2-030d837789b3",
+ "modelInvariantUuid": "90355af6-55f3-460e-abe6-bec9a27a15e6",
+ "modelVersion": "1",
+ "modelCustomizationId": "83677d89-428a-407b-b4ec-738e68275d84"
+ },
+ "instanceName": "demo-1",
+ "instanceParams": [
+ {
+ "name": "demo-ubuntu-1",
+ "network_mgmt": "vlan101",
+ "network_name": "demo-network-1"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "modelInfo": {
+ "modelName": "UbuntuVF",
+ "modelVersionId": "744a1610-782e-47cf-bb45-d83319e33e17",
+ "modelInvariantUuid": "fc573bb4-d312-48ab-b81d-8b3313df4d07",
+ "modelVersion": "1.0",
+ "modelCustomizationId": "0d0ba1ee-6b7f-47fe-8266-2967993b2c08",
+ "modelInstanceName": "Ubuntu VF 0"
+ },
+ "cloudConfiguration": {
+ "lcpCloudRegionId": "cloudid",
+ "tenantId": "tenantid",
+ "cloudOwner": "cloudowner"
+ },
+ "platform": {
+ "platformName": "platform"
+ },
+ "lineOfBusiness": {
+ "lineOfBusinessName": "lob"
+ },
+ "productFamilyId": "6ea37d21-1a8d-4cd5-a727-e543191a5bb6\n",
+ "instanceName": "vnf-instanceName-2",
+ "instanceParams": [
+ {
+ "vnf-name": "vnf-vnf-name",
+ "vnf_name": "UbuntuVNFName"
+ }
+ ],
+ "vfModules": [
+ {
+ "modelInfo": {
+ "modelName": "UbuntuVF..base..module-1",
+ "modelVersionId": "21954495-830f-48b7-b7b2-030d837789b3",
+ "modelInvariantUuid": "90355af6-55f3-460e-abe6-bec9a27a15e6",
+ "modelVersion": "1",
+ "modelCustomizationId": "83677d89-428a-407b-b4ec-738e68275d84"
+ },
+ "instanceName": "demo-2",
+ "instanceParams": [
+ {
+ "name": "demo-ubuntu-2",
+ "network_mgmt": "vlan101",
+ "network_name": "demo-network-1"
+ }
+ ]
+ },
+ {
+ "modelInfo": {
+ "modelName": "UbuntuVF..base..module-1",
+ "modelVersionId": "21954495-830f-48b7-b7b2-030d837789b3",
+ "modelInvariantUuid": "90355af6-55f3-460e-abe6-bec9a27a15e6",
+ "modelVersion": "1",
+ "modelCustomizationId": "83677d89-428a-407b-b4ec-738e68275d84"
+ },
+ "instanceName": "demo-3",
+ "instanceParams": [
+ {
+ "name": "demo-ubuntu-3",
+ "network_mgmt": "vlan101",
+ "network_name": "demo-network-1"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "modelInfo": {
+ "modelVersion": "1.0",
+ "modelVersionId": "f2444885-3c76-4ddc-8668-7741c0631495",
+ "modelInvariantId": "3bd19000-6d21-49f1-9eb3-ea76a6eac5e0",
+ "modelName": "UbuntuSVC",
+ "modelType": "service"
+ }
+ }
+ }
+ ],
+ "aLaCarte": false
+ },
+ "project": {
+ "projectName": "Project-UbuntuDemo"
+ },
+ "owningEntity": {
+ "owningEntityId": "33a8b609-1cfe-4d19-8dc2-5b95b921de1e",
+ "owningEntityName": "demo"
+ },
+ "modelInfo": {
+ "modelVersion": "1.0",
+ "modelVersionId": "f2444885-3c76-4ddc-8668-7741c0631495",
+ "modelInvariantId": "3bd19000-6d21-49f1-9eb3-ea76a6eac5e0",
+ "modelName": "UbuntuSVC",
+ "modelType": "service"
+ }
+ }
+} \ No newline at end of file
diff --git a/common/pom.xml b/common/pom.xml
index a6e8a79f56..9af3f62442 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -16,6 +16,7 @@
<grpc.netty.version>4.1.30.Final</grpc.netty.version>
<ccsdk.version>1.1.2</ccsdk.version>
<spring-cloud-sleuth.version>2.0.2.RELEASE</spring-cloud-sleuth.version>
+ <tomcat-catalina-version>9.0.45</tomcat-catalina-version>
</properties>
<dependencies>
<dependency>
@@ -79,7 +80,7 @@
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
- <version>9.0.30</version>
+ <version>${tomcat-catalina-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java b/common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java
index 0bd6d64dc3..f06ee49dba 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java
@@ -159,8 +159,6 @@ public class SliceProfileAdapter implements Serializable {
List<PerfReqEmbb> perfReqEmbbs = new ArrayList<>();
PerfReqEmbb perfReqEmbb = new PerfReqEmbb();
BeanUtils.copyProperties(this, perfReqEmbb);
- perfReqEmbb.setExpDataRateDL(this.expDataRateDL);
- perfReqEmbb.setExpDataRateUL(this.expDataRateUL);
perfReqEmbbs.add(perfReqEmbb);
perfReq.setPerfReqEmbbList(perfReqEmbbs);
} else if ("ullc".equalsIgnoreCase(sST)) {
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/validation/UserParamsValidation.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/validation/UserParamsValidation.java
index 067e8611d0..8646a74a2f 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/validation/UserParamsValidation.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/validation/UserParamsValidation.java
@@ -22,7 +22,13 @@
package org.onap.so.apihandlerinfra.validation;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import org.apache.commons.lang3.StringUtils;
import org.onap.so.apihandlerinfra.Action;
import org.onap.so.apihandlerinfra.Actions;
import org.onap.so.exceptions.ValidationException;
@@ -36,8 +42,6 @@ public class UserParamsValidation implements ValidationRule {
@Override
public ValidationInformation validate(ValidationInformation info) throws ValidationException {
Service validate = info.getUserParams();
- Actions action = info.getAction();
-
if (validate.getModelInfo() == null) {
throw new ValidationException("modelInfo in userParams", true);
} else if (validate.getModelInfo().getModelType() == null) {
@@ -49,6 +53,10 @@ public class UserParamsValidation implements ValidationRule {
if (validate.getInstanceName() != null && info.getRequestInfo().getInstanceName() != null) {
instanceNameValidation(info, validate);
}
+
+ Actions action = info.getAction();
+ Map<String, Set<String>> vnfCustomIdToInstanceNames = new HashMap<>();
+ Map<String, Set<String>> vfModuleCustomIdToInstanceNames = new HashMap<>();
for (Vnfs vnf : validate.getResources().getVnfs()) {
if (vnf.getModelInfo() == null) {
throw new ValidationException("modelInfo in userParams vnf resources", true);
@@ -71,19 +79,42 @@ public class UserParamsValidation implements ValidationRule {
if (vnf.getPlatform() != null && vnf.getPlatform().getPlatformName() == null) {
throw new ValidationException("platformName in userParams vnf resources", true);
}
+
+ String vnfCustomizationId = vnf.getModelInfo().getModelCustomizationId();
+ vnfCustomIdToInstanceNames.putIfAbsent(vnfCustomizationId, new HashSet<>());
+ String vnfInstanceName = StringUtils.defaultString(vnf.getInstanceName());
+ Set<String> vnfVisitedInstanceNames = vnfCustomIdToInstanceNames.get(vnfCustomizationId);
+ if (!vnfVisitedInstanceNames.add(vnfInstanceName)) {
+ throw new ValidationException(
+ "instanceName: same instanceName with same modelCustomizationId in userParams vnf resources",
+ true);
+ }
if (vnf.getVfModules().isEmpty()) {
throw new ValidationException("vfModules in userParams vnf resources", true);
}
- for (VfModules vfModules : vnf.getVfModules()) {
- if (vfModules.getModelInfo() == null) {
+
+ for (VfModules vfModule : vnf.getVfModules()) {
+ if (vfModule.getModelInfo() == null) {
throw new ValidationException("modelInfo in userParams vfModules resources", true);
- } else if (vfModules.getModelInfo().getModelCustomizationId() == null) {
+ } else if (vfModule.getModelInfo().getModelCustomizationId() == null) {
throw new ValidationException("modelCustomizationId in userParams vfModule resources", true);
- } else if (vfModules.getModelInfo().getModelVersionId() == null) {
+ } else if (vfModule.getModelInfo().getModelVersionId() == null) {
throw new ValidationException("modelVersionId in userParams vfModule resources", true);
}
+
+ String vfModulecustomizationId = vfModule.getModelInfo().getModelCustomizationId();
+ vfModuleCustomIdToInstanceNames.putIfAbsent(vfModulecustomizationId, new HashSet<>());
+ String vfModuleInstanceName = StringUtils.defaultString(vfModule.getInstanceName());
+ Set<String> vfModuleVisitedInstanceNames = vfModuleCustomIdToInstanceNames.get(vfModulecustomizationId);
+ if (!vfModuleVisitedInstanceNames.add(vfModuleInstanceName)) {
+ throw new ValidationException(
+ "instanceName: same instanceName with same modelCustomizationId in userParams vfModule resources",
+ true);
+ }
}
}
+ validateDuplicateInstanceNames(vnfCustomIdToInstanceNames, "vnf");
+ validateDuplicateInstanceNames(vfModuleCustomIdToInstanceNames, "vfModule");
List<Networks> validateNetworks = new ArrayList<>();
validateNetworks = validate.getResources().getNetworks();
@@ -135,4 +166,24 @@ public class UserParamsValidation implements ValidationRule {
"modelCustomizationId in userParams service");
}
}
+
+ private void validateDuplicateInstanceNames(Map<String, Set<String>> duplicateValidator, String type)
+ throws ValidationException {
+ Set<String> allInstanceNames = new HashSet<>();
+ for (Map.Entry<String, Set<String>> entry : duplicateValidator.entrySet()) {
+ Set<String> instanceNames = entry.getValue();
+ if (instanceNames.size() > 1 && instanceNames.contains(""))
+ throw new ValidationException(String.format(
+ "instanceName: instanceName is missing or empty with same modelCustomizationId in userParams %s resources",
+ type), true);
+
+ for (String instanceName : instanceNames) {
+ if (!instanceName.isBlank() && !allInstanceNames.add(instanceName)) {
+ throw new ValidationException(String.format(
+ "instanceName: same instanceName but different modelCustomizationId (instanceName should be unique) in userParams %s resources",
+ type), true);
+ }
+ }
+ }
+ }
}
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/validation/UserParamsValidationTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/validation/UserParamsValidationTest.java
index ba02254ad8..548b957303 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/validation/UserParamsValidationTest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/validation/UserParamsValidationTest.java
@@ -32,6 +32,7 @@ import org.onap.so.exceptions.ValidationException;
import org.onap.so.serviceinstancebeans.Service;
import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.onap.so.serviceinstancebeans.VfModules;
public class UserParamsValidationTest {
@@ -66,6 +67,182 @@ public class UserParamsValidationTest {
}
@Test
+ public void validateDuplicateInstanceNameDifferentCustomizationIdVnfTest() throws IOException, ValidationException {
+ thrown.expect(ValidationException.class);
+ thrown.expectMessage(
+ "No valid instanceName: same instanceName but different modelCustomizationId (instanceName should be unique) in userParams vnf resources is specified");
+ ValidationInformation info = setupValidationInformation(
+ "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json");
+ info.getUserParams().getResources().getVnfs().get(0).setInstanceName("UbuntuVNF2");
+ validation.validate(info);
+ }
+
+ @Test
+ public void validateDuplicateInstanceNameSameCustomizationIdVnfTest() throws IOException, ValidationException {
+ thrown.expect(ValidationException.class);
+ thrown.expectMessage(
+ "No valid instanceName: same instanceName with same modelCustomizationId in userParams vnf resources is specified");
+ ValidationInformation info = setupValidationInformation(
+ "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json");
+ info.getUserParams().getResources().getVnfs().get(2).setInstanceName("UbuntuVNF2");
+ validation.validate(info);
+ }
+
+ @Test
+ public void validateNullInstanceNameSameCustomizationIdVnfTest() throws IOException, ValidationException {
+ thrown.expect(ValidationException.class);
+ thrown.expectMessage(
+ "No valid instanceName: instanceName is missing or empty with same modelCustomizationId in userParams vnf resources is specified");
+ ValidationInformation info = setupValidationInformation(
+ "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json");
+ info.getUserParams().getResources().getVnfs().get(1).setInstanceName(null);
+ validation.validate(info);
+ }
+
+ @Test
+ public void validateDuplicateNullInstanceNameSameCustomizationIdVnfTest() throws IOException, ValidationException {
+ thrown.expect(ValidationException.class);
+ thrown.expectMessage(
+ "No valid instanceName: same instanceName with same modelCustomizationId in userParams vnf resources is specified");
+ ValidationInformation info = setupValidationInformation(
+ "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json");
+ info.getUserParams().getResources().getVnfs().get(1).setInstanceName(null);
+ info.getUserParams().getResources().getVnfs().get(2).setInstanceName(null);
+ validation.validate(info);
+ }
+
+ @Test
+ public void validateDifferentInstanceNameSameCustomizationIdVnfTest() throws IOException, ValidationException {
+ ValidationInformation info = setupValidationInformation(
+ "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json");
+ validation.validate(info);
+ }
+
+ @Test
+ public void validateNullInstanceNameDifferentCustomizationIdVnfTest() throws IOException, ValidationException {
+ ValidationInformation info = setupValidationInformation(
+ "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json");
+ info.getUserParams().getResources().getVnfs().get(0).setInstanceName(null);
+ validation.validate(info);
+ }
+
+ @Test
+ public void validateDuplicateInstanceNameDifferentCustomizationIdVfModuleInOneVnfTest()
+ throws IOException, ValidationException {
+ thrown.expect(ValidationException.class);
+ thrown.expectMessage(
+ "No valid instanceName: same instanceName but different modelCustomizationId (instanceName should be unique) in userParams vfModule resources is specified");
+ ValidationInformation info = setupValidationInformation(
+ "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json");
+ info.getUserParams().getResources().getVnfs().get(2).getVfModules().get(2).setInstanceName("lcm-demo-ubuntu-3");
+ validation.validate(info);
+ }
+
+ @Test
+ public void validateDuplicateInstanceNameDifferentCustomizationIdVfModuleInMultipleVnfTest()
+ throws IOException, ValidationException {
+ thrown.expect(ValidationException.class);
+ thrown.expectMessage(
+ "No valid instanceName: same instanceName but different modelCustomizationId (instanceName should be unique) in userParams vfModule resources is specified");
+ ValidationInformation info = setupValidationInformation(
+ "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json");
+ info.getUserParams().getResources().getVnfs().get(0).getVfModules().get(0).setInstanceName("lcm-demo-ubuntu-3");
+ validation.validate(info);
+ }
+
+ @Test
+ public void validateDuplicateInstanceNameSameCustomizationIdVfModuleInOneVnfTest()
+ throws IOException, ValidationException {
+ thrown.expect(ValidationException.class);
+ thrown.expectMessage(
+ "No valid instanceName: same instanceName with same modelCustomizationId in userParams vfModule resources is specified");
+ ValidationInformation info = setupValidationInformation(
+ "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json");
+ info.getUserParams().getResources().getVnfs().get(2).getVfModules().get(1).setInstanceName("lcm-demo-ubuntu-2");
+ validation.validate(info);
+ }
+
+ @Test
+ public void validateDuplicateInstanceNameSameCustomizationIdVfModuleInMultipleVnfTest()
+ throws IOException, ValidationException {
+ thrown.expect(ValidationException.class);
+ thrown.expectMessage(
+ "No valid instanceName: same instanceName with same modelCustomizationId in userParams vfModule resources is specified");
+ ValidationInformation info = setupValidationInformation(
+ "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json");
+ VfModules vfModule1 = info.getUserParams().getResources().getVnfs().get(0).getVfModules().get(0);
+ VfModules vfModule2 = info.getUserParams().getResources().getVnfs().get(1).getVfModules().get(0);
+ vfModule2.setInstanceName(vfModule1.getInstanceName());
+ vfModule2.getModelInfo().setModelCustomizationId(vfModule1.getModelInfo().getModelCustomizationId());
+ validation.validate(info);
+ }
+
+ @Test
+ public void validateNullInstanceNameSameCustomizationIdVfModuleInOneVnfTest()
+ throws IOException, ValidationException {
+ thrown.expect(ValidationException.class);
+ thrown.expectMessage(
+ "No valid instanceName: instanceName is missing or empty with same modelCustomizationId in userParams vfModule resources is specified");
+ ValidationInformation info = setupValidationInformation(
+ "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json");
+ info.getUserParams().getResources().getVnfs().get(2).getVfModules().get(1).setInstanceName(null);
+ validation.validate(info);
+ }
+
+ @Test
+ public void validateNullInstanceNameSameCustomizationIdVfModuleInMultipleVnfTest()
+ throws IOException, ValidationException {
+ thrown.expect(ValidationException.class);
+ thrown.expectMessage(
+ "No valid instanceName: instanceName is missing or empty with same modelCustomizationId in userParams vfModule resources is specified");
+ ValidationInformation info = setupValidationInformation(
+ "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json");
+ VfModules vfModule1 = info.getUserParams().getResources().getVnfs().get(0).getVfModules().get(0);
+ VfModules vfModule2 = info.getUserParams().getResources().getVnfs().get(1).getVfModules().get(0);
+ vfModule2.setInstanceName(null);
+ vfModule2.getModelInfo().setModelCustomizationId(vfModule1.getModelInfo().getModelCustomizationId());
+ validation.validate(info);
+ }
+
+ @Test
+ public void validateDuplicateNullInstanceNameSameCustomizationIdVfModuleInMultipleVnfTest()
+ throws IOException, ValidationException {
+ thrown.expect(ValidationException.class);
+ thrown.expectMessage(
+ "No valid instanceName: same instanceName with same modelCustomizationId in userParams vfModule resources is specified");
+ ValidationInformation info = setupValidationInformation(
+ "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json");
+ VfModules vfModule1 = info.getUserParams().getResources().getVnfs().get(0).getVfModules().get(0);
+ VfModules vfModule2 = info.getUserParams().getResources().getVnfs().get(1).getVfModules().get(0);
+ vfModule1.setInstanceName(null);
+ vfModule2.setInstanceName(null);
+ vfModule2.getModelInfo().setModelCustomizationId(vfModule1.getModelInfo().getModelCustomizationId());
+ validation.validate(info);
+ }
+
+ @Test
+ public void validateInstanceNameSameCustomizationIdVfModuleInVnfTest() throws IOException, ValidationException {
+ ValidationInformation info = setupValidationInformation(
+ "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json");
+ VfModules vfModule1 = info.getUserParams().getResources().getVnfs().get(0).getVfModules().get(0);
+ VfModules vfModule2 = info.getUserParams().getResources().getVnfs().get(1).getVfModules().get(0);
+ vfModule2.getModelInfo().setModelCustomizationId(vfModule1.getModelInfo().getModelCustomizationId());
+ validation.validate(info);
+ }
+
+ @Test
+ public void validateNullInstanceNameDifferentCustomizationIdVfModuleInVnfTest()
+ throws IOException, ValidationException {
+ ValidationInformation info = setupValidationInformation(
+ "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json");
+ VfModules vfModule1 = info.getUserParams().getResources().getVnfs().get(0).getVfModules().get(0);
+ vfModule1.setInstanceName(null);
+ VfModules vfModule2 = info.getUserParams().getResources().getVnfs().get(2).getVfModules().get(2);
+ vfModule2.setInstanceName(null);
+ validation.validate(info);
+ }
+
+ @Test
public void validateInstanceNameExceptionTest() throws IOException, ValidationException {
thrown.expect(ValidationException.class);
thrown.expectMessage("instanceName in requestInfo does not match instanceName in userParams service");
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/Network.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/Network.json
index a7d930f756..aa6448e934 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/Network.json
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/Network.json
@@ -72,7 +72,8 @@
"modelName": "201673MowBvL._base_BV..module-0",
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"
- },
+ },
+ "instanceName": "vfModule1",
"instanceParams": [
{
"vmx_int_net_len": "24",
@@ -86,7 +87,8 @@
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "72d9d1cd-f46d-447a-abdb-451d6fb05fa8",
"modelType": "vfModule"
- },
+ },
+ "instanceName": "vfModule2",
"instanceParams": [
{
"availability_zone_0": "mtpocdv-kvm-az01",
@@ -99,7 +101,8 @@
"modelName": "201673MowBvL._vRE_BV..module-1",
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "72d9d1cd-f46d-447a-abdb-451d6fb05fa8"
- },
+ },
+ "instanceName": "vfModule3",
"instanceParams": [
{
"availability_zone_0": "mtpocdv-kvm-az01",
@@ -112,7 +115,8 @@
"modelName": "201673MowBvL._vPFE_BV..module-2",
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "da4d4327-fb7d-4311-ac7a-be7ba60cf969"
- },
+ },
+ "instanceName": "vfModule4",
"instanceParams": [
{
"availability_zone_0": "mtpocdv-kvm-az01",
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/NetworkCloudConfig.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/NetworkCloudConfig.json
index 75e8fb5cd1..c93b49a992 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/NetworkCloudConfig.json
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/NetworkCloudConfig.json
@@ -72,7 +72,8 @@
"modelName": "201673MowBvL._base_BV..module-0",
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"
- },
+ },
+ "instanceName": "vfModule1",
"instanceParams": [
{
"vmx_int_net_len": "24",
@@ -86,7 +87,8 @@
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "72d9d1cd-f46d-447a-abdb-451d6fb05fa8",
"modelType": "vfModule"
- },
+ },
+ "instanceName": "vfModule2",
"instanceParams": [
{
"availability_zone_0": "mtpocdv-kvm-az01",
@@ -99,7 +101,8 @@
"modelName": "201673MowBvL._vRE_BV..module-1",
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "72d9d1cd-f46d-447a-abdb-451d6fb05fa8"
- },
+ },
+ "instanceName": "vfModule3",
"instanceParams": [
{
"availability_zone_0": "mtpocdv-kvm-az01",
@@ -112,7 +115,8 @@
"modelName": "201673MowBvL._vPFE_BV..module-2",
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "da4d4327-fb7d-4311-ac7a-be7ba60cf969"
- },
+ },
+ "instanceName": "vfModule4",
"instanceParams": [
{
"availability_zone_0": "mtpocdv-kvm-az01",
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/NetworkModelCustomizationId.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/NetworkModelCustomizationId.json
index baf620b668..a81cfd001a 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/NetworkModelCustomizationId.json
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/NetworkModelCustomizationId.json
@@ -72,7 +72,8 @@
"modelName": "201673MowBvL._base_BV..module-0",
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"
- },
+ },
+ "instanceName": "vfModule1",
"instanceParams": [
{
"vmx_int_net_len": "24",
@@ -86,7 +87,8 @@
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "72d9d1cd-f46d-447a-abdb-451d6fb05fa8",
"modelType": "vfModule"
- },
+ },
+ "instanceName": "vfModule2",
"instanceParams": [
{
"availability_zone_0": "mtpocdv-kvm-az01",
@@ -99,7 +101,8 @@
"modelName": "201673MowBvL._vRE_BV..module-1",
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "72d9d1cd-f46d-447a-abdb-451d6fb05fa8"
- },
+ },
+ "instanceName": "vfModule3",
"instanceParams": [
{
"availability_zone_0": "mtpocdv-kvm-az01",
@@ -112,7 +115,8 @@
"modelName": "201673MowBvL._vPFE_BV..module-2",
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "da4d4327-fb7d-4311-ac7a-be7ba60cf969"
- },
+ },
+ "instanceName": "vfModule4",
"instanceParams": [
{
"availability_zone_0": "mtpocdv-kvm-az01",
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/NetworkModelVersionId.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/NetworkModelVersionId.json
index 6c152855ee..148abbc4bb 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/NetworkModelVersionId.json
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/RequestParameters/NetworkModelVersionId.json
@@ -72,7 +72,8 @@
"modelName": "201673MowBvL._base_BV..module-0",
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"
- },
+ },
+ "instanceName": "vfModule1",
"instanceParams": [
{
"vmx_int_net_len": "24",
@@ -86,7 +87,8 @@
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "72d9d1cd-f46d-447a-abdb-451d6fb05fa8",
"modelType": "vfModule"
- },
+ },
+ "instanceName": "vfModule2",
"instanceParams": [
{
"availability_zone_0": "mtpocdv-kvm-az01",
@@ -99,7 +101,8 @@
"modelName": "201673MowBvL._vRE_BV..module-1",
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "72d9d1cd-f46d-447a-abdb-451d6fb05fa8"
- },
+ },
+ "instanceName": "vfModule3",
"instanceParams": [
{
"availability_zone_0": "mtpocdv-kvm-az01",
@@ -112,7 +115,8 @@
"modelName": "201673MowBvL._vPFE_BV..module-2",
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "da4d4327-fb7d-4311-ac7a-be7ba60cf969"
- },
+ },
+ "instanceName": "vfModule4",
"instanceParams": [
{
"availability_zone_0": "mtpocdv-kvm-az01",
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/SuccessfulValidation/ServiceAssign.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/SuccessfulValidation/ServiceAssign.json
index bc6f8fc610..d8bfcc2d5b 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/SuccessfulValidation/ServiceAssign.json
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/MsoRequestTest/SuccessfulValidation/ServiceAssign.json
@@ -72,7 +72,8 @@
"modelName": "201673MowBvL._base__BV..module-0",
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"
- },
+ },
+ "instanceName": "vfModule1",
"instanceParams": [
{
"vmx_int_net_len": "24",
@@ -86,7 +87,8 @@
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "72d9d1cd-f46d-447a-abdb-451d6fb05fa8",
"modelType": "vfModule"
- },
+ },
+ "instanceName": "vfModule2",
"instanceParams": [
{
"availability_zone_0": "mtpocdv-kvm-az01",
@@ -99,7 +101,8 @@
"modelName": "201673MowBvL._vRE_BV..module-1",
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "72d9d1cd-f46d-447a-abdb-451d6fb05fa8"
- },
+ },
+ "instanceName": "vfModule3",
"instanceParams": [
{
"availability_zone_0": "mtpocdv-kvm-az01",
@@ -112,7 +115,8 @@
"modelName": "201673MowBvL._vPFE_BV..module-2",
"modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
"modelCustomizationId": "da4d4327-fb7d-4311-ac7a-be7ba60cf969"
- },
+ },
+ "instanceName": "vfModule4",
"instanceParams": [
{
"availability_zone_0": "mtpocdv-kvm-az01",
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/ServiceInstanceTest/ServiceAssign.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/ServiceInstanceTest/ServiceAssign.json
index fd8b7c4e69..1efb0c1243 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/resources/ServiceInstanceTest/ServiceAssign.json
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/ServiceInstanceTest/ServiceAssign.json
@@ -75,6 +75,7 @@
"modelVersionId":"4c75f813-fa91-45a4-89d0-790ff5f1ae79",
"modelCustomizationId":"a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"
},
+ "instanceName": "vfModule1",
"instanceParams":[
{
"vmx_int_net_len":"24"
@@ -88,6 +89,7 @@
"modelVersionId":"56e2b103-637c-4d1a-adc8-3a7f4a6c3240",
"modelCustomizationId":"72d9d1cd-f46d-447a-abdb-451d6fb05fa8"
},
+ "instanceName": "vfModule2",
"instanceParams":[
{
"availability_zone_0":"mtpocdv-kvm-az01",
@@ -102,6 +104,7 @@
"modelVersionId":"56e2b103-637c-4d1a-adc8-3a7f4a6c3240",
"modelCustomizationId":"72d9d1cd-f46d-447a-abdb-451d6fb05fa8"
},
+ "instanceName": "vfModule3",
"instanceParams":[
{
"availability_zone_0":"mtpocdv-kvm-az01",
@@ -116,6 +119,7 @@
"modelVersionId":"f555558f-d538-4876-8ffa-b102650fad64",
"modelCustomizationId":"da4d4327-fb7d-4311-ac7a-be7ba60cf969"
},
+ "instanceName": "vfModule4",
"instanceParams":[
{
"availability_zone_0":"mtpocdv-kvm-az01",
@@ -132,4 +136,4 @@
]
}
}
-} \ No newline at end of file
+}
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json
new file mode 100644
index 0000000000..19106202a4
--- /dev/null
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNames.json
@@ -0,0 +1,193 @@
+{
+ "requestDetails": {
+ "subscriberInfo": {
+ "globalSubscriberId": "ubuntu-customer"
+ },
+ "requestInfo": {
+ "suppressRollback": false,
+ "instanceName": "ThreeVNFTest",
+ "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "requestorId": "portal",
+ "source": "postman"
+ },
+ "requestParameters": {
+ "subscriptionServiceType": "ubuntu",
+ "userParams": [
+ {
+ "service": {
+ "instanceParams": [],
+ "resources": {
+ "vnfs": [
+ {
+ "modelInfo": {
+ "modelName": "UbuntuVF",
+ "modelVersionId": "9306f24c-2b99-46d9-a92c-2236199555bd",
+ "modelInvariantUuid": "5bd13140-11b6-4975-b6ee-e496d9a0cf0d",
+ "modelVersion": "3.0",
+ "modelCustomizationId": "435f34f8-1701-4276-ae39-47ad03bad782",
+ "modelInstanceName": "UbuntuVF 0"
+ },
+ "cloudConfiguration": {
+ },
+ "platform": {
+ "platformName": "test"
+ },
+ "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "instanceName": "UbuntuVNF1",
+ "instanceParams": [
+ {
+ "vnf-name": "vnf-vnf-name",
+ "vnf_name": "UbuntuVNFName"
+ }
+ ],
+ "vfModules": [
+ {
+ "modelInfo": {
+ "modelName": "Ubuntuvf..base..module-0",
+ "modelVersionId": "c9de87ba-9d2a-44df-94c4-68aad72947e8",
+ "modelInvariantUuid": "51aaa747-68e7-4313-9717-9d32c752bbdf",
+ "modelVersion": "1",
+ "modelCustomizationId": "25409778-c4b0-448c-aa45-89c0a2cc4165"
+ },
+ "instanceName": "lcm-demo-network-1",
+ "instanceParams": [
+ {
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "modelInfo": {
+ "modelName": "UbuntuBVF",
+ "modelVersionId": "0e5c37c2-8c35-4ff8-a538-803a5f44aeb5",
+ "modelInvariantUuid": "cf4ac32e-88b8-4fff-b5fc-9ebe2b7251f8",
+ "modelVersion": "1.0",
+ "modelCustomizationId": "e774a853-4a47-4a88-b5b4-9324f1d7f6a7",
+ "modelInstanceName": "UbuntuBVF 0"
+ },
+ "cloudConfiguration": {
+ },
+ "platform": {
+ "platformName": "test"
+ },
+ "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "instanceName": "UbuntuVNF2",
+ "instanceParams": [
+ {
+ "vnf-name": "vnf-vnf-name",
+ "vnf_name": "UbuntuVNFName2"
+ }
+ ],
+ "vfModules": [
+ {
+ "modelInfo": {
+ "modelName": "Ubuntubvf..ubuntu-vf-module..module-1",
+ "modelVersionId": "548fa27f-d9d7-498f-9292-4c1ddcf79d2d",
+ "modelInvariantUuid": "7689624d-fdcd-40a5-acf1-93f5ef1a5a59",
+ "modelVersion": "1",
+ "modelCustomizationId": "c8db1431-ffbe-4978-9b28-b310ca2c7d93"
+ },
+ "instanceName": "lcm-demo-ubuntu-1",
+ "instanceParams": [
+ {
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "modelInfo": {
+ "modelName": "UbuntuBVF",
+ "modelVersionId": "0e5c37c2-8c35-4ff8-a538-803a5f44aeb5",
+ "modelInvariantUuid": "cf4ac32e-88b8-4fff-b5fc-9ebe2b7251f8",
+ "modelVersion": "1.0",
+ "modelCustomizationId": "e774a853-4a47-4a88-b5b4-9324f1d7f6a7",
+ "modelInstanceName": "UbuntuBVF 0"
+ },
+ "cloudConfiguration": {
+ },
+ "platform": {
+ "platformName": "test"
+ },
+ "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "instanceName": "UbuntuVNF3",
+ "instanceParams": [
+ {
+ "vnf-name": "vnf-vnf-name",
+ "vnf_name": "UbuntuVNFName3"
+ }
+ ],
+ "vfModules": [
+ {
+ "modelInfo": {
+ "modelName": "Ubuntubvf..ubuntu-vf-module..module-1",
+ "modelVersionId": "548fa27f-d9d7-498f-9292-4c1ddcf79d2d",
+ "modelInvariantUuid": "7689624d-fdcd-40a5-acf1-93f5ef1a5a59",
+ "modelVersion": "1",
+ "modelCustomizationId": "c8db1431-ffbe-4978-9b28-b310ca2c7d93"
+ },
+ "instanceName": "lcm-demo-ubuntu-2",
+ "instanceParams": [
+ {
+ }
+ ]
+ },
+ {
+ "modelInfo": {
+ "modelName": "Ubuntubvf..ubuntu-vf-module..module-1",
+ "modelVersionId": "548fa27f-d9d7-498f-9292-4c1ddcf79d2d",
+ "modelInvariantUuid": "7689624d-fdcd-40a5-acf1-93f5ef1a5a59",
+ "modelVersion": "1",
+ "modelCustomizationId": "c8db1431-ffbe-4978-9b28-b310ca2c7d93"
+ },
+ "instanceName": "lcm-demo-ubuntu-3",
+ "instanceParams": [
+ {
+ }
+ ]
+ },
+ {
+ "modelInfo": {
+ "modelName": "Ubuntunosriov..base..module-0",
+ "modelVersionId": "bcc8ef84-b367-40c0-8a5d-ceabdc1785e0",
+ "modelInvariantUuid": "f3927419-9e68-4883-b861-20c8412872d7",
+ "modelVersion": "1",
+ "modelCustomizationId": "ee848516-4e08-4b30-8ed0-d411bb059842"
+ },
+ "instanceName": "ubuntu-demo-mp-network-1",
+ "instanceParams": [
+ {
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "modelInfo": {
+ "modelVersion": "2.0",
+ "modelVersionId": "3a9ff92f-dc19-4f05-930d-d238939d508b",
+ "modelInvariantId": "115405d8-6944-407d-b0ae-6b7155754643",
+ "modelName": "Ubuntu3VNFService",
+ "modelType": "service"
+ }
+ }
+ }
+ ],
+ "aLaCarte": false
+ },
+ "project": {
+ "projectName": "Project-test"
+ },
+ "owningEntity": {
+ },
+ "modelInfo": {
+ "modelVersion": "2.0",
+ "modelVersionId": "3a9ff92f-dc19-4f05-930d-d238939d508b",
+ "modelInvariantId": "115405d8-6944-407d-b0ae-6b7155754643",
+ "modelName": "Ubuntu3VNFService",
+ "modelType": "service"
+ }
+ }
+} \ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 49d4b75f59..879a3eee72 100644
--- a/pom.xml
+++ b/pom.xml
@@ -74,7 +74,7 @@
<appc.client.version>1.7.2</appc.client.version>
<bowman.client.version>0.9.0</bowman.client.version>
<aaf.cadi.version>2.1.15</aaf.cadi.version>
- <so-etsi-sol003-adapter-version>1.8.1-SNAPSHOT</so-etsi-sol003-adapter-version>
+ <so-etsi-sol003-adapter-version>1.9.0-SNAPSHOT</so-etsi-sol003-adapter-version>
<onap-logging-version>1.6.9</onap-logging-version>
</properties>
<distributionManagement>