diff options
Diffstat (limited to 'sli/common/src')
5 files changed, 162 insertions, 112 deletions
diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/CommonConstants.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/CommonConstants.java new file mode 100644 index 00000000..d30b2b62 --- /dev/null +++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/CommonConstants.java @@ -0,0 +1,27 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : CCSDK + * ================================================================================ + * 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.ccsdk.sli.core.sli; + +public interface CommonConstants { + + public static final String SERVICE_LOGIC_STATUS = "SvcLogic.status"; +} diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicContext.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicContext.java index eaf57428..23277439 100644 --- a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicContext.java +++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicContext.java @@ -8,9 +8,9 @@ * 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. @@ -38,39 +38,38 @@ import org.w3c.dom.Text; public class SvcLogicContext { - private static final Logger LOG = LoggerFactory - .getLogger(SvcLogicContext.class); - + private static final Logger LOG = LoggerFactory.getLogger(SvcLogicContext.class); + private HashMap<String, String> attributes; - + private DOMDataBroker domDataBroker; - + private String status = "success"; - + public SvcLogicContext() { - this.attributes = new HashMap<String,String> (); - + this.attributes = new HashMap<> (); + } - + public SvcLogicContext(Properties props) { - this.attributes = new HashMap<String, String> (); - - if (props.containsKey("SvcLogic.status")) + this.attributes = new HashMap<> (); + + if (props.containsKey(CommonConstants.SERVICE_LOGIC_STATUS)) { - this.status = props.getProperty("SvcLogic.status"); + this.status = props.getProperty(CommonConstants.SERVICE_LOGIC_STATUS); } - + for (Object nameObj : props.keySet()) { String propName = (String) nameObj; attributes.put(propName, props.getProperty(propName)); } } - - - + + + public DOMDataBroker getDomDataBroker() { return domDataBroker; } @@ -83,14 +82,14 @@ public class SvcLogicContext { { if (attributes.containsKey(name)) { - return(attributes.get(name)); + return attributes.get(name); } else { - return(null); + return null; } } - + public void setAttribute(String name, String value) { if (value == null) { @@ -101,10 +100,10 @@ public class SvcLogicContext { attributes.put(name, value); } } - + public Set<String> getAttributeKeySet() { - return(attributes.keySet()); + return attributes.keySet(); } public String getStatus() { @@ -114,86 +113,88 @@ public class SvcLogicContext { public void setStatus(String status) { this.status = status; } - + public Properties toProperties() { Properties props = new Properties(); - + if (status != null) { - props.setProperty("SvcLogic.status", status); + props.setProperty(CommonConstants.SERVICE_LOGIC_STATUS, status); } - - for (String attrName : attributes.keySet()) + + String attrName; + String attrVal; + for (Map.Entry<String, String> entry : attributes.entrySet()) { - String attrVal = attributes.get(attrName); + attrName = entry.getKey(); + attrVal = entry.getValue(); if (attrVal == null) { - LOG.warn("attribute " + attrName - + "null - setting to empty string"); + LOG.warn("attribute {} value is null - setting to empty string", attrName); props.setProperty(attrName, ""); } else { - props.setProperty(attrName, attributes.get(attrName)); + props.setProperty(attrName, attrVal); } } - - return(props); + + return props; } - + public void mergeDocument(String pfx, Document doc) { String prefix = ""; - + if (pfx != null) { prefix = pfx; } - + Element root = doc.getDocumentElement(); - + mergeElement(prefix, root, null); } - + public void mergeElement(String pfx, Element element, Map<String, Integer> nodeMap) { - + // In XML, cannot tell the difference between containers and lists. // So, have to treat each element as both (ugly but necessary). - // We do this by passing a nodeMap to be used to count instance of each tag, - // which will be used to set _length and to set index - - LOG.trace("mergeElement("+pfx+","+element.getTagName()+","+nodeMap+")"); + // We do this by passing a nodeMap to be used to count instance of each tag, + // which will be used to set _length and to set index + + LOG.trace("mergeElement({},{},{})", pfx, element.getTagName(), nodeMap); String curTagName = element.getTagName(); String prefix = curTagName; - + if (pfx != null) { prefix = pfx + "." + prefix; } - + int myIdx = 0; - + if (nodeMap != null) { if (nodeMap.containsKey(curTagName)) { - myIdx = nodeMap.get(curTagName).intValue(); + myIdx = nodeMap.get(curTagName); } - nodeMap.put(curTagName, new Integer(myIdx+1)); - this.setAttribute(prefix+"_length", ""+(myIdx+1)); + nodeMap.put(curTagName, myIdx+1); + this.setAttribute(prefix+"_length", Integer.toString(myIdx+1)); } - + NodeList children = element.getChildNodes(); - + int numChildren = children.getLength(); - - Map<String, Integer> childMap = new HashMap<String, Integer>(); - Map<String, Integer> idxChildMap = new HashMap<String, Integer>(); - + + Map<String, Integer> childMap = new HashMap<>(); + Map<String, Integer> idxChildMap = new HashMap<>(); + for (int i = 0 ; i < numChildren ; i++) { Node curNode = children.item(i); - + if (curNode instanceof Text) { Text curText = (Text) curNode; String curTextValue = curText.getTextContent(); - LOG.trace("Setting ctx variable "+prefix+" = "+curTextValue); + LOG.trace("Setting ctx variable {} = {}", prefix, curTextValue); this.setAttribute(prefix, curText.getTextContent()); - + } else if (curNode instanceof Element) { mergeElement(prefix, (Element) curNode, childMap); @@ -204,9 +205,9 @@ public class SvcLogicContext { } } } - + } - + public String resolve(String ctxVarName) { if (ctxVarName.indexOf('[') == -1) { @@ -215,16 +216,15 @@ public class SvcLogicContext { } // Resolve any array references - StringBuffer sbuff = new StringBuffer(); + StringBuilder sbuff = new StringBuilder(); String[] ctxVarParts = ctxVarName.split("\\["); sbuff.append(ctxVarParts[0]); for (int i = 1; i < ctxVarParts.length; i++) { if (ctxVarParts[i].startsWith("$")) { - int endBracketLoc = ctxVarParts[i].indexOf("]"); + int endBracketLoc = ctxVarParts[i].indexOf(']'); if (endBracketLoc == -1) { // Missing end bracket ... give up parsing - LOG.warn("Variable reference " + ctxVarName - + " seems to be missing a ']'"); + LOG.warn("Variable reference {} seems to be missing a ']'", ctxVarName); return (this.getAttribute(ctxVarName)); } diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicParser.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicParser.java index 5270143a..26d45ce9 100644 --- a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicParser.java +++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicParser.java @@ -21,17 +21,6 @@ package org.onap.ccsdk.sli.core.sli; -import java.io.File; -import java.io.InputStream; -import java.net.URL; -import java.util.LinkedList; - -import javax.xml.XMLConstants; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.Attributes; @@ -41,6 +30,16 @@ import org.xml.sax.SAXNotRecognizedException; import org.xml.sax.SAXParseException; import org.xml.sax.helpers.DefaultHandler; +import javax.xml.XMLConstants; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; +import javax.xml.validation.Schema; +import javax.xml.validation.SchemaFactory; +import java.io.File; +import java.io.InputStream; +import java.net.URL; +import java.util.LinkedList; + /** * @author dt5972 * @@ -336,7 +335,7 @@ public class SvcLogicParser { Schema schema = null; String validateSchema = System.getProperty(SLI_VALIDATING_PARSER, "true"); - if (validateSchema != null || validateSchema.equalsIgnoreCase("true")) { + if ("true".equalsIgnoreCase(validateSchema)) { xsdUrl = getClass().getResource(SVCLOGIC_XSD); } @@ -362,7 +361,7 @@ public class SvcLogicParser { SAXParser saxParser = factory.newSAXParser(); if (saxParser.isValidating()) { - LOGGER.info("Validating against schema " + xsdUrl.getPath()); + LOGGER.info("Parser not configured to validate XML {}", (xsdUrl != null ? xsdUrl.getPath() : null)); } graphs = new LinkedList<>(); diff --git a/sli/common/src/test/java/org/onap/ccsdk/sli/core/sli/ITCaseSvcLogicParser.java b/sli/common/src/test/java/org/onap/ccsdk/sli/core/sli/ITCaseSvcLogicParser.java index 0e6000fb..07f40a2e 100644 --- a/sli/common/src/test/java/org/onap/ccsdk/sli/core/sli/ITCaseSvcLogicParser.java +++ b/sli/common/src/test/java/org/onap/ccsdk/sli/core/sli/ITCaseSvcLogicParser.java @@ -8,9 +8,9 @@ * 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. @@ -20,7 +20,7 @@ */ /** - * + * */ package org.onap.ccsdk.sli.core.sli; @@ -28,7 +28,10 @@ import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; +import java.util.Properties; +import ch.vorburger.mariadb4j.DB; +import ch.vorburger.mariadb4j.DBConfigurationBuilder; import junit.framework.TestCase; /** @@ -40,22 +43,43 @@ public class ITCaseSvcLogicParser extends TestCase { /** * Test method for {@link org.onap.ccsdk.sli.core.sli.SvcLogicParser#parse(java.lang.String)}. */ - - + + public void testParse() { - + try { + + URL propUrl = getClass().getResource("/svclogic.properties"); - + InputStream propStr = getClass().getResourceAsStream("/svclogic.properties"); - - SvcLogicStore store = SvcLogicStoreFactory.getSvcLogicStore(propStr); - + + Properties props = new Properties(); + + props.load(propStr); + + + // Start MariaDB4j database + DBConfigurationBuilder config = DBConfigurationBuilder.newBuilder(); + config.setPort(0); // 0 => autom. detect free port + DB db = DB.newEmbeddedDB(config.build()); + db.start(); + + + + // Override jdbc URL and database name + props.setProperty("org.onap.ccsdk.sli.jdbc.database", "test"); + props.setProperty("org.onap.ccsdk.sli.jdbc.url", config.getURL("test")); + + + + SvcLogicStore store = SvcLogicStoreFactory.getSvcLogicStore(props); + assertNotNull(store); - + store.registerNodeType("switch"); store.registerNodeType("block"); store.registerNodeType("get-resource"); @@ -69,15 +93,15 @@ public class ITCaseSvcLogicParser extends TestCase { store.registerNodeType("release"); store.registerNodeType("for"); store.registerNodeType("set"); - - + + InputStream testStr = getClass().getResourceAsStream("/parser-good.tests"); BufferedReader testsReader = new BufferedReader(new InputStreamReader(testStr)); String testCaseFile = null; while ((testCaseFile = testsReader.readLine()) != null) { - + testCaseFile = testCaseFile.trim(); - + if (testCaseFile.length() > 0) { if (!testCaseFile.startsWith("/")) @@ -94,23 +118,23 @@ public class ITCaseSvcLogicParser extends TestCase { SvcLogicParser.validate(testCaseUrl.getPath(), store); } catch (Exception e) { fail("Validation failure ["+e.getMessage()+"]"); - + } - - - + + + } } - + testStr = getClass().getResourceAsStream("/parser-bad.tests"); testsReader = new BufferedReader(new InputStreamReader(testStr)); testCaseFile = null; while ((testCaseFile = testsReader.readLine()) != null) { - + testCaseFile = testCaseFile.trim(); - + if (testCaseFile.length() > 0) { if (!testCaseFile.startsWith("/")) @@ -134,7 +158,7 @@ public class ITCaseSvcLogicParser extends TestCase { if (valid) { fail("Expected compiler error on "+testCaseFile+", but got success"); } - + } } @@ -148,10 +172,10 @@ public class ITCaseSvcLogicParser extends TestCase { e.printStackTrace(); fail("Caught exception processing test cases"); } - - + + } - - + + } diff --git a/sli/common/src/test/resources/svclogic.properties b/sli/common/src/test/resources/svclogic.properties index 25eb3bd4..33d7ae6e 100644 --- a/sli/common/src/test/resources/svclogic.properties +++ b/sli/common/src/test/resources/svclogic.properties @@ -8,9 +8,9 @@ # 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. @@ -20,7 +20,7 @@ ### org.onap.ccsdk.sli.dbtype = jdbc -org.onap.ccsdk.sli.jdbc.url = jdbc:mysql://localhost:3306/sdnctl -org.onap.ccsdk.sli.jdbc.database = sdnctl -org.onap.ccsdk.sli.jdbc.user = sdnctl -org.onap.ccsdk.sli.jdbc.password = gamma +org.onap.ccsdk.sli.jdbc.url = jdbc:mysql://localhost:3306/test +org.onap.ccsdk.sli.jdbc.database = test +org.onap.ccsdk.sli.jdbc.user = test +org.onap.ccsdk.sli.jdbc.password = test123 |