Add additional SvcLogicParser junit 82/88382/4
authorSmokowski, Kevin (ks6305) <kevin.smokowski@att.com>
Thu, 23 May 2019 15:50:35 +0000 (15:50 +0000)
committerKevin Smokowski <kevin.smokowski@att.com>
Thu, 23 May 2019 16:17:48 +0000 (16:17 +0000)
Add additional SvcLogicParser junit

Change-Id: I3186d2ce0981ac20c5655e5f88d8cb2e4ed55b9f
Issue-ID: CCSDK-1361
Signed-off-by: Smokowski, Kevin (ks6305) <kevin.smokowski@att.com>
sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/SvcLogicExpressionResolverTest.java
sli/provider-base/src/test/resources/expressions.xml [new file with mode: 0755]

index bf4a262..054b38d 100644 (file)
@@ -24,6 +24,7 @@ package org.onap.ccsdk.sli.core.sli.provider.base;
 import java.io.BufferedReader;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.util.LinkedList;
 
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.onap.ccsdk.sli.core.sli.SvcLogicExprListener;
@@ -32,6 +33,7 @@ import org.onap.ccsdk.sli.core.sli.SvcLogicExpressionFactory;
 import org.onap.ccsdk.sli.core.sli.SvcLogicGraph;
 import org.onap.ccsdk.sli.core.sli.SvcLogicNode;
 import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicExpressionResolver;
+import org.onap.ccsdk.sli.core.sli.SvcLogicParser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -120,4 +122,159 @@ public class SvcLogicExpressionResolverTest extends TestCase {
                }
        }
 
