From 3f300de4a4ab68feef455e43b18cac804323fd8e Mon Sep 17 00:00:00 2001 From: "waqas.ikram" Date: Thu, 5 Jul 2018 18:57:02 +0100 Subject: Refactoring existing integration tests Change-Id: I1aedd94d5197b8c6513fc701e9df2aab4edec088 Issue-ID: POLICY-865 Signed-off-by: waqas.ikram --- .../integration/integration-context-test/pom.xml | 88 ++++++ .../test/locking/TestConcurrentContext.java | 316 +++++++++++++++++++++ .../src/test/resources/hazelcast/hazelcast.xml | 54 ++++ .../resources/infinispan/default-jgroups-tcp.xml | 76 +++++ .../resources/infinispan/default-jgroups-udp.xml | 79 ++++++ .../infinispan/infinispan-context-test.xml | 35 +++ .../src/test/resources/logback-test.xml | 76 +++++ 7 files changed, 724 insertions(+) create mode 100644 testsuites/integration/integration-context-test/pom.xml create mode 100644 testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/plugins/context/test/locking/TestConcurrentContext.java create mode 100644 testsuites/integration/integration-context-test/src/test/resources/hazelcast/hazelcast.xml create mode 100644 testsuites/integration/integration-context-test/src/test/resources/infinispan/default-jgroups-tcp.xml create mode 100644 testsuites/integration/integration-context-test/src/test/resources/infinispan/default-jgroups-udp.xml create mode 100644 testsuites/integration/integration-context-test/src/test/resources/infinispan/infinispan-context-test.xml create mode 100644 testsuites/integration/integration-context-test/src/test/resources/logback-test.xml (limited to 'testsuites/integration/integration-context-test') diff --git a/testsuites/integration/integration-context-test/pom.xml b/testsuites/integration/integration-context-test/pom.xml new file mode 100644 index 000000000..8c62339f2 --- /dev/null +++ b/testsuites/integration/integration-context-test/pom.xml @@ -0,0 +1,88 @@ + + + + 4.0.0 + + org.onap.policy.apex-pdp.testsuites.integration + integration + 2.0.0-SNAPSHOT + + + integration-context-test + ${project.artifactId} + [${project.parent.artifactId}] module to run context tests using various plugins, multi-threads and multi-JVMs + + + + + org.onap.policy.apex-pdp.core + core-infrastructure + ${project.version} + test + + + org.onap.policy.apex-pdp.plugins.plugins-context.context-distribution + context-distribution-hazelcast + ${project.version} + + + org.onap.policy.apex-pdp.plugins.plugins-context.context-distribution + context-distribution-infinispan + ${project.version} + + + org.onap.policy.apex-pdp.plugins.plugins-context.context-locking + context-locking-curator + ${project.version} + + + org.slf4j + slf4j-log4j12 + + + + + org.onap.policy.apex-pdp.plugins.plugins-context.context-locking + context-locking-hazelcast + ${project.version} + + + org.onap.policy.apex-pdp.context + context-test-utils + ${project.version} + test + + + org.apache.curator + curator-test + 4.0.0 + test + + + log4j + log4j + + + + + + \ 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 000000000..7a3a29cc1 --- /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 ipAddressSet = new TreeSet(); + + final Enumeration nets = NetworkInterface.getNetworkInterfaces(); + for (final NetworkInterface netint : Collections.list(nets)) { + final Enumeration 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 000000000..d69f24b90 --- /dev/null +++ b/testsuites/integration/integration-context-test/src/test/resources/hazelcast/hazelcast.xml @@ -0,0 +1,54 @@ + + + + + + ApexHazelcastGroup + ApexHazelcastGroupPassword + + + 5706 + + + 224.2.2.10 + 54327 + + + 127.0.0.1 + + + + + 127.0.0.* + + + + true + slf4j + + false + 60 + + + 16 + + 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 000000000..028cf1df6 --- /dev/null +++ b/testsuites/integration/integration-context-test/src/test/resources/infinispan/default-jgroups-tcp.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + 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 000000000..17ba5eaca --- /dev/null +++ b/testsuites/integration/integration-context-test/src/test/resources/infinispan/default-jgroups-udp.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + 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 000000000..9fa7a2a14 --- /dev/null +++ b/testsuites/integration/integration-context-test/src/test/resources/infinispan/infinispan-context-test.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + 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 000000000..7fd818d4b --- /dev/null +++ b/testsuites/integration/integration-context-test/src/test/resources/logback-test.xml @@ -0,0 +1,76 @@ + + + + + Apex + + + + + + + %d %contextName [%t] %level %logger{36} - %msg%n + + + + + + + + + ${LOG_DIR}/apex.log + + %d %-5relative [procId=${processId}] [%thread] %-5level + %logger{26} - %msg %n %ex{full} + + + + + ${LOG_DIR}/apex_ctxt.log + + %d %-5relative [procId=${processId}] [%thread] %-5level + %logger{26} - %msg %n %ex{full} + + + + + + + + + + + + + + + + + + + + + + + + -- cgit 1.2.3-korg