From 08bdce9e72794993c1bd08a9ef913c8fb827ed6f Mon Sep 17 00:00:00 2001 From: "arkadiusz.adamski" Date: Thu, 11 Mar 2021 10:09:10 +0000 Subject: Increase code coverage - increased test coverage in plugins-event-carrier-restserver package Issue-ID: POLICY-3092 Change-Id: I10ad7f0dd24293de6ce426553c7bc7a2fe3be013 Signed-off-by: arkadiusz.adamski --- .../carrier/restserver/ApexRestServerConsumer.java | 5 ++ .../RestServerCarrierTechnologyParameters.java | 5 ++ .../restserver/AccessControlFilterTest.java | 76 ++++++++++++++++++++++ .../restserver/ApexRestServerAafFilterTest.java | 37 +++++++++++ .../restserver/ApexRestServerConsumerTest.java | 62 +++++++++++------- .../restserver/ApexRestServerProducerTest.java | 49 +++++++++++++- .../src/test/resources/logback-test.xml | 30 +++++---- plugins/plugins-event/pom.xml | 6 ++ 8 files changed, 232 insertions(+), 38 deletions(-) create mode 100644 plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/AccessControlFilterTest.java create mode 100644 plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerAafFilterTest.java 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 map = new MultivaluedHashMap<>(); + Mockito.when(requestContext.getHeaderString("Origin")).thenReturn(origin); + Mockito.when(responseContext.getHeaders()).thenReturn(map); + + // prepare expected + final MultivaluedMap 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 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); @@ -117,6 +113,30 @@ public class ApexRestServerConsumerTest { incomingEventReceiver); } + @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 @@ @@ -25,10 +26,18 @@ + + + + + INFO + ACCEPT + DENY + - %d %contextName [%t] %level %logger{36} - %msg%n + %d %level %msg%n @@ -36,15 +45,8 @@ - - ${LOG_DIR}/apex.log - - %d %-5relative [procId=${processId}] [%thread] %-5level - %logger{26} - %msg %n %ex{full} - - - - - + + + diff --git a/plugins/plugins-event/pom.xml b/plugins/plugins-event/pom.xml index af53bdc7e..e8ee90160 100644 --- a/plugins/plugins-event/pom.xml +++ b/plugins/plugins-event/pom.xml @@ -1,6 +1,7 @@