Increase code coverage 99/119299/2
authorarkadiusz.adamski <aadamski@est.tech>
Thu, 11 Mar 2021 10:09:10 +0000 (10:09 +0000)
committerarkadiusz.adamski <aadamski@est.tech>
Tue, 16 Mar 2021 17:02:45 +0000 (17:02 +0000)
- increased test coverage in plugins-event-carrier-restserver package

Issue-ID: POLICY-3092
Change-Id: I10ad7f0dd24293de6ce426553c7bc7a2fe3be013
Signed-off-by: arkadiusz.adamski <aadamski@est.tech>
plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/main/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerConsumer.java
plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/main/java/org/onap/policy/apex/plugins/event/carrier/restserver/RestServerCarrierTechnologyParameters.java
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 with mode: 0644]
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 with mode: 0644]
plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerConsumerTest.java
plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/ApexRestServerProducerTest.java
plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/resources/logback-test.xml
plugins/plugins-event/pom.xml

index 80ccda7..3bfde18 100644 (file)
@@ -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.
index 42613bc..afc07da 100644 (file)
@@ -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 (file)
index 0000000..3efe054
--- /dev/null
@@ -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 (file)
index 0000000..dfa19e5
--- /dev/null
@@ -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
index 91d6a0f..9fc5b50 100644 (file)
@@ -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.
 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");
 
     }
-
-
 }
index 4ee8e35..34992ff 100644 (file)
@@ -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.
 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);
+    }
 }
index 4344097..00aa0d2 100644 (file)
@@ -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=========================================================
 -->
     <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>
 
         <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>
index af53bdc..e8ee901 100644 (file)
@@ -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.
             <artifactId>services-engine</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <modules>