aboutsummaryrefslogtreecommitdiffstats
path: root/testsuites/integration/integration-context-test/src
diff options
context:
space:
mode:
authorliamfallon <liam.fallon@est.tech>2019-02-22 17:30:59 +0000
committerliamfallon <liam.fallon@est.tech>2019-02-22 17:30:59 +0000
commit1ba6a3268b220cc99e9ed993553fa6f34f111a39 (patch)
tree4dea3d65bd831f58dff8b066c484e9b876f60692 /testsuites/integration/integration-context-test/src
parent53d016bd95ded26821a7711c6f049ffc4ccd51ca (diff)
Change versions of Zookeeper and C3P0
This review changes the versions of Zookeeper and C3P0 to resolve security issues. It also merges the context test utils module into the context test because that module was misplaced and put an incompatible Zookeeper dependency in the APEX context module. Issue-ID: POLICY-1540 Change-Id: I86048ae1fc8b818611f423d6fd1f4a9fcc3f76f9 Signed-off-by: liamfallon <liam.fallon@est.tech>
Diffstat (limited to 'testsuites/integration/integration-context-test/src')
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/TestConcurrentContext.java104
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextBooleanItem.java112
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextByteItem.java110
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDateItem.java242
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDateLocaleItem.java254
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDateTzItem.java193
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDoubleItem.java113
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextFloatItem.java110
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextIntItem.java119
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextLongItem.java111
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextLongObjectItem.java117
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextStringItem.java117
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextTreeMapItem.java123
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextTreeSetItem.java133
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestExternalContextItem.java435
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestGlobalContextItem.java435
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestPolicyContextItem.java242
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/package-info.java28
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/ContextAlbumUpdate.java121
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/ContextInstantiation.java555
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/ContextUpdate.java178
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/SequentialContextInstantiation.java386
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/package-info.java28
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/entities/ArtifactKeyTestEntity.java258
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/entities/ReferenceKeyTestEntity.java261
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/entities/package-info.java27
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/factory/TestContextAlbumFactory.java217
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/factory/package-info.java28
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/AlbumModifier.java43
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/LockType.java102
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/NoLockAlbumModifier.java56
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/ReadLockAlbumModifier.java71
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/SingleValueWriteLockAlbumModifier.java75
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/WriteLockAlbumModifier.java73
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/package-info.java26
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContext.java166
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContextJvm.java233
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContextJvmThread.java136
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContextThread.java95
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/package-info.java28
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/ConfigrationProvider.java146
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/ConfigrationProviderImpl.java265
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/Constants.java81
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/IntegrationThreadFactory.java60
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/NetworkUtils.java67
-rw-r--r--testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/ZooKeeperServerServiceProvider.java106
-rwxr-xr-xtestsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/package-info.java28
-rw-r--r--testsuites/integration/integration-context-test/src/test/resources/META-INF/persistence.xml51
48 files changed, 7046 insertions, 19 deletions
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/TestConcurrentContext.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/TestConcurrentContext.java
index a62414ac6..aa806b5e8 100644
--- a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/TestConcurrentContext.java
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/TestConcurrentContext.java
@@ -1,19 +1,20 @@
/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
* ================================================================================
* 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=========================================================
*/
@@ -24,7 +25,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.onap.policy.apex.context.parameters.DistributorParameters.DEFAULT_DISTRIBUTOR_PLUGIN_CLASS;
-import static org.onap.policy.apex.context.test.utils.Constants.TEST_VALUE;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.TEST_VALUE;
import java.io.File;
import java.io.IOException;
@@ -32,22 +33,18 @@ import java.net.InetSocketAddress;
import java.util.Map;
import java.util.SortedSet;
+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.impl.schema.java.JavaSchemaHelperParameters;
+import org.onap.policy.apex.context.parameters.ContextParameterConstants;
import org.onap.policy.apex.context.parameters.ContextParameters;
import org.onap.policy.apex.context.parameters.DistributorParameters;
-import org.onap.policy.apex.context.test.concepts.TestContextLongItem;
-import org.onap.policy.apex.context.test.lock.modifier.LockType;
-import org.onap.policy.apex.context.test.locking.ConcurrentContext;
-import org.onap.policy.apex.context.test.utils.ConfigrationProvider;
-import org.onap.policy.apex.context.test.utils.ConfigrationProviderImpl;
-import org.onap.policy.apex.context.test.utils.Constants;
-import org.onap.policy.apex.context.test.utils.NetworkUtils;
-import org.onap.policy.apex.context.test.utils.ZooKeeperServerServiceProvider;
+import org.onap.policy.apex.context.parameters.SchemaParameters;
import org.onap.policy.apex.core.infrastructure.messaging.util.MessagingUtils;
import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
import org.onap.policy.apex.model.basicmodel.handling.ApexModelException;
@@ -57,6 +54,14 @@ import org.onap.policy.apex.plugins.context.distribution.infinispan.InfinispanDi
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.onap.policy.apex.testsuites.integration.context.concepts.TestContextLongItem;
+import org.onap.policy.apex.testsuites.integration.context.lock.modifier.LockType;
+import org.onap.policy.apex.testsuites.integration.context.locking.ConcurrentContext;
+import org.onap.policy.apex.testsuites.integration.context.utils.ConfigrationProvider;
+import org.onap.policy.apex.testsuites.integration.context.utils.ConfigrationProviderImpl;
+import org.onap.policy.apex.testsuites.integration.context.utils.Constants;
+import org.onap.policy.apex.testsuites.integration.context.utils.NetworkUtils;
+import org.onap.policy.apex.testsuites.integration.context.utils.ZooKeeperServerServiceProvider;
import org.onap.policy.common.parameters.ParameterService;
import org.onap.policy.common.utils.resources.ResourceUtils;
import org.slf4j.ext.XLogger;
@@ -88,8 +93,11 @@ public class TestConcurrentContext {
// 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;
+ private static SchemaParameters schemaParameters;
+
@Rule
public final TemporaryFolder folder = new TemporaryFolder();
@@ -114,6 +122,20 @@ public class TestConcurrentContext {
logger.info("For Infinispan, setting jgroups.tcp.address to: {}", ipAddressSet.first());
System.setProperty("jgroups.tcp.address", ipAddressSet.first());
+ schemaParameters = new SchemaParameters();
+
+ schemaParameters.setName(ContextParameterConstants.SCHEMA_GROUP_NAME);
+ schemaParameters.getSchemaHelperParameterMap().put("JAVA", new JavaSchemaHelperParameters());
+
+ ParameterService.register(schemaParameters, true);
+ }
+
+ /**
+ * Clear configuration.
+ */
+ @AfterClass
+ public static void clear() {
+ ParameterService.deregister(schemaParameters);
}
/**
@@ -150,6 +172,7 @@ public class TestConcurrentContext {
final ContextParameters contextParameters = new ContextParameters();
contextParameters.getLockManagerParameters().setPluginClass(JvmLocalLockManager.class.getCanonicalName());
+ setContextParmetersInParameterService(contextParameters);
final ConfigrationProvider configrationProvider = getConfigrationProvider("JVMLocalVarSet",
TEST_JVM_COUNT_SINGLE_JVM, TEST_THREAD_COUNT_SINGLE_JVM, TEST_THREAD_LOOPS);
@@ -164,6 +187,8 @@ public class TestConcurrentContext {
assertNotNull(actual);
assertEquals(expected, actual.getLongValue());
+ clearContextParmetersInParameterService(contextParameters);
+
logger.debug("Ran testConcurrentContextJVMLocalVarSet test");
}
@@ -176,7 +201,9 @@ public class TestConcurrentContext {
public void testConcurrentContextJvmLocalNoVarSet() throws Exception {
logger.debug("Running testConcurrentContextJVMLocalNoVarSet test . . .");
- new ContextParameters();
+ final ContextParameters contextParameters = new ContextParameters();
+ setContextParmetersInParameterService(contextParameters);
+
final ConfigrationProvider configrationProvider = getConfigrationProvider("JVMLocalNoVarSet",
TEST_JVM_COUNT_SINGLE_JVM, TEST_THREAD_COUNT_SINGLE_JVM, TEST_THREAD_LOOPS);
@@ -188,6 +215,7 @@ public class TestConcurrentContext {
assertNotNull(actual);
assertEquals(expected, actual.getLongValue());
+ clearContextParmetersInParameterService(contextParameters);
logger.debug("Ran testConcurrentContextJVMLocalNoVarSet test");
}
@@ -203,6 +231,7 @@ public class TestConcurrentContext {
final ContextParameters contextParameters = new ContextParameters();
contextParameters.getDistributorParameters().setPluginClass(JvmLocalDistributor.class.getCanonicalName());
contextParameters.getLockManagerParameters().setPluginClass(JvmLocalLockManager.class.getCanonicalName());
+ setContextParmetersInParameterService(contextParameters);
final ConfigrationProvider configrationProvider = getConfigrationProvider("testConcurrentContextMultiJVMNoLock",
TEST_JVM_COUNT_MULTI_JVM, TEST_THREAD_COUNT_MULTI_JVM, TEST_THREAD_LOOPS);
@@ -215,6 +244,7 @@ public class TestConcurrentContext {
assertNotNull(actual);
assertEquals(0, actual.getLongValue());
+ clearContextParmetersInParameterService(contextParameters);
logger.debug("Ran testConcurrentContextMultiJVMNoLock test");
}
@@ -230,6 +260,7 @@ public class TestConcurrentContext {
final ContextParameters contextParameters = new ContextParameters();
contextParameters.getDistributorParameters().setPluginClass(DEFAULT_DISTRIBUTOR_PLUGIN_CLASS);
contextParameters.getLockManagerParameters().setPluginClass(HazelcastLockManager.class.getCanonicalName());
+ setContextParmetersInParameterService(contextParameters);
final ConfigrationProvider configrationProvider = getConfigrationProvider("HazelcastLock",
TEST_JVM_COUNT_SINGLE_JVM, TEST_THREAD_COUNT_SINGLE_JVM, TEST_THREAD_LOOPS);
@@ -242,6 +273,7 @@ public class TestConcurrentContext {
assertNotNull(actual);
assertEquals(expected, actual.getLongValue());
+ clearContextParmetersInParameterService(contextParameters);
logger.debug("Ran testConcurrentContextHazelcastLock test");
}
@@ -253,9 +285,9 @@ public class TestConcurrentContext {
@Test
public void testConcurrentContextCuratorLock() throws Exception {
logger.debug("Running testConcurrentContextCuratorLock test . . .");
+ final ContextParameters contextParameters = new ContextParameters();
try {
startZookeeperServer();
- final ContextParameters contextParameters = new ContextParameters();
final DistributorParameters distributorParameters = contextParameters.getDistributorParameters();
distributorParameters.setPluginClass(DEFAULT_DISTRIBUTOR_PLUGIN_CLASS);
@@ -263,7 +295,7 @@ public class TestConcurrentContext {
curatorParameters.setPluginClass(CuratorLockManager.class.getCanonicalName());
curatorParameters.setZookeeperAddress(ZOOKEEPER_ADDRESS + ":" + zookeeperPort);
contextParameters.setLockManagerParameters(curatorParameters);
- ParameterService.register(curatorParameters);
+ setContextParmetersInParameterService(contextParameters);
final ConfigrationProvider configrationProvider = getConfigrationProvider("CuratorLock",
TEST_JVM_COUNT_SINGLE_JVM, TEST_THREAD_COUNT_SINGLE_JVM, TEST_THREAD_LOOPS);
@@ -278,6 +310,7 @@ public class TestConcurrentContext {
logger.debug("Ran testConcurrentContextCuratorLock test");
} finally {
stopZookeeperServer();
+ clearContextParmetersInParameterService(contextParameters);
}
}
@@ -294,6 +327,7 @@ public class TestConcurrentContext {
final DistributorParameters distributorParameters = contextParameters.getDistributorParameters();
distributorParameters.setPluginClass(HazelcastContextDistributor.class.getCanonicalName());
contextParameters.getLockManagerParameters().setPluginClass(HazelcastLockManager.class.getCanonicalName());
+ setContextParmetersInParameterService(contextParameters);
final ConfigrationProvider configrationProvider = getConfigrationProvider("HazelcastMultiHazelcastlock",
TEST_JVM_COUNT_MULTI_JVM, TEST_THREAD_COUNT_MULTI_JVM, TEST_THREAD_LOOPS);
@@ -305,6 +339,8 @@ public class TestConcurrentContext {
final TestContextLongItem actual = result.get(TEST_VALUE);
assertNotNull(actual);
assertEquals(expected, actual.getLongValue());
+
+ clearContextParmetersInParameterService(contextParameters);
logger.debug("Ran testConcurrentContextHazelcastMultiJVMHazelcastLock test");
}
@@ -326,6 +362,7 @@ public class TestConcurrentContext {
infinispanParameters.setConfigFile("infinispan/infinispan-context-test.xml");
contextParameters.setDistributorParameters(infinispanParameters);
contextParameters.getLockManagerParameters().setPluginClass(HazelcastLockManager.class.getCanonicalName());
+ setContextParmetersInParameterService(contextParameters);
final ConfigrationProvider configrationProvider = getConfigrationProvider("InfinispanMultiHazelcastlock",
TEST_JVM_COUNT_MULTI_JVM, TEST_THREAD_COUNT_MULTI_JVM, TEST_THREAD_LOOPS);
@@ -337,6 +374,8 @@ public class TestConcurrentContext {
final TestContextLongItem actual = result.get(TEST_VALUE);
assertNotNull(actual);
assertEquals(expected, actual.getLongValue());
+
+ clearContextParmetersInParameterService(contextParameters);
logger.debug("Ran testConcurrentContextInfinispanMultiJVMHazelcastlock test");
}
@@ -349,10 +388,10 @@ public class TestConcurrentContext {
public void testConcurrentContextInfinispanMultiJvmCuratorLock() throws Exception {
logger.debug("Running testConcurrentContextInfinispanMultiJVMCuratorLock test . . .");
+ final ContextParameters contextParameters = new ContextParameters();
try {
startZookeeperServer();
- final ContextParameters contextParameters = new ContextParameters();
final InfinispanDistributorParameters infinispanParameters = new InfinispanDistributorParameters();
infinispanParameters.setPluginClass(InfinispanContextDistributor.class.getCanonicalName());
infinispanParameters.setConfigFile("infinispan/infinispan-context-test.xml");
@@ -362,7 +401,7 @@ public class TestConcurrentContext {
curatorParameters.setPluginClass(CuratorLockManager.class.getCanonicalName());
curatorParameters.setZookeeperAddress(ZOOKEEPER_ADDRESS + ":" + zookeeperPort);
contextParameters.setLockManagerParameters(curatorParameters);
- ParameterService.register(curatorParameters);
+ setContextParmetersInParameterService(contextParameters);
final ConfigrationProvider configrationProvider = getConfigrationProvider("InfinispanMultiCuratorLock",
TEST_JVM_COUNT_MULTI_JVM, TEST_THREAD_COUNT_MULTI_JVM, TEST_THREAD_LOOPS);
@@ -376,6 +415,7 @@ public class TestConcurrentContext {
assertEquals(expected, actual.getLongValue());
} finally {
stopZookeeperServer();
+ clearContextParmetersInParameterService(contextParameters);
}
logger.debug("Ran testConcurrentContextInfinispanMultiJVMCuratorLock test");
@@ -390,10 +430,10 @@ public class TestConcurrentContext {
public void testConcurrentContextHazelcastMultiJvmCuratorLock() throws Exception {
logger.debug("Running testConcurrentContextHazelcastMultiJVMCuratorLock test . . .");
+ final ContextParameters contextParameters = new ContextParameters();
try {
startZookeeperServer();
- final ContextParameters contextParameters = new ContextParameters();
contextParameters.getDistributorParameters()
.setPluginClass(HazelcastContextDistributor.class.getCanonicalName());
@@ -401,7 +441,7 @@ public class TestConcurrentContext {
curatorParameters.setPluginClass(CuratorLockManager.class.getCanonicalName());
curatorParameters.setZookeeperAddress(ZOOKEEPER_ADDRESS + ":" + zookeeperPort);
contextParameters.setLockManagerParameters(curatorParameters);
- ParameterService.register(curatorParameters);
+ setContextParmetersInParameterService(contextParameters);
final ConfigrationProvider configrationProvider = getConfigrationProvider("HazelcastMultiCuratorLock",
TEST_JVM_COUNT_MULTI_JVM, TEST_THREAD_COUNT_MULTI_JVM, TEST_THREAD_LOOPS);
@@ -414,6 +454,7 @@ public class TestConcurrentContext {
assertEquals(expected, actual.getLongValue());
} finally {
stopZookeeperServer();
+ clearContextParmetersInParameterService(contextParameters);
}
logger.debug("Ran testConcurrentContextHazelcastMultiJVMCuratorLock test");
}
@@ -440,4 +481,29 @@ public class TestConcurrentContext {
};
}
+
+ /**
+ * Set the context parameters in the parameter service.
+ *
+ * @param contextParameters The parameters to set.
+ */
+ private void setContextParmetersInParameterService(final ContextParameters contextParameters) {
+ ParameterService.register(contextParameters);
+ ParameterService.register(contextParameters.getDistributorParameters());
+ ParameterService.register(contextParameters.getLockManagerParameters());
+ ParameterService.register(contextParameters.getPersistorParameters());
+ }
+
+ /**
+ * Clear the context parameters in the parameter service.
+ *
+ * @param contextParameters The parameters to set.
+ */
+ private void clearContextParmetersInParameterService(final ContextParameters contextParameters) {
+ ParameterService.deregister(contextParameters.getPersistorParameters());
+ ParameterService.deregister(contextParameters.getLockManagerParameters());
+ ParameterService.deregister(contextParameters.getDistributorParameters());
+ ParameterService.deregister(contextParameters);
+
+ }
}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextBooleanItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextBooleanItem.java
new file mode 100644
index 000000000..24193848b
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextBooleanItem.java
@@ -0,0 +1,112 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+
+/**
+ * The Class TestContextItem000.
+ */
+public class TestContextBooleanItem implements Serializable {
+ private static final int HASH_PRIME_1 = 31;
+ private static final int HASH_PRIME_2 = 1231;
+ private static final int HASH_PRIME_3 = 1237;
+
+ private static final long serialVersionUID = 7241008665286367796L;
+
+ private boolean flag = false;
+
+ /**
+ * The Constructor.
+ */
+ public TestContextBooleanItem() {}
+
+ /**
+ * The Constructor.
+ *
+ * @param flag the flag
+ */
+ public TestContextBooleanItem(final Boolean flag) {
+ this.flag = flag;
+ }
+
+ /**
+ * Gets the flag.
+ *
+ * @return the flag
+ */
+ public boolean getFlag() {
+ return flag;
+ }
+
+ /**
+ * Sets the flag.
+ *
+ * @param flag the flag
+ */
+ public void setFlag(final boolean flag) {
+ this.flag = flag;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ result = prime * result + (flag ? HASH_PRIME_2 : HASH_PRIME_3);
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestContextBooleanItem other = (TestContextBooleanItem) obj;
+ return flag == other.flag;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestContextItem000 [flag=" + flag + "]";
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextByteItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextByteItem.java
new file mode 100644
index 000000000..a6d4b1a1e
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextByteItem.java
@@ -0,0 +1,110 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+
+/**
+ * The Class TestContextItem001.
+ */
+public class TestContextByteItem implements Serializable {
+ private static final long serialVersionUID = 1361938145823720386L;
+
+ private static final int HASH_PRIME_1 = 31;
+
+ private byte byteValue = 0;
+
+ /**
+ * The Constructor.
+ */
+ public TestContextByteItem() {}
+
+ /**
+ * The Constructor.
+ *
+ * @param byteValue the byte value
+ */
+ public TestContextByteItem(final Byte byteValue) {
+ this.byteValue = byteValue;
+ }
+
+ /**
+ * Gets the byte value.
+ *
+ * @return the byte value
+ */
+ public byte getByteValue() {
+ return byteValue;
+ }
+
+ /**
+ * Sets the byte value.
+ *
+ * @param byteValue the byte value
+ */
+ public void setByteValue(final byte byteValue) {
+ this.byteValue = byteValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ result = prime * result + byteValue;
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestContextByteItem other = (TestContextByteItem) obj;
+ return byteValue == other.byteValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestContextItem001 [byteValue=" + byteValue + "]";
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDateItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDateItem.java
new file mode 100644
index 000000000..9cd3c6e81
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDateItem.java
@@ -0,0 +1,242 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.TimeZone;
+
+/**
+ * The Class TestContextItem008.
+ */
+public class TestContextDateItem implements Serializable {
+ private static final long serialVersionUID = -6984963129968805460L;
+
+ private static final int HASH_PRIME_1 = 31;
+ private static final int FOUR_BYTES = 32;
+
+ private long time;
+
+ private int year;
+ private int month;
+ private int day;
+ private int hour;
+ private int minute;
+ private int second;
+ private int milliSecond;
+
+ /**
+ * The Constructor.
+ */
+ public TestContextDateItem() {
+ this(new Date(System.currentTimeMillis()));
+ }
+
+ /**
+ * The Constructor.
+ *
+ * @param dateValue the date value
+ */
+ public TestContextDateItem(final Date dateValue) {
+ if (dateValue != null) {
+ setDateValue(dateValue.getTime());
+ }
+ else {
+ new Date(0);
+ }
+ }
+
+ /**
+ * The Constructor.
+ *
+ * @param time the time
+ */
+ public TestContextDateItem(final long time) {
+ setDateValue(time);
+ }
+
+ /**
+ * Gets the time.
+ *
+ * @return the time
+ */
+ public long getTime() {
+ return time;
+ }
+
+ /**
+ * Gets the year.
+ *
+ * @return the year
+ */
+ public int getYear() {
+ return year;
+ }
+
+ /**
+ * Gets the month.
+ *
+ * @return the month
+ */
+ public int getMonth() {
+ return month;
+ }
+
+ /**
+ * Gets the day.
+ *
+ * @return the day
+ */
+ public int getDay() {
+ return day;
+ }
+
+ /**
+ * Gets the hour.
+ *
+ * @return the hour
+ */
+ public int getHour() {
+ return hour;
+ }
+
+ /**
+ * Gets the minute.
+ *
+ * @return the minute
+ */
+ public int getMinute() {
+ return minute;
+ }
+
+ /**
+ * Gets the second.
+ *
+ * @return the second
+ */
+ public int getSecond() {
+ return second;
+ }
+
+ /**
+ * Gets the milli second.
+ *
+ * @return the milli second
+ */
+ public int getMilliSecond() {
+ return milliSecond;
+ }
+
+ /**
+ * Gets the date value.
+ *
+ * @return the date value
+ */
+ public Date getDateValue() {
+ return new Date(time);
+ }
+
+ /**
+ * Sets the date value.
+ *
+ * @param dateValue the date value
+ */
+ public void setDateValue(final Date dateValue) {
+ if (dateValue != null) {
+ setDateValue(dateValue.getTime());
+ }
+ }
+
+ /**
+ * Sets the date value.
+ *
+ * @param dateValue the date value
+ */
+ public void setDateValue(final long dateValue) {
+ this.time = dateValue;
+
+ final Calendar calendar = Calendar.getInstance();
+ calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
+ calendar.setTimeInMillis(time);
+
+ year = calendar.get(Calendar.YEAR);
+ month = calendar.get(Calendar.MONTH);
+ day = calendar.get(Calendar.DAY_OF_MONTH);
+ hour = calendar.get(Calendar.HOUR);
+ minute = calendar.get(Calendar.MINUTE);
+ second = calendar.get(Calendar.SECOND);
+ milliSecond = calendar.get(Calendar.MILLISECOND);
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ result = prime * result + day;
+ result = prime * result + hour;
+ result = prime * result + milliSecond;
+ result = prime * result + minute;
+ result = prime * result + month;
+ result = prime * result + second;
+ result = prime * result + (int) (time ^ (time >>> FOUR_BYTES));
+ result = prime * result + year;
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestContextDateItem other = (TestContextDateItem) obj;
+ return time == other.time;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestContextItem008 [time=" + time + ", year=" + year + ", month=" + month + ", day=" + day + ", hour="
+ + hour + ", minute=" + minute + ", second=" + second + ", milliSecond=" + milliSecond + "]";
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDateLocaleItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDateLocaleItem.java
new file mode 100644
index 000000000..28c3e9ee3
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDateLocaleItem.java
@@ -0,0 +1,254 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+import java.util.Locale;
+import java.util.TimeZone;
+
+/**
+ * The Class TestContextItem00A.
+ */
+public class TestContextDateLocaleItem implements Serializable {
+ private static final long serialVersionUID = -6579903685538233754L;
+
+ private static final int HASH_PRIME_1 = 31;
+ private static final int HASH_PRIME_2 = 1231;
+ private static final int HASH_PRIME_3 = 1237;
+
+ private TestContextDateItem dateValue = new TestContextDateItem(System.currentTimeMillis());
+ private String timeZoneString = TimeZone.getTimeZone("Europe/Dublin").getDisplayName();
+ private boolean dst = false;
+ private int utcOffset = 0;
+ private Locale locale = Locale.ENGLISH;
+
+ /**
+ * The Constructor.
+ */
+ public TestContextDateLocaleItem() {
+ }
+
+ /**
+ * The Constructor.
+ *
+ * @param dateValue the date value
+ * @param tzValue the tz value
+ * @param dst the dst
+ * @param utcOffset the utc offset
+ * @param language the language
+ * @param country the country
+ */
+ public TestContextDateLocaleItem(final TestContextDateItem dateValue, final String tzValue, final boolean dst,
+ final int utcOffset, final String language, final String country) {
+ this.dateValue = dateValue;
+ this.timeZoneString = TimeZone.getTimeZone(tzValue).getDisplayName();
+ this.dst = dst;
+ this.utcOffset = utcOffset;
+
+ this.locale = new Locale(language, country);
+ }
+
+ /**
+ * The Constructor.
+ *
+ * @param original the original
+ */
+ public TestContextDateLocaleItem(final TestContextDateLocaleItem original) {
+ this.dateValue = original.dateValue;
+ this.timeZoneString = TimeZone.getTimeZone(original.timeZoneString).getDisplayName();
+ this.dst = original.dst;
+ this.utcOffset = original.utcOffset;
+
+ this.locale = new Locale(original.getLocale().getCountry(), original.getLocale().getLanguage());
+ }
+
+ /**
+ * Gets the date value.
+ *
+ * @return the date value
+ */
+ public TestContextDateItem getDateValue() {
+ return dateValue;
+ }
+
+ /**
+ * Sets the date value.
+ *
+ * @param dateValue the date value
+ */
+ public void setDateValue(final TestContextDateItem dateValue) {
+ this.dateValue = dateValue;
+ }
+
+ /**
+ * Gets the TZ value.
+ *
+ * @return the TZ value
+ */
+ public String getTzValue() {
+ return timeZoneString;
+ }
+
+ /**
+ * Sets the TZ value.
+ *
+ * @param tzValue the TZ value
+ */
+ public void setTzValue(final String tzValue) {
+ if (tzValue != null) {
+ this.timeZoneString = TimeZone.getTimeZone(tzValue).getDisplayName();
+ } else {
+ this.timeZoneString = null;
+ }
+ }
+
+ /**
+ * Gets the DST.
+ *
+ * @return the dst
+ */
+ public boolean getDst() {
+ return dst;
+ }
+
+ /**
+ * Sets the DST.
+ *
+ * @param newDst the dst
+ */
+ public void setDst(final boolean newDst) {
+ this.dst = newDst;
+ }
+
+ /**
+ * Gets the UTC offset.
+ *
+ * @return the UTC offset
+ */
+ public int getUtcOffset() {
+ return utcOffset;
+ }
+
+ /**
+ * Sets the UTC offset.
+ *
+ * @param newUtcOffset the UTC offset
+ */
+ public void setUtcOffset(final int newUtcOffset) {
+ this.utcOffset = newUtcOffset;
+ }
+
+ /**
+ * Gets the locale.
+ *
+ * @return the locale
+ */
+ public Locale getLocale() {
+ return locale;
+ }
+
+ /**
+ * Sets the locale.
+ *
+ * @param locale the locale
+ */
+ public void setLocale(final Locale locale) {
+ if (locale != null) {
+ this.locale = locale;
+ }
+ else {
+ this.locale = null;
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ result = prime * result + ((dateValue == null) ? 0 : dateValue.hashCode());
+ result = prime * result + (dst ? HASH_PRIME_2 : HASH_PRIME_3);
+ result = prime * result + ((locale == null) ? 0 : locale.hashCode());
+ result = prime * result + ((timeZoneString == null) ? 0 : timeZoneString.hashCode());
+ result = prime * result + utcOffset;
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestContextDateLocaleItem other = (TestContextDateLocaleItem) obj;
+ if (dateValue == null) {
+ if (other.dateValue != null) {
+ return false;
+ }
+ } else if (!dateValue.equals(other.dateValue)) {
+ return false;
+ }
+ if (dst != other.dst) {
+ return false;
+ }
+ if (locale == null) {
+ if (other.locale != null) {
+ return false;
+ }
+ } else if (!locale.equals(other.locale)) {
+ return false;
+ }
+ if (timeZoneString == null) {
+ if (other.timeZoneString != null) {
+ return false;
+ }
+ } else if (!timeZoneString.equals(other.timeZoneString)) {
+ return false;
+ }
+ return utcOffset == other.utcOffset;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestContextItem00A [dateValue=" + dateValue + ", timeZoneString=" + timeZoneString + ", dst=" + dst
+ + ", utcOffset=" + utcOffset + ", locale=" + locale + "]";
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDateTzItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDateTzItem.java
new file mode 100644
index 000000000..b081cd55f
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDateTzItem.java
@@ -0,0 +1,193 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+import java.util.TimeZone;
+
+/**
+ * The Class TestContextItem009.
+ */
+public class TestContextDateTzItem implements Serializable {
+ private static final long serialVersionUID = 5604426823170331706L;
+
+ private static final int HASH_PRIME_1 = 31;
+ private static final int HASH_PRIME_2 = 1231;
+ private static final int HASH_PRIME_3 = 1237;
+
+ private TestContextDateItem dateValue = new TestContextDateItem(System.currentTimeMillis());
+ private String timeZoneString = TimeZone.getTimeZone("Europe/Dublin").getDisplayName();
+ private boolean dst = false;
+
+ /**
+ * The Constructor.
+ */
+ public TestContextDateTzItem() {
+ dst = true;
+ }
+
+ /**
+ * The Constructor.
+ *
+ * @param dateValue the date value
+ * @param tzValue the tz value
+ * @param dst the dst
+ */
+ public TestContextDateTzItem(final TestContextDateItem dateValue, final String tzValue, final boolean dst) {
+ this.dateValue = dateValue;
+ this.timeZoneString = TimeZone.getTimeZone(tzValue).getDisplayName();
+ this.dst = dst;
+ }
+
+ /**
+ * The Constructor.
+ *
+ * @param original the original
+ */
+ public TestContextDateTzItem(final TestContextDateTzItem original) {
+ this.dateValue = original.dateValue;
+ this.timeZoneString = original.timeZoneString;
+ this.dst = original.dst;
+ }
+
+ /**
+ * Gets the date value.
+ *
+ * @return the date value
+ */
+ public TestContextDateItem getDateValue() {
+ return dateValue;
+ }
+
+ /**
+ * Sets the date value.
+ *
+ * @param dateValue the date value
+ */
+ public void setDateValue(final TestContextDateItem dateValue) {
+ this.dateValue = dateValue;
+ }
+
+ /**
+ * Gets the TZ value.
+ *
+ * @return the TZ value
+ */
+ public String getTzValue() {
+ return timeZoneString;
+ }
+
+ /**
+ * Sets the TZ value.
+ *
+ * @param tzValue the TZ value
+ */
+ public void setTzValue(final String tzValue) {
+ if (tzValue != null) {
+ this.timeZoneString = TimeZone.getTimeZone(tzValue).getDisplayName();
+ }
+ else {
+ this.timeZoneString = null;
+ }
+ }
+
+ /**
+ * Gets the DST.
+ *
+ * @return the dst
+ */
+ public boolean getDst() {
+ return dst;
+ }
+
+ /**
+ * Sets the DST.
+ *
+ * @param newDst the dst
+ */
+ public void setDst(final boolean newDst) {
+ this.dst = newDst;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ result = prime * result + ((dateValue == null) ? 0 : dateValue.hashCode());
+ result = prime * result + (dst ? HASH_PRIME_2 : HASH_PRIME_3);
+ result = prime * result + ((timeZoneString == null) ? 0 : timeZoneString.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestContextDateTzItem other = (TestContextDateTzItem) obj;
+ if (dateValue == null) {
+ if (other.dateValue != null) {
+ return false;
+ }
+ } else if (!dateValue.equals(other.dateValue)) {
+ return false;
+ }
+ if (dst != other.dst) {
+ return false;
+ }
+ if (timeZoneString == null) {
+ if (other.timeZoneString != null) {
+ return false;
+ }
+ }
+ else if (!timeZoneString.equals(other.timeZoneString)) {
+ return false;
+ }
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestContextItem009 [dateValue=" + dateValue + ", tzValue=" + timeZoneString + ", dst=" + dst + "]";
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDoubleItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDoubleItem.java
new file mode 100644
index 000000000..19f756051
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextDoubleItem.java
@@ -0,0 +1,113 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+
+/**
+ * The Class TestContextItem005.
+ */
+public class TestContextDoubleItem implements Serializable {
+ private static final long serialVersionUID = -2958758261076734821L;
+
+ private static final int HASH_PRIME_1 = 31;
+ private static final int FOUR_BYTES = 32;
+
+ private double doubleValue = 0;
+
+ /**
+ * The Constructor.
+ */
+ public TestContextDoubleItem() {}
+
+ /**
+ * The Constructor.
+ *
+ * @param doubleValue the double value
+ */
+ public TestContextDoubleItem(final Double doubleValue) {
+ this.doubleValue = doubleValue;
+ }
+
+ /**
+ * Gets the double value.
+ *
+ * @return the double value
+ */
+ public double getDoubleValue() {
+ return doubleValue;
+ }
+
+ /**
+ * Sets the double value.
+ *
+ * @param doubleValue the double value
+ */
+ public void setDoubleValue(final double doubleValue) {
+ this.doubleValue = doubleValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ long temp;
+ temp = Double.doubleToLongBits(doubleValue);
+ result = prime * result + (int) (temp ^ (temp >>> FOUR_BYTES));
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestContextDoubleItem other = (TestContextDoubleItem) obj;
+ return Double.doubleToLongBits(doubleValue) == Double.doubleToLongBits(other.doubleValue);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestContextItem005 [doubleValue=" + doubleValue + "]";
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextFloatItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextFloatItem.java
new file mode 100644
index 000000000..0883c1d8f
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextFloatItem.java
@@ -0,0 +1,110 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+
+/**
+ * The Class TestContextItem004.
+ */
+public class TestContextFloatItem implements Serializable {
+ private static final long serialVersionUID = -3359180576903272400L;
+
+ private static final int HASH_PRIME_1 = 31;
+
+ private float floatValue = 0;
+
+ /**
+ * The Constructor.
+ */
+ public TestContextFloatItem() {}
+
+ /**
+ * The Constructor.
+ *
+ * @param floatValue the float value
+ */
+ public TestContextFloatItem(final Float floatValue) {
+ this.floatValue = floatValue;
+ }
+
+ /**
+ * Gets the float value.
+ *
+ * @return the float value
+ */
+ public float getFloatValue() {
+ return floatValue;
+ }
+
+ /**
+ * Sets the float value.
+ *
+ * @param floatValue the float value
+ */
+ public void setFloatValue(final float floatValue) {
+ this.floatValue = floatValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ result = prime * result + Float.floatToIntBits(floatValue);
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestContextFloatItem other = (TestContextFloatItem) obj;
+ return Float.floatToIntBits(floatValue) == Float.floatToIntBits(other.floatValue);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestContextItem004 [floatValue=" + floatValue + "]";
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextIntItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextIntItem.java
new file mode 100644
index 000000000..5932769b3
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextIntItem.java
@@ -0,0 +1,119 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+
+/**
+ * The Class TestContextItem002.
+ */
+public class TestContextIntItem implements Serializable {
+ private static final long serialVersionUID = -8978435658277900984L;
+
+ private static final int HASH_PRIME_1 = 31;
+
+ private int intValue = 0;
+
+ /**
+ * The Constructor.
+ */
+ public TestContextIntItem() {}
+
+ /**
+ * The Constructor.
+ *
+ * @param intValue the int value
+ */
+ public TestContextIntItem(final Integer intValue) {
+ this.intValue = intValue;
+ }
+
+ /**
+ * The Constructor.
+ *
+ * @param original the original
+ */
+ public TestContextIntItem(final TestContextIntItem original) {
+ this.intValue = original.intValue;
+ }
+
+ /**
+ * Gets the int value.
+ *
+ * @return the int value
+ */
+ public int getIntValue() {
+ return intValue;
+ }
+
+ /**
+ * Sets the int value.
+ *
+ * @param intValue the int value
+ */
+ public void setIntValue(final int intValue) {
+ this.intValue = intValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ result = prime * result + intValue;
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestContextIntItem other = (TestContextIntItem) obj;
+ return intValue == other.intValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestContextItem002 [intValue=" + intValue + "]";
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextLongItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextLongItem.java
new file mode 100644
index 000000000..8ab1c2bd0
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextLongItem.java
@@ -0,0 +1,111 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+
+/**
+ * The Class TestContextItem003.
+ */
+public class TestContextLongItem implements Serializable {
+ private static final long serialVersionUID = 3599267534512489386L;
+
+ private static final int HASH_PRIME_1 = 31;
+ private static final int FOUR_BYTES = 33;
+
+ private long longValue = 0;
+
+ /**
+ * The Constructor.
+ */
+ public TestContextLongItem() {}
+
+ /**
+ * The Constructor.
+ *
+ * @param longValue the long value
+ */
+ public TestContextLongItem(final Long longValue) {
+ this.longValue = longValue;
+ }
+
+ /**
+ * Gets the long value.
+ *
+ * @return the long value
+ */
+ public long getLongValue() {
+ return longValue;
+ }
+
+ /**
+ * Sets the long value.
+ *
+ * @param longValue the long value
+ */
+ public void setLongValue(final long longValue) {
+ this.longValue = longValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ result = prime * result + (int) (longValue ^ (longValue >>> FOUR_BYTES));
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestContextLongItem other = (TestContextLongItem) obj;
+ return longValue == other.longValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestContextItem003 [longValue=" + longValue + "]";
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextLongObjectItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextLongObjectItem.java
new file mode 100644
index 000000000..56b027279
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextLongObjectItem.java
@@ -0,0 +1,117 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+
+/**
+ * The Class TestContextItem007.
+ */
+public class TestContextLongObjectItem implements Serializable {
+ private static final long serialVersionUID = -1029406737866392421L;
+
+ private static final int HASH_PRIME_1 = 31;
+
+ private Long longValue = 0L;
+
+ /**
+ * The Constructor.
+ */
+ public TestContextLongObjectItem() {}
+
+ /**
+ * The Constructor.
+ *
+ * @param longValue the long value
+ */
+ public TestContextLongObjectItem(final Long longValue) {
+ this.longValue = longValue;
+ }
+
+ /**
+ * Gets the long value.
+ *
+ * @return the long value
+ */
+ public Long getLongValue() {
+ return longValue;
+ }
+
+ /**
+ * Sets the long value.
+ *
+ * @param longValue the long value
+ */
+ public void setLongValue(final Long longValue) {
+ this.longValue = longValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ result = prime * result + ((longValue == null) ? 0 : longValue.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestContextLongObjectItem other = (TestContextLongObjectItem) obj;
+ if (longValue == null) {
+ if (other.longValue != null) {
+ return false;
+ }
+ } else if (!longValue.equals(other.longValue)) {
+ return false;
+ }
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestContextItem007 [longValue=" + longValue + "]";
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextStringItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextStringItem.java
new file mode 100644
index 000000000..bbf3167ad
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextStringItem.java
@@ -0,0 +1,117 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+
+/**
+ * The Class TestContextItem006.
+ */
+public class TestContextStringItem implements Serializable {
+ private static final long serialVersionUID = -1074772190611125121L;
+
+ private static final int HASH_PRIME_1 = 31;
+
+ private String stringValue = "";
+
+ /**
+ * The Constructor.
+ */
+ public TestContextStringItem() {}
+
+ /**
+ * The Constructor.
+ *
+ * @param stringValue the string value
+ */
+ public TestContextStringItem(final String stringValue) {
+ this.stringValue = stringValue;
+ }
+
+ /**
+ * Gets the string value.
+ *
+ * @return the string value
+ */
+ public String getStringValue() {
+ return stringValue;
+ }
+
+ /**
+ * Sets the string value.
+ *
+ * @param stringValue the string value
+ */
+ public void setStringValue(final String stringValue) {
+ this.stringValue = stringValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ result = prime * result + ((stringValue == null) ? 0 : stringValue.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestContextStringItem other = (TestContextStringItem) obj;
+ if (stringValue == null) {
+ if (other.stringValue != null) {
+ return false;
+ }
+ } else if (!stringValue.equals(other.stringValue)) {
+ return false;
+ }
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestContextItem006 [stringValue=" + stringValue + "]";
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextTreeMapItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextTreeMapItem.java
new file mode 100644
index 000000000..0d5741a8e
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextTreeMapItem.java
@@ -0,0 +1,123 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * The Class TestContextItem00C.
+ */
+public class TestContextTreeMapItem implements Serializable {
+ private static final long serialVersionUID = -7497746259264651884L;
+
+ private static final int HASH_PRIME_1 = 31;
+
+ private Map<String, String> mapValue = new TreeMap<>();
+
+ /**
+ * The Constructor.
+ */
+ public TestContextTreeMapItem() {}
+
+ /**
+ * The Constructor.
+ *
+ * @param mapValue the map value
+ */
+ public TestContextTreeMapItem(final Map<String, String> mapValue) {
+ this.mapValue = mapValue;
+ }
+
+ /**
+ * Gets the map value.
+ *
+ * @return the map value
+ */
+ public Map<String, String> getMapValue() {
+ if (mapValue == null) {
+ mapValue = new TreeMap<>();
+ }
+ return mapValue;
+ }
+
+ /**
+ * Sets the map value.
+ *
+ * @param mapValue the map value
+ */
+ public void setMapValue(final Map<String, String> mapValue) {
+ this.mapValue = mapValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ result = prime * result + ((mapValue == null) ? 0 : mapValue.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestContextTreeMapItem other = (TestContextTreeMapItem) obj;
+ if (mapValue == null) {
+ if (other.mapValue != null) {
+ return false;
+ }
+ } else if (!mapValue.equals(other.mapValue)) {
+ return false;
+ }
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestContextItem00C [mapValue=" + mapValue + "]";
+ }
+
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextTreeSetItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextTreeSetItem.java
new file mode 100644
index 000000000..80cd3b179
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestContextTreeSetItem.java
@@ -0,0 +1,133 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+/**
+ * The Class TestContextItem00B.
+ */
+public class TestContextTreeSetItem implements Serializable {
+ private static final long serialVersionUID = 1254589722957250388L;
+
+ private static final int HASH_PRIME_1 = 31;
+
+ private SortedSet<String> setValue = new TreeSet<>();
+
+ /**
+ * The Constructor.
+ */
+ public TestContextTreeSetItem() {}
+
+ /**
+ * The Constructor.
+ *
+ * @param setArray the set array
+ */
+ public TestContextTreeSetItem(final String[] setArray) {
+ this.setValue = new TreeSet<>(Arrays.asList(setArray));
+ }
+
+ /**
+ * The Constructor.
+ *
+ * @param setValue the set value
+ */
+ public TestContextTreeSetItem(final SortedSet<String> setValue) {
+ this.setValue = setValue;
+ }
+
+ /**
+ * Gets the set value.
+ *
+ * @return the sets the value
+ */
+ public Set<String> getSetValue() {
+ if (setValue == null) {
+ setValue = new TreeSet<>();
+ }
+ return setValue;
+ }
+
+ /**
+ * Sets the set value.
+ *
+ * @param setValue the sets the value
+ */
+ public void setSetValue(final SortedSet<String> setValue) {
+ this.setValue = setValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ result = prime * result + ((setValue == null) ? 0 : setValue.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestContextTreeSetItem other = (TestContextTreeSetItem) obj;
+ if (setValue == null) {
+ if (other.setValue != null) {
+ return false;
+ }
+ } else if (!setValue.equals(other.setValue)) {
+ return false;
+ }
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestContextItem00B [setValue=" + setValue + "]";
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestExternalContextItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestExternalContextItem.java
new file mode 100644
index 000000000..fbf5e6c80
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestExternalContextItem.java
@@ -0,0 +1,435 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+
+/**
+ * The Class TestExternalContextItem.
+ */
+public class TestExternalContextItem implements Serializable {
+ private static final long serialVersionUID = 3512435733818672173L;
+
+ private static final int HASH_PRIME_1 = 31;
+
+ private TestContextBooleanItem testExternalContextItem000;
+ private TestContextByteItem testExternalContextItem001;
+ private TestContextIntItem testExternalContextItem002;
+ private TestContextLongItem testExternalContextItem003;
+ private TestContextFloatItem testExternalContextItem004;
+ private TestContextDoubleItem testExternalContextItem005;
+ private TestContextStringItem testExternalContextItem006;
+ private TestContextLongObjectItem testExternalContextItem007;
+ private TestContextDateItem testExternalContextItem008;
+ private TestContextDateTzItem testExternalContextItem009;
+ private TestContextDateLocaleItem testExternalContextItem00A;
+ private TestContextTreeSetItem testExternalContextItem00B;
+ private TestContextTreeMapItem testExternalContextItem00C;
+
+ /**
+ * Gets the test external context item 000.
+ *
+ * @return the test external context item 000
+ */
+ public TestContextBooleanItem getTestExternalContextItem000() {
+ return testExternalContextItem000;
+ }
+
+ /**
+ * Sets the test external context item 000.
+ *
+ * @param testExternalContextItem000 the test external context item 000
+ */
+ public void setTestExternalContextItem000(final TestContextBooleanItem testExternalContextItem000) {
+ this.testExternalContextItem000 = testExternalContextItem000;
+ }
+
+ /**
+ * Gets the test external context item 001.
+ *
+ * @return the test external context item 001
+ */
+ public TestContextByteItem getTestExternalContextItem001() {
+ return testExternalContextItem001;
+ }
+
+ /**
+ * Sets the test external context item 001.
+ *
+ * @param testExternalContextItem001 the test external context item 001
+ */
+ public void setTestExternalContextItem001(final TestContextByteItem testExternalContextItem001) {
+ this.testExternalContextItem001 = testExternalContextItem001;
+ }
+
+ /**
+ * Gets the test external context item 002.
+ *
+ * @return the test external context item 002
+ */
+ public TestContextIntItem getTestExternalContextItem002() {
+ return testExternalContextItem002;
+ }
+
+ /**
+ * Sets the test external context item 002.
+ *
+ * @param testExternalContextItem002 the test external context item 002
+ */
+ public void setTestExternalContextItem002(final TestContextIntItem testExternalContextItem002) {
+ this.testExternalContextItem002 = testExternalContextItem002;
+ }
+
+ /**
+ * Gets the test external context item 003.
+ *
+ * @return the test external context item 003
+ */
+ public TestContextLongItem getTestExternalContextItem003() {
+ return testExternalContextItem003;
+ }
+
+ /**
+ * Sets the test external context item 003.
+ *
+ * @param testExternalContextItem003 the test external context item 003
+ */
+ public void setTestExternalContextItem003(final TestContextLongItem testExternalContextItem003) {
+ this.testExternalContextItem003 = testExternalContextItem003;
+ }
+
+ /**
+ * Gets the test external context item 004.
+ *
+ * @return the test external context item 004
+ */
+ public TestContextFloatItem getTestExternalContextItem004() {
+ return testExternalContextItem004;
+ }
+
+ /**
+ * Sets the test external context item 004.
+ *
+ * @param testExternalContextItem004 the test external context item 004
+ */
+ public void setTestExternalContextItem004(final TestContextFloatItem testExternalContextItem004) {
+ this.testExternalContextItem004 = testExternalContextItem004;
+ }
+
+ /**
+ * Gets the test external context item 005.
+ *
+ * @return the test external context item 005
+ */
+ public TestContextDoubleItem getTestExternalContextItem005() {
+ return testExternalContextItem005;
+ }
+
+ /**
+ * Sets the test external context item 005.
+ *
+ * @param testExternalContextItem005 the test external context item 005
+ */
+ public void setTestExternalContextItem005(final TestContextDoubleItem testExternalContextItem005) {
+ this.testExternalContextItem005 = testExternalContextItem005;
+ }
+
+ /**
+ * Gets the test external context item 006.
+ *
+ * @return the test external context item 006
+ */
+ public TestContextStringItem getTestExternalContextItem006() {
+ return testExternalContextItem006;
+ }
+
+ /**
+ * Sets the test external context item 006.
+ *
+ * @param testExternalContextItem006 the test external context item 006
+ */
+ public void setTestExternalContextItem006(final TestContextStringItem testExternalContextItem006) {
+ this.testExternalContextItem006 = testExternalContextItem006;
+ }
+
+ /**
+ * Gets the test external context item 007.
+ *
+ * @return the test external context item 007
+ */
+ public TestContextLongObjectItem getTestExternalContextItem007() {
+ return testExternalContextItem007;
+ }
+
+ /**
+ * Sets the test external context item 007.
+ *
+ * @param testExternalContextItem007 the test external context item 007
+ */
+ public void setTestExternalContextItem007(final TestContextLongObjectItem testExternalContextItem007) {
+ this.testExternalContextItem007 = testExternalContextItem007;
+ }
+
+ /**
+ * Gets the test external context item 008.
+ *
+ * @return the test external context item 008
+ */
+ public TestContextDateItem getTestExternalContextItem008() {
+ return testExternalContextItem008;
+ }
+
+ /**
+ * Sets the test external context item 008.
+ *
+ * @param testExternalContextItem008 the test external context item 008
+ */
+ public void setTestExternalContextItem008(final TestContextDateItem testExternalContextItem008) {
+ this.testExternalContextItem008 = testExternalContextItem008;
+ }
+
+ /**
+ * Gets the test external context item 009.
+ *
+ * @return the test external context item 009
+ */
+ public TestContextDateTzItem getTestExternalContextItem009() {
+ return testExternalContextItem009;
+ }
+
+ /**
+ * Sets the test external context item 009.
+ *
+ * @param testExternalContextItem009 the test external context item 009
+ */
+ public void setTestExternalContextItem009(final TestContextDateTzItem testExternalContextItem009) {
+ this.testExternalContextItem009 = testExternalContextItem009;
+ }
+
+ /**
+ * Gets the test external context item 00 A.
+ *
+ * @return the test external context item 00 A
+ */
+ public TestContextDateLocaleItem getTestExternalContextItem00A() {
+ return testExternalContextItem00A;
+ }
+
+ /**
+ * Sets the test external context item 00 A.
+ *
+ * @param testExternalContextItem00A the test external context item 00 A
+ */
+ public void setTestExternalContextItem00A(final TestContextDateLocaleItem testExternalContextItem00A) {
+ this.testExternalContextItem00A = testExternalContextItem00A;
+ }
+
+ /**
+ * Gets the test external context item 00 B.
+ *
+ * @return the test external context item 00 B
+ */
+ public TestContextTreeSetItem getTestExternalContextItem00B() {
+ return testExternalContextItem00B;
+ }
+
+ /**
+ * Sets the test external context item 00 B.
+ *
+ * @param testExternalContextItem00B the test external context item 00 B
+ */
+ public void setTestExternalContextItem00B(final TestContextTreeSetItem testExternalContextItem00B) {
+ this.testExternalContextItem00B = testExternalContextItem00B;
+ }
+
+ /**
+ * Gets the test external context item 00 C.
+ *
+ * @return the test external context item 00 C
+ */
+ public TestContextTreeMapItem getTestExternalContextItem00C() {
+ return testExternalContextItem00C;
+ }
+
+ /**
+ * Sets the test external context item 00 C.
+ *
+ * @param testExternalContextItem00C the test external context item 00 C
+ */
+ public void setTestExternalContextItem00C(final TestContextTreeMapItem testExternalContextItem00C) {
+ this.testExternalContextItem00C = testExternalContextItem00C;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ result = prime * result + ((testExternalContextItem000 == null) ? 0 : testExternalContextItem000.hashCode());
+ result = prime * result + ((testExternalContextItem001 == null) ? 0 : testExternalContextItem001.hashCode());
+ result = prime * result + ((testExternalContextItem002 == null) ? 0 : testExternalContextItem002.hashCode());
+ result = prime * result + ((testExternalContextItem003 == null) ? 0 : testExternalContextItem003.hashCode());
+ result = prime * result + ((testExternalContextItem004 == null) ? 0 : testExternalContextItem004.hashCode());
+ result = prime * result + ((testExternalContextItem005 == null) ? 0 : testExternalContextItem005.hashCode());
+ result = prime * result + ((testExternalContextItem006 == null) ? 0 : testExternalContextItem006.hashCode());
+ result = prime * result + ((testExternalContextItem007 == null) ? 0 : testExternalContextItem007.hashCode());
+ result = prime * result + ((testExternalContextItem008 == null) ? 0 : testExternalContextItem008.hashCode());
+ result = prime * result + ((testExternalContextItem009 == null) ? 0 : testExternalContextItem009.hashCode());
+ result = prime * result + ((testExternalContextItem00A == null) ? 0 : testExternalContextItem00A.hashCode());
+ result = prime * result + ((testExternalContextItem00B == null) ? 0 : testExternalContextItem00B.hashCode());
+ result = prime * result + ((testExternalContextItem00C == null) ? 0 : testExternalContextItem00C.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestExternalContextItem other = (TestExternalContextItem) obj;
+ if (testExternalContextItem000 == null) {
+ if (other.testExternalContextItem000 != null) {
+ return false;
+ }
+ } else if (!testExternalContextItem000.equals(other.testExternalContextItem000)) {
+ return false;
+ }
+ if (testExternalContextItem001 == null) {
+ if (other.testExternalContextItem001 != null) {
+ return false;
+ }
+ } else if (!testExternalContextItem001.equals(other.testExternalContextItem001)) {
+ return false;
+ }
+ if (testExternalContextItem002 == null) {
+ if (other.testExternalContextItem002 != null) {
+ return false;
+ }
+ } else if (!testExternalContextItem002.equals(other.testExternalContextItem002)) {
+ return false;
+ }
+ if (testExternalContextItem003 == null) {
+ if (other.testExternalContextItem003 != null) {
+ return false;
+ }
+ } else if (!testExternalContextItem003.equals(other.testExternalContextItem003)) {
+ return false;
+ }
+ if (testExternalContextItem004 == null) {
+ if (other.testExternalContextItem004 != null) {
+ return false;
+ }
+ } else if (!testExternalContextItem004.equals(other.testExternalContextItem004)) {
+ return false;
+ }
+ if (testExternalContextItem005 == null) {
+ if (other.testExternalContextItem005 != null) {
+ return false;
+ }
+ } else if (!testExternalContextItem005.equals(other.testExternalContextItem005)) {
+ return false;
+ }
+ if (testExternalContextItem006 == null) {
+ if (other.testExternalContextItem006 != null) {
+ return false;
+ }
+ } else if (!testExternalContextItem006.equals(other.testExternalContextItem006)) {
+ return false;
+ }
+ if (testExternalContextItem007 == null) {
+ if (other.testExternalContextItem007 != null) {
+ return false;
+ }
+ } else if (!testExternalContextItem007.equals(other.testExternalContextItem007)) {
+ return false;
+ }
+ if (testExternalContextItem008 == null) {
+ if (other.testExternalContextItem008 != null) {
+ return false;
+ }
+ } else if (!testExternalContextItem008.equals(other.testExternalContextItem008)) {
+ return false;
+ }
+ if (testExternalContextItem009 == null) {
+ if (other.testExternalContextItem009 != null) {
+ return false;
+ }
+ } else if (!testExternalContextItem009.equals(other.testExternalContextItem009)) {
+ return false;
+ }
+ if (testExternalContextItem00A == null) {
+ if (other.testExternalContextItem00A != null) {
+ return false;
+ }
+ } else if (!testExternalContextItem00A.equals(other.testExternalContextItem00A)) {
+ return false;
+ }
+ if (testExternalContextItem00B == null) {
+ if (other.testExternalContextItem00B != null) {
+ return false;
+ }
+ } else if (!testExternalContextItem00B.equals(other.testExternalContextItem00B)) {
+ return false;
+ }
+ if (testExternalContextItem00C == null) {
+ if (other.testExternalContextItem00C != null) {
+ return false;
+ }
+ } else if (!testExternalContextItem00C.equals(other.testExternalContextItem00C)) {
+ return false;
+ }
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestExternalContextItem [testExternalContextItem000=" + testExternalContextItem000
+ + ", testExternalContextItem001=" + testExternalContextItem001 + ", testExternalContextItem002="
+ + testExternalContextItem002 + ", testExternalContextItem003=" + testExternalContextItem003
+ + ", testExternalContextItem004=" + testExternalContextItem004 + ", testExternalContextItem005="
+ + testExternalContextItem005 + ", testExternalContextItem006=" + testExternalContextItem006
+ + ", testExternalContextItem007=" + testExternalContextItem007 + ", testExternalContextItem008="
+ + testExternalContextItem008 + ", testExternalContextItem009=" + testExternalContextItem009
+ + ", testExternalContextItem00A=" + testExternalContextItem00A + ", testExternalContextItem00B="
+ + testExternalContextItem00B + ", testExternalContextItem00C=" + testExternalContextItem00C + "]";
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestGlobalContextItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestGlobalContextItem.java
new file mode 100644
index 000000000..c139d7469
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestGlobalContextItem.java
@@ -0,0 +1,435 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+
+/**
+ * The Class TestGlobalContextItem.
+ */
+public class TestGlobalContextItem implements Serializable {
+ private static final long serialVersionUID = 3348445332683174361L;
+
+ private static final int HASH_PRIME_1 = 31;
+
+ private TestContextBooleanItem testGlobalContextItem000;
+ private TestContextByteItem testGlobalContextItem001;
+ private TestContextIntItem testGlobalContextItem002;
+ private TestContextLongItem testGlobalContextItem003;
+ private TestContextFloatItem testGlobalContextItem004;
+ private TestContextDoubleItem testGlobalContextItem005;
+ private TestContextStringItem testGlobalContextItem006;
+ private TestContextLongObjectItem testGlobalContextItem007;
+ private TestContextDateItem testGlobalContextItem008;
+ private TestContextDateTzItem testGlobalContextItem009;
+ private TestContextDateLocaleItem testGlobalContextItem00A;
+ private TestContextTreeSetItem testGlobalContextItem00B;
+ private TestContextTreeMapItem testGlobalContextItem00C;
+
+ /**
+ * Gets the test global context item 000.
+ *
+ * @return the test global context item 000
+ */
+ public TestContextBooleanItem getTestGlobalContextItem000() {
+ return testGlobalContextItem000;
+ }
+
+ /**
+ * Sets the test global context item 000.
+ *
+ * @param testGlobalContextItem000 the test global context item 000
+ */
+ public void setTestGlobalContextItem000(final TestContextBooleanItem testGlobalContextItem000) {
+ this.testGlobalContextItem000 = testGlobalContextItem000;
+ }
+
+ /**
+ * Gets the test global context item 001.
+ *
+ * @return the test global context item 001
+ */
+ public TestContextByteItem getTestGlobalContextItem001() {
+ return testGlobalContextItem001;
+ }
+
+ /**
+ * Sets the test global context item 001.
+ *
+ * @param testGlobalContextItem001 the test global context item 001
+ */
+ public void setTestGlobalContextItem001(final TestContextByteItem testGlobalContextItem001) {
+ this.testGlobalContextItem001 = testGlobalContextItem001;
+ }
+
+ /**
+ * Gets the test global context item 002.
+ *
+ * @return the test global context item 002
+ */
+ public TestContextIntItem getTestGlobalContextItem002() {
+ return testGlobalContextItem002;
+ }
+
+ /**
+ * Sets the test global context item 002.
+ *
+ * @param testGlobalContextItem002 the test global context item 002
+ */
+ public void setTestGlobalContextItem002(final TestContextIntItem testGlobalContextItem002) {
+ this.testGlobalContextItem002 = testGlobalContextItem002;
+ }
+
+ /**
+ * Gets the test global context item 003.
+ *
+ * @return the test global context item 003
+ */
+ public TestContextLongItem getTestGlobalContextItem003() {
+ return testGlobalContextItem003;
+ }
+
+ /**
+ * Sets the test global context item 003.
+ *
+ * @param testGlobalContextItem003 the test global context item 003
+ */
+ public void setTestGlobalContextItem003(final TestContextLongItem testGlobalContextItem003) {
+ this.testGlobalContextItem003 = testGlobalContextItem003;
+ }
+
+ /**
+ * Gets the test global context item 004.
+ *
+ * @return the test global context item 004
+ */
+ public TestContextFloatItem getTestGlobalContextItem004() {
+ return testGlobalContextItem004;
+ }
+
+ /**
+ * Sets the test global context item 004.
+ *
+ * @param testGlobalContextItem004 the test global context item 004
+ */
+ public void setTestGlobalContextItem004(final TestContextFloatItem testGlobalContextItem004) {
+ this.testGlobalContextItem004 = testGlobalContextItem004;
+ }
+
+ /**
+ * Gets the test global context item 005.
+ *
+ * @return the test global context item 005
+ */
+ public TestContextDoubleItem getTestGlobalContextItem005() {
+ return testGlobalContextItem005;
+ }
+
+ /**
+ * Sets the test global context item 005.
+ *
+ * @param testGlobalContextItem005 the test global context item 005
+ */
+ public void setTestGlobalContextItem005(final TestContextDoubleItem testGlobalContextItem005) {
+ this.testGlobalContextItem005 = testGlobalContextItem005;
+ }
+
+ /**
+ * Gets the test global context item 006.
+ *
+ * @return the test global context item 006
+ */
+ public TestContextStringItem getTestGlobalContextItem006() {
+ return testGlobalContextItem006;
+ }
+
+ /**
+ * Sets the test global context item 006.
+ *
+ * @param testGlobalContextItem006 the test global context item 006
+ */
+ public void setTestGlobalContextItem006(final TestContextStringItem testGlobalContextItem006) {
+ this.testGlobalContextItem006 = testGlobalContextItem006;
+ }
+
+ /**
+ * Gets the test global context item 007.
+ *
+ * @return the test global context item 007
+ */
+ public TestContextLongObjectItem getTestGlobalContextItem007() {
+ return testGlobalContextItem007;
+ }
+
+ /**
+ * Sets the test global context item 007.
+ *
+ * @param testGlobalContextItem007 the test global context item 007
+ */
+ public void setTestGlobalContextItem007(final TestContextLongObjectItem testGlobalContextItem007) {
+ this.testGlobalContextItem007 = testGlobalContextItem007;
+ }
+
+ /**
+ * Gets the test global context item 008.
+ *
+ * @return the test global context item 008
+ */
+ public TestContextDateItem getTestGlobalContextItem008() {
+ return testGlobalContextItem008;
+ }
+
+ /**
+ * Sets the test global context item 008.
+ *
+ * @param testGlobalContextItem008 the test global context item 008
+ */
+ public void setTestGlobalContextItem008(final TestContextDateItem testGlobalContextItem008) {
+ this.testGlobalContextItem008 = testGlobalContextItem008;
+ }
+
+ /**
+ * Gets the test global context item 009.
+ *
+ * @return the test global context item 009
+ */
+ public TestContextDateTzItem getTestGlobalContextItem009() {
+ return testGlobalContextItem009;
+ }
+
+ /**
+ * Sets the test global context item 009.
+ *
+ * @param testGlobalContextItem009 the test global context item 009
+ */
+ public void setTestGlobalContextItem009(final TestContextDateTzItem testGlobalContextItem009) {
+ this.testGlobalContextItem009 = testGlobalContextItem009;
+ }
+
+ /**
+ * Gets the test global context item 00 A.
+ *
+ * @return the test global context item 00 A
+ */
+ public TestContextDateLocaleItem getTestGlobalContextItem00A() {
+ return testGlobalContextItem00A;
+ }
+
+ /**
+ * Sets the test global context item 00 A.
+ *
+ * @param testGlobalContextItem00A the test global context item 00 A
+ */
+ public void setTestGlobalContextItem00A(final TestContextDateLocaleItem testGlobalContextItem00A) {
+ this.testGlobalContextItem00A = testGlobalContextItem00A;
+ }
+
+ /**
+ * Gets the test global context item 00 B.
+ *
+ * @return the test global context item 00 B
+ */
+ public TestContextTreeSetItem getTestGlobalContextItem00B() {
+ return testGlobalContextItem00B;
+ }
+
+ /**
+ * Sets the test global context item 00 B.
+ *
+ * @param testGlobalContextItem00B the test global context item 00 B
+ */
+ public void setTestGlobalContextItem00B(final TestContextTreeSetItem testGlobalContextItem00B) {
+ this.testGlobalContextItem00B = testGlobalContextItem00B;
+ }
+
+ /**
+ * Gets the test global context item 00 C.
+ *
+ * @return the test global context item 00 C
+ */
+ public TestContextTreeMapItem getTestGlobalContextItem00C() {
+ return testGlobalContextItem00C;
+ }
+
+ /**
+ * Sets the test global context item 00 C.
+ *
+ * @param testGlobalContextItem00C the test global context item 00 C
+ */
+ public void setTestGlobalContextItem00C(final TestContextTreeMapItem testGlobalContextItem00C) {
+ this.testGlobalContextItem00C = testGlobalContextItem00C;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ result = prime * result + ((testGlobalContextItem000 == null) ? 0 : testGlobalContextItem000.hashCode());
+ result = prime * result + ((testGlobalContextItem001 == null) ? 0 : testGlobalContextItem001.hashCode());
+ result = prime * result + ((testGlobalContextItem002 == null) ? 0 : testGlobalContextItem002.hashCode());
+ result = prime * result + ((testGlobalContextItem003 == null) ? 0 : testGlobalContextItem003.hashCode());
+ result = prime * result + ((testGlobalContextItem004 == null) ? 0 : testGlobalContextItem004.hashCode());
+ result = prime * result + ((testGlobalContextItem005 == null) ? 0 : testGlobalContextItem005.hashCode());
+ result = prime * result + ((testGlobalContextItem006 == null) ? 0 : testGlobalContextItem006.hashCode());
+ result = prime * result + ((testGlobalContextItem007 == null) ? 0 : testGlobalContextItem007.hashCode());
+ result = prime * result + ((testGlobalContextItem008 == null) ? 0 : testGlobalContextItem008.hashCode());
+ result = prime * result + ((testGlobalContextItem009 == null) ? 0 : testGlobalContextItem009.hashCode());
+ result = prime * result + ((testGlobalContextItem00A == null) ? 0 : testGlobalContextItem00A.hashCode());
+ result = prime * result + ((testGlobalContextItem00B == null) ? 0 : testGlobalContextItem00B.hashCode());
+ result = prime * result + ((testGlobalContextItem00C == null) ? 0 : testGlobalContextItem00C.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestGlobalContextItem other = (TestGlobalContextItem) obj;
+ if (testGlobalContextItem000 == null) {
+ if (other.testGlobalContextItem000 != null) {
+ return false;
+ }
+ } else if (!testGlobalContextItem000.equals(other.testGlobalContextItem000)) {
+ return false;
+ }
+ if (testGlobalContextItem001 == null) {
+ if (other.testGlobalContextItem001 != null) {
+ return false;
+ }
+ } else if (!testGlobalContextItem001.equals(other.testGlobalContextItem001)) {
+ return false;
+ }
+ if (testGlobalContextItem002 == null) {
+ if (other.testGlobalContextItem002 != null) {
+ return false;
+ }
+ } else if (!testGlobalContextItem002.equals(other.testGlobalContextItem002)) {
+ return false;
+ }
+ if (testGlobalContextItem003 == null) {
+ if (other.testGlobalContextItem003 != null) {
+ return false;
+ }
+ } else if (!testGlobalContextItem003.equals(other.testGlobalContextItem003)) {
+ return false;
+ }
+ if (testGlobalContextItem004 == null) {
+ if (other.testGlobalContextItem004 != null) {
+ return false;
+ }
+ } else if (!testGlobalContextItem004.equals(other.testGlobalContextItem004)) {
+ return false;
+ }
+ if (testGlobalContextItem005 == null) {
+ if (other.testGlobalContextItem005 != null) {
+ return false;
+ }
+ } else if (!testGlobalContextItem005.equals(other.testGlobalContextItem005)) {
+ return false;
+ }
+ if (testGlobalContextItem006 == null) {
+ if (other.testGlobalContextItem006 != null) {
+ return false;
+ }
+ } else if (!testGlobalContextItem006.equals(other.testGlobalContextItem006)) {
+ return false;
+ }
+ if (testGlobalContextItem007 == null) {
+ if (other.testGlobalContextItem007 != null) {
+ return false;
+ }
+ } else if (!testGlobalContextItem007.equals(other.testGlobalContextItem007)) {
+ return false;
+ }
+ if (testGlobalContextItem008 == null) {
+ if (other.testGlobalContextItem008 != null) {
+ return false;
+ }
+ } else if (!testGlobalContextItem008.equals(other.testGlobalContextItem008)) {
+ return false;
+ }
+ if (testGlobalContextItem009 == null) {
+ if (other.testGlobalContextItem009 != null) {
+ return false;
+ }
+ } else if (!testGlobalContextItem009.equals(other.testGlobalContextItem009)) {
+ return false;
+ }
+ if (testGlobalContextItem00A == null) {
+ if (other.testGlobalContextItem00A != null) {
+ return false;
+ }
+ } else if (!testGlobalContextItem00A.equals(other.testGlobalContextItem00A)) {
+ return false;
+ }
+ if (testGlobalContextItem00B == null) {
+ if (other.testGlobalContextItem00B != null) {
+ return false;
+ }
+ } else if (!testGlobalContextItem00B.equals(other.testGlobalContextItem00B)) {
+ return false;
+ }
+ if (testGlobalContextItem00C == null) {
+ if (other.testGlobalContextItem00C != null) {
+ return false;
+ }
+ } else if (!testGlobalContextItem00C.equals(other.testGlobalContextItem00C)) {
+ return false;
+ }
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestGlobalContextItem [testGlobalContextItem000=" + testGlobalContextItem000
+ + ", testGlobalContextItem001=" + testGlobalContextItem001 + ", testGlobalContextItem002="
+ + testGlobalContextItem002 + ", testGlobalContextItem003=" + testGlobalContextItem003
+ + ", testGlobalContextItem004=" + testGlobalContextItem004 + ", testGlobalContextItem005="
+ + testGlobalContextItem005 + ", testGlobalContextItem006=" + testGlobalContextItem006
+ + ", testGlobalContextItem007=" + testGlobalContextItem007 + ", testGlobalContextItem008="
+ + testGlobalContextItem008 + ", testGlobalContextItem009=" + testGlobalContextItem009
+ + ", testGlobalContextItem00A=" + testGlobalContextItem00A + ", testGlobalContextItem00B="
+ + testGlobalContextItem00B + ", testGlobalContextItem00C=" + testGlobalContextItem00C + "]";
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestPolicyContextItem.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestPolicyContextItem.java
new file mode 100644
index 000000000..39a0408a8
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/TestPolicyContextItem.java
@@ -0,0 +1,242 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.concepts;
+
+import java.io.Serializable;
+
+/**
+ * The Class TestPolicyContextItem.
+ */
+public class TestPolicyContextItem implements Serializable {
+ private static final long serialVersionUID = 6336372857646152910L;
+
+ private static final int HASH_PRIME_1 = 31;
+
+ private TestContextStringItem testPolicyContextItem000;
+ private TestContextLongItem testPolicyContextItem001;
+ private TestContextDoubleItem testPolicyContextItem002;
+ private TestContextBooleanItem testPolicyContextItem003;
+ private TestContextLongItem testPolicyContextItem004;
+ private TestContextTreeMapItem testPolicyContextItem005;
+
+ /**
+ * Gets the test policy context item 000.
+ *
+ * @return the test policy context item 000
+ */
+ public TestContextStringItem getTestPolicyContextItem000() {
+ return testPolicyContextItem000;
+ }
+
+ /**
+ * Sets the test policy context item 000.
+ *
+ * @param testPolicyContextItem000 the test policy context item 000
+ */
+ public void setTestPolicyContextItem000(final TestContextStringItem testPolicyContextItem000) {
+ this.testPolicyContextItem000 = testPolicyContextItem000;
+ }
+
+ /**
+ * Gets the test policy context item 001.
+ *
+ * @return the test policy context item 001
+ */
+ public TestContextLongItem getTestPolicyContextItem001() {
+ return testPolicyContextItem001;
+ }
+
+ /**
+ * Sets the test policy context item 001.
+ *
+ * @param testPolicyContextItem001 the test policy context item 001
+ */
+ public void setTestPolicyContextItem001(final TestContextLongItem testPolicyContextItem001) {
+ this.testPolicyContextItem001 = testPolicyContextItem001;
+ }
+
+ /**
+ * Gets the test policy context item 002.
+ *
+ * @return the test policy context item 002
+ */
+ public TestContextDoubleItem getTestPolicyContextItem002() {
+ return testPolicyContextItem002;
+ }
+
+ /**
+ * Sets the test policy context item 002.
+ *
+ * @param testPolicyContextItem002 the test policy context item 002
+ */
+ public void setTestPolicyContextItem002(final TestContextDoubleItem testPolicyContextItem002) {
+ this.testPolicyContextItem002 = testPolicyContextItem002;
+ }
+
+ /**
+ * Gets the test policy context item 003.
+ *
+ * @return the test policy context item 003
+ */
+ public TestContextBooleanItem getTestPolicyContextItem003() {
+ return testPolicyContextItem003;
+ }
+
+ /**
+ * Sets the test policy context item 003.
+ *
+ * @param testPolicyContextItem003 the test policy context item 003
+ */
+ public void setTestPolicyContextItem003(final TestContextBooleanItem testPolicyContextItem003) {
+ this.testPolicyContextItem003 = testPolicyContextItem003;
+ }
+
+ /**
+ * Gets the test policy context item 004.
+ *
+ * @return the test policy context item 004
+ */
+ public TestContextLongItem getTestPolicyContextItem004() {
+ return testPolicyContextItem004;
+ }
+
+ /**
+ * Sets the test policy context item 004.
+ *
+ * @param testPolicyContextItem004 the test policy context item 004
+ */
+ public void setTestPolicyContextItem004(final TestContextLongItem testPolicyContextItem004) {
+ this.testPolicyContextItem004 = testPolicyContextItem004;
+ }
+
+ /**
+ * Gets the test policy context item 005.
+ *
+ * @return the test policy context item 005
+ */
+ public TestContextTreeMapItem getTestPolicyContextItem005() {
+ return testPolicyContextItem005;
+ }
+
+ /**
+ * Sets the test policy context item 005.
+ *
+ * @param testPolicyContextItem005 the test policy context item 005
+ */
+ public void setTestPolicyContextItem005(final TestContextTreeMapItem testPolicyContextItem005) {
+ this.testPolicyContextItem005 = testPolicyContextItem005;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_PRIME_1;
+ int result = 1;
+ result = prime * result + ((testPolicyContextItem000 == null) ? 0 : testPolicyContextItem000.hashCode());
+ result = prime * result + ((testPolicyContextItem001 == null) ? 0 : testPolicyContextItem001.hashCode());
+ result = prime * result + ((testPolicyContextItem002 == null) ? 0 : testPolicyContextItem002.hashCode());
+ result = prime * result + ((testPolicyContextItem003 == null) ? 0 : testPolicyContextItem003.hashCode());
+ result = prime * result + ((testPolicyContextItem004 == null) ? 0 : testPolicyContextItem004.hashCode());
+ result = prime * result + ((testPolicyContextItem005 == null) ? 0 : testPolicyContextItem005.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final TestPolicyContextItem other = (TestPolicyContextItem) obj;
+ if (testPolicyContextItem000 == null) {
+ if (other.testPolicyContextItem000 != null) {
+ return false;
+ }
+ } else if (!testPolicyContextItem000.equals(other.testPolicyContextItem000)) {
+ return false;
+ }
+ if (testPolicyContextItem001 == null) {
+ if (other.testPolicyContextItem001 != null) {
+ return false;
+ }
+ } else if (!testPolicyContextItem001.equals(other.testPolicyContextItem001)) {
+ return false;
+ }
+ if (testPolicyContextItem002 == null) {
+ if (other.testPolicyContextItem002 != null) {
+ return false;
+ }
+ } else if (!testPolicyContextItem002.equals(other.testPolicyContextItem002)) {
+ return false;
+ }
+ if (testPolicyContextItem003 == null) {
+ if (other.testPolicyContextItem003 != null) {
+ return false;
+ }
+ } else if (!testPolicyContextItem003.equals(other.testPolicyContextItem003)) {
+ return false;
+ }
+ if (testPolicyContextItem004 == null) {
+ if (other.testPolicyContextItem004 != null) {
+ return false;
+ }
+ } else if (!testPolicyContextItem004.equals(other.testPolicyContextItem004)) {
+ return false;
+ }
+ if (testPolicyContextItem005 == null) {
+ if (other.testPolicyContextItem005 != null) {
+ return false;
+ }
+ } else if (!testPolicyContextItem005.equals(other.testPolicyContextItem005)) {
+ return false;
+ }
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "TestPolicyContextItem [testPolicyContextItem000=" + testPolicyContextItem000
+ + ", testPolicyContextItem001=" + testPolicyContextItem001 + ", testPolicyContextItem002="
+ + testPolicyContextItem002 + ", testPolicyContextItem003=" + testPolicyContextItem003
+ + ", testPolicyContextItem004=" + testPolicyContextItem004 + ", testPolicyContextItem005="
+ + testPolicyContextItem005 + "]";
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/package-info.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/package-info.java
new file mode 100644
index 000000000..e897dda2a
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/concepts/package-info.java
@@ -0,0 +1,28 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+/**
+ * Defines test Java context classes.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+
+package org.onap.policy.apex.testsuites.integration.context.concepts;
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/ContextAlbumUpdate.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/ContextAlbumUpdate.java
new file mode 100644
index 000000000..97bfa9efd
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/ContextAlbumUpdate.java
@@ -0,0 +1,121 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.distribution;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.APEX_DISTRIBUTOR;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.VERSION;
+
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.context.Distributor;
+import org.onap.policy.apex.context.impl.distribution.DistributorFactory;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextModel;
+import org.onap.policy.apex.model.utilities.comparison.KeyedMapComparer;
+import org.onap.policy.apex.model.utilities.comparison.KeyedMapDifference;
+import org.onap.policy.apex.testsuites.integration.context.factory.TestContextAlbumFactory;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The Class ContextAlbumUpdate is used to test Context Album updates.
+ */
+public class ContextAlbumUpdate {
+ private static final XLogger LOGGER = XLoggerFactory.getXLogger(ContextAlbumUpdate.class);
+
+ /**
+ * Test context album update.
+ *
+ * @throws ApexException the apex exception
+ */
+ public void testContextAlbumUpdate() throws ApexException {
+ LOGGER.debug("Running TestContextAlbumUpdate test . . .");
+
+ final AxArtifactKey distributorKey = new AxArtifactKey(APEX_DISTRIBUTOR, VERSION);
+ final Distributor contextDistributor = new DistributorFactory().getDistributor(distributorKey);
+
+ final AxContextModel longModel = TestContextAlbumFactory.createLongContextModel();
+ contextDistributor.registerModel(longModel);
+
+ final AxContextAlbum longAlbum1Def = longModel.getAlbums().get(new AxArtifactKey("LongContextAlbum1", VERSION));
+ final ContextAlbum longAlbum1 = contextDistributor.createContextAlbum(longAlbum1Def.getKey());
+
+ assertNotNull(longAlbum1);
+
+ final AxContextAlbum longAlbum2Def = longModel.getAlbums().get(new AxArtifactKey("LongContextAlbum2", VERSION));
+ final ContextAlbum longAlbum2 = contextDistributor.createContextAlbum(longAlbum2Def.getKey());
+
+ assertNotNull(longAlbum2);
+
+ longAlbum1.put("0", (long) 0);
+ longAlbum1.put("1", (long) 1);
+ longAlbum1.put("2", (long) 2);
+ longAlbum1.put("3", (long) 3);
+
+ final KeyedMapDifference<String, Object> result0 =
+ new KeyedMapComparer<String, Object>().compareMaps(longAlbum1, longAlbum2);
+
+ assertEquals(0, result0.getDifferentValues().size());
+ assertEquals(0, result0.getIdenticalValues().size());
+ assertEquals(0, result0.getRightOnly().size());
+ assertEquals(4, result0.getLeftOnly().size());
+
+ longAlbum2.putAll(longAlbum1);
+
+ final KeyedMapDifference<String, Object> result1 =
+ new KeyedMapComparer<String, Object>().compareMaps(longAlbum1, longAlbum2);
+
+
+ assertEquals(0, result1.getDifferentValues().size());
+ assertEquals(4, result1.getIdenticalValues().size());
+ assertEquals(0, result1.getRightOnly().size());
+ assertEquals(0, result1.getLeftOnly().size());
+
+ longAlbum1.put("4", (long) 4);
+ longAlbum2.put("5", (long) 5);
+ longAlbum1.put("67", (long) 6);
+ longAlbum2.put("67", (long) 7);
+
+ final KeyedMapDifference<String, Object> result2 =
+ new KeyedMapComparer<String, Object>().compareMaps(longAlbum1, longAlbum2);
+
+ assertEquals(1, result2.getDifferentValues().size());
+ assertEquals(4, result2.getIdenticalValues().size());
+ assertEquals(1, result2.getRightOnly().size());
+ assertEquals(1, result2.getLeftOnly().size());
+
+ longAlbum1.remove("0");
+ longAlbum2.remove("3");
+
+ final KeyedMapDifference<String, Object> result3 =
+ new KeyedMapComparer<String, Object>().compareMaps(longAlbum1, longAlbum2);
+
+ assertEquals(1, result3.getDifferentValues().size());
+ assertEquals(2, result3.getIdenticalValues().size());
+ assertEquals(2, result3.getRightOnly().size());
+ assertEquals(2, result3.getLeftOnly().size());
+ contextDistributor.clear();
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/ContextInstantiation.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/ContextInstantiation.java
new file mode 100644
index 000000000..186df673b
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/ContextInstantiation.java
@@ -0,0 +1,555 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.distribution;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.onap.policy.apex.testsuites.integration.context.factory.TestContextAlbumFactory.createPolicyContextModel;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.BYTE_VAL;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.EXCEPTION_MESSAGE;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.EXTERNAL_CONTEXT;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.EXTERNAL_CONTEXT_ALBUM;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.FLOAT_VAL;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.GLOBAL_CONTEXT_ALBUM;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.GLOBAL_CONTEXT_KEY;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.INT_VAL;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.INT_VAL_2;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.INT_VAL_3;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.LONG_VAL;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.PI_VAL;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.POLICY_CONTEXT_ALBUM;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.STRING_EXT_VAL;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.STRING_GLOBAL_VAL;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.STRING_VAL;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.TEST_POLICY_CONTEXT_ITEM;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.TIME_ZONE;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.VERSION;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.context.ContextException;
+import org.onap.policy.apex.context.ContextRuntimeException;
+import org.onap.policy.apex.context.Distributor;
+import org.onap.policy.apex.context.impl.distribution.DistributorFactory;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextModel;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextBooleanItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextByteItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextDateItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextDateLocaleItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextDateTzItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextDoubleItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextFloatItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextIntItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextLongItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextLongObjectItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextStringItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextTreeMapItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextTreeSetItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestExternalContextItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestGlobalContextItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestPolicyContextItem;
+import org.onap.policy.apex.testsuites.integration.context.factory.TestContextAlbumFactory;
+import org.onap.policy.apex.testsuites.integration.context.utils.Constants;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The Class TestContextInstantiation is used to test Apex context insitiation is correct.
+ *
+ * @author Sergey Sachkov (sergey.sachkov@ericsson.com)
+ */
+public class ContextInstantiation {
+ // Logger for this class
+ private static final XLogger LOGGER = XLoggerFactory.getXLogger(ContextInstantiation.class);
+
+ // Recurring string constants
+ private static final String TEST_POLICY_CONTEXT_ITEM000 = "TestPolicyContextItem000";
+ private static final String TEST_POLICY_CONTEXT_ITEM005 = "TestPolicyContextItem005";
+ private static final String TEST_POLICY_CONTEXT_ITEM004 = "TestPolicyContextItem004";
+ private static final String TEST_POLICY_CONTEXT_ITEM003 = "TestPolicyContextItem003";
+ private static final String TEST_POLICY_CONTEXT_ITEM002 = "TestPolicyContextItem002";
+ private static final String TEST_POLICY_CONTEXT_ITEM001 = "TestPolicyContextItem001";
+ private static final String NORMAL_TEST_EXCEPTION = "normal test exception";
+ private static final String NULL_VALUES_ILLEGAL_TAG =
+ "album \"ExternalContextAlbum:0.0.1\" null values are illegal on key ";
+
+ private static final TreeSet<String> TEST_TREE_SET = new TreeSet<>();
+ private static final Map<String, String> TEST_HASH_MAP = new HashMap<>();
+
+ static {
+ TEST_TREE_SET.add("one hundred");
+ TEST_TREE_SET.add("one hundred and one");
+ TEST_TREE_SET.add("one hundred and two");
+ TEST_TREE_SET.add("one hundred and three");
+ TEST_TREE_SET.add("one hundred and four");
+
+ TEST_HASH_MAP.put("0", "zero");
+ TEST_HASH_MAP.put("1", "one");
+ TEST_HASH_MAP.put("2", "two");
+ TEST_HASH_MAP.put("3", "three");
+ TEST_HASH_MAP.put("4", "four");
+
+ }
+
+ /**
+ * Test context instantiation.
+ *
+ * @throws ContextException the context exception
+ */
+ public void testContextInstantiation() throws ContextException {
+ LOGGER.debug("Running TestContextInstantiation test . . .");
+
+ final Distributor contextDistributor = getDistributor();
+
+ final ContextAlbum policyContextAlbum = contextDistributor
+ .createContextAlbum(new AxArtifactKey(POLICY_CONTEXT_ALBUM, VERSION));
+
+ assertNotNull(policyContextAlbum);
+ policyContextAlbum.setUserArtifactStack(Constants.getAxArtifactKeyArray());
+
+ final Date testDate = new Date();
+
+ final TestContextDateTzItem tci9 = getTestContextDateTzItem(testDate);
+ final TestContextDateLocaleItem tciA = getTestContextDateLocaleItem(testDate);
+
+ final TestPolicyContextItem policyContext = getTestPolicyContextItem(policyContextAlbum, testDate);
+
+ final Map<String, Object> valueMap0 = new HashMap<>();
+ valueMap0.put(TEST_POLICY_CONTEXT_ITEM, policyContext);
+
+ policyContextAlbum.putAll(valueMap0);
+
+ final TestPolicyContextItem contextItem = (TestPolicyContextItem) policyContextAlbum
+ .get(TEST_POLICY_CONTEXT_ITEM);
+ assertEquals(STRING_VAL, contextItem.getTestPolicyContextItem000().getStringValue());
+
+ assertEquals(LONG_VAL, contextItem.getTestPolicyContextItem001().getLongValue());
+ assertDouble(contextItem.getTestPolicyContextItem002().getDoubleValue(), PI_VAL);
+ assertTrue(contextItem.getTestPolicyContextItem003().getFlag());
+ assertEquals(contextItem.getTestPolicyContextItem004().getLongValue(), testDate.getTime());
+ assertEquals(TEST_HASH_MAP, contextItem.getTestPolicyContextItem005().getMapValue());
+
+ final TestGlobalContextItem globalContext = getTestGlobalContextItem(contextDistributor, testDate, tci9,
+ tciA);
+
+ final Map<String, Object> valueMap1 = new HashMap<>();
+ valueMap1.put(GLOBAL_CONTEXT_KEY, globalContext);
+
+ final ContextAlbum globalContextAlbum = getContextAlbum(contextDistributor);
+
+ globalContextAlbum.putAll(valueMap1);
+
+ final TestGlobalContextItem globalContextItem = (TestGlobalContextItem) globalContextAlbum
+ .get(GLOBAL_CONTEXT_KEY);
+
+ assertFalse(globalContextItem.getTestGlobalContextItem000().getFlag());
+
+ assertEquals(BYTE_VAL, globalContextItem.getTestGlobalContextItem001().getByteValue());
+
+ assertEquals(INT_VAL, globalContextItem.getTestGlobalContextItem002().getIntValue());
+ assertEquals(LONG_VAL, globalContextItem.getTestGlobalContextItem003().getLongValue());
+ assertFloat(FLOAT_VAL, globalContextItem.getTestGlobalContextItem004().getFloatValue());
+
+ assertDouble(PI_VAL, globalContextItem.getTestGlobalContextItem005().getDoubleValue());
+ assertEquals(STRING_GLOBAL_VAL, globalContextItem.getTestGlobalContextItem006().getStringValue());
+
+ assertEquals((Long) testDate.getTime(), globalContextItem.getTestGlobalContextItem007().getLongValue());
+ assertEquals(testDate, globalContextItem.getTestGlobalContextItem008().getDateValue());
+ assertEquals(tci9.getDateValue().getTime(),
+ globalContextItem.getTestGlobalContextItem009().getDateValue().getTime());
+
+ assertEquals(tciA.getDateValue().getTime(),
+ globalContextItem.getTestGlobalContextItem00A().getDateValue().getTime());
+
+ assertEquals(TEST_TREE_SET, globalContextItem.getTestGlobalContextItem00B().getSetValue());
+ assertEquals(TEST_HASH_MAP, globalContextItem.getTestGlobalContextItem00C().getMapValue());
+
+ final AxContextModel externalContextModel = TestContextAlbumFactory.createExternalContextModel();
+
+ final TestContextDateTzItem tci9A = new TestContextDateTzItem(tci9);
+ final TestContextDateLocaleItem tciAa = new TestContextDateLocaleItem(tciA);
+ final TestExternalContextItem externalContext = getTestExternalContextItem(testDate, tci9A, tciAa);
+
+ final Map<String, Object> valueMap2 = new HashMap<>();
+ valueMap2.put(EXTERNAL_CONTEXT, externalContext);
+
+ contextDistributor.clear();
+ contextDistributor.init(new AxArtifactKey("ClearedandInittedDistributor", VERSION));
+ contextDistributor.registerModel(externalContextModel);
+
+ final AxArtifactKey axContextAlbumKey = new AxArtifactKey(EXTERNAL_CONTEXT_ALBUM, VERSION);
+ final ContextAlbum externalContextAlbum = contextDistributor.createContextAlbum(axContextAlbumKey);
+ assertNotNull(externalContextAlbum);
+ externalContextAlbum.setUserArtifactStack(Constants.getAxArtifactKeyArray());
+
+ externalContextAlbum.putAll(valueMap2);
+ externalContextAlbum.getAlbumDefinition().setWritable(false);
+
+ TestExternalContextItem externalContextItem = (TestExternalContextItem) externalContextAlbum
+ .get(EXTERNAL_CONTEXT);
+
+ assertFalse(externalContextItem.getTestExternalContextItem000().getFlag());
+ assertEquals(BYTE_VAL, externalContextItem.getTestExternalContextItem001().getByteValue());
+ assertEquals(INT_VAL, externalContextItem.getTestExternalContextItem002().getIntValue());
+
+ assertFloat(LONG_VAL, externalContextItem.getTestExternalContextItem003().getLongValue());
+ assertFloat(FLOAT_VAL, externalContextItem.getTestExternalContextItem004().getFloatValue());
+
+ assertDouble(PI_VAL, externalContextItem.getTestExternalContextItem005().getDoubleValue());
+ assertEquals(STRING_EXT_VAL, externalContextItem.getTestExternalContextItem006().getStringValue());
+ assertEquals((Long) testDate.getTime(), externalContextItem.getTestExternalContextItem007().getLongValue());
+ assertEquals(testDate, externalContextItem.getTestExternalContextItem008().getDateValue());
+ assertEquals(tci9A.getDateValue().getTime(),
+ externalContextItem.getTestExternalContextItem009().getDateValue().getTime());
+
+ assertEquals(tciAa.getDateValue().getTime(),
+ externalContextItem.getTestExternalContextItem00A().getDateValue().getTime());
+ assertEquals(TEST_TREE_SET, externalContextItem.getTestExternalContextItem00B().getSetValue());
+ assertEquals(TEST_HASH_MAP, externalContextItem.getTestExternalContextItem00C().getMapValue());
+
+ final Collection<Object> mapValues = externalContextAlbum.values();
+ assertTrue(externalContextAlbum.values().containsAll(mapValues));
+
+ // Check that clearing does not work
+ try {
+ externalContextAlbum.clear();
+ fail(EXCEPTION_MESSAGE);
+ } catch (final ContextRuntimeException e) {
+ assertEquals("album \"ExternalContextAlbum:0.0.1\" clear() not allowed on read only albums",
+ e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ assertEquals(1, externalContextAlbum.size());
+
+ assertContextAlbumContains(externalContext, externalContextAlbum);
+
+ final Set<Entry<String, Object>> entrySet = externalContextAlbum.entrySet();
+ assertEquals(1, entrySet.size());
+
+ try {
+ externalContextAlbum.get(null);
+ } catch (final ContextRuntimeException e) {
+ assertEquals("album \"ExternalContextAlbum:0.0.1\" null keys are illegal on keys for get()",
+ e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ final Object aObject = externalContextAlbum.get(EXTERNAL_CONTEXT);
+ assertEquals(aObject, externalContext);
+
+ // put null keys should fail, throws a runtime exception
+ try {
+ externalContextAlbum.put(null, null);
+ } catch (final ContextRuntimeException e) {
+ assertEquals("album \"ExternalContextAlbum:0.0.1\" null keys are illegal on keys for put()",
+ e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ try {
+ externalContextAlbum.put("TestExternalContextItem00A", null);
+ } catch (final ContextRuntimeException e) {
+ assertEquals(NULL_VALUES_ILLEGAL_TAG + "\"TestExternalContextItem00A\" for put()", e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+ assertEquals(tciAa, externalContextItem.getTestExternalContextItem00A());
+
+ // Should return the hash set
+ assertEquals(TEST_TREE_SET, externalContextItem.getTestExternalContextItem00B().getSetValue());
+
+ assertTrue(externalContextAlbum.values().containsAll(mapValues));
+
+ // Set the write flag back as it should be
+ externalContextAlbum.getAlbumDefinition().setWritable(true);
+
+ // Put should return the previous contextItem
+ final TestExternalContextItem externalContextOther = new TestExternalContextItem();
+ externalContextOther.setTestExternalContextItem002(new TestContextIntItem());
+ externalContextOther.getTestExternalContextItem002().setIntValue(INT_VAL_2);
+
+ assertTrue(externalContextAlbum.put(EXTERNAL_CONTEXT, externalContextOther).equals(externalContext));
+ externalContextItem = (TestExternalContextItem) externalContextAlbum.get(EXTERNAL_CONTEXT);
+ assertEquals(INT_VAL_2, externalContextItem.getTestExternalContextItem002().getIntValue());
+ assertTrue(externalContextAlbum.put(EXTERNAL_CONTEXT, externalContext).equals(externalContextOther));
+ externalContextItem = (TestExternalContextItem) externalContextAlbum.get(EXTERNAL_CONTEXT);
+ assertEquals(INT_VAL_3, externalContextItem.getTestExternalContextItem002().getIntValue());
+
+ try {
+ externalContextAlbum.put("TestExternalContextItem00A", null);
+ } catch (final ContextRuntimeException e) {
+ assert (e.getMessage().equals(NULL_VALUES_ILLEGAL_TAG + "\"TestExternalContextItem00A\" for put()"));
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+ assertTrue(externalContextAlbum.get(EXTERNAL_CONTEXT).equals(externalContext));
+
+ try {
+ externalContextAlbum.put("TestExternalContextItemFFF", null);
+ } catch (final ContextRuntimeException e) {
+ assert (e.getMessage().equals(NULL_VALUES_ILLEGAL_TAG + "\"TestExternalContextItemFFF\" for put()"));
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+ assertEquals(1, externalContextAlbum.size());
+
+ try {
+ externalContextAlbum.put("TestExternalContextItemFFF", null);
+ } catch (final ContextRuntimeException e) {
+ assertEquals(NULL_VALUES_ILLEGAL_TAG + "\"TestExternalContextItemFFF\" for put()", e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+ assertEquals(1, externalContextAlbum.size());
+
+ // Should ignore remove
+ externalContextAlbum.remove("TestExternalContextItem017");
+ assertEquals(1, externalContextAlbum.size());
+ assertEquals(1, externalContextAlbum.values().size());
+ assertTrue(externalContextAlbum.values().containsAll(mapValues));
+
+ contextDistributor.clear();
+ }
+
+ private void assertContextAlbumContains(final TestExternalContextItem externalContext,
+ final ContextAlbum externalContextAlbum) {
+ try {
+ externalContextAlbum.containsKey(null);
+ } catch (final ContextRuntimeException e) {
+ assertEquals("null values are illegal on method parameter \"key\"", e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ assertTrue(externalContextAlbum.containsKey(EXTERNAL_CONTEXT));
+ assertTrue(!externalContextAlbum.containsKey(GLOBAL_CONTEXT_KEY));
+
+ try {
+ externalContextAlbum.containsValue(null);
+ } catch (final ContextRuntimeException e) {
+ assertEquals("null values are illegal on method parameter \"value\"", e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ assertTrue(externalContextAlbum.containsValue(externalContext));
+ assertFalse(externalContextAlbum.containsValue("Hello"));
+ }
+
+ private ContextAlbum getContextAlbum(final Distributor contextDistributor) throws ContextException {
+ final ContextAlbum globalContextAlbum = contextDistributor
+ .createContextAlbum(new AxArtifactKey(GLOBAL_CONTEXT_ALBUM, VERSION));
+ assertNotNull(globalContextAlbum);
+ globalContextAlbum.setUserArtifactStack(Constants.getAxArtifactKeyArray());
+ return globalContextAlbum;
+ }
+
+ private TestGlobalContextItem getTestGlobalContextItem(final Distributor contextDistributor, final Date testDate,
+ final TestContextDateTzItem tci9, final TestContextDateLocaleItem tciA) throws ContextException {
+ final AxContextModel globalContextModel = TestContextAlbumFactory.createGlobalContextModel();
+ final TestGlobalContextItem globalContext = getTestGlobalContextItem(testDate, tci9, tciA);
+ contextDistributor.registerModel(globalContextModel);
+ return globalContext;
+ }
+
+ private TestGlobalContextItem getTestGlobalContextItem(final Date testDate, final TestContextDateTzItem tci9,
+ final TestContextDateLocaleItem tciA) {
+ final TestGlobalContextItem globalContext = new TestGlobalContextItem();
+
+ final TestContextBooleanItem testGlobalContextItem000 = new TestContextBooleanItem(false);
+ final TestContextByteItem testGlobalContextItem001 = new TestContextByteItem(BYTE_VAL);
+ final TestContextIntItem testGlobalContextItem002 = new TestContextIntItem(INT_VAL);
+ final TestContextLongItem testGlobalContextItem003 = new TestContextLongItem(LONG_VAL);
+ final TestContextFloatItem testGlobalContextItem004 = new TestContextFloatItem(FLOAT_VAL);
+ final TestContextDoubleItem testGlobalContextItem005 = new TestContextDoubleItem(PI_VAL);
+ final TestContextStringItem testGlobalContextItem006 = new TestContextStringItem(STRING_GLOBAL_VAL);
+ final TestContextLongObjectItem testGlobalContextItem007 = new TestContextLongObjectItem(testDate.getTime());
+
+ final TestContextDateItem testGlobalContextItem008 = new TestContextDateItem(testDate);
+ final TestContextTreeSetItem testGlobalContextItem00B = new TestContextTreeSetItem(TEST_TREE_SET);
+ final TestContextTreeMapItem testGlobalContextItem00C = new TestContextTreeMapItem(TEST_HASH_MAP);
+
+ globalContext.setTestGlobalContextItem000(testGlobalContextItem000);
+ globalContext.setTestGlobalContextItem001(testGlobalContextItem001);
+ globalContext.setTestGlobalContextItem002(testGlobalContextItem002);
+ globalContext.setTestGlobalContextItem003(testGlobalContextItem003);
+ globalContext.setTestGlobalContextItem004(testGlobalContextItem004);
+ globalContext.setTestGlobalContextItem005(testGlobalContextItem005);
+ globalContext.setTestGlobalContextItem006(testGlobalContextItem006);
+ globalContext.setTestGlobalContextItem007(testGlobalContextItem007);
+ globalContext.setTestGlobalContextItem008(testGlobalContextItem008);
+ globalContext.setTestGlobalContextItem009(tci9);
+ globalContext.setTestGlobalContextItem00A(tciA);
+ globalContext.setTestGlobalContextItem00B(testGlobalContextItem00B);
+ globalContext.setTestGlobalContextItem00C(testGlobalContextItem00C);
+ return globalContext;
+ }
+
+ private TestPolicyContextItem getTestPolicyContextItem(final ContextAlbum policyContextAlbum, final Date testDate) {
+ final TestContextStringItem contextStringItem = new TestContextStringItem(STRING_VAL);
+ final TestContextLongItem contextLongItem = new TestContextLongItem(LONG_VAL);
+ final TestContextDoubleItem contextDoubleItem = new TestContextDoubleItem(PI_VAL);
+ final TestContextBooleanItem contextBooleanItem = new TestContextBooleanItem(true);
+ final TestContextLongItem contextLongItem2 = new TestContextLongItem(testDate.getTime());
+ final TestContextTreeMapItem contextTreeMapItem = new TestContextTreeMapItem(TEST_HASH_MAP);
+
+ final Map<String, Object> valueMapA = new LinkedHashMap<>();
+ valueMapA.put(TEST_POLICY_CONTEXT_ITEM001, contextLongItem);
+ valueMapA.put(TEST_POLICY_CONTEXT_ITEM002, contextDoubleItem);
+ valueMapA.put(TEST_POLICY_CONTEXT_ITEM003, contextBooleanItem);
+ valueMapA.put(TEST_POLICY_CONTEXT_ITEM004, contextLongItem2);
+ valueMapA.put(TEST_POLICY_CONTEXT_ITEM005, contextTreeMapItem);
+ valueMapA.put(TEST_POLICY_CONTEXT_ITEM000, contextStringItem);
+
+ assertPutMethods(policyContextAlbum, contextStringItem, valueMapA);
+
+ final TestPolicyContextItem policyContext = new TestPolicyContextItem();
+
+ LOGGER.debug(policyContextAlbum.toString());
+
+ policyContext.setTestPolicyContextItem000(contextStringItem);
+ policyContext.setTestPolicyContextItem001(contextLongItem);
+ policyContext.setTestPolicyContextItem002(contextDoubleItem);
+ policyContext.setTestPolicyContextItem003(contextBooleanItem);
+ policyContext.setTestPolicyContextItem004(contextLongItem2);
+ policyContext.setTestPolicyContextItem005(contextTreeMapItem);
+ return policyContext;
+ }
+
+ private void assertPutMethods(final ContextAlbum policyContextAlbum, final TestContextStringItem contextStringItem,
+ final Map<String, Object> valueMapA) {
+ try {
+ policyContextAlbum.put(TEST_POLICY_CONTEXT_ITEM000, contextStringItem);
+ fail(EXCEPTION_MESSAGE);
+ } catch (final ContextRuntimeException e) {
+ assertEquals(getMessage(TEST_POLICY_CONTEXT_ITEM000, "TestContextItem006",
+ TestContextStringItem.class.getCanonicalName(), "stringValue=" + STRING_VAL),
+ e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ try {
+ policyContextAlbum.putAll(valueMapA);
+ fail(EXCEPTION_MESSAGE);
+ } catch (final ContextRuntimeException e) {
+ assertEquals(getMessage(TEST_POLICY_CONTEXT_ITEM001, "TestContextItem003",
+ TestContextLongItem.class.getCanonicalName(), "longValue=" + INT_VAL_3), e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+ }
+
+ private AxContextModel getAxContextModel() {
+ final AxContextModel policyContextModel = createPolicyContextModel();
+ final AxValidationResult result = new AxValidationResult();
+ policyContextModel.validate(result);
+ LOGGER.debug(result.toString());
+
+ assertTrue(result.isValid());
+ return policyContextModel;
+ }
+
+ private TestContextDateLocaleItem getTestContextDateLocaleItem(final Date testDate) {
+ final TestContextDateLocaleItem tciA = new TestContextDateLocaleItem();
+ tciA.setDateValue(new TestContextDateItem(testDate));
+ tciA.setTzValue(TIME_ZONE.getDisplayName());
+ tciA.setDst(true);
+ tciA.setUtcOffset(-600);
+ tciA.setLocale(Locale.ENGLISH);
+ return tciA;
+ }
+
+ private TestContextDateTzItem getTestContextDateTzItem(final Date testDate) {
+ final TestContextDateTzItem tci9 = new TestContextDateTzItem();
+ tci9.setDateValue(new TestContextDateItem(testDate));
+ tci9.setTzValue(TIME_ZONE.getDisplayName());
+ tci9.setDst(true);
+ return tci9;
+ }
+
+ private TestExternalContextItem getTestExternalContextItem(final Date testDate, final TestContextDateTzItem tci9A,
+ final TestContextDateLocaleItem tciAa) {
+ final TestExternalContextItem externalContext = new TestExternalContextItem();
+
+ final TestContextBooleanItem testExternalContextItem000 = new TestContextBooleanItem(false);
+ final TestContextByteItem testExternalContextItem001 = new TestContextByteItem(BYTE_VAL);
+ final TestContextIntItem testExternalContextItem002 = new TestContextIntItem(INT_VAL);
+ final TestContextLongItem testExternalContextItem003 = new TestContextLongItem(LONG_VAL);
+ final TestContextFloatItem testExternalContextItem004 = new TestContextFloatItem(new Float(3.14159265359));
+ final TestContextDoubleItem testExternalContextItem005 = new TestContextDoubleItem(PI_VAL);
+ final TestContextStringItem testExternalContextItem006 = new TestContextStringItem(STRING_EXT_VAL);
+ final TestContextLongObjectItem testExternalContextItem007 = new TestContextLongObjectItem(testDate.getTime());
+ final TestContextDateItem testExternalContextItem008 = new TestContextDateItem(testDate);
+ final TestContextTreeSetItem testExternalContextItem00B = new TestContextTreeSetItem(TEST_TREE_SET);
+ final TestContextTreeMapItem testExternalContextItem00C = new TestContextTreeMapItem(TEST_HASH_MAP);
+
+ externalContext.setTestExternalContextItem000(testExternalContextItem000);
+ externalContext.setTestExternalContextItem001(testExternalContextItem001);
+ externalContext.setTestExternalContextItem002(testExternalContextItem002);
+ externalContext.setTestExternalContextItem003(testExternalContextItem003);
+ externalContext.setTestExternalContextItem004(testExternalContextItem004);
+ externalContext.setTestExternalContextItem005(testExternalContextItem005);
+ externalContext.setTestExternalContextItem006(testExternalContextItem006);
+ externalContext.setTestExternalContextItem007(testExternalContextItem007);
+ externalContext.setTestExternalContextItem008(testExternalContextItem008);
+ externalContext.setTestExternalContextItem009(tci9A);
+ externalContext.setTestExternalContextItem00A(tciAa);
+ externalContext.setTestExternalContextItem00B(testExternalContextItem00B);
+ externalContext.setTestExternalContextItem00C(testExternalContextItem00C);
+ return externalContext;
+ }
+
+ private String getMessage(final String key, final String objName, final String clazzName, final String valString) {
+ return getMessage(key, objName, clazzName, valString, TestPolicyContextItem.class.getCanonicalName());
+ }
+
+ private String getMessage(final String key, final String objName, final String clazzName, final String valString,
+ final String compatibleClazzName) {
+ return "Failed to set context value for key \"" + key + "\" in album \"PolicyContextAlbum:0.0.1\": "
+ + "PolicyContextAlbum:0.0.1: object \"" + objName + " [" + valString + "]\" " + "of class \""
+ + clazzName + "\"" + " not compatible with class \"" + compatibleClazzName + "\"";
+ }
+
+ private void assertFloat(final float actual, final float expected) {
+ assertTrue(Float.compare(actual, expected) == 0);
+ }
+
+ private void assertDouble(final double actual, final double expected) {
+ assertTrue(Double.compare(actual, expected) == 0);
+ }
+
+ private Distributor getDistributor() throws ContextException {
+ final AxArtifactKey distributorKey = new AxArtifactKey("ApexDistributorInit", VERSION);
+ final Distributor distributor = new DistributorFactory().getDistributor(distributorKey);
+ final AxContextModel policyContextModel = getAxContextModel();
+ distributor.registerModel(policyContextModel);
+ return distributor;
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/ContextUpdate.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/ContextUpdate.java
new file mode 100644
index 000000000..0ed036992
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/ContextUpdate.java
@@ -0,0 +1,178 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.distribution;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.APEX_DISTRIBUTOR;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.DATE_CONTEXT_ALBUM;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.EXCEPTION_MESSAGE;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.LONG_CONTEXT_ALBUM;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.MAP_CONTEXT_ALBUM;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.TIME_ZONE;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.VERSION;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.getAxArtifactKeyArray;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.context.ContextException;
+import org.onap.policy.apex.context.ContextRuntimeException;
+import org.onap.policy.apex.context.Distributor;
+import org.onap.policy.apex.context.impl.distribution.DistributorFactory;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextModel;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextDateItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextDateLocaleItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextTreeMapItem;
+import org.onap.policy.apex.testsuites.integration.context.factory.TestContextAlbumFactory;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The Class TestContextUpdate checks context updates.
+ *
+ * @author Sergey Sachkov (sergey.sachkov@ericsson.com)
+ */
+public class ContextUpdate {
+ // Recurring string constants.
+ private static final String NORMAL_TEST_EXCEPTION = "normal test exception";
+
+ private static final String ZERO = "zero";
+ private static final String NUMBER_ZERO = "0";
+ // Logger for this class
+ private static final XLogger LOGGER = XLoggerFactory.getXLogger(ContextUpdate.class);
+
+ /**
+ * Test context update.
+ *
+ * @throws ApexException the apex exception
+ */
+ public void testContextUpdate() throws ApexException {
+ LOGGER.debug("Running TestContextUpdate test . . .");
+
+ final Distributor contextDistributor = getDistributor();
+
+ final ContextAlbum longContextAlbum = getContextAlbum(LONG_CONTEXT_ALBUM, contextDistributor);
+ final ContextAlbum dateContextAlbum = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
+ final ContextAlbum mapContextAlbum = getContextAlbum(MAP_CONTEXT_ALBUM, contextDistributor);
+
+ final TestContextDateLocaleItem tciA = getTestContextDateLocaleItem();
+ final TestContextTreeMapItem tciC = getTestContextTreeMapItem();
+
+ longContextAlbum.put(NUMBER_ZERO, (long) 0);
+ longContextAlbum.put(NUMBER_ZERO, 0);
+ longContextAlbum.put(NUMBER_ZERO, NUMBER_ZERO);
+
+ try {
+ longContextAlbum.put(NUMBER_ZERO, ZERO);
+ fail(EXCEPTION_MESSAGE);
+ } catch (final ContextRuntimeException e) {
+ assertEquals("Failed to set context value for key \"0\" in album \"LongContextAlbum:0.0.1\":"
+ + " LongContextAlbum:0.0.1: object \"zero\" of class \"java.lang.String\" not compatible with"
+ + " class \"java.lang.Long\"", e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ try {
+ longContextAlbum.put(NUMBER_ZERO, "");
+ fail(EXCEPTION_MESSAGE);
+ } catch (final ContextRuntimeException e) {
+ assertEquals(
+ "Failed to set context value for key \"0\" in album \"LongContextAlbum:0.0.1\": LongContextAlbum"
+ + ":0.0.1: object \"\" of class \"java.lang.String\" not compatible with class \"java.lang.Long\"",
+ e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ try {
+ longContextAlbum.put(NUMBER_ZERO, null);
+ fail(EXCEPTION_MESSAGE);
+ } catch (final ContextRuntimeException e) {
+ assertEquals("album \"LongContextAlbum:0.0.1\" null values are illegal on key \"0\" for put()",
+ e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ try {
+ longContextAlbum.put(null, null);
+ fail(EXCEPTION_MESSAGE);
+ } catch (final ContextRuntimeException e) {
+ assertEquals("album \"LongContextAlbum:0.0.1\" null keys are illegal on keys for put()", e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ assertNull(dateContextAlbum.put("date0", tciA));
+ assertTrue(dateContextAlbum.put("date0", tciA).equals(tciA));
+
+ assertNull(mapContextAlbum.put("map0", tciC));
+ assertTrue(mapContextAlbum.put("map0", tciC).equals(tciC));
+
+ contextDistributor.clear();
+ }
+
+ private TestContextTreeMapItem getTestContextTreeMapItem() {
+ final Map<String, String> testHashMap = new HashMap<>();
+ testHashMap.put(NUMBER_ZERO, ZERO);
+ testHashMap.put("1", "one");
+ testHashMap.put("2", "two");
+ testHashMap.put("3", "three");
+ testHashMap.put("4", "four");
+
+ return new TestContextTreeMapItem(testHashMap);
+ }
+
+ private TestContextDateLocaleItem getTestContextDateLocaleItem() {
+ final TestContextDateLocaleItem tciA = new TestContextDateLocaleItem();
+ tciA.setDateValue(new TestContextDateItem(new Date()));
+ tciA.setTzValue(TIME_ZONE.getDisplayName());
+ tciA.setDst(true);
+ tciA.setUtcOffset(-600);
+ tciA.setLocale(Locale.ENGLISH);
+ return tciA;
+ }
+
+ private ContextAlbum getContextAlbum(final String albumKey, final Distributor contextDistributor)
+ throws ContextException {
+ final ContextAlbum longContextAlbum = contextDistributor
+ .createContextAlbum(new AxArtifactKey(albumKey, VERSION));
+ assertNotNull(longContextAlbum);
+ longContextAlbum.setUserArtifactStack(getAxArtifactKeyArray());
+ return longContextAlbum;
+ }
+
+ private Distributor getDistributor() throws ContextException {
+ final AxArtifactKey distributorKey = new AxArtifactKey(APEX_DISTRIBUTOR, VERSION);
+ final Distributor contextDistributor = new DistributorFactory().getDistributor(distributorKey);
+
+ final AxContextModel multiModel = TestContextAlbumFactory.createMultiAlbumsContextModel();
+ contextDistributor.registerModel(multiModel);
+ return contextDistributor;
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/SequentialContextInstantiation.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/SequentialContextInstantiation.java
new file mode 100644
index 000000000..4c9339514
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/SequentialContextInstantiation.java
@@ -0,0 +1,386 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.distribution;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.onap.policy.apex.testsuites.integration.context.factory.TestContextAlbumFactory.createMultiAlbumsContextModel;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.APEX_DISTRIBUTOR;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.BYTE_VAL;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.DATE_CONTEXT_ALBUM;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.EXCEPTION_MESSAGE;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.FLOAT_VAL;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.INT_VAL;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.LONG_VAL;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.PI_VAL;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.STRING_GLOBAL_VAL;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.TIME_ZONE;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.VERSION;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TimeZone;
+
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.context.ContextException;
+import org.onap.policy.apex.context.Distributor;
+import org.onap.policy.apex.context.impl.distribution.DistributorFactory;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextBooleanItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextByteItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextDateItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextDateLocaleItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextDateTzItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextDoubleItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextFloatItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextIntItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextLongItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextLongObjectItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextStringItem;
+import org.onap.policy.apex.testsuites.integration.context.utils.Constants;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The Class SequentialContextInstantiation checks sequential initiation of context.
+ *
+ * @author Sergey Sachkov (sergey.sachkov@ericsson.com)
+ */
+public class SequentialContextInstantiation {
+ // Logger for this class
+ private static final XLogger LOGGER = XLoggerFactory.getXLogger(SequentialContextInstantiation.class);
+
+ // Recurring string constants.
+ private static final String TEST_AB = "TestAB";
+ private static final String TEST_AA = "TestAA";
+ private static final String ITEM_NULL = "ItemNull";
+ private static final String ITEM06 = "Item06";
+ private static final String ITEM05 = "Item05";
+ private static final String ITEM03 = "Item03";
+ private static final String ITEM02 = "Item02";
+ private static final String ITEM01 = "Item01";
+ private static final String ITEM00_2 = "Item00_2";
+
+ // Recurring string constants.
+ private static final String NORMAL_TEST_EXCEPTION = "normal test exception";
+ private static final String DV1 = "dv1";
+ private static final String DV0 = "dv0";
+
+ /**
+ * Test sequential context instantiation.
+ *
+ * @throws ContextException the context exception
+ */
+ public void testSequentialContextInstantiation() throws ContextException {
+ LOGGER.debug("Running TestContextInstantiation test . . .");
+
+ final Distributor contextDistributor = getDistributor();
+
+ try {
+ final ContextAlbum dateAlbum = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
+ final Date testDate = new Date();
+ final TestContextDateLocaleItem tciA00 = getTestContextDateLocaleItem();
+
+ dateAlbum.put(DV0, tciA00);
+ assertEquals(tciA00, dateAlbum.get(DV0));
+
+ dateAlbum.put(DV1, tciA00);
+ assertEquals(tciA00, dateAlbum.get(DV1));
+
+ final TestContextDateTzItem tci9 = getTestContextDateTzItem(testDate);
+
+ try {
+ dateAlbum.put("tci9", tci9);
+ } catch (final Exception e) {
+ final String message = "class \"" + TestContextDateTzItem.class.getCanonicalName()
+ + "\" not compatible with class \"" + TestContextDateLocaleItem.class.getCanonicalName()
+ + "\"";
+ assertTrue(e.getMessage().contains(message));
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ final TestContextDateLocaleItem tciA01 = new TestContextDateLocaleItem(tciA00);
+ final TestContextDateLocaleItem tciA02 = new TestContextDateLocaleItem(tciA00);
+ final TestContextDateLocaleItem tciA03 = new TestContextDateLocaleItem(tciA00);
+
+ final Map<String, Object> valueMap0 = new HashMap<>();
+ valueMap0.put(ITEM01, tciA01);
+ valueMap0.put(ITEM02, tciA02);
+ valueMap0.put(ITEM03, tciA03);
+
+ dateAlbum.putAll(valueMap0);
+ assertEquals(5, dateAlbum.size());
+ assertEquals(tciA01, dateAlbum.get(ITEM01));
+ assertEquals(tciA02, dateAlbum.get(ITEM02));
+ assertEquals(tciA03, dateAlbum.get(ITEM03));
+
+ final Map<String, Object> valueMap1 = getMap(testDate, tciA00, tci9);
+
+ // Get another reference to the album
+ final ContextAlbum dateAlbum1 = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
+
+ try {
+ dateAlbum1.putAll(valueMap1);
+ fail(EXCEPTION_MESSAGE);
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().endsWith("not compatible with class \""
+ + TestContextDateLocaleItem.class.getCanonicalName() + "\""));
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+ assertEquals(5, dateAlbum1.size());
+
+ valueMap1.clear();
+ valueMap1.put(ITEM00_2, tciA00);
+ dateAlbum1.putAll(valueMap1);
+ assertEquals(6, dateAlbum1.size());
+
+ assertEquals(tciA00, dateAlbum1.get(ITEM00_2));
+ dateAlbum.remove(ITEM00_2);
+ assertEquals(5, dateAlbum1.size());
+
+ final ContextAlbum dateAlbumCopy = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
+
+ final Map<String, Object> valueMap2 = new HashMap<>();
+ valueMap2.put("Item04", tciA01);
+ valueMap2.put(ITEM05, tciA02);
+ valueMap2.put(ITEM06, tciA03);
+
+ dateAlbumCopy.putAll(valueMap2);
+ assertEquals(8, dateAlbumCopy.size());
+
+ assertEquals(tciA03, dateAlbumCopy.get(ITEM06));
+
+ final Collection<Object> mapValues = dateAlbum.values();
+ assertTrue(dateAlbumCopy.values().containsAll(mapValues));
+
+ // Check that clearing works
+ dateAlbum1.clear();
+ assertTrue(dateAlbum1.isEmpty());
+
+ dateAlbum.put("Item00", tciA00);
+ final Map<String, Object> valueMap3 = new HashMap<>();
+ valueMap3.put(ITEM01, tciA01);
+ valueMap3.put(ITEM02, tciA02);
+ valueMap3.put(ITEM03, tciA03);
+ dateAlbum.putAll(valueMap3);
+
+ final Map<String, Object> valueMap4 = new HashMap<>();
+ valueMap4.put("Item04", tciA01);
+ valueMap4.put(ITEM05, tciA02);
+ valueMap4.put(ITEM06, tciA03);
+
+ dateAlbumCopy.putAll(valueMap4);
+
+ assertContains(dateAlbum, tciA01);
+
+ final Set<Entry<String, Object>> entrySet = dateAlbum.entrySet();
+ assertEquals(7, entrySet.size());
+
+ assertAlbumGetAndPutMethods(dateAlbum, tciA03, tciA00);
+
+ // Should do removes
+ dateAlbum.remove(TEST_AA);
+ dateAlbum.remove(TEST_AB);
+ dateAlbum.remove(ITEM_NULL);
+ assertEquals(7, entrySet.size());
+ assertTrue(dateAlbumCopy.values().containsAll(mapValues));
+ // CHECKSTYLE:ON: checkstyle:magicNumber
+ } finally {
+ contextDistributor.clear();
+ }
+ }
+
+ private void assertContains(final ContextAlbum dateAlbum, final TestContextDateLocaleItem tciA01) {
+ try {
+ dateAlbum.containsKey(null);
+ fail(EXCEPTION_MESSAGE);
+ } catch (final Exception e) {
+ assertEquals("null values are illegal on method parameter \"key\"", e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ assertTrue(dateAlbum.containsKey(ITEM05));
+ assertTrue(!dateAlbum.containsKey("Item07"));
+
+ try {
+ dateAlbum.containsValue(null);
+ } catch (final Exception e) {
+ assertEquals("null values are illegal on method parameter \"value\"", e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ assertTrue(dateAlbum.containsValue(tciA01));
+ assertTrue(!dateAlbum.containsValue("Hello"));
+ }
+
+ private void assertAlbumGetAndPutMethods(final ContextAlbum dateAlbum, final TestContextDateLocaleItem tciA03,
+ final TestContextDateLocaleItem tciA00) {
+ try {
+ dateAlbum.get(null);
+ fail(EXCEPTION_MESSAGE);
+ } catch (final Exception e) {
+ assertEquals("album \"DateContextAlbum:0.0.1\" null keys are illegal on keys for get()", e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ final Object aObject = dateAlbum.get(ITEM03);
+ assertEquals(tciA03, aObject);
+ try {
+ dateAlbum.put(null, null);
+ fail(EXCEPTION_MESSAGE);
+ } catch (final Exception e) {
+ assertEquals("album \"DateContextAlbum:0.0.1\" null keys are illegal on keys for put()", e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ // Put null ContextItem should work (return null)
+ try {
+ dateAlbum.put(ITEM_NULL, null);
+ } catch (final Exception e) {
+ assertEquals("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"ItemNull\" for put()",
+ e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ // Should return null
+ assertNull(dateAlbum.get(ITEM_NULL));
+ // Put should return the previous contextItem
+ tciA00.setDst(false);
+ final TestContextDateLocaleItem tciA03Clone = new TestContextDateLocaleItem(tciA03);
+ tciA03Clone.setDst(true);
+ TestContextDateLocaleItem retItem = (TestContextDateLocaleItem) dateAlbum.put(ITEM03, tciA03Clone);
+ assertEquals(tciA03, retItem);
+ retItem = (TestContextDateLocaleItem) dateAlbum.put(ITEM03, tciA03);
+ assertEquals(tciA03Clone, retItem);
+
+ try {
+ dateAlbum.put(ITEM_NULL, null);
+ fail(EXCEPTION_MESSAGE);
+
+ } catch (final Exception e) {
+ assert ("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"ItemNull\" for put()"
+ .equals(e.getMessage()));
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+
+ dateAlbum.put(TEST_AA, tciA00);
+ assertEquals(tciA00, dateAlbum.get(TEST_AA));
+
+ // Should print warning
+ try {
+ dateAlbum.put(TEST_AA, null);
+ fail(EXCEPTION_MESSAGE);
+ } catch (final Exception e) {
+ assertEquals("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"TestAA\" for put()",
+ e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+ assertEquals(8, dateAlbum.size());
+ try {
+ dateAlbum.put(TEST_AB, null);
+ fail(EXCEPTION_MESSAGE);
+ } catch (final Exception e) {
+ assertEquals("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"TestAB\" for put()",
+ e.getMessage());
+ LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
+ }
+ assertEquals(8, dateAlbum.size());
+ }
+
+ private Map<String, Object> getMap(final Date testDate, final TestContextDateLocaleItem tciA00,
+ final TestContextDateTzItem tci9) {
+ final TestContextBooleanItem testBadItem000 = new TestContextBooleanItem();
+ final TestContextByteItem testBadItem001 = new TestContextByteItem();
+ final TestContextIntItem testBadItem002 = new TestContextIntItem();
+ final TestContextLongItem testBadItem003 = new TestContextLongItem();
+ final TestContextFloatItem testBadItem004 = new TestContextFloatItem();
+ final TestContextDoubleItem testBadItem005 = new TestContextDoubleItem();
+ final TestContextStringItem testBadItem006 = new TestContextStringItem();
+ final TestContextLongObjectItem testBadItem007 = new TestContextLongObjectItem();
+ final TestContextDateItem testBadItem008 = new TestContextDateItem();
+
+ testBadItem000.setFlag(false);
+ testBadItem001.setByteValue(BYTE_VAL);
+ testBadItem002.setIntValue(INT_VAL);
+ testBadItem003.setLongValue(LONG_VAL);
+ testBadItem004.setFloatValue(FLOAT_VAL);
+ testBadItem005.setDoubleValue(PI_VAL);
+ testBadItem006.setStringValue(STRING_GLOBAL_VAL);
+ testBadItem007.setLongValue(testDate.getTime());
+ testBadItem008.setDateValue(testDate);
+
+ final Map<String, Object> values = new HashMap<>();
+ values.put("TestBadItem000", testBadItem000);
+ values.put("TestBadItem001", testBadItem001);
+ values.put("TestBadItem002", testBadItem002);
+ values.put("TestBadItem003", testBadItem003);
+ values.put("TestBadItem004", testBadItem004);
+ values.put("TestBadItem005", testBadItem005);
+ values.put("TestBadItem006", testBadItem006);
+ values.put("TestBadItem007", testBadItem007);
+ values.put("TestBadItem008", testBadItem008);
+ values.put("TestBadItem009", tci9);
+ values.put(ITEM00_2, tciA00);
+ return values;
+ }
+
+ private TestContextDateTzItem getTestContextDateTzItem(final Date testDate) {
+ final TestContextDateTzItem tci9 = new TestContextDateTzItem();
+ tci9.setDateValue(new TestContextDateItem(testDate));
+ tci9.setTzValue(TimeZone.getTimeZone("Europe/Dublin").getDisplayName());
+ tci9.setDst(true);
+ return tci9;
+ }
+
+ private TestContextDateLocaleItem getTestContextDateLocaleItem() {
+ final TestContextDateLocaleItem tciA00 = new TestContextDateLocaleItem();
+ tciA00.setDateValue(new TestContextDateItem(new Date()));
+ tciA00.setTzValue(TIME_ZONE.getDisplayName());
+ tciA00.setDst(true);
+ tciA00.setUtcOffset(-600);
+ tciA00.setLocale(Locale.ENGLISH);
+ return tciA00;
+ }
+
+ private ContextAlbum getContextAlbum(final String albumName, final Distributor contextDistributor)
+ throws ContextException {
+ final ContextAlbum dateAlbum = contextDistributor.createContextAlbum(new AxArtifactKey(albumName, VERSION));
+ assertNotNull(dateAlbum);
+ dateAlbum.setUserArtifactStack(Constants.getAxArtifactKeyArray());
+ return dateAlbum;
+ }
+
+ private Distributor getDistributor() throws ContextException {
+ final AxArtifactKey distributorKey = new AxArtifactKey(APEX_DISTRIBUTOR, VERSION);
+ final Distributor contextDistributor = new DistributorFactory().getDistributor(distributorKey);
+ contextDistributor.registerModel(createMultiAlbumsContextModel());
+ return contextDistributor;
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/package-info.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/package-info.java
new file mode 100644
index 000000000..04230aaae
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/distribution/package-info.java
@@ -0,0 +1,28 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+/**
+ * Runs context distribution tests in APEX.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+
+package org.onap.policy.apex.testsuites.integration.context.distribution;
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/entities/ArtifactKeyTestEntity.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/entities/ArtifactKeyTestEntity.java
new file mode 100644
index 000000000..1f3ea3c20
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/entities/ArtifactKeyTestEntity.java
@@ -0,0 +1,258 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.entities;
+
+import java.util.Arrays;
+import java.util.List;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlElement;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxConcept;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+
+/**
+ * The Class ArtifactKeyTestEntity is an entity for testing artifact keys.
+ */
+@Entity
+@Table(name = "ArtifactKeyTestEntity")
+public class ArtifactKeyTestEntity extends AxConcept {
+ private static final long serialVersionUID = -2962570563281067896L;
+
+ @EmbeddedId()
+ @XmlElement(name = "key", required = true)
+ protected AxArtifactKey key;
+
+ private double doubleValue;
+
+ /**
+ * Instantiates a new artifact key test entity.
+ */
+ public ArtifactKeyTestEntity() {
+ this.key = new AxArtifactKey();
+ this.doubleValue = 0;
+ }
+
+ /**
+ * Instantiates a new artifact key test entity.
+ *
+ * @param doubleValue the double value
+ */
+ public ArtifactKeyTestEntity(final Double doubleValue) {
+ this.key = new AxArtifactKey();
+ this.doubleValue = doubleValue;
+ }
+
+ /**
+ * Instantiates a new artifact key test entity.
+ *
+ * @param key the key
+ * @param doubleValue the double value
+ */
+ public ArtifactKeyTestEntity(final AxArtifactKey key, final Double doubleValue) {
+ this.key = key;
+ this.doubleValue = doubleValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#getKey()
+ */
+ @Override
+ public AxArtifactKey getKey() {
+ return key;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#getKeys()
+ */
+ @Override
+ public List<AxKey> getKeys() {
+ return Arrays.asList((AxKey) getKey());
+ }
+
+ /**
+ * Sets the key.
+ *
+ * @param key the new key
+ */
+ public void setKey(final AxArtifactKey key) {
+ this.key = key;
+ }
+
+ /**
+ * Check set key.
+ *
+ * @return true, if successful
+ */
+ public boolean checkSetKey() {
+ return (this.key != null);
+ }
+
+ /**
+ * Gets the double value.
+ *
+ * @return the double value
+ */
+ public double getDoubleValue() {
+ return doubleValue;
+ }
+
+ /**
+ * Sets the double value.
+ *
+ * @param doubleValue the new double value
+ */
+ public void setDoubleValue(final double doubleValue) {
+ this.doubleValue = doubleValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxConcept#validate(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxValidationResult)
+ */
+ @Override
+ public AxValidationResult validate(final AxValidationResult result) {
+ return key.validate(result);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#clean()
+ */
+ @Override
+ public void clean() {
+ key.clean();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#toString()
+ */
+ @Override
+ public String toString() {
+ return "ArtifactKeyTestEntity [key=" + key + ", doubleValue=" + doubleValue + "]";
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxConcept#copyTo(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxConcept)
+ */
+ @Override
+ public AxConcept copyTo(final AxConcept target) {
+ final Object copyObject = ((target == null) ? new ArtifactKeyTestEntity() : target);
+ if (copyObject instanceof ArtifactKeyTestEntity) {
+ final ArtifactKeyTestEntity copy = ((ArtifactKeyTestEntity) copyObject);
+ if (this.checkSetKey()) {
+ copy.setKey(new AxArtifactKey(key));
+ } else {
+ copy.key = null;
+ }
+ copy.doubleValue = doubleValue;
+ return copy;
+ } else {
+ return null;
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((key == null) ? 0 : key.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (this == obj) {
+ return true;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final ArtifactKeyTestEntity other = (ArtifactKeyTestEntity) obj;
+ if (key == null) {
+ if (other.key != null) {
+ return false;
+ }
+ } else if (!key.equals(other.key)) {
+ return false;
+ }
+ return (Double.compare(doubleValue, other.doubleValue) == 0);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
+ @Override
+ public int compareTo(final AxConcept otherObj) {
+ if (otherObj == null) {
+ return -1;
+ }
+ if (this == otherObj) {
+ return 0;
+ }
+ if (getClass() != otherObj.getClass()) {
+ return -1;
+ }
+ final ArtifactKeyTestEntity other = (ArtifactKeyTestEntity) otherObj;
+ if (key == null) {
+ if (other.key != null) {
+ return 1;
+ }
+ } else if (!key.equals(other.key)) {
+ return key.compareTo(other.key);
+ }
+ return Double.compare(doubleValue, other.doubleValue);
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/entities/ReferenceKeyTestEntity.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/entities/ReferenceKeyTestEntity.java
new file mode 100644
index 000000000..2eef94ed7
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/entities/ReferenceKeyTestEntity.java
@@ -0,0 +1,261 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.entities;
+
+import java.util.Arrays;
+import java.util.List;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxConcept;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.xml.AxReferenceKeyAdapter;
+
+/**
+ * The Class ReferenceKeyTestEntity provides a reference key test concept.
+ */
+@Entity
+@Table(name = "ReferenceKeyTestEntity")
+public class ReferenceKeyTestEntity extends AxConcept {
+ private static final long serialVersionUID = -2962570563281067895L;
+
+ @EmbeddedId()
+ @XmlElement(name = "key", required = true)
+ @XmlJavaTypeAdapter(AxReferenceKeyAdapter.class)
+ protected AxReferenceKey key;
+
+ private double doubleValue;
+
+ /**
+ * Instantiates a new reference key test entity.
+ */
+ public ReferenceKeyTestEntity() {
+ this.key = new AxReferenceKey();
+ this.doubleValue = 0;
+ }
+
+ /**
+ * Instantiates a new reference key test entity.
+ *
+ * @param doubleValue the double value
+ */
+ public ReferenceKeyTestEntity(final Double doubleValue) {
+ this.key = new AxReferenceKey();
+ this.doubleValue = doubleValue;
+ }
+
+ /**
+ * Instantiates a new reference key test entity.
+ *
+ * @param key the key
+ * @param doubleValue the double value
+ */
+ public ReferenceKeyTestEntity(final AxReferenceKey key, final Double doubleValue) {
+ this.key = key;
+ this.doubleValue = doubleValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#getKey()
+ */
+ @Override
+ public AxReferenceKey getKey() {
+ return key;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#getKeys()
+ */
+ @Override
+ public List<AxKey> getKeys() {
+ return Arrays.asList((AxKey) getKey());
+ }
+
+ /**
+ * Sets the key.
+ *
+ * @param key the new key
+ */
+ public void setKey(final AxReferenceKey key) {
+ this.key = key;
+ }
+
+ /**
+ * Check set key.
+ *
+ * @return true, if successful
+ */
+ public boolean checkSetKey() {
+ return (this.key != null);
+ }
+
+ /**
+ * Gets the double value.
+ *
+ * @return the double value
+ */
+ public double getDoubleValue() {
+ return doubleValue;
+ }
+
+ /**
+ * Sets the double value.
+ *
+ * @param doubleValue the new double value
+ */
+ public void setDoubleValue(final double doubleValue) {
+ this.doubleValue = doubleValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxConcept#validate(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxValidationResult)
+ */
+ @Override
+ public AxValidationResult validate(final AxValidationResult result) {
+ return key.validate(result);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#clean()
+ */
+ @Override
+ public void clean() {
+ key.clean();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#toString()
+ */
+ @Override
+ public String toString() {
+ return "ReferenceKeyTestEntity [key=" + key + ", doubleValue=" + doubleValue + "]";
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxConcept#copyTo(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxConcept)
+ */
+ @Override
+ public AxConcept copyTo(final AxConcept target) {
+ final Object copyObject = ((target == null) ? new ReferenceKeyTestEntity() : target);
+ if (copyObject instanceof ReferenceKeyTestEntity) {
+ final ReferenceKeyTestEntity copy = ((ReferenceKeyTestEntity) copyObject);
+ if (this.checkSetKey()) {
+ copy.setKey(new AxReferenceKey(key));
+ } else {
+ copy.key = null;
+ }
+ copy.doubleValue = doubleValue;
+ return copy;
+ } else {
+ return null;
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((key == null) ? 0 : key.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (this == obj) {
+ return true;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final ReferenceKeyTestEntity other = (ReferenceKeyTestEntity) obj;
+ if (key == null) {
+ if (other.key != null) {
+ return false;
+ }
+ } else if (!key.equals(other.key)) {
+ return false;
+ }
+ return (Double.compare(doubleValue, other.doubleValue) == 0);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
+ @Override
+ public int compareTo(final AxConcept otherObj) {
+ if (otherObj == null) {
+ return -1;
+ }
+ if (this == otherObj) {
+ return 0;
+ }
+ if (getClass() != otherObj.getClass()) {
+ return -1;
+ }
+ final ReferenceKeyTestEntity other = (ReferenceKeyTestEntity) otherObj;
+ if (key == null) {
+ if (other.key != null) {
+ return 1;
+ }
+ } else if (!key.equals(other.key)) {
+ return key.compareTo(other.key);
+ }
+ return Double.compare(doubleValue, other.doubleValue);
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/entities/package-info.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/entities/package-info.java
new file mode 100644
index 000000000..8824a16f5
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/entities/package-info.java
@@ -0,0 +1,27 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+/**
+ * Contains common test entities.
+ * @author Dinh Danh Le (dinh.danh.le@ericsson.com)
+ *
+ */
+package org.onap.policy.apex.testsuites.integration.context.entities;
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/factory/TestContextAlbumFactory.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/factory/TestContextAlbumFactory.java
new file mode 100644
index 000000000..2efa80154
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/factory/TestContextAlbumFactory.java
@@ -0,0 +1,217 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.factory;
+
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.DATE_CONTEXT_ALBUM;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.EXTERNAL_CONTEXT_ALBUM;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.GLOBAL_CONTEXT_ALBUM;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.LONG_CONTEXT_ALBUM;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.MAP_CONTEXT_ALBUM;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.POLICY_CONTEXT_ALBUM;
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.VERSION;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbums;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextModel;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextDateLocaleItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextLongItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextTreeMapItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestExternalContextItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestGlobalContextItem;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestPolicyContextItem;
+
+/**
+ * The Class TestContextAlbumFactory creates test context albums.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public final class TestContextAlbumFactory {
+ // Recurring string constants.
+ private static final String CONTEXT = "context";
+ private static final String SCHEMAS2 = "Schemas";
+ private static final String KEY_INFO_MAP_KEY = "KeyInfoMapKey";
+ private static final String APPLICATION = "APPLICATION";
+ private static final String JAVA_LONG = Long.class.getCanonicalName();
+ private static final String JAVA_FLAVOUR = "Java";
+
+ /**
+ * Default constructor to prevent sub-classing.
+ */
+ private TestContextAlbumFactory() {}
+
+ /**
+ * Creates the policy context model.
+ *
+ * @return the ax context model
+ */
+ public static AxContextModel createPolicyContextModel() {
+ final AxContextSchema policySchema = new AxContextSchema(new AxArtifactKey("PolicySchema", VERSION),
+ JAVA_FLAVOUR, TestPolicyContextItem.class.getCanonicalName());
+ final AxContextAlbum albumDefinition = new AxContextAlbum(new AxArtifactKey(POLICY_CONTEXT_ALBUM, VERSION),
+ APPLICATION, true, policySchema.getKey());
+
+ final AxContextSchemas schemas = new AxContextSchemas(new AxArtifactKey(SCHEMAS2, VERSION));
+ schemas.getSchemasMap().put(policySchema.getKey(), policySchema);
+ final AxContextAlbums albums = new AxContextAlbums(new AxArtifactKey(CONTEXT, VERSION));
+ albums.getAlbumsMap().put(albumDefinition.getKey(), albumDefinition);
+
+ final AxKeyInformation keyInformation = new AxKeyInformation(new AxArtifactKey(KEY_INFO_MAP_KEY, VERSION));
+ final AxContextModel contextModel =
+ new AxContextModel(new AxArtifactKey("PolicyContextModel", VERSION), schemas, albums, keyInformation);
+ contextModel.setKeyInformation(keyInformation);
+ keyInformation.generateKeyInfo(contextModel);
+
+ return contextModel;
+ }
+
+ /**
+ * Creates the global context model.
+ *
+ * @return the ax context model
+ */
+ public static AxContextModel createGlobalContextModel() {
+ final AxContextSchema globalSchema = new AxContextSchema(new AxArtifactKey("GlobalSchema", VERSION),
+ JAVA_FLAVOUR, TestGlobalContextItem.class.getCanonicalName());
+ final AxContextAlbum albumDefinition = new AxContextAlbum(new AxArtifactKey(GLOBAL_CONTEXT_ALBUM, VERSION),
+ "GLOBAL", true, globalSchema.getKey());
+
+ final AxContextSchemas schemas = new AxContextSchemas(new AxArtifactKey(SCHEMAS2, VERSION));
+ schemas.getSchemasMap().put(globalSchema.getKey(), globalSchema);
+ final AxContextAlbums albums = new AxContextAlbums(new AxArtifactKey(CONTEXT, VERSION));
+ albums.getAlbumsMap().put(albumDefinition.getKey(), albumDefinition);
+
+ final AxKeyInformation keyInformation = new AxKeyInformation(new AxArtifactKey(KEY_INFO_MAP_KEY, VERSION));
+ final AxContextModel contextModel =
+ new AxContextModel(new AxArtifactKey("GlobalContextModel", VERSION), schemas, albums, keyInformation);
+ contextModel.setKeyInformation(keyInformation);
+ keyInformation.generateKeyInfo(contextModel);
+
+ return contextModel;
+ }
+
+ /**
+ * Creates the external context model.
+ *
+ * @return the ax context model
+ */
+ public static AxContextModel createExternalContextModel() {
+ final AxContextSchema externalSchema = new AxContextSchema(new AxArtifactKey("ExternalSchema", VERSION),
+ JAVA_FLAVOUR, TestExternalContextItem.class.getCanonicalName());
+ final AxContextAlbum albumDefinition = new AxContextAlbum(new AxArtifactKey(EXTERNAL_CONTEXT_ALBUM, VERSION),
+ "EXTERNAL", true, externalSchema.getKey());
+
+ final AxContextSchemas schemas = new AxContextSchemas(new AxArtifactKey(SCHEMAS2, VERSION));
+ schemas.getSchemasMap().put(externalSchema.getKey(), externalSchema);
+ final AxContextAlbums albums = new AxContextAlbums(new AxArtifactKey(CONTEXT, VERSION));
+ albums.getAlbumsMap().put(albumDefinition.getKey(), albumDefinition);
+
+ final AxKeyInformation keyInformation = new AxKeyInformation(new AxArtifactKey(KEY_INFO_MAP_KEY, VERSION));
+ final AxContextModel contextModel =
+ new AxContextModel(new AxArtifactKey("ExternalContextModel", VERSION), schemas, albums, keyInformation);
+ contextModel.setKeyInformation(keyInformation);
+ keyInformation.generateKeyInfo(contextModel);
+
+ return contextModel;
+ }
+
+ /**
+ * Creates the long context model.
+ *
+ * @return the ax context model
+ */
+ public static AxContextModel createLongContextModel() {
+ final AxArtifactKey longSchemaKey = new AxArtifactKey("LongSchema", VERSION);
+ final AxContextSchema longSchema = new AxContextSchema(longSchemaKey, JAVA_FLAVOUR, JAVA_LONG);
+
+ final AxArtifactKey longContextAlbumKey = new AxArtifactKey("LongContextAlbum1", VERSION);
+ final AxContextAlbum albumDefinition1 =
+ new AxContextAlbum(longContextAlbumKey, APPLICATION, true, longSchema.getKey());
+
+ final AxArtifactKey longContextAlbumKey2 = new AxArtifactKey("LongContextAlbum2", VERSION);
+ final AxContextAlbum albumDefinition2 =
+ new AxContextAlbum(longContextAlbumKey2, APPLICATION, true, longSchema.getKey());
+
+ final AxContextSchemas schemas = new AxContextSchemas(new AxArtifactKey(SCHEMAS2, VERSION));
+ schemas.getSchemasMap().put(longSchema.getKey(), longSchema);
+ final AxContextAlbums albums = new AxContextAlbums(new AxArtifactKey(CONTEXT, VERSION));
+ albums.getAlbumsMap().put(albumDefinition1.getKey(), albumDefinition1);
+ albums.getAlbumsMap().put(albumDefinition2.getKey(), albumDefinition2);
+
+ final AxKeyInformation keyInformation = new AxKeyInformation(new AxArtifactKey(KEY_INFO_MAP_KEY, VERSION));
+ final AxContextModel contextModel =
+ new AxContextModel(new AxArtifactKey("LongContextModel", VERSION), schemas, albums, keyInformation);
+ contextModel.setKeyInformation(keyInformation);
+ keyInformation.generateKeyInfo(contextModel);
+
+ return contextModel;
+ }
+
+ /**
+ * Creates the multi albums context model.
+ *
+ * @return the ax context model
+ */
+ public static AxContextModel createMultiAlbumsContextModel() {
+ final AxContextSchema longSchema =
+ new AxContextSchema(new AxArtifactKey("LongSchema", VERSION), JAVA_FLAVOUR, JAVA_LONG);
+ final AxContextSchema lTypeSchema = new AxContextSchema(new AxArtifactKey("LTypeSchema", VERSION), JAVA_FLAVOUR,
+ TestContextLongItem.class.getCanonicalName());
+ final AxContextSchema dateSchema = new AxContextSchema(new AxArtifactKey("DateSchema", VERSION), JAVA_FLAVOUR,
+ TestContextDateLocaleItem.class.getCanonicalName());
+ final AxContextSchema mapSchema = new AxContextSchema(new AxArtifactKey("MapSchema", VERSION), JAVA_FLAVOUR,
+ TestContextTreeMapItem.class.getCanonicalName());
+
+ final AxContextSchemas schemas = new AxContextSchemas(new AxArtifactKey(SCHEMAS2, VERSION));
+ schemas.getSchemasMap().put(longSchema.getKey(), longSchema);
+ schemas.getSchemasMap().put(lTypeSchema.getKey(), lTypeSchema);
+ schemas.getSchemasMap().put(dateSchema.getKey(), dateSchema);
+ schemas.getSchemasMap().put(mapSchema.getKey(), mapSchema);
+
+ final AxContextAlbum longAlbumDefinition = new AxContextAlbum(new AxArtifactKey(LONG_CONTEXT_ALBUM, VERSION),
+ APPLICATION, true, longSchema.getKey());
+ final AxContextAlbum lTypeAlbumDefinition = new AxContextAlbum(new AxArtifactKey("LTypeContextAlbum", VERSION),
+ APPLICATION, true, lTypeSchema.getKey());
+ final AxContextAlbum dateAlbumDefinition = new AxContextAlbum(new AxArtifactKey(DATE_CONTEXT_ALBUM, VERSION),
+ APPLICATION, true, dateSchema.getKey());
+ final AxContextAlbum mapAlbumDefinition = new AxContextAlbum(new AxArtifactKey(MAP_CONTEXT_ALBUM, VERSION),
+ APPLICATION, true, mapSchema.getKey());
+
+ final AxContextAlbums albums = new AxContextAlbums(new AxArtifactKey(CONTEXT, VERSION));
+ albums.getAlbumsMap().put(longAlbumDefinition.getKey(), longAlbumDefinition);
+ albums.getAlbumsMap().put(lTypeAlbumDefinition.getKey(), lTypeAlbumDefinition);
+ albums.getAlbumsMap().put(dateAlbumDefinition.getKey(), dateAlbumDefinition);
+ albums.getAlbumsMap().put(mapAlbumDefinition.getKey(), mapAlbumDefinition);
+
+ final AxKeyInformation keyInformation = new AxKeyInformation(new AxArtifactKey(KEY_INFO_MAP_KEY, VERSION));
+ final AxContextModel contextModel = new AxContextModel(new AxArtifactKey("MultiAlbumsContextModel", VERSION),
+ schemas, albums, keyInformation);
+ contextModel.setKeyInformation(keyInformation);
+ keyInformation.generateKeyInfo(contextModel);
+
+ return contextModel;
+ }
+
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/factory/package-info.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/factory/package-info.java
new file mode 100644
index 000000000..3d946eec1
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/factory/package-info.java
@@ -0,0 +1,28 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+/**
+ * Contains factories for creating test context albums.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+
+package org.onap.policy.apex.testsuites.integration.context.factory;
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/AlbumModifier.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/AlbumModifier.java
new file mode 100644
index 000000000..f9f94c980
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/AlbumModifier.java
@@ -0,0 +1,43 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.lock.modifier;
+
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.context.ContextException;
+
+/**
+ * The Interface AlbumModifier defines the interface to allow context albums be modified during context tests.
+ */
+@FunctionalInterface
+public interface AlbumModifier {
+
+ /**
+ * Modify album.
+ *
+ * @param contextAlbum the context album
+ * @param loopSize the loop size
+ * @param arraySize the array size
+ * @throws ContextException the context exception
+ */
+ void modifyAlbum(final ContextAlbum contextAlbum, final int loopSize, final int arraySize) throws ContextException;
+
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/LockType.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/LockType.java
new file mode 100644
index 000000000..dc9cd94e7
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/LockType.java
@@ -0,0 +1,102 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.lock.modifier;
+
+import org.onap.policy.apex.context.ContextRuntimeException;
+
+/**
+ * The Enum LockType defines the type of lock on a test context album.
+ */
+public enum LockType {
+
+ NO_LOCK(0) {
+ @Override
+ public AlbumModifier getAlbumModifier() {
+ return NO_LOCK_MODIFER;
+ }
+ },
+ READ_LOCK(1) {
+ @Override
+ public AlbumModifier getAlbumModifier() {
+ return READ_LOCK_MODIFER;
+ }
+ },
+ WRITE_LOCK(2) {
+ @Override
+ public AlbumModifier getAlbumModifier() {
+ return WRITE_LOCK_MODIFER;
+ }
+ },
+ WRITE_LOCK_SINGLE_VALUE_UPDATE(3) {
+ @Override
+ public AlbumModifier getAlbumModifier() {
+ return WRITE_LOCK_SINGLE_VALUE_MODIFER;
+ }
+ };
+
+ private static final AlbumModifier NO_LOCK_MODIFER = new NoLockAlbumModifier();
+ private static final AlbumModifier READ_LOCK_MODIFER = new ReadLockAlbumModifier();
+ private static final AlbumModifier WRITE_LOCK_MODIFER = new WriteLockAlbumModifier();
+ private static final AlbumModifier WRITE_LOCK_SINGLE_VALUE_MODIFER = new SingleValueWriteLockAlbumModifier();
+
+ private final int value;
+
+ /**
+ * Instantiates a new lock type.
+ *
+ * @param value the value
+ */
+ LockType(final int value) {
+ this.value = value;
+ }
+
+ /**
+ * Gets the value.
+ *
+ * @return the value
+ */
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ * Get the lock type given an int value.
+ * @param value the value of lock type
+ * @return the lock type
+ */
+ public static LockType getLockType(final int value) {
+ for (final LockType lockType : LockType.values()) {
+ if (lockType.getValue() == value) {
+ return lockType;
+ }
+ }
+ throw new ContextRuntimeException("Invalid Lock type value: " + value);
+ }
+
+ /**
+ * Gets the album modifier.
+ *
+ * @return the album modifier
+ */
+ public abstract AlbumModifier getAlbumModifier();
+
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/NoLockAlbumModifier.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/NoLockAlbumModifier.java
new file mode 100644
index 000000000..26f54e08c
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/NoLockAlbumModifier.java
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.lock.modifier;
+
+import java.util.Random;
+
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextLongItem;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The Class NoLockAlbumModifier implements a non lock context album.
+ */
+public class NoLockAlbumModifier implements AlbumModifier {
+ private static final XLogger LOGGER = XLoggerFactory.getXLogger(NoLockAlbumModifier.class);
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.lock.modifier.AlbumModifier#modifyAlbum(org.onap.policy.apex.context.
+ * ContextAlbum, int, int)
+ */
+ @Override
+ public void modifyAlbum(final ContextAlbum contextAlbum, final int loopSize, final int arraySize) {
+ final Random rand = new Random();
+ for (int i = 0; i < loopSize; i++) {
+ final String nextLongKey = Integer.toString(rand.nextInt(arraySize));
+ final TestContextLongItem item = (TestContextLongItem) contextAlbum.get(nextLongKey);
+ final long value = item.getLongValue();
+ if (LOGGER.isTraceEnabled()) {
+ LOGGER.trace("lock type={}, value={}", LockType.NO_LOCK, value);
+ }
+ }
+ }
+
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/ReadLockAlbumModifier.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/ReadLockAlbumModifier.java
new file mode 100644
index 000000000..f5d22ed87
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/ReadLockAlbumModifier.java
@@ -0,0 +1,71 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.lock.modifier;
+
+import java.util.Random;
+
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.context.ContextException;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextLongItem;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The Class ReadLockAlbumModifier implements a read lock context album.
+ */
+public class ReadLockAlbumModifier implements AlbumModifier {
+ private static final XLogger LOGGER = XLoggerFactory.getXLogger(ReadLockAlbumModifier.class);
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.lock.modifier.AlbumModifier#modifyAlbum(org.onap.policy.apex.context.
+ * ContextAlbum, int, int)
+ */
+ @Override
+ public void modifyAlbum(final ContextAlbum contextAlbum, final int loopSize, final int arraySize) {
+ final Random rand = new Random();
+ for (int i = 0; i < loopSize; i++) {
+ final String nextLongKey = Integer.toString(rand.nextInt(arraySize));
+ try {
+ contextAlbum.lockForReading(nextLongKey);
+ } catch (final ContextException e) {
+ LOGGER.error("could not acquire read lock on context album, key=" + nextLongKey, e);
+ continue;
+ }
+
+ final TestContextLongItem item = (TestContextLongItem) contextAlbum.get(nextLongKey);
+ final long value = item.getLongValue();
+ if (LOGGER.isTraceEnabled()) {
+ LOGGER.trace("lock type={}, value={}", LockType.READ_LOCK, value);
+ }
+
+ try {
+ contextAlbum.unlockForReading(nextLongKey);
+ } catch (final ContextException e) {
+ LOGGER.error("could not release read lock on context album, key=" + nextLongKey, e);
+ }
+ }
+
+ }
+
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/SingleValueWriteLockAlbumModifier.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/SingleValueWriteLockAlbumModifier.java
new file mode 100644
index 000000000..b54fe166f
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/SingleValueWriteLockAlbumModifier.java
@@ -0,0 +1,75 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.lock.modifier;
+
+import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.TEST_VALUE;
+
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.context.ContextException;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextLongItem;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The Class SingleValueWriteLockAlbumModifier implements a single value lock context album.
+ */
+public class SingleValueWriteLockAlbumModifier implements AlbumModifier {
+ private static final XLogger LOGGER = XLoggerFactory.getXLogger(SingleValueWriteLockAlbumModifier.class);
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.lock.modifier.AlbumModifier#modifyAlbum(org.onap.policy.apex.context.
+ * ContextAlbum, int, int)
+ */
+ @Override
+ public void modifyAlbum(final ContextAlbum contextAlbum, final int loopSize, final int arraySize)
+ throws ContextException {
+ for (int i = 0; i < loopSize; i++) {
+ try {
+ contextAlbum.lockForWriting(TEST_VALUE);
+ TestContextLongItem item = (TestContextLongItem) contextAlbum.get(TEST_VALUE);
+ if (item != null) {
+ long value = item.getLongValue();
+ item.setLongValue(++value);
+ } else {
+ item = new TestContextLongItem(0L);
+ }
+ contextAlbum.put(TEST_VALUE, item);
+ } finally {
+ contextAlbum.unlockForWriting(TEST_VALUE);
+ }
+ }
+
+ try {
+ contextAlbum.lockForWriting(TEST_VALUE);
+ final TestContextLongItem item = (TestContextLongItem) contextAlbum.get(TEST_VALUE);
+ final long value = item.getLongValue();
+ LOGGER.info("Value after modification: ", value);
+ } catch (final Exception e) {
+ LOGGER.error("could not read the value in the test context album", e);
+ } finally {
+ contextAlbum.unlockForWriting(TEST_VALUE);
+ }
+ }
+
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/WriteLockAlbumModifier.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/WriteLockAlbumModifier.java
new file mode 100644
index 000000000..87214fb47
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/WriteLockAlbumModifier.java
@@ -0,0 +1,73 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.lock.modifier;
+
+import java.util.Random;
+
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.context.ContextException;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextLongItem;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The Class WriteLockAlbumModifier implements a write lock context album.
+ */
+public class WriteLockAlbumModifier implements AlbumModifier {
+ private static final XLogger LOGGER = XLoggerFactory.getXLogger(WriteLockAlbumModifier.class);
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.lock.modifier.AlbumModifier#modifyAlbum(org.onap.policy.apex.context.
+ * ContextAlbum, int, int)
+ */
+ @Override
+ public void modifyAlbum(final ContextAlbum contextAlbum, final int loopSize, final int arraySize) {
+ final Random rand = new Random();
+ for (int i = 0; i < loopSize; i++) {
+ final String nextLongKey = Integer.toString(rand.nextInt(arraySize));
+ try {
+ contextAlbum.lockForWriting(nextLongKey);
+ } catch (final ContextException e) {
+ LOGGER.error("could not acquire write lock on context album, key=" + nextLongKey, e);
+ continue;
+ }
+
+ final TestContextLongItem item = (TestContextLongItem) contextAlbum.get(nextLongKey);
+ long value = item.getLongValue();
+ if (LOGGER.isTraceEnabled()) {
+ LOGGER.trace("lock type={}, value={}", LockType.WRITE_LOCK, value);
+ }
+ item.setLongValue(++value);
+ contextAlbum.put(nextLongKey, item);
+
+ try {
+ contextAlbum.unlockForWriting(nextLongKey);
+ } catch (final ContextException e) {
+ LOGGER.error("could not release write lock on context album, key=" + nextLongKey, e);
+ }
+ }
+
+ }
+
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/package-info.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/package-info.java
new file mode 100644
index 000000000..cf38edb7b
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/lock/modifier/package-info.java
@@ -0,0 +1,26 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+/**
+ * Provides modifiers that allow the locking on a contest album to be modified in various ways.
+ */
+
+package org.onap.policy.apex.testsuites.integration.context.lock.modifier;
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContext.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContext.java
new file mode 100644
index 000000000..4326d5adb
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContext.java
@@ -0,0 +1,166 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.locking;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.context.ContextException;
+import org.onap.policy.apex.context.Distributor;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextLongItem;
+import org.onap.policy.apex.testsuites.integration.context.utils.ConfigrationProvider;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The Class TestConcurrentContext tests concurrent use of context.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class ConcurrentContext {
+ // Logger for this class
+ private static final XLogger LOGGER = XLoggerFactory.getXLogger(ConcurrentContext.class);
+
+ // The context distributor and map used by each test
+ private Distributor contextDistributor = null;
+ private ContextAlbum ltypeAlbum = null;
+
+ private final ConfigrationProvider configrationProvider;
+
+ public ConcurrentContext(final ConfigrationProvider configrationProvider) {
+ this.configrationProvider = configrationProvider;
+ }
+
+ /**
+ * The method tests concurrent use of context.
+ *
+ * @return the verified context
+ * @throws ApexException the Apex exception occurs in handling Apex
+ */
+ public Map<String, TestContextLongItem> testConcurrentContext() throws ApexException {
+
+ try {
+ setupAndVerifyContext();
+ } catch (final Exception exception) {
+ LOGGER.error("Error occured while setting up and verifying concurrent context", exception);
+ throw exception;
+ }
+
+ LOGGER.debug("starting JVMs and threads . . .");
+
+ final ExecutorService executorService = configrationProvider.getExecutorService();
+
+ final List<Closeable> tasks = new ArrayList<>(configrationProvider.getThreadCount());
+
+ addShutDownHook(tasks);
+
+ // Check if we have a single JVM or multiple JVMs
+ if (configrationProvider.getJvmCount() == 1) {
+ // Run everything in this JVM
+ for (int t = 0; t < configrationProvider.getThreadCount(); t++) {
+ final ConcurrentContextThread task = new ConcurrentContextThread(0, t, configrationProvider);
+ tasks.add(task);
+ executorService.execute(task);
+ }
+
+ } else {
+ // Spawn JVMs to run the tests
+ for (int j = 0; j < configrationProvider.getJvmCount(); j++) {
+ final ConcurrentContextJvmThread task = new ConcurrentContextJvmThread(j, configrationProvider);
+ tasks.add(task);
+ executorService.execute(task);
+ }
+ }
+
+ try {
+ executorService.shutdown();
+ // wait for threads to finish, if not Timeout
+ executorService.awaitTermination(10, TimeUnit.MINUTES);
+ } catch (final InterruptedException interruptedException) {
+ LOGGER.error("Exception while waiting for threads to finish", interruptedException);
+ // restore the interrupt status
+ Thread.currentThread().interrupt();
+ }
+
+ LOGGER.info("Shutting down now ...");
+ executorService.shutdownNow();
+
+ return verifyAndClearContext();
+ }
+
+
+ private void addShutDownHook(final List<Closeable> tasks) {
+ Runtime.getRuntime().addShutdownHook(new Thread() {
+ @Override
+ public void run() {
+ LOGGER.info("Shutting down ...");
+ for (final Closeable task : tasks) {
+ try {
+ task.close();
+ } catch (final IOException ioException) {
+ LOGGER.error("Unable to close task ... ", ioException);
+ }
+ }
+ }
+ });
+ }
+
+ /**
+ * Setup and verify context.
+ *
+ * @throws ContextException the context exception
+ */
+ private void setupAndVerifyContext() {
+ contextDistributor = configrationProvider.getDistributor();
+ ltypeAlbum = configrationProvider.getContextAlbum(contextDistributor);
+ final Map<String, Object> initValues = configrationProvider.getContextAlbumInitValues();
+
+ for (final Entry<String, Object> entry : initValues.entrySet()) {
+ ltypeAlbum.put(entry.getKey(), entry.getValue());
+ }
+ }
+
+ private Map<String, TestContextLongItem> verifyAndClearContext() throws ContextException {
+ final Map<String, TestContextLongItem> values = new HashMap<>();
+ try {
+
+ for (final Entry<String, Object> entry : ltypeAlbum.entrySet()) {
+ values.put(entry.getKey(), (TestContextLongItem) entry.getValue());
+ }
+ } catch (final Exception exception) {
+ LOGGER.error("Error: ", exception);
+ }
+ contextDistributor.clear();
+ contextDistributor = null;
+
+ return values;
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContextJvm.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContextJvm.java
new file mode 100644
index 000000000..0a9f4cf93
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContextJvm.java
@@ -0,0 +1,233 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.locking;
+
+import com.google.gson.Gson;
+
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.TreeSet;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.context.Distributor;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexRuntimeException;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.testsuites.integration.context.utils.ConfigrationProvider;
+import org.onap.policy.apex.testsuites.integration.context.utils.ConfigrationProviderImpl;
+import org.onap.policy.apex.testsuites.integration.context.utils.Constants;
+import org.onap.policy.common.parameters.ParameterGroup;
+import org.onap.policy.common.parameters.ParameterService;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+
+/**
+ * The Class ConcurrentContextJVM tests concurrent use of context in a single JVM.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public final class ConcurrentContextJvm {
+ // Logger for this class
+ private static final XLogger LOGGER = XLoggerFactory.getXLogger(ConcurrentContextJvm.class);
+
+ private static final int IPV4_ADDRESS_LENGTH = 4;
+
+ private final int jvmNo;
+
+ private final ExecutorService executorService;
+
+ private final ConfigrationProvider configrationProvider;
+
+ private ConcurrentContextJvm(final int jvmNo, final ConfigrationProvider configrationProvider) {
+ this.jvmNo = jvmNo;
+ this.configrationProvider = configrationProvider;
+ final String name = configrationProvider.getTestName() + ":ConcurrentContextThread_" + jvmNo;
+ this.executorService = configrationProvider.getExecutorService(name, configrationProvider.getThreadCount());
+ }
+
+ /**
+ * This method executes the test of concurrent use of context in a single JVM.
+ *
+ * @throws ApexException the Apex exception occurs while running the test
+ */
+ public void execute() throws ApexException {
+ LOGGER.debug("starting JVMs and threads . . .");
+
+ final AxArtifactKey distributorKey = new AxArtifactKey("ApexDistributor" + jvmNo, "0.0.1");
+ final Distributor distributor = configrationProvider.getDistributor(distributorKey);
+ final ContextAlbum contextAlbum = configrationProvider.getContextAlbum(distributor);
+ assert (contextAlbum != null);
+
+ final List<Future<?>> tasks = new ArrayList<>(configrationProvider.getThreadCount());
+
+ for (int t = 0; t < configrationProvider.getThreadCount(); t++) {
+ tasks.add(executorService.submit(new ConcurrentContextThread(jvmNo, t, configrationProvider)));
+ }
+
+ try {
+ executorService.shutdown();
+ // wait for threads to finish, if not Timeout
+ executorService.awaitTermination(10, TimeUnit.MINUTES);
+ } catch (final InterruptedException interruptedException) {
+ LOGGER.error("Exception while waiting for threads to finish", interruptedException);
+ // restore the interrupt status
+ Thread.currentThread().interrupt();
+ }
+
+ LOGGER.debug("threads finished, end value is {}", contextAlbum.get(Constants.TEST_VALUE));
+
+ distributor.clear();
+
+ LOGGER.info("Shutting down now ... ");
+ executorService.shutdownNow();
+ }
+
+
+
+ /**
+ * The main method.
+ *
+ * @param args the args
+ * @throws Exception Any exception thrown by the test code
+ */
+ @SuppressWarnings("unchecked")
+ public static void main(final String[] args) throws Exception {
+ configure();
+
+ LOGGER.info("JVM Arguments: " + Arrays.toString(args));
+ // CHECKSTYLE:OFF: checkstyle:magicNumber
+
+ // An even number of arguments greater than 3
+ if (args.length < 9) {
+ LOGGER.error("invalid arguments: " + Arrays.toString(args));
+ LOGGER.error("usage: TestConcurrentContextJVM testType jvmNo threadCount threadLoops albumSize "
+ + "lockType [parameterKey parameterJson].... ");
+ return;
+ }
+
+
+ final String testName = getStringValue("testType", args, 0);
+ final int jvmNo = getIntValue("jvmNo", args, 1);
+ final int threadCount = getIntValue("threadCount", args, 2);
+ final int threadLoops = getIntValue("threadLoops", args, 3);
+ final int albumSize = getIntValue("albumSize", args, 4);
+ final int lockType = getIntValue("lockType", args, 5);
+ final String hazelCastfileLocation = getStringValue("hazelcast file location", args, 6);
+
+ System.setProperty("hazelcast.config", hazelCastfileLocation);
+
+ for (int p = 7; p < args.length - 1; p += 2) {
+ @SuppressWarnings("rawtypes")
+ final Class parametersClass = Class.forName(args[p]);
+ final ParameterGroup parameters = (ParameterGroup) new Gson().fromJson(args[p + 1], parametersClass);
+ ParameterService.register(parameters);
+ }
+
+ for (final Entry<String, ParameterGroup> parameterEntry : ParameterService.getAll()) {
+ LOGGER.info("Parameter class " + parameterEntry.getKey() + "=" + parameterEntry.getValue().toString());
+ }
+
+ try {
+ final ConfigrationProvider configrationProvider =
+ new ConfigrationProviderImpl(testName, 1, threadCount, threadLoops, albumSize, lockType);
+ final ConcurrentContextJvm concurrentContextJvm = new ConcurrentContextJvm(jvmNo, configrationProvider);
+ concurrentContextJvm.execute();
+
+ } catch (final Exception e) {
+ LOGGER.error("error running test in JVM", e);
+ }
+ // CHECKSTYLE:ON: checkstyle:magicNumber
+ }
+
+ private static String getStringValue(final String key, final String[] args, final int position) {
+ try {
+ return args[position];
+ } catch (final Exception e) {
+ final String msg = "invalid argument " + key;
+ LOGGER.error(msg, e);
+ throw new ApexRuntimeException(msg, e);
+ }
+ }
+
+ private static int getIntValue(final String key, final String[] args, final int position) {
+ final String value = getStringValue(key, args, position);
+ try {
+ return Integer.parseInt(value);
+ } catch (final Exception e) {
+ final String msg = "Expects number found " + value;
+ LOGGER.error(msg, e);
+ throw new ApexRuntimeException(msg, e);
+ }
+ }
+
+
+ /**
+ * This method sets up any static configuration required by the JVM.
+ *
+ * @throws ApexException on configuration errors
+ */
+ public static void configure() throws ApexException {
+ System.setProperty("java.net.preferIPv4Stack", "true");
+ // 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 te address to be the
+ // first non-loopback
+ // IPv4 address
+ // on a host
+ final TreeSet<String> ipAddressSet = new TreeSet<>();
+
+ Enumeration<NetworkInterface> nets;
+ try {
+ nets = NetworkInterface.getNetworkInterfaces();
+ } catch (final SocketException e) {
+ throw new ApexException("cound not get network interfaces for test", e);
+ }
+
+ 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 == IPV4_ADDRESS_LENGTH) {
+ ipAddressSet.add(inetAddress.getHostAddress());
+ }
+ }
+ }
+
+ if (ipAddressSet.isEmpty()) {
+ throw new ApexException("cound not find real IP address for test");
+ }
+ LOGGER.info("Setting jgroups.tcp.address to: " + ipAddressSet.first());
+ System.setProperty("jgroups.tcp.address", ipAddressSet.first());
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContextJvmThread.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContextJvmThread.java
new file mode 100644
index 000000000..3e8105c86
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContextJvmThread.java
@@ -0,0 +1,136 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.locking;
+
+import com.google.gson.Gson;
+
+import java.io.BufferedReader;
+import java.io.Closeable;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map.Entry;
+
+import org.onap.policy.apex.testsuites.integration.context.utils.ConfigrationProvider;
+import org.onap.policy.common.parameters.ParameterGroup;
+import org.onap.policy.common.parameters.ParameterService;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+
+
+/**
+ * The Class TestConcurrentContextThread tests concurrent use of context.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class ConcurrentContextJvmThread implements Runnable, Closeable {
+ // Logger for this class
+ private static final XLogger LOGGER = XLoggerFactory.getXLogger(ConcurrentContextJvmThread.class);
+
+ private final int jvm;
+ private final ConfigrationProvider configrationProvider;
+ private Process process = null;
+
+ public ConcurrentContextJvmThread(final int jvm, final ConfigrationProvider configrationProvider) {
+ this.jvm = jvm;
+ this.configrationProvider = configrationProvider;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ final List<String> commandList = new ArrayList<>();
+ commandList.add(System.getProperty("java.home") + System.getProperty("file.separator") + "bin"
+ + System.getProperty("file.separator") + "java");
+ commandList.add("-Xms512m");
+ commandList.add("-Xmx512m");
+ commandList.add("-cp");
+ commandList.add(System.getProperty("java.class.path"));
+ commandList.add(ConcurrentContextJvm.class.getCanonicalName());
+ commandList.add(configrationProvider.getTestName());
+ commandList.add(Integer.toString(jvm));
+ commandList.add(Integer.toString(configrationProvider.getThreadCount()));
+ commandList.add(Integer.toString(configrationProvider.getLoopSize()));
+ commandList.add(Integer.toString(configrationProvider.getAlbumSize()));
+ commandList.add(Integer.toString(configrationProvider.getLockType().getValue()));
+ commandList.add(System.getProperty("hazelcast.config", ""));
+
+ for (final Entry<String, ParameterGroup> parameterServiceEntry : ParameterService.getAll()) {
+ commandList.add(parameterServiceEntry.getValue().getClass().getCanonicalName());
+ commandList.add(new Gson().toJson(parameterServiceEntry.getValue()));
+ }
+
+ LOGGER.info("starting JVM " + jvm);
+
+ // Run the JVM
+ final ProcessBuilder processBuilder = new ProcessBuilder(commandList);
+ processBuilder.redirectErrorStream(true);
+
+ try {
+ process = processBuilder.start();
+
+ final InputStream is = process.getInputStream();
+ final InputStreamReader isr = new InputStreamReader(is);
+ final BufferedReader br = new BufferedReader(isr);
+ String line;
+ LOGGER.info("JVM Output for command " + commandList + "\n");
+ while ((line = br.readLine()) != null) {
+ LOGGER.info(line);
+ }
+
+ waitForExitValue();
+
+ } catch (final Exception ioException) {
+ LOGGER.error("Error occured while writing JVM Output for command ", ioException);
+ }
+ }
+
+ /**
+ * Wait for an exit value from the the JVM.
+ */
+ private void waitForExitValue() {
+ // Wait to get exit value
+ try {
+ final int exitValue = process.waitFor();
+ LOGGER.info("\n\nJVM " + jvm + " finished, exit value is " + exitValue);
+ } catch (final InterruptedException e) {
+ LOGGER.warn("Thread was interrupted");
+ Thread.currentThread().interrupt();
+ }
+ }
+
+
+ @Override
+ public void close() {
+ LOGGER.info("Shutting down {} thread ...", Thread.currentThread().getName());
+ if (process != null) {
+ LOGGER.info("Destroying process ...");
+ process.destroy();
+ }
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContextThread.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContextThread.java
new file mode 100644
index 000000000..baad04e19
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/ConcurrentContextThread.java
@@ -0,0 +1,95 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.locking;
+
+import java.io.Closeable;
+
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.context.Distributor;
+import org.onap.policy.apex.context.parameters.ContextParameters;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.testsuites.integration.context.lock.modifier.AlbumModifier;
+import org.onap.policy.apex.testsuites.integration.context.utils.ConfigrationProvider;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The Class TestConcurrentContextThread tests concurrent use of context.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class ConcurrentContextThread implements Runnable, Closeable {
+ // Logger for this class
+ private static final XLogger LOGGER = XLoggerFactory.getXLogger(ConcurrentContextThread.class);
+ private final int jvm;
+ private final int instance;
+ private final ConfigrationProvider configrationProvider;
+
+ /**
+ * The Constructor.
+ *
+ * @param jvm the jvm
+ * @param instance the instance
+ * @param configrationProvider the configuration provider
+ */
+ public ConcurrentContextThread(final int jvm, final int instance, final ConfigrationProvider configrationProvider) {
+ this.jvm = jvm;
+ this.instance = instance;
+ this.configrationProvider = configrationProvider;
+
+ new ContextParameters();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ LOGGER.info("running TestConcurrentContextThread_" + jvm + "_" + instance + " . . .");
+
+
+ final AxArtifactKey distributorKey = new AxArtifactKey("ApexDistributor_" + jvm + "_" + instance, "0.0.1");
+ final Distributor distributor = configrationProvider.getDistributor(distributorKey);
+
+ try {
+ final long startTime = System.currentTimeMillis();
+ final ContextAlbum contextAlbum = configrationProvider.getContextAlbum(distributor);
+
+ final AlbumModifier albumModifier = configrationProvider.getAlbumModifier();
+ albumModifier.modifyAlbum(contextAlbum, configrationProvider.getLoopSize(),
+ configrationProvider.getAlbumSize());
+ LOGGER.info("Took {} ms to modify album", (System.currentTimeMillis() - startTime));
+
+ } catch (final Exception e) {
+ LOGGER.error("Unexpected error occured while processing", e);
+ }
+
+ LOGGER.info("finished TestConcurrentContextThread_" + jvm + "_" + instance + " . . .");
+ }
+
+ @Override
+ public void close() {
+ LOGGER.info("Shutting down {} thread ...", Thread.currentThread().getName());
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/package-info.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/package-info.java
new file mode 100644
index 000000000..ce32762d1
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/locking/package-info.java
@@ -0,0 +1,28 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+/**
+ * Contains tests to check APEX context album distributed locking.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+
+package org.onap.policy.apex.testsuites.integration.context.locking;
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/ConfigrationProvider.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/ConfigrationProvider.java
new file mode 100644
index 000000000..98dfd6966
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/ConfigrationProvider.java
@@ -0,0 +1,146 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.utils;
+
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.context.ContextException;
+import org.onap.policy.apex.context.Distributor;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.testsuites.integration.context.lock.modifier.AlbumModifier;
+import org.onap.policy.apex.testsuites.integration.context.lock.modifier.LockType;
+
+/**
+ * The Interface ConfigrationProvider provides the configuration for a context test to a context test executor.
+ */
+public interface ConfigrationProvider {
+
+ /**
+ * Gets the test name.
+ *
+ * @return the test name
+ */
+ String getTestName();
+
+ /**
+ * Gets the loop size.
+ *
+ * @return the loop size
+ */
+ int getLoopSize();
+
+ /**
+ * Gets the thread count.
+ *
+ * @return the thread count
+ */
+ int getThreadCount();
+
+ /**
+ * Gets the jvm count.
+ *
+ * @return the jvm count
+ */
+ int getJvmCount();
+
+ /**
+ * Gets the album size.
+ *
+ * @return the album size
+ */
+ int getAlbumSize();
+
+ /**
+ * Gets the executor service.
+ *
+ * @return the executor service
+ */
+ ExecutorService getExecutorService();
+
+ /**
+ * Gets the executor service.
+ *
+ * @param threadFactoryName the thread factory name
+ * @param threadPoolSize the thread pool size
+ * @return the executor service
+ */
+ ExecutorService getExecutorService(final String threadFactoryName, final int threadPoolSize);
+
+ /**
+ * Gets the distributor.
+ *
+ * @param key the key
+ * @return the distributor
+ */
+ Distributor getDistributor(final AxArtifactKey key);
+
+ /**
+ * Gets the distributor.
+ *
+ * @return the distributor
+ */
+ Distributor getDistributor();
+
+ /**
+ * Gets the context album.
+ *
+ * @param distributor the distributor
+ * @return the context album
+ */
+ ContextAlbum getContextAlbum(final Distributor distributor);
+
+ /**
+ * Gets the context album.
+ *
+ * @param distributor the distributor
+ * @param axContextAlbumKey the ax context album key
+ * @param artifactKeys the artifact keys
+ * @return the context album
+ * @throws ContextException the context exception
+ */
+ ContextAlbum getContextAlbum(final Distributor distributor, AxArtifactKey axContextAlbumKey,
+ AxArtifactKey[] artifactKeys) throws ContextException;
+
+ /**
+ * Gets the context album init values.
+ *
+ * @return the context album init values
+ */
+ Map<String, Object> getContextAlbumInitValues();
+
+ /**
+ * Gets the album modifier.
+ *
+ * @return the album modifier
+ */
+ AlbumModifier getAlbumModifier();
+
+ /**
+ * Gets the lock type.
+ *
+ * @return the lock type
+ */
+ LockType getLockType();
+
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/ConfigrationProviderImpl.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/ConfigrationProviderImpl.java
new file mode 100644
index 000000000..24586231f
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/ConfigrationProviderImpl.java
@@ -0,0 +1,265 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.utils;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.context.ContextException;
+import org.onap.policy.apex.context.ContextRuntimeException;
+import org.onap.policy.apex.context.Distributor;
+import org.onap.policy.apex.context.impl.distribution.DistributorFactory;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextModel;
+import org.onap.policy.apex.model.utilities.Assertions;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestContextLongItem;
+import org.onap.policy.apex.testsuites.integration.context.factory.TestContextAlbumFactory;
+import org.onap.policy.apex.testsuites.integration.context.lock.modifier.AlbumModifier;
+import org.onap.policy.apex.testsuites.integration.context.lock.modifier.LockType;
+
+/**
+ * The Class ConfigrationProviderImpl provides configuration information for a context test back to the caller.
+ */
+public class ConfigrationProviderImpl implements ConfigrationProvider {
+
+ private final String testType;
+ private final int jvmCount;
+ private final int threadCount;
+ private final int loopSize;
+ private final int albumSize;
+ private final LockType lockType;
+
+ /**
+ * The parameterized ConfigrationProviderImpl constructor.
+ *
+ * @param testType the test type
+ * @param jvmCount the JVM count
+ * @param threadCount the thread count
+ * @param loopSize the size of loop
+ * @param albumSize the size of album
+ * @param lockType the lock type
+ */
+ public ConfigrationProviderImpl(final String testType, final int jvmCount, final int threadCount,
+ final int loopSize, final int albumSize, final int lockType) {
+ this.testType = testType;
+ this.jvmCount = jvmCount;
+ this.threadCount = threadCount;
+ this.loopSize = loopSize;
+ this.albumSize = albumSize;
+ this.lockType = LockType.getLockType(lockType);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getTestName()
+ */
+ @Override
+ public String getTestName() {
+ return testType;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getLoopSize()
+ */
+ @Override
+ public int getLoopSize() {
+ return loopSize;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getThreadCount()
+ */
+ @Override
+ public int getThreadCount() {
+ return threadCount;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getJvmCount()
+ */
+ @Override
+ public int getJvmCount() {
+ return jvmCount;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getAlbumSize()
+ */
+ @Override
+ public int getAlbumSize() {
+ return albumSize;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getExecutorService()
+ */
+ @Override
+ public ExecutorService getExecutorService() {
+ final String name = getThreadFactoryName(jvmCount, testType);
+ final IntegrationThreadFactory threadFactory = new IntegrationThreadFactory(name);
+ return Executors.newFixedThreadPool(threadCount, threadFactory);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getExecutorService(java.lang.String, int)
+ */
+ @Override
+ public ExecutorService getExecutorService(final String threadFactoryName, final int threadPoolSize) {
+ final IntegrationThreadFactory threadFactory = new IntegrationThreadFactory(threadFactoryName);
+ return Executors.newFixedThreadPool(threadPoolSize, threadFactory);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.context.test.utils.ConfigrationProvider#getDistributor(org.onap.policy.apex.model.basicmodel
+ * .concepts.AxArtifactKey)
+ */
+ @Override
+ public Distributor getDistributor(final AxArtifactKey key) {
+ try {
+ return new DistributorFactory().getDistributor(key);
+ } catch (ContextException e) {
+ throw new ContextRuntimeException("Unable to create Distributor", e);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getDistributor()
+ */
+ @Override
+ public Distributor getDistributor() {
+ final AxArtifactKey distributorKey = new AxArtifactKey("ApexDistributor", "0.0.1");
+ return getDistributor(distributorKey);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getContextAlbum(org.onap.policy.apex.context.
+ * Distributor)
+ */
+ @Override
+ public ContextAlbum getContextAlbum(final Distributor distributor) {
+ return getContextAlbum(distributor, Constants.L_TYPE_CONTEXT_ALBUM, Constants.getAxArtifactKeyArray());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getContextAlbum(org.onap.policy.apex.context.
+ * Distributor, org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey,
+ * org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey[])
+ */
+ @Override
+ public ContextAlbum getContextAlbum(final Distributor distributor, final AxArtifactKey axContextAlbumKey,
+ final AxArtifactKey[] artifactKeys) {
+ final AxContextModel axContextModel = TestContextAlbumFactory.createMultiAlbumsContextModel();
+ try {
+ distributor.registerModel(axContextModel);
+ final ContextAlbum contextAlbum = distributor.createContextAlbum(axContextAlbumKey);
+ Assertions.argumentNotNull(contextAlbum, "ContextAlbum should not be null");
+ contextAlbum.setUserArtifactStack(artifactKeys);
+ return contextAlbum;
+ } catch (ContextException e) {
+ throw new ContextRuntimeException("Unable to create ContextAlbum", e);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getContextAlbumInitValues()
+ */
+ @Override
+ public Map<String, Object> getContextAlbumInitValues() {
+ final Map<String, Object> values = new HashMap<>();
+ for (int i = 0; i < albumSize; i++) {
+ values.put(Integer.toString(i), new TestContextLongItem(0L));
+ }
+ return values;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getAlbumModifier()
+ */
+ @Override
+ public AlbumModifier getAlbumModifier() {
+ return lockType.getAlbumModifier();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getLockType()
+ */
+ @Override
+ public LockType getLockType() {
+ return lockType;
+ }
+
+ /**
+ * Gets the thread factory name.
+ *
+ * @param jvmCount the jvm count
+ * @param testType the test type
+ * @return the thread factory name
+ */
+ private String getThreadFactoryName(final int jvmCount, final String testType) {
+ return jvmCount == 1 ? testType + ":TestConcurrentContextThread_0_"
+ : testType + ":TestConcurrentContextJVMThread_";
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "ConfigrationProviderImpl [testType=" + testType + ", jvmCount=" + jvmCount + ", threadCount="
+ + threadCount + ", loopSize=" + loopSize + ", albumSize=" + albumSize + ", lockType=" + lockType
+ + "]";
+ }
+
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/Constants.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/Constants.java
new file mode 100644
index 000000000..ea80d4e7d
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/Constants.java
@@ -0,0 +1,81 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.utils;
+
+import java.util.TimeZone;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.testsuites.integration.context.concepts.TestPolicyContextItem;
+
+/**
+ * The Class Constants provides constants for context tests.
+ */
+public class Constants {
+ public static final String MAP_CONTEXT_ALBUM = "MapContextAlbum";
+ public static final String LONG_CONTEXT_ALBUM = "LongContextAlbum";
+ public static final String DATE_CONTEXT_ALBUM = "DateContextAlbum";
+
+ public static final String EXTERNAL_CONTEXT_ALBUM = "ExternalContextAlbum";
+ public static final String GLOBAL_CONTEXT_ALBUM = "GlobalContextAlbum";
+ public static final String POLICY_CONTEXT_ALBUM = "PolicyContextAlbum";
+
+ public static final String APEX_DISTRIBUTOR = "ApexDistributor";
+ public static final String VERSION = "0.0.1";
+ public static final int INT_VAL = 0xFFFFFFFF;
+ public static final int INT_VAL_2 = 2000;
+ public static final int INT_VAL_3 = -1;
+ public static final String EXCEPTION_MESSAGE = "Test should throw an exception";
+ public static final byte BYTE_VAL = (byte) 0xFF;
+ public static final double PI_VAL = Math.PI;
+ public static final float FLOAT_VAL = 3.14159265359F;
+ public static final String EXTERNAL_CONTEXT = "externalContext";
+ public static final String GLOBAL_CONTEXT_KEY = "globalContext";
+ public static final String STRING_GLOBAL_VAL = "This is a global context string";
+ public static final String STRING_VAL = "This is a policy context string";
+ public static final String STRING_EXT_VAL = "This is an external context string";
+ public static final long LONG_VAL = 0xFFFFFFFFFFFFFFFFL;
+ public static final String TEST_POLICY_CONTEXT_ITEM = TestPolicyContextItem.class.getName();
+ public static final TimeZone TIME_ZONE = TimeZone.getTimeZone("Europe/Dublin");
+
+ public static final AxArtifactKey L_TYPE_CONTEXT_ALBUM = new AxArtifactKey("LTypeContextAlbum", VERSION);
+ public static final String TEST_VALUE = "testValue";
+
+ private static final AxArtifactKey KEY = new AxArtifactKey("testC-top", VERSION);
+ private static final AxArtifactKey KEY3 = new AxArtifactKey("testC-bot", VERSION);
+ private static final AxArtifactKey KEY2 = new AxArtifactKey("testC-next", VERSION);
+
+ private static final AxArtifactKey[] USED_ARTIFACT_STACK_ARRAY = new AxArtifactKey[] {KEY, KEY2, KEY3};
+
+ /**
+ * Instantiates a new constants.
+ */
+ private Constants() {}
+
+ /**
+ * Gets the ax artifact key array.
+ *
+ * @return the ax artifact key array
+ */
+ public static final AxArtifactKey[] getAxArtifactKeyArray() {
+ return USED_ARTIFACT_STACK_ARRAY;
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/IntegrationThreadFactory.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/IntegrationThreadFactory.java
new file mode 100644
index 000000000..271bb9519
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/IntegrationThreadFactory.java
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.utils;
+
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * A factory for creating IntegrationThread objects.
+ */
+public class IntegrationThreadFactory implements ThreadFactory {
+ private static final XLogger LOGGER = XLoggerFactory.getXLogger(IntegrationThreadFactory.class);
+
+
+ private final String threadFactoryName;
+
+ private final AtomicInteger counter = new AtomicInteger();
+
+ /**
+ * Instantiates a new integration thread factory.
+ *
+ * @param threadFactoryName the thread factory name
+ */
+ public IntegrationThreadFactory(final String threadFactoryName) {
+ this.threadFactoryName = threadFactoryName;
+ }
+
+ /* (non-Javadoc)
+ * @see java.util.concurrent.ThreadFactory#newThread(java.lang.Runnable)
+ */
+ @Override
+ public Thread newThread(final Runnable runnable) {
+ final Thread thread = new Thread(runnable);
+ thread.setName(threadFactoryName + "_" + counter.getAndIncrement());
+ LOGGER.debug("started thread " + thread.getName());
+ return thread;
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/NetworkUtils.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/NetworkUtils.java
new file mode 100644
index 000000000..ac43b7120
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/NetworkUtils.java
@@ -0,0 +1,67 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.utils;
+
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+/**
+ * The Class NetworkUtils contains some utility functions for getting network information for context tests.
+ */
+public class NetworkUtils {
+
+ /**
+ * Instantiates a new network utils.
+ */
+ private NetworkUtils() {}
+
+ /**
+ * 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
+ *
+ * @return Set of IPv4 addresses
+ * @throws SocketException throw socket exception if error occurs
+ */
+ public static SortedSet<String> getIPv4NonLoopAddresses() throws SocketException {
+ final TreeSet<String> ipAddressSet = new TreeSet<>();
+
+ 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());
+ }
+ }
+ }
+ return ipAddressSet;
+ }
+
+
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/ZooKeeperServerServiceProvider.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/ZooKeeperServerServiceProvider.java
new file mode 100644
index 000000000..0e90f673e
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/ZooKeeperServerServiceProvider.java
@@ -0,0 +1,106 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.testsuites.integration.context.utils;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.InetSocketAddress;
+
+import org.apache.zookeeper.server.NIOServerCnxnFactory;
+import org.apache.zookeeper.server.ZooKeeperServer;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * The Class ZooKeeperServerServiceProvider provides a zookeeper service to a caller.
+ */
+public class ZooKeeperServerServiceProvider {
+ private static final XLogger LOGGER = XLoggerFactory.getXLogger(ZooKeeperServerServiceProvider.class);
+
+ private NIOServerCnxnFactory zookeeperFactory;
+ private File zookeeperDirectory;
+ private InetSocketAddress addr;
+
+ /**
+ * Instantiates a new zoo keeper server service provider.
+ *
+ * @param zookeeperDirectory the zookeeper directory
+ * @param addr the addr
+ */
+ public ZooKeeperServerServiceProvider(final File zookeeperDirectory, final InetSocketAddress addr) {
+ this.zookeeperDirectory = zookeeperDirectory;
+ this.addr = addr;
+ }
+
+ /**
+ * Instantiates a new zoo keeper server service provider.
+ *
+ * @param zookeeperDirectory the zookeeper directory
+ * @param addr the addr
+ * @param port the port
+ */
+ public ZooKeeperServerServiceProvider(final File zookeeperDirectory, final String addr, final int port) {
+ this.zookeeperDirectory = zookeeperDirectory;
+ this.addr = new InetSocketAddress(addr, port);
+ }
+
+ /**
+ * Start the Zookeeper server.
+ *
+ * @throws ApexException on configuration errors
+ */
+ public void startZookeeperServer() throws ApexException {
+ LOGGER.info("Starting up ZooKeeperServer using address: {} and port: {}", addr.getAddress(), addr.getPort());
+
+ ZooKeeperServer server;
+ try {
+ server = new ZooKeeperServer(zookeeperDirectory, zookeeperDirectory, 5000);
+ zookeeperFactory = new NIOServerCnxnFactory();
+ zookeeperFactory.configure(addr, 100);
+ } catch (final IOException ioe) {
+ final String message = "exception on starting Zookeeper server";
+ LOGGER.warn(message, ioe);
+ throw new ApexException(message, ioe);
+ }
+
+ try {
+ zookeeperFactory.startup(server);
+ } catch (InterruptedException | IOException ie) {
+ final String message = "Zookeeper server start failed";
+ LOGGER.warn(message, ie);
+ Thread.currentThread().interrupt();
+ throw new ApexException(message, ie);
+ }
+
+ }
+
+ /**
+ * Stop the Zookeeper server.
+ */
+ public void stopZookeeperServer() {
+ LOGGER.info("Stopping ZooKeeperServer for address: {} and port: {}", addr.getAddress(), addr.getPort());
+ if (zookeeperFactory != null) {
+ zookeeperFactory.shutdown();
+ }
+ }
+}
diff --git a/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/package-info.java b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/package-info.java
new file mode 100755
index 000000000..d195331a6
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/java/org/onap/policy/apex/testsuites/integration/context/utils/package-info.java
@@ -0,0 +1,28 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+/**
+ * Contains utilities for context tests.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+
+package org.onap.policy.apex.testsuites.integration.context.utils;
diff --git a/testsuites/integration/integration-context-test/src/test/resources/META-INF/persistence.xml b/testsuites/integration/integration-context-test/src/test/resources/META-INF/persistence.xml
new file mode 100644
index 000000000..b6a9a9d1e
--- /dev/null
+++ b/testsuites/integration/integration-context-test/src/test/resources/META-INF/persistence.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ============LICENSE_START=======================================================
+ Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ Modifications Copyright (C) 2019 Nordix Foundation.
+ ================================================================================
+ 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=========================================================
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
+ <persistence-unit name="DAOTest" transaction-type="RESOURCE_LOCAL">
+ <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+
+ <class>org.onap.policy.apex.model.basicmodel.dao.converters.CDataConditioner</class>
+ <class>org.onap.policy.apex.model.basicmodel.dao.converters.Uuid2String</class>
+ <class>org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey</class>
+ <class>org.onap.policy.apex.model.basicmodel.concepts.AxConcept</class>
+ <class>org.onap.policy.apex.model.basicmodel.concepts.AxKeyInfo</class>
+ <class>org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation</class>
+ <class>org.onap.policy.apex.model.basicmodel.concepts.AxModel</class>
+ <class>org.onap.policy.apex.model.basicmodel.concepts.TestEntity</class>
+ <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema</class>
+ <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas</class>
+ <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum</class>
+ <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbums</class>
+ <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextModel</class>
+
+ <properties>
+ <property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:apex_test" />
+ <property name="javax.persistence.target-database" value="Derby" />
+ <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
+
+ <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
+ <property name="eclipselink.ddl-generation.output-mode" value="database" />
+ <property name="eclipselink.logging.level" value="INFO" />
+ </properties>
+ </persistence-unit>
+</persistence>