diff options
38 files changed, 1123 insertions, 1077 deletions
@@ -795,6 +795,9 @@ <goal>verify</goal> </goals> <configuration> + <includes> + <include>**/*ItCase.java</include> + </includes> <forkCount>1</forkCount> <reuseForks>false</reuseForks> </configuration> diff --git a/src/main/java/org/onap/clamp/clds/client/PolicyClient.java b/src/main/java/org/onap/clamp/clds/client/PolicyClient.java index 391e39556..7aa1330f2 100644 --- a/src/main/java/org/onap/clamp/clds/client/PolicyClient.java +++ b/src/main/java/org/onap/clamp/clds/client/PolicyClient.java @@ -140,7 +140,7 @@ public class PolicyClient { // Set Policy Type policyParameters.setPolicyConfigType(PolicyConfigType.MicroService); - policyParameters.setEcompName(refProp.getStringValue("policy.ecomp.name")); + policyParameters.setEcompName(refProp.getStringValue("policy.onap.name")); policyParameters.setPolicyName(prop.getCurrentPolicyScopeAndPolicyName()); policyParameters.setConfigBody(policyJson); @@ -177,7 +177,7 @@ public class PolicyClient { // Set Policy Type policyParameters.setPolicyConfigType(PolicyConfigType.Base); - policyParameters.setEcompName(refProp.getStringValue("policy.ecomp.name")); + policyParameters.setEcompName(refProp.getStringValue("policy.onap.name")); policyParameters.setPolicyName(prop.getCurrentPolicyScopeAndPolicyName()); policyParameters.setConfigBody(configBody); @@ -197,6 +197,43 @@ public class PolicyClient { } /** + * Perform send of Microservice policy in OTHER type. + * + * @param configBody + * The config policy string body + * @param prop + * The ModelProperties + * @param policyRequestUuid + * The policy request UUID + * @return The answer from policy call + */ + public String sendMicroServiceInOther(String configBody, ModelProperties prop, String policyRequestUuid) { + + PolicyParameters policyParameters = new PolicyParameters(); + + // Set Policy Type + policyParameters.setPolicyConfigType(PolicyConfigType.MicroService); + policyParameters.setEcompName(refProp.getStringValue("policy.onap.name")); + policyParameters.setPolicyName(prop.getCurrentPolicyScopeAndPolicyName()); + + policyParameters.setConfigBody(configBody); + policyParameters.setConfigBodyType(PolicyType.OTHER); + + policyParameters.setRequestID(UUID.fromString(policyRequestUuid)); + String policyNamePrefix = refProp.getStringValue("policy.ms.policyNamePrefix"); + + // Adding this line to clear the policy id from policy name while + // pushing to policy engine + prop.setPolicyUniqueId(""); + + String rtnMsg = send(policyParameters, prop, policyNamePrefix); + String policyType = refProp.getStringValue("policy.ms.type"); + push(policyType, prop); + + return rtnMsg; + } + + /** * Perform send of policy. * * @param policyParameters diff --git a/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java b/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java index 9debcc2a6..7de126831 100644 --- a/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java +++ b/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java @@ -23,19 +23,19 @@ package org.onap.clamp.clds.client; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; + import java.util.UUID; import org.camunda.bpm.engine.delegate.DelegateExecution; import org.camunda.bpm.engine.delegate.JavaDelegate; -import org.onap.clamp.clds.client.req.TcaMPolicyReq; +import org.onap.clamp.clds.client.req.TcaRequestFormatter; import org.onap.clamp.clds.model.prop.ModelProperties; import org.onap.clamp.clds.model.prop.Tca; import org.onap.clamp.clds.model.refprop.RefProp; import org.springframework.beans.factory.annotation.Autowired; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; - /** * Send Tca info to policy api. * @@ -46,10 +46,10 @@ public class TcaPolicyDelegate implements JavaDelegate { protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); @Autowired - private RefProp refProp; + private RefProp refProp; @Autowired - PolicyClient policyClient; + PolicyClient policyClient; /** * Perform activity. Send Tca info to policy api. @@ -64,8 +64,8 @@ public class TcaPolicyDelegate implements JavaDelegate { ModelProperties prop = ModelProperties.create(execution); Tca tca = prop.getType(Tca.class); if (tca.isFound()) { - String policyJson = TcaMPolicyReq.formatTca(refProp, prop); - String responseMessage = policyClient.sendMicroServiceInJson(policyJson, prop, tcaPolicyRequestUuid); + String policyJson = TcaRequestFormatter.createPolicyJson(refProp, prop); + String responseMessage = policyClient.sendMicroServiceInOther(policyJson, prop, tcaPolicyRequestUuid); if (responseMessage != null) { execution.setVariable("tcaPolicyResponseMessage", responseMessage.getBytes()); } diff --git a/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java b/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java index c5e26f30a..32846ed01 100644 --- a/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java +++ b/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java @@ -26,7 +26,6 @@ package org.onap.clamp.clds.client.req; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -89,25 +88,14 @@ public class SdcReq { String updatedBlueprint = ""; Tca tca = prop.getType(Tca.class); if (tca.isFound()) { - prop.setCurrentModelElementId(tca.getId()); - ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("tca.template", service); - ObjectNode content = rootNode.with("content"); - TcaMPolicyReq.appendSignatures(refProp, service, content, tca, prop); - logger.info("Value of content:" + content); - // ObjectNode servConfNode = - // (ObjectNode)signatures.get("signatures"); - - // get updated blueprint by attaching service Conf from - // globalProperties - updatedBlueprint = getUpdatedBlueprintWithConfiguration(refProp, prop, yamlvalue, content); - } - + updatedBlueprint = TcaRequestFormatter.updatedBlueprintWithConfiguration(refProp, prop, yamlvalue); + } logger.info("value of blueprint:" + updatedBlueprint); return updatedBlueprint; } private static String getUpdatedBlueprintWithConfiguration(RefProp refProp, ModelProperties prop, String yamlValue, - ObjectNode serviceConf) throws JsonProcessingException, IOException { + ObjectNode serviceConf) throws IOException { String blueprint = ""; Yaml yaml = new Yaml(); // Serialiaze Yaml file diff --git a/src/main/java/org/onap/clamp/clds/client/req/TcaMPolicyReq.java b/src/main/java/org/onap/clamp/clds/client/req/TcaMPolicyReq.java deleted file mode 100644 index f31062893..000000000 --- a/src/main/java/org/onap/clamp/clds/client/req/TcaMPolicyReq.java +++ /dev/null @@ -1,121 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - */ - -package org.onap.clamp.clds.client.req; - -import java.io.IOException; -import java.util.Iterator; - -import org.onap.clamp.clds.model.prop.Global; -import org.onap.clamp.clds.model.prop.ModelProperties; -import org.onap.clamp.clds.model.prop.Tca; -import org.onap.clamp.clds.model.prop.TcaItem; -import org.onap.clamp.clds.model.prop.TcaThreshhold; -import org.onap.clamp.clds.model.refprop.RefProp; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; - -/** - * Construct a Policy for Tca/MTca Service request given CLDS objects. - * - * - */ -public class TcaMPolicyReq { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaMPolicyReq.class); - protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); - - /** - * Format Tca Policy request - * - * @param refProp - * @param prop - * @return - * @throws JsonParseException - * @throws JsonMappingException - * @throws IOException - */ - public static String formatTca(RefProp refProp, ModelProperties prop) - throws JsonParseException, JsonMappingException, IOException { - Global global = prop.getGlobal(); - String service = global.getService(); - - Tca tca = prop.getType(Tca.class); - prop.setCurrentModelElementId(tca.getId()); - ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("tca.template", service); - rootNode.put("policyName", prop.getCurrentPolicyScopeAndPolicyName()); - ObjectNode content = rootNode.with("content"); - appendSignatures(refProp, service, content, tca, prop); - - String tcaPolicyReq = rootNode.toString(); - logger.info("tcaPolicyReq=" + tcaPolicyReq); - return tcaPolicyReq; - } - - /** - * Add appendSignatures to json - * - * @param refProp - * @param service - * @param appendToNode - * @param tca - * @param prop - * @throws JsonParseException - * @throws JsonMappingException - * @throws IOException - */ - public static void appendSignatures(RefProp refProp, String service, ObjectNode appendToNode, Tca tca, - ModelProperties prop) throws JsonParseException, JsonMappingException, IOException { - // "signatures":{ - ArrayNode tcaNodes = appendToNode.withArray("signatures"); - for (TcaItem tcaItem : tca.getTcaItems()) { - ObjectNode tcaNode = (ObjectNode) refProp.getJsonTemplate("tca.signature.template", service); - tcaNode.put("useCaseName", tcaItem.getTcaName()); - tcaNode.put("signatureName", tcaItem.getTcaName() + "_" + tcaItem.getTcaUuId()); - tcaNode.put("signatureUuid", tcaItem.getTcaUuId()); - prop.setPolicyUniqueId(tcaItem.getPolicyId()); - tcaNode.put("closedLoopControlName", prop.getControlNameAndPolicyUniqueId()); - tcaNode.put("severity", tcaItem.getSeverity()); - tcaNode.put("maxInterval", tcaItem.getInterval()); - tcaNode.put("minMessageViolations", tcaItem.getViolations()); - - tcaNodes.add(tcaNode); - Iterator<TcaThreshhold> scItr = tcaItem.getTcaThreshholds().iterator(); - while (scItr.hasNext()) { - TcaThreshhold tcaThreshhold = scItr.next(); - // "thresholds": [ - ArrayNode thNodes = tcaNode.withArray("thresholds"); - ObjectNode thNode = thNodes.addObject(); - thNode.put("fieldPath", tcaThreshhold.getFieldPath()); - thNode.put("thresholdName", tcaThreshhold.getMetric()); - thNode.put("thresholdValue", tcaThreshhold.getThreshhold()); - thNode.put("direction", tcaThreshhold.getOperator()); - } - } - } - -}
\ No newline at end of file diff --git a/src/main/java/org/onap/clamp/clds/client/req/TcaRequestFormatter.java b/src/main/java/org/onap/clamp/clds/client/req/TcaRequestFormatter.java new file mode 100644 index 000000000..3fbf87397 --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/client/req/TcaRequestFormatter.java @@ -0,0 +1,166 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ + +package org.onap.clamp.clds.client.req; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.dataformat.yaml.snakeyaml.Yaml; + +import java.util.Map; + +import org.onap.clamp.clds.exception.TcaRequestFormatterException; +import org.onap.clamp.clds.model.prop.ModelProperties; +import org.onap.clamp.clds.model.prop.Tca; +import org.onap.clamp.clds.model.prop.TcaItem; +import org.onap.clamp.clds.model.prop.TcaThreshold; +import org.onap.clamp.clds.model.refprop.RefProp; + +/** + * Construct the requests for TCA policy and SDC. + * + */ +public class TcaRequestFormatter { + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaRequestFormatter.class); + protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); + + /** + * Hide the default constructor. + */ + private TcaRequestFormatter() { + + } + + /** + * Format Tca Policy JSON request. + * + * @param refProp + * The refProp generally created by Spring, it's an access on the + * clds-references.properties file + * @param modelProperties + * The Model Prop created from BPMN JSON and BPMN properties JSON + * @return The Json string containing that should be sent to policy + */ + public static String createPolicyJson(RefProp refProp, ModelProperties modelProperties) { + try { + String service = modelProperties.getGlobal().getService(); + + Tca tca = modelProperties.getType(Tca.class); + modelProperties.setCurrentModelElementId(tca.getId()); + ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("tca.template", service); + ((ObjectNode) rootNode.get("cdap-tca-hi-lo_policy").get("metricsPerEventName").get(0)).put("policyName", + modelProperties.getCurrentPolicyScopeAndPolicyName()); + ((ObjectNode) rootNode.get("cdap-tca-hi-lo_policy").get("metricsPerEventName").get(0)).put("eventName", + tca.getTcaItem().getEventName()); + + ObjectNode thresholdsParent = ((ObjectNode) rootNode.get("cdap-tca-hi-lo_policy").get("metricsPerEventName") + .get(0)); + + addThresholds(refProp, service, thresholdsParent, tca.getTcaItem(), modelProperties); + + String tcaPolicyReq = rootNode.toString(); + logger.info("tcaPolicyReq=" + tcaPolicyReq); + return tcaPolicyReq; + } catch (Exception e) { + throw new TcaRequestFormatterException("Exception caught when attempting to create the policy JSON", e); + } + } + + /** + * Add threshold values to the existing policy JSON. + * + * @param refProp + * The refProp generally created by Spring, it's an access on the + * clds-references.properties file + * @param service + * The Service value extracted from Global section of the Bpmn + * Properties JSON + * @param appendToNode + * The JSON structure from where the thresholds section must be + * added + * @param tcaItem + * The TCA item contained in the Tca object + * @param modelProperties + * The Model Properties created from BPMN JSON and BPMN + * properties JSON + */ + private static void addThresholds(RefProp refProp, String service, ObjectNode appendToNode, TcaItem tcaItem, + ModelProperties modelProperties) { + try { + ArrayNode tcaNodes = appendToNode.withArray("thresholds"); + ObjectNode tcaNode = (ObjectNode) refProp.getJsonTemplate("tca.thresholds.template", service); + + for (TcaThreshold tcaThreshold : tcaItem.getTcaThresholds()) { + tcaNode.put("controlLoopSchema", tcaThreshold.getControlLoopSchema()); + tcaNode.put("closedLoopControlName", modelProperties.getControlNameAndPolicyUniqueId()); + tcaNode.put("fieldPath", tcaThreshold.getFieldPath()); + tcaNode.put("thresholdValue", tcaThreshold.getThreshold()); + tcaNode.put("direction", tcaThreshold.getOperator()); + tcaNode.put("closedLoopEventStatus", tcaThreshold.getClosedLoopEventStatus()); + tcaNodes.add(tcaNode); + } + } catch (Exception e) { + throw new TcaRequestFormatterException("Exception caught when attempting to create the thresholds JSON", e); + } + } + + /** + * This method updates the blueprint that is received in the UI with the TCA + * Json. + * + * @param refProp + * * The refProp generally created by Spring, it's an access on + * the clds-references.properties file + * @param modelProperties + * The Model Prop created from BPMN JSON and BPMN properties JSON + * @param yamlValue + * The yaml string received from the UI + * @return The updated YAML as a string + */ + public static String updatedBlueprintWithConfiguration(RefProp refProp, ModelProperties modelProperties, + String yamlValue) { + try { + String jsonPolicy = createPolicyJson(refProp, modelProperties); + + logger.info("Yaml that will be updated:" + yamlValue); + Yaml yaml = new Yaml(); + + Map<String, Object> loadedYaml = (Map<String, Object>) yaml.load(yamlValue); + + Map<String, Object> nodeTemplates = (Map<String, Object>) loadedYaml.get("node_templates"); + Map<String, Object> tcaObject = (Map<String, Object>) nodeTemplates.get("tca_tca"); + Map<String, Object> propsObject = (Map<String, Object>) tcaObject.get("properties"); + Map<String, Object> appPreferences = (Map<String, Object>) propsObject.get("app_preferences"); + appPreferences.put("tca_policy", jsonPolicy); + + String blueprint = yaml.dump(loadedYaml); + logger.info("Yaml updated:" + blueprint); + + return blueprint; + } catch (Exception e) { + throw new TcaRequestFormatterException("Exception caught when attempting to update the blueprint", e); + } + } +}
\ No newline at end of file diff --git a/src/main/java/org/onap/clamp/clds/exception/TcaRequestFormatterException.java b/src/main/java/org/onap/clamp/clds/exception/TcaRequestFormatterException.java new file mode 100644 index 000000000..055b47ff8 --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/exception/TcaRequestFormatterException.java @@ -0,0 +1,63 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ + +package org.onap.clamp.clds.exception; + +/** + * New exception to capture TcaRequestFormatterException errors. + * + */ +public class TcaRequestFormatterException extends RuntimeException { + + /** + * + */ + private static final long serialVersionUID = 169875373143236667L; + + /** + * This constructor can be used to create a new + * TcaRequestFormatterException. + * + * @param message + * A string message detailing the problem + * @param e + * The exception sent by the code + */ + public TcaRequestFormatterException(String message, Throwable e) { + super(message, e); + } + + /** + * This constructor can be used to create a new + * TcaRequestFormatterException. Use this constructor only if you are + * creating a new exception stack, not if an exception was already raised by + * another code. + * + * @param message + * A string message detailing the problem + */ + public TcaRequestFormatterException(String message) { + super(message); + } + +} diff --git a/src/main/java/org/onap/clamp/clds/model/prop/ModelProperties.java b/src/main/java/org/onap/clamp/clds/model/prop/ModelProperties.java index b9effc57a..7111f1dd5 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/ModelProperties.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/ModelProperties.java @@ -135,7 +135,7 @@ public class ModelProperties { .newInstance(this, modelBpmn, modelJson))); } catch (InstantiationException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - logger.warn("Unable to instantiate a ModelElement, exception follows: " + e); + logger.warn("Unable to instantiate a ModelElement, exception follows: ", e); } }); } diff --git a/src/main/java/org/onap/clamp/clds/model/prop/Tca.java b/src/main/java/org/onap/clamp/clds/model/prop/Tca.java index f7bbac0de..4fd6b595d 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/Tca.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/Tca.java @@ -27,25 +27,8 @@ import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.databind.JsonNode; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - /** - * Parse Tca json properties. - * - * Example json: - * {"TCA_0lm6cix":{"Narra":[{"name":"tname","value":"Narra"},{"name":"tcaEnab", - * "value":"on"},{"name":"tcaPol","value":"Polcicy1"},{"name":"tcaPolId","value" - * :"1"},{"name":"tcaInt","value":"1"},{"name":"tcaSev","value":"Critical"},{ - * "name":"tcaVio","value":"1"},{"serviceConfigurations":[["FIELDPATH_test_1", - * ">","4"],["FIELDPATH_test_1","=","5"]]}],"Srini":[{"name":"tname","value": - * "Srini"},{"name":"tcaEnab","value":"on"},{"name":"tcaPol","value":"Policy1"}, - * {"name":"tcaPolId","value":"1"},{"name":"tcaInt","value":"1"},{"name": - * "tcaSev","value":"Major"},{"name":"tcaVio","value":"1"},{ - * "serviceConfigurations":[["FIELDPATH_test_2","=","3"],["FIELDPATH_test_1",">" - * ,"2"]]}]}} - * + * Parse ONAP Tca json properties. * */ public class Tca extends AbstractModelElement { @@ -53,7 +36,7 @@ public class Tca extends AbstractModelElement { protected static final EELFLogger logger = EELFManager.getInstance().getLogger(Tca.class); protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); - private List<TcaItem> tcaItems; + private TcaItem tcaItem; private static final String TYPE_TCA = "tca"; @@ -69,16 +52,12 @@ public class Tca extends AbstractModelElement { // process Server_Configurations if (modelElementJsonNode != null) { - Iterator<JsonNode> itr = modelElementJsonNode.elements(); - tcaItems = new ArrayList<>(); - while (itr.hasNext()) { - tcaItems.add(new TcaItem(itr.next())); - } + tcaItem = new TcaItem(modelElementJsonNode.elements().next()); } } - public List<TcaItem> getTcaItems() { - return tcaItems; + public TcaItem getTcaItem() { + return tcaItem; } public static final String getType() { diff --git a/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java b/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java index f104b0917..79da2db06 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java @@ -23,45 +23,28 @@ package org.onap.clamp.clds.model.prop; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.databind.JsonNode; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + /** - * Parse Tca Item json properties. - * - * Example json: - * {"TCA_0lm6cix":{"Narra":[{"name":"tname","value":"Narra"},{"name":"tcaEnab", - * "value":"on"},{"name":"tcaPol","value":"Polcicy1"},{"name":"tcaPolId","value" - * :"1"},{"name":"tcaInt","value":"1"},{"name":"tcaSev","value":"Critical"},{ - * "name":"tcaVio","value":"1"},{"serviceConfigurations":[["FIELDPATH_test_1", - * ">","4"],["FIELDPATH_test_1","=","5"]]}],"Srini":[{"name":"tname","value": - * "Srini"},{"name":"tcaEnab","value":"on"},{"name":"tcaPol","value":"Policy1"}, - * {"name":"tcaPolId","value":"1"},{"name":"tcaInt","value":"1"},{"name": - * "tcaSev","value":"Major"},{"name":"tcaVio","value":"1"},{ - * "serviceConfigurations":[["FIELDPATH_test_2","=","3"],["FIELDPATH_test_1",">" - * ,"2"]]}]}} - * + * Parse ONAP Tca Item json properties. * */ public class TcaItem { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaItem.class); + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaItem.class); protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); - private String tcaName; - private String tcaUuId; - private String nfNamingCode; - private String tcaEnable; - private String policyId; - private Integer interval; - private String severity; - private Integer violations; - private List<TcaThreshhold> tcaThreshholds; + private String tcaName; + private String tcaUuId; + private String policyId; + private String eventName; + private List<TcaThreshold> tcaThresholds; /** * Parse Tca Item given json node @@ -72,23 +55,14 @@ public class TcaItem { tcaName = AbstractModelElement.getValueByName(node, "tname"); tcaUuId = AbstractModelElement.getValueByName(node, "tuuid"); - nfNamingCode = AbstractModelElement.getValueByName(node, "tnfc"); - tcaEnable = AbstractModelElement.getValueByName(node, "tcaEnab"); policyId = AbstractModelElement.getValueByName(node, "tcaPolId"); - if (AbstractModelElement.getValueByName(node, "tcaInt") != null) { - interval = Integer.valueOf(AbstractModelElement.getValueByName(node, "tcaInt")); - } - severity = AbstractModelElement.getValueByName(node, "tcaSev"); - if (AbstractModelElement.getValueByName(node, "tcaVio") != null) { - violations = Integer.valueOf(AbstractModelElement.getValueByName(node, "tcaVio")); - } - + eventName = AbstractModelElement.getValueByName(node, "eventName"); // process service Configurations JsonNode serviceConfigurationsNode = node.get(node.size() - 1).get("serviceConfigurations"); Iterator<JsonNode> itr = serviceConfigurationsNode.elements(); - tcaThreshholds = new ArrayList<TcaThreshhold>(); + tcaThresholds = new ArrayList<>(); while (itr.hasNext()) { - tcaThreshholds.add(new TcaThreshhold(itr.next())); + tcaThresholds.add(new TcaThreshold(itr.next())); } } @@ -108,22 +82,6 @@ public class TcaItem { this.tcaUuId = tcaUuId; } - public String getNfNamingCode() { - return nfNamingCode; - } - - public void setNfNamingCode(String nfNamingCode) { - this.nfNamingCode = nfNamingCode; - } - - public String getTcaEnable() { - return tcaEnable; - } - - public void setTcaEnable(String tcaEnable) { - this.tcaEnable = tcaEnable; - } - public String getPolicyId() { return policyId; } @@ -132,32 +90,16 @@ public class TcaItem { this.policyId = policyId; } - public Integer getInterval() { - return interval; - } - - public void setInterval(Integer interval) { - this.interval = interval; - } - - public String getSeverity() { - return severity; - } - - public void setSeverity(String severity) { - this.severity = severity; - } - - public Integer getViolations() { - return violations; + public List<TcaThreshold> getTcaThresholds() { + return tcaThresholds; } - public void setViolations(Integer violations) { - this.violations = violations; + public String getEventName() { + return eventName; } - public List<TcaThreshhold> getTcaThreshholds() { - return tcaThreshholds; + public void setEventName(String eventName) { + this.eventName = eventName; } } diff --git a/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshhold.java b/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshold.java index 39369f171..43bdb5c1b 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshhold.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshold.java @@ -28,59 +28,42 @@ import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.databind.JsonNode; /** - * Parse Tca Threshhold json properties. - * - * Example json: - * {"TCA_0lm6cix":{"Narra":[{"name":"tname","value":"Narra"},{"name":"tcaEnab", - * "value":"on"},{"name":"tcaPol","value":"Polcicy1"},{"name":"tcaPolId","value" - * :"1"},{"name":"tcaInt","value":"1"},{"name":"tcaSev","value":"Critical"},{ - * "name":"tcaVio","value":"1"},{"serviceConfigurations":[["FIELDPATH_test_1", - * ">","4"],["FIELDPATH_test_1","=","5"]]}],"Srini":[{"name":"tname","value": - * "Srini"},{"name":"tcaEnab","value":"on"},{"name":"tcaPol","value":"Policy1"}, - * {"name":"tcaPolId","value":"1"},{"name":"tcaInt","value":"1"},{"name": - * "tcaSev","value":"Major"},{"name":"tcaVio","value":"1"},{ - * "serviceConfigurations":[["FIELDPATH_test_2","=","3"],["FIELDPATH_test_1",">" - * ,"2"]]}]}} - * + * Parse ONAP Tca Threshold json properties. * */ -public class TcaThreshhold { +public class TcaThreshold { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaThreshhold.class); + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaThreshold.class); protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); - private String metric; - private String fieldPath; - private String operator; - private Integer threshhold; + private String fieldPath; + private String operator; + private Integer threshold; + private String closedLoopEventStatus; + private String controlLoopSchema; /** * Parse Tca Threshhold given json node * * @param node */ - public TcaThreshhold(JsonNode node) { + public TcaThreshold(JsonNode node) { if (node.get(0) != null) { - metric = node.get(0).asText(); + fieldPath = node.get(0).asText(); } if (node.get(1) != null) { operator = node.get(1).asText(); } if (node.get(2) != null) { - threshhold = Integer.valueOf(node.get(2).asText()); + threshold = Integer.valueOf(node.get(2).asText()); } if (node.get(3) != null) { - fieldPath = node.get(3).asText(); + controlLoopSchema = node.get(3).asText(); + } + if (node.get(4) != null) { + closedLoopEventStatus = node.get(4).asText(); } - } - - public String getMetric() { - return metric; - } - - public void setMetric(String metric) { - this.metric = metric; } public String getFieldPath() { @@ -99,12 +82,27 @@ public class TcaThreshhold { this.operator = operator; } - public Integer getThreshhold() { - return threshhold; + public Integer getThreshold() { + return threshold; } - public void setThreshhold(Integer threshhold) { - this.threshhold = threshhold; + public void setThreshold(Integer threshold) { + this.threshold = threshold; } + public String getClosedLoopEventStatus() { + return closedLoopEventStatus; + } + + public void setClosedLoopEventStatus(String closedLoopEventStatus) { + this.closedLoopEventStatus = closedLoopEventStatus; + } + + public String getControlLoopSchema() { + return controlLoopSchema; + } + + public void setControlLoopSchema(String controlLoopSchema) { + this.controlLoopSchema = controlLoopSchema; + } } diff --git a/src/main/resources/META-INF/resources/designer/partials/portfolios/tca_properties.html b/src/main/resources/META-INF/resources/designer/partials/portfolios/tca_properties.html index 7305fd91a..546909ab2 100644 --- a/src/main/resources/META-INF/resources/designer/partials/portfolios/tca_properties.html +++ b/src/main/resources/META-INF/resources/designer/partials/portfolios/tca_properties.html @@ -70,17 +70,22 @@ } #tcaEditHolder{ - height:260px; background-color: #f5f5f5; - padding:10px 0px; + padding:10px 10px; margin: 15px 15px 0 0; float: right; } + + +#tcaEditHolder #properties_tab>div+div { + margin-top: 10px; +} + .tcaErr{ display:none; text-align:center; margin-bottom:20px; - color:red;" + color:red; } .tcaParentItems { @@ -155,12 +160,6 @@ <div style="height: 10px"></div> <div class="panel panel-default" id="panelHolder"> - <div class="panel-heading"> - <ul id="nav_Tabs" class="nav nav-tabs"> - <li class><a id="add_one_more" href="#desc_tab"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span></a></li> - </ul> - </div> - <span id="formSpan" style="display:none;"> <div class="panel-body"> @@ -179,19 +178,6 @@ <input class="form-control" onkeydown="return false;" type="text" id="tuuid" name="tuuid"></input> </div> </div> - - <div class="col-sm-8 form-group" style="display:none;"> - <label class="col-sm-3"> NF Code </label> - <div class="col-sm-9" style="padding:0px;"> - <input class="form-control" onkeydown="return false;" type="text" id="tnfc" name="tnfc"></input> - </div> - </div> - - <div class="col-sm-3 form-group"> - <label class="col-sm-8"> Enable </label> - <input class="col-sm-4" type="checkbox" style="height:21px; - width:21px; margin:6px;" checked="checked" id="tcaEnab" name="tcaEnab"></input> - </div> </div> <div class="row"> <div class="col-sm-8 form-group"> @@ -200,6 +186,12 @@ <select name="tcaPol" id="tcaPol" enableFilter="true"></select> </div> </div> + <div class="col-sm-8 form-group"> + <label class="col-sm-3">EventName</label> + <div class="col-sm-9" style="padding:0px;"> + <select name="eventName" id="eventName" enableFilter="true"></select> + </div> + </div> <div class="col-sm-8 form-group" style="display:none;"> <label class="col-sm-3"> Policy ID </label> @@ -207,27 +199,7 @@ <input class="form-control" onkeydown="return false;" type="text" id="tcaPolId" name="tcaPolId"></input> </div> </div> - - <div class="col-sm-3 form-group"> - <label class="col-sm-8">Max Intervals</label> - <input class="col-sm-4 form-control" style="width:80%" type="text" maxlength="3" - id="tcaInt" onkeypress="return isNumberKey(event)" name="tcaInt"></input> - </div> - </div> - <div class="row"> - <div class="col-sm-8 form-group"> - <label class="col-sm-3"> Severity </label> - <div class="col-sm-9" style="padding:0px;"> - <select name="tcaSev" id="tcaSev" enableFilter="false"> - </select> - </div> - </div> - - <div class="col-sm-3 form-group"> - <label class="col-sm-8">Min Violations</label> - <input class="col-sm-4 form-control" style="width:80%" type="text" maxlength="3" - id="tcaVio" onkeypress="return isNumberKey(event)" name="tcaVio"></input> - </div> + </div> </form> @@ -250,26 +222,38 @@ <div id="tcaEditHolder" class="panel panel-default col-sm-6"> <div class="tab-content"> - <div id="properties_tab" style="padding:10px;" class="form-horizontal"> - <div style="margin-bottom:20px;"> + <div id="properties_tab" class="form-vertical"> + <div> <label class="control-label">Metric</label> <div> <select id="fieldPathM" name="fieldPathM"></select> </div> </div> - <div style="margin-bottom:20px;"> + <div> <label class="control-label">Operator</label> <div> <select id="operator" name="operator"></select> </div> </div> - <div style="margin-bottom:20px;"> + <div> <label class="control-label">Threshold</label> <div> <input type="text" maxlength="10" class="form-control" name="threshold" onkeypress="return isNumberKey(event)" id="threshold"></input> </div> </div> + <div> + <label class="control-label">Control Loop Schema</label> + <div> + <select id="controlLoopSchema" name="controlLoopSchema"></select> + </div> + </div> + <div> + <label class="control-label">Closed Loop Event Status</label> + <div> + <select id="closedLoopEventStatus" name="closedLoopEventStatus"></select> + </div> + </div> </div> </div> </div> @@ -289,7 +273,16 @@ class="btn btn-primary">Cancel</button> </div> - <script> + <script language="javascript"> + // helper that make jquery objects visibles or invisible + // to use instead of show to keep placeholder size correct + jQuery.fn.visible = function() { + return this.css('visibility', 'visible'); + }; + jQuery.fn.invisible = function() { + return this.css('visibility', 'hidden'); + }; + var generateTUUID = function(count){ var d = new Date().getTime(); var tuuid = 'xxxxxxxx-xxxx-txxx-xxxx-xxxxxxxxxxxx'.replace(/[x]/g, function(c){ @@ -298,30 +291,17 @@ return (c == 'x' ? r : (r*0x3|0*8)).toString(16); }); $("#formId" + count + " #tuuid").val(tuuid); - } - - $("#add_one_more").click(function(event) { - event.preventDefault(); - if ($("#nav_Tabs li.active").length>0){ - var oldCount = $("#nav_Tabs li.active").find("a").attr("id").slice(-1); - if (($('#formId'+oldCount+' #tcaTable .highlight').length > 0 ) && - (!($('#formId'+oldCount+' #threshold').val()) || !($('#formId'+oldCount+' #fieldPathM').val())) ) { - $('#formId'+oldCount+' #tcaError').show(); - return; - } else { - $('#formId'+oldCount+' .tcaErr').hide(); - if ($('#formId'+oldCount+' #tcaTable .highlight').length > 0){ - $('#formId'+oldCount+' #tcaTable .highlight td').text( - $('#formId'+oldCount+' #fieldPathM').val() + ' ' + - $('#formId'+oldCount+' #operator').val() + ' ' + - $('#formId'+oldCount+' #threshold').val()); - } - $("#formId"+oldCount+" #tcaTable .highlight").removeClass("highlight") - } - } - var count = add_one_more(); - generateTUUID(count); - }) + }; + + + var propertiesToString = function(formIdNum) { + return $('#formId'+formIdNum+' #fieldPathM').find(':selected').text() + ' ' + + $('#formId'+formIdNum+' #operator').val() + ' ' + + $('#formId'+formIdNum+' #threshold').val() + ' ' + + $('#formId'+formIdNum+' #controlLoopSchema').val() + ' ' + + $('#formId'+formIdNum+' #closedLoopEventStatus').val(); + }; + loadPropertyWindow("tca"); //load dropdown with policy options @@ -340,79 +320,54 @@ } } } - + + var fieldPathMLabel2Value = function(label) { + return Object.keys(defaults_props['tca']['fieldPathM']).find(key => defaults_props['tca']['fieldPathM'][key] == label) + } + var fieldPathMValue2Label = function(value) { + return defaults_props['tca']['fieldPathM'][value]; + } + setASDCFields(); - - //load metrics dropdown - if (elementMap["global"]){ - for (var i = 0; i < (elementMap["global"].length); i++){ - if ((elementMap["global"][i]["name"]) == "vf"){ - var vfSel = elementMap["global"][i]["value"]; - if (vf_Services["shared"]["byVf"][vfSel]["kpi"]){ - $.each((vf_Services["shared"]["byVf"][vfSel]["kpi"]), function(val, text) { - $('#fieldPathM').append( - $('<option></option>').val(val).html(text) - ); - }); - } - break; - }; - }; - }; - + var arr = elementMap[lastElementSelected]; - + if (arr !== undefined) { for (var x in arr){ var num = add_one_more(); - var setCheck = true; for (var i=0; i< arr[x].length; i++){ - if (arr[x][i].name=='tcaEnab'){ - $("#formId" + num + " #tcaEnab").prop("checked","true"); - setCheck = false; - } if (arr[x][i].hasOwnProperty('serviceConfigurations')){ for (var j=0; j<arr[x][i]["serviceConfigurations"].length; j++){ $("#formId" + num + " #tcaTable").prepend("<tr><td>" - +arr[x][i]["serviceConfigurations"][j][0]+" " - //+(defaults_props['tca']['operator']).getKey(arr[x][i]["serviceConfigurations"][j][1])+" " - +(Object.keys(defaults_props['tca']['operator']).find(key => defaults_props['tca']['operator'][key] == (arr[x][i]["serviceConfigurations"][j][1])))+ " " - +arr[x][i]["serviceConfigurations"][j][2]+"</td></tr>"); + +fieldPathMValue2Label(arr[x][i]["serviceConfigurations"][j][0])+ " " + +(Object.keys(defaults_props['tca']['operator']).find(key => defaults_props['tca']['operator'][key] == (arr[x][i]["serviceConfigurations"][j][1])))+ " " + +arr[x][i]["serviceConfigurations"][j][2]+" " + +arr[x][i]["serviceConfigurations"][j][3]+" " + +arr[x][i]["serviceConfigurations"][j][4]+"</td></tr>"); } } else { $("#formId" + num + " #"+arr[x][i].name).val(arr[x][i].value); } } - if (setCheck){ - $("#formId" + num + " #tcaEnab").prop("checked",false); - } $('#go_properties_tab'+num).text($('#formId' +num+ ' #tname').val()); - $("#formId"+num + " #properties_tab").hide(); + $("#formId"+num + " #properties_tab").invisible(); } - } + } else { + var count = add_one_more(); + generateTUUID(count); + } $("#savePropsBtn").click(function(event) { - var num = $('#nav_Tabs .active a').attr('id').slice(-1); - var tabs = []; - $('#nav_Tabs li:not(:last)').each(function(){ - tabs.push($(this).text()); - }); - var nonunique = uniquet(tabs); + var num = 1 if (($('#formId'+num+' #tcaTable .highlight').length > 0 ) && (!($('#formId'+num+' #threshold').val()) || !($('#formId'+num+' #fieldPathM').val())) ) { $('#formId'+num+' #tcaError').show(); return; - } else if (nonunique){ - $('#formId'+num+' #tcaUnique').show(); - return; } else { $('#formId'+num+' .tcaErr').hide(); if ($('#formId'+num+' #tcaTable .highlight').length > 0){ - $('#formId'+num+' #tcaTable .highlight td').text( - $('#formId'+num+' #fieldPathM').val() + ' ' + - $('#formId'+num+' #operator').val() + ' ' + - $('#formId'+num+' #threshold').val()); + $('#formId'+num+' #tcaTable .highlight td').text(propertiesToString(num)); } var saveP = {}; $('.formId').each(function(){ @@ -420,23 +375,11 @@ var header = $(this).find('.tcaParentItems').serializeArray(); var sconf = {}; var sconfa = []; - var checkNF = true; $('#formId' +count+' #tcaTable tr').each(function(){ $('td', this).each(function(){ var splitTd = $(this).text().split(' '); + splitTd[0]=fieldPathMLabel2Value(splitTd[0]); splitTd[1]=defaults_props['tca']['operator'][splitTd[1]]; - var checkByKpi = vf_Services["shared"]["byKpi"][splitTd[0].replace(/\s/g, "")]; - if (checkByKpi["fieldPath"]){ - splitTd.push(Object.keys(vf_Services["shared"]["byKpi"][splitTd[0].replace(/\s/g, "")]["fieldPath"])[0]); - }; - if ((checkByKpi["nfNamingCode"]) && (checkNF)){ - $.grep(header, function(e,i){ - if (e.name == "tnfc"){ - header[i]["value"] = (Object.keys(checkByKpi["nfNamingCode"])[0]); - } - }); - checkNF = false; - } sconfa.push(splitTd); }); @@ -505,7 +448,7 @@ $("#add_one_more").parent().before(' <li class="active"><a id="go_properties_tab'+count+'">New_Set</a><button id="tab_close'+count+'" type="button" class="close tab-close-popup" aria-hidden="true" style="margin-top: -30px;margin-right: 5px">×</button></li>'); $("#formId"+count).append(form); - $('#formId'+count+ ' #properties_tab').hide(); + $('#formId'+count+ ' #properties_tab').invisible(); $(".formId").not($("#formId"+count)).css("display","none"); addCustListen(count); setMultiSelect(); @@ -531,10 +474,7 @@ } else { $('#formId'+oldCount+' .tcaErr').hide(); if ($('#formId'+oldCount+' #tcaTable .highlight').length > 0){ - $('#formId'+oldCount+' #tcaTable .highlight td').text( - $('#formId'+oldCount+' #fieldPathM').val() + ' ' + - $('#formId'+oldCount+' #operator').val() + ' ' + - $('#formId'+oldCount+' #threshold').val()); + $('#formId'+oldCount+' #tcaTable .highlight td').text(propertiesToString(oldCount)); } $("#formId"+oldCount+" #tcaTable .highlight").removeClass("highlight") } @@ -559,19 +499,18 @@ } else { $('#formId'+count+' .tcaErr').hide(); if ($('#formId'+count+' #tcaTable .highlight').length > 0){ - $('#formId'+count+' #tcaTable .highlight td').text( - $('#formId'+count+' #fieldPathM').val() + ' ' + - $('#formId'+count+' #operator').val() + ' ' + - $('#formId'+count+' #threshold').val()); + $('#formId'+count+' #tcaTable .highlight td').text(propertiesToString(num)); } //$('#formId'+count+' #tcaTable .highlight').text(); $(this).addClass('highlight').siblings().removeClass('highlight'); var str = $(this).text().split(' '); - $('#formId'+count + ' #properties_tab').show(); - if (str.length == 3){ - $('#formId'+count+' #fieldPathM').val(str[0]).multiselect('refresh'); + $('#formId'+count + ' #properties_tab').visible(); + if (str.length == 5){ + $('#formId'+count+' #fieldPathM').val(fieldPathMLabel2Value(str[0])).multiselect('refresh'); $('#formId'+count+' #operator').val(str[1]).multiselect('refresh'); $('#formId'+count+' #threshold').val(str[2]); + $('#formId'+count+' #controlLoopSchema').val(str[3]).multiselect('refresh'); + $('#formId'+count+' #closedLoopEventStatus').val(str[4]).multiselect('refresh'); } if ((!(readOnly||readMOnly)) && ($('#formId'+count + ' #deleteThresh').prop('disabled'))) { @@ -582,7 +521,7 @@ $('#formId'+count+' #deleteThresh').on('click', function(){ $('#formId'+num+' .tcaErr').hide(); - $('#formId'+count+ ' #properties_tab').hide(); + $('#formId'+count+ ' #properties_tab').invisible(); $('#formId'+count+ ' #tcaTable .highlight').remove(); $('#formId'+count+ ' #deleteThresh').prop('disabled', true); }); @@ -595,12 +534,9 @@ } else { $('#formId'+count+' .tcaErr').hide(); if ($('#formId'+count+' #tcaTable .highlight').length > 0){ - $('#formId'+count+' #tcaTable .highlight td').text( - $('#formId'+count+' #fieldPathM').val() + ' ' + - $('#formId'+count+' #operator').val() + ' ' + - $('#formId'+count+' #threshold').val()); + $('#formId'+count+' #tcaTable .highlight td').text(propertiesToString(count)); } - $('#formId'+count+ ' #properties_tab').show(); + $('#formId'+count+ ' #properties_tab').visible(); if (('#formId'+count+' #tcaTable .highlight').length > 0 ){ $('#formId'+count+' #tcaTable tr.highlight').removeClass('highlight'); } @@ -608,7 +544,9 @@ $('#formId'+count+' #fieldPathM').prop("selectedIndex", 0).multiselect('refresh'); $('#formId'+count+' #operator').prop("selectedIndex", 0).multiselect('refresh'); $('#formId'+count+' #threshold').val(""); - + $('#formId'+count+' #controlLoopSchema').prop("selectedIndex", 0).multiselect('refresh'); + $('#formId'+count+' #closedLoopEventStatus').prop("selectedIndex", 0).multiselect('refresh'); + if ($('#formId'+count + ' #deleteThresh').prop('disabled')) { $('#formId'+count + ' #deleteThresh').prop('disabled', false); } diff --git a/src/main/resources/clds/clds-reference.properties b/src/main/resources/clds/clds-reference.properties index d404e4e37..00d2f61a2 100644 --- a/src/main/resources/clds/clds-reference.properties +++ b/src/main/resources/clds/clds-reference.properties @@ -38,17 +38,18 @@ sdc.decode.service_ids={} #
# General Policy request properties
#
-policy.ecomp.name=DCAE
+policy.onap.name=DCAE
policy.pdp.group=default
policy.ms.type=MicroService
policy.ms.policyNamePrefix=Config_MS_
policy.op.type=BRMS_Param
policy.op.policyNamePrefix=Config_BRMS_Param_
-#
+
# TCA MicroService Policy request build properties
#
-tca.template={"service":"MThresholdCrossingConfiguration","location":"Edge","uuid":"TestUUID","policyName":"???","description":"from clds","configName":"MThresholdCrossingConfiguration","templateVersion":"5.2.0.1","priority":"4","version":"5.2.0.1","policyScope":"resource=F5,service=vSCP,type=configuration,closedLoopControlName=vSCP_F5_Firewall_d925ed73-8231-4d02-9545-db4e101f88f8","content":{"$class": "com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration","domain":"measurementsForVfScaling","policyScope":"pnf=eNodeB;type=configuration","policyName":"policy.dcae.configuration","policyVersion":"1.0.0","subscriberContentType": "application/json","subscriberConsumerId": "c13","subscriberConsumerGroup": "OpenDCAE-c13","subscriberTimeoutMS": "-1","subscriberMessageLimit": "-1","subscriberPollingInterval": "20000","publisherContentType": "application/json","publisherMaxBatchSize": "10","publisherMaxRecoveryQueueSize": "100000","publisherPollingInterval": "20000","publisherAlertWindowingTime": "86400","signatures":[]}}
-tca.signature.template={"nfNamingCode":"ENBE","target":"common_id","targetType":"eNodeB","useCaseName":"???","signatureName":"???","signatureUuid":"???","closedLoopControlName":"???","severity":"???","version":"1.0.2","maxInterval":1200,"minMessageViolations":4,"thresholds":[]}
+tca.template={"cdap-tca-hi-lo_policy": {"domain": "measurementsForVfScaling","metricsPerEventName": [{"eventName": "???","policyScope": "DCAE","policyName": "???","policyVersion": "v0.0.1","thresholds": []}]}}
+tca.thresholds.template={"closedLoopControlName": "???", "controlLoopSchema": "VM","version": "1.0.2","fieldPath": "?????", "thresholdValue": 0,"direction": "???","severity": "MAJOR", "closedLoopEventStatus": "???"}
+
#
#
# Operational Policy request build properties
@@ -73,9 +74,9 @@ op.eNodeB.limit=2 op.eNodeB.period=10s
#
# Sdc service properties
-sdc.catalog.url=http://sdc.api.simpledemo.openecomp.org:8080/sdc/v1/catalog/ -sdc.hostUrl=http://sdc.api.simpledemo.openecomp.org:8080 -sdc.serviceUrl=http://sdc.api.simpledemo.openecomp.org:8080/sdc/v1/catalog/services +sdc.catalog.url=http://sdc.api.simpledemo.openecomp.org:8080/sdc/v1/catalog/
+sdc.hostUrl=http://sdc.api.simpledemo.openecomp.org:8080
+sdc.serviceUrl=http://sdc.api.simpledemo.openecomp.org:8080/sdc/v1/catalog/services
sdc.serviceUsername=test
sdc.servicePassword=123456
sdc.artifactLabel=blueprintclampcockpit
@@ -94,7 +95,7 @@ ui.alarm.default={"Reports a transient alarm condition when an incoming CDR cann action.test.override=false
# if action.insert.test.event is true, then insert event even if the action is set to test
action.insert.test.event=false
-CLDS_SERVICE_CACHE_MAX_SECONDS=5
+CLDS_SERVICE_CACHE_MAX_SECONDS=300
#DCAE Inventory Url Properties
DCAE_INVENTORY_URL = https://dcae.api.simpledemo.openecomp.org:8080 diff --git a/src/main/resources/clds/globalClds.properties b/src/main/resources/clds/globalClds.properties index ac4f0cf30..d21afbcf7 100644 --- a/src/main/resources/clds/globalClds.properties +++ b/src/main/resources/clds/globalClds.properties @@ -21,4 +21,4 @@ # ECOMP is a trademark and service mark of AT&T Intellectual Property. ### -globalCldsProps ={"tca":{"tname":"New_Set","tcaInt":"1","tcaVio":"1","tcaSev":{"NORMAL":"NORMAL","CRITICAL":"CRITICAL","MAJOR":"MAJOR","MINOR":"MINOR","WARNING":"WARNING"},"fieldPath":{"FIELDPATH_test_1":"FIELDPATH_test_1","FIELDPATH_test_2":"FIELDPATH_test_2"},"operator":{">":"GREATER","=":"EQUAL","<":"LESS"},"opsPolicy":{"POLICY_test_X":"POLICY_test_X","POLICY_test_Y":"POLICY_test_Y"}},"global":{"actionSet":{"vnfRecipe":"VNF", "enbRecipe":"eNodeB"},"location":{"SNDGCA64":"San Diego SAN3","ALPRGAED":"Alpharetta PDK1","LSLEILAA":"Lisle DPA3","MDTWNJC1":"FTL_C_location1","MDTWNJC2":"FTL_C_location2","MDTWNJ21":"FTL_L_location1","MDTWNJ22":"FTL_L_location2","RDM2WAGPLCP":"ISTFTL_location","RDM3":"RDM3WAGPLCP"}},"policy":{"pname":"0","timeout":345,"vnfRecipe":{"":"","restart":"Restart","rebuild":"Rebuild","migrate":"Migrate","healthCheck":"Health Check"},"enbRecipe":{"":"","reset":"Reset"},"maxRetries":"3","retryTimeLimit":180,"resource":{"vCTS":"vCTS","v3CDB":"v3CDB","vUDR":"vUDR","vCOM":"vCOM","vRAR":"vRAR","vLCS":"vLCS","vUDR-BE":"vUDR-BE","vDBE":"vDBE"},"parentPolicyConditions":{"Failure_Retries":"Failure: Max Retries Exceeded","Failure_Timeout":"Failure: Time Limit Exceeded","Failure_Guard":"Failure: Guard","Failure_Exception":"Failure: Exception","Failure":"Failure: Other","Success":"Success"}},"shared":{"byService":{"":{"vf":{"":""},"location":{"":""},"alarmCondition":{"":""}}},"byVf":{"":{"vfc":{"":""}}}}}
\ No newline at end of file +globalCldsProps ={"tca":{"tname":"New_Set","tcaInt":"1","tcaVio":"1","eventName":{"vCPEvGMUXPacketLoss":"vCPEvGMUXPacketLoss","vLoadBalancer":"vLoadBalancer","vFirewallBroadcastPackets":"vFirewallBroadcastPackets"},"fieldPathM":{"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated":"receivedBroadcastPacketsAccumulated","$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta":"receivedDiscardedPacketsDelta"},"operator":{">":"GREATER",">=":"GREATER_OR_EQUAL","=":"EQUAL","<=":"LESS_OR_EQUAL","<":"LESS"},"opsPolicy":{"POLICY_test_X":"POLICY_test_X","POLICY_test_Y":"POLICY_test_Y"},"controlLoopSchema":{"":"","VM":"VM","VNF":"VNF"},"closedLoopEventStatus":{"":"","ONSET":"ONSET","ABATED":"ABATED"}},"global":{"actionSet":{"vnfRecipe":"VNF", "enbRecipe":"eNodeB"},"location":{"SNDGCA64":"San Diego SAN3","ALPRGAED":"Alpharetta PDK1","LSLEILAA":"Lisle DPA3","MDTWNJC1":"FTL_C_location1","MDTWNJC2":"FTL_C_location2","MDTWNJ21":"FTL_L_location1","MDTWNJ22":"FTL_L_location2","RDM2WAGPLCP":"ISTFTL_location","RDM3":"RDM3WAGPLCP"}},"policy":{"pname":"0","timeout":345,"vnfRecipe":{"":"","restart":"Restart","rebuild":"Rebuild","migrate":"Migrate","healthCheck":"Health Check"},"enbRecipe":{"":"","reset":"Reset"},"maxRetries":"3","retryTimeLimit":180,"resource":{"vCTS":"vCTS","v3CDB":"v3CDB","vUDR":"vUDR","vCOM":"vCOM","vRAR":"vRAR","vLCS":"vLCS","vUDR-BE":"vUDR-BE","vDBE":"vDBE"},"parentPolicyConditions":{"Failure_Retries":"Failure: Max Retries Exceeded","Failure_Timeout":"Failure: Time Limit Exceeded","Failure_Guard":"Failure: Guard","Failure_Exception":"Failure: Exception","Failure":"Failure: Other","Success":"Success"}},"shared":{"byService":{"":{"vf":{"":""},"location":{"":""},"alarmCondition":{"":""}}},"byVf":{"":{"vfc":{"":""}}}}} diff --git a/src/test/java/org/onap/clamp/clds/AbstractIT.java b/src/test/java/org/onap/clamp/clds/AbstractItCase.java index b705e38d1..9be8a13bd 100644 --- a/src/test/java/org/onap/clamp/clds/AbstractIT.java +++ b/src/test/java/org/onap/clamp/clds/AbstractItCase.java @@ -30,7 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ActiveProfiles; @ActiveProfiles("clamp-default") -public abstract class AbstractIT { +public abstract class AbstractItCase { @Autowired protected RefProp refProp; diff --git a/src/test/java/org/onap/clamp/clds/client/req/OperationalPolicyReqTest.java b/src/test/java/org/onap/clamp/clds/client/req/OperationalPolicyReqTest.java index d4584436a..734b6052a 100644 --- a/src/test/java/org/onap/clamp/clds/client/req/OperationalPolicyReqTest.java +++ b/src/test/java/org/onap/clamp/clds/client/req/OperationalPolicyReqTest.java @@ -31,9 +31,9 @@ import java.util.ArrayList; import java.util.List; import org.junit.Test; +import org.onap.policy.controlloop.policy.PolicyResult; import org.onap.policy.sdc.Resource; import org.onap.policy.sdc.ResourceType; -import org.onap.policy.controlloop.policy.PolicyResult; public class OperationalPolicyReqTest { @@ -49,7 +49,7 @@ public class OperationalPolicyReqTest { stringList.add("test2"); stringList.add("test3"); stringList.add("test4"); - Resource resources[] = (Resource[]) method.invoke(null, stringList, ResourceType.VF); + Resource[] resources = (Resource[]) method.invoke(null, stringList, ResourceType.VF); assertTrue(resources.length == 4); assertTrue("test1".equals(resources[0].getResourceName())); @@ -69,7 +69,7 @@ public class OperationalPolicyReqTest { stringList.add("SUCCESS"); stringList.add("FAILURE_GUARD"); stringList.add("FAILURE_TIMEOUT"); - PolicyResult policyResult[] = (PolicyResult[]) method.invoke(null, stringList); + PolicyResult[] policyResult = (PolicyResult[]) method.invoke(null, stringList); assertTrue(policyResult.length == 4); assertTrue(policyResult[0].equals(PolicyResult.FAILURE)); diff --git a/src/test/java/org/onap/clamp/clds/client/req/SdcReqTest.java b/src/test/java/org/onap/clamp/clds/client/req/SdcReqTest.java index a283f43d4..497abe0f7 100644 --- a/src/test/java/org/onap/clamp/clds/client/req/SdcReqTest.java +++ b/src/test/java/org/onap/clamp/clds/client/req/SdcReqTest.java @@ -41,7 +41,7 @@ import org.onap.clamp.clds.model.prop.ModelProperties; public class SdcReqTest { String baseUrl = "AYBABTU"; - String serviceInvariantUUID = "serviceInvariantUUID"; + String serviceInvariantUuid = "serviceInvariantUUID"; @Test public void getSdcReqUrlsListNoGlobalPropTest() { @@ -52,7 +52,7 @@ public class SdcReqTest { List<CldsSdcResource> cldsSdcResources = new ArrayList<>(); cldsSdcResources.add(cldsSdcResource); List<String> resourceVf = new ArrayList<>(); - resourceVf.add(serviceInvariantUUID); + resourceVf.add(serviceInvariantUuid); Assert.assertTrue(SdcReq.getSdcReqUrlsList(prop, baseUrl, sdcCatalogServices, delegateExecution).isEmpty()); @@ -60,7 +60,7 @@ public class SdcReqTest { when(prop.getGlobal()).thenReturn(global); Assert.assertTrue(SdcReq.getSdcReqUrlsList(prop, baseUrl, sdcCatalogServices, delegateExecution).isEmpty()); - when(global.getService()).thenReturn(serviceInvariantUUID); + when(global.getService()).thenReturn(serviceInvariantUuid); Assert.assertTrue(SdcReq.getSdcReqUrlsList(prop, baseUrl, sdcCatalogServices, delegateExecution).isEmpty()); CldsSdcServiceDetail cldsSdcServiceDetail = mock(CldsSdcServiceDetail.class); @@ -75,7 +75,7 @@ public class SdcReqTest { Assert.assertTrue(SdcReq.getSdcReqUrlsList(prop, baseUrl, sdcCatalogServices, delegateExecution).isEmpty()); when(global.getResourceVf()).thenReturn(resourceVf); - when(cldsSdcResource.getResourceInvariantUUID()).thenReturn(serviceInvariantUUID); + when(cldsSdcResource.getResourceInvariantUUID()).thenReturn(serviceInvariantUuid); when(cldsSdcResource.getResourceInstanceName()).thenReturn("Resource instance name"); List<String> expected = new ArrayList<>(); expected.add("AYBABTU/null/resourceInstances/resourceinstancename/artifacts"); diff --git a/src/test/java/org/onap/clamp/clds/it/CldsDaoIT.java b/src/test/java/org/onap/clamp/clds/it/CldsDaoItCase.java index bd419647d..1427c3292 100644 --- a/src/test/java/org/onap/clamp/clds/it/CldsDaoIT.java +++ b/src/test/java/org/onap/clamp/clds/it/CldsDaoItCase.java @@ -32,7 +32,7 @@ import javax.ws.rs.NotFoundException; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.onap.clamp.clds.AbstractIT; +import org.onap.clamp.clds.AbstractItCase; import org.onap.clamp.clds.dao.CldsDao; import org.onap.clamp.clds.model.CldsEvent; import org.onap.clamp.clds.model.CldsModel; @@ -50,7 +50,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest @TestPropertySource(locations = "classpath:application-no-camunda.properties") -public class CldsDaoIT extends AbstractIT { +public class CldsDaoItCase extends AbstractItCase { @Autowired public CldsDao cldsDao; @@ -59,6 +59,12 @@ public class CldsDaoIT extends AbstractIT { private String imageText; private String bpmnPropText; + /** + * Setup the variable before the tests execution. + * + * @throws IOException + * In case of issues when opening the files + */ @Before public void setupBefore() throws IOException { bpmnText = ResourceFileUtil.getResourceAsString("example/dao/bpmn-template.xml"); diff --git a/src/test/java/org/onap/clamp/clds/it/CldsServiceIT.java b/src/test/java/org/onap/clamp/clds/it/CldsServiceItCase.java index f09c35778..a1882eaa8 100644 --- a/src/test/java/org/onap/clamp/clds/it/CldsServiceIT.java +++ b/src/test/java/org/onap/clamp/clds/it/CldsServiceItCase.java @@ -36,7 +36,7 @@ import javax.ws.rs.core.SecurityContext; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; -import org.onap.clamp.clds.AbstractIT; +import org.onap.clamp.clds.AbstractItCase; import org.onap.clamp.clds.model.CldsInfo; import org.onap.clamp.clds.service.CldsService; import org.springframework.beans.factory.annotation.Autowired; @@ -51,7 +51,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) @TestPropertySource(locations = "classpath:application-no-camunda.properties") -public class CldsServiceIT extends AbstractIT { +public class CldsServiceItCase extends AbstractItCase { @Autowired CldsService cldsService; @@ -59,10 +59,10 @@ public class CldsServiceIT extends AbstractIT { @Test public void testCldsInfoNotAuthorized() throws Exception { SecurityContext securityContext = Mockito.mock(SecurityContext.class); - Principal p = Mockito.mock(Principal.class); - Mockito.when(p.getName()).thenReturn("admin"); + Principal principal = Mockito.mock(Principal.class); + Mockito.when(principal.getName()).thenReturn("admin"); - Mockito.when(securityContext.getUserPrincipal()).thenReturn(p); + Mockito.when(securityContext.getUserPrincipal()).thenReturn(principal); cldsService.setSecurityContext(securityContext); CldsInfo cldsInfo = cldsService.getCldsInfo(); diff --git a/src/test/java/org/onap/clamp/clds/it/HttpsIT.java b/src/test/java/org/onap/clamp/clds/it/HttpsItCase.java index 98319b41a..9befc40b1 100644 --- a/src/test/java/org/onap/clamp/clds/it/HttpsIT.java +++ b/src/test/java/org/onap/clamp/clds/it/HttpsItCase.java @@ -38,7 +38,7 @@ import javax.net.ssl.X509TrustManager; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; -import org.onap.clamp.clds.AbstractIT; +import org.onap.clamp.clds.AbstractItCase; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; @@ -55,7 +55,7 @@ import org.springframework.web.client.RestTemplate; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT) @TestPropertySource(locations = "classpath:https/https-test.properties") -public class HttpsIT extends AbstractIT { +public class HttpsItCase extends AbstractItCase { @Value("${server.port}") private String httpsPort; @@ -63,6 +63,9 @@ public class HttpsIT extends AbstractIT { @Value("${server.http-to-https-redirection.port}") private String httpPort; + /** + * Setup the variable before tests execution. + */ @BeforeClass public static void setUp() { diff --git a/src/test/java/org/onap/clamp/clds/it/OperationPolicyReqIT.java b/src/test/java/org/onap/clamp/clds/it/OperationPolicyReqItCase.java index 0f874e987..c7084b64f 100644 --- a/src/test/java/org/onap/clamp/clds/it/OperationPolicyReqIT.java +++ b/src/test/java/org/onap/clamp/clds/it/OperationPolicyReqItCase.java @@ -35,7 +35,7 @@ import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; -import org.onap.clamp.clds.AbstractIT; +import org.onap.clamp.clds.AbstractItCase; import org.onap.clamp.clds.client.req.OperationalPolicyReq; import org.onap.clamp.clds.model.CldsEvent; import org.onap.clamp.clds.model.prop.ModelProperties; @@ -51,7 +51,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest @TestPropertySource(locations = "classpath:application-no-camunda.properties") -public class OperationPolicyReqIT extends AbstractIT { +public class OperationPolicyReqItCase extends AbstractItCase { @Test public void formatAttributesTest() throws IOException, BuilderException { diff --git a/src/test/java/org/onap/clamp/clds/it/PolicyClientIT.java b/src/test/java/org/onap/clamp/clds/it/PolicyClientItCase.java index 22abb13d2..0c358948c 100644 --- a/src/test/java/org/onap/clamp/clds/it/PolicyClientIT.java +++ b/src/test/java/org/onap/clamp/clds/it/PolicyClientItCase.java @@ -33,9 +33,9 @@ import java.util.concurrent.TimeUnit; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.onap.clamp.clds.AbstractIT; +import org.onap.clamp.clds.AbstractItCase; import org.onap.clamp.clds.client.req.OperationalPolicyReq; -import org.onap.clamp.clds.client.req.TcaMPolicyReq; +import org.onap.clamp.clds.client.req.TcaRequestFormatter; import org.onap.clamp.clds.model.CldsEvent; import org.onap.clamp.clds.model.prop.ModelProperties; import org.onap.clamp.clds.model.prop.Policy; @@ -43,7 +43,6 @@ import org.onap.clamp.clds.model.prop.PolicyChain; import org.onap.clamp.clds.model.prop.Tca; import org.onap.clamp.clds.util.ResourceFileUtil; import org.onap.policy.api.AttributeType; -import org.skyscreamer.jsonassert.JSONAssert; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; @@ -55,7 +54,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest @TestPropertySource(locations = "classpath:application-no-camunda.properties") -public class PolicyClientIT extends AbstractIT { +public class PolicyClientItCase extends AbstractItCase { String modelProp; String modelBpmnProp; String modelName; @@ -81,7 +80,7 @@ public class PolicyClientIT extends AbstractIT { Map<AttributeType, Map<String, String>> attributes = OperationalPolicyReq.formatAttributes(refProp, prop, policy.getId(), policyChain); - String responseMessage = policyClient.sendBrmsPolicy(attributes, prop, operationalPolicyRequestUuid); + policyClient.sendBrmsPolicy(attributes, prop, operationalPolicyRequestUuid); } } } @@ -91,12 +90,10 @@ public class PolicyClientIT extends AbstractIT { Tca tca = prop.getType(Tca.class); if (tca.isFound()) { String tcaPolicyRequestUuid = UUID.randomUUID().toString(); - String policyJson = TcaMPolicyReq.formatTca(refProp, prop); - String correctValue = ResourceFileUtil.getResourceAsString("expected/tca.json"); - JSONAssert.assertEquals(policyJson, correctValue, true); - String responseMessage = ""; + String policyJson = TcaRequestFormatter.createPolicyJson(refProp, prop); + try { - responseMessage = policyClient.sendMicroServiceInJson(policyJson, prop, tcaPolicyRequestUuid); + policyClient.sendMicroServiceInJson(policyJson, prop, tcaPolicyRequestUuid); } catch (Exception e) { assertTrue(e.getMessage().contains("Exception while communicating with Policy")); } @@ -111,7 +108,7 @@ public class PolicyClientIT extends AbstractIT { prop.setCurrentModelElementId(policy.getId()); for (PolicyChain policyChain : policy.getPolicyChains()) { prop.setPolicyUniqueId(policyChain.getPolicyId()); - String responseMessage = policyClient.deleteBrms(prop); + policyClient.deleteBrms(prop); } } } @@ -122,9 +119,9 @@ public class PolicyClientIT extends AbstractIT { Tca tca = prop.getType(Tca.class); if (tca.isFound()) { prop.setCurrentModelElementId(tca.getId()); - String responseMessage = ""; + try { - responseMessage = policyClient.deleteMicrosService(prop); + policyClient.deleteMicrosService(prop); } catch (Exception e) { assertTrue(e.getMessage().contains("Policy delete failed: PE500 ")); } diff --git a/src/test/java/org/onap/clamp/clds/it/PropJsonBuilderIT.java b/src/test/java/org/onap/clamp/clds/it/PropJsonBuilderIT.java deleted file mode 100644 index cd626dd65..000000000 --- a/src/test/java/org/onap/clamp/clds/it/PropJsonBuilderIT.java +++ /dev/null @@ -1,378 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - */ - -package org.onap.clamp.clds.it; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; - -import java.io.IOException; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.clamp.clds.AbstractIT; -import org.onap.clamp.clds.client.req.SdcReq; -import org.onap.clamp.clds.model.CldsSdcServiceDetail; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; - -/** - * Test SDC API - stand alone (except for some config). Replicates - * getSdcServices and getSdcServicesByUUID in the CldsService Adds test of - * putting putting an artifact to VF. TODO Also needs update and perhaps delete - * tests. - */ -@RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) -@TestPropertySource(locations = "classpath:application-no-camunda.properties") -public class PropJsonBuilderIT extends AbstractIT { - - private String globalPropsPartial; - private ObjectMapper mapper; - - /** - * Initial test setup. - */ - @Before - public void setUp() throws IOException { - String url = refProp.getStringValue("sdc.serviceUrl"); - String basicAuth = SdcReq.getSdcBasicAuth(refProp); - System.out.println("value of string and basicAuth:" + url + basicAuth); - // cldsservicedetail.set - globalPropsPartial = refProp.getStringValue("globalPropsPartialTest"); - mapper = new ObjectMapper(); - } - - /** - * List services from SDC. List meta data for a particular service from SDC. - * Test uploading artifact to a VF in SDC. - */ - @Test - public void testSdc() throws Exception { - // String createEmptySharedObject = createEmptySharedObject(); - // System.out.println("value of emptySharedObject:" + - // createEmptySharedObject); - sampleJsonObject(); - System.out.println(createTestEmptySharedObject()); - } - - private void sampleJsonObject() throws JsonProcessingException { - - /** - * Create three JSON Objects objectNode1, objectNode2, objectNode3. Add - * all these three objects in the array - */ - ObjectNode objectNode1 = mapper.createObjectNode(); - objectNode1.put("bookName", "Java"); - objectNode1.put("price", "100"); - - ObjectNode objectNode2 = mapper.createObjectNode(); - objectNode2.put("bookName", "Spring"); - objectNode2.put("price", "200"); - - ObjectNode objectNode3 = mapper.createObjectNode(); - objectNode3.put("bookName", "Liferay"); - objectNode3.put("price", "500"); - - /** - * Array contains JSON Objects. - */ - ArrayNode arrayNode = mapper.createArrayNode(); - arrayNode.add(objectNode1); - arrayNode.add(objectNode2); - arrayNode.add(objectNode3); - - /** - * We can directly write the JSON in the console. But it wont be pretty - * JSON String - */ - System.out.println(arrayNode.toString()); - - /** - * To make the JSON String pretty use the below code. - */ - System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(arrayNode)); - } - - private String createEmptySharedObject() throws JsonProcessingException { - - /** - * Empty Object initialization. "": { "vf": { "": "" }, "location": { - * "": "" }, "alarmCondition": { "": "" } } - */ - ObjectNode emptyObjectNode = mapper.createObjectNode(); - emptyObjectNode.put("", ""); - ObjectNode vfObjectNode = mapper.createObjectNode(); - vfObjectNode.putPOJO("vf", emptyObjectNode); - ObjectNode locationObjectNode = mapper.createObjectNode(); - locationObjectNode.putPOJO("location", emptyObjectNode); - ObjectNode alarmConditionObjectNode = mapper.createObjectNode(); - alarmConditionObjectNode.putPOJO("alarmCondition", emptyObjectNode); - ArrayNode samArrayNode = mapper.createArrayNode(); - samArrayNode.add(vfObjectNode); - samArrayNode.add(locationObjectNode); - samArrayNode.add(alarmConditionObjectNode); - ObjectNode emptyServiceObjectNode = mapper.createObjectNode(); - emptyServiceObjectNode.putPOJO("", samArrayNode); - - /** - * Object initialization. "vf": { " ": " ", "DCAE_CLAMP_DEMO3 1": - * "DCAE_CLAMP_DEMO3" } - * - */ - ObjectNode dcaeClampDemo3Node = mapper.createObjectNode(); - dcaeClampDemo3Node.put("DCAE_CLAMP_DEMO3", "DCAE_CLAMP_DEMO3"); - ArrayNode vfArrayNode = mapper.createArrayNode(); - vfArrayNode.add(emptyObjectNode); - vfArrayNode.add(dcaeClampDemo3Node); - ObjectNode vfObjectNode2 = mapper.createObjectNode(); - vfObjectNode2.putPOJO("vf", vfArrayNode); - - /** - * Object initialization. "location": { "SNDGCA64": "San Diego SAN3", - * "ALPRGAED": "Alpharetta PDK1", "LSLEILAA": "Lisle DPA3" }, - */ - ObjectNode sandiegoLocationNode = mapper.createObjectNode(); - sandiegoLocationNode.put("SNDGCA64", "San Diego SAN3"); - ObjectNode alpharettaNode = mapper.createObjectNode(); - alpharettaNode.put("ALPRGAED", "Alpharetta PDK1"); - ArrayNode locationArrayNode = mapper.createArrayNode(); - locationArrayNode.add(emptyObjectNode); - locationArrayNode.add(sandiegoLocationNode); - locationArrayNode.add(alpharettaNode); - ObjectNode locationObjectNode2 = mapper.createObjectNode(); - locationObjectNode2.putPOJO("location", locationArrayNode); - - /** - * Object initialization. "alarmCondition": { - * "A+Fallback+Operation+will+soon+be+started": "A Fallback Operation - * will soon be started", "BRM%2C+Auto+Export+Backup+Failed": "BRM, Auto - * Export Backup Failed", - */ - ObjectNode alamrCondition1 = mapper.createObjectNode(); - alamrCondition1.put("A+Fallback+Operation+will+soon+be+started", "A Fallback Operation will soon be started"); - ObjectNode alarmConditon2 = mapper.createObjectNode(); - alarmConditon2.put("BRM%2C+Scheduled+Backup+Failed", "BRM, Scheduled Backup Failed"); - ArrayNode alarmArrayNode = mapper.createArrayNode(); - alarmArrayNode.add(emptyObjectNode); - alarmArrayNode.add(alamrCondition1); - alarmArrayNode.add(alarmConditon2); - ObjectNode alarmConditionObjectNode2 = mapper.createObjectNode(); - alarmConditionObjectNode2.putPOJO("alarmCondition", alarmArrayNode); - - ArrayNode byServiceIdArrayNode = mapper.createArrayNode(); - byServiceIdArrayNode.add(vfObjectNode2); - byServiceIdArrayNode.add(locationObjectNode2); - byServiceIdArrayNode.add(alarmConditionObjectNode2); - - ObjectNode byServiceIdNode = mapper.createObjectNode(); - byServiceIdNode.putPOJO("c989a551-69f7-4b30-b10a-2e85bb227c30", byServiceIdArrayNode); - - ArrayNode byServiceBasicArrayNode = mapper.createArrayNode(); - byServiceBasicArrayNode.add(emptyServiceObjectNode); - byServiceBasicArrayNode.add(byServiceIdNode); - - ObjectNode byServiceBasicObjetNode = mapper.createObjectNode(); - - byServiceBasicObjetNode.putPOJO("byService", byServiceBasicArrayNode); - - /** - * Object initialization. "byVf": { "": { "vfc": { "": "" }, - * "03596c12-c7e3-44b7-8994-5cdfeda8afdd": { "vfc": { " ": " " } } } } - */ - ObjectNode vfCObjectNode = mapper.createObjectNode(); - vfCObjectNode.putPOJO("vfC", emptyObjectNode); - ObjectNode vfcIdObjectNode = mapper.createObjectNode(); - vfcIdObjectNode.putPOJO("03596c12-c7e3-44b7-8994-5cdfeda8afdd", vfCObjectNode); - ArrayNode emptyvfcArrayNode = mapper.createArrayNode(); - emptyvfcArrayNode.add(vfCObjectNode); - emptyvfcArrayNode.add(vfcIdObjectNode); - ObjectNode emptyvfcobjectNode = mapper.createObjectNode(); - emptyvfcobjectNode.putPOJO("", emptyvfcArrayNode); - - ObjectNode byVfCBasicNode = mapper.createObjectNode(); - byVfCBasicNode.putPOJO("byVf", emptyvfcobjectNode); - - ArrayNode finalSharedArrayObject = mapper.createArrayNode(); - - finalSharedArrayObject.add(byServiceBasicObjetNode); - finalSharedArrayObject.add(byVfCBasicNode); - - ObjectNode finalSharedObjectNode = mapper.createObjectNode(); - finalSharedObjectNode.putPOJO("shared", finalSharedArrayObject); - - System.out.println("value :" + finalSharedObjectNode.toString()); - String testFinal = finalSharedObjectNode.toString(); - testFinal = testFinal.replaceFirst("\\{", ","); - return globalPropsPartial + testFinal; - } - - private String createTestEmptySharedObject() throws IOException { - - /** - * Object initialization. "": { "vf": { "": "" }, "location": { "": "" - * }, "alarmCondition": { "": "" } } - */ - ObjectNode emptyObjectNode = mapper.createObjectNode(); - emptyObjectNode.put("", ""); - ObjectNode vfObjectNode = mapper.createObjectNode(); - vfObjectNode.putPOJO("vf", emptyObjectNode); - vfObjectNode.putPOJO("location", emptyObjectNode); - vfObjectNode.putPOJO("alarmCondition", emptyObjectNode); - ObjectNode emptyServiceObjectNode = mapper.createObjectNode(); - emptyServiceObjectNode.putPOJO("", vfObjectNode); - - /** - * Object initialization. "vf": { " ": " ", "DCAE_CLAMP_DEMO3 1": - * "DCAE_CLAMP_DEMO3" } - * - */ - ObjectNode vfObjectNode2 = mapper.createObjectNode(); - ObjectNode dcaeClampDemo3Node = mapper.createObjectNode(); - dcaeClampDemo3Node.put("", ""); - dcaeClampDemo3Node.put("DCAE_CLAMP_DEMO3", "DCAE_CLAMP_DEMO3"); - vfObjectNode2.putPOJO("vf", dcaeClampDemo3Node); - - /** - * Object initialization. "location": { "SNDGCA64": "San Diego SAN3", - * "ALPRGAED": "Alpharetta PDK1", "LSLEILAA": "Lisle DPA3" }, - */ - // ObjectNode sandiegoLocationNode = mapper.createObjectNode(); - // sandiegoLocationNode.put("SNDGCA64","San Diego SAN3"); - // sandiegoLocationNode.put("ALPRGAED","Alpharetta PDK1"); - String locationStringValue = refProp.getStringValue("ui.location.default"); - ObjectNode locationJsonNode = (ObjectNode) mapper.readValue(locationStringValue, JsonNode.class); - vfObjectNode2.putPOJO("location", locationJsonNode); - - /** - * Object initialization. "alarmCondition": { - * "A+Fallback+Operation+will+soon+be+started": "A Fallback Operation - * will soon be started", "BRM%2C+Auto+Export+Backup+Failed": "BRM, Auto - * Export Backup Failed", - */ - // ObjectNode alamrCondition1 = mapper.createObjectNode(); - // alamrCondition1.put("A+Fallback+Operation+will+soon+be+started","A - // Fallback Operation will soon be started"); - // alamrCondition1.put("BRM%2C+Scheduled+Backup+Failed","BRM, Scheduled - // Backup Failed"); - String alarmStringValue = refProp.getStringValue("ui.alarm.default"); - ObjectNode alarmStringJsonNode = (ObjectNode) mapper.readValue(alarmStringValue, JsonNode.class); - vfObjectNode2.putPOJO("alarmCondition", alarmStringJsonNode); - emptyServiceObjectNode.putPOJO("c989a551-69f7-4b30-b10a-2e85bb227c30", vfObjectNode2); - ObjectNode byServiceBasicObjetNode = mapper.createObjectNode(); - byServiceBasicObjetNode.putPOJO("byService", emptyServiceObjectNode); - - /** - * Object initialization. "byVf": { "": { "vfc": { "": "" }, - * "03596c12-c7e3-44b7-8994-5cdfeda8afdd": { "vfc": { " ": " " } } } } - */ - ObjectNode vfCObjectNode = mapper.createObjectNode(); - vfCObjectNode.putPOJO("vfC", emptyObjectNode); - ObjectNode subVfCObjectNode = mapper.createObjectNode(); - subVfCObjectNode.putPOJO("vfc", emptyObjectNode); - vfCObjectNode.putPOJO("03596c12-c7e3-44b7-8994-5cdfeda8afdd", subVfCObjectNode); - ObjectNode emptyvfcobjectNode = mapper.createObjectNode(); - emptyvfcobjectNode.putPOJO("", vfCObjectNode); - byServiceBasicObjetNode.putPOJO("byVf", emptyvfcobjectNode); - - ObjectNode readTree = (ObjectNode) mapper.readValue(globalPropsPartial, JsonNode.class); - readTree.putPOJO("shared", byServiceBasicObjetNode); - System.out.println("valuie of objNode:" + readTree); - return readTree.toString(); - } - - private String createCldsSharedObject(CldsSdcServiceDetail CldsSdcServiceDetail) throws IOException { - /** - * Object initialization. "": { "vf": { "": "" }, "location": { "": "" - * }, "alarmCondition": { "": "" } } - */ - ObjectNode emptyObjectNode = mapper.createObjectNode(); - emptyObjectNode.put("", ""); - ObjectNode vfObjectNode = mapper.createObjectNode(); - vfObjectNode.putPOJO("vf", emptyObjectNode); - vfObjectNode.putPOJO("location", emptyObjectNode); - vfObjectNode.putPOJO("alarmCondition", emptyObjectNode); - ObjectNode emptyServiceObjectNode = mapper.createObjectNode(); - emptyServiceObjectNode.putPOJO("", vfObjectNode); - - /** - * Object initialization. "vf": { " ": " ", "DCAE_CLAMP_DEMO3 1": - * "DCAE_CLAMP_DEMO3" } - * - */ - ObjectNode vfObjectNode2 = mapper.createObjectNode(); - ObjectNode dcaeClampDemo3Node = mapper.createObjectNode(); - dcaeClampDemo3Node.put("", ""); - dcaeClampDemo3Node.put("DCAE_CLAMP_DEMO3", "DCAE_CLAMP_DEMO3"); - vfObjectNode2.putPOJO("vf", dcaeClampDemo3Node); - - /** - * Object initialization. "location": { "SNDGCA64": "San Diego SAN3", - * "ALPRGAED": "Alpharetta PDK1", "LSLEILAA": "Lisle DPA3" }, - */ - ObjectNode sandiegoLocationNode = mapper.createObjectNode(); - sandiegoLocationNode.put("SNDGCA64", "San Diego SAN3"); - sandiegoLocationNode.put("ALPRGAED", "Alpharetta PDK1"); - vfObjectNode2.putPOJO("location", sandiegoLocationNode); - - /** - * Object initialization. "alarmCondition": { - * "A+Fallback+Operation+will+soon+be+started": "A Fallback Operation - * will soon be started", "BRM%2C+Auto+Export+Backup+Failed": "BRM, Auto - * Export Backup Failed", - */ - ObjectNode alamrCondition1 = mapper.createObjectNode(); - alamrCondition1.put("A+Fallback+Operation+will+soon+be+started", "A Fallback Operation will soon be started"); - alamrCondition1.put("BRM%2C+Scheduled+Backup+Failed", "BRM, Scheduled Backup Failed"); - vfObjectNode2.putPOJO("alarmCondition", alamrCondition1); - emptyServiceObjectNode.putPOJO("c989a551-69f7-4b30-b10a-2e85bb227c30", vfObjectNode2); - ObjectNode byServiceBasicObjetNode = mapper.createObjectNode(); - byServiceBasicObjetNode.putPOJO("byService", emptyServiceObjectNode); - - /** - * Object initialization. "byVf": { "": { "vfc": { "": "" }, - * "03596c12-c7e3-44b7-8994-5cdfeda8afdd": { "vfc": { " ": " " } } } } - */ - - ObjectNode vfCObjectNode = mapper.createObjectNode(); - vfCObjectNode.putPOJO("vfC", emptyObjectNode); - ObjectNode subVfCObjectNode = mapper.createObjectNode(); - subVfCObjectNode.putPOJO("vfc", emptyObjectNode); - vfCObjectNode.putPOJO("03596c12-c7e3-44b7-8994-5cdfeda8afdd", subVfCObjectNode); - ObjectNode emptyvfcobjectNode = mapper.createObjectNode(); - emptyvfcobjectNode.putPOJO("", vfCObjectNode); - byServiceBasicObjetNode.putPOJO("byVf", emptyvfcobjectNode); - - ObjectNode readTree = (ObjectNode) mapper.readValue(globalPropsPartial, JsonNode.class); - - readTree.putPOJO("shared", byServiceBasicObjetNode); - System.out.println("valuie of objNode:" + readTree); - return readTree.toString(); - } -} diff --git a/src/test/java/org/onap/clamp/clds/it/RefPropIT.java b/src/test/java/org/onap/clamp/clds/it/RefPropItCase.java index 4617f5b42..478a7b384 100644 --- a/src/test/java/org/onap/clamp/clds/it/RefPropIT.java +++ b/src/test/java/org/onap/clamp/clds/it/RefPropItCase.java @@ -30,7 +30,7 @@ import java.io.IOException; import org.junit.Test; import org.junit.runner.RunWith; -import org.onap.clamp.clds.AbstractIT; +import org.onap.clamp.clds.AbstractItCase; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; @@ -41,7 +41,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest @TestPropertySource(locations = "classpath:application-no-camunda.properties") -public class RefPropIT extends AbstractIT { +public class RefPropItCase extends AbstractItCase { /** * Test getting prop value as a JSON Node / template. diff --git a/src/test/java/org/onap/clamp/clds/it/SdcCatalogServicesIT.java b/src/test/java/org/onap/clamp/clds/it/SdcCatalogServicesItCase.java index dce6c901b..0deae6d31 100644 --- a/src/test/java/org/onap/clamp/clds/it/SdcCatalogServicesIT.java +++ b/src/test/java/org/onap/clamp/clds/it/SdcCatalogServicesItCase.java @@ -32,7 +32,7 @@ import org.apache.commons.io.IOUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; -import org.onap.clamp.clds.AbstractIT; +import org.onap.clamp.clds.AbstractItCase; import org.onap.clamp.clds.client.SdcCatalogServices; import org.onap.clamp.clds.model.CldsAlarmCondition; import org.onap.clamp.clds.model.CldsSdcResource; @@ -50,7 +50,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest @TestPropertySource(locations = "classpath:application-no-camunda.properties") -public class SdcCatalogServicesIT extends AbstractIT { +public class SdcCatalogServicesItCase extends AbstractItCase { @Autowired private SdcCatalogServices sdcCatalogWired = new SdcCatalogServices(); @@ -205,8 +205,8 @@ public class SdcCatalogServicesIT extends AbstractIT { SdcCatalogServices spy = Mockito.spy(sdcCatalogWired); Mockito.doReturn(IOUtils.toString( - SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcServicesListExample.json"), "UTF-8")) - .when(spy).getSdcServicesInformation(null); + SdcCatalogServicesItCase.class.getResourceAsStream("/example/sdc/sdcServicesListExample.json"), + "UTF-8")).when(spy).getSdcServicesInformation(null); // Try the vcts4 version 1.0, this one should be replaced by 1.1 so it // should not exist, returning empty string String resUuidVcts4Null = spy.getServiceUuidFromServiceInvariantId("a33ed748-3477-4434-b3f3-b5560f5e7d9b"); @@ -232,82 +232,82 @@ public class SdcCatalogServicesIT extends AbstractIT { SdcCatalogServices spy = Mockito.spy(sdcCatalogWired); Mockito.doReturn(IOUtils.toString( - SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcServicesListExample.json"), "UTF-8")) - .when(spy).getSdcServicesInformation(null); + SdcCatalogServicesItCase.class.getResourceAsStream("/example/sdc/sdcServicesListExample.json"), + "UTF-8")).when(spy).getSdcServicesInformation(null); // This invariant uuid is the one from vcts4 v1.1 String serviceResourceDetailUrl = refProp.getStringValue("sdc.serviceUrl") + "/29018914-966c-442d-9d08-251b9dc45b8f/metadata"; Mockito.doReturn(IOUtils.toString( - SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcServiceDetailsExample.json"), "UTF-8")) - .when(spy).getCldsServicesOrResourcesBasedOnURL(serviceResourceDetailUrl, false); + SdcCatalogServicesItCase.class.getResourceAsStream("/example/sdc/sdcServiceDetailsExample.json"), + "UTF-8")).when(spy).getCldsServicesOrResourcesBasedOnURL(serviceResourceDetailUrl, false); String resourceDetailUrl = refProp.getStringValue("sdc.catalog.url") + "resources/585822c7-4027-4f84-ba50-e9248606f136/metadata"; Mockito.doReturn(IOUtils.toString( - SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcResourceDetailsExample.json"), "UTF-8")) - .when(spy).getCldsServicesOrResourcesBasedOnURL(resourceDetailUrl, false); + SdcCatalogServicesItCase.class.getResourceAsStream("/example/sdc/sdcResourceDetailsExample.json"), + "UTF-8")).when(spy).getCldsServicesOrResourcesBasedOnURL(resourceDetailUrl, false); String securityRulesDetailUrl = refProp.getStringValue("sdc.catalog.url") + "resources/d57e57d2-e3c6-470d-8d16-e6ea05f536c5/metadata"; Mockito.doReturn(IOUtils.toString( - SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcSecurityRules.json"), "UTF-8")) + SdcCatalogServicesItCase.class.getResourceAsStream("/example/sdc/sdcSecurityRules.json"), "UTF-8")) .when(spy).getCldsServicesOrResourcesBasedOnURL(securityRulesDetailUrl, false); String cinderVolumeDetailUrl = refProp.getStringValue("sdc.catalog.url") + "resources/b4288e07-597a-44a2-aa98-ad36e551a39d/metadata"; - Mockito.doReturn(IOUtils - .toString(SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcCinderVolume.json"), "UTF-8")) + Mockito.doReturn(IOUtils.toString( + SdcCatalogServicesItCase.class.getResourceAsStream("/example/sdc/sdcCinderVolume.json"), "UTF-8")) .when(spy).getCldsServicesOrResourcesBasedOnURL(cinderVolumeDetailUrl, false); String vfcGenericDetailUrl = refProp.getStringValue("sdc.catalog.url") + "resources/2c8f1219-8000-4001-aa13-496a0396d40f/metadata"; Mockito.doReturn(IOUtils.toString( - SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcVFCGenericWithAlarms.json"), "UTF-8")) - .when(spy).getCldsServicesOrResourcesBasedOnURL(vfcGenericDetailUrl, false); + SdcCatalogServicesItCase.class.getResourceAsStream("/example/sdc/sdcVFCGenericWithAlarms.json"), + "UTF-8")).when(spy).getCldsServicesOrResourcesBasedOnURL(vfcGenericDetailUrl, false); String csvAlarmsDetailUrl = refProp.getStringValue("sdc.catalog.url") + "resources/2c8f1219-8000-4001-aa13-496a0396d40f/resourceInstances/virc_fe_be/artifacts/5138e316-0237-49aa-817a-b3d8eaf77392"; - Mockito.doReturn(IOUtils - .toString(SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcAlarmsList.csv"), "UTF-8")) + Mockito.doReturn(IOUtils.toString( + SdcCatalogServicesItCase.class.getResourceAsStream("/example/sdc/sdcAlarmsList.csv"), "UTF-8")) .when(spy).getCldsServicesOrResourcesBasedOnURL(csvAlarmsDetailUrl, false); - Mockito.doReturn(IOUtils - .toString(SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcAlarmsList.csv"), "UTF-8")) + Mockito.doReturn(IOUtils.toString( + SdcCatalogServicesItCase.class.getResourceAsStream("/example/sdc/sdcAlarmsList.csv"), "UTF-8")) .when(spy).getCldsServicesOrResourcesBasedOnURL(csvAlarmsDetailUrl, true); String csvAlarmsDetailUrl2 = refProp.getStringValue("sdc.catalog.url") + "resources/d7646638-2572-4a94-b497-c028ac15f9ca/artifacts/5138e316-0237-49aa-817a-b3d8eaf77392"; - Mockito.doReturn(IOUtils - .toString(SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcAlarmsList.csv"), "UTF-8")) + Mockito.doReturn(IOUtils.toString( + SdcCatalogServicesItCase.class.getResourceAsStream("/example/sdc/sdcAlarmsList.csv"), "UTF-8")) .when(spy).getCldsServicesOrResourcesBasedOnURL(csvAlarmsDetailUrl2, true); String allVfResourcesDetailUrl = refProp.getStringValue("sdc.catalog.url") + "resources?resourceType=VF"; - Mockito.doReturn(IOUtils - .toString(SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcVFResources.json"), "UTF-8")) + Mockito.doReturn(IOUtils.toString( + SdcCatalogServicesItCase.class.getResourceAsStream("/example/sdc/sdcVFResources.json"), "UTF-8")) .when(spy).getCldsServicesOrResourcesBasedOnURL(allVfResourcesDetailUrl, false); - String cVfcResourcesDetailUrl = refProp.getStringValue("sdc.catalog.url") + String vfcResourcesDetailUrl = refProp.getStringValue("sdc.catalog.url") + "resources/a0475018-1e7e-4ddd-8bee-33cbf958c2e6/metadata"; Mockito.doReturn(IOUtils.toString( - SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcCVFCResourceExample.json"), "UTF-8")) - .when(spy).getCldsServicesOrResourcesBasedOnURL(cVfcResourcesDetailUrl, false); + SdcCatalogServicesItCase.class.getResourceAsStream("/example/sdc/sdcCVFCResourceExample.json"), + "UTF-8")).when(spy).getCldsServicesOrResourcesBasedOnURL(vfcResourcesDetailUrl, false); String allVfcResourcesDetailUrl = refProp.getStringValue("sdc.catalog.url") + "resources?resourceType=VFC"; - Mockito.doReturn(IOUtils - .toString(SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcVFCResources.json"), "UTF-8")) + Mockito.doReturn(IOUtils.toString( + SdcCatalogServicesItCase.class.getResourceAsStream("/example/sdc/sdcVFCResources.json"), "UTF-8")) .when(spy).getCldsServicesOrResourcesBasedOnURL(allVfcResourcesDetailUrl, false); String allVfAlarms = refProp.getStringValue("sdc.catalog.url") + "resources/84855843-5247-4e97-a2bd-5395a510253b/artifacts/d57ac7ec-f3c3-4793-983a-c75ac3a43153"; Mockito.doReturn(IOUtils.toString( - SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcMeasurementsList.csv"), "UTF-8")) + SdcCatalogServicesItCase.class.getResourceAsStream("/example/sdc/sdcMeasurementsList.csv"), "UTF-8")) .when(spy).getCldsServicesOrResourcesBasedOnURL(allVfAlarms, true); String vfcResourceExample = refProp.getStringValue("sdc.catalog.url") + "resources/d7646638-2572-4a94-b497-c028ac15f9ca/metadata"; Mockito.doReturn(IOUtils.toString( - SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcVFCResourceExample.json"), "UTF-8")) + SdcCatalogServicesItCase.class.getResourceAsStream("/example/sdc/sdcVFCResourceExample.json"), "UTF-8")) .when(spy).getCldsServicesOrResourcesBasedOnURL(vfcResourceExample, false); CldsServiceData cldsServiceData = spy diff --git a/src/test/java/org/onap/clamp/clds/it/SdcIT.java b/src/test/java/org/onap/clamp/clds/it/SdcIT.java deleted file mode 100644 index 46ac4089c..000000000 --- a/src/test/java/org/onap/clamp/clds/it/SdcIT.java +++ /dev/null @@ -1,73 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - */ - -package org.onap.clamp.clds.it; - -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; - -import org.onap.clamp.clds.AbstractIT; -import org.onap.clamp.clds.client.SdcCatalogServices; -import org.onap.clamp.clds.client.req.SdcReq; -import org.onap.clamp.clds.model.CldsEvent; -import org.onap.clamp.clds.model.prop.ModelProperties; -import org.onap.clamp.clds.model.refprop.RefProp; -import org.onap.clamp.clds.util.ResourceFileUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; - -/** - * Test SDC Blueprint formater. - */ -@RunWith(SpringRunner.class) -@SpringBootTest -@TestPropertySource(locations = "classpath:application-no-camunda.properties") -public class SdcIT extends AbstractIT { - @Autowired - private RefProp refProp; - - @Autowired - private SdcCatalogServices sdcCatalogServices; - - @BeforeClass - public static void oneTimeSetUp() { - System.setProperty("AJSC_CONF_HOME", System.getProperty("user.dir") + "/src/test/resources/"); - } - - @Test - public void testTcaBlueprint() throws Exception { - String modelProp = ResourceFileUtil.getResourceAsString("example/modelPropForPolicy.json"); - String modelBpmnProp = ResourceFileUtil.getResourceAsString("example/modelBpmnPropForPolicy.json"); - String modelName = "example-model06"; - String controlName = "ClosedLoop-FRWL-SIG04-1582f840-test-test-1234-005056a9d756"; - String docText = ResourceFileUtil.getResourceAsString("example/templatePropForTca.json"); - ModelProperties prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT, - true, modelBpmnProp, modelProp); - String blueprint = SdcReq.formatBlueprint(refProp, prop, docText); - System.out.println("blueprint=" + blueprint); - //assertEquals(blueprint, ""); - } -} diff --git a/src/test/java/org/onap/clamp/clds/it/TcaRequestFormatterItCase.java b/src/test/java/org/onap/clamp/clds/it/TcaRequestFormatterItCase.java new file mode 100644 index 000000000..a32743a69 --- /dev/null +++ b/src/test/java/org/onap/clamp/clds/it/TcaRequestFormatterItCase.java @@ -0,0 +1,89 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ + +package org.onap.clamp.clds.it; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.clamp.clds.AbstractItCase; +import org.onap.clamp.clds.client.req.TcaRequestFormatter; +import org.onap.clamp.clds.model.CldsEvent; +import org.onap.clamp.clds.model.prop.ModelProperties; +import org.onap.clamp.clds.util.ResourceFileUtil; +import org.skyscreamer.jsonassert.JSONAssert; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * Test Onap TcaRequestFormatter features. + */ +@RunWith(SpringRunner.class) +@SpringBootTest +@TestPropertySource(locations = "classpath:application-no-camunda.properties") +public class TcaRequestFormatterItCase extends AbstractItCase { + + String modelProp; + String modelBpmn; + String modelName; + String controlName; + String yamlInput; + + /** + * Initialize Test. + */ + @Before + public void setUp() throws IOException { + modelProp = ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmnProperties.json"); + modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmn.json"); + yamlInput = ResourceFileUtil.getResourceAsString("example/tca-policy-req/blueprint-input.yaml"); + modelName = "example-model01"; + controlName = "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf"; + } + + @Test + public void testCreatePolicyJson() throws IOException { + ModelProperties prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT, false, modelBpmn, + modelProp); + String result = TcaRequestFormatter.createPolicyJson(refProp, prop); + assertNotNull(result); + JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("example/tca-policy-req/tca-policy-expected.json"), + result, true); + } + + @Test + public void testUpdatedBlueprintWithConfiguration() throws IOException { + ModelProperties prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT, false, modelBpmn, + modelProp); + String result = TcaRequestFormatter.updatedBlueprintWithConfiguration(refProp, prop, yamlInput); + + assertNotNull(result); + assertEquals(ResourceFileUtil.getResourceAsString("example/tca-policy-req/blueprint-expected.yaml"), result); + } +} diff --git a/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java b/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java index 60056d42f..45f39a422 100644 --- a/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java +++ b/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java @@ -24,11 +24,10 @@ package org.onap.clamp.clds.model.prop; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; import org.junit.Before; import org.junit.Test; @@ -46,10 +45,11 @@ public class ModelPropertiesTest { } @Test - public void testHolmes() throws IOException { + public void testTcaModelDecoding() throws IOException { - String modelBpmnProp = ResourceFileUtil.getResourceAsString("example/model-properties/modelBpmnProp.json"); - String modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/modelBpmn.json"); + String modelBpmnProp = ResourceFileUtil + .getResourceAsString("example/model-properties/tca/modelBpmnProperties.json"); + String modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmn.json"); ModelProperties prop = new ModelProperties("example-model-name", "example-control-name", null, true, modelBpmn, modelBpmnProp); @@ -66,11 +66,52 @@ public class ModelPropertiesTest { assertEquals(null, policy.getPolicyChains().get(0).getPolicyItems().get(0).getParentPolicyConditions()); Tca tca = prop.getType(Tca.class); + assertNotNull(tca); assertTrue(tca.isFound()); - assertEquals(1, tca.getTcaItems().size()); - assertEquals(0, tca.getTcaItems().get(0).getTcaThreshholds().size()); + assertEquals("vFirewallBroadcastPackets", tca.getTcaItem().getEventName()); + assertEquals("policy1", tca.getTcaItem().getPolicyId()); + assertEquals("f734f031-10aa-t8fb-330f-04dde2886325", tca.getTcaItem().getTcaUuId()); + assertEquals(2, tca.getTcaItem().getTcaThresholds().size()); + + assertEquals("ABATED", tca.getTcaItem().getTcaThresholds().get(0).getClosedLoopEventStatus()); + assertEquals("VM", tca.getTcaItem().getTcaThresholds().get(0).getControlLoopSchema()); + assertEquals( + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated", + tca.getTcaItem().getTcaThresholds().get(0).getFieldPath()); + assertEquals("LESS_OR_EQUAL", tca.getTcaItem().getTcaThresholds().get(0).getOperator()); + assertEquals(Integer.valueOf(123), tca.getTcaItem().getTcaThresholds().get(0).getThreshold()); + + assertEquals("ONSET", tca.getTcaItem().getTcaThresholds().get(1).getClosedLoopEventStatus()); + assertEquals("VNF", tca.getTcaItem().getTcaThresholds().get(1).getControlLoopSchema()); + assertEquals("$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta", + tca.getTcaItem().getTcaThresholds().get(1).getFieldPath()); + assertEquals("GREATER_OR_EQUAL", tca.getTcaItem().getTcaThresholds().get(1).getOperator()); + assertEquals(Integer.valueOf(123), tca.getTcaItem().getTcaThresholds().get(1).getThreshold()); + } + + @Test + public void testHolmesModelDecoding() throws IOException { + + String modelBpmnProp = ResourceFileUtil + .getResourceAsString("example/model-properties/holmes/modelBpmnProperties.json"); + String modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/holmes/modelBpmn.json"); + + ModelProperties prop = new ModelProperties("example-model-name", "example-control-name", null, true, modelBpmn, + modelBpmnProp); + + Policy policy = prop.getType(Policy.class); + assertTrue(policy.isFound()); + assertEquals(1, policy.getPolicyChains().size()); + assertEquals("0", policy.getPolicyChains().get(0).getPolicyId()); + assertEquals(1, policy.getPolicyChains().get(0).getPolicyItems().size()); + assertEquals("resourceid", policy.getPolicyChains().get(0).getPolicyItems().get(0).getTargetResourceId()); + assertEquals(180, policy.getPolicyChains().get(0).getPolicyItems().get(0).getRetryTimeLimit()); + assertEquals(3, policy.getPolicyChains().get(0).getPolicyItems().get(0).getMaxRetries()); + assertEquals("", policy.getPolicyChains().get(0).getPolicyItems().get(0).getParentPolicy()); + assertEquals(null, policy.getPolicyChains().get(0).getPolicyItems().get(0).getParentPolicyConditions()); Holmes holmes = prop.getType(Holmes.class); + assertNotNull(holmes); assertTrue(holmes.isFound()); assertEquals("policy1", holmes.getOperationalPolicy()); assertEquals("blabla", holmes.getCorrelationLogic()); @@ -80,7 +121,7 @@ public class ModelPropertiesTest { public void testGetVf() throws IOException { CldsModel cldsModel = new CldsModel(); cldsModel.setPropText( - ResourceFileUtil.getResourceAsString("example/model-properties/modelBpmnPropWithGlobal.json")); + ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmnProperties.json")); assertEquals("f5213e3a-9191-4362-93b5-b67f8d770e44", ModelProperties.getVf(cldsModel)); } }
\ No newline at end of file diff --git a/src/test/resources/clds/clds-reference.properties b/src/test/resources/clds/clds-reference.properties index f2ec43b76..405b3ed6f 100644 --- a/src/test/resources/clds/clds-reference.properties +++ b/src/test/resources/clds/clds-reference.properties @@ -28,9 +28,9 @@ #
# TCA MicroService Policy request build properties
#
-tca.template={"service":"MThresholdCrossingConfiguration","location":"Edge","uuid":"TestUUID","policyName":"???","description":"from clds","configName":"MThresholdCrossingConfiguration","templateVersion":"5.2.0.1","priority":"4","version":"5.2.0.1","policyScope":"resource=F5,service=vSCP,type=configuration,closedLoopControlName=vSCP_F5_Firewall_d925ed73-8231-4d02-9545-db4e101f88f8","content":{"$class": "com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration","domain":"measurementsForVfScaling","policyScope":"pnf=eNodeB;type=configuration","policyName":"policy.dcae.configuration","policyVersion":"1.0.0","subscriberContentType": "application/json","subscriberConsumerId": "c13","subscriberConsumerGroup": "OpenDCAE-c13","subscriberTimeoutMS": "-1","subscriberMessageLimit": "-1","subscriberPollingInterval": "20000","publisherContentType": "application/json","publisherMaxBatchSize": "10","publisherMaxRecoveryQueueSize": "100000","publisherPollingInterval": "20000","publisherAlertWindowingTime": "86400","signatures":[]}}
-tca.signature.template={"nfNamingCode":"ENBE","target":"common_id","targetType":"eNodeB","useCaseName":"???","signatureName":"???","signatureUuid":"???","closedLoopControlName":"???","severity":"???","version":"1.0.2","maxInterval":1200,"minMessageViolations":4,"thresholds":[]}
-
+tca.template={"cdap-tca-hi-lo_policy": {"domain": "measurementsForVfScaling","metricsPerEventName": [{"eventName": "???","policyScope": "DCAE","policyName": "???","policyVersion": "v0.0.1","thresholds": []}]}}
+tca.thresholds.template={"closedLoopControlName": "???", "controlLoopSchema": "VM","version": "1.0.2","fieldPath": "?????", "thresholdValue": 0,"direction": "???","severity": "MAJOR", "closedLoopEventStatus": "???"}
+#
#
# DCAE request build properties
#
@@ -45,7 +45,7 @@ sdc.decode.service_ids={} #
# General Policy request properties
#
-policy.ecomp.name=DCAE
+policy.onap.name=DCAE
policy.pdp.group=default
policy.ms.type=MicroService
policy.ms.policyNamePrefix=Config_MS_
diff --git a/src/test/resources/example/model-properties/holmes/modelBpmn.json b/src/test/resources/example/model-properties/holmes/modelBpmn.json new file mode 100644 index 000000000..db8e54dd3 --- /dev/null +++ b/src/test/resources/example/model-properties/holmes/modelBpmn.json @@ -0,0 +1,20 @@ +{ + "vesCollector": [ + { + "id": "VesCollector_0orydnh", + "from": "StartEvent_1" + } + ], + "holmes": [ + { + "id": "Holmes_0i4n2mm", + "from": "VesCollector_0orydnh" + } + ], + "policy": [ + { + "id": "Policy_0honxgv", + "from": "Holmes_0i4n2mm" + } + ] +} diff --git a/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json b/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json new file mode 100644 index 000000000..14b3a8c28 --- /dev/null +++ b/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json @@ -0,0 +1,116 @@ +{ + "Holmes_0i4n2mm": [ + { + "name": "correlationalLogic", + "value": "blabla" + }, + { + "name": "operationalPolicy", + "value": "policy1" + } + ], + "Policy_0honxgv": { + "policy1": [ + { + "name": "pname", + "value": "policy1" + }, + { + "name": "pid", + "value": "0" + }, + { + "name": "timeout", + "value": "345" + }, + { + "policyConfigurations": [ + [ + { + "name": "maxRetries", + "value": [ + "3" + ] + }, + { + "name": "retryTimeLimit", + "value": [ + "180" + ] + }, + { + "name": "_id", + "value": [ + "dGLuNqg" + ] + }, + { + "name": "parentPolicy", + "value": [ + "" + ] + }, + { + "name": "targetResourceId", + "value": [ + "resourceid" + ] + } + ] + ] + } + ] + }, + "global": [ + { + "name": "actionSet", + "value": [ + "vnfRecipe" + ] + }, + { + "name": "location", + "value": [ + "SNDGCA64", + "ALPRGAED" + ] + }, + { + "name": "vf", + "value": [ + "f5213e3a-9191-4362-93b5-b67f8d770e44" + ] + }, + { + "name": "location", + "value": [ + "SNDGCA64", + "ALPRGAED", + "LSLEILAA", + "MDTWNJC1" + ] + } + ], + "shared": { + "byService": { + "": { + "vf": { + "": "" + }, + "location": { + "": "" + }, + "alarmCondition": { + "": "" + } + } + }, + "byVf": { + "": { + "vfc": { + "": "" + } + } + } + } +} diff --git a/src/test/resources/example/model-properties/tca/modelBpmn.json b/src/test/resources/example/model-properties/tca/modelBpmn.json new file mode 100644 index 000000000..7358f9ade --- /dev/null +++ b/src/test/resources/example/model-properties/tca/modelBpmn.json @@ -0,0 +1,20 @@ +{ + "vesCollector": [ + { + "id": "VesCollector_0orydnh", + "from": "StartEvent_1" + } + ], + "tca": [ + { + "id": "TCA_1jy9to4", + "from": "VesCollector_0orydnh" + } + ], + "policy": [ + { + "id": "Policy_0honxgv", + "from": "TCA_1jy9to4" + } + ] +} diff --git a/src/test/resources/example/model-properties/tca/modelBpmnProperties.json b/src/test/resources/example/model-properties/tca/modelBpmnProperties.json new file mode 100644 index 000000000..0bfa78ce1 --- /dev/null +++ b/src/test/resources/example/model-properties/tca/modelBpmnProperties.json @@ -0,0 +1,150 @@ +{ + "TCA_1jy9to4": { + "group1": [ + { + "name": "tname", + "value": "group1" + }, + { + "name": "tuuid", + "value": "f734f031-10aa-t8fb-330f-04dde2886325" + }, + { + "name": "tcaPolId", + "value": "policy1" + }, + { + "name": "eventName", + "value": "vFirewallBroadcastPackets" + }, + { + "serviceConfigurations": [ + [ + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated", + "LESS_OR_EQUAL", + "123", + "VM", + "ABATED" + ], + [ + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta", + "GREATER_OR_EQUAL", + "123", + "VNF", + "ONSET" + ] + ] + } + ] + }, + "Policy_0honxgv": { + "policy1": [ + { + "name": "pname", + "value": "policy1" + }, + { + "name": "pid", + "value": "0" + }, + { + "name": "timeout", + "value": "345" + }, + { + "policyConfigurations": [ + [ + { + "name": "maxRetries", + "value": [ + "3" + ] + }, + { + "name": "retryTimeLimit", + "value": [ + "180" + ] + }, + { + "name": "_id", + "value": [ + "dGLuNqg" + ] + }, + { + "name": "parentPolicy", + "value": [ + "" + ] + }, + { + "name": "targetResourceId", + "value": [ + "resourceid" + ] + } + ] + ] + } + ] + }, + "global": [ + { + "name": "actionSet", + "value": [ + "vnfRecipe" + ] + }, + { + "name": "service", + "value": [ + "serviceUUID" + ] + }, + { + "name": "location", + "value": [ + "SNDGCA64", + "ALPRGAED" + ] + }, + { + "name": "vf", + "value": [ + "f5213e3a-9191-4362-93b5-b67f8d770e44" + ] + }, + { + "name": "location", + "value": [ + "SNDGCA64", + "ALPRGAED", + "LSLEILAA", + "MDTWNJC1" + ] + } + ], + "shared": { + "byService": { + "": { + "vf": { + "": "" + }, + "location": { + "": "" + }, + "alarmCondition": { + "": "" + } + } + }, + "byVf": { + "": { + "vfc": { + "": "" + } + } + } + } +} diff --git a/src/test/resources/example/tca-policy-req/blueprint-expected.yaml b/src/test/resources/example/tca-policy-req/blueprint-expected.yaml new file mode 100644 index 000000000..cd8ebd8fd --- /dev/null +++ b/src/test/resources/example/tca-policy-req/blueprint-expected.yaml @@ -0,0 +1,50 @@ +tosca_definitions_version: cloudify_dsl_1_3 +imports: ['http://www.getcloudify.org/spec/cloudify/3.4/types.yaml', 'https://nexus01.research.att.com:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml', + 'https://nexus01.research.att.com:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml', + 'http://nexus01.research.att.com:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml'] +inputs: + location_id: {type: string} + service_id: {type: string} +node_templates: + cdap_host_host: + type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure + properties: + location_id: {get_input: location_id} + scn_override: cdap_broker.solutioning-central.dcae.att.com + interfaces: + cloudify.interfaces.lifecycle: {} + tca_tca: + type: dcae.nodes.MicroService.cdap + properties: + app_config: {appDescription: DCAE Analytics Threshold Crossing Alert Application, + appName: dcae-tca, tcaSubscriberOutputStreamName: TCASubscriberOutputStream, + tcaVESAlertsTableName: TCAVESAlertsTable, tcaVESAlertsTableTTLSeconds: '1728000', + tcaVESMessageStatusTableName: TCAVESMessageStatusTable, tcaVESMessageStatusTableTTLSeconds: '86400', + thresholdCalculatorFlowletInstances: '2'} + app_preferences: {publisherContentType: application/json, publisherHostName: mrlocal-mtnjftle01.homer.att.com, + publisherHostPort: '3905', publisherMaxBatchSize: '10', publisherMaxRecoveryQueueSize: '100000', + publisherPollingInterval: '20000', publisherProtocol: https, publisherTopicName: com.att.dcae.dmaap.mtnje2.DcaeTestVESPub, + publisherUserName: m00502@tca.af.dcae.att.com, publisherUserPassword: Te5021abc, + subscriberConsumerGroup: OpenDCAE-c12, subscriberConsumerId: c12, subscriberContentType: application/json, + subscriberHostName: mrlocal-mtnjftle01.homer.att.com, subscriberHostPort: '3905', + subscriberMessageLimit: '-1', subscriberPollingInterval: '20000', subscriberProtocol: https, + subscriberTimeoutMS: '-1', subscriberTopicName: com.att.dcae.dmaap.mtnje2.DcaeTestVESSub, + subscriberUserName: m00502@tca.af.dcae.att.com, subscriberUserPassword: Te5021abc, + tca_policy: '{"cdap-tca-hi-lo_policy":{"domain":"measurementsForVfScaling","metricsPerEventName":[{"eventName":"vFirewallBroadcastPackets","policyScope":"DCAE","policyName":"example_model01.ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_TCA_1jy9to4","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_null","controlLoopSchema":"VNF","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta","thresholdValue":123,"direction":"GREATER_OR_EQUAL","severity":"MAJOR","closedLoopEventStatus":"ONSET"},{"closedLoopControlName":"ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_null","controlLoopSchema":"VNF","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta","thresholdValue":123,"direction":"GREATER_OR_EQUAL","severity":"MAJOR","closedLoopEventStatus":"ONSET"}]}]}}'} + artifact_name: dcae-analytics-tca + artifact_version: 1.0.0 + connections: + streams_publishes: [] + streams_subscribes: [] + jar_url: http://somejar + location_id: {get_input: location_id} + namespace: cdap_tca_hi_lo + programs: + - {program_id: TCAVESCollectorFlow, program_type: flows} + - {program_id: TCADMaaPMRSubscriberWorker, program_type: workers} + - {program_id: TCADMaaPMRPublisherWorker, program_type: workers} + service_component_type: cdap_app_tca + service_id: {get_input: service_id} + streamname: TCASubscriberOutputStream + relationships: + - {target: cdap_host_host, type: dcae.relationships.component_contained_in} diff --git a/src/test/resources/example/tca-policy-req/blueprint-input.yaml b/src/test/resources/example/tca-policy-req/blueprint-input.yaml new file mode 100644 index 000000000..95322258e --- /dev/null +++ b/src/test/resources/example/tca-policy-req/blueprint-input.yaml @@ -0,0 +1,79 @@ +tosca_definitions_version: cloudify_dsl_1_3 +imports: +- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml +- https://nexus01.research.att.com:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml +- https://nexus01.research.att.com:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml +- http://nexus01.research.att.com:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml +inputs: + location_id: + type: string + service_id: + type: string +node_templates: + cdap_host_host: + type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure + properties: + location_id: + get_input: location_id + scn_override: cdap_broker.solutioning-central.dcae.att.com + interfaces: + cloudify.interfaces.lifecycle: {} + tca_tca: + type: dcae.nodes.MicroService.cdap + properties: + app_config: + appDescription: DCAE Analytics Threshold Crossing Alert Application + appName: dcae-tca + tcaSubscriberOutputStreamName: TCASubscriberOutputStream + tcaVESAlertsTableName: TCAVESAlertsTable + tcaVESAlertsTableTTLSeconds: '1728000' + tcaVESMessageStatusTableName: TCAVESMessageStatusTable + tcaVESMessageStatusTableTTLSeconds: '86400' + thresholdCalculatorFlowletInstances: '2' + app_preferences: + publisherContentType: application/json + publisherHostName: mrlocal-mtnjftle01.homer.att.com + publisherHostPort: '3905' + publisherMaxBatchSize: '10' + publisherMaxRecoveryQueueSize: '100000' + publisherPollingInterval: '20000' + publisherProtocol: https + publisherTopicName: com.att.dcae.dmaap.mtnje2.DcaeTestVESPub + publisherUserName: m00502@tca.af.dcae.att.com + publisherUserPassword: Te5021abc + subscriberConsumerGroup: OpenDCAE-c12 + subscriberConsumerId: c12 + subscriberContentType: application/json + subscriberHostName: mrlocal-mtnjftle01.homer.att.com + subscriberHostPort: '3905' + subscriberMessageLimit: '-1' + subscriberPollingInterval: '20000' + subscriberProtocol: https + subscriberTimeoutMS: '-1' + subscriberTopicName: com.att.dcae.dmaap.mtnje2.DcaeTestVESSub + subscriberUserName: m00502@tca.af.dcae.att.com + subscriberUserPassword: Te5021abc + tca_policy: + artifact_name: dcae-analytics-tca + artifact_version: 1.0.0 + connections: + streams_publishes: [] + streams_subscribes: [] + jar_url: http://somejar + location_id: + get_input: location_id + namespace: cdap_tca_hi_lo + programs: + - program_id: TCAVESCollectorFlow + program_type: flows + - program_id: TCADMaaPMRSubscriberWorker + program_type: workers + - program_id: TCADMaaPMRPublisherWorker + program_type: workers + service_component_type: cdap_app_tca + service_id: + get_input: service_id + streamname: TCASubscriberOutputStream + relationships: + - target: cdap_host_host + type: dcae.relationships.component_contained_in diff --git a/src/test/resources/example/tca-policy-req/tca-policy-expected.json b/src/test/resources/example/tca-policy-req/tca-policy-expected.json new file mode 100644 index 000000000..ce230918f --- /dev/null +++ b/src/test/resources/example/tca-policy-req/tca-policy-expected.json @@ -0,0 +1,35 @@ +{ + "cdap-tca-hi-lo_policy": { + "domain": "measurementsForVfScaling", + "metricsPerEventName": [ + { + "eventName": "vFirewallBroadcastPackets", + "policyScope": "DCAE", + "policyName": "example_model01.ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_TCA_1jy9to4", + "policyVersion": "v0.0.1", + "thresholds": [ + { + "closedLoopControlName": "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_null", + "controlLoopSchema": "VNF", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta", + "thresholdValue": 123, + "direction": "GREATER_OR_EQUAL", + "severity": "MAJOR", + "closedLoopEventStatus": "ONSET" + }, + { + "closedLoopControlName": "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_null", + "controlLoopSchema": "VNF", + "version": "1.0.2", + "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta", + "thresholdValue": 123, + "direction": "GREATER_OR_EQUAL", + "severity": "MAJOR", + "closedLoopEventStatus": "ONSET" + } + ] + } + ] + } +} diff --git a/src/test/resources/example/templatePropForTca.json b/src/test/resources/example/templatePropForTca.json deleted file mode 100644 index 9f1ce1dac..000000000 --- a/src/test/resources/example/templatePropForTca.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "global": [ - { - "name": "service", - "value": [ - "tosca_definitions_version: cloudify_dsl_1_2\r\n\r\nimports:\r\n- http://www.getcloudify.org/spec/cloudify/3.3.1/types.yaml\r\n- http://135.207.127.211/1607_prod/type_files/cdap_app.yaml\r\n\r\nnode_templates:\r\n MTCA:\r\n type: dcae.nodes.cdap_app\r\n properties:\r\n service_name: \"cdap-mtca-central\"\r\n deployment_JSON: |-\r\n {\r\n \"clusterService\": {\"$ref\": \"/services/vm-cdap-cluster-central/instances/rdm2c\"},\r\n \"namespace\": \"MTCA\",\r\n \"appNames\": [ \"cdap-mtca\" ],\r\n \"flowNames\": [ \"cdap-mtca.TCAVESCollectorFlow\" ],\r\n \"workerNames\": [\"cdap-mtca.TCADMaaPMRSubscriberWorker\", \"cdap-mtca.TCADMaaPMRPublisherWorker\"],\r\n \"serviceNames\" : [],\r\n \"apps\": {\r\n \"cdap-mtca\": {\r\n \"jarFile\": \"/opt/app/cdap-apps/dcae-analytics-mtca-1.0.0.jar\",\r\n \"artifactName\": \"dcae-analytics-mtca\",\r\n \"version\": \"1.0.0\",\r\n \"appConfigFileContent\": \"{config:{ \\\"appName\\\":\\\"cdap-mtca\\\", \\\"appDescription\\\":\\\"DCAE Analytics Threshold Crossing Alert Application\\\", \\\"tcaSubscriberOutputStreamName\\\":\\\"TCASubscriberOutputStream\\\", \\\"thresholdCalculatorFlowletInstances\\\":2, \\\"tcaVESMessageStatusTableName\\\":\\\"TCAVESMessageStatusTable\\\", \\\"tcaVESMessageStatusTableTTLSeconds\\\":864000, \\\"tcaVESAlertsTableName\\\":\\\"TCAVESAlertsTable\\\", \\\"tcaVESAlertsTableTTLSeconds\\\":1728000 }}\"\r\n }\r\n },\r\n \r\n \"configuration\": {\r\n \"$class\": \"com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration\",\r\n \"subscriberContentType\": \"\",\r\n \"subscriberConsumerId\": \"c12\",\r\n \"subscriberConsumerGroup\": \"OpenDCAE-c12\",\r\n \"subscriberTimeoutMS\": \"-1\",\r\n \"subscriberMessageLimit\": \"-1\",\r\n \"subscriberPollingInterval\": \"20000\",\r\n \"publisherContentType\": \"application/json\",\r\n \"publisherMaxBatchSize\": \"10\",\r\n \"publisherMaxRecoveryQueueSize\": \"100000\",\r\n \"publisherPollingInterval\": \"20000\",\r\n \"publisherAlertWindowingTime\": \"86400\",\r\n \"policyName\": \"policy.dcae.configuration\",\r\n \"policyScope\": \"pnf=eNodeB;type=configuration\",\r\n \"policyVersion\": \"1.0.0\",\r\n \"domain\" : \"measurementsForVfScaling\",\r\n \r\n \"signatures\" : {\r\n \t }\r\n\r\n }\r\n }\r\n" - ] - } - ] -}
\ No newline at end of file diff --git a/src/test/resources/expected/tca.json b/src/test/resources/expected/tca.json deleted file mode 100644 index 2fd16bde6..000000000 --- a/src/test/resources/expected/tca.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "service": "MThresholdCrossingConfiguration", - "location": "Edge", - "uuid": "TestUUID", - "policyName": "example_model06.ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_TCA_", - "description": "from clds", - "configName": "MThresholdCrossingConfiguration", - "templateVersion": "5.2.0.1", - "priority": "4", - "version": "5.2.0.1", - "policyScope": "resource=F5,service=vSCP,type=configuration,closedLoopControlName=vSCP_F5_Firewall_d925ed73-8231-4d02-9545-db4e101f88f8", - "content": - { - "$class": "com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration", - "domain": "measurementsForVfScaling", - "policyScope": "pnf=eNodeB;type=configuration", - "policyName": "policy.dcae.configuration", - "policyVersion": "1.0.0", - "subscriberContentType": "application/json", - "subscriberConsumerId": "c13", - "subscriberConsumerGroup": "OpenDCAE-c13", - "subscriberTimeoutMS": "-1", - "subscriberMessageLimit": "-1", - "subscriberPollingInterval": "20000", - "publisherContentType": "application/json", - "publisherMaxBatchSize": "10", - "publisherMaxRecoveryQueueSize": "100000", - "publisherPollingInterval": "20000", - "publisherAlertWindowingTime": "86400", - "signatures": - [ - { - "nfNamingCode": "ENBE", - "target": "common_id", - "targetType": "eNodeB", - "useCaseName": "Narra", - "signatureName": "Narra_886be8da-14fe-tca1-d04b-d13b55d58df9", - "signatureUuid": "886be8da-14fe-tca1-d04b-d13b55d58df9", - "closedLoopControlName": "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_1", - "severity": "Warning", - "version": "1.0.2", - "maxInterval": 2, - "minMessageViolations": 3, - "thresholds": - [ - { - "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRRCCONNESTABFAILCELLLATENCY')].Value", - "thresholdName": "PMRRCCONNESTABFAILCELLLATENCY", - "thresholdValue": 4, - "direction": "LESS" - }, - - { - "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRAATTCBRA')].Value", - "thresholdName": "PMRAATTCBRA", - "thresholdValue": 30, - "direction": "GREATER" - } - ] - }, - - { - "nfNamingCode": "ENBE", - "target": "common_id", - "targetType": "eNodeB", - "useCaseName": "Srini", - "signatureName": "Srini_8b5ba88d-f4b4-tf0e-50b1-78a5a7dd412d", - "signatureUuid": "8b5ba88d-f4b4-tf0e-50b1-78a5a7dd412d", - "closedLoopControlName": "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_2", - "severity": "Critical", - "version": "1.0.2", - "maxInterval": 10, - "minMessageViolations": 5, - "thresholds": - [ - { - "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRRCCONNESTABFAILCELLLATENCY')].Value", - "thresholdName": "PMRRCCONNESTABFAILCELLLATENCY", - "thresholdValue": 3, - "direction": "EQUAL" - }, - - { - "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRAATTCBRA')].Value", - "thresholdName": "PMRAATTCBRA", - "thresholdValue": 30, - "direction": "GREATER" - } - ] - } - ] - } -}
\ No newline at end of file |