+    public void testSvcLogicExpressions() throws Exception {
+       SwitchNodeExecutor switchNodeExecutor = new SwitchNodeExecutor();
+       SetNodeExecutor setNodeExecutor = new SetNodeExecutor();
+       SvcLogicContext ctx = new SvcLogicContext();
+       SvcLogicParser slp = new SvcLogicParser();
+       LinkedList<SvcLogicGraph> graph = slp.parse("src/test/resources/expressions.xml");
+       SvcLogicNode root = graph.getFirst().getRootNode();
+//Test a set node that makes use of arithmetic operations
+/*     
+<set>
+       <parameter name='add' value='`1 + 1`' />
+       <parameter name='sub' value='`2 - 1`' />
+       <parameter name='div' value='`6 / 2`' />
+       <parameter name='multi' value='`2 * 2`' />
+       <parameter name='addDoubleQuotes' value="`1 + 1`" />
+       <parameter name='subDoubleQuotes' value="`2 - 1`" />
+       <parameter name='divDoubleQuotes' value="`6 / 2`" />
+       <parameter name='multiDoubleQuotes' value="`2 * 2`" />
+</set>
+*/     
+//the node matching outcome value 1 comes from parsing the block of xml above  
+       ctx.setAttribute("a", "5");
+       ctx.setAttribute("b", "3");
+       setNodeExecutor.execute(root.getOutcomeValue("1"), ctx);
+        assertEquals("2", ctx.getAttribute("add"));
+        assertEquals("1", ctx.getAttribute("sub"));
+        assertEquals("3", ctx.getAttribute("div"));
+        assertEquals("4", ctx.getAttribute("multi"));
+        assertEquals("2", ctx.getAttribute("addDoubleQuotes"));
+        assertEquals("1", ctx.getAttribute("subDoubleQuotes"));
+        assertEquals("3", ctx.getAttribute("divDoubleQuotes"));
+        assertEquals("4", ctx.getAttribute("multiDoubleQuotes"));
+
+//Test a set node that makes use of string concatenation        
+/*
+<set>
+       <parameter name='varA' value='`$a + $b`' />
+       <parameter name='varB' value='`$a + &apos;literal&apos; `' />
+       <parameter name='varC' value='`&apos;literal&apos; + $b `' />
+       <parameter name='varD' value='`&apos;too&apos; + &apos;literal&apos;`' />
+       <parameter name='varADoubleQuotes' value="`$a + $b`" />
+       <parameter name='varBDoubleQuotes' value="`$a +'literal' `" />
+       <parameter name='varCDoubleQuotes' value="`'literal' + $b `" />
+       <parameter name='varDDoubleQuotes' value="`'too' + 'literal'`" />
+</set>        
+*/
+//the node matching outcome value 2 comes from parsing the block of xml above
+       ctx.setAttribute("a", "cat");
+       ctx.setAttribute("b", "dog");
+        setNodeExecutor.execute(root.getOutcomeValue("2"), ctx);
+        assertEquals("catdog", ctx.getAttribute("varA"));
+        assertEquals("catliteral", ctx.getAttribute("varB"));
+        assertEquals("literaldog", ctx.getAttribute("varC"));
+        assertEquals("tooliteral", ctx.getAttribute("varD"));
+        assertEquals("catdog", ctx.getAttribute("varADoubleQuotes"));
+        assertEquals("catliteral", ctx.getAttribute("varBDoubleQuotes"));
+        assertEquals("literaldog", ctx.getAttribute("varCDoubleQuotes"));
+        assertEquals("tooliteral", ctx.getAttribute("varDDoubleQuotes"));
+
+//Shows how backticks interact with + operator
+/*
+<set>
+       <parameter name='testOne' value='`1 + 1`' />
+       <parameter name='testThree' value='"1" +"1"' />
+       <parameter name='testFour' value='`$portNumber + $slot + $shelf`' />
+       <parameter name='testOneDoubleQuotes' value="`1 + 1`" />
+       <parameter name='testThreeDoubleQuotes' value="'1' +'1'" />
+       <parameter name='testFourDoubleQuotes' value="`$portNumber + $slot + $shelf`" />
+</set>
+*/
+//the node matching outcome value 3 comes from parsing the block of xml above
+       ctx.setAttribute("portNumber", "2");
+       ctx.setAttribute("slot", "3");
+       ctx.setAttribute("shelf", "1");
+
+        setNodeExecutor.execute(root.getOutcomeValue("3"), ctx);
+        assertEquals("2", ctx.getAttribute("testOne"));
+        assertEquals("\"1\" +\"1\"", ctx.getAttribute("testThree"));
+        assertEquals("6", ctx.getAttribute("testFour"));
+        assertEquals("2", ctx.getAttribute("testOneDoubleQuotes"));
+        assertEquals("'1' +'1'", ctx.getAttribute("testThreeDoubleQuotes")); 
+        assertEquals("6", ctx.getAttribute("testFourDoubleQuotes"));
+
+       ctx.setAttribute("a", "5");
+       ctx.setAttribute("b", "3");
+
+       // series of switch statements showing and or != > < >= == <=
+       // the XML for the node is commented above the line that evaluates that node, the switch statements are single line     
+
+       //<switch test="`'PIZZA' == 'NOTPIZZA' or $a != $b`" />
+       assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("4"), ctx));
+
+       //<switch test="`'PIZZA' == 'PIZZA' and $a != $b`" />
+       assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("5"), ctx));
+
+       //<switch test="`'PIZZA' == 'NOTPIZZA' or $a &gt;= $b`" />
+       assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("6"), ctx));
+
+       //<switch test="`'PIZZA' == 'PIZZA' and $b &lt; $a`" />
+       assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("7"), ctx));
+
+       //<switch test="`'PIZZA' == 'PIZZA'`" />
+       assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("8"), ctx));
+
+       //<switch test="`$a == $b`" />
+       assertEquals("false",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("9"), ctx));
+
+       //<switch test="`'PIZZA' == 'NOTPIZZA'`" />
+       assertEquals("false",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("10"), ctx));
+
+       //<switch test="`'PIZZA' != 'PIZZA'`" />
+       assertEquals("false",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("11"), ctx));
+
+       //<switch test="`'PIZZA' != 'NOTPIZZA'`" />
+       assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("12"), ctx));
+
+       //<switch test='`$a != $b`' />
+       assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("13"), ctx));
+
+       //<switch test='`1 &lt; 2`' />
+       assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("14"), ctx));
+
+       //<switch test='`2 &lt;= 2`' />
+       assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("15"), ctx));
+
+       //<switch test='`3 &gt; 2`' />
+       assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("16"), ctx));
+
+       //<switch test='`2 &gt;= 2`' />
+       assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("17"), ctx));
+
+       // Series of switch statements that show the effect of using backticks
+       
+       ctx.setAttribute("literalStartingWithDollarSign", "DONT READ ME!");
+       //<switch test='$literalStartingWithDollarSign'/>
+       assertEquals("$literalStartingWithDollarSign",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("18"), ctx));
+
+       ctx.setAttribute("dollarSignFollowedByVariableSurroundedinBackticks", "README");
+       //<switch test='$literalStartingWithDollarSign'/>
+       assertEquals("README",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("19"), ctx));
+
+       ctx.setAttribute("a", "2");
+       ctx.setAttribute("b", "2");
+       //<switch test='`$a == $b`' />
+       assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("20"), ctx));
+
+       //<switch test="`$a == $b`" />
+       assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("21"), ctx));
+       
+       //<switch test='$a == $b' />
+       assertEquals("$a == $b",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("22"), ctx));
+
+       //<switch test="$a == $b" />
+       assertEquals("$a == $b",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("23"), ctx));
+    }
 }
