From 13b9505921e2cbbd4b155a78bfdaa5caa3375ec0 Mon Sep 17 00:00:00 2001 From: Ramya Balaji Date: Tue, 2 Jan 2018 21:58:59 -0500 Subject: 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 --- .../dgplugin/impl/SequenceGeneratorPluginImpl.java | 123 +++++--- .../appc/seqgen/impl/RestartSequenceGenerator.java | 108 +++++++ .../appc/seqgen/impl/SequenceGeneratorFactory.java | 4 +- .../appc/seqgen/impl/StartSequenceGenerator.java | 144 +++++---- .../appc/seqgen/impl/StopSequenceGenerator.java | 141 +++++---- .../org/onap/appc/seqgen/objects/Constants.java | 11 +- .../seqgen/provider/SequenceGeneratorProvider.java | 309 ++++++++++++++------ .../appc/seqgen/TestSequenceGeneratorPlugin.java | 146 +++++++++- .../test/resources/input/CheckMandatoryVnfc.json | 124 ++++++++ .../resources/input/MissingDependencyInfo.json | 133 +++++++++ .../src/test/resources/input/NoDep-SingleVM.json | 38 +++ .../test/resources/input/WrongDependencyModel.json | 117 ++++++++ .../src/test/resources/input/cyclic.json | 155 ++++------ .../test/resources/input/missingrequestinfo.json | 147 +++------- .../src/test/resources/input/no-strategy.json | 150 +++------- .../src/test/resources/input/restartNodep.json | 97 +++++++ .../src/test/resources/input/start-singleVM-.json | 42 +++ .../resources/input/start-singleVmPerVnfc-.json | 51 ++++ .../resources/input/start-withoutDependency.json | 114 ++++++++ .../src/test/resources/input/start.json | 310 ++++++++------------ .../src/test/resources/input/stop-WithoutDep.json | 142 +++++++++ .../src/test/resources/input/stop-singleVM.json | 42 +++ .../test/resources/input/stop-singleVmPerVnfc.json | 50 ++++ .../src/test/resources/input/stop.json | 153 ++++------ .../src/test/resources/input/wrongaction.json | 321 +++++++++------------ .../src/test/resources/input/wrongnumber.json | 321 +++++++++------------ .../src/test/resources/output/Output-stop.json | 3 + .../src/test/resources/output/Start.json | 2 + .../src/test/resources/output/restart-NoDep.json | 1 + .../resources/output/restart-Nodep-SingleVM.json | 4 + .../src/test/resources/output/start-singleVM-.json | 3 + .../resources/output/start-singleVmPerVnfc.json | 3 + .../resources/output/start-withoutDependency.json | 1 + .../src/test/resources/output/stop-WithoutDep.json | 3 + .../src/test/resources/output/stop-singleVM.json | 3 + .../resources/output/stop-singleVmPerVnfc.json | 3 + .../src/main/yang/sequence-generator.yang | 36 ++- 37 files changed, 2330 insertions(+), 1225 deletions(-) create mode 100644 appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/RestartSequenceGenerator.java create mode 100644 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/CheckMandatoryVnfc.json create mode 100644 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/MissingDependencyInfo.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/NoDep-SingleVM.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/WrongDependencyModel.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/restartNodep.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start-singleVM-.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start-singleVmPerVnfc-.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/start-withoutDependency.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop-WithoutDep.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop-singleVM.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/input/stop-singleVmPerVnfc.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/Output-stop.json create mode 100644 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/Start.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/restart-NoDep.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/restart-Nodep-SingleVM.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/start-singleVM-.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/start-singleVmPerVnfc.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/start-withoutDependency.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/stop-WithoutDep.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/stop-singleVM.json create mode 100755 appc-sequence-generator/appc-sequence-generator-bundle/src/test/resources/output/stop-singleVmPerVnfc.json (limited to 'appc-sequence-generator') 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 dependencyModelVnfcSet = new HashSet<>(); + Set dependencyModelMandatoryVnfcSet = new HashSet<>(); + Set inventoryModelVnfcsSet = new HashSet<>(); + + for (Node 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 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 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> dependency = new HashSet<>(); + Set parentVnfcs=new HashSet<>(); + Set 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 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 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> 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 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 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> entry : vfcs.entrySet()) { Vnfc vnfc = entry.getKey(); List 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 generateSequence(SequenceGeneratorInput input) throws APPCException { + logger.info("Generating sequence without dependency model"); + return generateSequenceWithOutDependency(input); + } + + private List generateSequenceWithOutDependency(SequenceGeneratorInput input) { + List transactionList = new LinkedList<>(); + Integer transactionId = 1; + List vservers = input.getInventoryModel().getVnf().getVservers(); + List 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 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 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 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 transactionList = new LinkedList<>(); Integer transactionId = 1; - List invVnfcList = input.getInventoryModel().getVnf().getVnfcs(); - boolean singleTransaction=checkSingleTransaction(invVnfcList); - for (Vnfc vnfc : invVnfcList) { - List vms = vnfc.getVserverList(); - List 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 vservers = input.getInventoryModel().getVnf().getVservers(); + List 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 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 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 preCheckOptions = new LinkedList<>(); - for (Integer vmTransactionId : transactionIds) { - setPreCheckOptions(preCheckOptions, vmTransactionId); - } + List 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 preCheckOptions, Integer vmTransactionId) { - PreCheckOption option = new PreCheckOption(); - option.setPreTransactionId(vmTransactionId); - option.setParamName("status"); - option.setParamValue("success"); - preCheckOptions.add(option); + private List buildPreCheckOptions(List transactionIds) { + List 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 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 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> capabilities) { @@ -259,6 +286,17 @@ public class StartSequenceGenerator implements SequenceGenerator { } } + private boolean isVnfcPresent(SequenceGeneratorInput input){ + boolean vnfcPresent=true; + List 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 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 generateSequenceWithOutDependency(SequenceGeneratorInput input){ List transactionList = new LinkedList<>(); Integer transactionId = 1; + List vservers = input.getInventoryModel().getVnf().getVservers(); List transactionIds = new LinkedList<>(); - List invVnfcList = input.getInventoryModel().getVnf().getVnfcs(); - boolean singleTransaction=checkSingleTransaction(invVnfcList); - for (Vnfc vnfc : invVnfcList) { - List 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 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 failureAction = new HashMap<>(); - failureAction.put(ResponseAction.IGNORE.getAction(),Boolean.TRUE.toString()); - failureResponse.setResponseAction(failureAction); - transaction.addResponse(failureResponse); - } - private boolean checkSingleTransaction(List invVnfcList) { - int vServerCount=0; - for(Vnfc vnfc : invVnfcList) { - List vms = vnfc.getVserverList(); - vServerCount=vServerCount+vms.size(); - } - return vServerCount <= 1; + transactionList.add(transaction); + } + return transactionList; } private List 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 failureAction = new HashMap<>(); + failureAction.put(ResponseAction.IGNORE.getAction(),Boolean.TRUE.toString()); + failureResponse.setResponseAction(failureAction); + stopAppTransaction.addResponse(failureResponse); transactionList.add(stopAppTransaction); } List 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 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 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 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> 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 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 buildSuccessResponse(List transactions) { - + log.info("Building response from the list of transactions"); List 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 = 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 = buildPrecheckOptionsForResponse(transaction); List 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 buildPrecheckOptionsForResponse(Transaction transaction) { + log.info("Adding Precheck options to response"); + List 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 getResponses(Transaction transaction) { List 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 dependencyModelVnfcSet = new HashSet<>(); + Set dependencyModelMandatoryVnfcSet = new HashSet<>(); + Set inventoryModelVnfcsSet = new HashSet<>(); + + for (Node 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 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 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 = input.getDependencyInfo().getVnfcs(); Set> dependencies = new HashSet<>(); + Set parentVnfcs=new HashSet<>(); + Set allVnfcTypes=new HashSet<>(); for(Vnfcs vnfcObj:vnfcs){ - org.onap.appc.domainmodel.Vnfc vnfc; - Node 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 currentNode = buildVnfcNodeForDependenyInfo(dependencies, vnfcObj, vnfc); for(String parentVnfcType:vnfcObj.getParents()){ - Node parentNode = readNode(parentVnfcType,dependencies); + parentVnfcs.add(parentVnfcType); + Node 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 buildVnfcNodeForDependenyInfo(Set> dependencies, Vnfcs vnfcObj, Vnfc vnfc) { + Node 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 readNode(String vnfcType, Set> dependencies) { for(Node 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> map = new HashMap<>(); + buildVserverDetailsForInventoryModel(input, vnf, map); + for(Map.Entry> entry:map.entrySet()){ + org.onap.appc.domainmodel.Vnfc vnfc = entry.getKey(); + List vmList = entry.getValue(); + vnfc.addVservers(vmList); + } + return new InventoryModel(vnf); + } + + private void buildVserverDetailsForInventoryModel(GenerateSequenceInput input, Vnf vnf, Map> 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 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 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> entry:map.entrySet()){ - org.onap.appc.domainmodel.Vnfc vnfc = entry.getKey(); - List 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 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 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 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 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 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 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 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 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 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 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 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 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"}}]}] diff --git a/appc-sequence-generator/appc-sequence-generator-model/src/main/yang/sequence-generator.yang b/appc-sequence-generator/appc-sequence-generator-model/src/main/yang/sequence-generator.yang index 49c1551d0..6da825195 100644 --- a/appc-sequence-generator/appc-sequence-generator-model/src/main/yang/sequence-generator.yang +++ b/appc-sequence-generator/appc-sequence-generator-model/src/main/yang/sequence-generator.yang @@ -1,3 +1,27 @@ +/*- + * ============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========================================================= + */ + module sequence-generator { yang-version 1; @@ -18,6 +42,7 @@ module sequence-generator { type enumeration { enum "Start"; enum "Stop"; + enum "Restart"; } } leaf action-level { @@ -62,6 +87,7 @@ module sequence-generator { type string; } list vm { + ordered-by user; key "vserver-id"; leaf vserver-id { type string; @@ -118,8 +144,8 @@ module sequence-generator { grouping capabilities { container capabilities { leaf-list vnf { - type string; - } + type string; + } leaf-list vf-module { type string; } @@ -142,6 +168,7 @@ module sequence-generator { } } list transactions{ + ordered-by user; key "transaction-id"; leaf transaction-id{ type uint16; @@ -203,6 +230,9 @@ module sequence-generator { leaf ignore{ type boolean; } + leaf jump{ + type uint16; + } } } } @@ -220,4 +250,4 @@ module sequence-generator { uses response; } } - } \ No newline at end of file + } -- cgit 1.2.3-korg