diff options
7 files changed, 297 insertions, 60 deletions
diff --git a/plugins/plugins-context/plugins-context-locking/plugins-context-locking-hazelcast/src/test/java/org/onap/policy/apex/plugins/context/locking/hazelcast/HazelcastLockManagerTest.java b/plugins/plugins-context/plugins-context-locking/plugins-context-locking-hazelcast/src/test/java/org/onap/policy/apex/plugins/context/locking/hazelcast/HazelcastLockManagerTest.java new file mode 100644 index 000000000..da2c10c34 --- /dev/null +++ b/plugins/plugins-context/plugins-context-locking/plugins-context-locking-hazelcast/src/test/java/org/onap/policy/apex/plugins/context/locking/hazelcast/HazelcastLockManagerTest.java @@ -0,0 +1,97 @@ +/* + * ============LICENSE_START======================================================= + * 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. + * 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.hazelcast; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.hazelcast.core.Hazelcast; +import com.hazelcast.core.HazelcastInstance; +import com.hazelcast.core.LifecycleService; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import org.onap.policy.apex.context.ContextException; +import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; + +class HazelcastLockManagerTest { + + private HazelcastLockManager lockManager; + private HazelcastInstance mockHazelcastInstance; + private LifecycleService mockLifecycleService; + private MockedStatic<Hazelcast> mockedHazelcast; + + @BeforeEach + void setUp() throws ContextException { + mockHazelcastInstance = mock(HazelcastInstance.class); + mockLifecycleService = mock(LifecycleService.class); + + mockedHazelcast = mockStatic(Hazelcast.class); + mockedHazelcast.when(Hazelcast::newHazelcastInstance).thenReturn(mockHazelcastInstance); + + when(mockHazelcastInstance.getLifecycleService()).thenReturn(mockLifecycleService); + when(mockLifecycleService.isRunning()).thenReturn(true); + + lockManager = new HazelcastLockManager(); + } + + @AfterEach + void tearDown() { + mockedHazelcast.close(); + } + + @Test + void testInit() { + AxArtifactKey testKey = new AxArtifactKey("TestKey", "1.0"); + + assertDoesNotThrow(() -> lockManager.init(testKey)); + + mockedHazelcast.verify(Hazelcast::newHazelcastInstance); + } + + @Test + void testGetReentrantReadWriteLockWhenHazelcastNotRunning() { + when(mockLifecycleService.isRunning()).thenReturn(false); + + String lockId = "testLock"; + assertThrows(ContextException.class, () -> lockManager.getReentrantReadWriteLock(lockId)); + } + + @Test + void testShutdown() throws ContextException { + lockManager.init(new AxArtifactKey("TestKey", "1.0")); + assertDoesNotThrow(() -> lockManager.shutdown()); + + verify(mockHazelcastInstance).shutdown(); + } + + @Test + void testShutdownWithoutInit() { + assertDoesNotThrow(() -> lockManager.shutdown()); + verify(mockHazelcastInstance, never()).shutdown(); + } +} diff --git a/plugins/plugins-context/plugins-context-locking/plugins-context-locking-hazelcast/src/test/java/org/onap/policy/apex/plugins/context/locking/hazelcast/HazelcastLockTest.java b/plugins/plugins-context/plugins-context-locking/plugins-context-locking-hazelcast/src/test/java/org/onap/policy/apex/plugins/context/locking/hazelcast/HazelcastLockTest.java new file mode 100644 index 000000000..fb3d738cd --- /dev/null +++ b/plugins/plugins-context/plugins-context-locking/plugins-context-locking-hazelcast/src/test/java/org/onap/policy/apex/plugins/context/locking/hazelcast/HazelcastLockTest.java @@ -0,0 +1,78 @@ +/* + * ============LICENSE_START======================================================= + * 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. + * 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.hazelcast; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.hazelcast.core.HazelcastInstance; +import com.hazelcast.cp.CPSubsystem; +import com.hazelcast.cp.lock.FencedLock; +import java.util.concurrent.locks.Lock; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class HazelcastLockTest { + + private HazelcastInstance hazelcastInstance; + private CPSubsystem cpSubsystem; + private FencedLock mockReadLock; + private FencedLock mockWriteLock; + + private HazelcastLock hazelcastLock; + private final String lockId = "testLock"; + + @BeforeEach + void setUp() { + hazelcastInstance = mock(HazelcastInstance.class); + cpSubsystem = mock(CPSubsystem.class); + mockReadLock = mock(FencedLock.class); + mockWriteLock = mock(FencedLock.class); + + when(hazelcastInstance.getCPSubsystem()).thenReturn(cpSubsystem); + when(cpSubsystem.getLock(lockId + "_READ")).thenReturn(mockReadLock); + when(cpSubsystem.getLock(lockId + "_WRITE")).thenReturn(mockWriteLock); + + hazelcastLock = new HazelcastLock(hazelcastInstance, lockId); + } + + @Test + void testConstructor() { + assertEquals(lockId, hazelcastLock.getLockId()); + + verify(cpSubsystem).getLock(lockId + "_READ"); + verify(cpSubsystem).getLock(lockId + "_WRITE"); + } + + @Test + void testReadLock() { + Lock readLock = hazelcastLock.readLock(); + assertEquals(mockReadLock, readLock); + } + + @Test + void testWriteLock() { + Lock writeLock = hazelcastLock.writeLock(); + assertEquals(mockWriteLock, writeLock); + } +} diff --git a/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/test/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsObjectEventConverterTest.java b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/test/java/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsObjectEventConverterTest.java index c828f789a..4aa0a0b0a 100644 --- a/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/test/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsObjectEventConverterTest.java +++ b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/test/java/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsObjectEventConverterTest.java @@ -22,16 +22,11 @@ package org.onap.policy.apex.plugins.event.protocol.jms; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertSame; -import jakarta.jms.JMSException; -import jakarta.jms.ObjectMessage; import java.io.ByteArrayOutputStream; import java.io.PrintStream; -import java.util.List; -import org.apache.activemq.command.ActiveMQObjectMessage; import org.apache.commons.lang3.RandomStringUtils; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -94,57 +89,12 @@ class Apex2JmsObjectEventConverterTest { final JmsObjectEventProtocolParameters parameters = new JmsObjectEventProtocolParameters(); converter.init(parameters); final String eventName = RandomStringUtils.randomAlphabetic(4); - assertThatThrownBy(() -> converter.toApexEvent(eventName, new Object())) + final Object testObject = new Object(); + assertThatThrownBy(() -> converter.toApexEvent(eventName, testObject)) .isInstanceOf(ApexEventRuntimeException.class); } @Test - void toApexEventNoParams() { - final String eventName = RandomStringUtils.randomAlphabetic(4); - ObjectMessage object = (ObjectMessage) new ActiveMQObjectMessage(); - assertThatThrownBy(() -> converter.toApexEvent(eventName, object)) - .isInstanceOf(ApexEventRuntimeException.class); - } - - @Test - void toApexEventIncomingObjectIsNull() { - final JmsObjectEventProtocolParameters parameters = new JmsObjectEventProtocolParameters(); - - converter.init(parameters); - final String eventName = RandomStringUtils.randomAlphabetic(4); - ObjectMessage object = (ObjectMessage) new ActiveMQObjectMessage(); - assertThatThrownBy(() -> converter.toApexEvent(eventName, object)) - .isInstanceOf(NullPointerException.class); - } - - @Test - void toApexEvent() throws ApexEventException, JMSException { - final JmsObjectEventProtocolParameters parameters = new JmsObjectEventProtocolParameters(); - - converter.init(parameters); - final String eventName = RandomStringUtils.randomAlphabetic(4); - final ObjectMessage object = (ObjectMessage) new ActiveMQObjectMessage(); - final String value = RandomStringUtils.randomAlphabetic(3); - object.setObject(value); - - // Prepare expected object - final ApexEvent expectedEvent = new ApexEvent("String" + parameters.getIncomingEventSuffix(), - parameters.getIncomingEventVersion(), - "java.lang", - parameters.getIncomingEventSource(), - parameters.getIncomingEventTarget()); - // Overwrite executionId to match executionId of actual - expectedEvent.setExecutionId(1); - final Object[] expected = {expectedEvent}; - - // Run tested method - final List<ApexEvent> actual = converter.toApexEvent(eventName, object); - // Overwrite executionId to match executionId of expected - actual.get(0).setExecutionId(1); - assertArrayEquals(expected, actual.toArray()); - } - - @Test void fromApexEventNull() { assertThatThrownBy(() -> converter.fromApexEvent(null)).isInstanceOf(ApexEventException.class); } diff --git a/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/test/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsTextEventConverterTest.java b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/test/java/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsTextEventConverterTest.java index a2ff9d02f..b2529b48f 100644 --- a/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/test/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsTextEventConverterTest.java +++ b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/test/java/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsTextEventConverterTest.java @@ -84,6 +84,7 @@ class Apex2JmsTextEventConverterTest { final String source = RandomStringUtils.randomAlphabetic(5); final String target = RandomStringUtils.randomAlphabetic(6); final String nameSpace = "a.name.space"; + final String toscaPolicyState = ""; // Prepare Json String to be translated into ApexEvent final TextBlock object = @@ -100,7 +101,8 @@ class Apex2JmsTextEventConverterTest { // execute test final List<ApexEvent> apexEvents = converter.toApexEvent(eventName, object); - final ApexEvent expectedEvent = new ApexEvent(eventName, eventVersion, nameSpace, source, target); + final ApexEvent expectedEvent = + new ApexEvent(eventName, eventVersion, nameSpace, source, target, toscaPolicyState); // Reset executionId expectedEvent.setExecutionId(0); @@ -125,13 +127,14 @@ class Apex2JmsTextEventConverterTest { final String source = RandomStringUtils.randomAlphabetic(6); final String target = RandomStringUtils.randomAlphabetic(7); - final String expected = "{\n" + - " \"name\": \"" + name + "\",\n" + - " \"version\": \"" + version + "\",\n" + - " \"nameSpace\": \"" + nameSpace + "\",\n" + - " \"source\": \"" + source + "\",\n" + - " \"target\": \"" + target + "\"\n" + - "}"; + final String expected = "{\n" + + " \"name\": \"" + name + "\",\n" + + " \"version\": \"" + version + "\",\n" + + " \"nameSpace\": \"" + nameSpace + "\",\n" + + " \"source\": \"" + source + "\",\n" + + " \"target\": \"" + target + "\",\n" + + " \"toscaPolicyState\": null\n" + + "}"; // Prepare Model service final AxArtifactKey eventKey = new AxArtifactKey(name + ":" + version); diff --git a/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/test/org/onap/policy/apex/plugins/event/protocol/jms/JmsObjectEventProtocolParametersTest.java b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/test/java/org/onap/policy/apex/plugins/event/protocol/jms/JmsObjectEventProtocolParametersTest.java index 1f480a654..1f480a654 100644 --- a/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/test/org/onap/policy/apex/plugins/event/protocol/jms/JmsObjectEventProtocolParametersTest.java +++ b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/test/java/org/onap/policy/apex/plugins/event/protocol/jms/JmsObjectEventProtocolParametersTest.java diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/runtime/impl/EnEventListenerImplTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/runtime/impl/EnEventListenerImplTest.java new file mode 100644 index 000000000..920901909 --- /dev/null +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/runtime/impl/EnEventListenerImplTest.java @@ -0,0 +1,105 @@ +/*- + * ============LICENSE_START======================================================= + * 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. + * 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.service.engine.runtime.impl; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.onap.policy.apex.core.engine.event.EnEvent; +import org.onap.policy.apex.model.basicmodel.concepts.ApexException; +import org.onap.policy.apex.service.engine.event.ApexEvent; +import org.onap.policy.apex.service.engine.event.impl.enevent.ApexEvent2EnEventConverter; +import org.onap.policy.apex.service.engine.runtime.ApexEventListener; + +class EnEventListenerImplTest { + + @Mock + private ApexEventListener mockApexEventListener; + + @Mock + private ApexEvent2EnEventConverter mockApexEnEventConverter; + + @Mock + private EnEvent mockEnEvent; + + @Mock + private ApexEvent mockApexEvent; + + @InjectMocks + private EnEventListenerImpl enEventListenerImpl; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testOnEnEvent_success() throws ApexException { + String eventName = "testEvent"; + when(mockEnEvent.getName()).thenReturn(eventName); + List<ApexEvent> apexEvents = Arrays.asList(mockApexEvent); + when(mockApexEnEventConverter.toApexEvent(eventName, mockEnEvent)).thenReturn(apexEvents); + + assertDoesNotThrow(() -> enEventListenerImpl.onEnEvent(mockEnEvent)); + + verify(mockApexEventListener, times(1)).onApexEvent(mockApexEvent); + } + + @Test + void testOnEnEvent_apexExceptionThrown() throws ApexException { + String eventName = "testEvent"; + when(mockEnEvent.getName()).thenReturn(eventName); + when(mockApexEnEventConverter.toApexEvent(eventName, mockEnEvent)) + .thenThrow(new ApexException("Conversion error")); + + assertThrows(ApexException.class, () -> enEventListenerImpl.onEnEvent(mockEnEvent)); + + verify(mockApexEventListener, never()).onApexEvent(any(ApexEvent.class)); + } + + @Test + void testOnEnEvent_multipleApexEvents() throws ApexException { + String eventName = "testEvent"; + when(mockEnEvent.getName()).thenReturn(eventName); + ApexEvent apexEvent1 = mock(ApexEvent.class); + ApexEvent apexEvent2 = mock(ApexEvent.class); + List<ApexEvent> apexEvents = Arrays.asList(apexEvent1, apexEvent2); + when(mockApexEnEventConverter.toApexEvent(eventName, mockEnEvent)).thenReturn(apexEvents); + + assertDoesNotThrow(() -> enEventListenerImpl.onEnEvent(mockEnEvent)); + + verify(mockApexEventListener, times(1)).onApexEvent(apexEvent1); + verify(mockApexEventListener, times(1)).onApexEvent(apexEvent2); + } +} diff --git a/tools/simple-wsclient/pom.xml b/tools/simple-wsclient/pom.xml index 2d7de02a5..cb737a4c1 100644 --- a/tools/simple-wsclient/pom.xml +++ b/tools/simple-wsclient/pom.xml @@ -30,6 +30,10 @@ <name>${project.artifactId}</name> <description>[${project.parent.artifactId}] Simple Websocket client (console and echo)</description> + <properties> + <sonar.skip>true</sonar.skip> + </properties> + <dependencies> <dependency> <groupId>jakarta.websocket</groupId> |