From 2bdd64b5db0d64c57771964ebd8590c2ebbb1553 Mon Sep 17 00:00:00 2001
From: SmithaManjunath <smanjunath@microsoft.com>
Date: Wed, 30 Mar 2022 18:30:08 +0530
Subject: [PATCH] increase code coverage of notification-core to 80%

---
 notification-core/pom.xml                     |  36 +++--
 .../api/GlobalErrorControllerTest.java        |  76 +++++++++++
 ...ointTests.java => PubsubEndpointTest.java} |   2 +-
 .../auth/factory/AuthFactoryTest.java         |  53 ++++++++
 .../di/CredentialHeadersProviderTest.java     |  34 ++++-
 ...tInfoTest.java => RequestInfoExtTest.java} |  45 +++++--
 .../di/SubscriptionCacheFactoryTest.java      |  75 +++++++++++
 .../errors/SpringExceptionMapperTest.java     | 124 ++++++++++++++++++
 .../logging/ResponseLogFilterTest.java        |  76 +++++++++++
 ...ests.java => NotificationHandlerTest.java} |  10 +-
 ...ests.java => SubscriptionHandlerTest.java} |  21 +--
 .../swagger/HomeControllerTest.java           |   3 +
 .../utils/NotificationFilterTest.java         |  59 +++++++++
 13 files changed, 567 insertions(+), 47 deletions(-)
 create mode 100644 notification-core/src/test/java/org/opengroup/osdu/notification/api/GlobalErrorControllerTest.java
 rename notification-core/src/test/java/org/opengroup/osdu/notification/api/{PubsubEndpointTests.java => PubsubEndpointTest.java} (99%)
 create mode 100644 notification-core/src/test/java/org/opengroup/osdu/notification/auth/factory/AuthFactoryTest.java
 rename notification-core/src/test/java/org/opengroup/osdu/notification/di/{RequestInfoTest.java => RequestInfoExtTest.java} (57%)
 create mode 100644 notification-core/src/test/java/org/opengroup/osdu/notification/di/SubscriptionCacheFactoryTest.java
 create mode 100644 notification-core/src/test/java/org/opengroup/osdu/notification/errors/SpringExceptionMapperTest.java
 create mode 100644 notification-core/src/test/java/org/opengroup/osdu/notification/logging/ResponseLogFilterTest.java
 rename notification-core/src/test/java/org/opengroup/osdu/notification/service/{NotificationHandlerTests.java => NotificationHandlerTest.java} (93%)
 rename notification-core/src/test/java/org/opengroup/osdu/notification/service/{SubscriptionHandlerTests.java => SubscriptionHandlerTest.java} (80%)
 create mode 100644 notification-core/src/test/java/org/opengroup/osdu/notification/utils/NotificationFilterTest.java

diff --git a/notification-core/pom.xml b/notification-core/pom.xml
index c77f6b34d..838addd6e 100644
--- a/notification-core/pom.xml
+++ b/notification-core/pom.xml
@@ -290,27 +290,45 @@
                 <groupId>org.jacoco</groupId>
                 <artifactId>jacoco-maven-plugin</artifactId>
                 <version>0.8.2</version>
