diff options
4 files changed, 258 insertions, 204 deletions
diff --git a/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/ConfigComponentAdaptor.java b/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/ConfigComponentAdaptor.java index 07e94ef41..415642521 100644 --- a/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/ConfigComponentAdaptor.java +++ b/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/ConfigComponentAdaptor.java @@ -34,6 +34,7 @@ import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.io.UncheckedIOException; import java.net.HttpURLConnection; import java.util.HashMap; import java.util.Map; @@ -47,27 +48,46 @@ import org.onap.ccsdk.sli.core.sli.SvcLogicContext; public class ConfigComponentAdaptor implements SvcLogicAdaptor { private static final EELFLogger log = EELFManager.getInstance().getLogger(ConfigComponentAdaptor.class); + private static final String ACTION_PARAM = "action"; private static final String ACTION_PREPARE = "prepare"; private static final String ACTION_ACTIVATE = "activate"; - private static final String PUT_KEY = "put"; - private static final String GET_KEY = "get"; - private static final String CLI_KEY = "cli"; - private static final String SSH_JCRAFT_WRAPPER_EXCEPTION_STR = "Exception occurred while using sshJcraftWrapper"; + + private static final String KEY_PUT = "put"; + private static final String KEY_GET = "get"; + private static final String KEY_CLI = "cli"; + private static final String KEY_ESCAPE_SQL = "escapeSql"; + private static final String KEY_XML_DOWNLOAD = "xml-download"; + private static final String KEY_XML_GET_RUNNING_CONF = "xml-getrunningconfig"; + private static final String KEY_DOWNLOAD_CLI_CONFIG = "DownloadCliConfig"; + private static final String KEY_GET_CLI_RUNNING_CONFIG = "GetCliRunningConfig"; + + private static final String OPERATION_CREATE = "create"; + private static final String OPERATION_CHANGE = "change"; + private static final String OPERATION_SCALE = "scale"; + + static final String USERNAME_PARAM = "User_name"; + static final String PASSWORD_PARAM = "Password"; + static final String HOST_IP_PARAM = "Host_ip_address"; + static final String PORT_NUMBER_PARAM = "Port_number"; + static final String GET_CONFIG_TEMPLATE_PARAM = "Get_config_template"; + private static final String CLI_OUTPUT_PARAM = "cliOutput"; - private static final String ESCAPE_SQL_KEY = "escapeSql"; - private static final String GET_CLI_RUNNING_CONFIG_KEY = "GetCliRunningConfig"; - private static final String USERNAME_PARAM = "User_name"; - private static final String HOST_IP_PARAM = "Host_ip_address"; - private static final String PASSWORD_PARAM = "Password"; - private static final String PORT_NUMBER = "Port_number"; - private static final String XML_DOWNLOAD_KEY = "xml-download"; + private static final String REQUEST_ID_PARAM = "request-id"; + private static final String CALLBACK_URL_PARAM = "callback-url"; + private static final String EQUIPMENT_NAME_PARAM = "equipment-name"; + + private static final String XML_BUILDING_ERR_STR = "Error building the XML request: "; + private static final String TEMPLATE_ERR_STR = "Template error: Matching \"}\" not found"; + private static final String SSH_JCRAFT_WRAPPER_ERR_STR = "Exception occurred while using sshJcraftWrapper"; private static final String PROMPT_STR = "]]>]]>"; - private static final String RPC_REPLY_END_TAG = "</rpc-reply>"; private static final String RESPONSE_STR = "response=\n{}\n"; - private static final String XML_GET_RUNNING_CONF_KEY = "xml-getrunningconfig"; - private static final String DOWNLOAD_CLI_CONFIG_KEY = "DownloadCliConfig"; + private static final String SERVICE_INSTANCE_ID_ATTR = "service-data.service-information.service-instance-id"; + private static final String SVC_REQUEST_ID_ATTR = "service-data.appc-request-header.svc-request-id"; + + private static final String RPC_REPLY_END_TAG = "</rpc-reply>"; + private static final String BASE_REQUEST = "BASE"; private String configUrl; private String configUser; @@ -125,7 +145,7 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { String chg = ctx.getAttribute( "service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name"); if (chg != null && areEqual(action, ACTION_PREPARE)) { - return prepare(ctx, "CHANGE", "change"); + return prepare(ctx, "CHANGE", OPERATION_CHANGE); } if (chg != null && areEqual(action, ACTION_ACTIVATE)) { return activate(ctx, true); @@ -134,14 +154,14 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { String scale = ctx.getAttribute( "service-data.vnf-config-parameters-list.vnf-config-parameters[0].scale-configuration[0].network-type"); if (scale != null && areEqual(action, ACTION_PREPARE)) { - return prepare(ctx, "CHANGE", "scale"); + return prepare(ctx, "CHANGE", OPERATION_SCALE); } if (scale != null && areEqual(action, ACTION_ACTIVATE)) { return activate(ctx, true); } if (areEqual(action, ACTION_PREPARE)) { - return prepare(ctx, "BASE", "create"); + return prepare(ctx, BASE_REQUEST, OPERATION_CREATE); } if (areEqual(action, ACTION_ACTIVATE)) { return activate(ctx, false); @@ -163,7 +183,7 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { return audit(ctx, "RUNNING"); } - if ((key.equals(PUT_KEY)) || (key.equals(GET_KEY))) { + if ((key.equals(KEY_PUT)) || (key.equals(KEY_GET))) { String loginId = parameters.get("loginId"); String host = parameters.get("host"); String password = parameters.get("password"); @@ -174,7 +194,7 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { log.debug("SCP: SshJcraftWrapper has been instantiated"); try { - if (key.equals(PUT_KEY)) { + if (key.equals(KEY_PUT)) { String data = parameters.get("data"); log.debug("Command is for put: Length of data is: {}", data.length()); InputStream is = new ByteArrayInputStream(data.getBytes()); @@ -190,13 +210,13 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { } return setResponseStatus(ctx, r); } catch (IOException e) { - log.error(SSH_JCRAFT_WRAPPER_EXCEPTION_STR, e); + log.error(SSH_JCRAFT_WRAPPER_ERR_STR, e); r.code = HttpURLConnection.HTTP_INTERNAL_ERROR; r.message = e.getMessage(); return setResponseStatus(ctx, r); } } - if (key.equals(CLI_KEY)) { + if (key.equals(KEY_CLI)) { String loginId = parameters.get("loginId"); String host = parameters.get("host"); String password = parameters.get("password"); @@ -226,45 +246,46 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { r.code = 200; return setResponseStatus(ctx, r); } catch (IOException e) { - log.error(SSH_JCRAFT_WRAPPER_EXCEPTION_STR, e); + log.error(SSH_JCRAFT_WRAPPER_ERR_STR, e); sshJcraftWrapper.closeConnection(); r.code = HttpURLConnection.HTTP_INTERNAL_ERROR; r.message = e.getMessage(); return setResponseStatus(ctx, r); } } - if (key.equals(ESCAPE_SQL_KEY)) { + if (key.equals(KEY_ESCAPE_SQL)) { String data = parameters.get("artifactContents"); log.debug("ConfigComponentAdaptor.configure - escapeSql"); data = escapeMySql(data); ctx.setAttribute("escapedData", data); return setResponseStatus(ctx, r); } - if (key.equals(GET_CLI_RUNNING_CONFIG_KEY)) { - log.debug("key was: " + GET_CLI_RUNNING_CONFIG_KEY); + if (key.equals(KEY_GET_CLI_RUNNING_CONFIG)) { + log.debug("key was: " + KEY_GET_CLI_RUNNING_CONFIG); String username = parameters.get(USERNAME_PARAM); String hostIpAddress = parameters.get(HOST_IP_PARAM); String password = parameters.get(PASSWORD_PARAM); password = EncryptionTool.getInstance().decrypt(password); - String portNumber = parameters.get(PORT_NUMBER); - String getConfigTemplate = parameters.get("Get_config_template"); + String portNumber = parameters.get(PORT_NUMBER_PARAM); + String getConfigTemplate = parameters.get(GET_CONFIG_TEMPLATE_PARAM); SshJcraftWrapper sshJcraftWrapper = new SshJcraftWrapper(); log.debug("GetCliRunningConfig: sshJcraftWrapper was instantiated"); try { log.debug("GetCliRunningConfig: Attempting to login: Host_ip_address=" + hostIpAddress + " User_name=" + username + " Password=" + password + " Port_number=" + portNumber); - boolean showConfigFlag = false; sshJcraftWrapper .connect(hostIpAddress, username, password, "", 30000, Integer.parseInt(portNumber)); log.debug("GetCliRunningConfig: On the VNF device"); StringTokenizer st = new StringTokenizer(getConfigTemplate, "\n"); String command = null; + StringBuilder cliResponse = new StringBuilder(); // shouldn't this be used somewhere? StringBuilder response = new StringBuilder(); + try { while (st.hasMoreTokens()) { String line = st.nextToken(); @@ -307,20 +328,20 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { r.code = 200; return setResponseStatus(ctx, r); } catch (IOException e) { - log.error(SSH_JCRAFT_WRAPPER_EXCEPTION_STR, e); + log.error(SSH_JCRAFT_WRAPPER_ERR_STR, e); sshJcraftWrapper.closeConnection(); r.code = HttpURLConnection.HTTP_INTERNAL_ERROR; r.message = e.getMessage(); return setResponseStatus(ctx, r); } } - if (key.equals(XML_DOWNLOAD_KEY)) { - log.debug("key was: " + XML_DOWNLOAD_KEY); + if (key.equals(KEY_XML_DOWNLOAD)) { + log.debug("key was: " + KEY_XML_DOWNLOAD); String userName = parameters.get(USERNAME_PARAM); String hostIpAddress = parameters.get(HOST_IP_PARAM); String password = parameters.get(PASSWORD_PARAM); password = EncryptionTool.getInstance().decrypt(password); - String portNumber = parameters.get(PORT_NUMBER); + String portNumber = parameters.get(PORT_NUMBER_PARAM); String contents = parameters.get("Contents"); String netconfHelloCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n <capabilities>\n <capability>urn:ietf:params:netconf:base:1.0</capability>\n <capability>urn:com:ericsson:ebase:1.1.0</capability> </capabilities>\n </hello>"; String terminateConnectionCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <rpc message-id=\"terminateConnection\" xmlns:netconf=\"urn:ietf:params:xml:ns:netconf:base:1.0\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n <close-session/> \n </rpc>\n ]]>]]>"; @@ -374,14 +395,14 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { return setResponseStatus(ctx, r); } } - if (key.equals(XML_GET_RUNNING_CONF_KEY)) { + if (key.equals(KEY_XML_GET_RUNNING_CONF)) { log.debug("key was: : xml-getrunningconfig"); String xmlGetRunningConfigCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <rpc xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"1\"> <get-config> <source> <running /> </source> </get-config> </rpc>\n"; String hostIpAddress = parameters.get(HOST_IP_PARAM); String username = parameters.get(USERNAME_PARAM); String password = parameters.get(PASSWORD_PARAM); password = EncryptionTool.getInstance().decrypt(password); - String portNumber = parameters.get(PORT_NUMBER); + String portNumber = parameters.get(PORT_NUMBER_PARAM); String netconfHelloCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n <capabilities>\n <capability>urn:ietf:params:netconf:base:1.0</capability>\n <capability>urn:com:ericsson:ebase:1.1.0</capability> </capabilities>\n </hello>"; String terminateConnectionCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <rpc message-id=\"terminateConnection\" xmlns:netconf=\"urn:ietf:params:xml:ns:netconf:base:1.0\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n <close-session/> \n </rpc>\n ]]>]]>"; log.debug("xml-getrunningconfig: User_name={} Host_ip_address={} Password={} Port_number={}", username, @@ -415,13 +436,13 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { return setResponseStatus(ctx, r); } } - if (key.equals(DOWNLOAD_CLI_CONFIG_KEY)) { + if (key.equals(KEY_DOWNLOAD_CLI_CONFIG)) { log.debug("key was: DownloadCliConfig: "); String username = parameters.get(USERNAME_PARAM); String hostIpAddress = parameters.get(HOST_IP_PARAM); String password = parameters.get(PASSWORD_PARAM); password = EncryptionTool.getInstance().decrypt(password); - String portNumber = parameters.get(PORT_NUMBER); + String portNumber = parameters.get(PORT_NUMBER_PARAM); String downloadConfigTemplate = parameters.get("Download_config_template"); String configContents = parameters.get("Config_contents"); log.debug("Contents of the 'Config_contents' are: {}", configContents); @@ -442,7 +463,7 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { log.debug("DownloadCliConfig: On the VNF device"); StringTokenizer st = new StringTokenizer(downloadConfigTemplate, "\n"); String command = null; - String executeConfigContentsDelemeter; + String executeConfigContentsDelimiter; try { while (st.hasMoreTokens()) { String line = st.nextToken(); @@ -463,15 +484,15 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { cliResponse.append(tmpResponse); } else if (line.contains("Execute_config_contents Response: Ends_With")) { log.debug("Found a 'Execute_config_contents Response:' line={}", line); - executeConfigContentsDelemeter = getStringBetweenQuotes(line); - log.debug("executeConfigContentsDelemeter={}", executeConfigContentsDelemeter); + executeConfigContentsDelimiter = getStringBetweenQuotes(line); + log.debug("executeConfigContentsDelemeter={}", executeConfigContentsDelimiter); StringTokenizer st2 = new StringTokenizer(configContents, "\n"); while (st2.hasMoreTokens()) { String cmd = st2.nextToken(); log.debug("Config_contents: cmd={}", cmd); sshJcraftWrapper.send(cmd); String tmpResponse = sshJcraftWrapper - .receiveUntil(executeConfigContentsDelemeter, timeout, command); + .receiveUntil(executeConfigContentsDelimiter, timeout, command); cliResponse.append(tmpResponse); } } @@ -500,7 +521,6 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { return setResponseStatus(ctx, r); } } - log.debug("Unsupported action - {}", action); return ConfigStatus.FAILURE; } @@ -538,28 +558,29 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { } private ConfigStatus prepare(SvcLogicContext ctx, String requestType, String operation) { - String templateName = requestType.equals("BASE") ? "/config-base.xml" : "/config-data.xml"; - String ndTemplate = readFile(templateName); + String templateName = requestType.equals(BASE_REQUEST) ? "/config-base.xml" : "/config-data.xml"; + String ndTemplate = expandRepeats(ctx, readFile(templateName), 1); String nd = buildNetworkData2(ctx, ndTemplate, operation); String reqTemplate = readFile("/config-request.xml"); - Map<String, String> param = new HashMap<String, String>(); - param.put("request-id", ctx.getAttribute("service-data.appc-request-header.svc-request-id")); + Map<String, String> param = new HashMap<>(); + param.put(REQUEST_ID_PARAM, ctx.getAttribute(SVC_REQUEST_ID_ATTR)); param.put("request-type", requestType); - param.put("callback-url", configCallbackUrl); - if (operation.equals("create") || operation.equals("change") || operation.equals("scale")) { + param.put(CALLBACK_URL_PARAM, configCallbackUrl); + if (operation.equals(OPERATION_CREATE) || operation.equals(OPERATION_CHANGE) + || operation.equals(OPERATION_SCALE)) { param.put(ACTION_PARAM, "GenerateOnly"); } - param.put("equipment-name", ctx.getAttribute("service-data.service-information.service-instance-id")); + param.put(EQUIPMENT_NAME_PARAM, ctx.getAttribute(SERVICE_INSTANCE_ID_ATTR)); param.put("equipment-ip-address", ctx.getAttribute("service-data.vnf-config-information.vnf-host-ip-address")); param.put("vendor", ctx.getAttribute("service-data.vnf-config-information.vendor")); param.put("network-data", nd); - String req = null; + String req; try { req = buildXmlRequest(param, reqTemplate); } catch (Exception e) { - log.error("Error building the XML request: ", e); + log.error(XML_BUILDING_ERR_STR, e); HttpResponse r = new HttpResponse(); r.code = HttpURLConnection.HTTP_INTERNAL_ERROR; @@ -573,17 +594,17 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { private ConfigStatus activate(SvcLogicContext ctx, boolean change) { String reqTemplate = readFile("/config-request.xml"); - Map<String, String> param = new HashMap<String, String>(); - param.put("request-id", ctx.getAttribute("service-data.appc-request-header.svc-request-id")); - param.put("callback-url", configCallbackUrl); + Map<String, String> param = new HashMap<>(); + param.put(REQUEST_ID_PARAM, ctx.getAttribute(SVC_REQUEST_ID_ATTR)); + param.put(CALLBACK_URL_PARAM, configCallbackUrl); param.put(ACTION_PARAM, change ? "DownloadChange" : "DownloadBase"); - param.put("equipment-name", ctx.getAttribute("service-data.service-information.service-instance-id")); + param.put(EQUIPMENT_NAME_PARAM, ctx.getAttribute(SERVICE_INSTANCE_ID_ATTR)); - String req = null; + String req; try { req = buildXmlRequest(param, reqTemplate); } catch (Exception e) { - log.error("Error building the XML request: ", e); + log.error(XML_BUILDING_ERR_STR, e); HttpResponse r = new HttpResponse(); r.code = HttpURLConnection.HTTP_INTERNAL_ERROR; @@ -597,17 +618,17 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { private ConfigStatus audit(SvcLogicContext ctx, String auditLevel) { String reqTemplate = readFile("/audit-request.xml"); - Map<String, String> param = new HashMap<String, String>(); - param.put("request-id", ctx.getAttribute("service-data.appc-request-header.svc-request-id")); - param.put("callback-url", auditCallbackUrl); - param.put("equipment-name", ctx.getAttribute("service-data.service-information.service-instance-id")); + Map<String, String> param = new HashMap<>(); + param.put(REQUEST_ID_PARAM, ctx.getAttribute(SVC_REQUEST_ID_ATTR)); + param.put(CALLBACK_URL_PARAM, auditCallbackUrl); + param.put(EQUIPMENT_NAME_PARAM, ctx.getAttribute(SERVICE_INSTANCE_ID_ATTR)); param.put("audit-level", auditLevel); + String req; - String req = null; try { req = buildXmlRequest(param, reqTemplate); } catch (Exception e) { - log.error("Error building the XML request: ", e); + log.error(XML_BUILDING_ERR_STR, e); HttpResponse r = new HttpResponse(); r.code = HttpURLConnection.HTTP_INTERNAL_ERROR; @@ -634,25 +655,24 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { return null; } - input = input.replace("\\", "\\\\"); - input = input.replace("\'", "\\'"); - return input; - + return input + .replace("\\", "\\\\") + .replace("\'", "\\'"); } private String readFile(String fileName) { InputStream is = getClass().getResourceAsStream(fileName); InputStreamReader isr = new InputStreamReader(is); BufferedReader in = new BufferedReader(isr); - StringBuilder ss = new StringBuilder(); + StringBuilder builder = new StringBuilder(); try { String s = in.readLine(); while (s != null) { - ss.append(s).append('\n'); + builder.append(s).append('\n'); s = in.readLine(); } } catch (IOException e) { - throw new RuntimeException("Error reading " + fileName + ": " + e.getMessage(), e); + throw new UncheckedIOException("Error reading " + fileName, e); } finally { try { in.close(); @@ -670,7 +690,7 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { log.warn("Could not close InputStream", e); } } - return ss.toString(); + return builder.toString(); } private String buildXmlRequest(Map<String, String> param, String template) { @@ -685,12 +705,12 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { int i2 = template.indexOf('}', i1 + 2); if (i2 < 0) { - throw new RuntimeException("Template error: Matching } not found"); + throw new TemplateException(TEMPLATE_ERR_STR); } String var1 = template.substring(i1 + 2, i2); String value1 = param.get(var1); - if (value1 == null || value1.trim().length() == 0) { + if (emptyOrNull(value1)) { // delete the whole element (line) int i3 = template.lastIndexOf('\n', i1); if (i3 < 0) { @@ -718,8 +738,6 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { log.info("Building XML started"); long t1 = System.currentTimeMillis(); - template = expandRepeats(ctx, template, 1); - Map<String, String> mm = new HashMap<>(); for (String s : ctx.getAttributeKeySet()) { mm.put(s, ctx.getAttribute(s)); @@ -737,12 +755,12 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { int i2 = template.indexOf('}', i1 + 2); if (i2 < 0) { - throw new RuntimeException("Template error: Matching } not found"); + throw new TemplateException(TEMPLATE_ERR_STR); } String var1 = template.substring(i1 + 2, i2); String value1 = XmlUtil.getXml(mm, var1); - if (value1 == null || value1.trim().length() == 0) { + if (emptyOrNull(value1)) { int i3 = template.lastIndexOf('\n', i1); if (i3 < 0) { i3 = 0; @@ -768,6 +786,10 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { return ss.toString(); } + private boolean emptyOrNull(String value1) { + return value1 == null || value1.trim().length() == 0; + } + private String expandRepeats(SvcLogicContext ctx, String template, int level) { StringBuilder newTemplate = new StringBuilder(); int k = 0; @@ -780,38 +802,17 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { int i2 = template.indexOf(':', i1 + 9); if (i2 < 0) { - throw new RuntimeException( - "Template error: Context variable name followed by : is required after repeat"); + throw new TemplateException( + "Template error: Context variable name followed by \":\" is required after repeat"); } - // Find the closing }, store in i3 - int nn = 1; - int i3 = -1; - int i = i2; - while (nn > 0 && i < template.length()) { - i3 = template.indexOf('}', i); - if (i3 < 0) { - throw new RuntimeException("Template error: Matching } not found"); - } - int i32 = template.indexOf('{', i); - if (i32 >= 0 && i32 < i3) { - nn++; - i = i32 + 1; - } else { - nn--; - i = i3 + 1; - } - } + // Find the closing "}", store in i3 + int i3 = findLastBracketIndex(template, i2); String var1 = template.substring(i1 + 9, i2); String value1 = ctx.getAttribute(var1); log.info(" " + var1 + ": " + value1); - int n = 0; - try { - n = Integer.parseInt(value1); - } catch (Exception e) { - n = 0; - } + int n = tryParseValue(value1); newTemplate.append(template.substring(k, i1)); @@ -821,17 +822,47 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { String ss = rpt.replaceAll("\\[\\$\\{" + level + "\\}\\]", "[" + ii + "]"); newTemplate.append(ss); } - k = i3 + 1; } if (k == 0) { return newTemplate.toString(); } - return expandRepeats(ctx, newTemplate.toString(), level + 1); } + private int findLastBracketIndex(String template, int i2) { + int i3 = -1; + int i = i2; + int nn = 1; + while (nn > 0 && i < template.length()) { + i3 = template.indexOf('}', i); + if (i3 < 0) { + throw new TemplateException(TEMPLATE_ERR_STR); + } + int i32 = template.indexOf('{', i); + if (i32 >= 0 && i32 < i3) { + nn++; + i = i32 + 1; + } else { + nn--; + i = i3 + 1; + } + } + return i3; + } + + private int tryParseValue(String value1) { + int n; + try { + n = Integer.parseInt(value1); + } catch (Exception e) { + log.error("Failed to parse value. Using default (0).", e); + n = 0; + } + return n; + } + private HttpResponse sendXmlRequest(String xmlRequest, String url, String user, String password) { try { Client client = Client.create(); @@ -897,55 +928,53 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor { } public static String _readFile(String fileName) { - StringBuffer strBuff = new StringBuffer(); + StringBuilder builder = new StringBuilder(); String line; try { BufferedReader in = new BufferedReader(new FileReader(fileName)); while ((line = in.readLine()) != null) { - strBuff.append(line + "\n"); + builder.append(line).append('\n'); } in.close(); } catch (IOException e) { log.error("Caught an IOException in method readFile()", e); } - return (strBuff.toString()); + return builder.toString(); } private String trimResponse(String response) { StringTokenizer line = new StringTokenizer(response, "\n"); - StringBuffer sb = new StringBuffer(); + StringBuilder builder = new StringBuilder(); boolean captureText = false; while (line.hasMoreTokens()) { String token = line.nextToken(); - if (token.indexOf("<configuration xmlns=") != -1) { + if (token.contains("<configuration xmlns=")) { captureText = true; } if (captureText) { - sb.append(token + "\n"); + builder.append(token).append('\n'); } - if (token.indexOf("</configuration>") != -1) { + if (token.contains("</configuration>")) { captureText = false; } } - return (sb.toString()); + return builder.toString(); } - public static void main(String args[]) throws Exception { + public static void main(String[] args) throws Exception { Properties props = null; - System.out.println("*************************Hello*****************************"); + log.info("*************************Hello*****************************"); ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); - String Get_config_template = _readFile("/home/userID/data/Get_config_template"); - String Download_config_template = _readFile("/home/userID/data/Download_config_template_2"); + String getConfigTemplate = _readFile("/home/userID/data/Get_config_template"); String key = "GetCliRunningConfig"; - Map<String, String> parameters = new HashMap(); - parameters.put("Host_ip_address", "000.00.000.00"); - parameters.put("User_name", "root"); - parameters.put("Password", "!bootstrap"); - parameters.put("Port_number", "22"); - parameters.put("Get_config_template", Get_config_template); + Map<String, String> parameters = new HashMap<>(); + parameters.put(HOST_IP_PARAM, "000.00.000.00"); + parameters.put(USERNAME_PARAM, "root"); + parameters.put(PASSWORD_PARAM, "!bootstrap"); + parameters.put(PORT_NUMBER_PARAM, "22"); + parameters.put(GET_CONFIG_TEMPLATE_PARAM, getConfigTemplate); SvcLogicContext ctx = null; - System.out.println("*************************TRACE 1*****************************"); + log.info("*************************TRACE 1*****************************"); cca.configure(key, parameters, ctx); } - } diff --git a/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/TemplateException.java b/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/TemplateException.java new file mode 100644 index 000000000..15d3090c8 --- /dev/null +++ b/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/TemplateException.java @@ -0,0 +1,8 @@ +package org.onap.appc.ccadaptor; + +public class TemplateException extends RuntimeException { + + public TemplateException(String message) { + super(message); + } +} diff --git a/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/TimedOutException.java b/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/TimedOutException.java index 43f40169a..22a95ef11 100644 --- a/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/TimedOutException.java +++ b/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/TimedOutException.java @@ -27,9 +27,6 @@ import java.io.IOException; public class TimedOutException extends IOException { - public TimedOutException() { - } - public TimedOutException(String message) { super(message); } diff --git a/appc-config/appc-config-adaptor/provider/src/test/java/org/onap/appc/ccadaptor/ConfigComponentAdaptorTest.java b/appc-config/appc-config-adaptor/provider/src/test/java/org/onap/appc/ccadaptor/ConfigComponentAdaptorTest.java index e4f3a644e..3e41664da 100644 --- a/appc-config/appc-config-adaptor/provider/src/test/java/org/onap/appc/ccadaptor/ConfigComponentAdaptorTest.java +++ b/appc-config/appc-config-adaptor/provider/src/test/java/org/onap/appc/ccadaptor/ConfigComponentAdaptorTest.java @@ -24,11 +24,15 @@ package org.onap.appc.ccadaptor; -import java.io.IOException; +import static org.onap.appc.ccadaptor.ConfigComponentAdaptor.GET_CONFIG_TEMPLATE_PARAM; +import static org.onap.appc.ccadaptor.ConfigComponentAdaptor.HOST_IP_PARAM; +import static org.onap.appc.ccadaptor.ConfigComponentAdaptor.PASSWORD_PARAM; +import static org.onap.appc.ccadaptor.ConfigComponentAdaptor.PORT_NUMBER_PARAM; +import static org.onap.appc.ccadaptor.ConfigComponentAdaptor.USERNAME_PARAM; + import java.util.HashMap; import java.util.Map; import java.util.Properties; - import org.junit.Assert; import org.junit.Test; import org.onap.ccsdk.sli.core.sli.SvcLogicContext; @@ -38,184 +42,200 @@ public class ConfigComponentAdaptorTest { @Test - public void testGetCliRunningConfig(){ + public void testGetCliRunningConfig() { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); String Get_config_template = ("get_config_template"); String key = "GetCliRunningConfig"; - Map<String, String> parameters = new HashMap<String, String>(); - parameters.put("Host_ip_address", "test"); - parameters.put("User_name", "test"); - parameters.put("Password", "password"); - parameters.put("Port_number", "22"); - parameters.put("Get_config_template", Get_config_template); + Map<String, String> parameters = new HashMap<>(); + parameters.put(HOST_IP_PARAM, "test"); + parameters.put(USERNAME_PARAM, "test"); + parameters.put(PASSWORD_PARAM, "password"); + parameters.put(PORT_NUMBER_PARAM, "22"); + parameters.put(GET_CONFIG_TEMPLATE_PARAM, Get_config_template); SvcLogicContext ctx = new SvcLogicContext(); - ctx.setAttribute("service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", "test"); + ctx.setAttribute( + "service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", + "test"); cca.configure(key, parameters, ctx); } @Test - public void testDownloadCliConfig(){ + public void testDownloadCliConfig() { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); String Get_config_template = ("get_config_template"); String key = "DownloadCliConfig"; - Map<String, String> parameters = new HashMap<String, String>(); - parameters.put("Host_ip_address", "test"); - parameters.put("User_name", "test"); - parameters.put("Password", "password"); - parameters.put("Port_number", "22"); - parameters.put("Get_config_template", Get_config_template); + Map<String, String> parameters = new HashMap<>(); + parameters.put(HOST_IP_PARAM, "test"); + parameters.put(USERNAME_PARAM, "test"); + parameters.put(PASSWORD_PARAM, "password"); + parameters.put(PORT_NUMBER_PARAM, "22"); + parameters.put(GET_CONFIG_TEMPLATE_PARAM, Get_config_template); SvcLogicContext ctx = new SvcLogicContext(); - ctx.setAttribute("service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", "test"); + ctx.setAttribute( + "service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", + "test"); cca.configure(key, parameters, ctx); } @Test - public void testXmlDownload(){ + public void testXmlDownload() { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); String Get_config_template = ("get_config_template"); String key = "xml-download"; - Map<String, String> parameters = new HashMap<String, String>(); - parameters.put("Host_ip_address", "test"); - parameters.put("User_name", "test"); - parameters.put("Password", "password"); - parameters.put("Port_number", "22"); - parameters.put("Get_config_template", Get_config_template); + Map<String, String> parameters = new HashMap<>(); + parameters.put(HOST_IP_PARAM, "test"); + parameters.put(USERNAME_PARAM, "test"); + parameters.put(PASSWORD_PARAM, "password"); + parameters.put(PORT_NUMBER_PARAM, "22"); + parameters.put(GET_CONFIG_TEMPLATE_PARAM, Get_config_template); SvcLogicContext ctx = new SvcLogicContext(); - ctx.setAttribute("service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", "test"); + ctx.setAttribute( + "service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", + "test"); cca.configure(key, parameters, ctx); } @Test - public void testXmlGetrunningconfig(){ + public void testXmlGetrunningconfig() { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); String Get_config_template = ("get_config_template"); String key = "xml-getrunningconfig"; - Map<String, String> parameters = new HashMap<String, String>(); - parameters.put("Host_ip_address", "test"); - parameters.put("User_name", "test"); - parameters.put("Password", "password"); - parameters.put("Port_number", "22"); - parameters.put("Get_config_template", Get_config_template); + Map<String, String> parameters = new HashMap<>(); + parameters.put(HOST_IP_PARAM, "test"); + parameters.put(USERNAME_PARAM, "test"); + parameters.put(PASSWORD_PARAM, "password"); + parameters.put(PORT_NUMBER_PARAM, "22"); + parameters.put(GET_CONFIG_TEMPLATE_PARAM, Get_config_template); SvcLogicContext ctx = new SvcLogicContext(); - ctx.setAttribute("service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", "test"); + ctx.setAttribute( + "service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", + "test"); cca.configure(key, parameters, ctx); } @Test - public void testEscapeSql(){ + public void testEscapeSql() { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); String Get_config_template = ("get_config_template"); String key = "escapeSql"; - Map<String, String> parameters = new HashMap<String, String>(); - parameters.put("Host_ip_address", "test"); - parameters.put("User_name", "test"); - parameters.put("Password", "password"); - parameters.put("Port_number", "22"); - parameters.put("Get_config_template", Get_config_template); + Map<String, String> parameters = new HashMap<>(); + parameters.put(HOST_IP_PARAM, "test"); + parameters.put(USERNAME_PARAM, "test"); + parameters.put(PASSWORD_PARAM, "password"); + parameters.put(PORT_NUMBER_PARAM, "22"); + parameters.put(GET_CONFIG_TEMPLATE_PARAM, Get_config_template); SvcLogicContext ctx = new SvcLogicContext(); - ctx.setAttribute("service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", "test"); + ctx.setAttribute( + "service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", + "test"); cca.configure(key, parameters, ctx); } @Test - public void testAll(){ + public void testAll() { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); String Get_config_template = ("test"); String Download_config_template = ("test"); String key = "GetCliRunningConfig"; - Map<String, String> parameters = new HashMap<String,String>(); - parameters.put("Host_ip_address", "test"); - parameters.put("User_name", "test"); - parameters.put("Password", "password"); - parameters.put("Port_number", "22"); + Map<String, String> parameters = new HashMap<>(); + parameters.put(HOST_IP_PARAM, "test"); + parameters.put(USERNAME_PARAM, "test"); + parameters.put(PASSWORD_PARAM, "password"); + parameters.put(PORT_NUMBER_PARAM, "22"); parameters.put("Protocol", "netconf"); parameters.put("Contents", "Contents"); - parameters.put("Get_config_template", Get_config_template); + parameters.put(GET_CONFIG_TEMPLATE_PARAM, Get_config_template); parameters.put("Download_config_template", Download_config_template); parameters.put("Config_contents", "test"); SvcLogicContext ctx = new SvcLogicContext(); - ctx.setAttribute("service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", "test"); + ctx.setAttribute( + "service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", + "test"); cca.configure(key, parameters, ctx); } @Test - public void testAll1(){ + public void testAll1() { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); String key = "get"; - Map<String, String> parameters = new HashMap<String,String>(); + Map<String, String> parameters = new HashMap<>(); parameters.put("Host_ip_address", "test"); SvcLogicContext ctx = new SvcLogicContext(); - ctx.setAttribute("service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", "test"); + ctx.setAttribute( + "service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", + "test"); cca.configure(key, parameters, ctx); } @Test - public void testAll2(){ + public void testAll2() { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); String key = "cli"; - Map<String, String> parameters = new HashMap<String,String>(); + Map<String, String> parameters = new HashMap<String, String>(); parameters.put("Host_ip_address", "test"); SvcLogicContext ctx = new SvcLogicContext(); - ctx.setAttribute("service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", "test"); + ctx.setAttribute( + "service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name", + "test"); cca.configure(key, parameters, ctx); } @Test - public void testGetStringBetweenQuotes() throws Exception{ + public void testGetStringBetweenQuotes() throws Exception { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); - String result =Whitebox.invokeMethod(cca, "getStringBetweenQuotes","\"testvalue\""); + String result = Whitebox.invokeMethod(cca, "getStringBetweenQuotes", "\"testvalue\""); Assert.assertEquals("testvalue", result); } @Test - public void testBuildXmlRequest() throws Exception{ + public void testBuildXmlRequest() throws Exception { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); - Map<String, String> param = new HashMap<String,String>(); - Whitebox.invokeMethod(cca, "buildXmlRequest",param,"template"); + Map<String, String> param = new HashMap<>(); + Whitebox.invokeMethod(cca, "buildXmlRequest", param, "template"); } @Test - public void testTrimResponse() throws Exception{ + public void testTrimResponse() throws Exception { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); - String result =Whitebox.invokeMethod(cca, "trimResponse","testData"); + String result = Whitebox.invokeMethod(cca, "trimResponse", "testData"); Assert.assertEquals("", result); } @Test - public void testBuildNetworkData2() throws Exception{ + public void testBuildNetworkData2() throws Exception { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); SvcLogicContext ctx = new SvcLogicContext(); - String result =Whitebox.invokeMethod(cca, "buildNetworkData2",ctx,"template","operation"); + String result = Whitebox.invokeMethod(cca, "buildNetworkData2", ctx, "template", "operation"); Assert.assertEquals("template", result); } //@Test - public void testGetLastFewLinesOfFile() throws Exception{ + public void testGetLastFewLinesOfFile() throws Exception { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); - Whitebox.invokeMethod(cca, "readFile","test"); + Whitebox.invokeMethod(cca, "readFile", "test"); } @Test - public void testConnect() throws Exception{ + public void testConnect() throws Exception { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); SvcLogicContext ctx = new SvcLogicContext(); @@ -223,30 +243,30 @@ public class ConfigComponentAdaptorTest { } - @Test(expected=Exception.class) - public void testActivate() throws Exception{ + @Test(expected = Exception.class) + public void testActivate() throws Exception { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); SvcLogicContext ctx = new SvcLogicContext(); - String result =Whitebox.invokeMethod(cca, "activate",ctx,true); + String result = Whitebox.invokeMethod(cca, "activate", ctx, true); Assert.assertEquals("template", result); } - @Test(expected=Exception.class) - public void testAudit() throws Exception{ + @Test(expected = Exception.class) + public void testAudit() throws Exception { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); SvcLogicContext ctx = new SvcLogicContext(); - String result =Whitebox.invokeMethod(cca, "audit",ctx,"test"); + String result = Whitebox.invokeMethod(cca, "audit", ctx, "test"); Assert.assertEquals("template", result); } - @Test(expected=Exception.class) - public void testPrepare() throws Exception{ + @Test(expected = Exception.class) + public void testPrepare() throws Exception { Properties props = null; ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props); SvcLogicContext ctx = new SvcLogicContext(); - String result =Whitebox.invokeMethod(cca, "prepare",ctx,"test","test"); + String result = Whitebox.invokeMethod(cca, "prepare", ctx, "test", "test"); Assert.assertEquals("template", result); } } |