diff options
Diffstat (limited to 'testsuites/integration')
50 files changed, 7049 insertions, 37 deletions
diff --git a/testsuites/integration/integration-context-test/pom.xml b/testsuites/integration/integration-context-test/pom.xml index 239bc684d..f8a96fd12 100644 --- a/testsuites/integration/integration-context-test/pom.xml +++ b/testsuites/integration/integration-context-test/pom.xml @@ -1,6 +1,7 @@ <!-- ============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. @@ -69,12 +70,6 @@ <artifactId>plugins-context-locking-hazelcast</artifactId> <version>${project.version}</version> </dependency> - <dependency> - <groupId>org.onap.policy.apex-pdp.context</groupId> - <artifactId>context-test-utils</artifactId> - <version>${project.version}</version> - <scope>test</scope> - </dependency> </dependencies> <profiles> 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> diff --git a/testsuites/integration/pom.xml b/testsuites/integration/pom.xml index 4242e8231..c5b89a71c 100644 --- a/testsuites/integration/pom.xml +++ b/testsuites/integration/pom.xml @@ -1,6 +1,7 @@ <!-- ============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. @@ -38,17 +39,6 @@ <profiles> <profile> - <id>apexMetrics</id> - <activation> - <property> - <name>apexMetrics</name> - </property> - </activation> - <modules> - <module>integration-context-test</module> - </modules> - </profile> - <profile> <id>apexAll</id> <activation> <property> @@ -75,4 +65,4 @@ </distributionManagement> </profile> </profiles> -</project>
\ No newline at end of file +</project> |