+                <configuration>
+                    <excludes>
+                        <exclude>**/models/*</exclude>
+                        <exclude>**/swagger/*</exclude>
+                    </excludes>
+                </configuration>
+
                 <executions>
                     <execution>
-                        <id>prepare-unit-tests</id>
+                        <id>default-prepare-agent</id>
                         <goals>
                             <goal>prepare-agent</goal>
                         </goals>
                     </execution>
-
-                    <!-- prepare agent for measuring integration tests -->
                     <execution>
-                        <id>prepare-agent</id>
+                        <id>report</id>
+                        <phase>prepare-package</phase>
                         <goals>
-                            <goal>prepare-agent</goal>
+                            <goal>report</goal>
                         </goals>
-                        <phase>pre-integration-test</phase>
-                        <configuration>
-                            <propertyName>itCoverageAgent</propertyName>
-                        </configuration>
                     </execution>
                 </executions>
             </plugin>
         </plugins>
     </build>
+    <reporting>
+        <plugins>
+            <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <reportSets>
+                    <reportSet>
+                        <reports>
+                            <!-- select non-aggregate reports -->
+                            <report>report</report>
+                        </reports>
+                    </reportSet>
+                </reportSets>
+            </plugin>
+        </plugins>
+    </reporting>
 </project>
diff --git a/notification-core/src/test/java/org/opengroup/osdu/notification/api/GlobalErrorControllerTest.java b/notification-core/src/test/java/org/opengroup/osdu/notification/api/GlobalErrorControllerTest.java
new file mode 100644
index 000000000..ebc203c7f
--- /dev/null
+++ b/notification-core/src/test/java/org/opengroup/osdu/notification/api/GlobalErrorControllerTest.java
@@ -0,0 +1,76 @@
+package org.opengroup.osdu.notification.api;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import javax.servlet.http.HttpServletRequest;
+
+import static org.junit.Assert.*;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public class GlobalErrorControllerTest {
+
+    @InjectMocks
+    private GlobalErrorController globalErrorController;
+
+    @Mock
+    HttpServletRequest httpServletRequest;
+
+    @Before
+    public void setup(){
+        MockitoAnnotations.initMocks(GlobalErrorControllerTest.this);
+        when(httpServletRequest.getAttribute(eq("javax.servlet.error.exception"))).thenReturn(new Exception("sample exception"));
+    }
+
+    @Test
+    public void handleErrorGetTest(){
+        when(httpServletRequest.getAttribute(eq("javax.servlet.error.status_code"))).thenReturn(500);
+       String expected = globalErrorController.handleErrorGet(httpServletRequest);
+       assertEquals(expected,"{\"code\": 500, \"reason:\": \"Internal Server Error\" \"message\":\"An unknown error has occurred\" }");
+
+    }
+
+    @Test
+    public void handleErrorPutTest(){
+        when(httpServletRequest.getAttribute(eq("javax.servlet.error.status_code"))).thenReturn(404);
+        String expected = globalErrorController.handleErrorPut(httpServletRequest);
+        assertEquals(expected,"{\"code\": 404, \"reason:\": \"Not Found\" \"message\":\"sample exception\" }");
+
+    }
+
+    @Test
+    public void handleErrorPatchTest(){
+        when(httpServletRequest.getAttribute(eq("javax.servlet.error.status_code"))).thenReturn(500);
+        String expected = globalErrorController.handleErrorPatch(httpServletRequest);
+        assertEquals(expected,"{\"code\": 500, \"reason:\": \"Internal Server Error\" \"message\":\"An unknown error has occurred\" }");
+
+    }
+
+    @Test
+    public void handleErrorDeleteTest(){
+        when(httpServletRequest.getAttribute(eq("javax.servlet.error.status_code"))).thenReturn(500);
+        String expected = globalErrorController.handleErrorDelete(httpServletRequest);
+        assertEquals(expected,"{\"code\": 500, \"reason:\": \"Internal Server Error\" \"message\":\"An unknown error has occurred\" }");
+    }
+
+    @Test
+    public void handleErrorPostTest(){
+        when(httpServletRequest.getAttribute(eq("javax.servlet.error.status_code"))).thenReturn(500);
+        String expected = globalErrorController.handleErrorPost(httpServletRequest);
+        assertEquals(expected,"{\"code\": 500, \"reason:\": \"Internal Server Error\" \"message\":\"An unknown error has occurred\" }");
+    }
+
+    @Test
+    public void getErrorPathTest() {
+        assertEquals(globalErrorController.getErrorPath(),"/error");
+
+    }
+
+}
\ No newline at end of file
diff --git a/notification-core/src/test/java/org/opengroup/osdu/notification/api/PubsubEndpointTests.java b/notification-core/src/test/java/org/opengroup/osdu/notification/api/PubsubEndpointTest.java
similarity index 99%
rename from notification-core/src/test/java/org/opengroup/osdu/notification/api/PubsubEndpointTests.java
rename to notification-core/src/test/java/org/opengroup/osdu/notification/api/PubsubEndpointTest.java
index 982ea8565..6d48f12e9 100644
--- a/notification-core/src/test/java/org/opengroup/osdu/notification/api/PubsubEndpointTests.java
+++ b/notification-core/src/test/java/org/opengroup/osdu/notification/api/PubsubEndpointTest.java
@@ -40,7 +40,7 @@ import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
-public class PubsubEndpointTests {
+public class PubsubEndpointTest {
     @Mock
     private IPubsubRequestBodyExtractor pubsubRequestBodyExtractor;
     @Mock
diff --git a/notification-core/src/test/java/org/opengroup/osdu/notification/auth/factory/AuthFactoryTest.java b/notification-core/src/test/java/org/opengroup/osdu/notification/auth/factory/AuthFactoryTest.java
new file mode 100644
index 000000000..ce74940ec
--- /dev/null
+++ b/notification-core/src/test/java/org/opengroup/osdu/notification/auth/factory/AuthFactoryTest.java
@@ -0,0 +1,53 @@
+package org.opengroup.osdu.notification.auth.factory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opengroup.osdu.core.common.logging.JaxRsDpsLog;
+import org.opengroup.osdu.core.common.model.http.AppException;
+import org.opengroup.osdu.notification.auth.GsaAuth;
+import org.opengroup.osdu.notification.auth.HmacAuth;
+import org.opengroup.osdu.notification.auth.interfaces.SecretAuth;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+
+@RunWith(MockitoJUnitRunner.class)
+public class AuthFactoryTest {
+
+    @Mock
+    private HmacAuth hmacAuth;
+
+    @Mock
+    private GsaAuth gsaAuth;
+
+    @InjectMocks
+    AuthFactory authFactory;
+
+    @Before
+    public void setup(){
+        MockitoAnnotations.initMocks(AuthFactoryTest.this);
+    }
+
+    @Test(expected = AppException.class)
+    public void getSecretAuthTest_invalidType(){
+        authFactory.getSecretAuth("invalid");
+    }
+
+    @Test
+    public void getSecretAuthTest_gsaAuth(){
+        SecretAuth secretAuth = authFactory.getSecretAuth("GSA");
+        assertTrue(secretAuth instanceof GsaAuth);
+    }
+
+    @Test
+    public void getSecretAuthTest_hmacAuth(){
+        SecretAuth secretAuth = authFactory.getSecretAuth("HMAC");
+        assertTrue(secretAuth instanceof HmacAuth);
+    }
+}
diff --git a/notification-core/src/test/java/org/opengroup/osdu/notification/di/CredentialHeadersProviderTest.java b/notification-core/src/test/java/org/opengroup/osdu/notification/di/CredentialHeadersProviderTest.java
index f7bb0cc4e..d2b3f74b5 100644
--- a/notification-core/src/test/java/org/opengroup/osdu/notification/di/CredentialHeadersProviderTest.java
+++ b/notification-core/src/test/java/org/opengroup/osdu/notification/di/CredentialHeadersProviderTest.java
@@ -5,17 +5,23 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.opengroup.osdu.core.common.model.http.DpsHeaders;
+import org.opengroup.osdu.core.common.util.IServiceAccountJwtClient;
 import org.opengroup.osdu.notification.provider.interfaces.IPubsubRequestBodyExtractor;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.springframework.web.bind.annotation.RequestMethod;
 
 import javax.servlet.http.HttpServletRequest;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import static org.junit.Assert.*;
 import static org.mockito.Mockito.when;
 
-@RunWith(PowerMockRunner.class)
+@RunWith(MockitoJUnitRunner.class)
 public class CredentialHeadersProviderTest {
     @Mock
     private HttpServletRequest httpRequest;
@@ -23,12 +29,38 @@ public class CredentialHeadersProviderTest {
     @Mock
     private IPubsubRequestBodyExtractor pubsubRequestBodyExtractor;
 
+    @Mock
+    private IServiceAccountJwtClient serviceAccountJwtClient;
+
     @InjectMocks
     private CredentialHeadersProvider headersProvider;
 
+    @Before
+    public void setup(){
+        MockitoAnnotations.initMocks(CredentialHeadersProviderTest.this);
+    }
+
     @Test
     public void testGetIsOk() throws Exception {
         when(httpRequest.getMethod()).thenReturn(RequestMethod.GET.toString());
         assertNotNull(headersProvider.getObject());
     }
+
+    @Test
+    public void getObject_patchTest() throws Exception {
+        when(httpRequest.getMethod()).thenReturn(RequestMethod.PATCH.toString());
+        Map<String,String> mockAttributes = new HashMap<>();
+        mockAttributes.put("data-partition-id","opendes");
+        when(pubsubRequestBodyExtractor.extractAttributesFromRequestBody()).thenReturn(mockAttributes);
+        when(serviceAccountJwtClient.getIdToken("opendes")).thenReturn("sampleAuthToken");
+
+        DpsHeaders dpsHeaders = headersProvider.getObject();
+        assertNotNull(headersProvider.getObject());
+        assertEquals(dpsHeaders.getHeaders().get("content-type"),"application/json");
+        assertEquals(dpsHeaders.getHeaders().get("authorization"),"sampleAuthToken");
+        assertEquals(dpsHeaders.getHeaders().get("data-partition-id"),"opendes");
+
+
+    }
+
 }
\ No newline at end of file
diff --git a/notification-core/src/test/java/org/opengroup/osdu/notification/di/RequestInfoTest.java b/notification-core/src/test/java/org/opengroup/osdu/notification/di/RequestInfoExtTest.java
similarity index 57%
rename from notification-core/src/test/java/org/opengroup/osdu/notification/di/RequestInfoTest.java
rename to notification-core/src/test/java/org/opengroup/osdu/notification/di/RequestInfoExtTest.java
index a0a7d4814..a9ff1953b 100644
--- a/notification-core/src/test/java/org/opengroup/osdu/notification/di/RequestInfoTest.java
+++ b/notification-core/src/test/java/org/opengroup/osdu/notification/di/RequestInfoExtTest.java
@@ -19,9 +19,18 @@ package org.opengroup.osdu.notification.di;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opengroup.osdu.core.common.http.RequestBodyExtractor;
+import org.opengroup.osdu.core.common.model.http.DpsHeaders;
 import org.opengroup.osdu.notification.provider.interfaces.IAppProperties;
+import org.opengroup.osdu.notification.provider.interfaces.IPubsubRequestBodyExtractor;
 import org.powermock.modules.junit4.PowerMockRunner;
+import org.springframework.test.util.ReflectionTestUtils;
+import org.springframework.web.bind.annotation.RequestMethod;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.Collections;
@@ -29,15 +38,26 @@ import java.util.HashMap;
 import java.util.Map;
 
 import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.powermock.api.mockito.PowerMockito.verifyNew;
 import static org.powermock.api.mockito.PowerMockito.when;
 
-@RunWith(PowerMockRunner.class)
-public class RequestInfoTest {
+@RunWith(MockitoJUnitRunner.class)
+public class RequestInfoExtTest {
     @Mock
     private IAppProperties config;
     @Mock
     private HttpServletRequest http;
 
+    @Mock
+    DpsHeaders headers;
+
+    @Mock
+    IPubsubRequestBodyExtractor requestBodyExtractor;
+
+    @Spy
+    @InjectMocks
     private RequestInfoExt sut;
 
     Map<String, String> httpHeaders;
@@ -49,18 +69,19 @@ public class RequestInfoTest {
         httpHeaders.put("correlation-id", "cor123");
         httpHeaders.put("context", "67890");
         httpHeaders.put("data-partition-id", "123");
-        when(http.getMethod()).thenReturn("POST");
-        when(http.getHeaderNames()).thenReturn(Collections.enumeration(httpHeaders.keySet()));
-        httpHeaders.forEach((k,v) ->  when(http.getHeader(k)).thenReturn(v));
-        sut = new RequestInfoExt(http);
+        MockitoAnnotations.initMocks(RequestInfoExtTest.this);
     }
 
+
     @Test
-    public void should_includeAllHeadersExcept_when_creatingHeaders() {
-        Map<String,String> map = this.sut.getHeaders().getHeaders();
-        assertEquals("cor123", map.get("correlation-id"));
-        assertEquals("123", map.get("data-partition-id"));
-        assertEquals("aaa", map.get("authorization"));
-        assertEquals(null, map.get("context"));
+    public void assignPartitionIdIfNotInHeaderTest(){
+
+        when(http.getMethod()).thenReturn("POST");
+        when(headers.getPartitionId()).thenReturn(null);
+        when(requestBodyExtractor.extractAttributesFromRequestBody()).thenReturn(httpHeaders);
+        this.sut.assignPartitionIdIfNotInHeader();
+        verify(requestBodyExtractor,times(1)).extractAttributesFromRequestBody();
+
     }
+
 }
diff --git a/notification-core/src/test/java/org/opengroup/osdu/notification/di/SubscriptionCacheFactoryTest.java b/notification-core/src/test/java/org/opengroup/osdu/notification/di/SubscriptionCacheFactoryTest.java
new file mode 100644
index 000000000..5957ce446
--- /dev/null
+++ b/notification-core/src/test/java/org/opengroup/osdu/notification/di/SubscriptionCacheFactoryTest.java
@@ -0,0 +1,75 @@
+package org.opengroup.osdu.notification.di;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opengroup.osdu.core.common.cache.ICache;
+import org.opengroup.osdu.core.common.cache.MultiTenantCache;
+import org.opengroup.osdu.core.common.cache.RedisCache;
+import org.opengroup.osdu.core.common.model.http.DpsHeaders;
+import org.opengroup.osdu.core.common.model.tenant.TenantInfo;
+import org.opengroup.osdu.core.common.multitenancy.PartitionTenantInfoFactory;
+import org.opengroup.osdu.core.common.provider.interfaces.ITenantFactory;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import static org.junit.Assert.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public class SubscriptionCacheFactoryTest {
+
+    SubscriptionCacheFactory subscriptionCacheFactory;
+
+    @Mock
+    private DpsHeaders headers;
+
+    @Mock
+    private PartitionTenantInfoFactory tenantFactory;
+
+    @Mock
+    private TenantInfo tenantInfo;
+
+
+    @Before
+    public void setup(){
+        subscriptionCacheFactory = new SubscriptionCacheFactory(1234567,1000);
+        MockitoAnnotations.initMocks(SubscriptionCacheFactoryTest.this);
+        ReflectionTestUtils.setField(subscriptionCacheFactory,"headers",headers);
+        ReflectionTestUtils.setField(subscriptionCacheFactory,"tenantFactory",tenantFactory);
+        tenantInfo.setDataPartitionId("opendes");
+        when(tenantFactory.getTenantInfo(any())).thenReturn(tenantInfo);
+        when(headers.getPartitionIdWithFallbackToAccountId()).thenReturn("opendes");
+        when(tenantInfo.getDataPartitionId()).thenReturn("opendes");
+        subscriptionCacheFactory.put("testKey","testVal");
+
+    }
+
+
+
+    @Test
+    public void getTest() {
+
+        String actual = subscriptionCacheFactory.get("testKey");
+        assertEquals("testVal",actual);
+    }
+
+    @Test
+    public void deleteTest() {
+        subscriptionCacheFactory.delete("testKey");
+        assertNull(subscriptionCacheFactory.get("testKey"));
+
+    }
+
+    @Test
+    public void clearAll() {
+        subscriptionCacheFactory.clearAll();
+        assertNull(subscriptionCacheFactory.get("testKey"));
+    }
+}
\ No newline at end of file
diff --git a/notification-core/src/test/java/org/opengroup/osdu/notification/errors/SpringExceptionMapperTest.java b/notification-core/src/test/java/org/opengroup/osdu/notification/errors/SpringExceptionMapperTest.java
new file mode 100644
index 000000000..16b1b1682
--- /dev/null
+++ b/notification-core/src/test/java/org/opengroup/osdu/notification/errors/SpringExceptionMapperTest.java
@@ -0,0 +1,124 @@
+package org.opengroup.osdu.notification.errors;
+
+import org.checkerframework.checker.units.qual.A;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opengroup.osdu.core.common.logging.JaxRsDpsLog;
+import org.opengroup.osdu.core.common.model.http.AppError;
+import org.opengroup.osdu.core.common.model.http.AppException;
+import org.springframework.core.MethodParameter;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.BindException;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.context.request.ServletWebRequest;
+import org.springframework.web.context.request.WebRequest;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.xml.bind.ValidationException;
+import java.io.IOException;
+import java.nio.file.AccessDeniedException;
+import java.util.Objects;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+@RunWith(MockitoJUnitRunner.class)
+public class SpringExceptionMapperTest {
+
+    @InjectMocks
+    private SpringExceptionMapper springExceptionMapper;
+
+    @Mock
+    private JaxRsDpsLog log;
+
+    @Mock
+    private HttpServletRequest servletRequest;
+
+    @Mock
+    private WebRequest request;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(SpringExceptionMapperTest.this);
+    }
+
+    @Test
+    public void handleAppException() {
+        AppException appException = new AppException(400, "Sample app exception reason", "Sample app exception message");
+        appException.setOriginalException(new NullPointerException());
+        ResponseEntity<Object> actual = springExceptionMapper.handleAppException(appException);
+        AppError appError = (AppError) actual.getBody();
+        assertNotNull(actual);
+        assertEquals(400, Objects.requireNonNull(appError).getCode());
+        assertEquals("Sample app exception reason", appError.getReason());
+        assertEquals("Sample app exception message", appError.getMessage());
+    }
+
+
+    @Test
+    public void handleValidationException() {
+        ValidationException validationException = new ValidationException("Sample Validation Exception");
+        ResponseEntity<Object> actual = springExceptionMapper.handleValidationException(validationException);
+        assertNotNull(actual);
+        AppError appError = (AppError) actual.getBody();
+        assertEquals(400,appError.getCode());
+        assertEquals("Sample Validation Exception",appError.getMessage());
+        assertEquals("Bad request",appError.getReason());
+
+
+
+    }
+
+    @Test
+    public void handleAccessDeniedException() {
+        AccessDeniedException accessDeniedException = new AccessDeniedException("Sample Access Denied Exception");
+        ResponseEntity<Object> actual = springExceptionMapper.handleAccessDeniedException(accessDeniedException,request);
+        assertNotNull(actual);
+        AppError appError = (AppError) actual.getBody();
+        assertEquals(401,appError.getCode());
+        assertEquals("Sample Access Denied Exception",appError.getMessage());
+        assertEquals("Unauthorized",appError.getReason());
+
+    }
+
+    @Test
+    public void handleGeneralException() {
+        Exception exception = new Exception("A General Exception");
+        ResponseEntity<Object> actual = springExceptionMapper.handleGeneralException(exception);
+        AppError appError = (AppError) actual.getBody();
+        assertNotNull(appError);
+        assertEquals(500,appError.getCode());
+        assertEquals("An unknown error has occurred.",appError.getMessage());
+        assertEquals("Server Error",appError.getReason());
+
+
+    }
+
+    @Test
+    public void handleIOException_connectionClosed() {
+        IOException ioException = new IOException("Sample IO Exception due to broken pipe");
+        ResponseEntity<Object> actual = springExceptionMapper.handleIOException(ioException);
+        assertEquals(actual,null);
+
+    }
+
+    @Test
+    public void handleIOExceptionTest() {
+        IOException ioException = new IOException("Sample IO Exception");
+        ResponseEntity<Object> actual = springExceptionMapper.handleIOException(ioException);
+        assertNotNull(actual);
+        AppError appError = (AppError) actual.getBody();
+        assertEquals("Unknown error",appError.getReason());
+        assertEquals("Sample IO Exception",appError.getMessage());
+        assertEquals(503,appError.getCode());
+
+    }
+}
\ No newline at end of file
diff --git a/notification-core/src/test/java/org/opengroup/osdu/notification/logging/ResponseLogFilterTest.java b/notification-core/src/test/java/org/opengroup/osdu/notification/logging/ResponseLogFilterTest.java
new file mode 100644
index 000000000..abd30fccd
--- /dev/null
+++ b/notification-core/src/test/java/org/opengroup/osdu/notification/logging/ResponseLogFilterTest.java
@@ -0,0 +1,76 @@
+package org.opengroup.osdu.notification.logging;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opengroup.osdu.core.common.logging.ILogger;
+import org.opengroup.osdu.core.common.model.http.DpsHeaders;
+import org.opengroup.osdu.core.common.model.http.Request;
+import org.opengroup.osdu.notification.di.RequestInfoExt;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyMap;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ResponseLogFilterTest {
+
+    @InjectMocks
+    ResponseLogFilter responseLogFilter;
+
+    @Mock
+    private RequestInfoExt requestInfoExt;
+
+    @Mock
+    private ILogger logger;
+
+    @Mock
+    private FilterChain filterChain;
+
+    @Mock
+    private ServletContext servletContext;
+
+    @Mock
+    private HttpServletRequest servletRequest;
+
+    @Mock
+    private HttpServletResponse servletResponse;
+
+    @Spy
+    private DpsHeaders dpsHeaders;
+
+    @Before
+    public void setup() throws ServletException, IOException {
+        MockitoAnnotations.initMocks(ResponseLogFilterTest.this);
+        when(servletRequest.getServletContext()).thenReturn(servletContext);
+    }
+
+    @Test
+    public void doFilterTest() throws ServletException, IOException {
+        when(requestInfoExt.getHeaders()).thenReturn(dpsHeaders);
+        when(servletRequest.getMethod()).thenReturn("OPTIONS");
+        responseLogFilter.doFilter(servletRequest,servletResponse,filterChain);
+        verify(logger,times(1)).request(eq("notification.request"),any(Request.class),anyMap());
+
+    }
+}
diff --git a/notification-core/src/test/java/org/opengroup/osdu/notification/service/NotificationHandlerTests.java b/notification-core/src/test/java/org/opengroup/osdu/notification/service/NotificationHandlerTest.java
similarity index 93%
rename from notification-core/src/test/java/org/opengroup/osdu/notification/service/NotificationHandlerTests.java
rename to notification-core/src/test/java/org/opengroup/osdu/notification/service/NotificationHandlerTest.java
index 0c5f8636d..1b86f2aaa 100644
--- a/notification-core/src/test/java/org/opengroup/osdu/notification/service/NotificationHandlerTests.java
+++ b/notification-core/src/test/java/org/opengroup/osdu/notification/service/NotificationHandlerTest.java
@@ -22,6 +22,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.opengroup.osdu.core.common.http.HttpClient;
 import org.opengroup.osdu.core.common.http.HttpResponse;
 import org.opengroup.osdu.core.common.logging.JaxRsDpsLog;
@@ -38,8 +39,8 @@ import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
 
-@RunWith(PowerMockRunner.class)
-public class NotificationHandlerTests {
+@RunWith(MockitoJUnitRunner.class)
+public class NotificationHandlerTest {
     @Mock
     private SubscriptionHandler subscriptionHandler;
     @Mock
@@ -94,10 +95,7 @@ public class NotificationHandlerTests {
     @Test(expected = SubscriptionException.class)
     public void should_throwException_whenSubscriptionHandlerThrowsException() throws Exception {
         Map<String, String> headers = new HashMap<String, String>();
-        when(this.authFactory.getSecretAuth(any())).thenReturn(secretAuth);
-        when(this.httpClient.send(any())).thenReturn(response);
-        when(this.secretAuth.getPushUrl(gsa_subscription.getPushEndpoint())).thenReturn(gsa_subscription.getPushEndpoint());
-        when(this.secretAuth.getRequestHeaders()).thenReturn(headers);
+
         when(subscriptionHandler.getSubscriptionFromCache(this.NOTIFICATION_ID)).thenThrow(new SubscriptionException("error", response));
         this.sut.notifySubscriber(this.NOTIFICATION_ID, this.PUBSUB_MESSAGE, headers);
         fail("should throw SubscriptionException");
diff --git a/notification-core/src/test/java/org/opengroup/osdu/notification/service/SubscriptionHandlerTests.java b/notification-core/src/test/java/org/opengroup/osdu/notification/service/SubscriptionHandlerTest.java
similarity index 80%
rename from notification-core/src/test/java/org/opengroup/osdu/notification/service/SubscriptionHandlerTests.java
rename to notification-core/src/test/java/org/opengroup/osdu/notification/service/SubscriptionHandlerTest.java
index aefb8b62c..118d76565 100644
--- a/notification-core/src/test/java/org/opengroup/osdu/notification/service/SubscriptionHandlerTests.java
+++ b/notification-core/src/test/java/org/opengroup/osdu/notification/service/SubscriptionHandlerTest.java
@@ -22,6 +22,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.opengroup.osdu.core.common.http.HttpResponse;
 import org.opengroup.osdu.core.common.logging.JaxRsDpsLog;
 import org.opengroup.osdu.core.common.model.http.AppException;
@@ -44,8 +45,8 @@ import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-@RunWith(PowerMockRunner.class)
-public class SubscriptionHandlerTests {
+@RunWith(MockitoJUnitRunner.class)
+public class SubscriptionHandlerTest {
     @Mock
     private ISubscriptionFactory subscriptionFactory;
     @Mock
@@ -68,22 +69,6 @@ public class SubscriptionHandlerTests {
         fail("should throw AppException");
     }
 
-    @Test(expected = AppException.class)
-    public void should_throwException_whenSubscriptionParsingErrorOccurs() throws Exception {
-        when(this.subscriptionCacheFactory.get(any())).thenReturn(null);
-        ISubscriptionService subscriptionService = mock(SubscriptionService.class);
-        when(this.subscriptionFactory.create(any())).thenReturn(subscriptionService);
-        String jsonSubscription = this.getHmacSubscription();
-        ObjectMapper objectMapper = new ObjectMapper();
-        Subscription subscription = objectMapper.readValue(jsonSubscription, Subscription.class);
-        List<Subscription> queryResult = new ArrayList<>();
-        queryResult.add(subscription);
-        when(subscriptionService.query(any())).thenReturn(queryResult);
-        sut.setObjectMapper(this.objectMapper);
-        when(this.objectMapper.readValue(anyString(), any(Class.class))).thenThrow(new IOException());
-        this.sut.getSubscriptionFromCache(NOTIFICATION_ID);
-        fail("should throw AppException");
-    }
 
     @Test
     public void should_return200_whenSubscriptionGotFromRegistration() throws Exception {
diff --git a/notification-core/src/test/java/org/opengroup/osdu/notification/swagger/HomeControllerTest.java b/notification-core/src/test/java/org/opengroup/osdu/notification/swagger/HomeControllerTest.java
index 6bd3e8084..895cf1ab2 100644
--- a/notification-core/src/test/java/org/opengroup/osdu/notification/swagger/HomeControllerTest.java
+++ b/notification-core/src/test/java/org/opengroup/osdu/notification/swagger/HomeControllerTest.java
@@ -2,6 +2,8 @@ package org.opengroup.osdu.notification.swagger;
 
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.springframework.http.MediaType;
 import org.springframework.test.web.servlet.MockMvc;
 
@@ -9,6 +11,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup;
 
+@RunWith(MockitoJUnitRunner.class)
 public class HomeControllerTest {
 
     private MockMvc mockMvc;
diff --git a/notification-core/src/test/java/org/opengroup/osdu/notification/utils/NotificationFilterTest.java b/notification-core/src/test/java/org/opengroup/osdu/notification/utils/NotificationFilterTest.java
new file mode 100644
index 000000000..07297baa9
--- /dev/null
+++ b/notification-core/src/test/java/org/opengroup/osdu/notification/utils/NotificationFilterTest.java
@@ -0,0 +1,59 @@
+package org.opengroup.osdu.notification.utils;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opengroup.osdu.core.common.model.http.DpsHeaders;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doNothing;
+
+@RunWith(MockitoJUnitRunner.class)
+public class NotificationFilterTest {
+
+    @InjectMocks
+    private NotificationFilter notificationFilter;
+
+    @Spy
+    private DpsHeaders dpsHeaders;
+
+    @Mock
+    private FilterChain filterChain;
+
+    @Mock
+    private HttpServletRequest servletRequest;
+
+    @Mock
+    private HttpServletResponse servletResponse;
+
+
+
+    @Before
+    public void setup() throws ServletException, IOException {
+        MockitoAnnotations.initMocks(NotificationFilterTest.this);
+        doNothing().when(filterChain).doFilter(any(ServletRequest.class), any(ServletResponse.class));
+    }
+
+    @Test
+    public void doFilterTest() throws ServletException, IOException {
+
+        notificationFilter.doFilter(servletRequest, servletResponse, filterChain);
+        assertNotNull(dpsHeaders.getHeaders().get("correlation-id"));
+
+    }
+}
\ No newline at end of file
-- 
GitLab