diff --git a/sli/provider-base/src/test/resources/expressions.xml b/sli/provider-base/src/test/resources/expressions.xml
new file mode 100755 (executable)
index 0000000..7911857
--- /dev/null
@@ -0,0 +1,55 @@
+<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\r
+       xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='TEST-DG' version='1.0.0'>\r
+       <method rpc='test-dg' mode='sync'>\r
+               <block>\r
+                       <set>\r
+                               <parameter name='add' value='`1 + 1`' />\r
+                               <parameter name='sub' value='`2 - 1`' />\r
+                               <parameter name='div' value='`6 / 2`' />\r
+                               <parameter name='multi' value='`2 * 2`' />\r
+                               <parameter name='addDoubleQuotes' value="`1 + 1`" />\r
+                               <parameter name='subDoubleQuotes' value="`2 - 1`" />\r
+                               <parameter name='divDoubleQuotes' value="`6 / 2`" />\r
+                               <parameter name='multiDoubleQuotes' value="`2 * 2`" />\r
+                       </set>\r
+                       <set>\r
+                               <parameter name='varA' value='`$a + $b`' />\r
+                               <parameter name='varB' value='`$a + &apos;literal&apos; `' />\r
+                               <parameter name='varC' value='`&apos;literal&apos; + $b `' />\r
+                               <parameter name='varD' value='`&apos;too&apos; + &apos;literal&apos;`' />\r
+                               <parameter name='varADoubleQuotes' value="`$a + $b`" />\r
+                               <parameter name='varBDoubleQuotes' value="`$a +'literal' `" />\r
+                               <parameter name='varCDoubleQuotes' value="`'literal' + $b `" />\r
+                               <parameter name='varDDoubleQuotes' value="`'too' + 'literal'`" />\r
+                       </set>\r
+                       <set>\r
+                               <parameter name='testOne' value='`1 + 1`' />\r
+                               <parameter name='testThree' value='"1" +"1"' />\r
+                               <parameter name='testFour' value='`$portNumber + $slot + $shelf`' />\r
+                               <parameter name='testOneDoubleQuotes' value="`1 + 1`" />\r
+                               <parameter name='testThreeDoubleQuotes' value="'1' +'1'" />\r
+                               <parameter name='testFourDoubleQuotes' value="`$portNumber + $slot + $shelf`" />\r
+                       </set>\r
+                       <switch test="`'PIZZA' == 'NOTPIZZA' or $a != $b`" />\r
+                       <switch test="`'PIZZA' == 'PIZZA' and $a != $b`" />\r
+                       <switch test="`'PIZZA' == 'NOTPIZZA' or $a &gt;= $b`" />\r
+                       <switch test="`'PIZZA' == 'PIZZA' and $b &lt; $a`" />\r
+                       <switch test="`'PIZZA' == 'PIZZA'`" />\r
+                       <switch test="`$a == $b`" />\r
+                       <switch test="`'PIZZA' == 'NOTPIZZA'`" />\r
+                       <switch test="`'PIZZA' != 'PIZZA'`" />\r
+                       <switch test="`'PIZZA' != 'NOTPIZZA'`" />\r
+                       <switch test='`$a != $b`' />\r
+                       <switch test='`1 &lt; 2`' />\r
+                       <switch test='`2 &lt;= 2`' />\r
+                       <switch test='`3 &gt; 2`' />\r
+                       <switch test='`2 &gt;= 2`' />\r
+                       <switch test='$literalStartingWithDollarSign' />\r
+                       <switch test='`$dollarSignFollowedByVariableSurroundedinBackticks`' />\r
+                       <switch test='`$a == $b`' />\r
+                       <switch test="`$a == $b`" />\r
+                       <switch test='$a == $b' />\r
+                       <switch test="$a == $b" />\r
+               </block>\r
+       </method>\r
+</service-logic>
\ No newline at end of file