From 0f166dd572d7124ea9c46c97b6a1caf6c231d9a6 Mon Sep 17 00:00:00 2001 From: "Smokowski, Kevin (ks6305)" Date: Fri, 1 Nov 2019 14:38:49 +0000 Subject: SliProviderBaseUpdates SvcLogicServiceImplBase constructor should have SvcLogicResolver as a parameter,Added HashMapResolver to map svclogic instances without osgi,Added InMemorySvcLogicStore useful for simple demos or junit test Issue-ID: CCSDK-1891 Signed-off-by: Smokowski, Kevin (ks6305) Change-Id: I3c3cdd33177ef10133db2672ddd4b308becefc90 --- artifacts/pom.xml | 5 ++ .../core/sli/provider/base/HashMapResolver.java | 52 +++++++++++++++++ .../sli/provider/base/InMemorySvcLogicStore.java | 66 ++++++++++++++++++++++ .../sli/provider/base/SvcLogicServiceImplBase.java | 42 +++++++------- .../sli/provider/base/ExecuteNodeExecutorTest.java | 9 +-- .../sli/provider/base/HashMapResolverTest.java | 51 +++++++++++++++++ .../provider/base/InMemorySvcLogicStoreTest.java | 35 ++++++++++++ .../sli/core/sli/provider/SvcLogicServiceImpl.java | 31 +--------- 8 files changed, 234 insertions(+), 57 deletions(-) create mode 100644 sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/HashMapResolver.java create mode 100644 sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/InMemorySvcLogicStore.java create mode 100644 sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/HashMapResolverTest.java create mode 100644 sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/InMemorySvcLogicStoreTest.java diff --git a/artifacts/pom.xml b/artifacts/pom.xml index 1f0781b63..32d1ef737 100755 --- a/artifacts/pom.xml +++ b/artifacts/pom.xml @@ -146,6 +146,11 @@ utils-installer ${project.version} + + org.onap.ccsdk.sli.core + sli-recording + ${project.version} + diff --git a/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/HashMapResolver.java b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/HashMapResolver.java new file mode 100644 index 000000000..d33312784 --- /dev/null +++ b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/HashMapResolver.java @@ -0,0 +1,52 @@ +package org.onap.ccsdk.sli.core.sli.provider.base; + +import java.util.HashMap; +import java.util.Map; +import org.onap.ccsdk.sli.core.sli.SvcLogicAdaptor; +import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin; +import org.onap.ccsdk.sli.core.sli.SvcLogicRecorder; +import org.onap.ccsdk.sli.core.sli.SvcLogicResource; + +public class HashMapResolver implements SvcLogicResolver { + Map svcLogicResourceMap = new HashMap(); + Map svcLogicJavaPluginMap = new HashMap(); + Map adaptorMap = new HashMap(); + Map recorderMap = new HashMap(); + + @Override + public SvcLogicResource getSvcLogicResource(String resourceName) { + return svcLogicResourceMap.get(resourceName); + } + + @Override + public SvcLogicRecorder getSvcLogicRecorder(String recorderName) { + return recorderMap.get(recorderName); + } + + @Override + public SvcLogicJavaPlugin getSvcLogicJavaPlugin(String pluginName) { + return svcLogicJavaPluginMap.get(pluginName); + } + + @Override + public SvcLogicAdaptor getSvcLogicAdaptor(String adaptorName) { + return adaptorMap.get(adaptorName); + } + + public void addSvcLogicAdaptor(String adaptorName, SvcLogicAdaptor adaptor) { + adaptorMap.put(adaptorName, adaptor); + } + + public void addSvcLogicRecorder(String recorderName, SvcLogicRecorder recorder) { + recorderMap.put(recorderName, recorder); + } + + public void addSvcLogicSvcLogicJavaPlugin(String pluginName, SvcLogicJavaPlugin plugin) { + svcLogicJavaPluginMap.put(pluginName, plugin); + } + + public void addSvcLogicResource(String resourceName, SvcLogicResource resource) { + svcLogicResourceMap.put(resourceName, resource); + } + +} diff --git a/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/InMemorySvcLogicStore.java b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/InMemorySvcLogicStore.java new file mode 100644 index 000000000..ddf464fe7 --- /dev/null +++ b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/InMemorySvcLogicStore.java @@ -0,0 +1,66 @@ +package org.onap.ccsdk.sli.core.sli.provider.base; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.onap.ccsdk.sli.core.sli.SvcLogicGraph; +import org.onap.ccsdk.sli.core.sli.SvcLogicStore; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class InMemorySvcLogicStore implements SvcLogicStore { + private static final Logger logger = LoggerFactory.getLogger(InMemorySvcLogicStore.class); + public Map graphStore; + + public InMemorySvcLogicStore() { + graphStore = new HashMap(); + } + + @Override + public boolean hasGraph(String module, String rpc, String version, String mode) throws SvcLogicException { + String storeId = new String(module + ":" + rpc); + return graphStore.containsKey(storeId); + } + + @Override + public SvcLogicGraph fetch(String module, String rpc, String version, String mode) throws SvcLogicException { + String storeId = new String(module + ":" + rpc); + return graphStore.get(storeId); + } + + @Override + public void store(SvcLogicGraph graph) throws SvcLogicException { + if (graph != null) { + String storeId = new String(graph.getModule() + ":" + graph.getRpc()); + graphStore.put(storeId, graph); + logger.info(graph.toString() + " stored in InMemorySvcLogicStore."); + } + } + + @Override + public void init(Properties props) throws SvcLogicException { + // noop + } + + @Override + public void delete(String module, String rpc, String version, String mode) throws SvcLogicException { + String storeId = new String(module + ":" + rpc); + if (graphStore.containsKey(storeId)) { + graphStore.remove(storeId); + } + } + + @Override + public void activate(SvcLogicGraph graph) throws SvcLogicException { + // noop + } + + @Override + public void activate(String module, String rpc, String version, String mode) throws SvcLogicException { + // noop + } + +} diff --git a/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/SvcLogicServiceImplBase.java b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/SvcLogicServiceImplBase.java index 361ca708a..80d992f28 100644 --- a/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/SvcLogicServiceImplBase.java +++ b/sli/provider-base/src/main/java/org/onap/ccsdk/sli/core/sli/provider/base/SvcLogicServiceImplBase.java @@ -26,14 +26,13 @@ package org.onap.ccsdk.sli.core.sli.provider.base; import java.util.HashMap; import java.util.Map; import java.util.Properties; - import org.onap.ccsdk.sli.core.sli.ExitNodeException; -import org.onap.ccsdk.sli.core.sli.MetricLogger; import org.onap.ccsdk.sli.core.sli.SvcLogicContext; import org.onap.ccsdk.sli.core.sli.SvcLogicException; import org.onap.ccsdk.sli.core.sli.SvcLogicGraph; import org.onap.ccsdk.sli.core.sli.SvcLogicNode; import org.onap.ccsdk.sli.core.sli.SvcLogicStore; +import org.onap.logging.ref.slf4j.ONAPLogConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; @@ -72,8 +71,9 @@ public class SvcLogicServiceImplBase implements SvcLogicServiceBase { protected SvcLogicStore store; protected static final String CURRENT_GRAPH="currentGraph"; - public SvcLogicServiceImplBase(SvcLogicStore store) { + public SvcLogicServiceImplBase(SvcLogicStore store, SvcLogicResolver resolver) { this.store = store; + this.resolver = resolver; } protected void registerExecutors() { @@ -140,25 +140,25 @@ public class SvcLogicServiceImplBase implements SvcLogicServiceBase { } @Override - public Properties execute(String module, String rpc, String version, String mode, Properties props) - throws SvcLogicException { - LOG.info("Fetching service logic from data store"); - SvcLogicGraph graph = store.fetch(module, rpc, version, mode); - - if (graph == null) { - Properties retProps = new Properties(); - retProps.setProperty("error-code", "401"); - retProps.setProperty("error-message", - "No service logic found for [" + module + "," + rpc + "," + version + "," + mode + "]"); - return (retProps); - } + public Properties execute(String module, String rpc, String version, String mode, Properties props) + throws SvcLogicException { + SvcLogicGraph graph = store.fetch(module, rpc, version, mode); + + if (graph == null) { + Properties retProps = new Properties(); + retProps.setProperty("error-code", "401"); + retProps.setProperty("error-message", + "No service logic found for [" + module + "," + rpc + "," + version + "," + mode + "]"); + return (retProps); + } - SvcLogicContext ctx = new SvcLogicContext(props); - ctx.setAttribute(CURRENT_GRAPH, graph.toString()); - ctx.setAttribute("X-ECOMP-RequestID", MDC.get("X-ECOMP-RequestID")); - execute(graph, ctx); - return (ctx.toProperties()); - } + SvcLogicContext ctx = new SvcLogicContext(props); + ctx.setAttribute(CURRENT_GRAPH, graph.toString()); + // To support legacy code we should not stop populating X-ECOMP-RequestID + ctx.setAttribute("X-ECOMP-RequestID", MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)); + execute(graph, ctx); + return (ctx.toProperties()); + } @Override public SvcLogicStore getStore() throws SvcLogicException { diff --git a/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/ExecuteNodeExecutorTest.java b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/ExecuteNodeExecutorTest.java index 474136d5b..9a929387f 100644 --- a/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/ExecuteNodeExecutorTest.java +++ b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/ExecuteNodeExecutorTest.java @@ -21,9 +21,7 @@ package org.onap.ccsdk.sli.core.sli.provider.base; -import java.util.Map.Entry; import java.util.Properties; - import org.onap.ccsdk.sli.core.sli.DuplicateValueException; import org.onap.ccsdk.sli.core.sli.SvcLogicContext; import org.onap.ccsdk.sli.core.sli.SvcLogicException; @@ -31,10 +29,6 @@ import org.onap.ccsdk.sli.core.sli.SvcLogicExpression; import org.onap.ccsdk.sli.core.sli.SvcLogicGraph; import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin; import org.onap.ccsdk.sli.core.sli.SvcLogicNode; -import org.onap.ccsdk.sli.core.sli.provider.base.ExecuteNodeExecutor; -import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicPropertiesProvider; -import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceImplBase; - import junit.framework.TestCase; public class ExecuteNodeExecutorTest extends TestCase { @@ -63,7 +57,8 @@ public class ExecuteNodeExecutorTest extends TestCase { }; - execute.execute(new SvcLogicServiceImplBase(null), new SvcLogicNode(0, "", "", new SvcLogicGraph()), new SvcLogicContext()); + execute.execute(new SvcLogicServiceImplBase(null, null), new SvcLogicNode(0, "", "", new SvcLogicGraph()), + new SvcLogicContext()); } } diff --git a/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/HashMapResolverTest.java b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/HashMapResolverTest.java new file mode 100644 index 000000000..5a2140696 --- /dev/null +++ b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/HashMapResolverTest.java @@ -0,0 +1,51 @@ +package org.onap.ccsdk.sli.core.sli.provider.base; + +import static org.junit.Assert.assertNotNull; +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; +import org.onap.ccsdk.sli.core.sli.SvcLogicAdaptor; +import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin; +import org.onap.ccsdk.sli.core.sli.SvcLogicRecorder; +import org.onap.ccsdk.sli.core.sli.SvcLogicResource; + +public class HashMapResolverTest { + @Mock + SvcLogicResource myResource; + + @Mock + SvcLogicRecorder myRecorder; + + @Mock + SvcLogicJavaPlugin myJavaPlugin; + + @Mock + SvcLogicAdaptor myAdaptor; + + @Rule + public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Test + public void simpleTest() throws Exception { + + HashMapResolver resolver = new HashMapResolver(); + String resourceKey = "simple.resource"; + String recorderKey = "simple.record"; + String pluginKey = "simple.plugin"; + String adaptorKey = "simple.adaptor"; + + resolver.addSvcLogicAdaptor(adaptorKey, myAdaptor); + resolver.addSvcLogicRecorder(recorderKey, myRecorder); + resolver.addSvcLogicResource(resourceKey, myResource); + resolver.addSvcLogicSvcLogicJavaPlugin(pluginKey, myJavaPlugin); + + assertNotNull(resolver.getSvcLogicAdaptor(adaptorKey)); + assertNotNull(resolver.getSvcLogicJavaPlugin(pluginKey)); + assertNotNull(resolver.getSvcLogicRecorder(recorderKey)); + assertNotNull(resolver.getSvcLogicResource(resourceKey)); + + + } +} diff --git a/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/InMemorySvcLogicStoreTest.java b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/InMemorySvcLogicStoreTest.java new file mode 100644 index 000000000..5f8757aa2 --- /dev/null +++ b/sli/provider-base/src/test/java/org/onap/ccsdk/sli/core/sli/provider/base/InMemorySvcLogicStoreTest.java @@ -0,0 +1,35 @@ +package org.onap.ccsdk.sli.core.sli.provider.base; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import java.util.Properties; +import org.junit.Test; +import org.onap.ccsdk.sli.core.sli.SvcLogicGraph; + +public class InMemorySvcLogicStoreTest { + @Test + public void simpleTest() throws Exception { + InMemorySvcLogicStore store = new InMemorySvcLogicStore(); + store.init(new Properties()); + SvcLogicGraph graph = new SvcLogicGraph(); + String module = "TEST"; + String rpc = "NOTIFICATION"; + String mode = "sync"; + String version = "1"; + + graph.setModule(module); + graph.setRpc(rpc); + graph.setMode(mode); + graph.setVersion(version); + + store.store(graph); + assertTrue(store.hasGraph(module, rpc, version, mode)); + assertNotNull(store.fetch(module, rpc, version, mode)); + store.activate(graph); + store.activate(module, rpc, version, mode); + + store.delete(module, rpc, version, mode); + assertNull(store.fetch(module, rpc, version, mode)); + } +} diff --git a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicServiceImpl.java b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicServiceImpl.java index 49d0a382c..92c2aa49a 100755 --- a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicServiceImpl.java +++ b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicServiceImpl.java @@ -26,20 +26,16 @@ package org.onap.ccsdk.sli.core.sli.provider; import java.util.Properties; import org.onap.ccsdk.sli.core.dblib.DbLibService; import org.onap.ccsdk.sli.core.sli.ConfigurationException; -import org.onap.ccsdk.sli.core.sli.SvcLogicContext; import org.onap.ccsdk.sli.core.sli.SvcLogicDblibStore; import org.onap.ccsdk.sli.core.sli.SvcLogicException; -import org.onap.ccsdk.sli.core.sli.SvcLogicGraph; import org.onap.ccsdk.sli.core.sli.SvcLogicStore; import org.onap.ccsdk.sli.core.sli.SvcLogicStoreFactory; import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicPropertiesProvider; import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicResolver; import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceImplBase; -import org.onap.logging.ref.slf4j.ONAPLogConstants; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.slf4j.MDC; public class SvcLogicServiceImpl extends SvcLogicServiceImplBase implements SvcLogicService { @@ -47,41 +43,18 @@ public class SvcLogicServiceImpl extends SvcLogicServiceImplBase implements SvcL public SvcLogicServiceImpl(SvcLogicPropertiesProvider resourceProvider, SvcLogicResolver resolver) throws SvcLogicException { - super(null); - this.resolver = resolver; + super(null, resolver); properties = resourceProvider.getProperties(); this.store = getStore(); } public SvcLogicServiceImpl(SvcLogicPropertiesProvider resourceProvider, DbLibService dbSvc, SvcLogicResolver resolver) throws SvcLogicException { - super(null); - this.resolver = resolver; + super(null, resolver); properties = resourceProvider.getProperties(); this.store = new SvcLogicDblibStore(dbSvc); } - @Override - public Properties execute(String module, String rpc, String version, String mode, Properties props) - throws SvcLogicException { - SvcLogicGraph graph = store.fetch(module, rpc, version, mode); - - if (graph == null) { - Properties retProps = new Properties(); - retProps.setProperty("error-code", "401"); - retProps.setProperty("error-message", - "No service logic found for [" + module + "," + rpc + "," + version + "," + mode + "]"); - return (retProps); - } - - SvcLogicContext ctx = new SvcLogicContext(props); - ctx.setAttribute(CURRENT_GRAPH, graph.toString()); - // To support legacy code we should not stop populating X-ECOMP-RequestID - ctx.setAttribute("X-ECOMP-RequestID", MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)); - execute(graph, ctx); - return (ctx.toProperties()); - } - @Override @Deprecated // DomDataBroker is not being used, this should be removed eventually -- cgit 1.2.3-korg