diff options
-rw-r--r-- | sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/SvcLogicExpressionResolverTest.java | 157 | ||||
-rwxr-xr-x | sli/provider-base/src/test/resources/expressions.xml | 55 |
2 files changed, 212 insertions, 0 deletions
diff --git a/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/SvcLogicExpressionResolverTest.java b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/SvcLogicExpressionResolverTest.java index bf4a2622e..054b38d0f 100644 --- a/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/SvcLogicExpressionResolverTest.java +++ b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/SvcLogicExpressionResolverTest.java @@ -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 + 'literal' `' /> + <parameter name='varC' value='`'literal' + $b `' /> + <parameter name='varD' value='`'too' + 'literal'`' /> + <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 >= $b`" /> + assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("6"), ctx)); + + //<switch test="`'PIZZA' == 'PIZZA' and $b < $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 < 2`' /> + assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("14"), ctx)); + + //<switch test='`2 <= 2`' /> + assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("15"), ctx)); + + //<switch test='`3 > 2`' /> + assertEquals("true",switchNodeExecutor.evaluateNodeTest(root.getOutcomeValue("16"), ctx)); + + //<switch test='`2 >= 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 index 000000000..79118570c --- /dev/null +++ b/sli/provider-base/src/test/resources/expressions.xml @@ -0,0 +1,55 @@ +<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
+ xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='TEST-DG' version='1.0.0'>
+ <method rpc='test-dg' mode='sync'>
+ <block>
+ <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>
+ <set>
+ <parameter name='varA' value='`$a + $b`' />
+ <parameter name='varB' value='`$a + 'literal' `' />
+ <parameter name='varC' value='`'literal' + $b `' />
+ <parameter name='varD' value='`'too' + 'literal'`' />
+ <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>
+ <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>
+ <switch test="`'PIZZA' == 'NOTPIZZA' or $a != $b`" />
+ <switch test="`'PIZZA' == 'PIZZA' and $a != $b`" />
+ <switch test="`'PIZZA' == 'NOTPIZZA' or $a >= $b`" />
+ <switch test="`'PIZZA' == 'PIZZA' and $b < $a`" />
+ <switch test="`'PIZZA' == 'PIZZA'`" />
+ <switch test="`$a == $b`" />
+ <switch test="`'PIZZA' == 'NOTPIZZA'`" />
+ <switch test="`'PIZZA' != 'PIZZA'`" />
+ <switch test="`'PIZZA' != 'NOTPIZZA'`" />
+ <switch test='`$a != $b`' />
+ <switch test='`1 < 2`' />
+ <switch test='`2 <= 2`' />
+ <switch test='`3 > 2`' />
+ <switch test='`2 >= 2`' />
+ <switch test='$literalStartingWithDollarSign' />
+ <switch test='`$dollarSignFollowedByVariableSurroundedinBackticks`' />
+ <switch test='`$a == $b`' />
+ <switch test="`$a == $b`" />
+ <switch test='$a == $b' />
+ <switch test="$a == $b" />
+ </block>
+ </method>
+</service-logic>
\ No newline at end of file |