Merge "Implement test case for Fabric Discovery Plugin"
authorDan Timoney <dtimoney@att.com>
Tue, 19 Sep 2017 23:58:57 +0000 (23:58 +0000)
committerGerrit Code Review <gerrit@onap.org>
Tue, 19 Sep 2017 23:58:57 +0000 (23:58 +0000)
restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/JsonParser.java
restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RestapiCallNode.java
restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlJsonUtil.java
restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlParser.java
restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestJsonParser.java
restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestRestapiCallNode.java
restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestXmlParser.java
restapi-call-node/provider/src/test/resources/test.json

index f2867f5..4a1dfef 100644 (file)
@@ -21,6 +21,8 @@
 
 package org.onap.ccsdk.sli.plugins.restapicall;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -29,57 +31,64 @@ import java.util.Map;
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class JsonParser {
+public final class JsonParser {
 
     private static final Logger log = LoggerFactory.getLogger(JsonParser.class);
 
-    @SuppressWarnings("unchecked")
-    public static Map<String, String> convertToProperties(String s) throws JSONException {
-        JSONObject json = new JSONObject(s);
-
-        Map<String, Object> wm = new HashMap<>();
-        Iterator<String> ii = json.keys();
-        while (ii.hasNext()) {
-            String key1 = ii.next();
-            wm.put(key1, json.get(key1));
-        }
-
-        Map<String, String> mm = new HashMap<>();
+    private JsonParser() {
+        // Preventing instantiation of the same.
+    }
 
-        while (!wm.isEmpty())
-            for (String key : new ArrayList<>(wm.keySet())) {
-                Object o = wm.get(key);
-                wm.remove(key);
+    @SuppressWarnings("unchecked")
+    public static Map<String, String> convertToProperties(String s)
+        throws SvcLogicException {
+
+        checkNotNull(s, "Input should not be null.");
+
+        try {
+            JSONObject json = new JSONObject(s);
+            Map<String, Object> wm = new HashMap<>();
+            Iterator<String> ii = json.keys();
+            while (ii.hasNext()) {
+                String key1 = ii.next();
+                wm.put(key1, json.get(key1));
+            }
 
-                if (o instanceof Boolean || o instanceof Number || o instanceof String) {
-                    mm.put(key, o.toString());
+            Map<String, String> mm = new HashMap<>();
 
-                    log.info("Added property: " + key + ": " + o.toString());
-                }
+            while (!wm.isEmpty())
+                for (String key : new ArrayList<>(wm.keySet())) {
+                    Object o = wm.get(key);
+                    wm.remove(key);
 
-                else if (o instanceof JSONObject) {
-                    JSONObject jo = (JSONObject) o;
-                    Iterator<String> i = jo.keys();
-                    while (i.hasNext()) {
-                        String key1 = i.next();
-                        wm.put(key + "." + key1, jo.get(key1));
-                    }
-                }
+                    if (o instanceof Boolean || o instanceof Number || o instanceof String) {
+                        mm.put(key, o.toString());
 
-                else if (o instanceof JSONArray) {
-                    JSONArray ja = (JSONArray) o;
-                    mm.put(key + "_length", String.valueOf(ja.length()));
+                        log.info("Added property: {} : {}", key, o.toString());
+                    } else if (o instanceof JSONObject) {
+                        JSONObject jo = (JSONObject) o;
+                        Iterator<String> i = jo.keys();
+                        while (i.hasNext()) {
+                            String key1 = i.next();
+                            wm.put(key + "." + key1, jo.get(key1));
+                        }
+                    } else if (o instanceof JSONArray) {
+                        JSONArray ja = (JSONArray) o;
+                        mm.put(key + "_length", String.valueOf(ja.length()));
 
-                    log.info("Added property: " + key + "_length" + ": " + String.valueOf(ja.length()));
+                        log.info("Added property: {}_length: {}", key, String.valueOf(ja.length()));
 
-                    for (int i = 0; i < ja.length(); i++)
-                        wm.put(key + '[' + i + ']', ja.get(i));
+                        for (int i = 0; i < ja.length(); i++)
+                            wm.put(key + '[' + i + ']', ja.get(i));
+                    }
                 }
-            }
-
-        return mm;
+            return mm;
+        } catch (JSONException e) {
+            throw new SvcLogicException("Unable to convert JSON to properties" + e.getLocalizedMessage(), e);
+        }
     }
 }
index ca227c7..60697a4 100644 (file)
 
 package org.onap.ccsdk.sli.plugins.restapicall;
 
+import com.sun.jersey.api.client.ClientHandlerException;
+import com.sun.jersey.api.client.UniformInterfaceException;
 import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.SocketException;
 import java.net.URI;
 import java.nio.file.Files;
 import java.nio.file.Paths;
@@ -45,6 +49,7 @@ import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.UriBuilder;
 
 import org.apache.commons.lang3.StringUtils;
+import org.codehaus.jettison.json.JSONException;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin;
@@ -114,7 +119,7 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
             throws SvcLogicException {
 
         RetryPolicy retryPolicy = null;
-        HttpResponse r = null;
+        HttpResponse r = new HttpResponse();
         try {
             Parameters p = getParameters(paramMap);
             if (p.partner != null) {
@@ -151,9 +156,9 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
                             ctx.setAttribute(pp + entry.getKey(), entry.getValue());
                 }
             }
-        } catch (Exception e) {
+        } catch (SvcLogicException | JSONException e) {
             boolean shouldRetry = false;
-            if (e.getCause() instanceof java.net.SocketException) {
+            if (e.getCause().getCause() instanceof SocketException) {
                 shouldRetry = true;
             }
 
@@ -190,7 +195,8 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
                 } catch (Exception ex) {
                     log.error("Could not attempt retry.", ex);
                     String retryErrorMessage =
-                            "Retry attempt has failed. No further retry shall be attempted, calling setFailureResponseStatus.";
+                            "Retry attempt has failed. No further retry shall be attempted, calling " +
+                                "setFailureResponseStatus.";
                     setFailureResponseStatus(ctx, prefix, retryErrorMessage, r);
                 }
             }
@@ -270,7 +276,8 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
         return value;
     }
 
-    protected String buildXmlJsonRequest(SvcLogicContext ctx, String template, Format format) {
+    protected String buildXmlJsonRequest(SvcLogicContext ctx, String template, Format format)
+        throws SvcLogicException {
         log.info("Building " + format + " started");
         long t1 = System.currentTimeMillis();
 
@@ -291,7 +298,7 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
 
             int i2 = template.indexOf('}', i1 + 2);
             if (i2 < 0)
-                throw new RuntimeException("Template error: Matching } not found");
+                throw new SvcLogicException("Template error: Matching } not found");
 
             String var1 = template.substring(i1 + 2, i2);
             String value1 = format == Format.XML ? XmlJsonUtil.getXml(mm, var1) : XmlJsonUtil.getJson(mm, var1);
@@ -326,7 +333,7 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
         return req;
     }
 
-    protected String expandRepeats(SvcLogicContext ctx, String template, int level) {
+    protected String expandRepeats(SvcLogicContext ctx, String template, int level) throws SvcLogicException {
         StringBuilder newTemplate = new StringBuilder();
         int k = 0;
         while (k < template.length()) {
@@ -338,7 +345,7 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
 
             int i2 = template.indexOf(':', i1 + 9);
             if (i2 < 0)
-                throw new RuntimeException(
+                throw new SvcLogicException(
                         "Template error: Context variable name followed by : is required after repeat");
 
             // Find the closing }, store in i3
@@ -348,7 +355,7 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
             while (nn > 0 && i < template.length()) {
                 i3 = template.indexOf('}', i);
                 if (i3 < 0)
-                    throw new RuntimeException("Template error: Matching } not found");
+                    throw new SvcLogicException("Template error: Matching } not found");
                 int i32 = template.indexOf('{', i);
                 if (i32 >= 0 && i32 < i3) {
                     nn++;
@@ -365,8 +372,9 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
             int n = 0;
             try {
                 n = Integer.parseInt(value1);
-            } catch (Exception e) {
-                n = 0;
+            } catch (NumberFormatException e) {
+                throw new SvcLogicException("Invalid input of repeat interval, should be an integer value " +
+                    e.getLocalizedMessage(), e);
             }
 
             newTemplate.append(template.substring(k, i1));
@@ -392,24 +400,23 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
         return expandRepeats(ctx, newTemplate.toString(), level + 1);
     }
 
-    protected String readFile(String fileName) throws Exception {
-        byte[] encoded = Files.readAllBytes(Paths.get(fileName));
-        return new String(encoded, "UTF-8");
+    protected String readFile(String fileName) throws SvcLogicException {
+        try {
+            byte[] encoded = Files.readAllBytes(Paths.get(fileName));
+            return new String(encoded, "UTF-8");
+        } catch (IOException | SecurityException e) {
+            throw new SvcLogicException("Unable to read file " + fileName + e.getLocalizedMessage(), e);
+        }
     }
 
-    protected HttpResponse sendHttpRequest(String request, Parameters p) throws Exception {
+    protected HttpResponse sendHttpRequest(String request, Parameters p) throws SvcLogicException {
+
         ClientConfig config = new DefaultClientConfig();
         SSLContext ssl = null;
         if (p.ssl && p.restapiUrl.startsWith("https"))
             ssl = createSSLContext(p);
         if (ssl != null) {
-            HostnameVerifier hostnameVerifier = new HostnameVerifier() {
-
-                @Override
-                public boolean verify(String hostname, SSLSession session) {
-                    return true;
-                }
-            };
+            HostnameVerifier hostnameVerifier = (hostname, session) -> true;
 
             config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,
                     new HTTPSProperties(hostnameVerifier, ssl));
@@ -451,7 +458,14 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
 
             webResourceBuilder.header("X-ECOMP-RequestID",org.slf4j.MDC.get("X-ECOMP-RequestID"));
 
-            ClientResponse response = webResourceBuilder.method(p.httpMethod.toString(), ClientResponse.class, request);
+            ClientResponse response;
+
+            try {
+                response = webResourceBuilder.method(p.httpMethod.toString(), ClientResponse.class, request);
+            } catch (UniformInterfaceException | ClientHandlerException e) {
+                throw new SvcLogicException("Exception while sending http request to client "
+                    + e.getLocalizedMessage(), e);
+            }
 
             r.code = response.getStatus();
             r.headers = response.getHeaders();
@@ -478,13 +492,7 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
             System.setProperty("javax.net.ssl.trustStore", p.trustStoreFileName);
             System.setProperty("javax.net.ssl.trustStorePassword", p.trustStorePassword);
 
-            HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
-
-                @Override
-                public boolean verify(String string, SSLSession ssls) {
-                    return true;
-                }
-            });
+            HttpsURLConnection.setDefaultHostnameVerifier((string, ssls) -> true);
 
             KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
             KeyStore ks = KeyStore.getInstance("PKCS12");
@@ -501,8 +509,8 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
         return null;
     }
 
-    protected void setFailureResponseStatus(SvcLogicContext ctx, String prefix, String errorMessage, HttpResponse r) {
-        HttpResponse resp = new HttpResponse();
+    protected void setFailureResponseStatus(SvcLogicContext ctx, String prefix, String errorMessage,
+        HttpResponse resp) {
         resp.code = 500;
         resp.message = errorMessage;
         String pp = prefix != null ? prefix + '.' : "";
@@ -525,7 +533,7 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
             r = sendHttpData(data, p);
             setResponseStatus(ctx, p.responsePrefix, r);
 
-        } catch (Exception e) {
+        } catch (SvcLogicException | IOException e) {
             log.error("Error sending the request: " + e.getMessage(), e);
 
             r = new HttpResponse();
@@ -563,7 +571,7 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
         return p;
     }
 
-    protected HttpResponse sendHttpData(byte[] data, FileParam p) {
+    protected HttpResponse sendHttpData(byte[] data, FileParam p) throws SvcLogicException {
         Client client = Client.create();
         client.setConnectTimeout(5000);
         client.setFollowRedirects(true);
@@ -580,11 +588,18 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
         if (!p.skipSending) {
             String tt = "application/octet-stream";
 
-            ClientResponse response = null;
-            if (p.httpMethod == HttpMethod.POST)
-                response = webResource.accept(tt).type(tt).post(ClientResponse.class, data);
-            else if (p.httpMethod == HttpMethod.PUT)
-                response = webResource.accept(tt).type(tt).put(ClientResponse.class, data);
+            ClientResponse response;
+            try {
+                if (p.httpMethod == HttpMethod.POST)
+                    response = webResource.accept(tt).type(tt).post(ClientResponse.class, data);
+                else if (p.httpMethod == HttpMethod.PUT)
+                    response = webResource.accept(tt).type(tt).put(ClientResponse.class, data);
+                else
+                    throw new SvcLogicException("Http operation" + p.httpMethod + "not supported");
+            } catch (UniformInterfaceException | ClientHandlerException e) {
+                throw new SvcLogicException("Exception while sending http request to client " +
+                    e.getLocalizedMessage(), e);
+            }
 
             r.code = response.getStatus();
             r.headers = response.getHeaders();
@@ -601,10 +616,17 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
 
                 webResource = client.resource(newUrl);
 
-                if (p.httpMethod == HttpMethod.POST)
-                    response = webResource.accept(tt).type(tt).post(ClientResponse.class, data);
-                else if (p.httpMethod == HttpMethod.PUT)
-                    response = webResource.accept(tt).type(tt).put(ClientResponse.class, data);
+                try {
+                    if (p.httpMethod == HttpMethod.POST)
+                        response = webResource.accept(tt).type(tt).post(ClientResponse.class, data);
+                    else if (p.httpMethod == HttpMethod.PUT)
+                        response = webResource.accept(tt).type(tt).put(ClientResponse.class, data);
+                    else
+                        throw new SvcLogicException("Http operation" + p.httpMethod + "not supported");
+                } catch (UniformInterfaceException | ClientHandlerException e) {
+                    throw new SvcLogicException("Exception while sending http request to client " +
+                        e.getLocalizedMessage(), e);
+                }
 
                 r.code = response.getStatus();
                 etag = response.getEntityTag();
@@ -648,7 +670,7 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
             if (r.body != null)
                 ctx.setAttribute(pp + "httpResponse", r.body);
 
-        } catch (Exception e) {
+        } catch (SvcLogicException e) {
             log.error("Error sending the request: " + e.getMessage(), e);
 
             r = new HttpResponse();
@@ -682,7 +704,7 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
         return p;
     }
 
-    protected HttpResponse postOnUeb(String request, UebParam p) throws Exception {
+    protected HttpResponse postOnUeb(String request, UebParam p) throws SvcLogicException {
         String[] urls = uebServers.split(" ");
         for (int i = 0; i < urls.length; i++) {
             if (!urls[i].endsWith("/"))
@@ -706,7 +728,14 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
             String tt = "application/json";
             String tt1 = tt + ";charset=UTF-8";
 
-            ClientResponse response = webResource.accept(tt).type(tt1).post(ClientResponse.class, request);
+            ClientResponse response;
+
+            try {
+                response = webResource.accept(tt).type(tt1).post(ClientResponse.class, request);
+            } catch (UniformInterfaceException | ClientHandlerException e) {
+                throw new SvcLogicException("Exception while posting http request to client " +
+                    e.getLocalizedMessage(), e);
+            }
 
             r.code = response.getStatus();
             r.headers = response.getHeaders();
index e80ca50..b94f0a6 100644 (file)
@@ -29,10 +29,14 @@ import java.util.Map;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class XmlJsonUtil {
+public final class XmlJsonUtil {
 
     private static final Logger log = LoggerFactory.getLogger(XmlJsonUtil.class);
 
+    private XmlJsonUtil() {
+        // Preventing instantiation of the same.
+    }
+
     public static String getXml(Map<String, String> varmap, String var) {
         boolean escape = true;
         if (var.startsWith("'")) {
@@ -99,7 +103,7 @@ public class XmlJsonUtil {
                 try {
                     length = Integer.parseInt(lengthStr);
                 } catch (Exception e) {
-                    log.warn("Invalid number for " + var + "_length:" + lengthStr);
+                    log.warn("Invalid number for {}_length:{}", var, lengthStr);
                 }
             }
 
@@ -364,9 +368,9 @@ public class XmlJsonUtil {
     }
 
     private static String pad(int n) {
-        String s = "";
+        StringBuilder s = new StringBuilder();
         for (int i = 0; i < n; i++)
-            s += Character.toString('\t');
-        return s;
+            s.append(Character.toString('\t'));
+        return s.toString();
     }
 }
index 61b0e31..7ef776d 100644 (file)
 
 package org.onap.ccsdk.sli.plugins.restapicall;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import java.io.ByteArrayInputStream;
+import java.io.IOException;
 import java.io.InputStream;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
+import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
-public class XmlParser {
+public final class XmlParser {
 
     private static final Logger log = LoggerFactory.getLogger(XmlParser.class);
 
-    public static Map<String, String> convertToProperties(String s, Set<String> listNameList) {
+    private XmlParser() {
+        // Preventing instantiation of the same.
+    }
+
+    public static Map<String, String> convertToProperties(String s, Set<String> listNameList)
+        throws SvcLogicException {
+
+        checkNotNull(s, "Input should not be null.");
+
         Handler handler = new Handler(listNameList);
         try {
             SAXParserFactory factory = SAXParserFactory.newInstance();
             SAXParser saxParser = factory.newSAXParser();
             InputStream in = new ByteArrayInputStream(s.getBytes());
             saxParser.parse(in, handler);
-        } catch (Exception e) {
-            e.printStackTrace();
+        } catch (ParserConfigurationException | IOException | SAXException e) {
+            throw new SvcLogicException("Unable to convert XML to properties" + e.getLocalizedMessage(), e);
         }
-
         return handler.getProperties();
     }
 
@@ -72,8 +84,8 @@ public class XmlParser {
                 this.listNameList = new HashSet<>();
         }
 
-        String currentName = "";
-        String currentValue = "";
+        StringBuilder currentName = new StringBuilder();
+        StringBuilder currentValue = new StringBuilder();
 
         @Override
         public void startElement(String uri, String localName, String qName, Attributes attributes)
@@ -88,15 +100,16 @@ public class XmlParser {
                 name = name.substring(i2 + 1);
 
             if (currentName.length() > 0)
-                currentName += Character.toString('.');
-            currentName += name;
+                currentName.append(Character.toString('.'));
+            currentName.append(name);
 
-            String listName = removeIndexes(currentName);
+            String listName = removeIndexes(currentName.toString());
 
             if (listNameList.contains(listName)) {
-                int len = getInt(properties, currentName + "_length");
-                properties.put(currentName + "_length", String.valueOf(len + 1));
-                currentName += "[" + len + "]";
+                String n = currentName.toString() + "_length";
+                int len = getInt(properties, n);
+                properties.put(n, String.valueOf(len + 1));
+                currentName.append("[").append(len).append("]");
             }
         }
 
@@ -111,20 +124,19 @@ public class XmlParser {
             if (i2 >= 0)
                 name = name.substring(i2 + 1);
 
-            if (currentValue.trim().length() > 0) {
-                currentValue = currentValue.trim();
-                properties.put(currentName, currentValue);
-
-                log.info("Added property: " + currentName + ": " + currentValue);
+            String s = currentValue.toString().trim();
+            if (s.length() > 0) {
+                properties.put(currentName.toString(), s);
 
-                currentValue = "";
+                log.info("Added property: {} : {}", currentName, s);
+                currentValue = new StringBuilder();
             }
 
             int i1 = currentName.lastIndexOf("." + name);
             if (i1 <= 0)
-                currentName = "";
+                currentName = new StringBuilder();
             else
-                currentName = currentName.substring(0, i1);
+                currentName = new StringBuilder(currentName.substring(0, i1));
         }
 
         @Override
@@ -132,7 +144,7 @@ public class XmlParser {
             super.characters(ch, start, length);
 
             String value = new String(ch, start, length);
-            currentValue += value;
+            currentValue.append(value);
         }
 
         private static int getInt(Map<String, String> mm, String name) {
@@ -143,7 +155,7 @@ public class XmlParser {
         }
 
         private String removeIndexes(String currentName) {
-            String s = "";
+            StringBuilder b = new StringBuilder();
             boolean add = true;
             for (int i = 0; i < currentName.length(); i++) {
                 char c = currentName.charAt(i);
@@ -152,9 +164,9 @@ public class XmlParser {
                 else if (c == ']')
                     add = true;
                 else if (add)
-                    s += Character.toString(c);
+                    b.append(Character.toString(c));
             }
-            return s;
+            return b.toString();
         }
     }
 }
index dbca5ad..5526be8 100644 (file)
@@ -22,6 +22,7 @@
 package jtest.org.onap.ccsdk.sli.plugins.restapicall;
 
 import java.io.BufferedReader;
+import java.io.IOException;
 import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -29,6 +30,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.junit.Test;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 import org.onap.ccsdk.sli.plugins.restapicall.JsonParser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -38,30 +40,34 @@ public class TestJsonParser {
     private static final Logger log = LoggerFactory.getLogger(TestJsonParser.class);
 
     @Test
-    public void test() throws Exception {
+    public void test() throws SvcLogicException, IOException {
         BufferedReader in = new BufferedReader(
                 new InputStreamReader(ClassLoader.getSystemResourceAsStream("test.json"))
         );
-        String ss = "";
-        String line = null;
+        StringBuilder b = new StringBuilder();
+        String line;
         while ((line = in.readLine()) != null)
-            ss += line + '\n';
+            b.append(line).append('\n');
 
-        Map<String, String> mm = JsonParser.convertToProperties(ss);
+        Map<String, String> mm = JsonParser.convertToProperties(b.toString());
 
         logProperties(mm);
 
         in.close();
     }
 
+    @Test(expected = NullPointerException.class)
+    public void testNullString() throws SvcLogicException {
+        JsonParser.convertToProperties(null);
+    }
+
     private void logProperties(Map<String, String> mm) {
         List<String> ll = new ArrayList<>();
         for (Object o : mm.keySet())
             ll.add((String) o);
         Collections.sort(ll);
-
         log.info("Properties:");
         for (String name : ll)
-            log.info("--- " + name + ": " + mm.get(name));
+            log.info("--- {}: {}", name, mm.get(name));
     }
 }
index ff97148..51c3947 100644 (file)
@@ -26,6 +26,7 @@ import java.util.Map;
 
 import org.junit.Test;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 import org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,7 +37,7 @@ public class TestRestapiCallNode {
 
 
     @Test
-    public void testDelete() throws Exception {
+    public void testDelete() throws SvcLogicException {
         SvcLogicContext ctx = new SvcLogicContext();
 
         Map<String, String> p = new HashMap<String, String>();
@@ -51,7 +52,7 @@ public class TestRestapiCallNode {
     }
 
     @Test
-    public void testJsonTemplate() throws Exception {
+    public void testJsonTemplate() throws SvcLogicException {
         SvcLogicContext ctx = new SvcLogicContext();
         ctx.setAttribute("tmp.sdn-circuit-req-row_length", "3");
         ctx.setAttribute("tmp.sdn-circuit-req-row[0].source-uid", "APIDOC-123");
@@ -89,4 +90,82 @@ public class TestRestapiCallNode {
         RestapiCallNode rcn = new RestapiCallNode();
         rcn.sendRequest(p, ctx);
     }
+
+    @Test(expected = SvcLogicException.class)
+    public void testInvalidRepeatTimes() throws SvcLogicException {
+        SvcLogicContext ctx = new SvcLogicContext();
+        ctx.setAttribute("tmp.sdn-circuit-req-row_length", "a");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].source-uid", "APIDOC-123");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].action", "delete");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].request-timestamp", "2016-09-09 16:30:35.0");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].request-status", "New");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].processing-status", "New");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].service-clfi", "testClfi1");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].clci", "clci");
+
+        Map<String, String> p = new HashMap<String, String>();
+        p.put("templateFileName", "src/test/resources/test-template.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(expected = SvcLogicException.class)
+    public void testInvalidTemplatePath() throws SvcLogicException {
+        SvcLogicContext ctx = new SvcLogicContext();
+        ctx.setAttribute("tmp.sdn-circuit-req-row_length", "1");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].source-uid", "APIDOC-123");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].action", "delete");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].request-timestamp", "2016-09-09 16:30:35.0");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].request-status", "New");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].processing-status", "New");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].service-clfi", "testClfi1");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].clci", "clci");
+
+        Map<String, String> p = new HashMap<String, String>();
+        p.put("templateFileName", "src/test/resourcess/test-template.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(expected = SvcLogicException.class)
+    public void testWithoutSkipSending() throws SvcLogicException {
+        SvcLogicContext ctx = new SvcLogicContext();
+        ctx.setAttribute("tmp.sdn-circuit-req-row_length", "1");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].source-uid", "APIDOC-123");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].action", "delete");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].request-timestamp", "2016-09-09 16:30:35.0");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].request-status", "New");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].processing-status", "New");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].service-clfi", "testClfi1");
+        ctx.setAttribute("tmp.sdn-circuit-req-row[0].clci", "clci");
+
+        Map<String, String> p = new HashMap<String, String>();
+        p.put("templateFileName", "src/test/resources/test-template.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", "false");
+
+        RestapiCallNode rcn = new RestapiCallNode();
+        rcn.sendRequest(p, ctx);
+    }
 }
index 544d259..e8567d5 100644 (file)
@@ -44,10 +44,10 @@ public class TestXmlParser {
         BufferedReader in = new BufferedReader(
                 new InputStreamReader(ClassLoader.getSystemResourceAsStream("test3.xml"))
         );
-        String ss = "";
-        String line = null;
+        StringBuilder b = new StringBuilder();
+        String line;
         while ((line = in.readLine()) != null)
-            ss += line + '\n';
+            b.append(line).append('\n');
 
         Set<String> listNameList = new HashSet<String>();
         listNameList.add("project.dependencies.dependency");
@@ -57,10 +57,8 @@ public class TestXmlParser {
         listNameList.add("project.build.pluginManagement." +
                         "plugins.plugin.configuration.lifecycleMappingMetadata.pluginExecutions.pluginExecution");
 
-        Map<String, String> mm = XmlParser.convertToProperties(ss, listNameList);
-
+        Map<String, String> mm = XmlParser.convertToProperties(b.toString(), listNameList);
         logProperties(mm);
-
         in.close();
     }
 
index a34f7e2..b48eb6b 100644 (file)
             "number-primary-servers": "2",
             "equipment-id": "Server1",
             "server-model": "Unknown",
-            "server-id": "Server1"
+            "server-id": "Server1",
+            "test-node" : {
+                "test-inner-node" : "Test-Value"
+            }
         }
     ],
     "resource-state": {