From cfc8a7b22d30696a227a410aaf17ac3110d6b59d Mon Sep 17 00:00:00 2001 From: kurczews Date: Thu, 15 Feb 2018 14:51:07 +0100 Subject: [PATCH] Improve coverage in flow/controller/node * Extract separate class for property loading * Extract separate class for extracting uri * Add coverage for changes above Change-Id: Ibffa09c96aef2764188cba69bf8cb559c8a9c10e Issue-ID: APPC-440 Signed-off-by: kurczews --- .../appc/flow/controller/node/FlowControlNode.java | 2 +- .../appc/flow/controller/node/JsonParsingNode.java | 2 +- .../flow/controller/node/PropertiesLoader.java | 20 ++ .../flow/controller/node/ResourceUriExtractor.java | 72 +++++ .../appc/flow/controller/node/RestServiceNode.java | 259 +++++++--------- .../controller/utils/FlowControllerConstants.java | 2 +- .../flow/controller/node/PropertiesLoaderTest.java | 29 ++ .../controller/node/ResourceUriExtractorTest.java | 90 ++++++ .../node/TestRestServiceNode.java | 9 +- .../flow/executor/node/FlowControlNodeTest.java | 330 ++++++++++----------- .../test/resources/properties_loader.properties | 1 + 11 files changed, 489 insertions(+), 327 deletions(-) create mode 100644 appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/PropertiesLoader.java create mode 100644 appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/ResourceUriExtractor.java create mode 100644 appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/controller/node/PropertiesLoaderTest.java create mode 100644 appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/controller/node/ResourceUriExtractorTest.java rename appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/{executor => controller}/node/TestRestServiceNode.java (95%) create mode 100644 appc-config/appc-flow-controller/provider/src/test/resources/properties_loader.properties diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/FlowControlNode.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/FlowControlNode.java index b8ace760a..baca94b36 100644 --- a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/FlowControlNode.java +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/FlowControlNode.java @@ -73,7 +73,7 @@ public class FlowControlNode implements SvcLogicJavaPlugin { public void processFlow(Map inParams, SvcLogicContext ctx) throws SvcLogicException { log.debug("Received processParamKeys call with params : " + inParams); - String responsePrefix = inParams.get(FlowControllerConstants.INPUT_PARAM_RESPONSE_PRIFIX); + String responsePrefix = inParams.get(FlowControllerConstants.INPUT_PARAM_RESPONSE_PREFIX); try { responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix + ".") : ""; SvcLogicContext localContext = new SvcLogicContext(); diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/JsonParsingNode.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/JsonParsingNode.java index 6a987df74..42f38ba46 100644 --- a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/JsonParsingNode.java +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/JsonParsingNode.java @@ -44,7 +44,7 @@ public class JsonParsingNode implements SvcLogicJavaPlugin { public void parse(Map inParams, SvcLogicContext ctx) throws SvcLogicException { String fn = "RestServiceNode.sendRequest"; log.info("Received processParamKeys call with params : " + inParams); - String responsePrefix = inParams.get(FlowControllerConstants.INPUT_PARAM_RESPONSE_PRIFIX); + String responsePrefix = inParams.get(FlowControllerConstants.INPUT_PARAM_RESPONSE_PREFIX); responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix + ".") : ""; try { //Remove below for Block diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/PropertiesLoader.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/PropertiesLoader.java new file mode 100644 index 000000000..28792bb10 --- /dev/null +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/PropertiesLoader.java @@ -0,0 +1,20 @@ +package org.onap.appc.flow.controller.node; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +class PropertiesLoader { + + private PropertiesLoader() {} + + static Properties load(String path) throws IOException { + Properties props = new Properties(); + try (InputStream propStream = new FileInputStream(path)) { + props.load(propStream); + } + return props; + } + +} diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/ResourceUriExtractor.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/ResourceUriExtractor.java new file mode 100644 index 000000000..3cfea31a2 --- /dev/null +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/ResourceUriExtractor.java @@ -0,0 +1,72 @@ +package org.onap.appc.flow.controller.node; + +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.HTTP; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_CONTEXT; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_HOST_IP_ADDRESS; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_PORT_NUMBER; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_REQUEST_ACTION; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_SUB_CONTEXT; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_URL; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import java.util.Properties; +import org.apache.commons.lang.StringUtils; +import org.onap.ccsdk.sli.core.sli.SvcLogicContext; + +/** + * Helper class for RestServiceNode + */ +class ResourceUriExtractor { + + private static final EELFLogger log = EELFManager.getInstance().getLogger(RestServiceNode.class); + + private ResourceUriExtractor() { + } + + static String extractResourceUri(SvcLogicContext ctx, Properties prop) throws Exception { + String resourceUri = ctx.getAttribute(INPUT_URL); + + if (StringUtils.isBlank(resourceUri)) { + resourceUri = getAddress(ctx); + log.info("resourceUri= " + resourceUri); + resourceUri += getContext(ctx, prop); + log.info("resourceUri= " + resourceUri); + resourceUri += getSubContext(ctx, prop); + } + log.info("resourceUri= " + resourceUri); + + return resourceUri; + } + + private static String getAddress(SvcLogicContext ctx) { + String address = ctx.getAttribute(INPUT_HOST_IP_ADDRESS); + String port = ctx.getAttribute(INPUT_PORT_NUMBER); + return HTTP + address + ":" + port; + } + + private static String getContext(SvcLogicContext ctx, Properties prop) { + String context; + if (StringUtils.isNotBlank(ctx.getAttribute(INPUT_CONTEXT))) { + context = "/" + ctx.getAttribute(INPUT_CONTEXT); + } else if (prop.getProperty(ctx.getAttribute(INPUT_REQUEST_ACTION) + ".context") != null) { + context = "/" + prop.getProperty(ctx.getAttribute(INPUT_REQUEST_ACTION) + ".context"); + } else { + throw new IllegalArgumentException("Could Not found the context for operation " + ctx.getAttribute(INPUT_REQUEST_ACTION)); + } + return context; + } + + private static String getSubContext(SvcLogicContext ctx, Properties prop) { + String subContext; + if (StringUtils.isNotBlank(ctx.getAttribute(INPUT_SUB_CONTEXT))) { + subContext = "/" + ctx.getAttribute(INPUT_SUB_CONTEXT); + } else if (prop.getProperty(ctx.getAttribute(INPUT_REQUEST_ACTION) + ".sub-context") != null) { + subContext = "/" + prop.getProperty(ctx.getAttribute(INPUT_REQUEST_ACTION) + ".sub-context"); + } else { + throw new IllegalArgumentException("Could Not found the sub context for operation " + ctx.getAttribute(INPUT_REQUEST_ACTION)); + } + return subContext; + } + +} diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/RestServiceNode.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/RestServiceNode.java index d931e47f6..9d7f6e879 100644 --- a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/RestServiceNode.java +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/RestServiceNode.java @@ -22,140 +22,101 @@ package org.onap.appc.flow.controller.node; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.APPC_FLOW_CONTROLLER; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_PARAM_RESPONSE_PREFIX; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_REQUEST_ACTION; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_REQUEST_ACTION_TYPE; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.OUTPUT_PARAM_ERROR_MESSAGE; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.OUTPUT_PARAM_STATUS; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.OUTPUT_STATUS_FAILURE; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.OUTPUT_STATUS_MESSAGE; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.OUTPUT_STATUS_SUCCESS; + import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; import java.util.Map; import java.util.Properties; import org.apache.commons.lang3.StringUtils; import org.onap.appc.flow.controller.data.Transaction; import org.onap.appc.flow.controller.executorImpl.RestExecutor; -import org.onap.appc.flow.controller.utils.FlowControllerConstants; import org.onap.ccsdk.sli.core.sli.SvcLogicContext; import org.onap.ccsdk.sli.core.sli.SvcLogicException; import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin; public class RestServiceNode implements SvcLogicJavaPlugin { - private static final EELFLogger log = EELFManager.getInstance().getLogger(RestServiceNode.class); - private static final String SDNC_CONFIG_DIR_VAR = "SDNC_CONFIG_DIR"; - - public void sendRequest(Map inParams, SvcLogicContext ctx) throws SvcLogicException { - String fn = "RestServiceNode.sendRequest"; - log.info("Received processParamKeys call with params : " + inParams); - String responsePrefix = inParams.get(FlowControllerConstants.INPUT_PARAM_RESPONSE_PRIFIX); - try { - responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix + ".") : ""; - //Remove below for Block - for (Object key : ctx.getAttributeKeySet()) { - String parmName = (String) key; - String parmValue = ctx.getAttribute(parmName); - log.info(fn + "Getting Key = " + parmName + "and Value = " + parmValue); - } - - send(ctx, inParams); - ctx.setAttribute(responsePrefix + FlowControllerConstants.OUTPUT_PARAM_STATUS, - FlowControllerConstants.OUTPUT_STATUS_SUCCESS); - - } catch (Exception e) { - ctx.setAttribute(responsePrefix + FlowControllerConstants.OUTPUT_PARAM_STATUS, - FlowControllerConstants.OUTPUT_STATUS_FAILURE); - ctx.setAttribute(responsePrefix + FlowControllerConstants.OUTPUT_PARAM_ERROR_MESSAGE, - e.getMessage()); - log.error("Error Message : " + e.getMessage(), e); - throw new SvcLogicException(e.getMessage()); - } + private static final EELFLogger log = EELFManager.getInstance().getLogger(RestServiceNode.class); + private static final String SDNC_CONFIG_DIR_VAR = "SDNC_CONFIG_DIR"; + + public void sendRequest(Map inParams, SvcLogicContext ctx) + throws SvcLogicException { + String fn = "RestServiceNode.sendRequest"; + log.info("Received processParamKeys call with params : " + inParams); + String responsePrefix = inParams.get(INPUT_PARAM_RESPONSE_PREFIX); + try { + responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix + ".") : ""; + //Remove below for Block + for (Object key : ctx.getAttributeKeySet()) { + String parmName = (String) key; + String parmValue = ctx.getAttribute(parmName); + log.info(fn + "Getting Key = " + parmName + "and Value = " + parmValue); + } + + send(ctx, inParams); + ctx.setAttribute(responsePrefix + OUTPUT_PARAM_STATUS, OUTPUT_STATUS_SUCCESS); + + } catch (Exception e) { + ctx.setAttribute(responsePrefix + OUTPUT_PARAM_STATUS, OUTPUT_STATUS_FAILURE); + ctx.setAttribute(responsePrefix + OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage()); + log.error("Error Message : " + e.getMessage(), e); + throw new SvcLogicException(e.getMessage()); } - - private void send(SvcLogicContext ctx, Map inParams) throws Exception { - try { - Properties prop = loadProperties(); - log.info("Loaded Properties " + prop.toString()); - String responsePrefix = inParams.get(FlowControllerConstants.INPUT_PARAM_RESPONSE_PRIFIX); - String resourceUri = ""; - if (ctx.getAttribute(FlowControllerConstants.INPUT_URL) != null - && !(ctx.getAttribute(FlowControllerConstants.INPUT_URL).isEmpty())) { - resourceUri = ctx.getAttribute(FlowControllerConstants.INPUT_URL); - - } else { - resourceUri = resourceUri.concat(FlowControllerConstants.HTTP); - log.info("resourceUri= " + resourceUri ); - resourceUri = resourceUri.concat(ctx.getAttribute(FlowControllerConstants.INPUT_HOST_IP_ADDRESS)); - resourceUri = resourceUri.concat(":"); - resourceUri = resourceUri.concat(ctx.getAttribute(FlowControllerConstants.INPUT_PORT_NUMBER)); - - if (ctx.getAttribute(FlowControllerConstants.INPUT_CONTEXT) != null - && !ctx.getAttribute(FlowControllerConstants.INPUT_CONTEXT).isEmpty()) { - resourceUri = resourceUri - .concat("/") - .concat(ctx.getAttribute(FlowControllerConstants.INPUT_CONTEXT)); - log.info("resourceUri= " + resourceUri ); - - } else if (prop.getProperty(ctx.getAttribute(FlowControllerConstants.INPUT_REQUEST_ACTION) - .concat(".context")) != null ) { - log.info("resourceUri = " + resourceUri ); - resourceUri = resourceUri - .concat("/") - .concat(prop.getProperty(ctx.getAttribute(FlowControllerConstants.INPUT_REQUEST_ACTION) - .concat(".context"))); - - } else { - throw new Exception("Could Not found the context for operation " - + ctx.getAttribute(FlowControllerConstants.INPUT_REQUEST_ACTION)); - } - - if (ctx.getAttribute(FlowControllerConstants.INPUT_SUB_CONTEXT) != null - && !ctx.getAttribute(FlowControllerConstants.INPUT_SUB_CONTEXT).isEmpty()) { - resourceUri = resourceUri - .concat("/") - .concat(ctx.getAttribute(FlowControllerConstants.INPUT_SUB_CONTEXT)); - log.info("resourceUri" + resourceUri ); - - } else if (prop.getProperty(ctx.getAttribute(FlowControllerConstants.INPUT_REQUEST_ACTION) - .concat(".sub-context")) != null ) { - resourceUri = resourceUri - .concat("/") - .concat(prop.getProperty(ctx.getAttribute(FlowControllerConstants.INPUT_REQUEST_ACTION) - .concat(".sub-context"))); - log.info("resourceUri" + resourceUri ); - } - } - log.info("Rest Constructed URL : " + resourceUri); - - Transaction transaction = new Transaction(); - transaction.setExecutionEndPoint(resourceUri); - transaction.setExecutionRPC(ctx.getAttribute(FlowControllerConstants.INPUT_REQUEST_ACTION_TYPE)); - transaction.setAction(FlowControllerConstants.INPUT_REQUEST_ACTION); - if (ctx.getAttribute(FlowControllerConstants.INPUT_REQUEST_ACTION_TYPE) == null - || ctx.getAttribute(FlowControllerConstants.INPUT_REQUEST_ACTION_TYPE).isEmpty()) { - throw new Exception("Dont know REST operation for Action " + transaction.getExecutionRPC()); - } - if (ctx.getAttribute(FlowControllerConstants.INPUT_REQUEST_ACTION) == null - || ctx.getAttribute(FlowControllerConstants.INPUT_REQUEST_ACTION).isEmpty()) { - throw new Exception("Dont know request-action " + transaction.getAction()); - } - - //This code need to get changed to get the UserID and pass from a common place. - if (transaction.getuId() == null) { - transaction.setuId(prop.getProperty(ctx.getAttribute(FlowControllerConstants.INPUT_REQUEST_ACTION) - .concat(".default-rest-user"))); - } - if (transaction.getPswd() == null) { - transaction.setPswd(prop.getProperty(ctx.getAttribute(FlowControllerConstants.INPUT_REQUEST_ACTION) - .concat(".default-rest-pass"))); - } - - RestExecutor restRequestExecutor = new RestExecutor(); - Map output = restRequestExecutor.execute(transaction, ctx); - - if (isValidJson(output.get("restResponse")) != null) { - ctx.setAttribute(responsePrefix + "." + FlowControllerConstants.OUTPUT_STATUS_MESSAGE, - output.get("restResponse")); + } + + private void send(SvcLogicContext ctx, Map inParams) throws Exception { + try { + Properties prop = loadProperties(); + log.info("Loaded Properties " + prop.toString()); + String responsePrefix = inParams.get(INPUT_PARAM_RESPONSE_PREFIX); + String resourceUri = ResourceUriExtractor.extractResourceUri(ctx, prop); + log.info("Rest Constructed URL : " + resourceUri); + + Transaction transaction = new Transaction(); + transaction.setExecutionEndPoint(resourceUri); + transaction + .setExecutionRPC(ctx.getAttribute(INPUT_REQUEST_ACTION_TYPE)); + transaction.setAction(INPUT_REQUEST_ACTION); + if (ctx.getAttribute(INPUT_REQUEST_ACTION_TYPE) == null + || ctx.getAttribute(INPUT_REQUEST_ACTION_TYPE).isEmpty()) { + throw new Exception("Dont know REST operation for Action " + transaction.getExecutionRPC()); + } + if (ctx.getAttribute(INPUT_REQUEST_ACTION) == null + || ctx.getAttribute(INPUT_REQUEST_ACTION).isEmpty()) { + throw new Exception("Dont know request-action " + transaction.getAction()); + } + + //This code need to get changed to get the UserID and pass from a common place. + if (transaction.getuId() == null) { + transaction + .setuId(prop.getProperty(ctx.getAttribute(INPUT_REQUEST_ACTION) + .concat(".default-rest-user"))); + } + if (transaction.getPswd() == null) { + transaction + .setPswd(prop.getProperty(ctx.getAttribute(INPUT_REQUEST_ACTION) + .concat(".default-rest-pass"))); + } + + RestExecutor restRequestExecutor = new RestExecutor(); + Map output = restRequestExecutor.execute(transaction, ctx); + + if (isValidJson(output.get("restResponse")) != null) { + ctx.setAttribute(responsePrefix + "." + OUTPUT_STATUS_MESSAGE, + output.get("restResponse")); // JsonNode restResponse = isValidJson(output.get("restResponse")); // for (String key : inParams.keySet()) { // if(key !=null && key.startsWith("output-")){ @@ -169,46 +130,38 @@ public class RestServiceNode implements SvcLogicJavaPlugin { // ctx.setAttribute(responsePrefix + "." + key, null); // } // } - } - log.info("Response from Rest :" ); + } + log.info("Response from Rest :"); - } catch(Exception e) { - log.error("Error Message: " + e.getMessage(), e); - throw e; - } + } catch (Exception e) { + log.error("Error Message: " + e.getMessage(), e); + throw e; } + } - private Properties loadProperties() throws Exception { - Properties props = new Properties(); - String propDir = System.getenv(SDNC_CONFIG_DIR_VAR); - if (propDir == null) { - throw new Exception("Cannot find Property file -" + SDNC_CONFIG_DIR_VAR); - } - String propFile = propDir + FlowControllerConstants.APPC_FLOW_CONTROLLER; - try (InputStream propStream = new FileInputStream(propFile)) { - - props.load(propStream); - } - catch (Exception e) { - throw new Exception("Could not load properties file " + propFile, e); - } - return props; + private Properties loadProperties() throws Exception { + String directory = System.getenv(SDNC_CONFIG_DIR_VAR); + if (directory == null) { + throw new Exception("Cannot find Property file: " + SDNC_CONFIG_DIR_VAR); } - - private JsonNode isValidJson(String json) throws IOException { - JsonNode output; - log.info("Received response from Interface " + json); - if (json == null || json.isEmpty()) { - return null; - } - try { - ObjectMapper objectMapper = new ObjectMapper(); - output = objectMapper.readTree(json); - } catch(JsonProcessingException e) { - log.warn("Response received from interface is not a valid JSON block" + json, e); - return null; - } - log.info("state is " + output.findValue("state")); - return output; + String path = directory + APPC_FLOW_CONTROLLER; + return PropertiesLoader.load(path); + } + + private JsonNode isValidJson(String json) throws IOException { + JsonNode output; + log.info("Received response from Interface " + json); + if (json == null || json.isEmpty()) { + return null; + } + try { + ObjectMapper objectMapper = new ObjectMapper(); + output = objectMapper.readTree(json); + } catch (JsonProcessingException e) { + log.warn("Response received from interface is not a valid JSON block" + json, e); + return null; } + log.info("state is " + output.findValue("state")); + return output; + } } diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/utils/FlowControllerConstants.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/utils/FlowControllerConstants.java index b67f19329..502438c31 100644 --- a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/utils/FlowControllerConstants.java +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/utils/FlowControllerConstants.java @@ -32,7 +32,7 @@ public class FlowControllerConstants { public static final String DATA_TYPE_XML = "XML"; public static final String DATA_TYPE_SQL = "SQL"; - public static final String INPUT_PARAM_RESPONSE_PRIFIX = "responsePrefix"; + public static final String INPUT_PARAM_RESPONSE_PREFIX = "responsePrefix"; public static final String OUTPUT_PARAM_STATUS = "status"; public static final String OUTPUT_PARAM_ERROR_MESSAGE = "error-message"; diff --git a/appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/controller/node/PropertiesLoaderTest.java b/appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/controller/node/PropertiesLoaderTest.java new file mode 100644 index 000000000..66bf802c3 --- /dev/null +++ b/appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/controller/node/PropertiesLoaderTest.java @@ -0,0 +1,29 @@ +package org.onap.appc.flow.controller.node; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Properties; +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +public class PropertiesLoaderTest { + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Test + public void should_load_property_file() throws IOException { + Properties properties = PropertiesLoader.load("src/test/resources/properties_loader.properties"); + + Assert.assertEquals("OK", properties.getProperty("test")); + } + + @Test + public void should_throw_if_file_does_not_exists() throws IOException { + expectedException.expect(FileNotFoundException.class); + PropertiesLoader.load("src/test/resources/non_existent.properties"); + } + +} \ No newline at end of file diff --git a/appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/controller/node/ResourceUriExtractorTest.java b/appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/controller/node/ResourceUriExtractorTest.java new file mode 100644 index 000000000..d7a853d2e --- /dev/null +++ b/appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/controller/node/ResourceUriExtractorTest.java @@ -0,0 +1,90 @@ +package org.onap.appc.flow.controller.node; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_CONTEXT; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_HOST_IP_ADDRESS; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_PORT_NUMBER; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_REQUEST_ACTION; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_SUB_CONTEXT; +import static org.onap.appc.flow.controller.utils.FlowControllerConstants.INPUT_URL; + +import java.util.Properties; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.onap.ccsdk.sli.core.sli.SvcLogicContext; + +public class ResourceUriExtractorTest { + + private Properties prop; + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Before + public void setUp() { + prop = new Properties(); + } + + @Test + public void should_return_input_url_if_exist() throws Exception { + SvcLogicContext ctx = mock(SvcLogicContext.class); + when(ctx.getAttribute(INPUT_URL)).thenReturn("test resource uri"); + + String resourceUri = ResourceUriExtractor.extractResourceUri(ctx, prop); + + Assert.assertEquals("test resource uri", resourceUri); + } + + @Test + public void should_extract_url_input_if_context_input_provided() throws Exception { + SvcLogicContext ctx = mock(SvcLogicContext.class); + + when(ctx.getAttribute(INPUT_URL)).thenReturn(""); + when(ctx.getAttribute(INPUT_HOST_IP_ADDRESS)).thenReturn("localhost"); + when(ctx.getAttribute(INPUT_PORT_NUMBER)).thenReturn("8080"); + + when(ctx.getAttribute(INPUT_CONTEXT)).thenReturn("input-context"); + when(ctx.getAttribute(INPUT_SUB_CONTEXT)).thenReturn("input-sub-context"); + + String resourceUri = ResourceUriExtractor.extractResourceUri(ctx, prop); + + Assert.assertEquals("http://localhost:8080/input-context/input-sub-context", resourceUri); + } + + @Test + public void should_extract_url_input_if_request_action_provided() throws Exception { + SvcLogicContext ctx = mock(SvcLogicContext.class); + + when(ctx.getAttribute(INPUT_URL)).thenReturn(""); + when(ctx.getAttribute(INPUT_HOST_IP_ADDRESS)).thenReturn("localhost"); + when(ctx.getAttribute(INPUT_PORT_NUMBER)).thenReturn("8080"); + + when(ctx.getAttribute(INPUT_REQUEST_ACTION)).thenReturn("request-action"); + when(ctx.getAttribute(INPUT_REQUEST_ACTION)).thenReturn("request-action"); + + prop.put("request-action.context", "ra-context"); + prop.put("request-action.sub-context", "ra-sub-context"); + + String resourceUri = ResourceUriExtractor.extractResourceUri(ctx, prop); + + Assert.assertEquals("http://localhost:8080/ra-context/ra-sub-context", resourceUri); + } + + @Test + public void should_throw_exception_if_missing_context() throws Exception { + SvcLogicContext ctx = mock(SvcLogicContext.class); + + when(ctx.getAttribute(INPUT_URL)).thenReturn(""); + when(ctx.getAttribute(INPUT_HOST_IP_ADDRESS)).thenReturn("localhost"); + when(ctx.getAttribute(INPUT_PORT_NUMBER)).thenReturn("8080"); + + expectedException.expect(Exception.class); + expectedException.expectMessage("Could Not found the context for operation null"); + ResourceUriExtractor.extractResourceUri(ctx, prop); + } + +} \ No newline at end of file diff --git a/appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/executor/node/TestRestServiceNode.java b/appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/controller/node/TestRestServiceNode.java similarity index 95% rename from appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/executor/node/TestRestServiceNode.java rename to appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/controller/node/TestRestServiceNode.java index eb5bfd2fe..a6a207db7 100644 --- a/appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/executor/node/TestRestServiceNode.java +++ b/appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/controller/node/TestRestServiceNode.java @@ -20,19 +20,16 @@ * ECOMP is a trademark and service mark of AT&T Intellectual Property. * ============LICENSE_END========================================================= */ -package org.onap.appc.flow.executor.node; +package org.onap.appc.flow.controller.node; +import java.util.HashMap; +import java.util.Map; import org.junit.Test; import org.onap.appc.flow.controller.data.Transaction; import org.onap.appc.flow.controller.executorImpl.RestExecutor; -import org.onap.appc.flow.controller.node.FlowControlNode; -import org.onap.appc.flow.controller.node.RestServiceNode; import org.onap.appc.flow.controller.utils.FlowControllerConstants; import org.onap.ccsdk.sli.core.sli.SvcLogicContext; -import java.util.HashMap; -import java.util.Map; - public class TestRestServiceNode { @Test(expected=Exception.class) diff --git a/appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/executor/node/FlowControlNodeTest.java b/appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/executor/node/FlowControlNodeTest.java index f29628dcc..c94816937 100644 --- a/appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/executor/node/FlowControlNodeTest.java +++ b/appc-config/appc-flow-controller/provider/src/test/java/org/onap/appc/flow/executor/node/FlowControlNodeTest.java @@ -1,165 +1,165 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP : APPC - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Copyright (C) 2017 Amdocs - * ============================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * ============LICENSE_END========================================================= - */ - -package org.onap.appc.flow.executor.node; - -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.verify; - -import java.io.FileInputStream; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; - -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Ignore; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.onap.appc.flow.controller.data.Transaction; -import org.onap.appc.flow.controller.data.Transactions; -import org.onap.appc.flow.controller.dbervices.FlowControlDBService; -import org.onap.appc.flow.controller.node.FlowControlNode; -import org.onap.appc.flow.controller.utils.FlowControllerConstants; -import org.onap.ccsdk.sli.core.sli.SvcLogicContext; -import org.onap.ccsdk.sli.core.sli.SvcLogicException; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.reflect.Whitebox; - -public class FlowControlNodeTest { - @Mock - FlowControlDBService dbservice = FlowControlDBService.initialise(); - @Mock - FlowControlNode f = new FlowControlNode(); - - Properties props = new Properties(); - private static final String SDNC_CONFIG_DIR_VAR = "SDNC_CONFIG_DIR"; - @Before - public void setUp() throws Exception - - { - FlowControlDBService dbservice = FlowControlDBService.initialise(); - } - @Ignore("Test is taking 60 seconds") - @Test(expected=Exception.class) - public final void testProcessFlow() throws Exception { - SvcLogicContext ctx = new SvcLogicContext(); - - ctx.setAttribute("request-id","test"); - ctx.setAttribute("vnf-type","test"); - ctx.setAttribute("action-level","HealthCheck"); - ctx.setAttribute("request-action","HealthCheck"); - ctx.setAttribute("response-prefix","response-prefix"); - - Map inParams = new HashMap(); - inParams.put("responsePrefix", "responsePrefix"); - - - Whitebox.invokeMethod(f, "processFlow",inParams, ctx); - /*Properties props = new Properties(); - PowerMockito.spy(FlowControlNode.class); - Transactions trans =null; - HashMap transactionMap = null; - String artifact_content="{‘PlaybookName’:’service_start’,‘EnvParameters’:{‘vnf_instance’:’$vnf_instance’},’Timeout’:600}"; - String capabilitiesData = "SUCCESS"; - System.out.println("End Test when");*/ - - - } - @Test - public void testgetInventoryInfo() throws Exception - { - SvcLogicContext ctx = new SvcLogicContext(); - String vnfid = "test"; - ctx.setAttribute( " tmp.vnfInfo.vnf.vnf-name","test"); - ctx.setAttribute("tmp.vnfInfo.vm-count", "0"); - ctx.setAttribute( " tmp.vnfInfo.vnf.vnf-type","test"); - ctx.setAttribute( "tmp.vnfInfo.vm[0 ].vserverId","test" ); - ctx.setAttribute( "tmp.vnfInfo.vm[0 ].vnfc-name","test" ); - ctx.setAttribute( "tmp.vnfInfo.vm[0].vnfc-type","test" ); - ctx.setAttribute( " tmp.vnfInfo.vm[0].vnfc-count","1"); - - Whitebox.invokeMethod(f, "getInventoryInfo", ctx, vnfid); - - } - @Ignore("Test is taking 60 seconds") - @Test(expected=Exception.class) - public void testprocessFlowSequence() throws Exception - { - Map inparams = new HashMap(); - SvcLogicContext ctx = new SvcLogicContext(); - ctx.setAttribute( " SEQUENCE-TYPE","test"); - ctx.setAttribute("flow-sequence", "1"); - ctx.setAttribute( "DesignTime","test"); - ctx.setAttribute( "vnf-type","test" ); - - Whitebox.invokeMethod(f, "processFlowSequence",inparams, ctx, ctx); - - } - @Test - public void testexeuteAllTransaction() throws Exception - { - Map transactionMap = new HashMap(); - SvcLogicContext ctx = new SvcLogicContext(); - Whitebox.invokeMethod(f, "exeuteAllTransaction",transactionMap, ctx); - - } - @Test - public void testexeutepreProcessor() throws Exception - { - Map transactionMap = new HashMap(); - Transaction transaction = new Transaction(); - Whitebox.invokeMethod(f, "preProcessor",transactionMap, transaction); - - } - @Test(expected=Exception.class) - public void testcollectInputParams() throws Exception - { - SvcLogicContext ctx = new SvcLogicContext(); - - Transaction transaction = new Transaction(); - Whitebox.invokeMethod(f, "collectInputParams",ctx, transaction); - - } - @Ignore("Test is taking 60 seconds") - @Test(expected=Exception.class) - public void testgetDependencyInfo() throws Exception - { - SvcLogicContext ctx = new SvcLogicContext(); - Whitebox.invokeMethod(f, "getDependencyInfo",ctx); - - } - public void testgetCapabilitesDatass() throws Exception - { - SvcLogicContext ctx = new SvcLogicContext(); - Whitebox.invokeMethod(f, "getDependencyInfo",ctx); - - } - - -} +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.onap.appc.flow.executor.node; + +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.verify; + +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.onap.appc.flow.controller.data.Transaction; +import org.onap.appc.flow.controller.data.Transactions; +import org.onap.appc.flow.controller.dbervices.FlowControlDBService; +import org.onap.appc.flow.controller.node.FlowControlNode; +import org.onap.appc.flow.controller.utils.FlowControllerConstants; +import org.onap.ccsdk.sli.core.sli.SvcLogicContext; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.reflect.Whitebox; + +public class FlowControlNodeTest { + @Mock + FlowControlDBService dbservice = FlowControlDBService.initialise(); + @Mock + FlowControlNode f = new FlowControlNode(); + + Properties props = new Properties(); + private static final String SDNC_CONFIG_DIR_VAR = "SDNC_CONFIG_DIR"; + @Before + public void setUp() throws Exception + + { + FlowControlDBService dbservice = FlowControlDBService.initialise(); + } + @Ignore("Test is taking 60 seconds") + @Test(expected=Exception.class) + public final void testProcessFlow() throws Exception { + SvcLogicContext ctx = new SvcLogicContext(); + + ctx.setAttribute("request-id","test"); + ctx.setAttribute("vnf-type","test"); + ctx.setAttribute("action-level","HealthCheck"); + ctx.setAttribute("request-action","HealthCheck"); + ctx.setAttribute("response-prefix","response-prefix"); + + Map inParams = new HashMap(); + inParams.put("responsePrefix", "responsePrefix"); + + + Whitebox.invokeMethod(f, "processFlow",inParams, ctx); + /*Properties props = new Properties(); + PowerMockito.spy(FlowControlNode.class); + Transactions trans =null; + HashMap transactionMap = null; + String artifact_content="{‘PlaybookName’:’service_start’,‘EnvParameters’:{‘vnf_instance’:’$vnf_instance’},’Timeout’:600}"; + String capabilitiesData = "SUCCESS"; + System.out.println("End Test when");*/ + + + } + @Test + public void testgetInventoryInfo() throws Exception + { + SvcLogicContext ctx = new SvcLogicContext(); + String vnfid = "test"; + ctx.setAttribute( " tmp.vnfInfo.vnf.vnf-name","test"); + ctx.setAttribute("tmp.vnfInfo.vm-count", "0"); + ctx.setAttribute( " tmp.vnfInfo.vnf.vnf-type","test"); + ctx.setAttribute( "tmp.vnfInfo.vm[0 ].vserverId","test" ); + ctx.setAttribute( "tmp.vnfInfo.vm[0 ].vnfc-name","test" ); + ctx.setAttribute( "tmp.vnfInfo.vm[0].vnfc-type","test" ); + ctx.setAttribute( " tmp.vnfInfo.vm[0].vnfc-count","1"); + + Whitebox.invokeMethod(f, "getInventoryInfo", ctx, vnfid); + + } + @Ignore("Test is taking 60 seconds") + @Test(expected=Exception.class) + public void testprocessFlowSequence() throws Exception + { + Map inparams = new HashMap(); + SvcLogicContext ctx = new SvcLogicContext(); + ctx.setAttribute( " SEQUENCE-TYPE","test"); + ctx.setAttribute("flow-sequence", "1"); + ctx.setAttribute( "DesignTime","test"); + ctx.setAttribute( "vnf-type","test" ); + + Whitebox.invokeMethod(f, "processFlowSequence",inparams, ctx, ctx); + + } + @Test + public void testexeuteAllTransaction() throws Exception + { + Map transactionMap = new HashMap(); + SvcLogicContext ctx = new SvcLogicContext(); + Whitebox.invokeMethod(f, "exeuteAllTransaction",transactionMap, ctx); + + } + @Test + public void testexeutepreProcessor() throws Exception + { + Map transactionMap = new HashMap(); + Transaction transaction = new Transaction(); + Whitebox.invokeMethod(f, "preProcessor",transactionMap, transaction); + + } + @Test(expected=Exception.class) + public void testcollectInputParams() throws Exception + { + SvcLogicContext ctx = new SvcLogicContext(); + + Transaction transaction = new Transaction(); + Whitebox.invokeMethod(f, "collectInputParams",ctx, transaction); + + } + @Ignore("Test is taking 60 seconds") + @Test(expected=Exception.class) + public void testgetDependencyInfo() throws Exception + { + SvcLogicContext ctx = new SvcLogicContext(); + Whitebox.invokeMethod(f, "getDependencyInfo",ctx); + + } + public void testgetCapabilitesDatass() throws Exception + { + SvcLogicContext ctx = new SvcLogicContext(); + Whitebox.invokeMethod(f, "getDependencyInfo",ctx); + + } + + +} diff --git a/appc-config/appc-flow-controller/provider/src/test/resources/properties_loader.properties b/appc-config/appc-flow-controller/provider/src/test/resources/properties_loader.properties new file mode 100644 index 000000000..fc0aee0fe --- /dev/null +++ b/appc-config/appc-flow-controller/provider/src/test/resources/properties_loader.properties @@ -0,0 +1 @@ +test = OK \ No newline at end of file -- 2.16.6