aboutsummaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorrameshiyer27 <ramesh.murugan.iyer@est.tech>2024-10-14 16:09:34 +0100
committerrameshiyer27 <ramesh.murugan.iyer@est.tech>2024-10-22 21:08:59 +0100
commit6b164a94d894c969811c9388b6af8c9a1fca2be2 (patch)
treeb62eb7be108d5eb7faa9986c500c30fa7d653594 /plugins
parent85f95e93a19c778e72b6022a713f0eea55002585 (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')
-rw-r--r--plugins/plugins-context/plugins-context-distribution/plugins-context-distribution-hazelcast/src/test/java/org/onap/policy/apex/plugins/context/distribution/hazelcast/HazelCastDistributorTest.java72
-rw-r--r--plugins/plugins-context/plugins-context-distribution/plugins-context-distribution-infinispan/src/main/java/org/onap/policy/apex/plugins/context/distribution/infinispan/InfinispanManager.java3
-rw-r--r--plugins/plugins-context/plugins-context-distribution/plugins-context-distribution-infinispan/src/test/java/org/onap/policy/apex/plugins/context/distribution/infinispan/InfinispanDistributorTest.java77
-rw-r--r--plugins/plugins-context/plugins-context-locking/plugins-context-locking-curator/src/test/java/org/onap/policy/apex/plugins/context/locking/curator/CuratorLockFacadeTest.java66
-rw-r--r--plugins/plugins-context/plugins-context-locking/plugins-context-locking-curator/src/test/java/org/onap/policy/apex/plugins/context/locking/curator/CuratorLockManagerTest.java109
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/AvroNullableMapperTest.java58
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/AvroObjMapperFactoryTest.java60
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));
+
+ }
+
+}