diff options
6 files changed, 99 insertions, 5 deletions
diff --git a/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RestapiCallNode.java b/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RestapiCallNode.java index e5503435b..9a89af6b5 100644 --- a/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RestapiCallNode.java +++ b/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RestapiCallNode.java @@ -392,6 +392,7 @@ public class RestapiCallNode implements SvcLogicJavaPlugin { throws SvcLogicException { log.info("Building {} started", format); long t1 = System.currentTimeMillis(); + String originalTemplate = template; template = expandRepeats(ctx, template, 1); @@ -439,7 +440,7 @@ public class RestapiCallNode implements SvcLogicJavaPlugin { } String req = format == Format.XML - ? XmlJsonUtil.removeEmptyStructXml(ss.toString()) : XmlJsonUtil.removeEmptyStructJson(ss.toString()); + ? XmlJsonUtil.removeEmptyStructXml(ss.toString()) : XmlJsonUtil.removeEmptyStructJson(originalTemplate, ss.toString()); if (format == Format.JSON) { req = XmlJsonUtil.removeLastCommaJson(req); diff --git a/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlJsonUtil.java b/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlJsonUtil.java index 8a0ca8d94..4712b4298 100644 --- a/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlJsonUtil.java +++ b/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlJsonUtil.java @@ -272,7 +272,7 @@ public final class XmlJsonUtil { return sb.toString(); } - public static String removeEmptyStructJson(String s) { + public static String removeEmptyStructJson(String template, String s) { int k = 0; while (k < s.length()) { boolean curly = true; @@ -304,8 +304,13 @@ public final class XmlJsonUtil { if (i5 < 0) i5 = s.length(); - s = s.substring(0, i4) + s.substring(i5); - k = 0; + /*If template mandates empty construct to be present, those should not be removed.*/ + if ((template != null) && template.contains(s.substring(i4))) { + k = i1 + 1; + } else { + s = s.substring(0, i4) + s.substring(i5); + k = 0; + } } else k = i1 + 1; } else diff --git a/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/sshapicall/TestRestapiCallNode.java b/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/sshapicall/TestRestapiCallNode.java index 5c6c4e279..4008c56c7 100644 --- a/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/sshapicall/TestRestapiCallNode.java +++ b/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/sshapicall/TestRestapiCallNode.java @@ -52,6 +52,61 @@ public class TestRestapiCallNode { } @Test + public void testJsonSdwanVpnTopologyTemplate() throws SvcLogicException { + SvcLogicContext ctx = new SvcLogicContext(); + + ctx.setAttribute("prop.topology", "topoType"); + + ctx.setAttribute("prop.roles_length", "1"); + ctx.setAttribute("prop.roles[0]", "role1"); + + ctx.setAttribute("prop.siteAttachement_length", "2"); + + ctx.setAttribute("prop.siteAttachement[0].siteId", "site1"); + ctx.setAttribute("prop.siteAttachement[0].roles_length", "0"); + ctx.setAttribute("prop.siteAttachement[0].roles[0]", "role1"); + ctx.setAttribute("prop.siteAttachement[0].roles[1]", "role3"); + + ctx.setAttribute("prop.siteAttachement[1].siteId", "site2"); + ctx.setAttribute("prop.siteAttachement[1].roles_length", "1"); + ctx.setAttribute("prop.siteAttachement[1].roles[0]", "role2"); + + Map<String, String> p = new HashMap<String, String>(); + p.put("templateFileName", "src/test/resources/sdwan-vpn-topology.json"); + p.put("restapiUrl", "http://echo.getpostman.com"); + p.put("restapiUser", "user1"); + p.put("restapiPassword", "abc123"); + p.put("format", "json"); + p.put("httpMethod", "post"); + p.put("responsePrefix", "response"); + p.put("skipSending", "true"); + + RestapiCallNode rcn = new RestapiCallNode(); + rcn.sendRequest(p, ctx); + } + + @Test + public void testJsonSdwanSiteTemplate() throws SvcLogicException { + SvcLogicContext ctx = new SvcLogicContext(); + + ctx.setAttribute("prop.name", "site1"); + + + Map<String, String> p = new HashMap<String, String>(); + p.put("templateFileName", "src/test/resources/sdwan-site.json"); + p.put("restapiUrl", "http://echo.getpostman.com"); + p.put("restapiUser", "user1"); + p.put("restapiPassword", "abc123"); + p.put("format", "json"); + p.put("httpMethod", "post"); + p.put("responsePrefix", "response"); + p.put("skipSending", "true"); + + RestapiCallNode rcn = new RestapiCallNode(); + rcn.sendRequest(p, ctx); + } + + @Test public void testJsonTemplate() throws SvcLogicException { SvcLogicContext ctx = new SvcLogicContext(); ctx.setAttribute("tmp.sdn-circuit-req-row_length", "3"); diff --git a/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/sshapicall/TestXmlJsonUtil.java b/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/sshapicall/TestXmlJsonUtil.java index bd9ff1c98..31fa2f9f9 100644 --- a/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/sshapicall/TestXmlJsonUtil.java +++ b/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/sshapicall/TestXmlJsonUtil.java @@ -254,7 +254,7 @@ public class TestXmlJsonUtil { "}\r\n" + ""; - String xmlout = XmlJsonUtil.removeEmptyStructJson(xmlin); + String xmlout = XmlJsonUtil.removeEmptyStructJson(null, xmlin); log.info(xmlout); Assert.assertEquals(xmloutexpected, xmlout); diff --git a/restapi-call-node/provider/src/test/resources/sdwan-site.json b/restapi-call-node/provider/src/test/resources/sdwan-site.json new file mode 100644 index 000000000..238ec7642 --- /dev/null +++ b/restapi-call-node/provider/src/test/resources/sdwan-site.json @@ -0,0 +1,10 @@ +{ + "sites": [ + { + "name": ${prop.name}, + "controlPoints": [] + } + ] +} + + diff --git a/restapi-call-node/provider/src/test/resources/sdwan-vpn-topology.json b/restapi-call-node/provider/src/test/resources/sdwan-vpn-topology.json new file mode 100644 index 000000000..4260d2fc1 --- /dev/null +++ b/restapi-call-node/provider/src/test/resources/sdwan-vpn-topology.json @@ -0,0 +1,23 @@ +{ + "vpnId": ${prop.vpn1Id}, + "areas": [ + { + "name": "area1", + "areaType": "leaf", + "topologyType": ${prop.topology}, + "siteAttachements": [${repeat:prop.siteAttachement_length: + { + "siteId": ${prop.siteAttachement[${1}].siteId}, + "role": [${repeat:prop.siteAttachement[${1}].roles_length: + ${prop.siteAttachement[${1}].roles[${2}]}, + } + ], + "workMode": "with-interconnection", + "sitePriority": "active", + "borders": "null" + }, + } + ] + } + ] +}
\ No newline at end of file |