diff options
author | Jorge Hernandez <jh1730@att.com> | 2017-09-15 13:49:38 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2017-09-15 13:49:38 +0000 |
commit | 65f1e2bfc7d34ed125055f5c881d44bd4f5d38d0 (patch) | |
tree | 2c1e405a3f68c22a68d8df8a4ae44a7613ebd152 | |
parent | 274e07a953f07192923193a7b49f2f268b43d994 (diff) | |
parent | e0385921034ae9ce860038ea65d2d13259f7cc4c (diff) |
Merge "Adding Junits for policy engine"
34 files changed, 1253 insertions, 628 deletions
diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ConfigPolicy.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ConfigPolicy.java index 63a62d23d..adcffe939 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ConfigPolicy.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ConfigPolicy.java @@ -24,18 +24,23 @@ import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; -import java.io.StringReader; import java.net.URI; import java.net.URISyntaxException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; -import java.util.Scanner; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; +import org.apache.commons.io.FilenameUtils; +import org.onap.policy.common.logging.eelf.MessageCodes; +import org.onap.policy.common.logging.eelf.PolicyLogger; +import org.onap.policy.common.logging.flexlogger.FlexLogger; +import org.onap.policy.common.logging.flexlogger.Logger; +import org.onap.policy.rest.adapter.PolicyRestAdapter; +import org.onap.policy.utils.PolicyUtils; + +import com.att.research.xacml.api.pap.PAPException; +import com.att.research.xacml.std.IdentifierImpl; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionsType; @@ -51,21 +56,6 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; -import org.apache.commons.io.FilenameUtils; -import org.onap.policy.common.logging.eelf.MessageCodes; -import org.onap.policy.common.logging.eelf.PolicyLogger; -import org.onap.policy.common.logging.flexlogger.FlexLogger; -import org.onap.policy.common.logging.flexlogger.Logger; -import org.onap.policy.rest.adapter.PolicyRestAdapter; -import org.xml.sax.ErrorHandler; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; -import org.xml.sax.XMLReader; - -import com.att.research.xacml.api.pap.PAPException; -import com.att.research.xacml.std.IdentifierImpl; - public class ConfigPolicy extends Policy { /** @@ -148,15 +138,15 @@ public class ConfigPolicy extends Policy { String id = policyAdapter.getConfigType(); if (id != null) { if (id.equals(JSON_CONFIG)) { - if (!isJSONValid(configBodyData)) { + if (!PolicyUtils.isJSONValid(configBodyData)) { isValidForm = false; } } else if (id.equals(XML_CONFIG)) { - if (!isXMLValid(configBodyData)) { + if (!PolicyUtils.isXMLValid(configBodyData)) { isValidForm = false; } } else if (id.equals(PROPERTIES_CONFIG)) { - if (!isPropValid(configBodyData)||configBodyData.equals("")) { + if (!PolicyUtils.isPropValid(configBodyData)||configBodyData.equals("")) { isValidForm = false; } } else if (id.equals(OTHER_CONFIG)) { @@ -169,68 +159,6 @@ public class ConfigPolicy extends Policy { } - // Validation for XML. - private boolean isXMLValid(String data) { - - SAXParserFactory factory = SAXParserFactory.newInstance(); - factory.setValidating(false); - factory.setNamespaceAware(true); - try { - SAXParser parser = factory.newSAXParser(); - XMLReader reader = parser.getXMLReader(); - reader.setErrorHandler(new XMLErrorHandler()); - reader.parse(new InputSource(new StringReader(data))); - } catch (ParserConfigurationException | SAXException | IOException e) { - LOGGER.debug(e); - return false; - } - return true; - - } - - // Validation for Properties file. - public boolean isPropValid(String prop) { - - Scanner scanner = new Scanner(prop); - while (scanner.hasNextLine()) { - String line = scanner.nextLine(); - line.replaceAll("\\s+", ""); - if (line.startsWith("#")) { - continue; - } else { - if (line.contains("=")) { - String[] parts = line.split("="); - if (parts.length < 2) { - scanner.close(); - return false; - } - } else { - scanner.close(); - return false; - } - } - } - scanner.close(); - return true; - - } - - public class XMLErrorHandler implements ErrorHandler { - - public void warning(SAXParseException e) throws SAXException { - System.out.println(e.getMessage()); - } - - public void error(SAXParseException e) throws SAXException { - System.out.println(e.getMessage()); - } - - public void fatalError(SAXParseException e) throws SAXException { - System.out.println(e.getMessage()); - } - - } - @Override public Map<String, String> savePolicies() throws PAPException { diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/DecisionPolicy.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/DecisionPolicy.java index 6e43c967c..eae3e79a9 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/DecisionPolicy.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/DecisionPolicy.java @@ -285,7 +285,7 @@ public class DecisionPolicy extends Policy { activeTimeRange.put("end", yamlParams.get("guardActiveEnd")); String blackListString = yamlParams.get("blackList"); List<String> blackList = null; - if(blackListString!=null){ + if(blackListString!=null && !blackListString.trim().isEmpty()){ if (blackListString.contains(",")){ blackList = Arrays.asList(blackListString.split(",")); } @@ -303,6 +303,9 @@ public class DecisionPolicy extends Policy { templateFile = new File(classLoader.getResource(XACML_BLGUARD_TEMPLATE).getFile()); xacmlTemplatePath = templateFile.toPath(); cons.setActive_time_range(activeTimeRange); + if(blackList==null || blackList.isEmpty()){ + throw new BuilderException("blackList is required"); + } cons.setBlacklist(blackList); break; default: diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/Policy.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/Policy.java index 169e6e14e..20c76f3be 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/Policy.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/Policy.java @@ -20,23 +20,17 @@ package org.onap.policy.pap.xacml.rest.components; -import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; -import javax.json.Json; -import javax.json.JsonReader; - import org.apache.commons.io.FilenameUtils; -import org.json.JSONObject; import org.onap.policy.common.logging.eelf.MessageCodes; import org.onap.policy.common.logging.eelf.PolicyLogger; import org.onap.policy.common.logging.flexlogger.FlexLogger; @@ -202,33 +196,6 @@ public abstract class Policy { return dynamicMatch; } - //validation for numeric - protected boolean isNumeric(String str){ - for (char c : str.toCharArray()){ - if (!Character.isDigit(c)) return false; - } - return true; - } - - // Validation for json. - protected static boolean isJSONValid(String data) { - JsonReader jsonReader = null; - try { - new JSONObject(data); - InputStream stream = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8)); - jsonReader = Json.createReader(stream); - LOGGER.info("Json Value is: " + jsonReader.read().toString() ); - } catch (Exception e) { - LOGGER.error("Exception Occured while reading json"+e); - return false; - }finally{ - if(jsonReader != null){ - jsonReader.close(); - } - } - return true; - } - // the Policy Name as Unique One throws error @SuppressWarnings("static-access") protected Path getNextFilename(Path parent, String policyType, String polcyFileName, Integer version) { diff --git a/ONAP-PAP-REST/src/main/resources/Decision_GuardBLPolicyTemplate.xml b/ONAP-PAP-REST/src/main/resources/Decision_GuardBLPolicyTemplate.xml index 19e567ddd..a8e1b9480 100644 --- a/ONAP-PAP-REST/src/main/resources/Decision_GuardBLPolicyTemplate.xml +++ b/ONAP-PAP-REST/src/main/resources/Decision_GuardBLPolicyTemplate.xml @@ -15,11 +15,11 @@ <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ONAPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/> </Match> <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-regexp-match"> - <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">${actor}</AttributeValue> + <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">(?i)${actor}</AttributeValue> <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="actor" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/> </Match> <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-regexp-match"> - <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">${recipe}</AttributeValue> + <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">(?i)${recipe}</AttributeValue> <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="recipe" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/> </Match> <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-regexp-match"> diff --git a/ONAP-PAP-REST/src/main/resources/Decision_GuardPolicyTemplate.xml b/ONAP-PAP-REST/src/main/resources/Decision_GuardPolicyTemplate.xml index ed5b27b7d..6dee0cb97 100644 --- a/ONAP-PAP-REST/src/main/resources/Decision_GuardPolicyTemplate.xml +++ b/ONAP-PAP-REST/src/main/resources/Decision_GuardPolicyTemplate.xml @@ -15,11 +15,11 @@ <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ONAPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/> </Match> <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-regexp-match"> - <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">${actor}</AttributeValue> + <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">(?i)${actor}</AttributeValue> <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="actor" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/> </Match> <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-regexp-match"> - <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">${recipe}</AttributeValue> + <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">(?i)${recipe}</AttributeValue> <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="recipe" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/> </Match> <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-regexp-match"> diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/ConfigPolicyService.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/ConfigPolicyService.java index c8d3d74d1..690e94a5e 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/ConfigPolicyService.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/ConfigPolicyService.java @@ -82,12 +82,12 @@ public class ConfigPolicyService { message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Config Name given."; return false; } - message = PolicyUtils.emptyPolicyValidator(onapName); + message = PolicyUtils.policySpecialCharValidator(onapName); if(!message.contains("success")){ message = XACMLErrorConstants.ERROR_DATA_ISSUE+ message; return false; } - message = PolicyUtils.emptyPolicyValidator(configName); + message = PolicyUtils.policySpecialCharValidator(configName); if(!message.contains("success")){ message = XACMLErrorConstants.ERROR_DATA_ISSUE+ message; return false; diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/CreateUpdatePolicyServiceImpl.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/CreateUpdatePolicyServiceImpl.java index 945cdba8b..528e5cda9 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/CreateUpdatePolicyServiceImpl.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/CreateUpdatePolicyServiceImpl.java @@ -234,12 +234,12 @@ public class CreateUpdatePolicyServiceImpl implements CreateUpdatePolicyService message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Name given."; return false; } - message = PolicyUtils.emptyPolicyValidator(policyScope); + message = PolicyUtils.policySpecialCharValidator(policyScope); if(!message.contains("success")){ message = XACMLErrorConstants.ERROR_DATA_ISSUE+ message; return false; } - message = PolicyUtils.emptyPolicyValidator(policyName); + message = PolicyUtils.policySpecialCharValidator(policyName); if(!message.contains("success")){ message = XACMLErrorConstants.ERROR_DATA_ISSUE+ message; return false; diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/NotificationService.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/NotificationService.java index 6ca52ca40..bba51965b 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/NotificationService.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/NotificationService.java @@ -99,7 +99,7 @@ public class NotificationService { dmaapServers = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_SERVERS); aafLogin = XACMLProperties.getProperty("DMAAP_AAF_LOGIN"); aafPassword = XACMLProperties.getProperty("DMAAP_AAF_PASSWORD"); - interval = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_DELAY, Integer.toString(interval))); + interval = Integer.parseInt(XACMLProperties.getProperty("CLIENT_INTERVAL", Integer.toString(interval))); if(dmaapServers==null || aafLogin==null || aafPassword==null){ logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "DMaaP properties are missing from the property file "); return; @@ -269,7 +269,7 @@ public class NotificationService { Date currentTime = new Date(); long timeDiff = 0; timeDiff = currentTime.getTime()-map.getValue().getTime(); - if(timeDiff < (interval+1500)){ + if(timeDiff > (interval+1500)){ removeTopic(map.getKey()); } } diff --git a/ONAP-PDP-REST/xacml.pdp.properties b/ONAP-PDP-REST/xacml.pdp.properties index b88c93543..6cf2e945b 100644 --- a/ONAP-PDP-REST/xacml.pdp.properties +++ b/ONAP-PDP-REST/xacml.pdp.properties @@ -118,6 +118,10 @@ xacml.rest.pap.password=alpha123 # Delay for Notifications Don't change this. Value in milliSec. xacml.rest.notification.delay=30 + +# Client interval to ping notification service. +CLIENT_INTERVAL=15000 + # Buffer Size. REQUEST_BUFFER_SIZE=15 diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyManagerServlet.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyManagerServlet.java index 552537900..a99d23ed5 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyManagerServlet.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyManagerServlet.java @@ -1458,7 +1458,7 @@ public class PolicyManagerServlet extends HttpServlet { validateName = name; } if(!name.isEmpty()){ - String validate = PolicyUtils.emptyPolicyValidator(validateName); + String validate = PolicyUtils.policySpecialCharValidator(validateName); if(!validate.contains("success")){ return error(validate); } diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/DecisionPolicyController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/DecisionPolicyController.java index 45369ce2f..fc77c9316 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/DecisionPolicyController.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/DecisionPolicyController.java @@ -120,6 +120,9 @@ public class DecisionPolicyController extends RestrictedBaseController { // AttributeValueType attributeValue = match.getAttributeValue(); String value = (String) attributeValue.getContent().get(0); + if(value!=null){ + value = value.replaceAll("\\(\\?i\\)", ""); + } AttributeDesignatorType designator = match.getAttributeDesignator(); String attributeId = designator.getAttributeId(); // First match in the target is OnapName, so set that value. @@ -203,13 +206,13 @@ public class DecisionPolicyController extends RestrictedBaseController { YAMLParams yamlParams = new YAMLParams(); for(int i=0; i<attributeList.size() ; i++){ Map<String, String> map = (Map<String,String>)attributeList.get(i); - if(map.get("key").equals("actor")){ + if("actor".equals(map.get("key"))){ yamlParams.setActor(map.get("value")); - }else if(map.get("key").equals("recipe")){ + }else if("recipe".equals(map.get("key"))){ yamlParams.setRecipe(map.get("value")); - }else if(map.get("key").equals("targets")){ + }else if("target".equals(map.get("key"))){ yamlParams.setTargets(Arrays.asList(map.get("value").split("\\|"))); - }else if(map.get("key").equals("clname")){ + }else if("clname".equals(map.get("key"))){ yamlParams.setClname(map.get("value")); } } diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyValidationController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyValidationController.java index d1fba383f..050455a42 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyValidationController.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyValidationController.java @@ -21,32 +21,19 @@ package org.onap.policy.controller; -import java.io.ByteArrayInputStream; import java.io.IOException; -import java.io.InputStream; import java.io.PrintWriter; -import java.io.StringReader; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Scanner; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import javax.json.Json; -import javax.json.JsonReader; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; import org.apache.commons.lang.StringUtils; -import org.dom4j.util.XMLErrorHandler; import org.json.JSONObject; import org.onap.policy.common.logging.flexlogger.FlexLogger; import org.onap.policy.common.logging.flexlogger.Logger; @@ -63,13 +50,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; -import org.xml.sax.InputSource; -import org.xml.sax.XMLReader; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.base.CharMatcher; import com.google.common.base.Splitter; import com.google.common.base.Strings; @@ -86,14 +70,8 @@ public class PolicyValidationController extends RestrictedBaseController { public static final String CLOSEDLOOP_PM = "ClosedLoop_PM"; public static final String ENFORCER_CONFIG_POLICY= "Enforcer Config"; public static final String MICROSERVICES="Micro Service"; - private Pattern pattern; - private Matcher matcher; private static Map<String, String> mapAttribute = new HashMap<>(); - private static final String EMAIL_PATTERN = - "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" - + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; - @Autowired CommonClassDao commonClassDao; @@ -107,7 +85,7 @@ public class PolicyValidationController extends RestrictedBaseController { JsonNode root = mapper.readTree(request.getReader()); PolicyRestAdapter policyData = (PolicyRestAdapter)mapper.readValue(root.get("policyData").toString(), PolicyRestAdapter.class); if(policyData.getPolicyName() != null){ - String policyNameValidate = emptyValidator(policyData.getPolicyName()); + String policyNameValidate = PolicyUtils.policySpecialCharValidator(policyData.getPolicyName()); if(!policyNameValidate.contains("success")){ responseString.append("PolicyName:" + policyNameValidate + "<br>"); valid = false; @@ -117,7 +95,7 @@ public class PolicyValidationController extends RestrictedBaseController { valid = false; } if(policyData.getPolicyDescription() != null){ - String descriptionValidate = descriptionValidator(policyData.getPolicyDescription()); + String descriptionValidate = PolicyUtils.descriptionValidator(policyData.getPolicyDescription()); if(!descriptionValidate.contains("success")){ responseString.append("Description:" + descriptionValidate + "<br>"); valid = false; @@ -128,7 +106,7 @@ public class PolicyValidationController extends RestrictedBaseController { if (policyData.getConfigPolicyType().equals("Base") || policyData.getConfigPolicyType().equals(CLOSEDLOOP_POLICY) || policyData.getConfigPolicyType().equals(CLOSEDLOOP_PM) || policyData.getConfigPolicyType().equals(ENFORCER_CONFIG_POLICY) || policyData.getConfigPolicyType().equals(MICROSERVICES)) { if(policyData.getOnapName() != null){ - String onapNameValidate = emptyValidator(policyData.getOnapName()); + String onapNameValidate = PolicyUtils.policySpecialCharValidator(policyData.getOnapName()); if(!onapNameValidate.contains("success")){ responseString.append("OnapName:" + onapNameValidate + "<br>"); valid = false; @@ -140,7 +118,7 @@ public class PolicyValidationController extends RestrictedBaseController { } if(policyData.getRiskType() != null){ - String riskTypeValidate = emptyValidator(policyData.getRiskType()); + String riskTypeValidate = PolicyUtils.policySpecialCharValidator(policyData.getRiskType()); if(!riskTypeValidate.contains("success")){ responseString.append("RiskType:" + riskTypeValidate + "<br>"); valid = false; @@ -151,7 +129,7 @@ public class PolicyValidationController extends RestrictedBaseController { } if(policyData.getRiskLevel() != null){ - String validateRiskLevel = emptyValidator(policyData.getRiskLevel()); + String validateRiskLevel = PolicyUtils.policySpecialCharValidator(policyData.getRiskLevel()); if(!validateRiskLevel.contains("success")){ responseString.append("RiskLevel:" + validateRiskLevel + "<br>"); valid = false; @@ -162,7 +140,7 @@ public class PolicyValidationController extends RestrictedBaseController { } if(policyData.getGuard() != null){ - String validateGuard = emptyValidator(policyData.getGuard()); + String validateGuard = PolicyUtils.policySpecialCharValidator(policyData.getGuard()); if(!validateGuard.contains("success")){ responseString.append("Guard:" + validateGuard + "<br>"); valid = false; @@ -174,7 +152,7 @@ public class PolicyValidationController extends RestrictedBaseController { if(policyData.getConfigPolicyType().equals("Base")){ if(policyData.getConfigName() != null){ - String configNameValidate = emptyValidator(policyData.getConfigName()); + String configNameValidate = PolicyUtils.policySpecialCharValidator(policyData.getConfigName()); if(!configNameValidate.contains("success")){ responseString.append("ConfigName:" + configNameValidate + "<br>"); valid = false; @@ -184,7 +162,7 @@ public class PolicyValidationController extends RestrictedBaseController { valid = false; } if(policyData.getConfigType() != null){ - String configTypeValidate = emptyValidator(policyData.getConfigType()); + String configTypeValidate = PolicyUtils.policySpecialCharValidator(policyData.getConfigType()); if(!configTypeValidate.contains("success")){ responseString.append("ConfigType:" + configTypeValidate + "<br>"); valid = false; @@ -198,17 +176,17 @@ public class PolicyValidationController extends RestrictedBaseController { String policyType = policyData.getConfigType(); if (policyType != null) { if (policyType.equals("JSON")) { - if (!isJSONValid(configBodyData)) { + if (!PolicyUtils.isJSONValid(configBodyData)) { responseString.append("Config Body: JSON Content is not valid" + "<br>"); valid = false; } } else if (policyType.equals("XML")) { - if (!isXMLValid(configBodyData)) { + if (!PolicyUtils.isXMLValid(configBodyData)) { responseString.append("Config Body: XML Content data is not valid" + "<br>"); valid = false; } } else if (policyType.equals("PROPERTIES")) { - if (!isPropValid(configBodyData)||configBodyData.equals("")) { + if (!PolicyUtils.isPropValid(configBodyData)||configBodyData.equals("")) { responseString.append("Config Body: Property data is not valid" + "<br>"); valid = false; } @@ -227,7 +205,7 @@ public class PolicyValidationController extends RestrictedBaseController { if(policyData.getConfigPolicyType().equals("Firewall Config")){ if(policyData.getConfigName() != null){ - String configNameValidate = PolicyUtils.emptyPolicyValidator(policyData.getConfigName()); + String configNameValidate = PolicyUtils.policySpecialCharValidator(policyData.getConfigName()); if(!configNameValidate.contains("success")){ responseString.append("<b>ConfigName</b>:<i>" + configNameValidate + "</i><br>"); valid = false; @@ -282,7 +260,7 @@ public class PolicyValidationController extends RestrictedBaseController { } } if(pmBody.getGeoLink() != null){ - String result = PolicyUtils.emptyPolicyValidator(pmBody.getGeoLink()); + String result = PolicyUtils.policySpecialCharValidator(pmBody.getGeoLink()); if(!result.contains("success")){ responseString.append("<b>GeoLink</b>:<i>" + result + "</i><br>"); valid = false; @@ -293,7 +271,7 @@ public class PolicyValidationController extends RestrictedBaseController { String key = entry.getKey(); String value = entry.getValue(); if(!key.contains("Message")){ - String attributeValidate = PolicyUtils.emptyPolicyValidator(value); + String attributeValidate = PolicyUtils.policySpecialCharValidator(value); if(!attributeValidate.contains("success")){ responseString.append("<b>Attributes</b>:<i>" + key + " : value has spaces</i><br>"); valid = false; @@ -308,7 +286,7 @@ public class PolicyValidationController extends RestrictedBaseController { } if(policyData.getConfigPolicyType().equals("ClosedLoop_Fault")){ if(root.get("policyData").get("jsonBodyData") != null){ - ClosedLoopFaultBody faultBody = (ClosedLoopFaultBody)mapper.readValue(root.get("policyData").get("jsonBodyData").toString(), ClosedLoopFaultBody.class); + ClosedLoopFaultBody faultBody = mapper.readValue(root.get("policyData").get("jsonBodyData").toString(), ClosedLoopFaultBody.class); if(faultBody.getEmailAddress() != null){ String result = emailValidation(faultBody.getEmailAddress(), responseString.toString()); if(result != "success"){ @@ -333,11 +311,11 @@ public class PolicyValidationController extends RestrictedBaseController { valid = false; } if(faultBody.getGeoLink() != null){ - String result = PolicyUtils.emptyPolicyValidatorWithSpaceAllowed(faultBody.getGeoLink()); + String result = PolicyUtils.policySpecialCharWithSpaceValidator(faultBody.getGeoLink()); if(!result.contains("success")){ responseString.append("<b>GeoLink</b>:<i>" + result + "</i><br>"); valid = false; - }; + } } if(faultBody.getTimeInterval() == 0){ @@ -429,7 +407,7 @@ public class PolicyValidationController extends RestrictedBaseController { } if (policyData.getPolicyType().equals(DECISION_POLICY)){ if(policyData.getOnapName() != null){ - String onapNameValidate = emptyValidator(policyData.getOnapName()); + String onapNameValidate = PolicyUtils.policySpecialCharValidator(policyData.getOnapName()); if(!onapNameValidate.contains("success")){ responseString.append("OnapName:" + onapNameValidate + "<br>"); valid = false; @@ -513,7 +491,7 @@ public class PolicyValidationController extends RestrictedBaseController { valid = false; }else{ for(String blackList: policyData.getYamlparams().getBlackList()){ - if(blackList==null || !("success".equals(emptyValidator(blackList)))){ + if(blackList==null || !("success".equals(PolicyUtils.policySpecialCharValidator(blackList)))){ responseString.append(" Guard Params <b>BlackList</b> Should be valid String" + "<br>"); valid = false; break; @@ -527,11 +505,11 @@ public class PolicyValidationController extends RestrictedBaseController { if(policyData.getPolicyType().equals(ACTION_POLICY)){ if(policyData.getActionPerformer() != null){ - String actionPerformer = emptyValidator(policyData.getActionPerformer()); + String actionPerformer = PolicyUtils.policySpecialCharValidator(policyData.getActionPerformer()); if(!actionPerformer.contains("success")){ responseString.append("ActionPerformer:" + actionPerformer + "<br>"); valid = false; - }; + } }else{ responseString.append("ActionPerformer: ActionPerformer Should not be empty" + "<br>"); valid = false; @@ -561,7 +539,7 @@ public class PolicyValidationController extends RestrictedBaseController { valid = false; } if(policyData.getActionAttributeValue() != null){ - String actionAttribute = emptyValidator(policyData.getActionAttributeValue()); + String actionAttribute = PolicyUtils.policySpecialCharValidator(policyData.getActionAttributeValue()); if(!actionAttribute.contains("success")){ responseString.append("ActionAttribute:" + actionAttribute + "<br>"); valid = false; @@ -630,49 +608,6 @@ public class PolicyValidationController extends RestrictedBaseController { return null; } - protected String emptyValidator(String field){ - String error; - if ("".equals(field) || field.contains(" ") || !field.matches("^[a-zA-Z0-9_]*$")) { - error = "The Value in Required Field will allow only '{0-9}, {a-z}, {A-Z}, _' following set of Combinations"; - return error; - } else { - if(CharMatcher.ASCII.matchesAllOf((CharSequence) field)){ - error = "success"; - }else{ - error = "The Value Contains Non ASCII Characters"; - return error; - } - } - return error; - } - - protected String descriptionValidator(String field) { - String error; - if (field.contains("@CreatedBy:") || field.contains("@ModifiedBy:")) { - error = "The value in the description shouldn't contain @CreatedBy: or @ModifiedBy:"; - return error; - } else { - error = "success"; - } - return error; - } - - public String validateEmailAddress(String emailAddressValue) { - String error = "success"; - List<String> emailList = Arrays.asList(emailAddressValue.toString().split(",")); - for(int i =0 ; i < emailList.size() ; i++){ - pattern = Pattern.compile(EMAIL_PATTERN); - matcher = pattern.matcher(emailList.get(i).trim()); - if(!matcher.matches()){ - error = "Please check the Following Email Address is not Valid .... " +emailList.get(i).toString(); - return error; - }else{ - error = "success"; - } - } - return error; - } - protected String emailValidation(String email, String response){ if(email != null){ String validateEmail = PolicyUtils.validateEmailAddress(email.replace("\"", "")); @@ -713,66 +648,4 @@ public class PolicyValidationController extends RestrictedBaseController { } } } - - // Validation for json. - protected static boolean isJSONValid(String data) { - JsonReader jsonReader = null; - try { - new JSONObject(data); - InputStream stream = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8)); - jsonReader = Json.createReader(stream); - LOGGER.info("Json Value is: " + jsonReader.read().toString() ); - } catch (Exception e) { - LOGGER.error("Exception Occured While Validating"+e); - return false; - }finally{ - if(jsonReader != null){ - jsonReader.close(); - } - } - return true; - } - - // Validation for XML. - private boolean isXMLValid(String data) { - SAXParserFactory factory = SAXParserFactory.newInstance(); - factory.setValidating(false); - factory.setNamespaceAware(true); - try { - SAXParser parser = factory.newSAXParser(); - XMLReader reader = parser.getXMLReader(); - reader.setErrorHandler(new XMLErrorHandler()); - reader.parse(new InputSource(new StringReader(data))); - } catch (Exception e) { - LOGGER.error("Exception Occured While Validating"+e); - return false; - } - return true; - } - - // Validation for Properties file. - public boolean isPropValid(String prop) { - Scanner scanner = new Scanner(prop); - while (scanner.hasNextLine()) { - String line = scanner.nextLine(); - line = line.replaceAll("\\s+", ""); - if (line.startsWith("#")) { - continue; - } else { - if (line.contains("=")) { - String[] parts = line.split("="); - if (parts.length < 2) { - scanner.close(); - return false; - } - } else { - scanner.close(); - return false; - } - } - } - scanner.close(); - return true; - } - }
\ No newline at end of file diff --git a/PolicyEngineAPI/pom.xml b/PolicyEngineAPI/pom.xml index e5af8d7d3..b7f1371b5 100644 --- a/PolicyEngineAPI/pom.xml +++ b/PolicyEngineAPI/pom.xml @@ -117,10 +117,6 @@ <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito</artifactId> </exclusion> - <exclusion> - <groupId>com.att.aft</groupId> - <artifactId>dme2</artifactId> - </exclusion> </exclusions> </dependency> <!-- https://mvnrepository.com/artifact/org.mockito/mockito-all --> diff --git a/PolicyEngineUtils/pom.xml b/PolicyEngineUtils/pom.xml index af2664305..c0837055f 100644 --- a/PolicyEngineUtils/pom.xml +++ b/PolicyEngineUtils/pom.xml @@ -30,12 +30,12 @@ <dependency> <groupId>org.onap.policy.common</groupId> <artifactId>integrity-monitor</artifactId> - <version>${common-modules.version}</version> + <version>${common-modules.version}</version> </dependency> <dependency> <groupId>org.onap.policy.common</groupId> <artifactId>integrity-audit</artifactId> - <version>${common-modules.version}</version> + <version>${common-modules.version}</version> </dependency> <dependency> <groupId>org.onap.policy.common</groupId> @@ -97,6 +97,12 @@ <groupId>org.drools</groupId> <artifactId>drools-verifier</artifactId> <version>6.3.0.Final</version> + <exclusions> + <exclusion> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + </exclusion> + </exclusions> </dependency> <dependency> <groupId>com.att.cadi</groupId> @@ -104,20 +110,9 @@ <version>1.3.0</version> </dependency> <dependency> - <groupId>com.att.aft</groupId> - <artifactId>dme2</artifactId> - <version>3.1.200</version> - </dependency> - <dependency> - <groupId>com.att.nsa</groupId> - <artifactId>cambriaClient</artifactId> - <version>0.0.1</version> - <exclusions> - <exclusion> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-log4j12</artifactId> - </exclusion> - </exclusions> + <groupId>com.att.aft</groupId> + <artifactId>dme2</artifactId> + <version>3.1.200</version> </dependency> <dependency> <groupId>com.att.nsa</groupId> diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdLoadedPolicy.java b/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdLoadedPolicy.java index c1f4fed7f..10268f658 100644 --- a/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdLoadedPolicy.java +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdLoadedPolicy.java @@ -34,7 +34,7 @@ public class StdLoadedPolicy implements LoadedPolicy{ @Override public String getPolicyName() { if(policyName!=null && policyName.contains(".xml")){ - return (policyName.substring(0, policyName.substring(0, policyName.lastIndexOf(".")).lastIndexOf("."))); + return (policyName.substring(0, policyName.substring(0, policyName.lastIndexOf('.')).lastIndexOf('.'))); } return this.policyName; } diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdRemovedPolicy.java b/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdRemovedPolicy.java index bdce33a3b..5430e24ef 100644 --- a/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdRemovedPolicy.java +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdRemovedPolicy.java @@ -38,7 +38,7 @@ public class StdRemovedPolicy implements RemovedPolicy{ @Override public String getPolicyName() { if(policyName!=null && policyName.contains(".xml")){ - return (policyName.substring(0, policyName.substring(0, policyName.lastIndexOf(".")).lastIndexOf("."))); + return (policyName.substring(0, policyName.substring(0, policyName.lastIndexOf('.')).lastIndexOf('.'))); } return this.policyName; } diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyClientImpl.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyClientImpl.java index 0f4876051..ecb51b286 100644 --- a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyClientImpl.java +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyClientImpl.java @@ -65,9 +65,6 @@ public class AAFPolicyClientImpl implements AAFPolicyClient{ private static Access access = null; private AAFPolicyClientImpl(Properties properties) throws AAFPolicyException{ - if(instance == null){ - instance = this; - } setup(properties); } @@ -93,7 +90,6 @@ public class AAFPolicyClientImpl implements AAFPolicyClient{ props.setProperty("AFT_LATITUDE", properties.getProperty("AFT_LATITUDE", DEFAULT_AFT_LATITUDE)); props.setProperty("AFT_LONGITUDE", properties.getProperty("AFT_LONGITUDE", DEFAULT_AFT_LONGITUDE)); String aftEnv = TEST_AFT_ENVIRONMENT; - //props.setProperty(Config.CADI_KEYFILE,"keyfile"); props.setProperty("aaf_id",properties.getProperty("aaf_id", "aafID")); props.setProperty("aaf_password", properties.getProperty("aaf_password", "aafPass")); if(properties.containsKey(Config.AAF_URL)){ @@ -203,8 +199,8 @@ public class AAFPolicyClientImpl implements AAFPolicyClient{ private static boolean setUpAAF(){ try { aafCon = new AAFConDME2(access); - aafLurPerm = aafCon.newLur();//new AAFLurPerm(aafCon); - aafAuthn = aafCon.newAuthn(aafLurPerm);//new AAFAuthn(aafCon, aafLurPerm); + aafLurPerm = aafCon.newLur(); + aafAuthn = aafCon.newAuthn(aafLurPerm); return true; } catch (Exception e) { logger.error("Error while setting up AAF Connection " + e.getMessage() + e); diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitor.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitor.java index d4f111637..3cdb51577 100644 --- a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitor.java +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitor.java @@ -53,8 +53,11 @@ import com.github.fge.jsonpatch.diff.JsonDiff; */ public class BackUpMonitor { private static final Logger LOGGER = Logger.getLogger(BackUpMonitor.class.getName()); - private static final int DEFAULT_PING = 15000; // Value is in milliseconds. - + private static final int DEFAULT_PING = 500; // Value is in milliseconds. + private static final String PING_INTERVAL = "ping_interval"; + private static final String MASTER = "MASTER"; + private static final String SLAVE = "SLAVE"; + private static BackUpMonitor instance = null; private static String resourceName = null; private static String resourceNodeName = null; @@ -65,6 +68,8 @@ public class BackUpMonitor { private static Object lock = new Object(); private static Object notificationLock = new Object(); private static BackUpHandler handler = null; + private static Boolean stopFlag = false; + private static Thread t = null; private EntityManager em; private EntityManagerFactory emf; @@ -77,14 +82,11 @@ public class BackUpMonitor { private BackUpMonitor(String resourceNodeName, String resourceName, Properties properties, BackUpHandler handler) throws BackUpMonitorException { - if (instance == null) { - instance = this; - } - BackUpMonitor.resourceNodeName = resourceNodeName; - BackUpMonitor.resourceName = resourceName; - BackUpMonitor.handler = handler; + init(resourceName, resourceNodeName, handler); // Create Persistence Entity - properties.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistencePU.xml"); + if(!properties.containsKey(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML)){ + properties.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistencePU.xml"); + } emf = Persistence.createEntityManagerFactory("PolicyEngineUtils", properties); if (emf == null) { LOGGER.error("Unable to create Entity Manger Factory "); @@ -94,12 +96,31 @@ public class BackUpMonitor { // Check Database if this is Master or Slave. checkDataBase(); - // Start thread. - Thread t = new Thread(new BMonitor()); + startThread(new BMonitor()); + } + + private static void startThread(BMonitor bMonitor) { + t = new Thread(bMonitor); t.start(); } + public static void stop() throws InterruptedException{ + stopFlag = true; + if(t!=null){ + t.interrupt(); + t.join(); + } + instance = null; + } + + private static void init(String resourceName, String resourceNodeName, BackUpHandler handler) { + BackUpMonitor.resourceNodeName = resourceNodeName; + BackUpMonitor.resourceName = resourceName; + BackUpMonitor.handler = handler; + stopFlag = false; + } + /** * Gets the BackUpMonitor Instance if given proper resourceName and properties. Else returns null. * @@ -142,17 +163,12 @@ public class BackUpMonitor { LOGGER.error("javax.persistence.jdbc.user property is empty"); return false; } - if (properties.getProperty("javax.persistence.jdbc.password") == null - || properties.getProperty("javax.persistence.jdbc.password").trim().equals("")) { - LOGGER.error("javax.persistence.jdbc.password property is empty"); - return false; - } - if (properties.getProperty("ping_interval") == null - || properties.getProperty("ping_interval").trim().equals("")) { + if (properties.getProperty(PING_INTERVAL) == null + || properties.getProperty(PING_INTERVAL).trim().equals("")) { LOGGER.info("ping_interval property not specified. Taking default value"); } else { try { - pingInterval = Integer.parseInt(properties.getProperty("ping_interval").trim()); + pingInterval = Integer.parseInt(properties.getProperty(PING_INTERVAL).trim()); } catch (NumberFormatException e) { LOGGER.warn("Ignored invalid proeprty ping_interval. Taking default value: " + pingInterval); pingInterval = DEFAULT_PING; @@ -185,7 +201,7 @@ public class BackUpMonitor { @Override public void run() { LOGGER.info("Starting BackUpMonitor Thread.. "); - while (true) { + while (!stopFlag) { try { TimeUnit.MILLISECONDS.sleep(pingInterval); checkDataBase(); @@ -198,26 +214,27 @@ public class BackUpMonitor { // Set Master private static BackUpMonitorEntity setMaster(BackUpMonitorEntity bMEntity) { - bMEntity.setFlag("MASTER"); + bMEntity.setFlag(MASTER); setFlag(true); return bMEntity; } // Set Slave private static BackUpMonitorEntity setSlave(BackUpMonitorEntity bMEntity) { - bMEntity.setFlag("SLAVE"); + bMEntity.setFlag(SLAVE); setFlag(false); return bMEntity; } // Check Database and set the Flag. private void checkDataBase() throws BackUpMonitorException { - EntityTransaction et = em.getTransaction(); - setNotificationRecord(); - // Clear Cache. - LOGGER.info("Clearing Cache"); - em.getEntityManagerFactory().getCache().evictAll(); + EntityTransaction et = null; try { + et = em.getTransaction(); + setNotificationRecord(); + // Clear Cache. + LOGGER.info("Clearing Cache"); + em.getEntityManagerFactory().getCache().evictAll(); LOGGER.info("Checking Datatbase for BackUpMonitor.. "); et.begin(); Query query = em.createQuery("select b from BackUpMonitorEntity b where b.resourceNodeName = :nn"); @@ -247,7 +264,7 @@ public class BackUpMonitor { BackUpMonitorEntity bMEntity = (BackUpMonitorEntity) bMList.get(i); LOGGER.info("Refreshing Entity. "); em.refresh(bMEntity); - if (bMEntity.getFlag().equalsIgnoreCase("MASTER")) { + if (bMEntity.getFlag().equalsIgnoreCase(MASTER)) { masterEntities.add(bMEntity); } if (bMEntity.getResourceName().equals(resourceName)) { @@ -256,7 +273,7 @@ public class BackUpMonitor { } if (selfEntity != null) { LOGGER.info("Resource Name already Exists: " + resourceName); - if (selfEntity.getFlag().equalsIgnoreCase("MASTER")) { + if (selfEntity.getFlag().equalsIgnoreCase(MASTER)) { // Already Master Mode. setFlag(true); LOGGER.info(resourceName + " is on Master Mode"); @@ -306,19 +323,19 @@ public class BackUpMonitor { // Slave. BackUpMonitorEntity masterEntity = null; for (BackUpMonitorEntity currentEntity : masterEntities) { - if (currentEntity.getFlag().equalsIgnoreCase("MASTER")) { + if (currentEntity.getFlag().equalsIgnoreCase(MASTER)) { if (masterEntity == null) { masterEntity = currentEntity; } else if (currentEntity.getTimeStamp().getTime() > masterEntity.getTimeStamp() .getTime()) { // False Master, Update master to slave and take currentMaster as Master. - masterEntity.setFlag("SLAVE"); + masterEntity.setFlag(SLAVE); masterEntity.setTimeStamp(new Date()); em.persist(masterEntity); em.flush(); masterEntity = currentEntity; } else { - currentEntity.setFlag("SLAVE"); + currentEntity.setFlag(SLAVE); currentEntity.setTimeStamp(new Date()); em.persist(currentEntity); em.flush(); @@ -339,7 +356,7 @@ public class BackUpMonitor { if (timeDiff > (pingInterval + 1500)) { // This is down or has an issue and we need to become Master while turning the // Master to slave. - masterEntity.setFlag("SLAVE"); + masterEntity.setFlag(SLAVE); String lastNotification = null; if (masterEntity.getNotificationRecord() != null) { lastNotification = calculatePatch(masterEntity.getNotificationRecord()); @@ -366,7 +383,7 @@ public class BackUpMonitor { et.commit(); } catch (Exception e) { LOGGER.error("failed Database Operation " + e.getMessage(), e); - if (et.isActive()) { + if (et!=null && et.isActive()) { et.rollback(); } throw new BackUpMonitorException(e); diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusConsumer.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusConsumer.java index 1b31394d0..2c867a3d1 100644 --- a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusConsumer.java +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusConsumer.java @@ -70,7 +70,7 @@ public interface BusConsumer { public DmaapConsumerWrapper(List<String> servers, String topic, String aafLogin, String aafPassword, String consumerGroup, String consumerInstance, - int fetchTimeout, int fetchLimit) throws MalformedURLException{ + int fetchTimeout, int fetchLimit) throws MalformedURLException{ this.consumer = new MRConsumerImpl(servers, topic, consumerGroup, consumerInstance, diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusPublisher.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusPublisher.java index 3190aa035..3a12122bf 100644 --- a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusPublisher.java +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusPublisher.java @@ -42,7 +42,7 @@ public interface BusPublisher { * @return true if success, false otherwise * @throws IllegalArgumentException if no message provided */ - public boolean send(String partitionId, String message) throws IllegalArgumentException; + public boolean send(String partitionId, String message); /** * closes the publisher @@ -114,8 +114,7 @@ public interface BusPublisher { * {@inheritDoc} */ @Override - public boolean send(String partitionId, String message) - throws IllegalArgumentException { + public boolean send(String partitionId, String message){ if (message == null) throw new IllegalArgumentException("No message provided"); diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java index 8bc83dcb8..b74bd28cc 100644 --- a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java @@ -26,96 +26,142 @@ import java.io.UnsupportedEncodingException; import java.util.Arrays; import java.util.Base64; import java.util.List; +import java.util.Scanner; import java.util.StringTokenizer; import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + import org.drools.core.io.impl.ReaderResource; import org.drools.verifier.Verifier; import org.drools.verifier.VerifierError; import org.drools.verifier.builder.VerifierBuilder; import org.drools.verifier.builder.VerifierBuilderFactory; import org.kie.api.io.ResourceType; +import org.onap.policy.common.logging.flexlogger.FlexLogger; +import org.onap.policy.common.logging.flexlogger.Logger; +import org.xml.sax.InputSource; +import org.xml.sax.XMLReader; +import com.att.aft.dme2.internal.gson.JsonParser; +import com.att.aft.dme2.internal.gson.JsonSyntaxException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.CharMatcher; public class PolicyUtils { - - public static final String EMAIL_PATTERN = + private static final Logger LOGGER = FlexLogger.getLogger(PolicyUtils.class); + + public static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; - private static final String PACKAGE_ERROR = "mismatched input '{' expecting one of the following tokens: '[package"; - private static final String SUCCESS = "success"; - - private PolicyUtils(){ - // Private Constructor - } - public static String objectToJsonString(Object o) throws JsonProcessingException{ - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString(o); - } - - public static <T> T jsonStringToObject(String jsonString, Class<T> className) throws IOException{ - ObjectMapper mapper = new ObjectMapper(); - return mapper.readValue(jsonString, className); - } - - public static String decode(String encodedString) throws UnsupportedEncodingException { - if(encodedString!=null && !encodedString.isEmpty()){ - return new String(Base64.getDecoder().decode(encodedString) ,"UTF-8"); - }else{ - return null; - } - } - - public static String[] decodeBasicEncoding(String encodedValue) throws UnsupportedEncodingException { - if(encodedValue!=null && encodedValue.contains("Basic ")){ - String encodedUserPassword = encodedValue.replaceFirst("Basic" + " ", ""); - String usernameAndPassword = null; - byte[] decodedBytes = Base64.getDecoder().decode(encodedUserPassword); - usernameAndPassword = new String(decodedBytes, "UTF-8"); - StringTokenizer tokenizer = new StringTokenizer(usernameAndPassword, ":"); - String username = tokenizer.nextToken(); - String password = tokenizer.nextToken(); - return new String[]{username, password}; - }else{ - return new String[]{}; - } - } - - public static String emptyPolicyValidator(String field){ + private static final String PACKAGE_ERROR = "mismatched input '{' expecting one of the following tokens: '[package"; + private static final String SUCCESS = "success"; + + private PolicyUtils(){ + // Private Constructor + } + + /** + * Converts an Object to JSON String + * + * @param o Object + * @return String format of Object JSON. + * @throws JsonProcessingException + */ + public static String objectToJsonString(Object o) throws JsonProcessingException{ + ObjectMapper mapper = new ObjectMapper(); + return mapper.writeValueAsString(o); + } + + /** + * Converts JSON string into Object + * + * @param jsonString + * @param className equivalent Class of the given JSON string + * @return T instance of the class given. + * @throws IOException + */ + public static <T> T jsonStringToObject(String jsonString, Class<T> className) throws IOException{ + ObjectMapper mapper = new ObjectMapper(); + return mapper.readValue(jsonString, className); + } + + /** + * Decode a base64 string + * + * @param encodedString + * @return String + * @throws UnsupportedEncodingException + */ + public static String decode(String encodedString) throws UnsupportedEncodingException { + if(encodedString!=null && !encodedString.isEmpty()){ + return new String(Base64.getDecoder().decode(encodedString) ,"UTF-8"); + }else{ + return null; + } + } + + /** + * Decodes Basic Authentication + * + * @param encodedValue + * @return + * @throws UnsupportedEncodingException + */ + public static String[] decodeBasicEncoding(String encodedValue) throws UnsupportedEncodingException { + if(encodedValue!=null && encodedValue.contains("Basic ")){ + String encodedUserPassword = encodedValue.replaceFirst("Basic" + " ", ""); + String usernameAndPassword = null; + byte[] decodedBytes = Base64.getDecoder().decode(encodedUserPassword); + usernameAndPassword = new String(decodedBytes, "UTF-8"); + StringTokenizer tokenizer = new StringTokenizer(usernameAndPassword, ":"); + String username = tokenizer.nextToken(); + String password = tokenizer.nextToken(); + return new String[]{username, password}; + }else{ + return new String[]{}; + } + } + + /** + * Validate a field if contains space or unacceptable policy input and return "success" if good. + * + * @param field + * @return + */ + public static String policySpecialCharValidator(String field){ String error; if ("".equals(field) || field.contains(" ") || !field.matches("^[a-zA-Z0-9_]*$")) { error = "The Value in Required Field will allow only '{0-9}, {a-z}, {A-Z}, _' following set of Combinations"; - return error; - } else { - if(CharMatcher.ASCII.matchesAllOf((CharSequence) field)){ - error = SUCCESS; - }else{ - error = "The Value Contains Non ASCII Characters"; - return error; - } + return error; } - return error; + return SUCCESS; } - public static String emptyPolicyValidatorWithSpaceAllowed(String field){ + /** + * Validate a field (accepts space) if it contains unacceptable policy input and return "success" if good. + * + * @param field + * @return + */ + public static String policySpecialCharWithSpaceValidator(String field){ String error; if ("".equals(field) || !field.matches("^[a-zA-Z0-9_ ]*$")) { error = "The Value in Required Field will allow only '{0-9}, {a-z}, {A-Z}, _' following set of Combinations"; return error; - } else { - if(CharMatcher.ASCII.matchesAllOf((CharSequence) field)){ - error = SUCCESS; - }else{ - error = "The Value Contains Non ASCII Characters"; - return error; - } } - return error; + return SUCCESS; } + + /** + * Validate the XACML description tag and return "success" if good. + * + * @param field + * @return + */ public static String descriptionValidator(String field) { String error; if (field.contains("@CreatedBy:") || field.contains("@ModifiedBy:")) { @@ -127,15 +173,38 @@ public class PolicyUtils { return error; } + /** + * Validate if string contains non ASCII characters + * + * @param value + * @return + */ + public static boolean containsNonAsciiEmptyChars(String value) { + return (value == null|| value.contains(" ") || "".equals(value.trim())|| !CharMatcher.ASCII.matchesAllOf((CharSequence) value))? true:false; + } + + /** + * Validate if given string is an integer. + * + * @param number + * @return + */ public static Boolean isInteger(String number){ - try{ - Integer.parseInt(number); - }catch(NumberFormatException e){ - return false; - } - return true; + if(number==null) { + return false; + } + for (char c : number.toCharArray()){ + if (!Character.isDigit(c)) return false; + } + return true; } + /** + * Validate Email Address and return "success" if good. + * + * @param emailAddressValue + * @return + */ public static String validateEmailAddress(String emailAddressValue) { String error = SUCCESS; List<String> emailList = Arrays.asList(emailAddressValue.split(",")); @@ -152,8 +221,11 @@ public class PolicyUtils { return error; } - /* - * Check for "[ERR" to see if there are any errors. + /** + * Validates BRMS rule as per Policy Platform and return string contains "[ERR" if there are any errors. + * + * @param rule + * @return String error message */ public static String brmsRawValidate(String rule){ VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder(); @@ -161,19 +233,19 @@ public class PolicyUtils { verifier.addResourcesToVerify(new ReaderResource(new StringReader(rule)), ResourceType.DRL); // Check if there are any Errors in Verification. if(!verifier.getErrors().isEmpty()){ - boolean ignore = false; + boolean ignore = false; StringBuilder message = new StringBuilder("Not a Valid DRL rule"); for(VerifierError error: verifier.getErrors()){ // Ignore annotations Error Messages if(!error.getMessage().contains("'@'") && !error.getMessage().contains(PACKAGE_ERROR)){ - ignore= true; + ignore= true; message.append("\n" + error.getMessage()); } } - // Ignore new package names with { + // Ignore new package names with '{' // More checks for message to check if its a package error. if(ignore && !message.toString().contains("Parser returned a null Package")){ - message.append("[ERR 107]"); + message.append("[ERR 107]"); } return message.toString(); } @@ -181,21 +253,90 @@ public class PolicyUtils { } /** - * Given a version string consisting of integers with dots between them, convert it into an array of ints. - * - * @param version - * @return - * @throws NumberFormatException - */ - public static int[] versionStringToArray(String version) throws NumberFormatException { - if (version == null || version.length() == 0) { - return new int[0]; - } - String[] stringArray = version.split("\\."); - int[] resultArray = new int[stringArray.length]; - for (int i = 0; i < stringArray.length; i++) { - resultArray[i] = Integer.parseInt(stringArray[i]); - } - return resultArray; - } -} + * Validates if the given string is proper JSON format. + * + * @param data + * @return + */ + public static boolean isJSONValid(String data) { + try{ + JsonParser parser = new JsonParser(); + parser.parse(data); + }catch(JsonSyntaxException e){ + LOGGER.error("Exception Occurred While Validating"+e); + return false; + } + return true; + } + + /** + * Validates if the given string is proper XML format. + * + * @param data + * @return + */ + public static boolean isXMLValid(String data) { + SAXParserFactory factory = SAXParserFactory.newInstance(); + factory.setValidating(false); + factory.setNamespaceAware(true); + try { + SAXParser parser = factory.newSAXParser(); + XMLReader reader = parser.getXMLReader(); + reader.setErrorHandler(new XMLErrorHandler()); + reader.parse(new InputSource(new StringReader(data))); + } catch (Exception e) { + LOGGER.error("Exception Occured While Validating"+e); + return false; + } + return true; + } + + /** + * Validates if given string is valid Properties format. + * + * @param prop + * @return + */ + public static boolean isPropValid(String prop) { + Scanner scanner = new Scanner(prop); + while (scanner.hasNextLine()) { + String line = scanner.nextLine(); + line = line.replaceAll("\\s+", ""); + if (line.startsWith("#")) { + continue; + } else { + if (line.contains("=")) { + String[] parts = line.split("="); + if (parts.length < 2) { + scanner.close(); + return false; + } + } else if(!line.trim().isEmpty()){ + scanner.close(); + return false; + } + } + } + scanner.close(); + return true; + } + + /** + * Given a version string consisting of integers with dots between them, convert it into an array of integers. + * + * @param version + * @return + * @throws NumberFormatException + */ + public static int[] versionStringToArray(String version){ + if (version == null || version.length() == 0) { + return new int[0]; + } + String[] stringArray = version.split("\\."); + int[] resultArray = new int[stringArray.length]; + for (int i = 0; i < stringArray.length; i++) { + resultArray[i] = Integer.parseInt(stringArray[i].trim()); + } + return resultArray; + } +}
\ No newline at end of file diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/XMLErrorHandler.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/XMLErrorHandler.java new file mode 100644 index 000000000..3037a423c --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/XMLErrorHandler.java @@ -0,0 +1,47 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * 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========================================================= + */ + +package org.onap.policy.utils; + +import org.onap.policy.common.logging.flexlogger.FlexLogger; +import org.onap.policy.common.logging.flexlogger.Logger; +import org.xml.sax.ErrorHandler; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + +public class XMLErrorHandler implements ErrorHandler { + private static final Logger LOGGER = FlexLogger.getLogger(XMLErrorHandler.class); + + @Override + public void warning(SAXParseException exception) throws SAXException { + LOGGER.debug(exception); + } + + @Override + public void error(SAXParseException exception) throws SAXException { + LOGGER.error(exception); + } + + @Override + public void fatalError(SAXParseException exception) throws SAXException { + LOGGER.error(exception); + } + +} diff --git a/PolicyEngineUtils/src/test/java/org/onap/policy/test/PolicyUtilsTest.java b/PolicyEngineUtils/src/test/java/org/onap/policy/test/PolicyUtilsTest.java deleted file mode 100644 index 50ae3feae..000000000 --- a/PolicyEngineUtils/src/test/java/org/onap/policy/test/PolicyUtilsTest.java +++ /dev/null @@ -1,67 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * 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========================================================= - */ - -package org.onap.policy.test; - -import static org.junit.Assert.assertEquals; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.junit.Test; -import org.onap.policy.api.NotificationType; -import org.onap.policy.api.PDPNotification; -import org.onap.policy.api.UpdateType; -import org.onap.policy.std.StdLoadedPolicy; -import org.onap.policy.std.StdPDPNotification; -import org.onap.policy.std.StdRemovedPolicy; -import org.onap.policy.utils.PolicyUtils; - -public class PolicyUtilsTest { - - @Test - public void testJsonConversions() throws Exception{ - StdPDPNotification notification = new StdPDPNotification(); - notification.setNotificationType(NotificationType.BOTH); - Collection<StdRemovedPolicy> removedPolicies = new ArrayList<>(); - Collection<StdLoadedPolicy> loadedPolicies = new ArrayList<>(); - StdRemovedPolicy removedPolicy = new StdRemovedPolicy(); - StdLoadedPolicy updatedPolicy = new StdLoadedPolicy(); - removedPolicy.setPolicyName("Test"); - removedPolicy.setVersionNo("1"); - removedPolicies.add(removedPolicy); - updatedPolicy.setPolicyName("Testing"); - updatedPolicy.setVersionNo("1"); - updatedPolicy.setUpdateType(UpdateType.NEW); - Map<String, String> matches = new HashMap<>(); - matches.put("key", "value"); - updatedPolicy.setMatches(matches); - loadedPolicies.add(updatedPolicy); - notification.setRemovedPolicies(removedPolicies); - notification.setLoadedPolicies(loadedPolicies); - - String json = PolicyUtils.objectToJsonString(notification); - PDPNotification getBackObject = PolicyUtils.jsonStringToObject(json, StdPDPNotification.class); - assertEquals(0,getBackObject.getNotificationType().compareTo(notification.getNotificationType())); - - } -} diff --git a/PolicyEngineUtils/src/test/java/org/onap/policy/test/testBackUpMonitor.java b/PolicyEngineUtils/src/test/java/org/onap/policy/test/testBackUpMonitor.java deleted file mode 100644 index 4cdb81873..000000000 --- a/PolicyEngineUtils/src/test/java/org/onap/policy/test/testBackUpMonitor.java +++ /dev/null @@ -1,121 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * 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========================================================= - */ - -package org.onap.policy.test; - -import static org.junit.Assert.assertNull; -import java.util.Properties; - -import org.junit.Test; -import org.onap.policy.utils.BackUpMonitor; - - -public class testBackUpMonitor { - - @Test - public void backUpMonitorTestFail() throws Exception{ - Properties properties = new Properties(); - properties.setProperty("javax.persistence.jdbc.driver", "com.mysql.jdbc.Driver"); - properties.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/xacml"); - properties.setProperty("javax.persistence.jdbc.user", "policy_user"); - properties.setProperty("javax.persistence.jdbc.password", ""); - //properties.setProperty("ping_interval", "500000"); - BackUpMonitor bum = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), "brms_test" , properties, new Handler()); - assertNull(bum); - } - - @Test - public void backUpMonitorTestFailNoUser() throws Exception{ - Properties properties = new Properties(); - properties.setProperty("javax.persistence.jdbc.driver", "com.mysql.jdbc.Driver"); - properties.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/xacml"); - properties.setProperty("javax.persistence.jdbc.user", ""); - properties.setProperty("javax.persistence.jdbc.password", "password"); - //properties.setProperty("ping_interval", "500000"); - BackUpMonitor bum = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), "brms_test" , properties, new Handler()); - assertNull(bum); - } - - @Test - public void backUpMonitorTestFailNoURL() throws Exception{ - Properties properties = new Properties(); - properties.setProperty("javax.persistence.jdbc.driver", "com.mysql.jdbc.Driver"); - properties.setProperty("javax.persistence.jdbc.url", ""); - properties.setProperty("javax.persistence.jdbc.user", "test"); - properties.setProperty("javax.persistence.jdbc.password", "password"); - //properties.setProperty("ping_interval", "500000"); - BackUpMonitor bum = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), "brms_test" , properties, new Handler()); - assertNull(bum); - } - - @Test - public void backUpMonitorTestFailNoDriver() throws Exception{ - Properties properties = new Properties(); - properties.setProperty("javax.persistence.jdbc.driver", ""); - properties.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/xacml"); - properties.setProperty("javax.persistence.jdbc.user", "test"); - properties.setProperty("javax.persistence.jdbc.password", "password"); - //properties.setProperty("ping_interval", "500000"); - BackUpMonitor bum = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), "brms_test" , properties, new Handler()); - assertNull(bum); - } - - @Test - public void backUpMonitorTestFailNoNode() throws Exception{ - Properties properties = new Properties(); - properties.setProperty("javax.persistence.jdbc.driver", "com.mysql.jdbc.Driver"); - properties.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/xacml"); - properties.setProperty("javax.persistence.jdbc.user", "test"); - properties.setProperty("javax.persistence.jdbc.password", "password"); - //properties.setProperty("ping_interval", "500000"); - BackUpMonitor bum = BackUpMonitor.getInstance(null, "brms_test" , properties, new Handler()); - assertNull(bum); - } - - @Test - public void backUpMonitorTestFailNoResource() throws Exception{ - Properties properties = new Properties(); - properties.setProperty("javax.persistence.jdbc.driver", "com.mysql.jdbc.Driver"); - properties.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/xacml"); - properties.setProperty("javax.persistence.jdbc.user", "test"); - properties.setProperty("javax.persistence.jdbc.password", "password"); - //properties.setProperty("ping_interval", "500000"); - BackUpMonitor bum = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), null , properties, new Handler()); - assertNull(bum); - } - - @Test - public void backUpMonitorTestFailNoProperties() throws Exception{ - BackUpMonitor bum = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), "brms_test" , null, new Handler()); - assertNull(bum); - } - - @Test - public void backUpMonitorTestFailNoHandler() throws Exception{ - Properties properties = new Properties(); - properties.setProperty("javax.persistence.jdbc.driver", "com.mysql.jdbc.Driver"); - properties.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/xacml"); - properties.setProperty("javax.persistence.jdbc.user", "test"); - properties.setProperty("javax.persistence.jdbc.password", "password"); - //properties.setProperty("ping_interval", "500000"); - BackUpMonitor bum = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), "brms_test" , properties, null); - assertNull(bum); - } -} diff --git a/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/AAFClientTest.java b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/AAFClientTest.java new file mode 100644 index 000000000..2fa822a33 --- /dev/null +++ b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/AAFClientTest.java @@ -0,0 +1,90 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * 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========================================================= + */ + +package org.onap.policy.utils.test; + +import static org.junit.Assert.assertFalse; + +import java.util.Properties; + +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.utils.AAFPolicyClient; +import org.onap.policy.utils.AAFPolicyClientImpl; +import org.onap.policy.utils.AAFPolicyException; + +public class AAFClientTest { + AAFPolicyClient afClient; + String pass = "test"; + + @Before + public void setUp() throws AAFPolicyException{ + Properties props = new Properties(); + props.setProperty("ENVIRONMENT", "TEST"); + props.setProperty("aafClient.impl.className", AAFPolicyClientImpl.class.getName()); + afClient = AAFPolicyClient.getInstance(props); + } + + @Test + public void invalidClientTest() throws AAFPolicyException{ + assertFalse(afClient.checkAuth("test", pass)); + assertFalse(afClient.checkPerm("test", pass, "policy-engine.config", "*", "*")); + Properties props = new Properties(); + props.setProperty("aafClient.impl.className", AAFPolicyClientImpl.class.getName()); + afClient = AAFPolicyClient.getInstance(props); + assertFalse(afClient.checkAuth("test", pass)); + props.setProperty("ENVIRONMENT", "PROD"); + props.setProperty("aafClient.impl.className", AAFPolicyClientImpl.class.getName()); + afClient.updateProperties(props); + assertFalse(afClient.checkAuth("test", pass)); + props.setProperty("aaf_url", "test"); + afClient.updateProperties(props); + assertFalse(afClient.checkAuth("test", pass)); + props = new Properties(); + props.setProperty("ENVIRONMENT", "123"); + afClient.updateProperties(props); + assertFalse(afClient.checkAuth("test", pass)); + assertFalse(afClient.checkAuthPerm("test", pass, "decision", "*", "read")); + } + + @Test(expected = AAFPolicyException.class) + public void invalidAAFInstance() throws AAFPolicyException{ + Properties props = new Properties(); + props.setProperty("aafClient.impl.className", "errorClass"); + afClient = AAFPolicyClient.getInstance(props); + } + + @Test(expected = AAFPolicyException.class) + public void testPropNullException() throws AAFPolicyException { + afClient.updateProperties(null); + } + + @Test(expected = AAFPolicyException.class) + public void testPropEmptyException() throws AAFPolicyException { + afClient.updateProperties(new Properties()); + } + + @Test(expected = AAFPolicyException.class) + public void testAAFException() throws AAFPolicyException{ + new AAFPolicyException(); + new AAFPolicyException("error", new Exception()); + throw new AAFPolicyException("error", new Exception(), false, false); + } +} diff --git a/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/BusTest.java b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/BusTest.java new file mode 100644 index 000000000..37170f077 --- /dev/null +++ b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/BusTest.java @@ -0,0 +1,57 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * 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========================================================= + */ + +package org.onap.policy.utils.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.net.MalformedURLException; +import java.util.Arrays; + +import org.junit.Test; +import org.onap.policy.utils.BusConsumer; +import org.onap.policy.utils.BusPublisher; + +import com.att.nsa.mr.client.MRClient.MRApiException; + +public class BusTest { + + @Test + public void busPublisherTest(){ + BusPublisher bus = new BusPublisher.DmaapPublisherWrapper(Arrays.asList("test"), "test", "test", "test"); + assertTrue(bus.send("test123", "Hello World!")); + assertEquals("DmaapPublisherWrapper [publisher.getAuthDate()=null, publisher.getAuthKey()=null, publisher.getHost()=test, publisher.getProtocolFlag()=HTTPAAF, publisher.getUsername()=test, publisher.getPendingMessageCount()=1]",bus.toString()); + bus.close(); + } + + @Test (expected = MRApiException.class) + public void busConsumerFailTest() throws MalformedURLException, MRApiException{ + new BusConsumer.DmaapConsumerWrapper(Arrays.asList("test"), "test", "test", "test", "test", "test", 1, 1).fetch(); + } + + @Test + public void busConsumerTest() throws MalformedURLException, MRApiException{ + BusConsumer bus = new BusConsumer.DmaapConsumerWrapper(Arrays.asList("test"), "test", "test", "test", "test", "test", 1, 1); + assertEquals(bus.toString(),"DmaapConsumerWrapper [consumer.getAuthDate()=null, consumer.getAuthKey()=null, consumer.getHost()=test:3904, consumer.getProtocolFlag()=HTTPAAF, consumer.getUsername()=test]"); + bus.close(); + } + +} diff --git a/PolicyEngineUtils/src/test/java/org/onap/policy/test/Handler.java b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/Handler.java index 0f71858a3..91f467b60 100644 --- a/PolicyEngineUtils/src/test/java/org/onap/policy/test/Handler.java +++ b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/Handler.java @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.policy.test; +package org.onap.policy.utils.test; import org.onap.policy.api.PDPNotification; import org.onap.policy.utils.BackUpHandler; diff --git a/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/NotificationStoreTest.java b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/NotificationStoreTest.java new file mode 100644 index 000000000..8ec646a0f --- /dev/null +++ b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/NotificationStoreTest.java @@ -0,0 +1,99 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * 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========================================================= + */ + +package org.onap.policy.utils.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Test; +import org.onap.policy.api.NotificationType; +import org.onap.policy.api.UpdateType; +import org.onap.policy.std.NotificationStore; +import org.onap.policy.std.StdLoadedPolicy; +import org.onap.policy.std.StdPDPNotification; +import org.onap.policy.std.StdRemovedPolicy; + +public class NotificationStoreTest { + + @Test + public void notificationTest(){ + StdPDPNotification notification = new StdPDPNotification(); + notification.setNotificationType(NotificationType.UPDATE); + List<StdLoadedPolicy> loadedPolicies = new ArrayList<>(); + StdLoadedPolicy loadedPolicy = new StdLoadedPolicy(); + loadedPolicy.setPolicyName("com.testing"); + loadedPolicy.setUpdateType(UpdateType.NEW); + loadedPolicy.setVersionNo("1"); + Map<String, String> matches = new HashMap<>(); + matches.put("test", "test"); + loadedPolicy.setMatches(matches); + loadedPolicies.add(loadedPolicy); + notification.setLoadedPolicies(loadedPolicies); + NotificationStore.recordNotification(notification); + assertEquals(notification, NotificationStore.getNotificationRecord()); + // Add new Notifications. + notification = new StdPDPNotification(); + notification.setNotificationType(NotificationType.BOTH); + loadedPolicies = new ArrayList<>(); + loadedPolicy = new StdLoadedPolicy(); + loadedPolicy.setPolicyName("com.testing"); + loadedPolicy.setUpdateType(UpdateType.UPDATE); + loadedPolicy.setVersionNo("2"); + matches = new HashMap<>(); + matches.put("test", "test"); + loadedPolicy.setMatches(matches); + loadedPolicies.add(loadedPolicy); + notification.setLoadedPolicies(loadedPolicies); + List<StdRemovedPolicy> removedPolicies = new ArrayList<>(); + StdRemovedPolicy removedPolicy = new StdRemovedPolicy(); + removedPolicy.setPolicyName("com.testing"); + removedPolicy.setVersionNo("1"); + notification.setRemovedPolicies(removedPolicies); + NotificationStore.recordNotification(notification); + assertNotNull(NotificationStore.getNotificationRecord()); + // Add new Notifications. + notification = new StdPDPNotification(); + notification.setNotificationType(NotificationType.BOTH); + loadedPolicies = new ArrayList<>(); + loadedPolicy = new StdLoadedPolicy(); + loadedPolicy.setPolicyName("com.test.xml"); + loadedPolicy.setUpdateType(UpdateType.NEW); + loadedPolicy.setVersionNo("2"); + matches = new HashMap<>(); + matches.put("test", "test"); + loadedPolicy.setMatches(matches); + loadedPolicies.add(loadedPolicy); + notification.setLoadedPolicies(loadedPolicies); + removedPolicies = new ArrayList<>(); + removedPolicy = new StdRemovedPolicy(); + removedPolicy.setPolicyName("com.testing.xml"); + removedPolicy.setVersionNo("2"); + notification.setRemovedPolicies(removedPolicies); + NotificationStore.recordNotification(notification); + assertNotNull(NotificationStore.getNotificationRecord()); + } + +} diff --git a/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/PEDependencyTest.java b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/PEDependencyTest.java new file mode 100644 index 000000000..4cc6c90f2 --- /dev/null +++ b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/PEDependencyTest.java @@ -0,0 +1,59 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * 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========================================================= + */ + +package org.onap.policy.utils.test; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.maven.model.Exclusion; +import org.junit.Test; +import org.onap.policy.api.PEDependency; + +public class PEDependencyTest { + + @Test + public void pojoTests(){ + PEDependency pe = new PEDependency(); + pe.setArtifactId("test"); + pe.setGroupId("test"); + pe.setVersion("1"); + pe.setType("jar"); + pe.setScope("test"); + pe.setClassifier("pom"); + List<Exclusion> exclusions = new ArrayList<>(); + Exclusion e = new Exclusion(); + e.setArtifactId("ex1"); + e.setGroupId("eG"); + exclusions.add(e); + pe.setExclusions(exclusions); + pe.getDependency(); + assertEquals(exclusions, pe.getExclusions()); + assertEquals("pom", pe.getClassifier()); + assertEquals("test", pe.getScope()); + assertEquals("jar", pe.getType()); + assertEquals("1", pe.getVersion()); + assertEquals("test", pe.getGroupId()); + assertEquals("test", pe.getArtifactId()); + } + +} diff --git a/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/PolicyUtilsTest.java b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/PolicyUtilsTest.java new file mode 100644 index 000000000..586ab356d --- /dev/null +++ b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/PolicyUtilsTest.java @@ -0,0 +1,209 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * 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========================================================= + */ + +package org.onap.policy.utils.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.Base64; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.junit.Test; +import org.onap.policy.api.NotificationType; +import org.onap.policy.api.PDPNotification; +import org.onap.policy.api.UpdateType; +import org.onap.policy.std.StdLoadedPolicy; +import org.onap.policy.std.StdPDPNotification; +import org.onap.policy.std.StdRemovedPolicy; +import org.onap.policy.utils.PolicyUtils; +import org.onap.policy.utils.XMLErrorHandler; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + +public class PolicyUtilsTest { + + private static final String ERROR = "The Value in Required Field will allow only '{0-9}, {a-z}, {A-Z}, _' following set of Combinations"; + private static final String SUCCESS = "success"; + + @Test + public void testJsonConversions() throws Exception{ + StdPDPNotification notification = new StdPDPNotification(); + notification.setNotificationType(NotificationType.BOTH); + Collection<StdRemovedPolicy> removedPolicies = new ArrayList<>(); + Collection<StdLoadedPolicy> loadedPolicies = new ArrayList<>(); + StdRemovedPolicy removedPolicy = new StdRemovedPolicy(); + StdLoadedPolicy updatedPolicy = new StdLoadedPolicy(); + removedPolicy.setPolicyName("Test"); + removedPolicy.setVersionNo("1"); + removedPolicies.add(removedPolicy); + updatedPolicy.setPolicyName("Testing"); + updatedPolicy.setVersionNo("1"); + updatedPolicy.setUpdateType(UpdateType.NEW); + Map<String, String> matches = new HashMap<>(); + matches.put("key", "value"); + updatedPolicy.setMatches(matches); + loadedPolicies.add(updatedPolicy); + notification.setRemovedPolicies(removedPolicies); + notification.setLoadedPolicies(loadedPolicies); + + String json = PolicyUtils.objectToJsonString(notification); + PDPNotification getBackObject = PolicyUtils.jsonStringToObject(json, StdPDPNotification.class); + assertEquals(0,getBackObject.getNotificationType().compareTo(notification.getNotificationType())); + + } + + private String encodedValue(String input){ + return new String(Base64.getEncoder().encode(input.getBytes())); + } + + @Test + public void testDecode() throws Exception{ + String value = "test"; + assertEquals(value, PolicyUtils.decode(encodedValue(value))); + assertNull(PolicyUtils.decode(null)); + assertNull(PolicyUtils.decode("")); + } + + @Test + public void testBasicEncoding() throws Exception{ + String userName = "test"; + String key = "pass"; + String[] decodedValue = PolicyUtils.decodeBasicEncoding("Basic "+encodedValue(userName+":"+key)); + assertEquals(userName,decodedValue[0]); + assertEquals(key,decodedValue[1]); + assertEquals(0, PolicyUtils.decodeBasicEncoding(encodedValue(userName+":"+key)).length); + assertEquals(0, PolicyUtils.decodeBasicEncoding(null).length); + } + + @Test + public void testSpecialCharValidator(){ + assertEquals(ERROR, PolicyUtils.policySpecialCharValidator("$TEST_")); + assertEquals(ERROR, PolicyUtils.policySpecialCharValidator("$TEST _")); + assertEquals(ERROR, PolicyUtils.policySpecialCharValidator("")); + assertEquals(ERROR, PolicyUtils.policySpecialCharValidator("TæST")); + assertEquals(SUCCESS, PolicyUtils.policySpecialCharValidator("TEST")); + } + + @Test + public void testSpecialCharWithSpaceValidator(){ + assertEquals(ERROR, PolicyUtils.policySpecialCharWithSpaceValidator("")); + assertEquals(ERROR, PolicyUtils.policySpecialCharWithSpaceValidator("$TEST _")); + assertEquals(SUCCESS, PolicyUtils.policySpecialCharWithSpaceValidator("TE ST")); + } + + @Test + public void testDescription() { + assertEquals(SUCCESS, PolicyUtils.descriptionValidator("Test")); + assertNotEquals(SUCCESS, PolicyUtils.descriptionValidator("@ModifiedBy:TesterB")); + assertNotEquals(SUCCESS, PolicyUtils.descriptionValidator("@CreatedBy:TesterA")); + } + + @Test + public void testNonAscii(){ + assertTrue(PolicyUtils.containsNonAsciiEmptyChars(null)); + assertTrue(PolicyUtils.containsNonAsciiEmptyChars("")); + assertTrue(PolicyUtils.containsNonAsciiEmptyChars("T æST")); + assertTrue(PolicyUtils.containsNonAsciiEmptyChars("TæST")); + assertFalse(PolicyUtils.containsNonAsciiEmptyChars("TEST")); + } + + @Test + public void testInteger(){ + assertFalse(PolicyUtils.isInteger(null)); + assertTrue(PolicyUtils.isInteger("123")); + assertFalse(PolicyUtils.isInteger("1a23")); + } + + @Test + public void testEmailAddress(){ + assertEquals(SUCCESS, PolicyUtils.validateEmailAddress("test@onap.org")); + assertNotEquals(SUCCESS, PolicyUtils.validateEmailAddress("test@onap")); + } + + @Test + public void testBRMSValidate(){ + String rule = "package com.sample;\n" + + "import com.sample.DroolsTest.Message;\n" + + "declare Params\n" + + "samPoll : int\n" + + "value : String\n" + + "end\n" + + "///This Rule will be generated by the UI.\n" + + "rule \"Create parameters structure\"\n" + + "salience 1000 \n" + + "when\n" + + "then\n" + + "Params params = new Params();\n" + + "params.setSamPoll(76);\n" + + "params.setValue(\"test\");\n" + + "insertLogical(params);\n" + + "end\n" + + "rule \"Rule 1: Check parameter structure access from when/then\"\n" + + "when\n" + + "$param: Params()\n" + + "Params($param.samPoll > 50)\n" + + "then\n" + + "System.out.println(\"Firing rule 1\");\n" + + "System.out.println($param);\n" + + "end\n"; + assertEquals(PolicyUtils.brmsRawValidate(rule),""); + assertTrue(PolicyUtils.brmsRawValidate("error").contains("[ERR")); + assertFalse(PolicyUtils.brmsRawValidate("package com.att.ecomp.policy.controlloop.p_${unique};").contains("[ERR")); + } + + @Test + public void testiIsJsonValid(){ + assertTrue(PolicyUtils.isJSONValid("{\"test\":\"test\"}")); + String value = "{\"test\":\"test\", \"t1\": {\"test\": 12 , \"t2\":\"34\"},\"t2\":[{\"test\":\"val\"}]}"; + assertTrue(PolicyUtils.isJSONValid(value)); + assertFalse(PolicyUtils.isJSONValid("{\"test\":\"test")); + } + + @Test + public void testIsXMLValid() throws SAXException{ + XMLErrorHandler error = new XMLErrorHandler(); + error.error(new SAXParseException(null, null)); + error.warning(new SAXParseException(null, null)); + assertTrue(PolicyUtils.isXMLValid("<test>123</test>")); + assertFalse(PolicyUtils.isXMLValid("<test>123</test")); + } + + @Test + public void testIsPropValid(){ + assertTrue(PolicyUtils.isPropValid("test=123\n\tval=123")); + assertFalse(PolicyUtils.isPropValid("test")); + assertFalse(PolicyUtils.isPropValid("test=")); + assertTrue(PolicyUtils.isPropValid("#test\n\nval=123")); + } + + @Test + public void testVersionStringToArray(){ + assertTrue(PolicyUtils.versionStringToArray(null).length==0); + assertTrue(PolicyUtils.versionStringToArray("").length==0); + assertTrue(PolicyUtils.versionStringToArray("1.2.3").length==3); + } +}
\ No newline at end of file diff --git a/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/testBackUpMonitor.java b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/testBackUpMonitor.java new file mode 100644 index 000000000..afc3d0dce --- /dev/null +++ b/PolicyEngineUtils/src/test/java/org/onap/policy/utils/test/testBackUpMonitor.java @@ -0,0 +1,292 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * 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========================================================= + */ + +package org.onap.policy.utils.test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.concurrent.TimeUnit; + +import javax.persistence.EntityManager; +import javax.persistence.EntityTransaction; +import javax.persistence.Persistence; +import javax.persistence.PersistenceException; +import javax.persistence.Query; + +import org.eclipse.persistence.config.PersistenceUnitProperties; +import org.junit.After; +import org.junit.Test; +import org.onap.policy.api.NotificationType; +import org.onap.policy.api.UpdateType; +import org.onap.policy.jpa.BackUpMonitorEntity; +import org.onap.policy.std.NotificationStore; +import org.onap.policy.std.StdLoadedPolicy; +import org.onap.policy.std.StdPDPNotification; +import org.onap.policy.std.StdRemovedPolicy; +import org.onap.policy.utils.BackUpMonitor; +import org.onap.policy.utils.BackUpMonitor.ResourceNode; +import org.onap.policy.utils.BackUpMonitorException; +import org.onap.policy.utils.PolicyUtils; + +import com.fasterxml.jackson.core.JsonProcessingException; + + +public class testBackUpMonitor { + + @Test (expected = PersistenceException.class) + public void backUpMonitorTestFail() throws Exception{ + Properties properties = new Properties(); + properties.setProperty("javax.persistence.jdbc.driver", "com.mysql.jdbc.Driver"); + properties.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/xacml"); + properties.setProperty("javax.persistence.jdbc.user", "policy_user"); + properties.setProperty("javax.persistence.jdbc.password", ""); + BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), "brms_test" , properties, new Handler()); + } + + @Test + public void backUpMonitorTestFailNoUser() throws Exception{ + Properties properties = new Properties(); + properties.setProperty("javax.persistence.jdbc.driver", "com.mysql.jdbc.Driver"); + properties.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/xacml"); + properties.setProperty("javax.persistence.jdbc.user", ""); + properties.setProperty("javax.persistence.jdbc.password", "password"); + BackUpMonitor bum = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), "brms_test" , properties, new Handler()); + assertNull(bum); + } + + @Test + public void backUpMonitorTestFailNoURL() throws Exception{ + Properties properties = new Properties(); + properties.setProperty("javax.persistence.jdbc.driver", "com.mysql.jdbc.Driver"); + properties.setProperty("javax.persistence.jdbc.url", ""); + properties.setProperty("javax.persistence.jdbc.user", "test"); + properties.setProperty("javax.persistence.jdbc.password", "password"); + properties.setProperty("ping_interval", "500"); + BackUpMonitor bum = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), "brms_test" , properties, new Handler()); + assertNull(bum); + } + + @Test + public void backUpMonitorTestFailNoDriver() throws Exception{ + Properties properties = new Properties(); + properties.setProperty("javax.persistence.jdbc.driver", ""); + properties.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/xacml"); + properties.setProperty("javax.persistence.jdbc.user", "test"); + properties.setProperty("javax.persistence.jdbc.password", "password"); + properties.setProperty("ping_interval", "500"); + BackUpMonitor bum = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), "brms_test" , properties, new Handler()); + assertNull(bum); + } + + @Test + public void backUpMonitorTestFailNoNode() throws Exception{ + Properties properties = new Properties(); + properties.setProperty("javax.persistence.jdbc.driver", "com.mysql.jdbc.Driver"); + properties.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/xacml"); + properties.setProperty("javax.persistence.jdbc.user", "test"); + properties.setProperty("javax.persistence.jdbc.password", "password"); + properties.setProperty("ping_interval", ""); + BackUpMonitor bum = BackUpMonitor.getInstance(null, "brms_test" , properties, new Handler()); + assertNull(bum); + } + + @Test + public void backUpMonitorTestFailNoResource() throws Exception{ + Properties properties = new Properties(); + properties.setProperty("javax.persistence.jdbc.driver", "com.mysql.jdbc.Driver"); + properties.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/xacml"); + properties.setProperty("javax.persistence.jdbc.user", "test"); + properties.setProperty("javax.persistence.jdbc.password", "password"); + BackUpMonitor bum = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), null , properties, new Handler()); + assertNull(bum); + } + + @Test + public void backUpMonitorTestFailNoProperties() throws Exception{ + BackUpMonitor bum = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), "brms_test" , null, new Handler()); + assertNull(bum); + } + + @Test + public void backUpMonitorTestFailNoHandler() throws Exception{ + Properties properties = new Properties(); + properties.setProperty("javax.persistence.jdbc.driver", "com.mysql.jdbc.Driver"); + properties.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/xacml"); + properties.setProperty("javax.persistence.jdbc.user", "test"); + properties.setProperty("javax.persistence.jdbc.password", "password"); + properties.setProperty("ping_interval", "500"); + BackUpMonitor bum = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), "brms_test" , properties, null); + assertNull(bum); + } + + @Test + public void backUpMonitorPingError() throws BackUpMonitorException { + Properties properties = new Properties(); + properties.setProperty("javax.persistence.jdbc.driver", "org.h2.Driver"); + properties.setProperty("javax.persistence.jdbc.url", "jdbc:h2:file:./sql/xacmlTest"); + properties.setProperty("javax.persistence.jdbc.user", "sa"); + properties.setProperty("javax.persistence.jdbc.password", ""); + properties.setProperty("ping_interval", "123a"); + properties.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistencePUtest.xml"); + BackUpMonitor bum = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), "brms_test" , properties, new Handler()); + assertTrue(bum.getFlag()); + } + + @Test + public void backUpMonitorMasterTest() throws BackUpMonitorException, InterruptedException, JsonProcessingException { + Properties properties = new Properties(); + // Master Check. Initial Run. + properties.setProperty("javax.persistence.jdbc.driver", "org.h2.Driver"); + properties.setProperty("javax.persistence.jdbc.url", "jdbc:h2:file:./sql/xacmlTest"); + properties.setProperty("javax.persistence.jdbc.user", "sa"); + properties.setProperty("javax.persistence.jdbc.password", ""); + properties.setProperty("ping_interval", "500"); + properties.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistencePUtest.xml"); + BackUpMonitor bum = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), "brms_test" , properties, new Handler()); + createPolicyNotification(); + assertTrue(bum.getFlag()); + // Start a slave check. + startSlave(properties); + updatePolicyNotification(); + TimeUnit.MILLISECONDS.sleep(1500); + assertFalse(bum.getFlag()); + // Get Back to Master test + TimeUnit.MILLISECONDS.sleep(2000); + assertTrue(bum.getFlag()); + // No Master check. + changeALL(properties, "SLAVE"); + TimeUnit.MILLISECONDS.sleep(2000); + assertTrue(bum.getFlag()); + // No Master check. + changeALL(properties, "MASTER"); + TimeUnit.MILLISECONDS.sleep(2000); + assertTrue(bum.getFlag()); + + } + + private void updatePolicyNotification() { + StdPDPNotification notification = new StdPDPNotification(); + notification.setNotificationType(NotificationType.BOTH); + List<StdLoadedPolicy> loadedPolicies = new ArrayList<>(); + StdLoadedPolicy loadedPolicy = new StdLoadedPolicy(); + loadedPolicy.setPolicyName("com.testing"); + loadedPolicy.setUpdateType(UpdateType.UPDATE); + loadedPolicy.setVersionNo("2"); + Map<String, String> matches = new HashMap<>(); + matches.put("test", "test"); + loadedPolicy.setMatches(matches); + loadedPolicies.add(loadedPolicy); + notification.setLoadedPolicies(loadedPolicies); + List<StdRemovedPolicy> removedPolicies = new ArrayList<>(); + StdRemovedPolicy removedPolicy = new StdRemovedPolicy(); + removedPolicy.setPolicyName("com.testing"); + removedPolicy.setVersionNo("1"); + notification.setRemovedPolicies(removedPolicies); + NotificationStore.recordNotification(notification); + } + + private void createPolicyNotification() { + StdPDPNotification notification = new StdPDPNotification(); + notification.setNotificationType(NotificationType.UPDATE); + List<StdLoadedPolicy> loadedPolicies = new ArrayList<>(); + StdLoadedPolicy loadedPolicy = new StdLoadedPolicy(); + loadedPolicy.setPolicyName("com.testing"); + loadedPolicy.setUpdateType(UpdateType.NEW); + loadedPolicy.setVersionNo("1"); + Map<String, String> matches = new HashMap<>(); + matches.put("test", "test"); + loadedPolicy.setMatches(matches); + loadedPolicies.add(loadedPolicy); + notification.setLoadedPolicies(loadedPolicies); + NotificationStore.recordNotification(notification); + } + + private void changeALL(Properties properties, String flag) { + EntityManager em = Persistence.createEntityManagerFactory("PolicyEngineUtils", properties).createEntityManager(); + EntityTransaction et = em.getTransaction(); + et.begin(); + Query query = em.createQuery("select b from BackUpMonitorEntity b where b.resourceNodeName = :nn"); + query.setParameter("nn", ResourceNode.BRMS.toString()); + for(Object bMValue: query.getResultList()){ + BackUpMonitorEntity bmEntity = (BackUpMonitorEntity) bMValue; + bmEntity.setFlag(flag); + bmEntity.setTimeStamp(new Date()); + } + em.flush(); + et.commit(); + } + + private void startSlave(Properties properties) throws JsonProcessingException { + EntityManager em = Persistence.createEntityManagerFactory("PolicyEngineUtils", properties).createEntityManager(); + EntityTransaction et = em.getTransaction(); + et.begin(); + Query query = em.createQuery("select b from BackUpMonitorEntity b where b.resourceNodeName = :nn"); + query.setParameter("nn", ResourceNode.BRMS.toString()); + List<?> bMList = query.getResultList(); + BackUpMonitorEntity origBM = (BackUpMonitorEntity) bMList.get(0); + origBM.setFlag("SLAVE"); + origBM.setTimeStamp(new Date()); + BackUpMonitorEntity bMEntity = new BackUpMonitorEntity(); + bMEntity.setResoruceNodeName(ResourceNode.BRMS.toString()); + bMEntity.setResourceName("brms_test2"); + bMEntity.setFlag("MASTER"); + bMEntity.setTimeStamp(new Date()); + StdPDPNotification notification = new StdPDPNotification(); + notification.setNotificationType(NotificationType.UPDATE); + List<StdLoadedPolicy> loadedPolicies = new ArrayList<>(); + StdLoadedPolicy loadedPolicy = new StdLoadedPolicy(); + loadedPolicy.setPolicyName("com.test"); + loadedPolicy.setUpdateType(UpdateType.NEW); + loadedPolicy.setVersionNo("1"); + Map<String, String> matches = new HashMap<>(); + matches.put("test", "test"); + loadedPolicy.setMatches(matches); + loadedPolicies.add(loadedPolicy); + notification.setLoadedPolicies(loadedPolicies); + bMEntity.setNotificationRecord(PolicyUtils.objectToJsonString(notification)); + em.persist(bMEntity); + em.persist(origBM); + em.flush(); + et.commit(); + } + + @Test(expected = BackUpMonitorException.class) + public void testException() throws InterruptedException, BackUpMonitorException{ + BackUpMonitor.stop(); + new BackUpMonitorException(); + new BackUpMonitorException(new Exception()); + new BackUpMonitorException("error"); + new BackUpMonitorException("error", new Exception()); + throw new BackUpMonitorException("error", new Exception(), false, false); + } + + @After + public void setup() throws InterruptedException{ + BackUpMonitor.stop(); + } +} diff --git a/PolicyEngineUtils/src/test/resources/META-INF/drop.ddl b/PolicyEngineUtils/src/test/resources/META-INF/drop.ddl new file mode 100644 index 000000000..345f258b0 --- /dev/null +++ b/PolicyEngineUtils/src/test/resources/META-INF/drop.ddl @@ -0,0 +1 @@ +DROP TABLE IF EXISTS BackUpMonitorEntity
\ No newline at end of file diff --git a/PolicyEngineUtils/src/test/resources/META-INF/persistencePUtest.xml b/PolicyEngineUtils/src/test/resources/META-INF/persistencePUtest.xml new file mode 100644 index 000000000..a73e6b3c5 --- /dev/null +++ b/PolicyEngineUtils/src/test/resources/META-INF/persistencePUtest.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- ============LICENSE_START======================================================= + PolicyEngineUtils ================================================================================ + 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========================================================= --> + +<persistence version="2.1" + xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> + <persistence-unit name="PolicyEngineUtils" + transaction-type="RESOURCE_LOCAL"> + <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> + <class>org.onap.policy.jpa.BackUpMonitorEntity</class> + <property name="javax.persistence.schema-generation.scripts.action" + value="drop-and-create" /> + <property name="javax.persistence.schema-generation.scripts.create-target" + value="./src/test/resources/META-INF/generatedCreate.ddl" /> + <property name="javax.persistence.schema-generation.scripts.drop-target" + value="./src/test/resources/META-INF/generatedDrop.ddl" /> + <property name="javax.persistence.schema-generation.database.action" + value="drop-and-create" /> + <property name="javax.persistence.schema-generation.create-source" + value="metadata-then-script" /> + <property name="javax.persistence.schema-generation.drop-source" + value="script" /> + <property name="javax.persistence.schema-generation.drop-script-source" + value="META-INF/drop.ddl" /> + </persistence-unit> +</persistence> diff --git a/packages/base/src/files/install/servers/pdp/bin/xacml.pdp.properties b/packages/base/src/files/install/servers/pdp/bin/xacml.pdp.properties index ac7a5bb7e..c9a73f6fa 100644 --- a/packages/base/src/files/install/servers/pdp/bin/xacml.pdp.properties +++ b/packages/base/src/files/install/servers/pdp/bin/xacml.pdp.properties @@ -108,6 +108,8 @@ xacml.rest.pap.userid=${{PDP_PAP_PDP_HTTP_USER_ID}} xacml.rest.pap.password=${{PDP_PAP_PDP_HTTP_PASSWORD}} # Delay for Notifications Don't change this. Value in milliSec. xacml.rest.notification.delay=30 +# Client interval to ping notification service. +CLIENT_INTERVAL=15000 # Request Buffer Size. REQUEST_BUFFER_SIZE=5 #***Properties for IntegrityMonitor integration defined in XACMLRestProperties.java*** |