diff options
author | rameshiyer27 <ramesh.murugan.iyer@est.tech> | 2024-10-14 16:09:34 +0100 |
---|---|---|
committer | rameshiyer27 <ramesh.murugan.iyer@est.tech> | 2024-10-22 21:08:59 +0100 |
commit | 6b164a94d894c969811c9388b6af8c9a1fca2be2 (patch) | |
tree | b62eb7be108d5eb7faa9986c500c30fa7d653594 /plugins | |
parent | 85f95e93a19c778e72b6022a713f0eea55002585 (diff) |
Improve coverage on apex-pdp
Issue-ID: POLICY-5059
Signed-off-by: rameshiyer27 <ramesh.murugan.iyer@est.tech>
Change-Id: I3d8d71f4ee9db10fe43bfe51586156cf768a8560
Diffstat (limited to 'plugins')
7 files changed, 444 insertions, 1 deletions
diff --git a/plugins/plugins-context/plugins-context-distribution/plugins-context-distribution-hazelcast/src/test/java/org/onap/policy/apex/plugins/context/distribution/hazelcast/HazelCastDistributorTest.java b/plugins/plugins-context/plugins-context-distribution/plugins-context-distribution-hazelcast/src/test/java/org/onap/policy/apex/plugins/context/distribution/hazelcast/HazelCastDistributorTest.java new file mode 100644 index 000000000..6db3084d8 --- /dev/null +++ b/plugins/plugins-context/plugins-context-distribution/plugins-context-distribution-hazelcast/src/test/java/org/onap/policy/apex/plugins/context/distribution/hazelcast/HazelCastDistributorTest.java @@ -0,0 +1,72 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2024 Nordix Foundation. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.plugins.context.distribution.hazelcast; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.onap.policy.apex.context.ContextException; +import org.onap.policy.apex.context.parameters.ContextParameterConstants; +import org.onap.policy.apex.context.parameters.ContextParameters; +import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; +import org.onap.policy.common.parameters.ParameterService; + + +class HazelCastDistributorTest { + + @BeforeAll + public static void prepareForTest() { + final ContextParameters contextParameters = new ContextParameters(); + contextParameters.getLockManagerParameters() + .setPluginClass("org.onap.policy.apex.context.impl.locking.jvmlocal.JvmLocalLockManager"); + + contextParameters.setName(ContextParameterConstants.MAIN_GROUP_NAME); + contextParameters.getLockManagerParameters().setName(ContextParameterConstants.LOCKING_GROUP_NAME); + contextParameters.getPersistorParameters().setName(ContextParameterConstants.PERSISTENCE_GROUP_NAME); + + ParameterService.register(contextParameters); + ParameterService.register(contextParameters.getLockManagerParameters()); + ParameterService.register(contextParameters.getPersistorParameters()); + } + + /** + * Clear down the test data. + */ + @AfterAll + public static void cleanUpAfterTest() { + ParameterService.deregister(ContextParameterConstants.LOCKING_GROUP_NAME); + ParameterService.deregister(ContextParameterConstants.PERSISTENCE_GROUP_NAME); + ParameterService.deregister(ContextParameterConstants.MAIN_GROUP_NAME); + ParameterService.clear(); + } + + @Test + void testHazelcastDistributor() throws ContextException { + var distributor = new HazelcastContextDistributor(); + var key = new AxArtifactKey("dummyKey", "1.0.1"); + assertDoesNotThrow(() -> distributor.init(new AxArtifactKey("dummyKey", "1.0.1"))); + assertDoesNotThrow(() -> distributor.getContextAlbumMap(key).values()); + assertDoesNotThrow(distributor::shutdown); + } + +} diff --git a/plugins/plugins-context/plugins-context-distribution/plugins-context-distribution-infinispan/src/main/java/org/onap/policy/apex/plugins/context/distribution/infinispan/InfinispanManager.java b/plugins/plugins-context/plugins-context-distribution/plugins-context-distribution-infinispan/src/main/java/org/onap/policy/apex/plugins/context/distribution/infinispan/InfinispanManager.java index a9346bcc3..05d7cefb6 100644 --- a/plugins/plugins-context/plugins-context-distribution/plugins-context-distribution-infinispan/src/main/java/org/onap/policy/apex/plugins/context/distribution/infinispan/InfinispanManager.java +++ b/plugins/plugins-context/plugins-context-distribution/plugins-context-distribution-infinispan/src/main/java/org/onap/policy/apex/plugins/context/distribution/infinispan/InfinispanManager.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2024 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -59,7 +60,7 @@ public class InfinispanManager { } catch (final IOException ioException) { final String errorMessage = "failed to start infinispan cache manager, " + "no infinispan configuration found on local file system or in classpath, " - + "try setting Infinspan \"configFile\" parameter"; + + "try setting Infinispan \"configFile\" parameter"; LOGGER.error(errorMessage); throw new ContextException(errorMessage, ioException); } catch (final Exception e) { diff --git a/plugins/plugins-context/plugins-context-distribution/plugins-context-distribution-infinispan/src/test/java/org/onap/policy/apex/plugins/context/distribution/infinispan/InfinispanDistributorTest.java b/plugins/plugins-context/plugins-context-distribution/plugins-context-distribution-infinispan/src/test/java/org/onap/policy/apex/plugins/context/distribution/infinispan/InfinispanDistributorTest.java new file mode 100644 index 000000000..4a87b5410 --- /dev/null +++ b/plugins/plugins-context/plugins-context-distribution/plugins-context-distribution-infinispan/src/test/java/org/onap/policy/apex/plugins/context/distribution/infinispan/InfinispanDistributorTest.java @@ -0,0 +1,77 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2024 Nordix Foundation. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.plugins.context.distribution.infinispan; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.onap.policy.apex.context.ContextException; +import org.onap.policy.apex.context.parameters.ContextParameterConstants; +import org.onap.policy.apex.context.parameters.ContextParameters; +import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; +import org.onap.policy.common.parameters.ParameterService; + + +class InfinispanDistributorTest { + + private static InfinispanDistributorParameters distributorParams; + + @BeforeAll + static void prepareForTest() { + final ContextParameters contextParameters = new ContextParameters(); + + contextParameters.setName(ContextParameterConstants.MAIN_GROUP_NAME); + contextParameters.getLockManagerParameters().setName(ContextParameterConstants.LOCKING_GROUP_NAME); + contextParameters.getPersistorParameters().setName(ContextParameterConstants.PERSISTENCE_GROUP_NAME); + + ParameterService.register(contextParameters); + ParameterService.register(contextParameters.getLockManagerParameters()); + ParameterService.register(contextParameters.getPersistorParameters()); + + distributorParams = new InfinispanDistributorParameters(); + ParameterService.register(distributorParams); + } + + /** + * Clear down the test data. + */ + @AfterAll + static void cleanUpAfterTest() { + ParameterService.deregister(ContextParameterConstants.LOCKING_GROUP_NAME); + ParameterService.deregister(ContextParameterConstants.PERSISTENCE_GROUP_NAME); + ParameterService.clear(); + } + + @Test + void testInvalidParameters() throws ContextException { + var infiniSpanDistributor = new InfinispanContextDistributor(); + var key = new AxArtifactKey("test", "1.1.1"); + assertThatThrownBy(() -> infiniSpanDistributor.init(key)).isInstanceOf(NoClassDefFoundError.class) + .hasMessageContaining("TransactionManager"); + assertThatThrownBy(() -> infiniSpanDistributor.getContextAlbumMap(key)) + .hasMessageContaining("infinispanManager\" is null"); + assertDoesNotThrow(infiniSpanDistributor::shutdown); + } + +} diff --git a/plugins/plugins-context/plugins-context-locking/plugins-context-locking-curator/src/test/java/org/onap/policy/apex/plugins/context/locking/curator/CuratorLockFacadeTest.java b/plugins/plugins-context/plugins-context-locking/plugins-context-locking-curator/src/test/java/org/onap/policy/apex/plugins/context/locking/curator/CuratorLockFacadeTest.java new file mode 100644 index 000000000..e4d7d6608 --- /dev/null +++ b/plugins/plugins-context/plugins-context-locking/plugins-context-locking-curator/src/test/java/org/onap/policy/apex/plugins/context/locking/curator/CuratorLockFacadeTest.java @@ -0,0 +1,66 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2024 Nordix Foundation. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.plugins.context.locking.curator; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; + +import java.util.concurrent.TimeUnit; +import org.apache.curator.framework.recipes.locks.InterProcessMutex; +import org.junit.jupiter.api.Test; + +class CuratorLockFacadeTest { + + @Test + void testLock() throws Exception { + var mutex = mock(InterProcessMutex.class); + var curatorLockFacade = new CuratorLockFacade(mutex, "test"); + assertDoesNotThrow(curatorLockFacade::lock); + doThrow(new RuntimeException()).when(mutex).acquire(); + assertDoesNotThrow(curatorLockFacade::lock); + assertDoesNotThrow(curatorLockFacade::lockInterruptibly); + assertFalse(curatorLockFacade.tryLock()); + doNothing().when(mutex).acquire(); + assertTrue(curatorLockFacade.tryLock()); + } + + @Test + void testLockWithTime() throws Exception { + var mutex = mock(InterProcessMutex.class); + var curatorLockFacade = new CuratorLockFacade(mutex, "test"); + assertTrue(curatorLockFacade.tryLock(2L, TimeUnit.MILLISECONDS)); + + doThrow(new RuntimeException()).when(mutex).acquire(2L, TimeUnit.MILLISECONDS); + assertFalse(curatorLockFacade.tryLock(2L, TimeUnit.MILLISECONDS)); + + assertDoesNotThrow(curatorLockFacade::unlock); + doThrow(new RuntimeException()).when(mutex).release(); + assertDoesNotThrow(curatorLockFacade::unlock); + + assertNull(curatorLockFacade.newCondition()); + } + +} diff --git a/plugins/plugins-context/plugins-context-locking/plugins-context-locking-curator/src/test/java/org/onap/policy/apex/plugins/context/locking/curator/CuratorLockManagerTest.java b/plugins/plugins-context/plugins-context-locking/plugins-context-locking-curator/src/test/java/org/onap/policy/apex/plugins/context/locking/curator/CuratorLockManagerTest.java new file mode 100644 index 000000000..7ff1c5e46 --- /dev/null +++ b/plugins/plugins-context/plugins-context-locking/plugins-context-locking-curator/src/test/java/org/onap/policy/apex/plugins/context/locking/curator/CuratorLockManagerTest.java @@ -0,0 +1,109 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2024 Nordix Foundation. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.plugins.context.locking.curator; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; + +import org.apache.curator.framework.CuratorFramework; +import org.junit.jupiter.api.Test; +import org.onap.policy.apex.context.ContextException; +import org.onap.policy.apex.context.parameters.ContextParameterConstants; +import org.onap.policy.apex.context.parameters.LockManagerParameters; +import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; +import org.onap.policy.common.parameters.ParameterService; + + +class CuratorLockManagerTest { + + @Test + void testLockManagerInvalidParameter() throws ContextException { + var manager = new CuratorLockManager(); + var key = new AxArtifactKey("test", "1.0.1"); + + var parameters = new LockManagerParameters(); + parameters.setName(ContextParameterConstants.LOCKING_GROUP_NAME); + ParameterService.register(parameters); + + assertThatThrownBy(() -> manager.init(key)).isInstanceOf(ContextException.class) + .hasMessageContaining("curator lock manager parameters are not set"); + + ParameterService.deregister(ContextParameterConstants.LOCKING_GROUP_NAME); + ParameterService.clear(); + } + + @Test + void testLockManagerValidParams() throws ContextException { + var manager = new CuratorLockManager(); + var key = new AxArtifactKey("test", "1.0.1"); + var params = new CuratorLockManagerParameters(); + params.setName(ContextParameterConstants.LOCKING_GROUP_NAME); + ParameterService.register(params); + + assertThatThrownBy(() -> manager.init(key)).isInstanceOf(ContextException.class) + .hasMessageContaining("could not connect to Zookeeper server"); + + ParameterService.deregister(ContextParameterConstants.LOCKING_GROUP_NAME); + ParameterService.clear(); + } + + @Test + void testNullZookeeperAddr() throws ContextException { + var params = new CuratorLockManagerParameters(); + params.setName(ContextParameterConstants.LOCKING_GROUP_NAME); + params.setZookeeperAddress(""); + ParameterService.register(params); + + var manager = new CuratorLockManager(); + var key = new AxArtifactKey("test", "1.0.1"); + + assertThatThrownBy(() -> manager.init(key)).isInstanceOf(ContextException.class) + .hasMessageContaining("check if the curator Zookeeper address parameter is set correctly"); + + assertThatThrownBy(() -> manager.getReentrantReadWriteLock("test")).isInstanceOf(ContextException.class) + .hasMessageContaining("creation of lock using Zookeeper server at \"\", failed"); + + assertDoesNotThrow(manager::shutdown); + + ParameterService.deregister(ContextParameterConstants.LOCKING_GROUP_NAME); + ParameterService.clear(); + } + + @Test + void testLockManagerParameters() { + var params = new CuratorLockManagerParameters(); + assertDoesNotThrow(params::toString); + assertEquals("localhost:2181", params.getZookeeperAddress()); + assertEquals(1000, params.getZookeeperConnectSleepTime()); + assertEquals(3, params.getZookeeperContextRetries()); + } + + @Test + void testReentrantReadWriteLock() { + var curatorLock = new CuratorReentrantReadWriteLock(mock(CuratorFramework.class), "/test"); + assertEquals("/test", curatorLock.getLockId()); + assertDoesNotThrow(curatorLock::readLock); + assertDoesNotThrow(curatorLock::writeLock); + } + +} diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/AvroNullableMapperTest.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/AvroNullableMapperTest.java new file mode 100644 index 000000000..27a0ca3bf --- /dev/null +++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/AvroNullableMapperTest.java @@ -0,0 +1,58 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2024 Nordix Foundation. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.plugins.context.schema.avro; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.mock; + +import org.apache.avro.Schema; +import org.junit.jupiter.api.Test; +import org.onap.policy.apex.context.ContextRuntimeException; +import org.onap.policy.apex.model.basicmodel.concepts.ApexRuntimeException; +import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; + +class AvroNullableMapperTest { + + @Test + void avroNullableMapperTests() { + var avroObjectMapper = new AvroDirectObjectMapper(); + var avroNullableMapper = new AvroNullableMapper(avroObjectMapper); + assertDoesNotThrow(() -> avroNullableMapper.init(new AxArtifactKey("test", "1.0.1"), + Schema.Type.BOOLEAN)); + + assertEquals("class java.lang.Boolean", avroNullableMapper.getJavaClass().toString()); + assertThat(avroNullableMapper.getAvroType()).isEqualByComparingTo(Schema.Type.UNION); + + var avroObjMapper = new AvroDirectObjectMapper(); + avroObjMapper.init(new AxArtifactKey("test2", "1.1.2"), Schema.Type.BOOLEAN); + assertThrows(ContextRuntimeException.class, () -> avroNullableMapper.mapFromAvro(avroObjMapper)); + assertNull(avroNullableMapper.mapFromAvro(null)); + + assertNull(avroNullableMapper.mapToAvro(null)); + assertThrows(ApexRuntimeException.class, () -> avroNullableMapper.mapToAvro(avroObjMapper)); + + assertDoesNotThrow(() -> avroNullableMapper.createNewInstance(mock(Schema.class))); + } +} diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/AvroObjMapperFactoryTest.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/AvroObjMapperFactoryTest.java new file mode 100644 index 000000000..4ac7a20be --- /dev/null +++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/AvroObjMapperFactoryTest.java @@ -0,0 +1,60 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2024 Nordix Foundation. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.plugins.context.schema.avro; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.List; +import org.apache.avro.Schema; +import org.junit.jupiter.api.Test; +import org.onap.policy.apex.context.ContextRuntimeException; +import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; + +class AvroObjMapperFactoryTest { + @Test + void testObjMapperFactory() { + var objMapperFactory = new AvroObjectMapperFactory(); + var key = new AxArtifactKey("test", "1.0.1"); + var schema1 = Schema.createUnion(List.of(Schema.create(Schema.Type.NULL))); + assertThatThrownBy(() -> objMapperFactory.get(key, schema1)) + .isInstanceOf(ContextRuntimeException.class) + .hasMessageContaining("Apex currently only supports UNION schemas with 2 options, " + + "one must be NULL"); + + var schema2 = mock(Schema.class); + when(schema2.getType()).thenReturn(Schema.Type.UNION); + var nullSchema = Schema.create(Schema.Type.NULL); + when(schema2.getTypes()).thenReturn(List.of(nullSchema, nullSchema)); + assertThatThrownBy(() -> objMapperFactory.get(key, schema2)) + .isInstanceOf(ContextRuntimeException.class) + .hasMessageContaining("Apex currently only supports UNION schema2 with 2 options, " + + "only one can be NULL, and the other cannot be another UNION"); + + var fixedSchema = Schema.createFixed("test1", "doc", "test", 2); + when(schema2.getTypes()).thenReturn(List.of(fixedSchema, nullSchema)); + assertDoesNotThrow(() -> objMapperFactory.get(key, schema2)); + + } + +} |