diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 26d71193cd906796ba5cd7136050c949c7cc4ddf..da1e3e9a310f0ce23802cc8cc2ad27d834f49091 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,5 @@ variables: + CORE_BUILD_SUBDIR: unit-core IBM_BUILD_SUBDIR: provider/unit-ibm/unit-ocp IBM_INT_TEST_PY_SUBDIR: testing/unit_test_ibm IBM_INT_TEST_PY_FILE: run_test.py diff --git a/unit-core/lombok.config b/unit-core/lombok.config new file mode 100644 index 0000000000000000000000000000000000000000..df71bb6a0fb87825475c75620c4d5e30088ade7f --- /dev/null +++ b/unit-core/lombok.config @@ -0,0 +1,2 @@ +config.stopBubbling = true +lombok.addLombokGeneratedAnnotation = true diff --git a/unit-core/pom.xml b/unit-core/pom.xml index 1f10116c2a9d1693407c1e746df2ec13e95c3177..f295ddd0972d1b6322ba7cdf89ccc8493ee44de2 100644 --- a/unit-core/pom.xml +++ b/unit-core/pom.xml @@ -214,6 +214,13 @@ <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.11</version> + <configuration> + <excludes> + <exclude>org/opengroup/osdu/unitservice/configuration/*</exclude> + <exclude>org/opengroup/osdu/unitservice/swagger/*</exclude> + </excludes> + </configuration> + <executions> <execution> <goals> diff --git a/unit-core/src/test/java/org/opengroup/osdu/unitservice/api/HealthCheckTest.java b/unit-core/src/test/java/org/opengroup/osdu/unitservice/api/HealthCheckTest.java new file mode 100644 index 0000000000000000000000000000000000000000..adf8695554f85b4c098c00b487ed9b5f5efffbd7 --- /dev/null +++ b/unit-core/src/test/java/org/opengroup/osdu/unitservice/api/HealthCheckTest.java @@ -0,0 +1,28 @@ +package org.opengroup.osdu.unitservice.api; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.http.HttpStatus; + +import static org.junit.Assert.assertEquals; + +public class HealthCheckTest { + + private HealthCheck sut; + + @Before + public void setup() { + this.sut = new HealthCheck(); + } + + @Test + public void should_returnHttp200_when_checkLiveness() { + assertEquals(HttpStatus.OK, this.sut.livenessCheck().getStatusCode()); + } + + @Test + public void should_returnHttp200_when_checkReadiness() { + assertEquals(HttpStatus.OK, this.sut.readinessCheck().getStatusCode()); + } + +} diff --git a/unit-core/src/test/java/org/opengroup/osdu/unitservice/api/InfoApiTest.java b/unit-core/src/test/java/org/opengroup/osdu/unitservice/api/InfoApiTest.java new file mode 100644 index 0000000000000000000000000000000000000000..ca5a6b535d93b1881b38e5abd96ee7d9d4ef13b2 --- /dev/null +++ b/unit-core/src/test/java/org/opengroup/osdu/unitservice/api/InfoApiTest.java @@ -0,0 +1,40 @@ +package org.opengroup.osdu.unitservice.api; + +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.info.VersionInfoBuilder; +import org.opengroup.osdu.core.common.model.info.VersionInfo; +import java.io.IOException; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class InfoApiTest { + + @InjectMocks + private InfoApi sut; + + @Mock + private VersionInfoBuilder versionInfoBuilder; + + @Test + public void should_return200_getVersionInfo() throws IOException { + VersionInfo expectedVersionInfo = VersionInfo.builder() + .groupId("group") + .artifactId("artifact") + .version("0.1.0") + .buildTime("1000") + .branch("master") + .commitId("7777") + .commitMessage("Test commit") + .build(); + when(versionInfoBuilder.buildVersionInfo()).thenReturn(expectedVersionInfo); + + VersionInfo actualVersionInfo = this.sut.info(); + + assertEquals(expectedVersionInfo, actualVersionInfo); + } +} diff --git a/unit-core/src/test/java/org/opengroup/osdu/unitservice/middleware/GlobalExceptionMapperTest.java b/unit-core/src/test/java/org/opengroup/osdu/unitservice/middleware/GlobalExceptionMapperTest.java index 5f57e8418b576c2dfac80ddd5a947273288bd6c5..32defe9558571a497f6d205084ad77765bcf7580 100644 --- a/unit-core/src/test/java/org/opengroup/osdu/unitservice/middleware/GlobalExceptionMapperTest.java +++ b/unit-core/src/test/java/org/opengroup/osdu/unitservice/middleware/GlobalExceptionMapperTest.java @@ -11,9 +11,10 @@ import org.opengroup.osdu.unitservice.util.AppError; import org.opengroup.osdu.unitservice.util.AppException; import org.junit.Test; import org.springframework.http.ResponseEntity; - +import java.io.IOException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; @RunWith(MockitoJUnitRunner.class) public class GlobalExceptionMapperTest { @@ -62,4 +63,18 @@ public class GlobalExceptionMapperTest { assertEquals("Bad Request", body.getReason()); Mockito.verify(jaxRsDpsLog).error(exception.getError().getMessage(), exception); } + + @Test + public void should_handleIOException_andReturnInternalServerError() { + IOException exception = new IOException("IO error"); + + ResponseEntity<AppError> response = globalExceptionMapper.handleIOException(exception); + AppError body = response.getBody(); + assertNotNull(body); + assertEquals(INTERNAL_SERVER_ERROR.value(), body.getCode()); + assertEquals("IO error", body.getMessage()); + assertEquals("IOException", body.getReason()); + Mockito.verify(jaxRsDpsLog).error(Mockito.eq("IO error"), Mockito.any(AppException.class)); + } + } diff --git a/unit-core/src/test/java/org/opengroup/osdu/unitservice/middleware/ResponseHeaderFilterTest.java b/unit-core/src/test/java/org/opengroup/osdu/unitservice/middleware/ResponseHeaderFilterTest.java new file mode 100644 index 0000000000000000000000000000000000000000..48726bff57610cdc33bdc0d8551f739925abaea6 --- /dev/null +++ b/unit-core/src/test/java/org/opengroup/osdu/unitservice/middleware/ResponseHeaderFilterTest.java @@ -0,0 +1,62 @@ +package org.opengroup.osdu.unitservice.middleware; + +import org.junit.After; +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.ResponseHeadersFactory; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import jakarta.servlet.FilterChain; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.mockito.Mockito.never; + +@RunWith(MockitoJUnitRunner.class) +public class ResponseHeaderFilterTest { + + @Mock + private DpsHeaders dpsHeaders; + + @Mock + private ResponseHeadersFactory responseHeadersFactory; + + @Mock + private HttpServletRequest httpServletRequest; + + @Mock + private HttpServletResponse httpServletResponse; + + @Mock + private FilterChain filterChain; + + @InjectMocks + private ResponseHeaderFilter responseHeaderFilter; + + @Test + public void test_doFilter_Handles_OptionsRequest() throws Exception { + when(httpServletRequest.getMethod()).thenReturn("OPTIONS"); + + responseHeaderFilter.doFilter(httpServletRequest, httpServletResponse, filterChain); + + verify(httpServletResponse).setStatus(HttpServletResponse.SC_OK); + } + + @Test + public void test_doFilter_Handles_GETRequest() throws Exception { + when(httpServletRequest.getMethod()).thenReturn("GET"); + + responseHeaderFilter.doFilter(httpServletRequest, httpServletResponse, filterChain); + + verify(httpServletResponse, never()).setStatus(HttpServletResponse.SC_OK); + } + + @After + public void tearDown() { + responseHeaderFilter.destroy(); + } + +} diff --git a/unit-core/src/test/java/org/opengroup/osdu/unitservice/middleware/UnitFilterTest.java b/unit-core/src/test/java/org/opengroup/osdu/unitservice/middleware/UnitFilterTest.java new file mode 100644 index 0000000000000000000000000000000000000000..02777f03c7b416771457ea852cbb0ea03739169a --- /dev/null +++ b/unit-core/src/test/java/org/opengroup/osdu/unitservice/middleware/UnitFilterTest.java @@ -0,0 +1,68 @@ +package org.opengroup.osdu.unitservice.middleware; + +import jakarta.servlet.ServletException; +import org.junit.After; +import org.junit.Before; +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.ResponseHeadersFactory; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Map; +import static org.mockito.Mockito.verify; +import static org.powermock.api.mockito.PowerMockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class UnitFilterTest { + + @Mock + private DpsHeaders dpsHeaders; + + @Mock + private ResponseHeadersFactory responseHeadersFactory; + + @Mock + private FilterChain filterChain; + + @Mock + private ServletRequest servletRequest; + + @Mock + private HttpServletResponse httpServletResponse; + + @InjectMocks + private UnitFilter unitFilter; + + @Before + public void setUp() { + unitFilter.ACCESS_CONTROL_ALLOW_ORIGIN_DOMAINS = "*"; + } + + @Test + public void should_AddHeadersIn_doFilter() throws IOException, ServletException { + // Arrange + when(responseHeadersFactory.getResponseHeaders("*")).thenReturn(Map.of("Custom-Header", "Value")); + when(dpsHeaders.getCorrelationId()).thenReturn("correlation-id"); + + // Act + unitFilter.doFilter(servletRequest, httpServletResponse, filterChain); + + // Assert + verify(filterChain).doFilter(servletRequest, httpServletResponse); + verify(dpsHeaders).addCorrelationIdIfMissing(); + verify(httpServletResponse).setHeader("Custom-Header", "Value"); + verify(httpServletResponse).addHeader(DpsHeaders.CORRELATION_ID, "correlation-id"); + } + + @After + public void tearDown() { + unitFilter.destroy(); + } + +}