summaryrefslogtreecommitdiffstats
path: root/appc-sequence-generator/appc-sequence-generator-bundle
diff options
context:
space:
mode:
authorRamya Balaji <rb111y@att.com>2018-01-02 21:58:59 -0500
committerSkip Wonnell <skip@att.com>2018-01-04 21:10:36 +0000
commit13b9505921e2cbbd4b155a78bfdaa5caa3375ec0 (patch)
tree7c661f5c3c8b7895cad1d4c3c90b9077ba74c1fd /appc-sequence-generator/appc-sequence-generator-bundle
parent9ebb5ddcb60345dea668049c73f5f2d9c3cdf731 (diff)
Updated SDC listener and dependent bundles
Changes related to SDC adapter.Also includes sequence generator changes and changes to appc-dg-shared. Issue-ID: APPC-355 Change-Id: Ib8a0b1d304199db6d2595291539b266885842d63 Signed-off-by: Ramya Balaji <rb111y@att.com>
Diffstat (limited to 'appc-sequence-generator/appc-sequence-generator-bundle')
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/dgplugin/impl/SequenceGeneratorPluginImpl.java123
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/RestartSequenceGenerator.java108
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/SequenceGeneratorFactory.java4
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/StartSequenceGenerator.java144
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/StopSequenceGenerator.java141
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/objects/Constants.java11
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/provider/SequenceGeneratorProvider.java309
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/test/java/org/onap/appc/seqgen/TestSequenceGeneratorPlugin.java146
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/CheckMandatoryVnfc.json124
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/MissingDependencyInfo.json133
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/NoDep-SingleVM.json38
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/WrongDependencyModel.json117
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/cyclic.json155
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/missingrequestinfo.json147
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/no-strategy.json150
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/restartNodep.json97
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start-singleVM-.json42
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start-singleVmPerVnfc-.json51
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start-withoutDependency.json114
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start.json310
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop-WithoutDep.json142
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop-singleVM.json42
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop-singleVmPerVnfc.json50
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop.json153
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/wrongaction.json321
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/wrongnumber.json321
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/Output-stop.json3
-rw-r--r--appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/Start.json2
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/restart-NoDep.json1
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/restart-Nodep-SingleVM.json4
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/start-singleVM-.json3
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/start-singleVmPerVnfc.json3
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/start-withoutDependency.json1
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/stop-WithoutDep.json3
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/stop-singleVM.json3
-rwxr-xr-xappc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/stop-singleVmPerVnfc.json3
36 files changed, 2297 insertions, 1222 deletions
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/dgplugin/impl/SequenceGeneratorPluginImpl.java b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/dgplugin/impl/SequenceGeneratorPluginImpl.java
index c0ea4134c..8e44bc3bd 100644
--- a/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/dgplugin/impl/SequenceGeneratorPluginImpl.java
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/dgplugin/impl/SequenceGeneratorPluginImpl.java
@@ -27,8 +27,10 @@ import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.commons.lang3.StringUtils;
-import org.onap.appc.dg.objects.*;
+import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException;
+import org.onap.appc.dg.objects.InventoryModel;
+import org.onap.appc.dg.objects.Node;
+import org.onap.appc.dg.objects.VnfcDependencyModel;
import org.onap.appc.domainmodel.Vnf;
import org.onap.appc.domainmodel.Vnfc;
import org.onap.appc.domainmodel.Vserver;
@@ -43,7 +45,12 @@ import org.onap.appc.seqgen.objects.Transaction;
import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
import java.io.IOException;
-import java.util.*;
+import java.util.Map;
+import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.HashMap;
+import java.util.LinkedList;
public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
@@ -79,6 +86,9 @@ public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
sequenceGeneratorInput.setInventoryModel(inventoryModel);
VnfcDependencyModel dependencyModel = buildDependencyModel(inputJson);
+ if(dependencyModel!=null){
+ validateInventoryModelWithDependencyModel(dependencyModel,inventoryModel);
+ }
sequenceGeneratorInput.setDependencyModel(dependencyModel);
return sequenceGeneratorInput;
@@ -92,13 +102,54 @@ public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
if (operation == null) {
throw new APPCException("Invalid Action " + action);
}
+ if(Constants.ActionLevel.findByString(sequenceGeneratorInput.getRequestInfo().getActionLevel().toUpperCase())==null){
+ throw new APPCException("Invalid Action Level " + sequenceGeneratorInput.getRequestInfo().getActionLevel());
+ }
SequenceGenerator sequenceGenerator = SequenceGeneratorFactory.getInstance().createSequenceGenerator(operation);
return sequenceGenerator.generateSequence(sequenceGeneratorInput);
}
+ private void validateInventoryModelWithDependencyModel(VnfcDependencyModel dependencyModel, InventoryModel inventoryModel) throws APPCException {
+ Set<String> dependencyModelVnfcSet = new HashSet<>();
+ Set<String> dependencyModelMandatoryVnfcSet = new HashSet<>();
+ Set<String> inventoryModelVnfcsSet = new HashSet<>();
+
+ for (Node<Vnfc> node : dependencyModel.getDependencies()) {
+ dependencyModelVnfcSet.add(node.getChild().getVnfcType().toLowerCase());
+ if (node.getChild().isMandatory()) {
+ dependencyModelMandatoryVnfcSet.add(node.getChild().getVnfcType().toLowerCase());
+ }
+ }
+
+ for (Vnfc vnfc : inventoryModel.getVnf().getVnfcs()) {
+ inventoryModelVnfcsSet.add(vnfc.getVnfcType().toLowerCase());
+ }
+
+ // if dependency model and inventory model contains same set of VNFCs, validation succeed and hence return
+ if (dependencyModelVnfcSet.equals(inventoryModelVnfcsSet)) {
+ return;
+ }
+
+ if (inventoryModelVnfcsSet.size() >= dependencyModelVnfcSet.size()) {
+ Set<String> difference = new HashSet<>(inventoryModelVnfcsSet);
+ difference.removeAll(dependencyModelVnfcSet);
+ logger.error("Dependency model is missing following vnfc type(s): " + difference);
+ throw new APPCException("Dependency model is missing following vnfc type(s): " + difference);
+ } else {
+ Set<String> difference = new HashSet<>(dependencyModelMandatoryVnfcSet);
+ difference.removeAll(inventoryModelVnfcsSet);
+ if (difference.size() > 0) {
+ logger.error("Inventory model is missing following mandatory vnfc type(s): " + difference);
+ throw new APPCException("VMs missing for the mandatory VNFC : " + difference);
+ }
+ }
+ }
+
// Dependency model is an optional attribute and may contain null values
private VnfcDependencyModel buildDependencyModel(String inputJson) throws IOException, APPCException {
Set<Node<Vnfc>> dependency = new HashSet<>();
+ Set<String> parentVnfcs=new HashSet<>();
+ Set<String> allVnfcTypes=new HashSet<>();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
JsonNode rootNode = objectMapper.readTree(inputJson);
@@ -106,9 +157,13 @@ public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
if (vnfcs != null) {
for (JsonNode vnfcNode : vnfcs) {
String vnfcType = readVnfcType(vnfcNode);
+ allVnfcTypes.add(vnfcType);
String mandatory = readMandatory(vnfcNode);
String resilience = readResilience(vnfcNode);
- Vnfc vnfc = new Vnfc(vnfcType, resilience, null, Boolean.parseBoolean(mandatory));
+ Vnfc vnfc = new Vnfc();
+ vnfc.setVnfcType(vnfcType);
+ vnfc.setResilienceType(resilience);
+ vnfc.setMandatory(Boolean.parseBoolean(mandatory));
Node<Vnfc> currentNode = getNode(dependency, vnfcType);
if (currentNode == null) {
currentNode = new Node<>(vnfc);
@@ -120,11 +175,14 @@ public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
JsonNode parents = vnfcNode.get("parents");
for (JsonNode parent : parents) {
String parentVnfcType = parent.asText();
+ parentVnfcs.add(parentVnfcType);
Node<Vnfc> parentNode = getNode(dependency, parentVnfcType);
if (parentNode != null) {
currentNode.addParent(parentNode.getChild());
} else {
- Vnfc parentVnfc = new Vnfc(parentVnfcType, null, null, false);
+ Vnfc parentVnfc=new Vnfc();
+ parentVnfc.setVnfcType(parentVnfcType);
+ parentVnfc.setMandatory(false);
parentNode = new Node<>(parentVnfc);
currentNode.addParent(parentVnfc);
dependency.add(parentNode);
@@ -132,6 +190,11 @@ public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
}
}
+ for(String parent:parentVnfcs){
+ if(!allVnfcTypes.contains(parent)){
+ throw new APPCException("Dependency model missing vnfc type "+parent);
+ }
+ }
return new VnfcDependencyModel(dependency);
}
return null;
@@ -184,7 +247,6 @@ public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
private InventoryModel buildInventoryModel(String inputJson) throws IOException, APPCException {
ObjectMapper objectMapper = new ObjectMapper();
- objectMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
JsonNode jsonNode = objectMapper.readTree(inputJson);
JsonNode inventoryInfo = jsonNode.get("inventory-info");
if (inventoryInfo == null) {
@@ -197,45 +259,40 @@ public class SequenceGeneratorPluginImpl implements SequenceGeneratorPlugin {
String vnfId = vnfInfo.get("vnf-id").asText();
String vnfType = vnfInfo.get("vnf-type").asText();
- String vnfVersion = vnfInfo.get("vnf-version").asText();
-
- Vnf vnf = new Vnf(vnfId, vnfType, vnfVersion);
-
- JsonNode vms = vnfInfo.get("vm");
-
+ Vnf vnf =new Vnf();
+ vnf.setVnfId(vnfId);
+ vnf.setVnfType(vnfType);
Map<Vnfc, List<Vserver>> vfcs = new HashMap<>();
+ JsonNode vms = vnfInfo.get("vm");
+ if(vms.size()<1){
+ throw new APPCException("vm info not provided in the input");
+ }
for (JsonNode vm : vms) {
if(vm.get("vserver-id")== null){
throw new APPCException("vserver-id not found ");
}
String vserverId = vm.get("vserver-id").asText();
- Vserver vserver = new Vserver(null, null, vserverId, null, null);
- JsonNode vnfc = vm.get("vnfc");
- if (vnfc.get("vnfc-name") == null) {
- throw new APPCException("vnfc-name not found for vserver " + vserverId);
- }
- String vnfcName = vnfc.get("vnfc-name").asText();
- if (vnfc.get("vnfc-type") == null) {
- throw new APPCException("vnfc-type not found for vserver " + vserverId);
- }
- String vnfcType = vnfc.get("vnfc-type").asText();
- if (StringUtils.isEmpty(vnfcType)) {
- throw new APPCException("vserver " + vserverId + " is not associated with any vnfc");
- }
- Vnfc vfc = new Vnfc(vnfcType, null, vnfcName);
- List<Vserver> vServers = vfcs.get(vfc);
- if (vServers == null) {
- vServers = new LinkedList<>();
- vfcs.put(vfc, vServers);
+ Vserver vserver = new Vserver();
+ vserver.setId(vserverId);
+ if (vm.get("vnfc")!=null&& vm.get("vnfc").get("vnfc-name") != null && vm.get("vnfc").get("vnfc-type")!= null) {
+ Vnfc vfc = new Vnfc();
+ vfc.setVnfcType(vm.get("vnfc").get("vnfc-type").asText());
+ vfc.setVnfcName(vm.get("vnfc").get("vnfc-name").asText());
+ vserver.setVnfc(vfc);
+ List<Vserver> vServers = vfcs.get(vfc);
+ if (vServers == null) {
+ vServers = new LinkedList<>();
+ vfcs.put(vfc, vServers);
+ }
+ vServers.add(vserver);
}
- vServers.add(vserver);
+ vnf.addVserver(vserver);
}
for (Map.Entry<Vnfc, List<Vserver>> entry : vfcs.entrySet()) {
Vnfc vnfc = entry.getKey();
List<Vserver> vServers = vfcs.get(vnfc);
- vnfc.addVms(vServers);
- vnf.addVnfc(vnfc);
+ vnfc.addVservers(vServers);
}
return new InventoryModel(vnf);
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/RestartSequenceGenerator.java b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/RestartSequenceGenerator.java
new file mode 100644
index 000000000..49fad50de
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/RestartSequenceGenerator.java
@@ -0,0 +1,108 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * 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.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.appc.seqgen.impl;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import org.onap.appc.domainmodel.Vserver;
+import org.onap.appc.exceptions.APPCException;
+import org.onap.appc.seqgen.SequenceGenerator;
+import org.onap.appc.seqgen.objects.ActionIdentifier;
+import org.onap.appc.seqgen.objects.Constants;
+import org.onap.appc.seqgen.objects.Response;
+import org.onap.appc.seqgen.objects.SequenceGeneratorInput;
+import org.onap.appc.seqgen.objects.Transaction;;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+public class RestartSequenceGenerator implements SequenceGenerator{
+ private static final EELFLogger logger = EELFManager.getInstance().getLogger(RestartSequenceGenerator.class);
+
+ @Override
+ public List<Transaction> generateSequence(SequenceGeneratorInput input) throws APPCException {
+ logger.info("Generating sequence without dependency model");
+ return generateSequenceWithOutDependency(input);
+ }
+
+ private List<Transaction> generateSequenceWithOutDependency(SequenceGeneratorInput input) {
+ List<Transaction> transactionList = new LinkedList<>();
+ Integer transactionId = 1;
+ List<Vserver> vservers = input.getInventoryModel().getVnf().getVservers();
+ List<Integer> transactionIds = new LinkedList<>();
+ for (Vserver vm : vservers) {
+ Transaction transactionStop = new Transaction();
+ transactionStop.setTransactionId(transactionId);
+ transactionIds.add(transactionId++);
+ transactionStop.setAction(Constants.Action.STOP.getActionType());
+ transactionStop.setActionLevel(Constants.ActionLevel.VM.getAction());
+ ActionIdentifier actionIdentifier = new ActionIdentifier();
+ actionIdentifier.setvServerId(vm.getId());
+ transactionStop.setActionIdentifier(actionIdentifier);
+ transactionStop.setPayload(input.getRequestInfo().getPayload());
+ if (vservers.size()>1) {
+ Response failureResponse = new Response();
+ failureResponse.setResponseMessage(Constants.ResponseMessage.FAILURE.getResponse());
+ Map<String,String> failureAction = new HashMap<>();
+ if(!checkLastVM(vservers,vm.getId()))
+ {
+ failureAction.put(Constants.ResponseAction.JUMP.getAction(), String.valueOf(transactionId+1));
+ failureResponse.setResponseAction(failureAction);
+ transactionStop.addResponse(failureResponse);
+ }
+ }
+ transactionList.add(transactionStop);
+ Transaction transactionStart = new Transaction();
+ transactionStart.setTransactionId(transactionId);
+ transactionIds.add(transactionId++);
+ transactionStart.setAction(Constants.Action.START.getActionType());
+ transactionStart.setActionLevel(Constants.ActionLevel.VM.getAction());
+ ActionIdentifier actionIdentifierStart = new ActionIdentifier();
+ actionIdentifierStart.setvServerId(vm.getId());
+ transactionStart.setActionIdentifier(actionIdentifierStart);
+ transactionStart.setPayload(input.getRequestInfo().getPayload());
+ if (vservers.size()>1) {
+ Response failureResponse = new Response();
+ failureResponse.setResponseMessage(Constants.ResponseMessage.FAILURE.getResponse());
+ Map<String,String> failureAction = new HashMap<>();
+ if(!checkLastVM(vservers,vm.getId()))
+ {
+ failureAction.put(Constants.ResponseAction.JUMP.getAction(),transactionId.toString());
+ failureResponse.setResponseAction(failureAction);
+ transactionStart.addResponse(failureResponse);
+ }
+ }
+ transactionList.add(transactionStart);
+ }
+ return transactionList;
+ }
+
+ private boolean checkLastVM(List<Vserver> vservers, String vmId){
+ Vserver vm= vservers.get(vservers.size()-1);
+ return vm.getId().equals(vmId);
+ }
+}
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/SequenceGeneratorFactory.java b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/SequenceGeneratorFactory.java
index 3c6a11962..15d88c9cf 100644
--- a/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/SequenceGeneratorFactory.java
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/SequenceGeneratorFactory.java
@@ -47,7 +47,9 @@ public class SequenceGeneratorFactory {
return new StartSequenceGenerator();
case Stop:
return new StopSequenceGenerator();
- default:
+ case Restart:
+ return new RestartSequenceGenerator();
+ default:
throw new APPCException("Sequence Generator does not support operation " + operation.name());
}
}
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/StartSequenceGenerator.java b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/StartSequenceGenerator.java
index dcffaafd8..9c9ba8dd8 100644
--- a/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/StartSequenceGenerator.java
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/StartSequenceGenerator.java
@@ -24,6 +24,7 @@ import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
import org.apache.commons.lang3.StringUtils;
import org.onap.appc.dg.flowbuilder.FlowBuilder;
+import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException;
import org.onap.appc.dg.flowbuilder.impl.FlowBuilderFactory;
import org.onap.appc.dg.objects.FlowStrategies;
import org.onap.appc.dg.objects.InventoryModel;
@@ -33,11 +34,30 @@ import org.onap.appc.domainmodel.Vnfc;
import org.onap.appc.domainmodel.Vserver;
import org.onap.appc.exceptions.APPCException;
import org.onap.appc.seqgen.SequenceGenerator;
-import org.onap.appc.seqgen.objects.*;
+import org.onap.appc.seqgen.objects.ActionIdentifier;
+import org.onap.appc.seqgen.objects.Constants;
+import org.onap.appc.seqgen.objects.PreCheckOption;
+import org.onap.appc.seqgen.objects.Response;
+import org.onap.appc.seqgen.objects.SequenceGeneratorInput;
+import org.onap.appc.seqgen.objects.Transaction;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
-import static org.onap.appc.seqgen.objects.Constants.*;
+import static org.onap.appc.seqgen.objects.Constants.Action;
+import static org.onap.appc.seqgen.objects.Constants.ActionLevel;
+import static org.onap.appc.seqgen.objects.Constants.ResponseAction;
+import static org.onap.appc.seqgen.objects.Constants.ResponseMessage;
+import static org.onap.appc.seqgen.objects.Constants.PreCheckOperator;
+import static org.onap.appc.seqgen.objects.Constants.Capabilties;
+import static org.onap.appc.seqgen.objects.Constants.CapabilityLevel;
+import static org.onap.appc.seqgen.objects.Constants.RETRY_COUNT_VALUE;
+import static org.onap.appc.seqgen.objects.Constants.WAIT_TIME;
+import static org.onap.appc.seqgen.objects.Constants.RETRY_COUNT;
+import static org.onap.appc.seqgen.objects.Constants.WAIT_TIME_VALUE;;
public class StartSequenceGenerator implements SequenceGenerator {
@@ -47,27 +67,27 @@ public class StartSequenceGenerator implements SequenceGenerator {
List<Transaction> transactionList = new LinkedList<>();
Integer transactionId = 1;
- List<Vnfc> invVnfcList = input.getInventoryModel().getVnf().getVnfcs();
- boolean singleTransaction=checkSingleTransaction(invVnfcList);
- for (Vnfc vnfc : invVnfcList) {
- List<Vserver> vms = vnfc.getVserverList();
- List<Integer> transactionIds = new LinkedList<>();
- for (Vserver vm : vms) {
- Transaction transaction = new Transaction();
- transaction.setTransactionId(transactionId);
- transactionIds.add(transactionId++);
- transaction.setAction(Action.START.getActionType());
- transaction.setActionLevel(ActionLevel.VM.getAction());
- ActionIdentifier actionIdentifier = new ActionIdentifier();
- actionIdentifier.setvServerId(vm.getId());
- transaction.setActionIdentifier(actionIdentifier);
- transaction.setPayload(input.getRequestInfo().getPayload());
- if(!singleTransaction){
- updateResponse(transaction);
- }
-
- transactionList.add(transaction);
+ List<Vserver> vservers = input.getInventoryModel().getVnf().getVservers();
+ List<Integer> transactionIds = new LinkedList<>();
+ for (Vserver vm : vservers) {
+ Transaction transaction = new Transaction();
+ transaction.setTransactionId(transactionId);
+ transactionIds.add(transactionId++);
+ transaction.setAction(Action.START.getActionType());
+ transaction.setActionLevel(ActionLevel.VM.getAction());
+ ActionIdentifier actionIdentifier = new ActionIdentifier();
+ actionIdentifier.setvServerId(vm.getId());
+ transaction.setActionIdentifier(actionIdentifier);
+ transaction.setPayload(input.getRequestInfo().getPayload());
+ if(vservers.size()>1){
+ Response ignoreResponse = new Response();
+ ignoreResponse.setResponseMessage(ResponseMessage.FAILURE.getResponse());
+ Map<String, String> ignoreAction = new HashMap<>();
+ ignoreAction.put(ResponseAction.IGNORE.getAction(), Boolean.TRUE.toString());
+ ignoreResponse.setResponseAction(ignoreAction);
+ transaction.addResponse(ignoreResponse);
}
+ transactionList.add(transaction);
}
return transactionList;
}
@@ -112,7 +132,12 @@ public class StartSequenceGenerator implements SequenceGenerator {
actionIdentifier.setvServerId(vm.getId());
transaction.setActionIdentifier(actionIdentifier);
transaction.setPayload(input.getRequestInfo().getPayload());
- updateResponse(transaction);
+ Response ignoreResponse = new Response();
+ ignoreResponse.setResponseMessage(ResponseMessage.FAILURE.getResponse());
+ Map<String, String> ignoreAction = new HashMap<>();
+ ignoreAction.put(ResponseAction.IGNORE.getAction(), Boolean.TRUE.toString());
+ ignoreResponse.setResponseAction(ignoreAction);
+ transaction.addResponse(ignoreResponse);
transactionList.add(transaction);
}
boolean startApplicationSupported = readApplicationStartCapability(input);
@@ -126,10 +151,7 @@ public class StartSequenceGenerator implements SequenceGenerator {
startAppTransaction.setActionIdentifier(startActionIdentifier);
startAppTransaction.setPayload(input.getRequestInfo().getPayload());
- List<PreCheckOption> preCheckOptions = new LinkedList<>();
- for (Integer vmTransactionId : transactionIds) {
- setPreCheckOptions(preCheckOptions, vmTransactionId);
- }
+ List<PreCheckOption> preCheckOptions = buildPreCheckOptions(transactionIds);
startAppTransaction.setPreCheckOperator(PreCheckOperator.ANY.getOperator());
startAppTransaction.setPrecheckOptions(preCheckOptions);
transactionList.add(startAppTransaction);
@@ -174,32 +196,42 @@ public class StartSequenceGenerator implements SequenceGenerator {
return transactionList;
}
- private void setPreCheckOptions(List<PreCheckOption> preCheckOptions, Integer vmTransactionId) {
- PreCheckOption option = new PreCheckOption();
- option.setPreTransactionId(vmTransactionId);
- option.setParamName("status");
- option.setParamValue("success");
- preCheckOptions.add(option);
+ private List<PreCheckOption> buildPreCheckOptions(List<Integer> transactionIds) {
+ List<PreCheckOption> preCheckOptions = new LinkedList<>();
+ for (Integer vmTransactionId : transactionIds) {
+ PreCheckOption option = new PreCheckOption();
+ option.setPreTransactionId(vmTransactionId);
+ option.setParamName("status");
+ option.setParamValue("success");
+ preCheckOptions.add(option);
+ }
+ return preCheckOptions;
}
@Override
public List<Transaction> generateSequence(SequenceGeneratorInput input) throws APPCException {
- if(input.getRequestInfo().getActionLevel().equals(ActionLevel.VM.getAction())||input.getRequestInfo().getActionLevel().equals(ActionLevel.VNFC.getAction())||
- input.getRequestInfo().getActionLevel().equals(ActionLevel.VNF.getAction())||input.getRequestInfo().getActionLevel().equals(ActionLevel.VF_MODULE.getAction())) {
if (input.getRequestInfo().getActionLevel().equals(ActionLevel.VNF.getAction()) && input.getDependencyModel() != null) {
- FlowStrategies flowStrategy = readStartFlowStrategy(input);
- VnfcFlowModel flowModel = buildFlowModel(input.getInventoryModel()
- , input.getDependencyModel(), flowStrategy);
- logger.debug("Flow Model " + flowModel);
- return generateSequenceWithDependencyModel(flowModel, input);
+ if(isVnfcPresent(input)) {
+ FlowStrategies flowStrategy = readFlowStrategy(input);
+ VnfcFlowModel flowModel = null;
+ try {
+ flowModel = buildFlowModel(input.getInventoryModel()
+ , input.getDependencyModel(), flowStrategy);
+ } catch (InvalidDependencyModelException invalidDependencyModelException) {
+ logger.error("Error Generating Sequence", invalidDependencyModelException);
+ throw new APPCException(invalidDependencyModelException.getMessage(), invalidDependencyModelException);
+ }
+ logger.debug("Flow Model " + flowModel);
+ return generateSequenceWithDependencyModel(flowModel, input);
+ }
+ else throw new APPCException("Vnfc details is missing in the input");
} else {
logger.info("Generating sequence without dependency model");
return generateSequenceWithOutDependency(input);
}
- }throw new APPCException("Invalid action level "+input.getRequestInfo().getActionLevel());
}
- private VnfcFlowModel buildFlowModel(InventoryModel inventoryModel, VnfcDependencyModel dependencyModel, FlowStrategies flowStrategy) throws APPCException {
+ private VnfcFlowModel buildFlowModel(InventoryModel inventoryModel, VnfcDependencyModel dependencyModel, FlowStrategies flowStrategy) throws APPCException, InvalidDependencyModelException {
FlowBuilder flowBuilder = FlowBuilderFactory.getInstance().getFlowBuilder(flowStrategy);
if (flowBuilder == null) {
throw new APPCException("Flow Strategy not supported " + flowStrategy);
@@ -207,22 +239,17 @@ public class StartSequenceGenerator implements SequenceGenerator {
return flowBuilder.buildFlowModel(dependencyModel, inventoryModel);
}
- private FlowStrategies readStartFlowStrategy(SequenceGeneratorInput sequenceGeneratorInput) throws APPCException {
+ private FlowStrategies readFlowStrategy(SequenceGeneratorInput sequenceGeneratorInput) {
Map<String, String> tunableParams = sequenceGeneratorInput.getTunableParams();
- FlowStrategies strategy;
+ FlowStrategies strategy=null;
String strategyStr = null;
if (tunableParams != null) {
strategyStr = tunableParams.get(Constants.STRATEGY);
- if (StringUtils.isBlank(strategyStr)) {
- return FlowStrategies.FORWARD;
- }
-
strategy = FlowStrategies.findByString(strategyStr);
- if (strategy != null) {
- return strategy;
- }
}
- throw new APPCException("Invalid Strategy " + strategyStr);
+ if (strategy == null)
+ strategy= FlowStrategies.FORWARD;
+ return strategy;
}
private boolean readHealthCheckCapabilites(Map<String, List<String>> capabilities) {
@@ -259,6 +286,17 @@ public class StartSequenceGenerator implements SequenceGenerator {
}
}
+ private boolean isVnfcPresent(SequenceGeneratorInput input){
+ boolean vnfcPresent=true;
+ List<Vserver> vservers = input.getInventoryModel().getVnf().getVservers();
+ for (Vserver vm : vservers) {
+ if(!(vm.getVnfc()!=null&& vm.getVnfc().getVnfcType()!=null&& vm.getVnfc().getVnfcName()!=null)){
+ vnfcPresent=false;break;
+ }
+ }
+ return vnfcPresent;
+ }
+
private Integer readWaitTime(SequenceGeneratorInput input) throws APPCException {
String paramValStr = input.getTunableParams().get(WAIT_TIME);
if (StringUtils.isEmpty(paramValStr)) {
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/StopSequenceGenerator.java b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/StopSequenceGenerator.java
index 77bee6b83..dcbdd8949 100644
--- a/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/StopSequenceGenerator.java
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/StopSequenceGenerator.java
@@ -23,6 +23,7 @@ package org.onap.appc.seqgen.impl;
import org.apache.commons.lang3.StringUtils;
import org.onap.appc.dg.flowbuilder.FlowBuilder;
import org.onap.appc.dg.flowbuilder.impl.FlowBuilderFactory;
+import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException;
import org.onap.appc.dg.objects.FlowStrategies;
import org.onap.appc.dg.objects.InventoryModel;
import org.onap.appc.dg.objects.VnfcDependencyModel;
@@ -31,77 +32,78 @@ import org.onap.appc.domainmodel.Vnfc;
import org.onap.appc.domainmodel.Vserver;
import org.onap.appc.exceptions.APPCException;
import org.onap.appc.seqgen.SequenceGenerator;
-import org.onap.appc.seqgen.objects.*;
import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
+import org.onap.appc.seqgen.objects.ActionIdentifier;
+import org.onap.appc.seqgen.objects.Constants;
+import org.onap.appc.seqgen.objects.Response;
+import org.onap.appc.seqgen.objects.SequenceGeneratorInput;
+import org.onap.appc.seqgen.objects.Transaction;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
-import static org.onap.appc.seqgen.objects.Constants.*;
+import static org.onap.appc.seqgen.objects.Constants.Action;
+import static org.onap.appc.seqgen.objects.Constants.ActionLevel;
+import static org.onap.appc.seqgen.objects.Constants.ResponseAction;
+import static org.onap.appc.seqgen.objects.Constants.ResponseMessage;
+import static org.onap.appc.seqgen.objects.Constants.Capabilties;
public class StopSequenceGenerator implements SequenceGenerator {
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(StartSequenceGenerator.class);
+ private static final EELFLogger logger = EELFManager.getInstance().getLogger(StopSequenceGenerator.class);
@Override
public List<Transaction> generateSequence(SequenceGeneratorInput input) throws APPCException {
- if(input.getRequestInfo().getActionLevel().equals(ActionLevel.VM.getAction())||input.getRequestInfo().getActionLevel().equals(ActionLevel.VNFC.getAction())||
- input.getRequestInfo().getActionLevel().equals(ActionLevel.VNF.getAction())||input.getRequestInfo().getActionLevel().equals(ActionLevel.VF_MODULE.getAction())) {
- if (input.getRequestInfo().getActionLevel().equals(ActionLevel.VNF.getAction()) && input.getDependencyModel() != null) {
- FlowStrategies flowStrategy = readStopFlowStrategy(input);
- VnfcFlowModel flowModel = buildFlowModel(input.getInventoryModel()
- , input.getDependencyModel(), flowStrategy);
+ if (input.getRequestInfo().getActionLevel().equals(ActionLevel.VNF.getAction()) && input.getDependencyModel() != null ) {
+ if(isVnfcPresent(input)) {
+ FlowStrategies flowStrategy = readFlowStrategy(input);
+ VnfcFlowModel flowModel = null;
+ try {
+ flowModel = buildFlowModel(input.getInventoryModel(), input.getDependencyModel(), flowStrategy);
+ } catch (InvalidDependencyModelException invalidDependencyModelException) {
+ logger.error("Error Generating Sequence", invalidDependencyModelException);
+ throw new APPCException(invalidDependencyModelException.getMessage(), invalidDependencyModelException);
+ }
logger.debug("Flow Model " + flowModel);
return generateSequenceWithDependencyModel(flowModel, input);
+ }
+ else throw new APPCException("Vnfc details missing in the input");
} else {
logger.info("Generating sequence without dependency model");
return generateSequenceWithOutDependency(input);
}
- }throw new APPCException("Invalid action level "+input.getRequestInfo().getActionLevel());
-
}
+
private List<Transaction> generateSequenceWithOutDependency(SequenceGeneratorInput input){
List<Transaction> transactionList = new LinkedList<>();
Integer transactionId = 1;
+ List<Vserver> vservers = input.getInventoryModel().getVnf().getVservers();
List<Integer> transactionIds = new LinkedList<>();
- List<Vnfc> invVnfcList = input.getInventoryModel().getVnf().getVnfcs();
- boolean singleTransaction=checkSingleTransaction(invVnfcList);
- for (Vnfc vnfc : invVnfcList) {
- List<Vserver> vms = vnfc.getVserverList();
- for(Vserver vm:vms){
- Transaction transaction = new Transaction();
- transaction.setTransactionId(transactionId);
- transactionIds.add(transactionId++);
- transaction.setAction(Action.STOP.getActionType());
- transaction.setActionLevel(ActionLevel.VM.getAction());
- ActionIdentifier actionIdentifier = new ActionIdentifier();
- actionIdentifier.setvServerId(vm.getId());
- transaction.setActionIdentifier(actionIdentifier);
- transaction.setPayload(input.getRequestInfo().getPayload());
- if(!singleTransaction){
- updateStopResponse(transaction);
- }
- transactionList.add(transaction);
- }
+ for (Vserver vm : vservers) {
+ Transaction transaction = new Transaction();
+ transaction.setTransactionId(transactionId);
+ transactionIds.add(transactionId++);
+ transaction.setAction(Action.STOP.getActionType());
+ transaction.setActionLevel(ActionLevel.VM.getAction());
+ ActionIdentifier actionIdentifier = new ActionIdentifier();
+ actionIdentifier.setvServerId(vm.getId());
+ transaction.setActionIdentifier(actionIdentifier);
+ transaction.setPayload(input.getRequestInfo().getPayload());
+ if(vservers.size()>1){
+ Response failureResponse = new Response();
+ failureResponse.setResponseMessage(ResponseMessage.FAILURE.getResponse());
+ Map<String,String> failureAction = new HashMap<>();
+ failureAction.put(ResponseAction.IGNORE.getAction(),Boolean.TRUE.toString());
+ failureResponse.setResponseAction(failureAction);
+ transaction.addResponse(failureResponse);
}
- return transactionList;
- }
-
- private void updateStopResponse(Transaction transaction) {
- Response failureResponse = new Response();
- failureResponse.setResponseMessage(ResponseMessage.FAILURE.getResponse());
- Map<String,String> failureAction = new HashMap<>();
- failureAction.put(ResponseAction.IGNORE.getAction(),Boolean.TRUE.toString());
- failureResponse.setResponseAction(failureAction);
- transaction.addResponse(failureResponse);
- }
- private boolean checkSingleTransaction(List<Vnfc> invVnfcList) {
- int vServerCount=0;
- for(Vnfc vnfc : invVnfcList) {
- List<Vserver> vms = vnfc.getVserverList();
- vServerCount=vServerCount+vms.size();
- }
- return vServerCount <= 1;
+ transactionList.add(transaction);
+ }
+ return transactionList;
}
private List<Transaction> generateSequenceWithDependencyModel(VnfcFlowModel flowModel,SequenceGeneratorInput input){
@@ -122,7 +124,12 @@ public class StopSequenceGenerator implements SequenceGenerator {
stopActionIdentifier .setVnfcName(vnfc.getVnfcName());
stopAppTransaction.setActionIdentifier(stopActionIdentifier );
stopAppTransaction.setPayload(input.getRequestInfo().getPayload());
- updateStopResponse(stopAppTransaction);
+ Response failureResponse = new Response();
+ failureResponse.setResponseMessage(ResponseMessage.FAILURE.getResponse());
+ Map<String,String> failureAction = new HashMap<>();
+ failureAction.put(ResponseAction.IGNORE.getAction(),Boolean.TRUE.toString());
+ failureResponse.setResponseAction(failureAction);
+ stopAppTransaction.addResponse(failureResponse);
transactionList.add(stopAppTransaction);
}
List<Vserver> vms = vnfc.getVserverList();
@@ -136,8 +143,12 @@ public class StopSequenceGenerator implements SequenceGenerator {
actionIdentifier.setvServerId(vm.getId());
transaction.setActionIdentifier(actionIdentifier);
transaction.setPayload(input.getRequestInfo().getPayload());
-
- updateStopResponse(transaction);
+ Response failureResponse = new Response();
+ failureResponse.setResponseMessage(ResponseMessage.FAILURE.getResponse());
+ Map<String,String> failureAction = new HashMap<>();
+ failureAction.put(ResponseAction.IGNORE.getAction(),Boolean.TRUE.toString());
+ failureResponse.setResponseAction(failureAction);
+ transaction.addResponse(failureResponse);
transactionList.add(transaction);
}
}
@@ -145,7 +156,7 @@ public class StopSequenceGenerator implements SequenceGenerator {
return transactionList;
}
- private VnfcFlowModel buildFlowModel(InventoryModel inventoryModel, VnfcDependencyModel dependencyModel, FlowStrategies flowStrategy) throws APPCException {
+ private VnfcFlowModel buildFlowModel(InventoryModel inventoryModel, VnfcDependencyModel dependencyModel, FlowStrategies flowStrategy) throws APPCException, InvalidDependencyModelException {
FlowBuilder flowBuilder = FlowBuilderFactory.getInstance().getFlowBuilder(flowStrategy);
if (flowBuilder == null) {
throw new APPCException("Flow Strategy not supported " + flowStrategy);
@@ -153,22 +164,30 @@ public class StopSequenceGenerator implements SequenceGenerator {
return flowBuilder.buildFlowModel(dependencyModel, inventoryModel);
}
- private FlowStrategies readStopFlowStrategy(SequenceGeneratorInput sequenceGeneratorInput) throws APPCException {
+ private FlowStrategies readFlowStrategy(SequenceGeneratorInput sequenceGeneratorInput) {
Map<String, String> tunableParams = sequenceGeneratorInput.getTunableParams();
- FlowStrategies strategy;
+ FlowStrategies strategy = null;
String strategyStr = null;
if (tunableParams != null) {
strategyStr = tunableParams.get(Constants.STRATEGY);
- if (StringUtils.isBlank(strategyStr)) {
- return FlowStrategies.REVERSE;
- }
strategy = FlowStrategies.findByString(strategyStr);
- if (strategy != null) {
- return strategy;
+ }
+ if (strategy == null)
+ strategy= FlowStrategies.REVERSE;
+ return strategy;
+ }
+
+ private boolean isVnfcPresent(SequenceGeneratorInput input){
+ boolean vnfcPresent=true;
+ List<Vserver> vservers = input.getInventoryModel().getVnf().getVservers();
+ for (Vserver vm : vservers) {
+ if(!(vm.getVnfc()!=null&& vm.getVnfc().getVnfcType()!=null&& vm.getVnfc().getVnfcName()!=null)){
+ vnfcPresent=false;break;
}
}
- throw new APPCException("Invalid Strategy " + strategyStr);
+ return vnfcPresent;
}
+
private boolean readApplicationStopCapability(SequenceGeneratorInput input) {
Map<String,List<String>> capability = input.getCapability();
if(capability!= null){
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/objects/Constants.java b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/objects/Constants.java
index 476c5b718..c648c973c 100644
--- a/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/objects/Constants.java
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/objects/Constants.java
@@ -67,7 +67,7 @@ public class Constants {
}
public enum ResponseAction{
- STOP("stop"),RETRY("retry"),IGNORE("ignore"),WAIT("wait"),CONTINUE("Continue");
+ STOP("stop"),RETRY("retry"),IGNORE("ignore"),WAIT("wait"),CONTINUE("Continue"),JUMP("jump");
ResponseAction(String action) {
this.action=action;
@@ -101,9 +101,18 @@ public class Constants {
ActionLevel(String action){
this.action=action;
}
+
public String getAction() {
return action;
}
+
+ public static ActionLevel findByString(String actoinLevel) {
+ for (ActionLevel acnlevel : ActionLevel.values()) {
+ if (acnlevel.name().equals(actoinLevel))
+ return acnlevel;
+ }
+ return null;
+ }
}
public enum PreCheckOperator{
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/provider/SequenceGeneratorProvider.java b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/provider/SequenceGeneratorProvider.java
index ad9a68705..26e9f899a 100644
--- a/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/provider/SequenceGeneratorProvider.java
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/provider/SequenceGeneratorProvider.java
@@ -46,14 +46,26 @@ import org.onap.appc.dg.objects.InventoryModel;
import org.onap.appc.dg.objects.Node;
import org.onap.appc.dg.objects.VnfcDependencyModel;
import org.onap.appc.domainmodel.Vnf;
+import org.onap.appc.domainmodel.Vnfc;
import org.onap.appc.domainmodel.Vserver;
import org.onap.appc.domainmodel.lcm.VNFOperation;
import org.onap.appc.exceptions.APPCException;
import org.onap.appc.seqgen.SequenceGenerator;
import org.onap.appc.seqgen.impl.SequenceGeneratorFactory;
-import org.onap.appc.seqgen.objects.*;
-
-import java.util.*;
+import org.onap.appc.seqgen.objects.Constants;
+import org.onap.appc.seqgen.objects.PreCheckOption;
+import org.onap.appc.seqgen.objects.RequestInfo;
+import org.onap.appc.seqgen.objects.RequestInfoBuilder;
+import org.onap.appc.seqgen.objects.Response;
+import org.onap.appc.seqgen.objects.SequenceGeneratorInput;
+import org.onap.appc.seqgen.objects.SequenceGeneratorInputBuilder;
+import org.onap.appc.seqgen.objects.Transaction;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
@@ -100,6 +112,9 @@ public class SequenceGeneratorProvider implements AutoCloseable,SequenceGenerato
RpcResult<GenerateSequenceOutput> rpcResult=null;
log.debug("Received input = " + input );
try {
+ if(input.getRequestInfo()==null){
+ throw new APPCException("Request info is missing in the input");
+ }
SequenceGenerator seqGenerator = SequenceGeneratorFactory.getInstance()
.createSequenceGenerator(VNFOperation.findByString(input.getRequestInfo().getAction().name()));
SequenceGeneratorInput seqGenInput = buildSeqGenInput(input);
@@ -113,33 +128,12 @@ public class SequenceGeneratorProvider implements AutoCloseable,SequenceGenerato
}
private RpcResult<GenerateSequenceOutput> buildSuccessResponse(List<Transaction> transactions) {
-
+ log.info("Building response from the list of transactions");
List<Transactions> transactionList = new LinkedList<>();
for(Transaction transaction:transactions){
- ActionIdentifier actionIdentifier = null;
- if(transaction.getActionIdentifier() != null){
- actionIdentifier = new ActionIdentifierBuilder()
- .setVnfId(transaction.getActionIdentifier().getVnfId())
- .setVnfcName(transaction.getActionIdentifier().getVnfcName())
- .setVserverId(transaction.getActionIdentifier().getvServerId())
- .build();
- }
-
- List<PrecheckOptions> precheckOptions = new LinkedList<>();
- if(transaction.getPrecheckOptions()!=null){
- for(PreCheckOption option:transaction.getPrecheckOptions()){
- PrecheckOptions precheckOption = new PrecheckOptionsBuilder()
- .setParamName(option.getParamName())
- .setParamValue(option.getParamValue())
- .setPreTransactionId(option.getPreTransactionId())
- .setRule(option.getRule())
- .build();
- precheckOptions.add(precheckOption);
- }
- }
-
+ ActionIdentifier actionIdentifier = buildActionIdentifierForResponse(transaction);
+ List<PrecheckOptions> precheckOptions = buildPrecheckOptionsForResponse(transaction);
List<Responses> responseList = getResponses(transaction);
-
Transactions transactionObj
= new TransactionsBuilder()
.setActionIdentifier(actionIdentifier)
@@ -162,6 +156,35 @@ public class SequenceGeneratorProvider implements AutoCloseable,SequenceGenerato
.withResult(builder.build()).build();
}
+ private ActionIdentifier buildActionIdentifierForResponse(Transaction transaction) {
+ log.info("Adding action identifiers to response.");
+ ActionIdentifier actionIdentifier = null;
+ if(transaction.getActionIdentifier() != null){
+ actionIdentifier = new ActionIdentifierBuilder()
+ .setVnfId(transaction.getActionIdentifier().getVnfId())
+ .setVnfcName(transaction.getActionIdentifier().getVnfcName())
+ .setVserverId(transaction.getActionIdentifier().getvServerId())
+ .build();
+ }
+ return actionIdentifier;
+ }
+
+ private List<PrecheckOptions> buildPrecheckOptionsForResponse(Transaction transaction) {
+ log.info("Adding Precheck options to response");
+ List<PrecheckOptions> precheckOptions = new LinkedList<>();
+ if(transaction.getPrecheckOptions()!=null){
+ for(PreCheckOption option:transaction.getPrecheckOptions()){
+ PrecheckOptions precheckOption = new PrecheckOptionsBuilder()
+ .setParamName(option.getParamName())
+ .setParamValue(option.getParamValue())
+ .setPreTransactionId(option.getPreTransactionId())
+ .setRule(option.getRule())
+ .build();
+ precheckOptions.add(precheckOption);
+ }
+ }
+ return precheckOptions;
+ }
private List<Responses> getResponses(Transaction transaction) {
List<Responses> responseList = new LinkedList<>();
for(Response resp : transaction.getResponses()){
@@ -183,6 +206,9 @@ public class SequenceGeneratorProvider implements AutoCloseable,SequenceGenerato
if(responseActions.get(Constants.ResponseAction.STOP.getAction()) !=null){
responseActionBuilder = responseActionBuilder.setStop(Boolean.parseBoolean(responseActions.get(Constants.ResponseAction.STOP.getAction())));
}
+ if(responseActions.get(Constants.ResponseAction.JUMP.getAction()) !=null){
+ responseActionBuilder = responseActionBuilder.setJump(Integer.parseInt(responseActions.get(Constants.ResponseAction.JUMP.getAction())));
+ }
Responses response = new ResponsesBuilder()
.setResponseMessage(resp.getResponseMessage())
.setResponseAction(responseActionBuilder.build())
@@ -194,32 +220,43 @@ public class SequenceGeneratorProvider implements AutoCloseable,SequenceGenerato
private SequenceGeneratorInput buildSeqGenInput(GenerateSequenceInput input) throws APPCException {
+ log.info("Building SequenceGeneratorInput from Yang object GenerateSequenceInput.");
validateMandatory(input);
- RequestInfoBuilder requestInfobuilder = new RequestInfoBuilder()
- .action(input.getRequestInfo().getAction().name())
- .actionLevel(input.getRequestInfo().getActionLevel().getName().toLowerCase())
- .payload(input.getRequestInfo().getPayload());
-
- if(input.getRequestInfo().getActionIdentifier() !=null){
- requestInfobuilder = requestInfobuilder
- .actionIdentifier()
- .vnfId(input.getRequestInfo().getActionIdentifier().getVnfId())
- .vnfcName(input.getRequestInfo().getActionIdentifier().getVnfcName())
- .vServerId(input.getRequestInfo().getActionIdentifier().getVserverId());
- }
-
- RequestInfo requestInfo = requestInfobuilder.build();
-
+ RequestInfo requestInfo = buildRequestInfoForSeqGenInput(input);
InventoryModel inventoryModel = readInventoryModel(input);
VnfcDependencyModel dependencyModel = readDependencyModel(input);
+ if(dependencyModel!=null){
+ validateInventoryModelWithDependencyModel(dependencyModel,inventoryModel);
+ }
SequenceGeneratorInputBuilder builder = new SequenceGeneratorInputBuilder()
.requestInfo(requestInfo)
.inventoryModel(inventoryModel)
.dependendcyModel(dependencyModel);
+ builder = buildCapabilitiesForSeqGenInput(input, builder);
+
+ builder = buildTunableParamsForSeqGenInput(input, builder);
+
+ return builder.build();
+ }
+
+ private SequenceGeneratorInputBuilder buildTunableParamsForSeqGenInput(GenerateSequenceInput input, SequenceGeneratorInputBuilder builder) {
+ log.info("Initializing Tunable Parameters based on YANG object.");
+ if(input.getTunableParameters() != null){
+ builder = builder.tunableParameter(Constants.RETRY_COUNT,String.valueOf(input.getTunableParameters().getRetryCount()))
+ .tunableParameter(Constants.WAIT_TIME,String.valueOf(input.getTunableParameters().getWaitTime()));
+ if(input.getTunableParameters().getStrategy() !=null){
+ builder = builder.tunableParameter(Constants.STRATEGY,input.getTunableParameters().getStrategy().name());
+ }
+ }
+ return builder;
+ }
+
+ private SequenceGeneratorInputBuilder buildCapabilitiesForSeqGenInput(GenerateSequenceInput input, SequenceGeneratorInputBuilder builder) {
+ log.info("Initializing capabilities based on YANG object.");
if(input.getCapabilities() !=null){
if(input.getCapabilities().getVnf()!=null){
builder = builder.capability("vnf",input.getCapabilities().getVnf());
@@ -235,16 +272,73 @@ public class SequenceGeneratorProvider implements AutoCloseable,SequenceGenerato
}
}
- if(input.getTunableParameters() != null){
- builder = builder.tunableParameter(Constants.RETRY_COUNT,String.valueOf(input.getTunableParameters().getRetryCount()))
- .tunableParameter(Constants.WAIT_TIME,String.valueOf(input.getTunableParameters().getWaitTime()));
- if(input.getTunableParameters().getStrategy() !=null){
- builder = builder.tunableParameter(Constants.STRATEGY,input.getTunableParameters().getStrategy().name());
+ return builder;
+ }
+
+ private void validateInventoryModelWithDependencyModel(VnfcDependencyModel dependencyModel, InventoryModel inventoryModel) throws APPCException {
+ Set<String> dependencyModelVnfcSet = new HashSet<>();
+ Set<String> dependencyModelMandatoryVnfcSet = new HashSet<>();
+ Set<String> inventoryModelVnfcsSet = new HashSet<>();
+
+ for (Node<Vnfc> node : dependencyModel.getDependencies()) {
+ dependencyModelVnfcSet.add(node.getChild().getVnfcType().toLowerCase());
+ if (node.getChild().isMandatory()) {
+ dependencyModelMandatoryVnfcSet.add(node.getChild().getVnfcType().toLowerCase());
}
}
- return builder.build();
+
+ for (Vnfc vnfc : inventoryModel.getVnf().getVnfcs()) {
+ inventoryModelVnfcsSet.add(vnfc.getVnfcType().toLowerCase());
+ }
+
+ // if dependency model and inventory model contains same set of VNFCs, validation succeed and hence return
+ if (dependencyModelVnfcSet.equals(inventoryModelVnfcsSet)) {
+ return;
+ }
+
+ if (inventoryModelVnfcsSet.size() >= dependencyModelVnfcSet.size()) {
+ Set<String> difference = new HashSet<>(inventoryModelVnfcsSet);
+ difference.removeAll(dependencyModelVnfcSet);
+ log.error("Dependency model is missing following vnfc type(s): " + difference);
+ throw new APPCException("Dependency model is missing following vnfc type(s): " + difference);
+ } else {
+ Set<String> difference = new HashSet<>(dependencyModelMandatoryVnfcSet);
+ difference.removeAll(inventoryModelVnfcsSet);
+ if (difference.size() > 0) {
+ log.error("Inventory model is missing following mandatory vnfc type(s): " + difference);
+ throw new APPCException("VMs missing for the mandatory VNFC : " + difference);
+ }
+ }
+ }
+
+ private RequestInfo buildRequestInfoForSeqGenInput(GenerateSequenceInput input) {
+ log.info("Building RequestInfo from Yang object");
+ RequestInfoBuilder requestInfobuilder = buildRequestInformation(input);
+
+ if(input.getRequestInfo().getActionIdentifier() !=null){
+ requestInfobuilder = buildActionIdentifiers(input, requestInfobuilder);
+ }
+
+ return requestInfobuilder.build();
}
+ private RequestInfoBuilder buildActionIdentifiers(GenerateSequenceInput input, RequestInfoBuilder requestInfobuilder) {
+ log.info("Initializing actionIdentifier for RequestInfo");
+ requestInfobuilder = requestInfobuilder
+ .actionIdentifier()
+ .vnfId(input.getRequestInfo().getActionIdentifier().getVnfId())
+ .vnfcName(input.getRequestInfo().getActionIdentifier().getVnfcName())
+ .vServerId(input.getRequestInfo().getActionIdentifier().getVserverId());
+ return requestInfobuilder;
+ }
+
+ private RequestInfoBuilder buildRequestInformation(GenerateSequenceInput input) {
+ log.info("Initializing action, actionLevel and payload for RequestInfo");
+ return new RequestInfoBuilder()
+ .action(input.getRequestInfo().getAction().name())
+ .actionLevel(input.getRequestInfo().getActionLevel().getName().toLowerCase())
+ .payload(input.getRequestInfo().getPayload());
+ }
private void validateMandatory(GenerateSequenceInput input) throws APPCException {
if(input.getRequestInfo() ==null){
@@ -256,30 +350,39 @@ public class SequenceGeneratorProvider implements AutoCloseable,SequenceGenerato
if(input.getInventoryInfo() ==null){
throw new APPCException("inventoryInfo is not provided in the input");
}
+ if (input.getInventoryInfo().getVnfInfo()== null) {
+ log.error("vnfInfo is null in the input");
+ throw new APPCException("vnfInfo is missing in the input");
+ }
+ if(input.getInventoryInfo().getVnfInfo().getVm().isEmpty()){
+ log.error("Null vm information in input.");
+ throw new APPCException("VnfInfo is missing in the input");
+ }
+ log.info("Mandatory information present in the request.");
}
- private VnfcDependencyModel readDependencyModel(GenerateSequenceInput input) {
+ private VnfcDependencyModel readDependencyModel(GenerateSequenceInput input) throws APPCException{
+ log.info("Initializing DependencyModel from YANG model.");
if(input.getDependencyInfo() == null || input.getDependencyInfo().getVnfcs() ==null || input.getDependencyInfo().getVnfcs().isEmpty()){
+ log.info("No dependency model information is present for the request.");
return null;
}
List<Vnfcs> vnfcs = input.getDependencyInfo().getVnfcs();
Set<Node<org.onap.appc.domainmodel.Vnfc>> dependencies = new HashSet<>();
+ Set<String> parentVnfcs=new HashSet<>();
+ Set<String> allVnfcTypes=new HashSet<>();
for(Vnfcs vnfcObj:vnfcs){
- org.onap.appc.domainmodel.Vnfc vnfc;
- Node<org.onap.appc.domainmodel.Vnfc> currentNode = readNode(vnfcObj.getVnfcType(),dependencies);
- if(currentNode == null){
- vnfc = new org.onap.appc.domainmodel.Vnfc(vnfcObj.getVnfcType(),vnfcObj.getResilience());
- currentNode = new Node<>(vnfc);
- dependencies.add(currentNode);
- }
- else{
- currentNode.getChild().setResilienceType(vnfcObj.getResilience());
- currentNode.getChild().setMandatory(vnfcObj.isMandatory());
- }
+ org.onap.appc.domainmodel.Vnfc vnfc = new org.onap.appc.domainmodel.Vnfc();
+ vnfc.setVnfcType(vnfcObj.getVnfcType());
+ allVnfcTypes.add(vnfcObj.getVnfcType());
+ vnfc.setResilienceType(vnfcObj.getResilience());
+ Node<Vnfc> currentNode = buildVnfcNodeForDependenyInfo(dependencies, vnfcObj, vnfc);
for(String parentVnfcType:vnfcObj.getParents()){
- Node<org.onap.appc.domainmodel.Vnfc> parentNode = readNode(parentVnfcType,dependencies);
+ parentVnfcs.add(parentVnfcType);
+ Node<Vnfc> parentNode = readNode(parentVnfcType,dependencies);
if(parentNode == null){
- org.onap.appc.domainmodel.Vnfc parentVnfc = new org.onap.appc.domainmodel.Vnfc(parentVnfcType,null);
+ Vnfc parentVnfc = new Vnfc();
+ parentVnfc.setVnfcType(parentVnfcType);
parentNode = new Node<>(parentVnfc);
currentNode.addParent(parentVnfc);
dependencies.add(parentNode);
@@ -289,9 +392,27 @@ public class SequenceGeneratorProvider implements AutoCloseable,SequenceGenerato
}
}
}
+ for(String parent:parentVnfcs){
+ if(!allVnfcTypes.contains(parent)){
+ throw new APPCException("Dependency model missing vnfc type "+parent);
+ }
+ }
return new VnfcDependencyModel(dependencies);
}
+ private Node<Vnfc> buildVnfcNodeForDependenyInfo(Set<Node<Vnfc>> dependencies, Vnfcs vnfcObj, Vnfc vnfc) {
+ Node<Vnfc> currentNode = readNode(vnfcObj.getVnfcType(),dependencies);
+ if(currentNode == null){
+ currentNode = new Node<>(vnfc);
+ dependencies.add(currentNode);
+ }
+ else{
+ currentNode.getChild().setResilienceType(vnfcObj.getResilience());
+ currentNode.getChild().setMandatory(vnfcObj.isMandatory());
+ }
+ return currentNode;
+ }
+
private Node<org.onap.appc.domainmodel.Vnfc> readNode(String vnfcType, Set<Node<org.onap.appc.domainmodel.Vnfc>> dependencies) {
for(Node<org.onap.appc.domainmodel.Vnfc> node : dependencies){
if(node.getChild().getVnfcType().equalsIgnoreCase(vnfcType)){
@@ -302,40 +423,52 @@ public class SequenceGeneratorProvider implements AutoCloseable,SequenceGenerato
}
private InventoryModel readInventoryModel(GenerateSequenceInput input) throws APPCException {
- if (input.getInventoryInfo().getVnfInfo()== null) {
- throw new APPCException("vnfInfo is not provided in the input");
- }
-
- Vnf vnf = new Vnf(input.getInventoryInfo().getVnfInfo().getVnfId(),
- input.getInventoryInfo().getVnfInfo().getVnfType(),null);
+ log.info("Initializing InventoryModel from Yang input model");
+ Vnf vnf = createVnfForInventoryModel(input);
Map<org.onap.appc.domainmodel.Vnfc,List<Vserver>> map = new HashMap<>();
+ buildVserverDetailsForInventoryModel(input, vnf, map);
+ for(Map.Entry<org.onap.appc.domainmodel.Vnfc,List<Vserver>> entry:map.entrySet()){
+ org.onap.appc.domainmodel.Vnfc vnfc = entry.getKey();
+ List<Vserver> vmList = entry.getValue();
+ vnfc.addVservers(vmList);
+ }
+ return new InventoryModel(vnf);
+ }
+
+ private void buildVserverDetailsForInventoryModel(GenerateSequenceInput input, Vnf vnf, Map<Vnfc, List<Vserver>> map) throws APPCException {
+ if(input.getInventoryInfo().getVnfInfo().getVm().size()<1){
+ throw new APPCException("vnfInfo is missing in the input");
+ }
for(Vm vm:input.getInventoryInfo().getVnfInfo().getVm()){
if(StringUtils.isBlank(vm.getVserverId())){
throw new APPCException("vserver-id not found ");
}
- if(StringUtils.isBlank(vm.getVnfc().getVnfcType())){
- throw new APPCException("vnfc-type not found for vserver " + vm.getVserverId());
- }
- if(StringUtils.isBlank(vm.getVnfc().getVnfcName())){
- throw new APPCException("vnfc-name not found for vserver " + vm.getVserverId());
+ Vserver vserver=new Vserver();
+ vserver.setId(vm.getVserverId());
+ if(!StringUtils.isBlank(vm.getVnfc().getVnfcName()) &&
+ !StringUtils.isBlank(vm.getVnfc().getVnfcType())){
+ Vnfc vfc = new Vnfc();
+ vfc.setVnfcName(vm.getVnfc().getVnfcName());
+ vfc.setVnfcType(vm.getVnfc().getVnfcType());
+ vserver.setVnfc(vfc);
+ List<Vserver> vms = map.get(vfc);
+ if(vms ==null){
+ vms = new LinkedList<>();
+ map.put(vfc,vms);
+ }
+ vms.add(vserver);
}
+ vnf.addVserver(vserver);
+ }
+ }
- org.onap.appc.domainmodel.Vnfc vnfc = new org.onap.appc.domainmodel.Vnfc(vm.getVnfc().getVnfcType(),null,vm.getVnfc().getVnfcName());
- List<Vserver> vms = map.get(vnfc);
- if(vms ==null){
- vms = new LinkedList<>();
- map.put(vnfc,vms);
- }
- vms.add(new Vserver(null,null,vm.getVserverId(),null,null));
- }
- for(Map.Entry<org.onap.appc.domainmodel.Vnfc,List<Vserver>> entry:map.entrySet()){
- org.onap.appc.domainmodel.Vnfc vnfc = entry.getKey();
- List<Vserver> vmList = entry.getValue();
- vnfc.addVms(vmList);
- vnf.addVnfc(vnfc);
- }
- return new InventoryModel(vnf);
+ private Vnf createVnfForInventoryModel(GenerateSequenceInput input) {
+ log.info("Setting VnfId and VnfType values for Vnf Inventory Model ");
+ Vnf vnf=new Vnf();
+ vnf.setVnfId(input.getInventoryInfo().getVnfInfo().getVnfId());
+ vnf.setVnfType(input.getInventoryInfo().getVnfInfo().getVnfType());
+ return vnf;
}
private RpcResult<GenerateSequenceOutput> buildFailureResponse(String errorMessage){
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/java/org/onap/appc/seqgen/TestSequenceGeneratorPlugin.java b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/java/org/onap/appc/seqgen/TestSequenceGeneratorPlugin.java
index 748773a21..1fde88831 100644
--- a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/java/org/onap/appc/seqgen/TestSequenceGeneratorPlugin.java
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/java/org/onap/appc/seqgen/TestSequenceGeneratorPlugin.java
@@ -51,15 +51,29 @@ public class TestSequenceGeneratorPlugin {
plugin.generateSequence(params,context);
String outputJSON = context.getAttribute("output");
- String actualOutput = readOutput("/output/start.json");
+ String actualOutput = readOutput("/output/Start.json");
Assert.assertEquals(outputJSON.trim(),actualOutput.trim());
}
+ @Test
+ public void testGenerateSequenceWODependencyInfo()throws URISyntaxException, IOException {
+ String inputJSON = readInput("/input/start-withoutDependency.json");
+ Map<String,String> params = new HashMap<>();
+ SvcLogicContext context = new SvcLogicContext();
+ context.setAttribute("inputJSON",inputJSON);
+
+ SequenceGeneratorPlugin plugin = new SequenceGeneratorPluginImpl();
+ plugin.generateSequence(params,context);
+
+ String outputJSON = context.getAttribute("output");
+ String actualOutput = readOutput("/output/start-withoutDependency.json");
+ Assert.assertEquals(outputJSON.trim(),actualOutput.trim());
+ }
@Test
public void testGenerateSequenceSingleVM()throws URISyntaxException, IOException {
- String inputJSON = readInput("/input/start-single-vm.json");
+ String inputJSON = readInput("/input/start-singleVM-.json");
Map<String,String> params = new HashMap<>();
SvcLogicContext context = new SvcLogicContext();
@@ -69,7 +83,7 @@ public class TestSequenceGeneratorPlugin {
plugin.generateSequence(params,context);
String outputJSON = context.getAttribute("output");
- String actualOutput = readOutput("/output/start-single-vm.json");
+ String actualOutput = readOutput("/output/start-singleVM-.json");
Assert.assertEquals(outputJSON.trim(),actualOutput.trim());
}
@@ -85,7 +99,7 @@ public class TestSequenceGeneratorPlugin {
plugin.generateSequence(params,context);
String outputJSON = context.getAttribute("output");
- String actualOutput = readOutput("/output/start.json");
+ String actualOutput = readOutput("/output/Start.json");
Assert.assertEquals(outputJSON.trim(),actualOutput.trim());
}
@@ -102,7 +116,7 @@ public class TestSequenceGeneratorPlugin {
plugin.generateSequence(params,context);
String outputJSON = context.getAttribute("output");
- String actualOutput = readOutput("/output/stop.json");
+ String actualOutput = readOutput("/output/Output-stop.json");
Assert.assertEquals(outputJSON.trim(),actualOutput.trim());
}
@@ -144,7 +158,6 @@ public class TestSequenceGeneratorPlugin {
Assert.assertEquals(errorMessage,"Error generating sequence There seems to be no Root/Independent node for Vnfc dependencies");
}
-
@Test
public void testGenerateSequenceWrongAction() throws URISyntaxException, IOException {
String inputJSON = readInput("/input/wrongaction.json");
@@ -184,7 +197,7 @@ public class TestSequenceGeneratorPlugin {
@Test
public void testGenerateSequenceStopSingleVM() throws URISyntaxException, IOException{
- String inputJSON = readInput("/input/stop-single-vm.json");
+ String inputJSON = readInput("/input/stop-singleVM.json");
Map<String,String> params = new HashMap<>();
SvcLogicContext context = new SvcLogicContext();
@@ -194,13 +207,29 @@ public class TestSequenceGeneratorPlugin {
plugin.generateSequence(params,context);
String outputJSON = context.getAttribute("output");
- String actualOutput = readOutput("/output/stop-single-vm.json");
+ String actualOutput = readOutput("/output/stop-singleVM.json");
Assert.assertEquals(outputJSON.trim(),actualOutput.trim());
}
@Test
public void testGenerateSequenceStopSingleVmPerVnfc() throws URISyntaxException, IOException{
- String inputJSON = readInput("/input/stop-single-vm-per-vnfc.json");
+ String inputJSON = readInput("/input/stop-singleVmPerVnfc.json");
+
+ Map<String,String> params = new HashMap<>();
+ SvcLogicContext context = new SvcLogicContext();
+ context.setAttribute("inputJSON",inputJSON);
+
+ SequenceGeneratorPlugin plugin = new SequenceGeneratorPluginImpl();
+ plugin.generateSequence(params,context);
+
+ String outputJSON = context.getAttribute("output");
+ String actualOutput = readOutput("/output/stop-singleVmPerVnfc.json");
+ Assert.assertEquals(outputJSON.trim(),actualOutput.trim());
+ }
+
+ @Test
+ public void testGenerateSequenceRestartNoDep() throws URISyntaxException, IOException {
+ String inputJSON = readInput("/input/restartNodep.json");
Map<String,String> params = new HashMap<>();
SvcLogicContext context = new SvcLogicContext();
@@ -210,13 +239,30 @@ public class TestSequenceGeneratorPlugin {
plugin.generateSequence(params,context);
String outputJSON = context.getAttribute("output");
- String actualOutput = readOutput("/output/stop-single-vm-per-vnfc.json");
+ String actualOutput = readInput("/output/restart-NoDep.json");
+ outputJSON.trim();
+ Assert.assertEquals(outputJSON.trim(),actualOutput.trim());
+ }
+
+ @Test
+ public void testGenerateSequenceRestartNoDepSingleVM() throws URISyntaxException, IOException {
+ String inputJSON = readInput("/input/NoDep-SingleVM.json");
+
+ Map<String,String> params = new HashMap<>();
+ SvcLogicContext context = new SvcLogicContext();
+ context.setAttribute("inputJSON",inputJSON);
+
+ SequenceGeneratorPlugin plugin = new SequenceGeneratorPluginImpl();
+ plugin.generateSequence(params,context);
+
+ String outputJSON = context.getAttribute("output");
+ String actualOutput = readInput("/output/restart-Nodep-SingleVM.json");
Assert.assertEquals(outputJSON.trim(),actualOutput.trim());
}
@Test
public void testGenerateSequenceStartSingleVmPerVnfc() throws URISyntaxException, IOException{
- String inputJSON = readInput("/input/start-single-vm-per-vnfc.json");
+ String inputJSON = readInput("/input/start-singleVmPerVnfc-.json");
Map<String,String> params = new HashMap<>();
SvcLogicContext context = new SvcLogicContext();
@@ -226,7 +272,24 @@ public class TestSequenceGeneratorPlugin {
plugin.generateSequence(params,context);
String outputJSON = context.getAttribute("output");
- String actualOutput = readOutput("/output/start-single-vm-per-vnfc.json");
+ String actualOutput = readOutput("/output/start-singleVmPerVnfc.json");
+ Assert.assertEquals(outputJSON.trim(),actualOutput.trim());
+ }
+
+ @Test
+ public void testGenerateSequenceStopWithoutDep() throws URISyntaxException,IOException{
+ String inputJSON = readInput("/input/stop-WithoutDep.json");
+
+ Map<String,String> params = new HashMap<>();
+ SvcLogicContext context = new SvcLogicContext();
+ context.setAttribute("inputJSON",inputJSON);
+
+ SequenceGeneratorPlugin plugin = new SequenceGeneratorPluginImpl();
+ plugin.generateSequence(params,context);
+
+ String outputJSON = context.getAttribute("output");
+ String actualOutput = readOutput("/output/stop-WithoutDep.json");
+
Assert.assertEquals(outputJSON.trim(),actualOutput.trim());
}
@@ -246,6 +309,60 @@ public class TestSequenceGeneratorPlugin {
Assert.assertEquals(outputJSON.trim(),actualOutput.trim());
}
+ @Test
+ public void testGenerateSequenceCheckMandatoryVnfc() throws URISyntaxException, IOException {
+ String inputJSON = readInput("/input/CheckMandatoryVnfc.json");
+
+ Map<String,String> params = new HashMap<>();
+ SvcLogicContext context = new SvcLogicContext();
+ context.setAttribute("inputJSON",inputJSON);
+
+ SequenceGeneratorPlugin plugin = new SequenceGeneratorPluginImpl();
+ plugin.generateSequence(params,context);
+
+ String errorCode = context.getAttribute("error-code");
+ String errorMessage = context.getAttribute("error-message");
+ logger.debug("errorCode = " + errorCode);
+ Assert.assertEquals(errorCode,"401");
+ Assert.assertEquals(errorMessage,"Error generating sequence VMs missing for the mandatory VNFC : [smp]");
+ }
+
+ @Test
+ public void testGenerateSequenceCheckMissingDependencyInfo() throws URISyntaxException, IOException {
+ String inputJSON = readInput("/input/MissingDependencyInfo.json");
+
+ Map<String,String> params = new HashMap<>();
+ SvcLogicContext context = new SvcLogicContext();
+ context.setAttribute("inputJSON",inputJSON);
+
+ SequenceGeneratorPlugin plugin = new SequenceGeneratorPluginImpl();
+ plugin.generateSequence(params,context);
+
+ String errorCode = context.getAttribute("error-code");
+ String errorMessage = context.getAttribute("error-message");
+ logger.debug("errorCode = " + errorCode);
+ Assert.assertEquals(errorCode,"401");
+ Assert.assertEquals(errorMessage,"Error generating sequence Dependency model is missing following vnfc type(s): [smp]");
+ }
+
+ @Test
+ public void testGenerateSequenceExtraVnfcInDependency() throws URISyntaxException, IOException {
+ String inputJSON = readInput("/input/WrongDependencyModel.json");
+
+ Map<String,String> params = new HashMap<>();
+ SvcLogicContext context = new SvcLogicContext();
+ context.setAttribute("inputJSON",inputJSON);
+
+ SequenceGeneratorPlugin plugin = new SequenceGeneratorPluginImpl();
+ plugin.generateSequence(params,context);
+
+ String errorCode = context.getAttribute("error-code");
+ String errorMessage = context.getAttribute("error-message");
+ logger.debug("errorCode = " + errorCode);
+ Assert.assertEquals(errorCode,"401");
+ Assert.assertEquals(errorMessage,"Error generating sequence Dependency model missing vnfc type SMP");
+ }
+
private String readInput(String inputFile) throws URISyntaxException, IOException {
File file = new File(this.getClass().getResource(inputFile).toURI());
@@ -262,11 +379,10 @@ public class TestSequenceGeneratorPlugin {
FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.read(bFile);
fileInputStream.close();
-
String output=new String(bFile);
int start=output.indexOf("[");
- int last=output.length();
- return output.substring(start,last);
+ return output.substring(start,output.length());
}
}
+
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/CheckMandatoryVnfc.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/CheckMandatoryVnfc.json
new file mode 100644
index 000000000..8af3e7332
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/CheckMandatoryVnfc.json
@@ -0,0 +1,124 @@
+{
+ "request-info": {
+ "action": "Start",
+ "action-level": "vnf",
+ "action-identifier": {
+ "vnf-id": "dbgx0001v"
+ },
+ "payload": "ABC"
+ },
+ "inventory-info": {
+ "vnf-info": {
+ "vnf-id" : "abc",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
+ "vnf-version" : "1.0",
+ "vm": [
+ {
+ "vserver-id" : "be_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "fe_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "fe_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid3",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid4",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid5",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ }
+ ]
+ }
+ },
+ "dependency-info": {
+ "vnfcs" : [
+ {
+ "vnfc-type" : "BE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+ "SMP"
+ ]
+ },
+ {
+ "vnfc-type" : "FE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+ "BE"
+ ]
+ },
+ {
+ "vnfc-type" : "SMP",
+ "mandatory" : "true",
+ "resilience": "Active-Passive",
+ "parents" : [
+
+ ]
+ }
+
+ ]
+ },
+ "tunable-parameters": {
+ "strategy" : "FORWARD",
+ "wait-time": "120",
+ "retry-count": "5"
+ },
+ "capabilities" : {
+ "vnf": ["Stop", "Start", "StartApplication","StopApplication"],
+ "vf-module": ["Stop", "Start"],
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
+ }
+}
+
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/MissingDependencyInfo.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/MissingDependencyInfo.json
new file mode 100644
index 000000000..667565d0a
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/MissingDependencyInfo.json
@@ -0,0 +1,133 @@
+{
+ "request-info": {
+ "action": "Start",
+ "action-level": "vnf",
+ "action-identifier": {
+ "vnf-id": "dbgx0001v"
+ },
+ "payload": "ABC"
+ },
+ "inventory-info": {
+ "vnf-info": {
+ "vnf-id" : "abc",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
+ "vnf-version" : "1.0",
+ "vm": [
+ {
+ "vserver-id" : "be_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "fe_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "fe_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid3",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "smp_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "smp_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid4",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid5",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ }
+ ]
+ }
+ },
+ "dependency-info": {
+ "vnfcs" : [
+ {
+ "vnfc-type" : "BE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+
+ ]
+ },
+ {
+ "vnfc-type" : "FE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+ "BE"
+ ]
+ }
+
+ ]
+ },
+ "tunable-parameters": {
+ "strategy" : "FORWARD",
+ "wait-time": "120",
+ "retry-count": "5"
+ },
+ "capabilities" : {
+ "vnf": ["Stop", "Start", "StartApplication","StopApplication"],
+ "vf-module": ["Stop", "Start"],
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
+ }
+} \ No newline at end of file
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/NoDep-SingleVM.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/NoDep-SingleVM.json
new file mode 100755
index 000000000..e1475ef6c
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/NoDep-SingleVM.json
@@ -0,0 +1,38 @@
+
+
+
+{
+ "request-info": {
+ "action": "Restart",
+ "action-level": "vm",
+ "action-identifier": {
+ "vserver-id": "dbgx0001v"
+ },
+ "payload": "ABC"
+ },
+ "inventory-info": {
+ "vnf-info": {
+ "vnf-id" : "abc",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
+ "vnf-version" : "1.0",
+ "vm": [
+ {
+ "vserver-id" : "be_vserverid1"
+ }
+ ]
+ }
+ },
+ "dependency-info" : {
+
+ },
+ "tunable-parameters" : {
+
+ },
+ "capabilities" : {
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
+ }
+}
+
+
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/WrongDependencyModel.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/WrongDependencyModel.json
new file mode 100755
index 000000000..984128f9d
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/WrongDependencyModel.json
@@ -0,0 +1,117 @@
+{
+ "request-info": {
+ "action": "Start",
+ "action-level": "vnf",
+ "action-identifier": {
+ "vnf-id": "dbgx0001v"
+ },
+ "payload": "ABC"
+ },
+ "inventory-info": {
+ "vnf-info": {
+ "vnf-id" : "abc",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
+ "vnf-version" : "1.0",
+ "vm": [
+ {
+ "vserver-id" : "be_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "fe_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "fe_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid3",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+
+ {
+ "vserver-id" : "be_vserverid4",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid5",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ }
+ ]
+ }
+ },
+ "dependency-info": {
+ "vnfcs" : [
+ {
+ "vnfc-type" : "BE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+ "SMP"
+ ]
+ },
+ {
+ "vnfc-type" : "FE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+ "BE"
+ ]
+ }
+
+ ]
+ },
+ "tunable-parameters": {
+ "strategy" : "FORWARD",
+ "wait-time": "120",
+ "retry-count": "5"
+ },
+ "capabilities" : {
+ "vnf": ["Stop", "Start", "StartApplication","StopApplication"],
+ "vf-module": ["Stop", "Start"],
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
+ }
+}
+
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/cyclic.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/cyclic.json
index 522b99692..312c0f542 100644
--- a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/cyclic.json
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/cyclic.json
@@ -1,197 +1,140 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP : APPC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Copyright (C) 2017 Amdocs
- * =============================================================================
- * 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.
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- * ============LICENSE_END=========================================================
- */
-
-
{
- "request-info":
- {
+ "request-info": {
"action": "Start",
"action-level": "vnf",
- "action-identifier":
- {
+ "action-identifier": {
"vnf-id": "dbgx0001v"
},
"payload": "ABC"
},
- "inventory-info":
- {
- "vnf-info":
- {
+ "inventory-info": {
+ "vnf-info": {
"vnf-id" : "abc",
- "vnf-name": "vVNF",
- "vnf-type": "vVNF",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
"vnf-version" : "1.0",
"vm": [
{
- "vserver-id" : "vnfc2_vserverid1",
+ "vserver-id" : "be_vserverid1",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc3_vserverid1",
+ "vserver-id" : "fe_vserverid1",
"vnfc":
{
- "vnfc-type": "VNFC3",
- "vnfc-name": "VNFC3 - Name"
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
}
},
{
- "vserver-id" : "vnfc3_vserverid2",
+ "vserver-id" : "fe_vserverid2",
"vnfc":
{
- "vnfc-type": "VNFC3",
- "vnfc-name": "VNFC3 - Name"
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid2",
+ "vserver-id" : "be_vserverid2",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid3",
+ "vserver-id" : "be_vserverid3",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc1_vserverid1",
+ "vserver-id" : "smp_vserverid1",
"vnfc":
{
- "vnfc-type": "VNFC1",
- "vnfc-name": "VNFC1 - Name"
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
}
},
{
- "vserver-id" : "vnfc1_vserverid2",
+ "vserver-id" : "smp_vserverid2",
"vnfc":
{
- "vnfc-type": "VNFC1",
- "vnfc-name": "VNFC1 - Name"
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid4",
+ "vserver-id" : "be_vserverid4",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid5",
+ "vserver-id" : "be_vserverid5",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
}
]
}
},
- "dependency-info" :
- {
- "vnfcs" :
- [
+ "dependency-info" : {
+ "vnfcs" : [
{
- "vnfc-type" : "VNFC2",
+ "vnfc-type" : "BE",
"mandatory" : "true",
"resilience": "Active-Active",
- "parents" :
- [
- "VNFC1"
+ "parents" : [
+ "SMP"
]
},
{
- "vnfc-type" : "VNFC3",
+ "vnfc-type" : "FE",
"mandatory" : "true",
"resilience": "Active-Active",
- "parents" :
- [
- "VNFC2"
+ "parents" : [
+ "BE"
]
},
{
- "vnfc-type" : "VNFC1",
+ "vnfc-type" : "SMP",
"mandatory" : "true",
"resilience": "Active-Passive",
- "parents" :
- [
- "VNFC3"
- ]
+ "parents" : ["FE"]
}
]
},
- "tunable-parameters" :
- {
+ "tunable-parameters" : {
"strategy" : "FORWARD",
"wait-time" : "120",
"retry-count" : "5"
},
- "capabilities" :
- {
- "vnf":
- [
- "Stop",
- "Start",
- "StartApplication",
- "StopApplication"
- ],
- "vf-module":
- [
- "Stop",
- "Start"
- ],
- "vm" :
- [
- "Stop",
- "Start"
- ],
- "vnfc":
- [
- "StopApplication",
- "StartApplication",
- "HealthCheck"
- ]
+ "capabilities" : {
+ "vnf": ["Stop", "Start", "StartApplication","StopApplication"],
+ "vf-module": ["Stop", "Start"],
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
}
}
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/missingrequestinfo.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/missingrequestinfo.json
index c5bc7ead2..80c9ff501 100644
--- a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/missingrequestinfo.json
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/missingrequestinfo.json
@@ -1,185 +1,132 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP : APPC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Copyright (C) 2017 Amdocs
- * =============================================================================
- * 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.
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- * ============LICENSE_END=========================================================
- */
-
-
{
- "inventory-info":
- {
- "vnf-info":
- {
+ "inventory-info": {
+ "vnf-info": {
"vnf-id" : "abc",
- "vnf-name": "vVNF",
- "vnf-type": "vVNF",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
"vnf-version" : "1.0",
- "vm":
- [
+ "vm": [
{
- "vserver-id" : "vnfc2_vserverid1",
+ "vserver-id" : "be_vserverid1",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc3_vserverid1",
+ "vserver-id" : "fe_vserverid1",
"vnfc":
{
- "vnfc-type": "VNFC3",
- "vnfc-name": "VNFC3 - Name"
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
}
},
{
- "vserver-id" : "vnfc3_vserverid2",
+ "vserver-id" : "fe_vserverid2",
"vnfc":
{
- "vnfc-type": "VNFC3",
- "vnfc-name": "VNFC3 - Name"
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid2",
+ "vserver-id" : "be_vserverid2",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid3",
+ "vserver-id" : "be_vserverid3",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc1_vserverid1",
+ "vserver-id" : "smp_vserverid1",
"vnfc":
{
- "vnfc-type": "VNFC1",
- "vnfc-name": "VNFC1 - Name"
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
}
},
{
- "vserver-id" : "vnfc1_vserverid2",
+ "vserver-id" : "smp_vserverid2",
"vnfc":
{
- "vnfc-type": "VNFC1",
- "vnfc-name": "VNFC1 - Name"
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid4",
+ "vserver-id" : "be_vserverid4",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid5",
+ "vserver-id" : "be_vserverid5",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
}
]
}
},
- "dependency-info":
- {
- "vnfcs" :
- [
+ "dependency-info": {
+ "vnfcs" : [
{
- "vnfc-type" : "VNFC2",
+ "vnfc-type" : "BE",
"mandatory" : "true",
"resilience": "Active-Active",
- "parents" :
- [
- "VNFC1"
+ "parents" : [
+ "SMP"
]
},
{
- "vnfc-type" : "VNFC3",
+ "vnfc-type" : "FE",
"mandatory" : "true",
"resilience": "Active-Active",
- "parents" :
- [
- "VNFC2"
+ "parents" : [
+ "BE"
]
},
{
- "vnfc-type" : "VNFC1",
+ "vnfc-type" : "SMP",
"mandatory" : "true",
"resilience": "Active-Passive",
"parents" : []
}
]
},
- "tunable-parameters":
- {
+ "tunable-parameters": {
"strategy" : "FORWARD",
"wait-time": "120",
"retry-count": "5"
},
- "capabilities" :
- {
- "vnf":
- [
- "Stop",
- "Start",
- "StartApplication",
- "StopApplication"
- ],
- "vf-module":
- [
- "Stop",
- "Start"
- ],
- "vm" :
- [
- "Stop",
- "Start"
- ],
- "vnfc":
- [
- "StopApplication",
- "StartApplication",
- "HealthCheck"
- ]
+ "capabilities" : {
+ "vnf": ["Stop", "Start", "StartApplication","StopApplication"],
+ "vf-module": ["Stop", "Start"],
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
}
}
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/no-strategy.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/no-strategy.json
index 1371d2273..1b5ee9477 100644
--- a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/no-strategy.json
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/no-strategy.json
@@ -1,194 +1,140 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP : APPC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Copyright (C) 2017 Amdocs
- * =============================================================================
- * 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.
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- * ============LICENSE_END=========================================================
- */
-
-
{
- "request-info":
- {
+ "request-info": {
"action": "Start",
"action-level": "vnf",
- "action-identifier":
- {
+ "action-identifier": {
"vnf-id": "dbgx0001v"
},
"payload": "ABC"
},
- "inventory-info":
- {
- "vnf-info":
- {
+ "inventory-info": {
+ "vnf-info": {
"vnf-id" : "abc",
- "vnf-name": "vVNF",
- "vnf-type": "vVNF",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
"vnf-version" : "1.0",
"vm": [
{
- "vserver-id" : "vnfc2_vserverid1",
+ "vserver-id" : "be_vserverid1",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc3_vserverid1",
+ "vserver-id" : "fe_vserverid1",
"vnfc":
{
- "vnfc-type": "VNFC3",
- "vnfc-name": "VNFC3 - Name"
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
}
},
{
- "vserver-id" : "vnfc3_vserverid2",
+ "vserver-id" : "fe_vserverid2",
"vnfc":
{
- "vnfc-type": "VNFC3",
- "vnfc-name": "VNFC3 - Name"
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid2",
+ "vserver-id" : "be_vserverid2",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid3",
+ "vserver-id" : "be_vserverid3",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc1_vserverid1",
+ "vserver-id" : "smp_vserverid1",
"vnfc":
{
- "vnfc-type": "VNFC1",
- "vnfc-name": "VNFC1 - Name"
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
}
},
{
- "vserver-id" : "vnfc1_vserverid2",
+ "vserver-id" : "smp_vserverid2",
"vnfc":
{
- "vnfc-type": "VNFC1",
- "vnfc-name": "VNFC1 - Name"
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid4",
+ "vserver-id" : "be_vserverid4",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid5",
+ "vserver-id" : "be_vserverid5",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
}
]
}
},
- "dependency-info":
- {
- "vnfcs" :
- [
+ "dependency-info": {
+ "vnfcs" : [
{
- "vnfc-type" : "VNFC2",
+ "vnfc-type" : "BE",
"mandatory" : "true",
"resilience": "Active-Active",
- "parents" :
- [
- "VNFC1"
+ "parents" : [
+ "SMP"
]
},
{
- "vnfc-type" : "VNFC3",
+ "vnfc-type" : "FE",
"mandatory" : "true",
"resilience": "Active-Active",
- "parents" :
- [
- "VNFC2"
+ "parents" : [
+ "BE"
]
},
{
- "vnfc-type" : "VNFC1",
+ "vnfc-type" : "SMP",
"mandatory" : "true",
"resilience": "Active-Passive",
"parents" : []
}
]
},
- "tunable-parameters":
- {
+ "tunable-parameters": {
"strategy" : "",
"wait-time": "120",
"retry-count": "5"
},
- "capabilities" :
- {
- "vnf":
- [
- "Stop",
- "Start",
- "StartApplication",
- "StopApplication"
- ],
- "vf-module":
- [
- "Stop",
- "Start"
- ],
- "vm" :
- [
- "Stop",
- "Start"
- ],
- "vnfc":
- [
- "StopApplication",
- "StartApplication",
- "HealthCheck"
- ]
+ "capabilities" : {
+ "vnf": ["Stop", "Start", "StartApplication","StopApplication"],
+ "vf-module": ["Stop", "Start"],
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
}
}
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/restartNodep.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/restartNodep.json
new file mode 100755
index 000000000..5b44097ff
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/restartNodep.json
@@ -0,0 +1,97 @@
+
+
+{
+ "request-info": {
+ "action": "Restart",
+ "action-level": "vm",
+ "action-identifier": {
+ "vnf-id": "dbgx0001v"
+ },
+ "payload": " {\"vnf-host-ip-address\": \"10.147.124.163\" }"
+
+ },
+ "inventory-info": {
+ "vnf-info": {
+ "vnf-id" : "abc",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
+ "vnf-version" : "1.0",
+ "vm": [
+ {
+ "vserver-id" : "smp_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
+ }
+ },
+ {
+ "vserver-id" : "be_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "fe_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid5",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ }
+ ]
+ }
+ },
+ "dependency-info" : {
+ "vnfcs" : [
+ {
+ "vnfc-type" : "BE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+ "SMP"
+ ]
+ },
+ {
+ "vnfc-type" : "FE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+ "BE"
+ ]
+ },
+ {
+ "vnfc-type" : "SMP",
+ "mandatory" : "true",
+ "resilience": "Active-Passive",
+ "parents" : []
+ }
+ ]
+ },
+ "tunable-parameters" : {
+ "strategy" : "FORWARD",
+ "waitTime" : "120",
+ "retryCount" : "5"
+ },
+ "capabilities" : {
+ "vnf": ["Stop", "Start", "StartApplication","StopApplication"],
+ "vf-module": ["Stop", "Start"],
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
+ }
+}
+
+
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start-singleVM-.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start-singleVM-.json
new file mode 100755
index 000000000..acc6b9c02
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start-singleVM-.json
@@ -0,0 +1,42 @@
+
+
+{
+ "request-info": {
+ "action": "Start",
+ "action-level": "vm",
+ "action-identifier": {
+ "vserver-id": "dbgx0001v"
+ },
+ "payload": "ABC"
+ },
+ "inventory-info": {
+ "vnf-info": {
+ "vnf-id" : "abc",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
+ "vnf-version" : "1.0",
+ "vm": [
+ {
+ "vserver-id" : "be_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+ }
+ ]
+ }
+ },
+ "dependency-info": {
+
+ },
+ "tunable-parameters": {
+
+ },
+ "capabilities" : {
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
+ }
+}
+
+
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start-singleVmPerVnfc-.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start-singleVmPerVnfc-.json
new file mode 100755
index 000000000..4ec59c245
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start-singleVmPerVnfc-.json
@@ -0,0 +1,51 @@
+
+
+{
+ "request-info": {
+ "action": "Start",
+ "action-level": "vm",
+ "action-identifier": {
+ "vserver-id": "dbgx0001v"
+ },
+ "payload": "ABC"
+ },
+ "inventory-info": {
+ "vnf-info": {
+ "vnf-id" : "abc",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
+ "vnf-version" : "1.0",
+ "vm": [
+ {
+ "vserver-id" : "be_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+ },
+ {
+ "vserver-id" : "smp_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
+ }
+
+ }
+ ]
+ }
+ },
+ "dependency-info": {
+
+ },
+ "tunable-parameters": {
+
+ },
+ "capabilities" : {
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
+ }
+}
+
+
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start-withoutDependency.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start-withoutDependency.json
new file mode 100755
index 000000000..b1a58e3a1
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start-withoutDependency.json
@@ -0,0 +1,114 @@
+
+
+{
+ "request-info": {
+ "action": "Start",
+ "action-level": "vm",
+ "action-identifier": {
+ "vnf-id": "dbgx0001v"
+ },
+ "payload": "ABC"
+ },
+ "inventory-info": {
+ "vnf-info": {
+ "vnf-id" : "abc",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
+ "vnf-version" : "1.0",
+ "vm": [
+ {
+ "vserver-id" : "be_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "fe_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "fe_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid3",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "smp_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "smp_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
+ }
+ },
+ {
+ "vserver-id" : "be_vserverid4",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid5",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ }
+ ]
+ }
+ },
+ "dependency-info": {
+
+ },
+ "tunable-parameters": {
+
+ },
+ "capabilities" : {
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
+ }
+}
+
+
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start.json
index 143b41d23..5dc584d4d 100644
--- a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start.json
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start.json
@@ -1,196 +1,142 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP : APPC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Copyright (C) 2017 Amdocs
- * =============================================================================
- * 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.
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- * ============LICENSE_END=========================================================
- */
-
-
{
- "request-info":
- {
- "action": "Start",
- "action-level": "vnf",
- "action-identifier":
- {
- "vnf-id": "dbgx0001v"
- },
- "payload": "ABC"
- },
- "inventory-info":
- {
- "vnf-info":
- {
- "vnf-id" : "abc",
- "vnf-name": "vVNF",
- "vnf-type": "vVNF",
- "vnf-version" : "1.0",
- "vm":
- [
- {
- "vserver-id" : "vnfc2_vserverid1",
- "vnfc":
- {
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
- }
+ "request-info": {
+ "action": "Start",
+ "action-level": "vnf",
+ "action-identifier": {
+ "vnf-id": "dbgx0001v"
+ },
+ "payload": "ABC"
+
+ },
+ "inventory-info": {
+ "vnf-info": {
+ "vnf-id" : "abc",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
+ "vnf-version" : "1.0",
+ "vm": [
+ {
+ "vserver-id" : "be_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
- },
- {
- "vserver-id" : "vnfc3_vserverid1",
- "vnfc":
- {
- "vnfc-type": "VNFC3",
- "vnfc-name": "VNFC3 - Name"
- }
+ },
+ {
+ "vserver-id" : "fe_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
- },
- {
- "vserver-id" : "vnfc3_vserverid2",
- "vnfc":
- {
- "vnfc-type": "VNFC3",
- "vnfc-name": "VNFC3 - Name"
- }
+ },
+ {
+ "vserver-id" : "fe_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
- },
- {
- "vserver-id" : "vnfc2_vserverid2",
- "vnfc":
- {
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
- }
+ },
+ {
+ "vserver-id" : "be_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
- },
- {
- "vserver-id" : "vnfc2_vserverid3",
- "vnfc":
- {
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
- }
+ },
+ {
+ "vserver-id" : "be_vserverid3",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
- },
- {
- "vserver-id" : "vnfc1_vserverid1",
- "vnfc":
- {
- "vnfc-type": "VNFC1",
- "vnfc-name": "VNFC1 - Name"
- }
+ },
+ {
+ "vserver-id" : "smp_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
+ }
- },
- {
- "vserver-id" : "vnfc1_vserverid2",
- "vnfc":
- {
- "vnfc-type": "VNFC1",
- "vnfc-name": "VNFC1 - Name"
- }
- },
- {
- "vserver-id" : "vnfc2_vserverid4",
- "vnfc":
- {
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
- }
+ },
+ {
+ "vserver-id" : "smp_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
+ }
+ },
+ {
+ "vserver-id" : "be_vserverid4",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
- },
- {
- "vserver-id" : "vnfc2_vserverid5",
- "vnfc":
- {
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
- }
+ },
+ {
+ "vserver-id" : "be_vserverid5",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
- }
- ]
- }
- },
- "dependency-info" :
- {
- "vnfcs" :
- [
- {
- "vnfc-type" : "VNFC2",
- "mandatory" : "true",
- "resilience": "Active-Active",
- "parents" :
- [
- "VNFC1"
- ]
- },
- {
- "vnfc-type" : "VNFC3",
- "mandatory" : "true",
- "resilience": "Active-Active",
- "parents" :
- [
- "VNFC2"
- ]
- },
- {
- "vnfc-type" : "VNFC1",
- "mandatory" : "true",
- "resilience": "Active-Passive",
- "parents" : []
- }
- ]
- },
- "tunable-parameters" :
- {
- "strategy" : "FORWARD",
- "wait-time" : "120",
- "retry-count" : "5"
- },
- "capabilities" :
- {
- "vnf":
- [
- "Stop",
- "Start",
- "StartApplication",
- "StopApplication"
- ],
- "vf-module":
- [
- "Stop",
- "Start"
- ],
- "vm" :
- [
- "Stop",
- "Start"
- ],
- "vnfc":
- [
- "StopApplication",
- "StartApplication",
- "HealthCheck"
- ]
- }
+ }
+ ]
+ }
+ },
+ "dependency-info": {
+ "vnfcs" : [
+ {
+ "vnfc-type" : "BE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+ "SMP"
+ ]
+ },
+ {
+ "vnfc-type" : "FE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+ "BE"
+ ]
+ },
+ {
+ "vnfc-type" : "SMP",
+ "mandatory" : "true",
+ "resilience": "Active-Passive",
+ "parents" : []
+ }
+ ]
+ },
+ "tunable-parameters": {
+ "strategy" : "FORWARD",
+ "wait-time": "120",
+ "retry-count": "5"
+ },
+ "capabilities" : {
+ "vnf": ["Stop", "Start", "StartApplication","StopApplication"],
+ "vf-module": ["Stop", "Start"],
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
+ }
}
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop-WithoutDep.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop-WithoutDep.json
new file mode 100755
index 000000000..137a67c19
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop-WithoutDep.json
@@ -0,0 +1,142 @@
+
+
+{
+ "request-info": {
+ "action": "Stop",
+ "action-level": "vm",
+ "action-identifier": {
+ "vnf-id": "dbgx0001v"
+ },
+ "payload": " {\"vnf-host-ip-address\": \"10.147.124.163\" }"
+
+ },
+ "inventory-info": {
+ "vnf-info": {
+ "vnf-id" : "abc",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
+ "vnf-version" : "1.0",
+ "vm": [
+ {
+ "vserver-id" : "be_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "fe_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "fe_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid3",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "smp_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "smp_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
+ }
+ },
+ {
+ "vserver-id" : "be_vserverid4",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid5",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ }
+ ]
+ }
+ },
+ "dependency-info": {
+ "vnfcs" : [
+ {
+ "vnfc-type" : "BE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+ "SMP"
+ ]
+ },
+ {
+ "vnfc-type" : "FE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+ "BE"
+ ]
+ },
+ {
+ "vnfc-type" : "SMP",
+ "mandatory" : "true",
+ "resilience": "Active-Passive",
+ "parents" : []
+ }
+ ]
+ },
+ "tunable-parameters": {
+ "strategy" : "FORWARD",
+ "wait-time": "120",
+ "retry-count": "5"
+ },
+ "capabilities" : {
+ "vnf": ["Stop", "Start", "StartApplication","StopApplication"],
+ "vf-module": ["Stop", "Start"],
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
+ }
+}
+
+
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop-singleVM.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop-singleVM.json
new file mode 100755
index 000000000..30b936585
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop-singleVM.json
@@ -0,0 +1,42 @@
+
+
+{
+ "request-info": {
+ "action": "Stop",
+ "action-level": "vm",
+ "action-identifier": {
+ "vserver-id": "dbgx0001v"
+ },
+ "payload": "ABC"
+ },
+ "inventory-info": {
+ "vnf-info": {
+ "vnf-id" : "abc",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
+ "vnf-version" : "1.0",
+ "vm": [
+ {
+ "vserver-id" : "be_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+ }
+ ]
+ }
+ },
+ "dependency-info": {
+
+ },
+ "tunable-parameters": {
+
+ },
+ "capabilities" : {
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
+ }
+}
+
+
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop-singleVmPerVnfc.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop-singleVmPerVnfc.json
new file mode 100755
index 000000000..61d9630ab
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop-singleVmPerVnfc.json
@@ -0,0 +1,50 @@
+
+
+{
+ "request-info": {
+ "action": "Stop",
+ "action-level": "vm",
+ "action-identifier": {
+ "vserver-id": "dbgx0001v"
+ },
+ "payload": "ABC"
+ },
+ "inventory-info": {
+ "vnf-info": {
+ "vnf-id" : "abc",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
+ "vnf-version" : "1.0",
+ "vm": [
+ {
+ "vserver-id" : "be_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+ },
+ {
+ "vserver-id" : "smp_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
+ }
+
+ }
+ ]
+ }},
+ "dependency-info": {
+
+ },
+ "tunable-parameters": {
+
+ },
+ "capabilities" : {
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
+ }
+}
+
+
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop.json
index 9131a652b..0b7a1a7c1 100644
--- a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop.json
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop.json
@@ -1,196 +1,141 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP : APPC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Copyright (C) 2017 Amdocs
- * =============================================================================
- * 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.
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- * ============LICENSE_END=========================================================
- */
-
-
{
- "request-info":
- {
+ "request-info": {
"action": "Stop",
"action-level": "vnf",
- "action-identifier":
- {
+ "action-identifier": {
"vnf-id": "dbgx0001v"
},
"payload": " {\"vnf-host-ip-address\": \"10.147.124.163\" }"
},
- "inventory-info":
- {
- "vnf-info":
- {
+ "inventory-info": {
+ "vnf-info": {
"vnf-id" : "abc",
- "vnf-name": "vVNF",
- "vnf-type": "vVNF",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
"vnf-version" : "1.0",
- "vm":
- [
+ "vm": [
{
- "vserver-id" : "vnfc2_vserverid1",
+ "vserver-id" : "be_vserverid1",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc3_vserverid1",
+ "vserver-id" : "fe_vserverid1",
"vnfc":
{
- "vnfc-type": "VNFC3",
- "vnfc-name": "VNFC3 - Name"
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
}
},
{
- "vserver-id" : "vnfc3_vserverid2",
+ "vserver-id" : "fe_vserverid2",
"vnfc":
{
- "vnfc-type": "VNFC3",
- "vnfc-name": "VNFC3 - Name"
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid2",
+ "vserver-id" : "be_vserverid2",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid3",
+ "vserver-id" : "be_vserverid3",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc1_vserverid1",
+ "vserver-id" : "smp_vserverid1",
"vnfc":
{
- "vnfc-type": "VNFC1",
- "vnfc-name": "VNFC1 - Name"
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
}
},
{
- "vserver-id" : "vnfc1_vserverid2",
+ "vserver-id" : "smp_vserverid2",
"vnfc":
{
- "vnfc-type": "VNFC1",
- "vnfc-name": "VNFC1 - Name"
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid4",
+ "vserver-id" : "be_vserverid4",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
},
{
- "vserver-id" : "vnfc2_vserverid5",
+ "vserver-id" : "be_vserverid5",
"vnfc":
{
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
}
}
]
}
},
- "dependency-info":
- {
- "vnfcs" :
- [
+ "dependency-info": {
+ "vnfcs" : [
{
- "vnfc-type" : "VNFC2",
+ "vnfc-type" : "BE",
"mandatory" : "true",
"resilience": "Active-Active",
- "parents" :
- [
- "VNFC1"
+ "parents" : [
+ "SMP"
]
},
{
- "vnfc-type" : "VNFC3",
+ "vnfc-type" : "FE",
"mandatory" : "true",
"resilience": "Active-Active",
- "parents" :
- [
- "VNFC2"
+ "parents" : [
+ "BE"
]
},
{
- "vnfc-type" : "VNFC1",
+ "vnfc-type" : "SMP",
"mandatory" : "true",
"resilience": "Active-Passive",
"parents" : []
}
]
},
- "tunable-parameters":
- {
+ "tunable-parameters": {
"strategy" : "FORWARD",
"wait-time": "120",
"retry-count": "5"
},
- "capabilities" :
- {
- "vnf":
- [
- "Stop",
- "Start",
- "StartApplication",
- "StopApplication"
- ],
- "vf-module":
- [
- "Stop",
- "Start"
- ],
- "vm" :
- [
- "Stop",
- "Start"
- ],
- "vnfc":
- [
- "StopApplication",
- "StartApplication",
- "HealthCheck"
- ]
+ "capabilities" : {
+ "vnf": ["Stop", "Start", "StartApplication","StopApplication"],
+ "vf-module": ["Stop", "Start"],
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
}
}
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/wrongaction.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/wrongaction.json
index 72f6ed87f..cd6eaa779 100644
--- a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/wrongaction.json
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/wrongaction.json
@@ -1,196 +1,141 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP : APPC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Copyright (C) 2017 Amdocs
- * =============================================================================
- * 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.
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- * ============LICENSE_END=========================================================
- */
-
-
{
- "request-info":
- {
- "action": "start",
- "action-level": "vnf",
- "action-identifier":
- {
- "vnf-id": "dbgx0001v"
- },
- "payload": "ABC"
- },
- "inventory-info":
- {
- "vnf-info":
- {
- "vnf-id" : "abc",
- "vnf-name": "vVNF",
- "vnf-type": "vVNF",
- "vnf-version" : "1.0",
- "vm":
- [
- {
- "vserver-id" : "vnfc2_vserverid1",
- "vnfc":
- {
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
- }
-
- },
- {
- "vserver-id" : "vnfc3_vserverid1",
- "vnfc":
- {
- "vnfc-type": "VNFC3",
- "vnfc-name": "VNFC3 - Name"
- }
-
- },
- {
- "vserver-id" : "vnfc3_vserverid2",
- "vnfc":
- {
- "vnfc-type": "VNFC3",
- "vnfc-name": "VNFC3 - Name"
- }
-
- },
- {
- "vserver-id" : "vnfc2_vserverid2",
- "vnfc":
- {
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
- }
-
- },
- {
- "vserver-id" : "vnfc2_vserverid3",
- "vnfc":
- {
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
- }
-
- },
- {
- "vserver-id" : "vnfc1_vserverid1",
- "vnfc":
- {
- "vnfc-type": "VNFC1",
- "vnfc-name": "VNFC1 - Name"
- }
-
- },
- {
- "vserver-id" : "vnfc1_vserverid2",
- "vnfc":
- {
- "vnfc-type": "VNFC1",
- "vnfc-name": "VNFC1 - Name"
- }
- },
- {
- "vserver-id" : "vnfc2_vserverid4",
- "vnfc":
- {
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
- }
+ "request-info": {
+ "action": "start",
+ "action-level": "vnf",
+ "action-identifier": {
+ "vnf-id": "dbgx0001v"
+ },
+ "payload": "ABC"
+ },
+ "inventory-info": {
+ "vnf-info": {
+ "vnf-id" : "abc",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
+ "vnf-version" : "1.0",
+ "vm": [
+ {
+ "vserver-id" : "be_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "fe_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "fe_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid3",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "smp_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "smp_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
+ }
+ },
+ {
+ "vserver-id" : "be_vserverid4",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
- },
- {
- "vserver-id" : "vnfc2_vserverid5",
- "vnfc":
- {
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
- }
+ },
+ {
+ "vserver-id" : "be_vserverid5",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
- }
- ]
- }
- },
- "dependency-info":
- {
- "vnfcs" :
- [
- {
- "vnfc-type" : "VNFC2",
- "mandatory" : "true",
- "resilience": "Active-Active",
- "parents" :
- [
- "VNFC1"
- ]
- },
- {
- "vnfc-type" : "VNFC3",
- "mandatory" : "true",
- "resilience": "Active-Active",
- "parents" :
- [
- "VNFC2"
- ]
- },
- {
- "vnfc-type" : "VNFC1",
- "mandatory" : "true",
- "resilience": "Active-Passive",
- "parents" : []
- }
- ]
- },
- "tunable-parameters":
- {
- "strategy" : "FORWARD",
- "wait-time": "120",
- "retry-count": "5"
- },
- "capabilities" :
- {
- "vnf":
- [
- "Stop",
- "Start",
- "StartApplication",
- "StopApplication"
- ],
- "vf-module":
- [
- "Stop",
- "Start"
- ],
- "vm" :
- [
- "Stop",
- "Start"
- ],
- "vnfc":
- [
- "StopApplication",
- "StartApplication",
- "HealthCheck"
- ]
- }
+ }
+ ]
+ }
+ },
+ "dependency-info": {
+ "vnfcs" : [
+ {
+ "vnfc-type" : "BE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+ "SMP"
+ ]
+ },
+ {
+ "vnfc-type" : "FE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+ "BE"
+ ]
+ },
+ {
+ "vnfc-type" : "SMP",
+ "mandatory" : "true",
+ "resilience": "Active-Passive",
+ "parents" : []
+ }
+ ]
+ },
+ "tunable-parameters": {
+ "strategy" : "FORWARD",
+ "wait-time": "120",
+ "retry-count": "5"
+ },
+ "capabilities" : {
+ "vnf": ["Stop", "Start", "StartApplication","StopApplication"],
+ "vf-module": ["Stop", "Start"],
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
+ }
}
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/wrongnumber.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/wrongnumber.json
index 958df0379..ffdaec28a 100644
--- a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/wrongnumber.json
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/wrongnumber.json
@@ -1,196 +1,141 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP : APPC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Copyright (C) 2017 Amdocs
- * =============================================================================
- * 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.
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- * ============LICENSE_END=========================================================
- */
-
-
{
- "request-info":
- {
- "action": "Start",
- "action-level": "vnf",
- "action-identifier":
- {
- "vnf-id": "dbgx0001v"
- },
- "payload": "ABC"
- },
- "inventory-info":
- {
- "vnf-info":
- {
- "vnf-id" : "abc",
- "vnf-name": "vVNF",
- "vnf-type": "vVNF",
- "vnf-version" : "1.0",
- "vm":
- [
- {
- "vserver-id" : "vnfc2_vserverid1",
- "vnfc":
- {
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
- }
-
- },
- {
- "vserver-id" : "vnfc3_vserverid1",
- "vnfc":
- {
- "vnfc-type": "VNFC3",
- "vnfc-name": "VNFC3 - Name"
- }
-
- },
- {
- "vserver-id" : "vnfc3_vserverid2",
- "vnfc":
- {
- "vnfc-type": "VNFC3",
- "vnfc-name": "VNFC3 - Name"
- }
-
- },
- {
- "vserver-id" : "vnfc2_vserverid2",
- "vnfc":
- {
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
- }
-
- },
- {
- "vserver-id" : "vnfc2_vserverid3",
- "vnfc":
- {
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
- }
-
- },
- {
- "vserver-id" : "vnfc1_vserverid1",
- "vnfc":
- {
- "vnfc-type": "VNFC1",
- "vnfc-name": "VNFC1 - Name"
- }
-
- },
- {
- "vserver-id" : "vnfc1_vserverid2",
- "vnfc":
- {
- "vnfc-type": "VNFC1",
- "vnfc-name": "VNFC1 - Name"
- }
- },
- {
- "vserver-id" : "vnfc2_vserverid4",
- "vnfc":
- {
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
- }
+ "request-info": {
+ "action": "Start",
+ "action-level": "vnf",
+ "action-identifier": {
+ "vnf-id": "dbgx0001v"
+ },
+ "payload": "ABC"
+ },
+ "inventory-info": {
+ "vnf-info": {
+ "vnf-id" : "abc",
+ "vnf-name": "vSCP",
+ "vnf-type": "vSCP",
+ "vnf-version" : "1.0",
+ "vm": [
+ {
+ "vserver-id" : "be_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "fe_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "fe_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "FE",
+ "vnfc-name": "FE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "be_vserverid3",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "smp_vserverid1",
+ "vnfc":
+ {
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
+ }
+
+ },
+ {
+ "vserver-id" : "smp_vserverid2",
+ "vnfc":
+ {
+ "vnfc-type": "SMP",
+ "vnfc-name": "SMP - Name"
+ }
+ },
+ {
+ "vserver-id" : "be_vserverid4",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
- },
- {
- "vserver-id" : "vnfc2_vserverid5",
- "vnfc":
- {
- "vnfc-type": "VNFC2",
- "vnfc-name": "VNFC2 - Name"
- }
+ },
+ {
+ "vserver-id" : "be_vserverid5",
+ "vnfc":
+ {
+ "vnfc-type": "BE",
+ "vnfc-name": "BE - Name"
+ }
- }
- ]
- }
- },
- "dependency-info":
- {
- "vnfcs" :
- [
- {
- "vnfc-type" : "VNFC2",
- "mandatory" : "true",
- "resilience": "Active-Active",
- "parents" :
- [
- "VNFC1"
- ]
- },
- {
- "vnfc-type" : "VNFC3",
- "mandatory" : "true",
- "resilience": "Active-Active",
- "parents" :
- [
- "VNFC2"
- ]
- },
- {
- "vnfc-type" : "VNFC1",
- "mandatory" : "true",
- "resilience": "Active-Passive",
- "parents" : []
- }
- ]
- },
- "tunable-parameters":
- {
- "strategy" : "FORWARD",
- "wait-time": "6a",
- "retry-count": "5"
- },
- "capabilities" :
- {
- "vnf":
- [
- "Stop",
- "Start",
- "StartApplication",
- "StopApplication"
- ],
- "vf-module":
- [
- "Stop",
- "Start"
- ],
- "vm" :
- [
- "Stop",
- "Start"
- ],
- "vnfc":
- [
- "StopApplication",
- "StartApplication",
- "HealthCheck"
- ]
- }
+ }
+ ]
+ }
+ },
+ "dependency-info": {
+ "vnfcs" : [
+ {
+ "vnfc-type" : "BE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+ "SMP"
+ ]
+ },
+ {
+ "vnfc-type" : "FE",
+ "mandatory" : "true",
+ "resilience": "Active-Active",
+ "parents" : [
+ "BE"
+ ]
+ },
+ {
+ "vnfc-type" : "SMP",
+ "mandatory" : "true",
+ "resilience": "Active-Passive",
+ "parents" : []
+ }
+ ]
+ },
+ "tunable-parameters": {
+ "strategy" : "FORWARD",
+ "wait-time": "6a",
+ "retry-count": "5"
+ },
+ "capabilities" : {
+ "vnf": ["Stop", "Start", "StartApplication","StopApplication"],
+ "vf-module": ["Stop", "Start"],
+ "vm" : ["Stop", "Start"],
+ "vnfc": ["StopApplication", "StartApplication","HealthCheck"]
+ }
}
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/Output-stop.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/Output-stop.json
new file mode 100755
index 000000000..17aea0d12
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/Output-stop.json
@@ -0,0 +1,3 @@
+
+
+[{"transactionId":1,"action":"StopApplication","action-level":"vnfc","action-identifier":{"vnfc-name":"SMP - Name"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":2,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"smp_vserverid1"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":3,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"smp_vserverid2"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":4,"action":"StopApplication","action-level":"vnfc","action-identifier":{"vnfc-name":"BE - Name"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":5,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid1"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":6,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid2"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":7,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid3"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":8,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid4"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":9,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid5"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":10,"action":"StopApplication","action-level":"vnfc","action-identifier":{"vnfc-name":"FE - Name"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":11,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"fe_vserverid1"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":12,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"fe_vserverid2"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]}]
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/Start.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/Start.json
new file mode 100644
index 000000000..e67f22f56
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/Start.json
@@ -0,0 +1,2 @@
+
+[{"transactionId":1,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"smp_vserverid1"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":2,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"smp_vserverid2"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":3,"action":"StartApplication","action-level":"vnfc","action-identifier":{"vnfc-name":"SMP - Name"},"payload":"ABC","precheck-operator":"any","precheck-options":[{"pre-transactionID":1,"param-name":"status","param-value":"success"},{"pre-transactionID":2,"param-name":"status","param-value":"success"}],"responses":[]},{"transactionId":4,"action":"HealthCheck","action-level":"vnfc","action-identifier":{"vnfc-name":"SMP - Name"},"payload":"ABC","responses":[{"response-message":"unhealthy","response-action":{"wait":"120","retry":"5"}},{"response-message":"healthy","response-action":{"continue":"true"}},{"response-message":"failure","response-action":{"stop":"true"}}]},{"transactionId":5,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid1"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":6,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid2"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":7,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid3"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":8,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid4"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":9,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid5"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":10,"action":"StartApplication","action-level":"vnfc","action-identifier":{"vnfc-name":"BE - Name"},"payload":"ABC","precheck-operator":"any","precheck-options":[{"pre-transactionID":5,"param-name":"status","param-value":"success"},{"pre-transactionID":6,"param-name":"status","param-value":"success"},{"pre-transactionID":7,"param-name":"status","param-value":"success"},{"pre-transactionID":8,"param-name":"status","param-value":"success"},{"pre-transactionID":9,"param-name":"status","param-value":"success"}],"responses":[]},{"transactionId":11,"action":"HealthCheck","action-level":"vnfc","action-identifier":{"vnfc-name":"BE - Name"},"payload":"ABC","responses":[{"response-message":"unhealthy","response-action":{"wait":"120","retry":"5"}},{"response-message":"healthy","response-action":{"continue":"true"}},{"response-message":"failure","response-action":{"stop":"true"}}]},{"transactionId":12,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"fe_vserverid1"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":13,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"fe_vserverid2"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":14,"action":"StartApplication","action-level":"vnfc","action-identifier":{"vnfc-name":"FE - Name"},"payload":"ABC","precheck-operator":"any","precheck-options":[{"pre-transactionID":12,"param-name":"status","param-value":"success"},{"pre-transactionID":13,"param-name":"status","param-value":"success"}],"responses":[]},{"transactionId":15,"action":"HealthCheck","action-level":"vnfc","action-identifier":{"vnfc-name":"FE - Name"},"payload":"ABC","responses":[{"response-message":"unhealthy","response-action":{"wait":"120","retry":"5"}},{"response-message":"healthy","response-action":{"continue":"true"}},{"response-message":"failure","response-action":{"stop":"true"}}]}]
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/restart-NoDep.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/restart-NoDep.json
new file mode 100755
index 000000000..df6f7b93d
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/restart-NoDep.json
@@ -0,0 +1 @@
+[{"transactionId":1,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"smp_vserverid2"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"jump":"3"}}]},{"transactionId":2,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"smp_vserverid2"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"jump":"3"}}]},{"transactionId":3,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid2"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"jump":"5"}}]},{"transactionId":4,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid2"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"jump":"5"}}]},{"transactionId":5,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"fe_vserverid2"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"jump":"7"}}]},{"transactionId":6,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"fe_vserverid2"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"jump":"7"}}]},{"transactionId":7,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid5"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[]},{"transactionId":8,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid5"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[]}] \ No newline at end of file
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/restart-Nodep-SingleVM.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/restart-Nodep-SingleVM.json
new file mode 100755
index 000000000..c3e2a7449
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/restart-Nodep-SingleVM.json
@@ -0,0 +1,4 @@
+
+
+
+[{"transactionId":1,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid1"},"payload":"ABC","responses":[]},{"transactionId":2,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid1"},"payload":"ABC","responses":[]}]
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/start-singleVM-.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/start-singleVM-.json
new file mode 100755
index 000000000..dbacc77d8
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/start-singleVM-.json
@@ -0,0 +1,3 @@
+
+
+[{"transactionId":1,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid1"},"payload":"ABC","responses":[]}]
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/start-singleVmPerVnfc.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/start-singleVmPerVnfc.json
new file mode 100755
index 000000000..5d43c4b7b
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/start-singleVmPerVnfc.json
@@ -0,0 +1,3 @@
+
+
+[{"transactionId":1,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid1"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":2,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"smp_vserverid1"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]}]
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/start-withoutDependency.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/start-withoutDependency.json
new file mode 100755
index 000000000..64f9f467f
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/start-withoutDependency.json
@@ -0,0 +1 @@
+[{"transactionId":1,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid1"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":2,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"fe_vserverid1"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":3,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"fe_vserverid2"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":4,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid2"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":5,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid3"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":6,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"smp_vserverid1"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":7,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"smp_vserverid2"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":8,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid4"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":9,"action":"Start","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid5"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]}] \ No newline at end of file
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/stop-WithoutDep.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/stop-WithoutDep.json
new file mode 100755
index 000000000..f35e58c1b
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/stop-WithoutDep.json
@@ -0,0 +1,3 @@
+
+
+[{"transactionId":1,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid1"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":2,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"fe_vserverid1"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":3,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"fe_vserverid2"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":4,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid2"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":5,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid3"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":6,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"smp_vserverid1"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":7,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"smp_vserverid2"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":8,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid4"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":9,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid5"},"payload":" {\"vnf-host-ip-address\": \"10.147.124.163\" }","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]}]
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/stop-singleVM.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/stop-singleVM.json
new file mode 100755
index 000000000..50447feca
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/stop-singleVM.json
@@ -0,0 +1,3 @@
+
+
+[{"transactionId":1,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid1"},"payload":"ABC","responses":[]}]
diff --git a/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/stop-singleVmPerVnfc.json b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/stop-singleVmPerVnfc.json
new file mode 100755
index 000000000..8830c0955
--- /dev/null
+++ b/appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/stop-singleVmPerVnfc.json
@@ -0,0 +1,3 @@
+
+
+[{"transactionId":1,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"be_vserverid1"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]},{"transactionId":2,"action":"Stop","action-level":"vm","action-identifier":{"vserver-id":"smp_vserverid1"},"payload":"ABC","responses":[{"response-message":"failure","response-action":{"ignore":"true"}}]}]