Refactoring existing integration tests

Change-Id: I1aedd94d5197b8c6513fc701e9df2aab4edec088
Issue-ID: POLICY-865
Signed-off-by: waqas.ikram <waqas.ikram@ericsson.com>
diff --git a/testsuites/integration/integration-context-test/pom.xml b/testsuites/integration/integration-context-test/pom.xml
new file mode 100644
index 0000000..8c62339
--- /dev/null
+++ b/testsuites/integration/integration-context-test/pom.xml
@@ -0,0 +1,88 @@
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 2018 Ericsson. All rights reserved.
+  ================================================================================
+  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.
+
+  SPDX-License-Identifier: Apache-2.0
+  ============LICENSE_END=========================================================
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.onap.policy.apex-pdp.testsuites.integration</groupId>
+        <artifactId>integration</artifactId>
+        <version>2.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>integration-context-test</artifactId>
+    <name>${project.artifactId}</name>
+    <description>[${project.parent.artifactId}] module to run context tests using various plugins, multi-threads and multi-JVMs</description>
+
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onap.policy.apex-pdp.core</groupId>
+            <artifactId>core-infrastructure</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.apex-pdp.plugins.plugins-context.context-distribution</groupId>
+            <artifactId>context-distribution-hazelcast</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.apex-pdp.plugins.plugins-context.context-distribution</groupId>
+            <artifactId>context-distribution-infinispan</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.apex-pdp.plugins.plugins-context.context-locking</groupId>
+            <artifactId>context-locking-curator</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-log4j12</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.apex-pdp.plugins.plugins-context.context-locking</groupId>
+            <artifactId>context-locking-hazelcast</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.apex-pdp.context</groupId>
+            <artifactId>context-test-utils</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.curator</groupId>
+            <artifactId>curator-test</artifactId>
+            <version>4.0.0</version>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>log4j</groupId>
+                    <artifactId>log4j</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/plugins/context/test/locking/TestConcurrentContext.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/plugins/context/test/locking/TestConcurrentContext.java
new file mode 100644
index 0000000..7a3a29c
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/plugins/context/test/locking/TestConcurrentContext.java
@@ -0,0 +1,316 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * 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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.plugins.context.test.locking;
+
+import static org.junit.Assert.assertEquals;
+import static org.onap.policy.apex.context.parameters.DistributorParameters.DEFAULT_DISTRIBUTOR_PLUGIN_CLASS;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.NetworkInterface;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.TreeSet;
+
+import org.apache.zookeeper.server.NIOServerCnxnFactory;
+import org.apache.zookeeper.server.ZooKeeperServer;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.onap.policy.apex.context.impl.distribution.jvmlocal.JVMLocalDistributor;
+import org.onap.policy.apex.context.impl.locking.jvmlocal.JVMLocalLockManager;
+import org.onap.policy.apex.context.parameters.ContextParameters;
+import org.onap.policy.apex.context.parameters.DistributorParameters;
+import org.onap.policy.apex.context.parameters.LockManagerParameters;
+import org.onap.policy.apex.context.test.locking.ConcurrentContext;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelException;
+import org.onap.policy.apex.model.basicmodel.service.ParameterService;
+import org.onap.policy.apex.plugins.context.distribution.hazelcast.HazelcastContextDistributor;
+import org.onap.policy.apex.plugins.context.distribution.infinispan.InfinispanContextDistributor;
+import org.onap.policy.apex.plugins.context.distribution.infinispan.InfinispanDistributorParameters;
+import org.onap.policy.apex.plugins.context.locking.curator.CuratorLockManager;
+import org.onap.policy.apex.plugins.context.locking.curator.CuratorLockManagerParameters;
+import org.onap.policy.apex.plugins.context.locking.hazelcast.HazelcastLockManager;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+import com.hazelcast.config.Config;
+
+/**
+ * The Class TestConcurrentContext tests concurrent use of context.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class TestConcurrentContext {
+    // Logger for this class
+    private static final XLogger logger = XLoggerFactory.getXLogger(TestConcurrentContext.class);
+
+    // Test parameters
+    private static final String ZOOKEEPER_ADDRESS = "127.0.0.1";
+    private static final int ZOOKEEPER_START_PORT = 62181;
+    private static final int TEST_JVM_COUNT_SINGLE_JVM = 1;
+    private static final int TEST_JVM_COUNT_MULTI_JVM = 3;
+    private static final int TEST_THREAD_COUNT_SINGLE_JVM = 64;
+    private static final int TEST_THREAD_COUNT_MULTI_JVM = 20;
+    private static final int TEST_THREAD_LOOPS = 100;
+
+    private NIOServerCnxnFactory zookeeperFactory;
+
+    // We need to increment the Zookeeper port because sometimes the port is not released at the end
+    // of the test for a few seconds.
+    private static int nextZookeeperPort = ZOOKEEPER_START_PORT;
+    private int zookeeperPort;
+
+    @Rule
+    public final TemporaryFolder folder = new TemporaryFolder();
+
+    @BeforeClass
+    public static void configure() throws Exception {
+        System.setProperty("java.net.preferIPv4Stack", "true");
+        System.setProperty("hazelcast.config", "src/test/resources/hazelcast/hazelcast.xml");
+
+        // The JGroups IP address must be set to a real (not loopback) IP address for Infinispan to
+        // work. IN order to ensure that all
+        // the JVMs in a test pick up the same IP address, this function sets the address to be the
+        // first non-loopback IPv4 address
+        // on a host
+        final TreeSet<String> ipAddressSet = new TreeSet<String>();
+
+        final Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
+        for (final NetworkInterface netint : Collections.list(nets)) {
+            final Enumeration<InetAddress> inetAddresses = netint.getInetAddresses();
+            for (final InetAddress inetAddress : Collections.list(inetAddresses)) {
+                // Look for real IPv4 internet addresses
+                if (!inetAddress.isLoopbackAddress() && inetAddress.getAddress().length == 4) {
+                    ipAddressSet.add(inetAddress.getHostAddress());
+                }
+            }
+        }
+
+        if (ipAddressSet.size() == 0) {
+            throw new Exception("cound not find real IP address for test");
+        }
+        System.out.println("For Infinispan, setting jgroups.tcp.address to: " + ipAddressSet.first());
+        System.setProperty("jgroups.tcp.address", ipAddressSet.first());
+
+        final Config config = new Config();
+        config.getNetworkConfig().setPublicAddress(ipAddressSet.first());
+        config.getNetworkConfig().getInterfaces().addInterface(ipAddressSet.first());
+    }
+
+    @AfterClass
+    public static void teardown() throws IOException {}
+
+    private void startZookeeperServer() throws IOException, InterruptedException {
+        final File zookeeperDirectory = folder.newFolder("zookeeperDirectory");
+
+        zookeeperPort = nextZookeeperPort++;
+
+        final ZooKeeperServer server = new ZooKeeperServer(zookeeperDirectory, zookeeperDirectory, 5000);
+        zookeeperFactory = new NIOServerCnxnFactory();
+        zookeeperFactory.configure(new InetSocketAddress(zookeeperPort), 100);
+
+        zookeeperFactory.startup(server);
+    }
+
+    private void stopZookeeperServer() {
+        zookeeperFactory.shutdown();
+    }
+
+    @Test
+    public void testConcurrentContextJVMLocalVarSet() throws ApexModelException, IOException, ApexException {
+        logger.debug("Running testConcurrentContextJVMLocalVarSet test . . .");
+
+        final ContextParameters contextParameters = new ContextParameters();
+        contextParameters.getLockManagerParameters().setPluginClass(JVMLocalLockManager.class.getCanonicalName());
+        final long result = new ConcurrentContext().testConcurrentContext("JVMLocalVarSet", TEST_JVM_COUNT_SINGLE_JVM,
+                TEST_THREAD_COUNT_SINGLE_JVM, TEST_THREAD_LOOPS);
+
+        assertEquals(TEST_JVM_COUNT_SINGLE_JVM * TEST_THREAD_COUNT_SINGLE_JVM * TEST_THREAD_LOOPS, result);
+
+        logger.debug("Ran testConcurrentContextJVMLocalVarSet test");
+    }
+
+    @Test
+    public void testConcurrentContextJVMLocalNoVarSet() throws ApexModelException, IOException, ApexException {
+        logger.debug("Running testConcurrentContextJVMLocalNoVarSet test . . .");
+
+        new ContextParameters();
+        final long result = new ConcurrentContext().testConcurrentContext("JVMLocalNoVarSet", TEST_JVM_COUNT_SINGLE_JVM,
+                TEST_THREAD_COUNT_SINGLE_JVM, TEST_THREAD_LOOPS);
+
+        assertEquals(TEST_JVM_COUNT_SINGLE_JVM * TEST_THREAD_COUNT_SINGLE_JVM * TEST_THREAD_LOOPS, result);
+
+        logger.debug("Ran testConcurrentContextJVMLocalNoVarSet test");
+    }
+
+    @Test
+    public void testConcurrentContextMultiJVMNoLock() throws ApexModelException, IOException, ApexException {
+        logger.debug("Running testConcurrentContextMultiJVMNoLock test . . .");
+
+        final ContextParameters contextParameters = new ContextParameters();
+        contextParameters.getDistributorParameters().setPluginClass(JVMLocalDistributor.class.getCanonicalName());
+        contextParameters.getLockManagerParameters().setPluginClass(JVMLocalLockManager.class.getCanonicalName());
+
+        final long result = new ConcurrentContext().testConcurrentContext("testConcurrentContextMultiJVMNoLock",
+                TEST_JVM_COUNT_MULTI_JVM, TEST_THREAD_COUNT_MULTI_JVM, TEST_THREAD_LOOPS);
+
+        // No concurrent map so result will be zero
+        assertEquals(0, result);
+
+        logger.debug("Ran testConcurrentContextMultiJVMNoLock test");
+    }
+
+    @Test
+    public void testConcurrentContextHazelcastLock() throws ApexModelException, IOException, ApexException {
+        logger.debug("Running testConcurrentContextHazelcastLock test . . .");
+
+        final ContextParameters contextParameters = new ContextParameters();
+        contextParameters.getDistributorParameters().setPluginClass(DEFAULT_DISTRIBUTOR_PLUGIN_CLASS);
+        contextParameters.getLockManagerParameters().setPluginClass(HazelcastLockManager.class.getCanonicalName());
+        final long result = new ConcurrentContext().testConcurrentContext("HazelcastLock", TEST_JVM_COUNT_SINGLE_JVM,
+                TEST_THREAD_COUNT_SINGLE_JVM, TEST_THREAD_LOOPS);
+
+        assertEquals(TEST_JVM_COUNT_SINGLE_JVM * TEST_THREAD_COUNT_SINGLE_JVM * TEST_THREAD_LOOPS, result);
+        logger.debug("Ran testConcurrentContextHazelcastLock test");
+    }
+
+    @Test
+    public void testConcurrentContextCuratorLock()
+            throws ApexModelException, IOException, ApexException, InterruptedException {
+        logger.debug("Running testConcurrentContextCuratorLock test . . .");
+
+        startZookeeperServer();
+
+        final ContextParameters contextParameters = new ContextParameters();
+        contextParameters.getDistributorParameters()
+                .setPluginClass(DistributorParameters.DEFAULT_DISTRIBUTOR_PLUGIN_CLASS);
+
+        final CuratorLockManagerParameters curatorParameters = new CuratorLockManagerParameters();
+        curatorParameters.setPluginClass(CuratorLockManager.class.getCanonicalName());
+        curatorParameters.setZookeeperAddress(ZOOKEEPER_ADDRESS + ":" + zookeeperPort);
+        contextParameters.setLockManagerParameters(curatorParameters);
+        ParameterService.registerParameters(LockManagerParameters.class, curatorParameters);
+
+        final long result = new ConcurrentContext().testConcurrentContext("CuratorLock", TEST_JVM_COUNT_SINGLE_JVM,
+                TEST_THREAD_COUNT_SINGLE_JVM, TEST_THREAD_LOOPS);
+
+        assertEquals(TEST_JVM_COUNT_SINGLE_JVM * TEST_THREAD_COUNT_SINGLE_JVM * TEST_THREAD_LOOPS, result);
+
+        stopZookeeperServer();
+        logger.debug("Ran testConcurrentContextCuratorLock test");
+    }
+
+    @Test
+    public void testConcurrentContextHazelcastMultiJVMHazelcastLock()
+            throws ApexModelException, IOException, ApexException {
+        logger.debug("Running testConcurrentContextHazelcastMultiJVMHazelcastLock test . . .");
+
+        final ContextParameters contextParameters = new ContextParameters();
+        contextParameters.getDistributorParameters()
+                .setPluginClass(HazelcastContextDistributor.class.getCanonicalName());
+        contextParameters.getLockManagerParameters().setPluginClass(HazelcastLockManager.class.getCanonicalName());
+        final long result = new ConcurrentContext().testConcurrentContext("HazelcastMultiHazelcastlock",
+                TEST_JVM_COUNT_MULTI_JVM, TEST_THREAD_COUNT_MULTI_JVM, TEST_THREAD_LOOPS);
+
+        assertEquals(TEST_JVM_COUNT_MULTI_JVM * TEST_THREAD_COUNT_MULTI_JVM * TEST_THREAD_LOOPS, result);
+        logger.debug("Ran testConcurrentContextHazelcastMultiJVMHazelcastLock test");
+    }
+
+    @Test
+    public void testConcurrentContextInfinispanMultiJVMHazelcastlock()
+            throws ApexModelException, IOException, ApexException {
+        logger.debug("Running testConcurrentContextInfinispanMultiJVMHazelcastlock test . . .");
+
+        final ContextParameters contextParameters = new ContextParameters();
+        final InfinispanDistributorParameters infinispanParameters = new InfinispanDistributorParameters();
+        infinispanParameters.setPluginClass(InfinispanContextDistributor.class.getCanonicalName());
+        infinispanParameters.setConfigFile("infinispan/infinispan-context-test.xml");
+        contextParameters.setDistributorParameters(infinispanParameters);
+        contextParameters.getLockManagerParameters().setPluginClass(HazelcastLockManager.class.getCanonicalName());
+
+        final long result = new ConcurrentContext().testConcurrentContext("InfinispanMultiHazelcastlock",
+                TEST_JVM_COUNT_MULTI_JVM, TEST_THREAD_COUNT_MULTI_JVM, TEST_THREAD_LOOPS);
+
+        assertEquals(TEST_JVM_COUNT_MULTI_JVM * TEST_THREAD_COUNT_MULTI_JVM * TEST_THREAD_LOOPS, result);
+        logger.debug("Ran testConcurrentContextInfinispanMultiJVMHazelcastlock test");
+    }
+
+    @Test
+    public void testConcurrentContextInfinispanMultiJVMCuratorLock()
+            throws ApexModelException, IOException, ApexException, InterruptedException {
+        logger.debug("Running testConcurrentContextInfinispanMultiJVMCuratorLock test . . .");
+
+        startZookeeperServer();
+
+        final ContextParameters contextParameters = new ContextParameters();
+        final InfinispanDistributorParameters infinispanParameters = new InfinispanDistributorParameters();
+        infinispanParameters.setPluginClass(InfinispanContextDistributor.class.getCanonicalName());
+        infinispanParameters.setConfigFile("infinispan/infinispan-context-test.xml");
+        contextParameters.setDistributorParameters(infinispanParameters);
+
+        final CuratorLockManagerParameters curatorParameters = new CuratorLockManagerParameters();
+        curatorParameters.setPluginClass(CuratorLockManager.class.getCanonicalName());
+        curatorParameters.setZookeeperAddress(ZOOKEEPER_ADDRESS + ":" + zookeeperPort);
+        contextParameters.setLockManagerParameters(curatorParameters);
+        ParameterService.registerParameters(LockManagerParameters.class, curatorParameters);
+
+        final long result = new ConcurrentContext().testConcurrentContext("InfinispanMultiCuratorLock",
+                TEST_JVM_COUNT_MULTI_JVM, TEST_THREAD_COUNT_MULTI_JVM, TEST_THREAD_LOOPS);
+
+        assertEquals(TEST_JVM_COUNT_MULTI_JVM * TEST_THREAD_COUNT_MULTI_JVM * TEST_THREAD_LOOPS, result);
+
+        stopZookeeperServer();
+
+        logger.debug("Ran testConcurrentContextInfinispanMultiJVMCuratorLock test");
+    }
+
+    @Test
+    public void testConcurrentContextHazelcastMultiJVMCuratorLock()
+            throws ApexModelException, IOException, ApexException, InterruptedException {
+        logger.debug("Running testConcurrentContextHazelcastMultiJVMCuratorLock test . . .");
+
+        startZookeeperServer();
+
+        final ContextParameters contextParameters = new ContextParameters();
+        contextParameters.getDistributorParameters()
+                .setPluginClass(HazelcastContextDistributor.class.getCanonicalName());
+
+        final CuratorLockManagerParameters curatorParameters = new CuratorLockManagerParameters();
+        curatorParameters.setPluginClass(CuratorLockManager.class.getCanonicalName());
+        curatorParameters.setZookeeperAddress(ZOOKEEPER_ADDRESS + ":" + zookeeperPort);
+        contextParameters.setLockManagerParameters(curatorParameters);
+        ParameterService.registerParameters(LockManagerParameters.class, curatorParameters);
+
+        final long result = new ConcurrentContext().testConcurrentContext("HazelcastMultiCuratorLock",
+                TEST_JVM_COUNT_MULTI_JVM, TEST_THREAD_COUNT_MULTI_JVM, TEST_THREAD_LOOPS);
+
+        assertEquals(TEST_JVM_COUNT_MULTI_JVM * TEST_THREAD_COUNT_MULTI_JVM * TEST_THREAD_LOOPS, result);
+
+        stopZookeeperServer();
+        logger.debug("Ran testConcurrentContextHazelcastMultiJVMCuratorLock test");
+    }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/resources/hazelcast/hazelcast.xml b/testsuites/integration/integration-context-test/src/test/resources/hazelcast/hazelcast.xml
new file mode 100644
index 0000000..d69f24b
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/resources/hazelcast/hazelcast.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 2016-2018 Ericsson. All rights reserved.
+  ================================================================================
+  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.
+  
+  SPDX-License-Identifier: Apache-2.0
+  ============LICENSE_END=========================================================
+-->
+
+<hazelcast xmlns="http://www.hazelcast.com/schema/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <group>
+        <name>ApexHazelcastGroup</name>
+        <password>ApexHazelcastGroupPassword</password>
+    </group>
+    <network>
+        <port auto-increment="true">5706</port>
+        <join>
+            <multicast enabled="false">
+                <multicast-group>224.2.2.10</multicast-group>
+                <multicast-port>54327</multicast-port>
+            </multicast>
+            <tcp-ip enabled="true">
+                <members>127.0.0.1</members>
+            </tcp-ip>
+        </join>
+        <interfaces enabled="false">
+			<!-- This value will allow hazelcast to run locally from the IDE -->
+            <interface>127.0.0.*</interface>
+        </interfaces>
+    </network>
+    <properties>
+        <property name="hazelcast.icmp.enabled">true</property>
+        <property name="hazelcast.logging.type">slf4j</property>
+		<!-- disable the hazelcast shutdown hook - prefer to control the shutdown 
+			in code -->
+        <property name="hazelcast.shutdownhook.enabled">false</property>
+        <property name="hazelcast.graceful.shutdown.max.wait">60</property>
+    </properties>
+    <executor-service>
+        <pool-size>16</pool-size>
+    </executor-service>
+</hazelcast>
diff --git a/testsuites/integration/integration-context-test/src/test/resources/infinispan/default-jgroups-tcp.xml b/testsuites/integration/integration-context-test/src/test/resources/infinispan/default-jgroups-tcp.xml
new file mode 100644
index 0000000..028cf1d
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/resources/infinispan/default-jgroups-tcp.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 2016-2018 Ericsson. All rights reserved.
+  ================================================================================
+  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.
+  
+  SPDX-License-Identifier: Apache-2.0
+  ============LICENSE_END=========================================================
+-->
+
+<config xmlns="urn:org:jgroups"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/jgroups-4.0.xsd">
+   <TCP bind_addr="${jgroups.tcp.address:127.0.0.1}"
+        bind_port="${jgroups.tcp.port:7800}"
+        enable_diagnostics="false"
+        thread_naming_pattern="pl"
+        send_buf_size="640k"
+        sock_conn_timeout="300"
+        bundler_type="no-bundler"
+
+        thread_pool.min_threads="${jgroups.thread_pool.min_threads:0}"
+        thread_pool.max_threads="${jgroups.thread_pool.max_threads:200}"
+        thread_pool.keep_alive_time="60000"
+   />
+   <MPING bind_addr="${jgroups.tcp.address:127.0.0.1}"
+          mcast_addr="${jgroups.mping.mcast_addr:228.2.4.6}"
+          mcast_port="${jgroups.mping.mcast_port:43366}"
+          ip_ttl="${jgroups.udp.ip_ttl:2}" 
+   />
+   <MERGE3 min_interval="10000" 
+           max_interval="30000" 
+   />
+   <FD_SOCK />
+   <FD_ALL timeout="60000" 
+           interval="15000" 
+           timeout_check_interval="5000" 
+   />
+   <VERIFY_SUSPECT timeout="5000" />
+   <pbcast.NAKACK2 use_mcast_xmit="false"
+                   xmit_interval="100"
+                   xmit_table_num_rows="50"
+                   xmit_table_msgs_per_row="1024"
+                   xmit_table_max_compaction_time="30000"
+                   resend_last_seqno="true"
+   />
+   <UNICAST3 xmit_interval="100"
+             xmit_table_num_rows="50"
+             xmit_table_msgs_per_row="1024"
+             xmit_table_max_compaction_time="30000"
+             conn_expiry_timeout="0"
+   />
+   <pbcast.STABLE stability_delay="500"
+                  desired_avg_gossip="5000"
+                  max_bytes="1M"
+   />
+   <pbcast.GMS print_local_addr="false"
+               install_view_locally_first="true"
+               join_timeout="${jgroups.join_timeout:5000}"
+   />
+   <MFC max_credits="2m" 
+        min_threshold="0.40"
+   />
+   <FRAG3/>
+</config>
diff --git a/testsuites/integration/integration-context-test/src/test/resources/infinispan/default-jgroups-udp.xml b/testsuites/integration/integration-context-test/src/test/resources/infinispan/default-jgroups-udp.xml
new file mode 100644
index 0000000..17ba5ea
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/resources/infinispan/default-jgroups-udp.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 2016-2018 Ericsson. All rights reserved.
+  ================================================================================
+  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.
+  
+  SPDX-License-Identifier: Apache-2.0
+  ============LICENSE_END=========================================================
+-->
+
+<config xmlns="urn:org:jgroups"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/jgroups-4.0.xsd">
+   <UDP mcast_addr="${jgroups.udp.mcast_addr:228.6.7.8}"
+        mcast_port="${jgroups.udp.mcast_port:46655}"
+        ucast_send_buf_size="1m"
+        mcast_send_buf_size="1m"
+        ucast_recv_buf_size="20m"
+        mcast_recv_buf_size="25m"
+        ip_ttl="${jgroups.ip_ttl:2}"
+        thread_naming_pattern="pl"
+        enable_diagnostics="false"
+        bundler_type="no-bundler"
+        max_bundle_size="8500"
+
+        thread_pool.min_threads="${jgroups.thread_pool.min_threads:0}"
+        thread_pool.max_threads="${jgroups.thread_pool.max_threads:200}"
+        thread_pool.keep_alive_time="60000"
+   />
+   <PING />
+   <MERGE3 min_interval="10000" 
+           max_interval="30000" 
+   />
+   <FD_SOCK />
+   <FD_ALL timeout="60000" 
+           interval="15000" 
+           timeout_check_interval="5000" 
+   />
+   <VERIFY_SUSPECT timeout="5000" 
+   />
+   <pbcast.NAKACK2 xmit_interval="100"
+                   xmit_table_num_rows="50"
+                   xmit_table_msgs_per_row="1024"
+                   xmit_table_max_compaction_time="30000"
+                   resend_last_seqno="true"
+   />
+   <UNICAST3 xmit_interval="100"
+             xmit_table_num_rows="50"
+             xmit_table_msgs_per_row="1024"
+             xmit_table_max_compaction_time="30000"
+             conn_expiry_timeout="0"
+   />
+   <pbcast.STABLE stability_delay="500"
+                  desired_avg_gossip="5000"
+                  max_bytes="1M"
+   />
+   <pbcast.GMS print_local_addr="false"
+               install_view_locally_first="true"
+               join_timeout="${jgroups.join_timeout:5000}"
+   />
+   <UFC max_credits="2m" 
+        min_threshold="0.40"
+   />
+   <MFC max_credits="2m" 
+        min_threshold="0.40"
+   />
+   <FRAG3 frag_size="8000"/>
+</config>
diff --git a/testsuites/integration/integration-context-test/src/test/resources/infinispan/infinispan-context-test.xml b/testsuites/integration/integration-context-test/src/test/resources/infinispan/infinispan-context-test.xml
new file mode 100644
index 0000000..9fa7a2a
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/resources/infinispan/infinispan-context-test.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 2016-2018 Ericsson. All rights reserved.
+  ================================================================================
+  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.
+  
+  SPDX-License-Identifier: Apache-2.0
+  ============LICENSE_END=========================================================
+-->
+
+<infinispan xmlns="urn:infinispan:config:8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="urn:infinispan:config:8.0 http://infinispan.org/schemas/infinispan-config-8.0.xsd">
+    <jgroups>
+        <stack-file name="tcpStack" path="infinispan/default-jgroups-tcp.xml" />
+    </jgroups>
+
+    <cache-container name="ApexCacheContainer" default-cache="LTypeContextAlbum_0.0.1">
+        <transport cluster="apexCluster" stack="tcpStack" />
+        <jmx />
+        <replicated-cache name="LTypeContextAlbum_0.0.1" mode="SYNC" statistics="true">
+            <state-transfer enabled="true" />
+        </replicated-cache>
+    </cache-container>
+</infinispan>
diff --git a/testsuites/integration/integration-context-test/src/test/resources/logback-test.xml b/testsuites/integration/integration-context-test/src/test/resources/logback-test.xml
new file mode 100644
index 0000000..7fd818d
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/resources/logback-test.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 2016-2018 Ericsson. All rights reserved.
+  ================================================================================
+  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.
+  
+  SPDX-License-Identifier: Apache-2.0
+  ============LICENSE_END=========================================================
+-->
+
+<configuration>
+	<contextName>Apex</contextName>
+	<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
+	<property name="LOG_DIR" value="${java.io.tmpdir}/apex_logging/" />
+
+	<!-- USE FOR STD OUT ONLY -->
+	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<Pattern>%d %contextName [%t] %level %logger{36} - %msg%n</Pattern>
+		</encoder>
+	</appender>
+
+	<logger name="org.apache.zookeeper.ClientCnxn" level="OFF" additivity="false">
+		<appender-ref ref="STDOUT" />
+	</logger>
+	
+	<appender name="FILE"
+		class="ch.qos.logback.core.FileAppender">
+		<file>${LOG_DIR}/apex.log</file>
+		<encoder>
+			<pattern>%d %-5relative [procId=${processId}] [%thread] %-5level
+				%logger{26} - %msg %n %ex{full}</pattern>
+		</encoder>
+	</appender>
+
+	<appender name="CTXT_FILE"
+		class="ch.qos.logback.core.FileAppender">
+		<file>${LOG_DIR}/apex_ctxt.log</file>
+		<encoder>
+			<pattern>%d %-5relative [procId=${processId}] [%thread] %-5level
+				%logger{26} - %msg %n %ex{full}</pattern>
+		</encoder>
+	</appender>
+
+    <logger name="org.infinispan" level="info" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <logger name="com.ericsson.apex.context.monitoring" level="TRACE" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+    
+    <logger name="com.ericsson.apex.context.monitoring" level="TRACE" additivity="false">
+        <appender-ref ref="CTXT_FILE" />
+    </logger>
+    
+    <logger name="org.jgroups" level="off" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <root level="info">
+        <appender-ref ref="STDOUT" />
+    </root>
+
+</configuration>