diff options
Diffstat (limited to 'plugins/plugins-event')
8 files changed, 232 insertions, 38 deletions
diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/main/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerConsumer.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/main/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerConsumer.java index 80ccda729..3bfde18e3 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/main/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerConsumer.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/main/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerConsumer.java @@ -24,6 +24,9 @@ package org.onap.policy.apex.plugins.event.carrier.restserver; import java.util.Properties; import java.util.concurrent.atomic.AtomicLong; import javax.ws.rs.core.Response; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Setter; import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities; import org.onap.policy.apex.service.engine.event.ApexEventException; import org.onap.policy.apex.service.engine.event.ApexEventReceiver; @@ -50,9 +53,11 @@ public class ApexRestServerConsumer extends ApexPluginsEventConsumer { private static final long REST_SERVER_CONSUMER_WAIT_SLEEP_TIME = 50; // The event receiver that will receive events from this consumer + @Setter(AccessLevel.PACKAGE) private ApexEventReceiver eventReceiver; // The local HTTP server to use for REST call reception if we are running a local Grizzly server + @Getter(AccessLevel.PACKAGE) private HttpServletServer server; // Holds the next identifier for event execution. diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/main/java/org/onap/policy/apex/plugins/event/carrier/restserver/RestServerCarrierTechnologyParameters.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/main/java/org/onap/policy/apex/plugins/event/carrier/restserver/RestServerCarrierTechnologyParameters.java index 42613bcf8..afc07da95 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/main/java/org/onap/policy/apex/plugins/event/carrier/restserver/RestServerCarrierTechnologyParameters.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/main/java/org/onap/policy/apex/plugins/event/carrier/restserver/RestServerCarrierTechnologyParameters.java @@ -21,7 +21,9 @@ package org.onap.policy.apex.plugins.event.carrier.restserver; +import lombok.AccessLevel; import lombok.Getter; +import lombok.Setter; import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters; import org.onap.policy.common.parameters.GroupValidationResult; import org.onap.policy.common.parameters.ValidationStatus; @@ -58,8 +60,11 @@ public class RestServerCarrierTechnologyParameters extends CarrierTechnologyPara public static final String RESTSERVER_EVENT_CONSUMER_PLUGIN_CLASS = ApexRestServerConsumer.class.getName(); // REST server parameters + @Setter(AccessLevel.PACKAGE) private boolean standalone = false; + @Setter(AccessLevel.PACKAGE) private String host = null; + @Setter(AccessLevel.PACKAGE) private int port = -1; private String userName; private String password; diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/AccessControlFilterTest.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/AccessControlFilterTest.java new file mode 100644 index 000000000..3efe054ad --- /dev/null +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/AccessControlFilterTest.java @@ -0,0 +1,76 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 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.event.carrier.restserver; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.container.ContainerResponseContext; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; + + +public class AccessControlFilterTest { + + private AccessControlFilter acf; + + @Mock + private ContainerRequestContext requestContext; + @Mock + private ContainerResponseContext responseContext; + + @Before + public void beforeEach() { + MockitoAnnotations.initMocks(this); + acf = new AccessControlFilter(); + } + + @Test + public void filterAddToExisting() throws IOException { + // prepare mocks + final String origin = RandomStringUtils.randomAlphanumeric(14, 16); + final MultivaluedHashMap<String, Object> map = new MultivaluedHashMap<>(); + Mockito.when(requestContext.getHeaderString("Origin")).thenReturn(origin); + Mockito.when(responseContext.getHeaders()).thenReturn(map); + + // prepare expected + final MultivaluedMap<String, Object> expected = new MultivaluedHashMap<>(); + expected.add("Access-Control-Allow-Origin", origin); + expected.add("Access-Control-Expose-Headers", "Content-Type, Accept, Allow"); + expected.add("Access-Control-Allow-Headers", "Origin, Content-Type, Accept"); + expected.add("Access-Control-Allow-Credentials", "true"); + expected.add("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT"); + + + // test + acf.filter(requestContext, responseContext); + final MultivaluedMap<String, Object> actual = responseContext.getHeaders(); + + assertEquals(expected, actual); + } +}
\ No newline at end of file diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerAafFilterTest.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerAafFilterTest.java new file mode 100644 index 000000000..dfa19e577 --- /dev/null +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerAafFilterTest.java @@ -0,0 +1,37 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 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.event.carrier.restserver; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class ApexRestServerAafFilterTest { + + @Test + public void testGetPermissionTypeRoot() { + final ApexRestServerAafFilter filter = new ApexRestServerAafFilter(); + + final String permissionTypeRoot = filter.getPermissionTypeRoot(); + + assertEquals("org.onap.policy.apex-rest-server", permissionTypeRoot); + } +}
\ No newline at end of file diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerConsumerTest.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerConsumerTest.java index 91d6a0f4e..9fc5b502d 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerConsumerTest.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerConsumerTest.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Samsung. All rights reserved. - * Modifications Copyright (C) 2019-2020 Nordix Foundation. + * Modifications Copyright (C) 2019-2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,9 +22,12 @@ package org.onap.policy.apex.plugins.event.carrier.restserver; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import java.io.IOException; import java.lang.reflect.Field; import javax.ws.rs.core.Response; import org.junit.After; @@ -38,6 +41,8 @@ import org.onap.policy.apex.service.engine.event.SynchronousEventCache; import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters; import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters; import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode; +import org.onap.policy.common.endpoints.http.server.HttpServletServer; +import org.onap.policy.common.utils.network.NetworkUtil; public class ApexRestServerConsumerTest { @@ -82,12 +87,9 @@ public class ApexRestServerConsumerTest { } @Test(expected = ApexEventException.class) - public void testInitWithSynchronousMode() throws ApexEventException, NoSuchFieldException, - SecurityException, IllegalArgumentException, IllegalAccessException { + public void testInitWithSynchronousMode() throws ApexEventException, SecurityException, IllegalArgumentException { restServerCarrierTechnologyParameters = new RestServerCarrierTechnologyParameters(); - Field field = RestServerCarrierTechnologyParameters.class.getDeclaredField("standalone"); - field.setAccessible(true); - field.set(restServerCarrierTechnologyParameters, true); + restServerCarrierTechnologyParameters.setStandalone(true); consumerParameters.setCarrierTechnologyParameters(restServerCarrierTechnologyParameters); consumerParameters.setPeeredMode(EventHandlerPeeredMode.SYNCHRONOUS, true); apexRestServerConsumer.init("TestApexRestServerConsumer", consumerParameters, @@ -96,20 +98,14 @@ public class ApexRestServerConsumerTest { @Test(expected = IllegalArgumentException.class) public void testInitWithSynchronousModeAndProperValues() - throws ApexEventException, NoSuchFieldException, SecurityException, - IllegalArgumentException, IllegalAccessException { + throws ApexEventException, SecurityException, IllegalArgumentException { restServerCarrierTechnologyParameters = new RestServerCarrierTechnologyParameters(); - Field field = RestServerCarrierTechnologyParameters.class.getDeclaredField("standalone"); - field.setAccessible(true); - field.set(restServerCarrierTechnologyParameters, true); - field = RestServerCarrierTechnologyParameters.class.getDeclaredField("host"); - field.setAccessible(true); - field.set(restServerCarrierTechnologyParameters, "1ocalhost"); - field = RestServerCarrierTechnologyParameters.class.getDeclaredField("port"); - field.setAccessible(true); - field.set(restServerCarrierTechnologyParameters, 65535); + restServerCarrierTechnologyParameters.setStandalone(true); + restServerCarrierTechnologyParameters.setHost("1ocalhost"); + restServerCarrierTechnologyParameters.setPort(65535); + consumerParameters.setCarrierTechnologyParameters(restServerCarrierTechnologyParameters); consumerParameters.setPeeredMode(EventHandlerPeeredMode.SYNCHRONOUS, true); @@ -118,6 +114,30 @@ public class ApexRestServerConsumerTest { } @Test + public void testInitAndStop() throws ApexEventException, IOException { + restServerCarrierTechnologyParameters = new RestServerCarrierTechnologyParameters(); + + restServerCarrierTechnologyParameters.setStandalone(true); + restServerCarrierTechnologyParameters.setHost("localhost"); + // get any available port + final int availableTcpPort = NetworkUtil.allocPort(); + restServerCarrierTechnologyParameters.setPort(availableTcpPort); + + consumerParameters.setCarrierTechnologyParameters(restServerCarrierTechnologyParameters); + consumerParameters.setPeeredMode(EventHandlerPeeredMode.SYNCHRONOUS, true); + apexRestServerConsumer.init("TestApexRestServerConsumer", consumerParameters, + incomingEventReceiver); + HttpServletServer server = apexRestServerConsumer.getServer(); + + // check if server is alive + assertTrue(server.isAlive()); + + apexRestServerConsumer.stop(); + // check if server is stopped + assertFalse(server.isAlive()); + } + + @Test public void testGetName() { assertNull(apexRestServerConsumer.getName()); } @@ -154,16 +174,12 @@ public class ApexRestServerConsumerTest { ApexEventReceiver apexEventReceiver = new SupportApexEventReceiver(); - Field field = ApexRestServerConsumer.class.getDeclaredField("eventReceiver"); - field.setAccessible(true); - field.set(apexRestServerConsumer, apexEventReceiver); - field = ApexPluginsEventConsumer.class.getDeclaredField("name"); + apexRestServerConsumer.setEventReceiver(apexEventReceiver); + Field field = ApexPluginsEventConsumer.class.getDeclaredField("name"); field.setAccessible(true); field.set(apexRestServerConsumer, "TestApexRestServerConsumer"); apexRestServerConsumer.receiveEvent("TestApexRestServerConsumer"); } - - } diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerProducerTest.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerProducerTest.java index 4ee8e3591..34992ff1d 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerProducerTest.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerProducerTest.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Samsung. All rights reserved. - * Modifications Copyright (C) 2019 Nordix Foundation. + * Modifications Copyright (C) 2019-2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,10 +22,14 @@ package org.onap.policy.apex.plugins.event.carrier.restserver; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; import java.lang.reflect.Field; +import java.util.Random; +import org.apache.commons.lang3.RandomStringUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -45,6 +49,7 @@ public class ApexRestServerProducerTest { ApexRestServerConsumer apexRestServerConsumer = null; RestServerCarrierTechnologyParameters restServerCarrierTechnologyParameters = null; SynchronousEventCache synchronousEventCache = null; + Random random = new Random(); /** * Set up testing. @@ -118,4 +123,46 @@ public class ApexRestServerProducerTest { peeredReference); assertNotNull(apexRestServerProducer.getPeeredReference(EventHandlerPeeredMode.REQUESTOR)); } + + @Test + public void testSendEventNotExistingEventToApex() { + final long executionId = random.nextLong(); + final String eventName = RandomStringUtils.randomAlphabetic(7); + final Object event = new Object(); + final ApexRestServerConsumer consumer = new ApexRestServerConsumer(); + final SynchronousEventCache cache = + new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, apexRestServerProducer, + random.nextInt(1000)); + + this.apexRestServerProducer.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache); + + // test + this.apexRestServerProducer.sendEvent(executionId, null, eventName, event); + + assertFalse(cache.existsEventFromApex(executionId)); + } + + @Test + public void testSendEvent() { + final long executionId = random.nextLong(); + final String eventName = RandomStringUtils.randomAlphabetic(7); + final Object expected = new Object(); + + final ApexRestServerConsumer consumer = new ApexRestServerConsumer(); + final SynchronousEventCache cache = new SynchronousEventCache( + EventHandlerPeeredMode.SYNCHRONOUS, + consumer, + apexRestServerProducer, + 10000); + + // Set EventToApex on cache object + cache.cacheSynchronizedEventToApex(executionId, new Object()); + + this.apexRestServerProducer.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache); + + this.apexRestServerProducer.sendEvent(executionId, null, eventName, expected); + final Object actual = cache.removeCachedEventFromApexIfExists(executionId); + + assertSame(expected, actual); + } } diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/resources/logback-test.xml b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/resources/logback-test.xml index 43440971a..00aa0d2d1 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/resources/logback-test.xml +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/resources/logback-test.xml @@ -2,19 +2,20 @@ <!-- ============LICENSE_START======================================================= Copyright (C) 2016-2018 Ericsson. All rights reserved. + Modifications Copyright (C) 2021 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========================================================= --> @@ -25,10 +26,18 @@ <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" /> <property name="LOG_DIR" value="${java.io.tmpdir}/apex_logging/" /> + <!-- DUMMY APPENDER FOR TESTS ONLY --> + <appender name="NOP" class="ch.qos.logback.core.helpers.NOPAppender"/> + <!-- USE FOR STD OUT ONLY --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <filter class="ch.qos.logback.classic.filter.LevelFilter"> + <level>INFO</level> + <onMatch>ACCEPT</onMatch> + <onMismatch>DENY</onMismatch> + </filter> <encoder> - <Pattern>%d %contextName [%t] %level %logger{36} - %msg%n</Pattern> + <Pattern>%d %level %msg%n</Pattern> </encoder> </appender> @@ -36,15 +45,8 @@ <appender-ref ref="STDOUT" /> </root> - <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${LOG_DIR}/apex.log</file> - <encoder> - <pattern>%d %-5relative [procId=${processId}] [%thread] %-5level - %logger{26} - %msg %n %ex{full}</pattern> - </encoder> - </appender> - - <logger name="org.onap.policy.apex.plugins.event.carrier.restserver" level="info" additivity="false"> - <appender-ref ref="STDOUT" /> + <logger name="org.onap.policy.apex.plugins.event.carrier.restserver" level="debug" additivity="false"> + <appender-ref ref="NOP"/> + <appender-ref ref="STDOUT"/> </logger> </configuration> diff --git a/plugins/plugins-event/pom.xml b/plugins/plugins-event/pom.xml index 45b23f91b..e375b54be 100644 --- a/plugins/plugins-event/pom.xml +++ b/plugins/plugins-event/pom.xml @@ -1,6 +1,7 @@ <!-- ============LICENSE_START======================================================= Copyright (C) 2018 Ericsson. All rights reserved. + Modifications Copyright (C) 2021 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,6 +39,11 @@ <artifactId>services-engine</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <scope>test</scope> + </dependency> </dependencies> <modules> |