diff --git a/CHANGELOG.md b/CHANGELOG.md index c2a150b..90be385 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- **Build**: Spring Boot is 4.1.1 (`spring-boot-starter-webmvc` + `spring-boot-starter-restclient`). - **Build**: Gradle wrapper is 8.14.6. - **Build**: `setupGitHooks` is no longer a dependency of `build` (submodule-safe / opt-in via `./gradlew setupGitHooks`). - **HTTP**: OkHttp is 5.5.0. The unsafe client does not follow redirects itself. Each hop selects the client for the `Location` host. diff --git a/build.gradle b/build.gradle index 3e000a6..6eadba4 100644 --- a/build.gradle +++ b/build.gradle @@ -36,7 +36,8 @@ dependencies { } // Spring Boot Starters - implementation libs.spring.boot.starter.web + implementation libs.spring.boot.starter.webmvc + implementation libs.spring.boot.starter.restclient implementation 'org.springframework.boot:spring-boot-starter-validation' implementation libs.spring.boot.starter.jdbc implementation libs.spring.boot.starter.actuator @@ -66,6 +67,8 @@ dependencies { testImplementation(libs.spring.boot.starter.test) { exclude group: 'com.vaadin.external.google', module: 'android-json' } + testImplementation libs.spring.boot.starter.webmvc.test + testImplementation libs.spring.boot.starter.jdbc.test testImplementation libs.h2 } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 99ca19e..2caaaf4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] # Spring Boot and related versions -spring-boot = "3.5.4" +spring-boot = "4.1.1" spring-dependency-management = "1.1.7" # Plugin versions @@ -16,10 +16,13 @@ okhttp3 = "5.5.0" handy-uri-templates = "2.1.8" [libraries] -spring-boot-starter-web = { group = "org.springframework.boot", name = "spring-boot-starter-web" } +spring-boot-starter-webmvc = { group = "org.springframework.boot", name = "spring-boot-starter-webmvc" } +spring-boot-starter-restclient = { group = "org.springframework.boot", name = "spring-boot-starter-restclient" } spring-boot-starter-jdbc = { group = "org.springframework.boot", name = "spring-boot-starter-jdbc" } spring-boot-starter-actuator = { group = "org.springframework.boot", name = "spring-boot-starter-actuator" } spring-boot-starter-test = { group = "org.springframework.boot", name = "spring-boot-starter-test" } +spring-boot-starter-webmvc-test = { group = "org.springframework.boot", name = "spring-boot-starter-webmvc-test" } +spring-boot-starter-jdbc-test = { group = "org.springframework.boot", name = "spring-boot-starter-jdbc-test" } spring-boot-starter-tomcat = { group = "org.springframework.boot", name = "spring-boot-starter-tomcat" } spring-boot-devtools = { group = "org.springframework.boot", name = "spring-boot-devtools" } h2 = { group = "com.h2database", name = "h2", version.ref = "h2" } diff --git a/src/main/java/org/sitmun/proxy/middleware/Application.java b/src/main/java/org/sitmun/proxy/middleware/Application.java index 66dc614..ce55308 100644 --- a/src/main/java/org/sitmun/proxy/middleware/Application.java +++ b/src/main/java/org/sitmun/proxy/middleware/Application.java @@ -2,7 +2,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) public class Application { diff --git a/src/main/java/org/sitmun/proxy/middleware/config/ProxyMiddlewareConfiguration.java b/src/main/java/org/sitmun/proxy/middleware/config/ProxyMiddlewareConfiguration.java index 8ec358e..557f71e 100644 --- a/src/main/java/org/sitmun/proxy/middleware/config/ProxyMiddlewareConfiguration.java +++ b/src/main/java/org/sitmun/proxy/middleware/config/ProxyMiddlewareConfiguration.java @@ -5,7 +5,7 @@ import org.sitmun.proxy.middleware.mbtiles.MbtilesProperties; import org.sitmun.proxy.middleware.protocols.wms.WmsCapabilitiesProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.boot.restclient.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; diff --git a/src/main/java/org/sitmun/proxy/middleware/controllers/MbtilesProxyController.java b/src/main/java/org/sitmun/proxy/middleware/controllers/MbtilesProxyController.java index ccdd250..9d972c4 100644 --- a/src/main/java/org/sitmun/proxy/middleware/controllers/MbtilesProxyController.java +++ b/src/main/java/org/sitmun/proxy/middleware/controllers/MbtilesProxyController.java @@ -1,6 +1,5 @@ package org.sitmun.proxy.middleware.controllers; -import com.fasterxml.jackson.databind.ObjectMapper; import org.sitmun.proxy.middleware.mbtiles.MbtilesDtos.ClientCreateRequest; import org.sitmun.proxy.middleware.mbtiles.MbtilesProxyService; import org.springframework.http.HttpHeaders; @@ -13,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import tools.jackson.databind.ObjectMapper; @RestController @RequestMapping("/proxy") diff --git a/src/main/java/org/sitmun/proxy/middleware/dto/ProxyProblemResponses.java b/src/main/java/org/sitmun/proxy/middleware/dto/ProxyProblemResponses.java index 2043dd1..4866876 100644 --- a/src/main/java/org/sitmun/proxy/middleware/dto/ProxyProblemResponses.java +++ b/src/main/java/org/sitmun/proxy/middleware/dto/ProxyProblemResponses.java @@ -3,13 +3,13 @@ import static org.sitmun.proxy.middleware.dto.ProblemTypes.*; import static org.springframework.http.MediaType.APPLICATION_PROBLEM_JSON; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import java.util.Map; import java.util.Optional; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.client.HttpClientErrorException; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; public final class ProxyProblemResponses { diff --git a/src/main/java/org/sitmun/proxy/middleware/mbtiles/JwtPrincipalExtractor.java b/src/main/java/org/sitmun/proxy/middleware/mbtiles/JwtPrincipalExtractor.java index 82fcbb7..10e6941 100644 --- a/src/main/java/org/sitmun/proxy/middleware/mbtiles/JwtPrincipalExtractor.java +++ b/src/main/java/org/sitmun/proxy/middleware/mbtiles/JwtPrincipalExtractor.java @@ -1,12 +1,12 @@ package org.sitmun.proxy.middleware.mbtiles; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.Optional; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; /** Decodes JWT payload claims without verifying the signature (backend verifies). */ @Component diff --git a/src/main/java/org/sitmun/proxy/middleware/mbtiles/MbtilesProxyService.java b/src/main/java/org/sitmun/proxy/middleware/mbtiles/MbtilesProxyService.java index 90131e9..aaebd84 100644 --- a/src/main/java/org/sitmun/proxy/middleware/mbtiles/MbtilesProxyService.java +++ b/src/main/java/org/sitmun/proxy/middleware/mbtiles/MbtilesProxyService.java @@ -7,7 +7,6 @@ import static org.sitmun.proxy.middleware.dto.ProxyProblemResponses.proxyInvalidRequest; import static org.sitmun.proxy.middleware.protocols.http.HttpRequestExecutor.isForwardableResponseHeader; -import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.util.Optional; import lombok.extern.slf4j.Slf4j; @@ -30,6 +29,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; +import tools.jackson.databind.ObjectMapper; @Service @Slf4j @@ -167,7 +167,7 @@ public ResponseEntity file(int appId, int terId, String authorization, String copyHeader(upstream, headers, HttpHeaders.CONTENT_TYPE); copyHeader(upstream, headers, HttpHeaders.CONTENT_LENGTH); copyHeader(upstream, headers, HttpHeaders.CONTENT_DISPOSITION); - if (!headers.containsKey(HttpHeaders.CONTENT_TYPE)) { + if (!headers.containsHeader(HttpHeaders.CONTENT_TYPE)) { headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); } StreamingResponseBody stream = diff --git a/src/main/java/org/sitmun/proxy/middleware/mbtiles/MbtilesUpstreamClient.java b/src/main/java/org/sitmun/proxy/middleware/mbtiles/MbtilesUpstreamClient.java index 9678edd..fe80818 100644 --- a/src/main/java/org/sitmun/proxy/middleware/mbtiles/MbtilesUpstreamClient.java +++ b/src/main/java/org/sitmun/proxy/middleware/mbtiles/MbtilesUpstreamClient.java @@ -1,6 +1,5 @@ package org.sitmun.proxy.middleware.mbtiles; -import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.io.InputStream; import java.time.Duration; @@ -14,6 +13,7 @@ import org.sitmun.proxy.middleware.protocols.http.HttpRequestExecutor; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import tools.jackson.databind.ObjectMapper; /** * Calls the configured MBTiles service. Never forwards client Authorization or proxy key headers. diff --git a/src/main/java/org/sitmun/proxy/middleware/service/RequestConfigurationService.java b/src/main/java/org/sitmun/proxy/middleware/service/RequestConfigurationService.java index d08099c..59c58b1 100644 --- a/src/main/java/org/sitmun/proxy/middleware/service/RequestConfigurationService.java +++ b/src/main/java/org/sitmun/proxy/middleware/service/RequestConfigurationService.java @@ -6,7 +6,6 @@ import static org.sitmun.proxy.middleware.dto.ProxyProblemResponses.backendUnavailable; import static org.sitmun.proxy.middleware.dto.ProxyProblemResponses.emptyBackendConfiguration; -import com.fasterxml.jackson.databind.ObjectMapper; import java.util.Locale; import java.util.Map; import lombok.extern.slf4j.Slf4j; @@ -28,6 +27,7 @@ import org.springframework.util.StringUtils; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; +import tools.jackson.databind.ObjectMapper; @Service @Slf4j diff --git a/src/test/java/org/sitmun/proxy/middleware/ProxyParameterizedJdbcIntegrationTest.java b/src/test/java/org/sitmun/proxy/middleware/ProxyParameterizedJdbcIntegrationTest.java index a09050e..4d0613e 100644 --- a/src/test/java/org/sitmun/proxy/middleware/ProxyParameterizedJdbcIntegrationTest.java +++ b/src/test/java/org/sitmun/proxy/middleware/ProxyParameterizedJdbcIntegrationTest.java @@ -9,7 +9,6 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; -import com.fasterxml.jackson.databind.ObjectMapper; import org.hamcrest.Matchers; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -19,9 +18,9 @@ import org.sitmun.proxy.middleware.test.fixtures.AuthorizationProxyFixtures; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.jdbc.test.autoconfigure.AutoConfigureTestDatabase; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; @@ -31,6 +30,7 @@ import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.web.client.RestTemplate; +import tools.jackson.databind.ObjectMapper; @SpringBootTest @AutoConfigureMockMvc diff --git a/src/test/java/org/sitmun/proxy/middleware/controllers/MbtilesProxyControllerTest.java b/src/test/java/org/sitmun/proxy/middleware/controllers/MbtilesProxyControllerTest.java index 831c59a..77ab724 100644 --- a/src/test/java/org/sitmun/proxy/middleware/controllers/MbtilesProxyControllerTest.java +++ b/src/test/java/org/sitmun/proxy/middleware/controllers/MbtilesProxyControllerTest.java @@ -14,7 +14,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import com.fasterxml.jackson.databind.ObjectMapper; import java.nio.charset.StandardCharsets; import java.time.Clock; import java.time.Duration; @@ -35,13 +34,14 @@ import org.sitmun.proxy.middleware.mbtiles.MbtilesRequestValidator; import org.sitmun.proxy.middleware.mbtiles.MbtilesUpstreamClient; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.webmvc.test.autoconfigure.WebMvcTest; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; import org.springframework.http.HttpHeaders; import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.web.servlet.MockMvc; +import tools.jackson.databind.ObjectMapper; @WebMvcTest(controllers = MbtilesProxyController.class) @Import({ diff --git a/src/test/java/org/sitmun/proxy/middleware/controllers/ProxyMiddlewareControllerMvcTest.java b/src/test/java/org/sitmun/proxy/middleware/controllers/ProxyMiddlewareControllerMvcTest.java index 04161e3..b034ab0 100644 --- a/src/test/java/org/sitmun/proxy/middleware/controllers/ProxyMiddlewareControllerMvcTest.java +++ b/src/test/java/org/sitmun/proxy/middleware/controllers/ProxyMiddlewareControllerMvcTest.java @@ -7,7 +7,7 @@ import org.junit.jupiter.api.Test; import org.sitmun.proxy.middleware.service.RequestConfigurationService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.webmvc.test.autoconfigure.WebMvcTest; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.test.context.bean.override.mockito.MockitoBean; diff --git a/src/test/java/org/sitmun/proxy/middleware/dto/ProxyProblemResponsesTest.java b/src/test/java/org/sitmun/proxy/middleware/dto/ProxyProblemResponsesTest.java index ec589dc..4b1f4ae 100644 --- a/src/test/java/org/sitmun/proxy/middleware/dto/ProxyProblemResponsesTest.java +++ b/src/test/java/org/sitmun/proxy/middleware/dto/ProxyProblemResponsesTest.java @@ -2,7 +2,6 @@ import static org.assertj.core.api.Assertions.assertThat; -import com.fasterxml.jackson.databind.ObjectMapper; import java.nio.charset.StandardCharsets; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; @@ -10,6 +9,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.client.HttpClientErrorException; +import tools.jackson.databind.ObjectMapper; class ProxyProblemResponsesTest { @@ -50,7 +50,7 @@ void hostileBackendProblemIdentityUsesLocalFallback( var response = ProxyProblemResponses.backendAuthorizationFailure(exception, objectMapper); assertThat(response.getStatusCode().value()).isEqualTo(status); - assertThat(response.getHeaders()).doesNotContainKey(HttpHeaders.WWW_AUTHENTICATE); + assertThat(response.getHeaders().headerNames()).doesNotContain(HttpHeaders.WWW_AUTHENTICATE); assertThat(response.getBody()).isNotNull(); assertThat(response.getBody().getType()).isEqualTo(expectedType); assertThat(response.getBody().getTitle()).isEqualTo(expectedTitle); diff --git a/src/test/java/org/sitmun/proxy/middleware/protocols/http/ExecutionRequestExecutorServiceTest.java b/src/test/java/org/sitmun/proxy/middleware/protocols/http/ExecutionRequestExecutorServiceTest.java index 670a379..ae3a23f 100644 --- a/src/test/java/org/sitmun/proxy/middleware/protocols/http/ExecutionRequestExecutorServiceTest.java +++ b/src/test/java/org/sitmun/proxy/middleware/protocols/http/ExecutionRequestExecutorServiceTest.java @@ -3,20 +3,20 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.sitmun.proxy.middleware.test.fixtures.AuthorizationProxyFixtures.*; -import com.fasterxml.jackson.databind.ObjectMapper; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.*; import org.junit.jupiter.api.TestInstance.Lifecycle; import org.sitmun.proxy.middleware.service.RequestExecutorService; import org.sitmun.proxy.middleware.service.UpstreamContentType; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.jdbc.test.autoconfigure.AutoConfigureTestDatabase; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.json.JacksonTester; import org.springframework.http.ResponseEntity; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; +import tools.jackson.databind.json.JsonMapper; @SpringBootTest @AutoConfigureTestDatabase @@ -33,7 +33,7 @@ class ExecutionRequestExecutorServiceTest { @BeforeAll void setup() { - ObjectMapper objectMapper = new ObjectMapper(); + JsonMapper objectMapper = new JsonMapper(); JacksonTester.initFields(this, objectMapper); } diff --git a/src/test/java/org/sitmun/proxy/middleware/protocols/http/HttpContextSecurityContractTest.java b/src/test/java/org/sitmun/proxy/middleware/protocols/http/HttpContextSecurityContractTest.java index b1913b1..bd988a2 100644 --- a/src/test/java/org/sitmun/proxy/middleware/protocols/http/HttpContextSecurityContractTest.java +++ b/src/test/java/org/sitmun/proxy/middleware/protocols/http/HttpContextSecurityContractTest.java @@ -8,18 +8,18 @@ import static org.sitmun.proxy.middleware.protocols.http.HttpSecurityConstants.TYPE_HTTP; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import java.util.Map; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.sitmun.proxy.middleware.dto.ConfigProxyDto; import org.sitmun.proxy.middleware.dto.HttpSecurityDto; import org.sitmun.proxy.middleware.protocols.wms.WmsPayloadDto; +import tools.jackson.databind.json.JsonMapper; @DisplayName("HttpContextSecurity / HttpSecurityDto contract") class HttpContextSecurityContractTest { - private final ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules(); + private final JsonMapper objectMapper = new JsonMapper(); @Test @DisplayName("HttpSecurityDto is HttpContextSecurity and holds http/basic vs apiKey field shapes") diff --git a/src/test/java/org/sitmun/proxy/middleware/protocols/http/HttpRequestExecutorTest.java b/src/test/java/org/sitmun/proxy/middleware/protocols/http/HttpRequestExecutorTest.java index b068553..9400578 100644 --- a/src/test/java/org/sitmun/proxy/middleware/protocols/http/HttpRequestExecutorTest.java +++ b/src/test/java/org/sitmun/proxy/middleware/protocols/http/HttpRequestExecutorTest.java @@ -212,7 +212,7 @@ void shouldSanitizeUpstreamAuthorizationFailuresAsBadGateway(int upstreamStatus) // Then assertThat(result.getStatusCode().value()).isEqualTo(502); assertThat(UpstreamContentType.current()).isEqualTo("application/problem+json"); - assertThat(result.getHeaders()).doesNotContainKey(HttpHeaders.WWW_AUTHENTICATE); + assertThat(result.getHeaders().headerNames()).doesNotContain(HttpHeaders.WWW_AUTHENTICATE); assertThat(result.getBody()).isInstanceOf(ProblemDetail.class); ProblemDetail problem = (ProblemDetail) result.getBody(); assertThat(problem.getType()) diff --git a/src/test/java/org/sitmun/proxy/middleware/protocols/jdbc/ExecutionRequestExecutorServiceTest.java b/src/test/java/org/sitmun/proxy/middleware/protocols/jdbc/ExecutionRequestExecutorServiceTest.java index c488c67..b0130ff 100644 --- a/src/test/java/org/sitmun/proxy/middleware/protocols/jdbc/ExecutionRequestExecutorServiceTest.java +++ b/src/test/java/org/sitmun/proxy/middleware/protocols/jdbc/ExecutionRequestExecutorServiceTest.java @@ -8,7 +8,7 @@ import org.sitmun.proxy.middleware.service.RequestExecutorService; import org.sitmun.proxy.middleware.service.UpstreamContentType; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.jdbc.test.autoconfigure.AutoConfigureTestDatabase; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.ResponseEntity; import org.springframework.mock.web.MockHttpServletRequest; diff --git a/src/test/java/org/sitmun/proxy/middleware/protocols/wms/ExecutionRequestExecutorServiceTest.java b/src/test/java/org/sitmun/proxy/middleware/protocols/wms/ExecutionRequestExecutorServiceTest.java index 8457430..4641c7f 100644 --- a/src/test/java/org/sitmun/proxy/middleware/protocols/wms/ExecutionRequestExecutorServiceTest.java +++ b/src/test/java/org/sitmun/proxy/middleware/protocols/wms/ExecutionRequestExecutorServiceTest.java @@ -3,7 +3,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.sitmun.proxy.middleware.test.fixtures.AuthorizationProxyFixtures.*; -import com.fasterxml.jackson.databind.ObjectMapper; import java.util.Map; import okhttp3.MediaType; import okhttp3.Protocol; @@ -22,7 +21,7 @@ import org.sitmun.proxy.middleware.test.interceptors.HostnameCheck; import org.sitmun.proxy.middleware.test.interceptors.QueryCheck; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.jdbc.test.autoconfigure.AutoConfigureTestDatabase; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.json.JacksonTester; import org.springframework.http.HttpHeaders; @@ -30,6 +29,7 @@ import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; +import tools.jackson.databind.json.JsonMapper; @SpringBootTest @AutoConfigureTestDatabase @@ -46,7 +46,7 @@ class ExecutionRequestExecutorServiceTest { @BeforeAll void setup() { - ObjectMapper objectMapper = new ObjectMapper(); + JsonMapper objectMapper = new JsonMapper(); JacksonTester.initFields(this, objectMapper); } @@ -141,7 +141,7 @@ void upstreamAuthorizationFailureThroughDecoratorChain(int upstreamStatus) { requestExecutorService.executeRequest("https://proxy.example/proxy/1/2/WMS/3", payload); assertThat(response.getStatusCode().value()).isEqualTo(502); - assertThat(response.getHeaders()).doesNotContainKey(HttpHeaders.WWW_AUTHENTICATE); + assertThat(response.getHeaders().headerNames()).doesNotContain(HttpHeaders.WWW_AUTHENTICATE); assertThat(response.getBody()).isInstanceOf(ProblemDetail.class); var problem = (ProblemDetail) response.getBody(); assertThat(problem.getType()) diff --git a/src/test/java/org/sitmun/proxy/middleware/service/ExecutionRequestExecutorServiceTest.java b/src/test/java/org/sitmun/proxy/middleware/service/ExecutionRequestExecutorServiceTest.java index 02c8bc8..46abc1b 100644 --- a/src/test/java/org/sitmun/proxy/middleware/service/ExecutionRequestExecutorServiceTest.java +++ b/src/test/java/org/sitmun/proxy/middleware/service/ExecutionRequestExecutorServiceTest.java @@ -3,7 +3,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.sitmun.proxy.middleware.test.fixtures.AuthorizationProxyFixtures.*; -import com.fasterxml.jackson.databind.ObjectMapper; import java.nio.charset.StandardCharsets; import org.assertj.core.api.InstanceOfAssertFactories; import org.junit.jupiter.api.*; @@ -14,13 +13,14 @@ import org.sitmun.proxy.middleware.test.interceptors.HostnameCheck; import org.sitmun.proxy.middleware.test.interceptors.QueryCheck; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.jdbc.test.autoconfigure.AutoConfigureTestDatabase; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.json.JacksonTester; import org.springframework.http.ResponseEntity; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; +import tools.jackson.databind.json.JsonMapper; @SpringBootTest @AutoConfigureTestDatabase @@ -37,7 +37,7 @@ class ExecutionRequestExecutorServiceTest { @BeforeAll void setup() { - ObjectMapper objectMapper = new ObjectMapper(); + JsonMapper objectMapper = new JsonMapper(); JacksonTester.initFields(this, objectMapper); } diff --git a/src/test/java/org/sitmun/proxy/middleware/service/RequestConfigurationServiceTest.java b/src/test/java/org/sitmun/proxy/middleware/service/RequestConfigurationServiceTest.java index 1565312..7103a97 100644 --- a/src/test/java/org/sitmun/proxy/middleware/service/RequestConfigurationServiceTest.java +++ b/src/test/java/org/sitmun/proxy/middleware/service/RequestConfigurationServiceTest.java @@ -7,7 +7,6 @@ import static org.sitmun.proxy.middleware.config.ProxyMiddlewareConstants.TYPE_WMS; import static org.sitmun.proxy.middleware.config.ProxyMiddlewareConstants.TYPE_WMTS; -import com.fasterxml.jackson.databind.ObjectMapper; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; @@ -36,6 +35,7 @@ import org.springframework.test.util.ReflectionTestUtils; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; +import tools.jackson.databind.ObjectMapper; @ExtendWith(MockitoExtension.class) @DisplayName("RequestConfigurationService tests") @@ -225,7 +225,7 @@ void shouldPreserveSanitizedBackendAuthorizationProblemIdentity( // Then assertThat(result.getStatusCode().value()).isEqualTo(status); - assertThat(result.getHeaders()).doesNotContainKey(HttpHeaders.WWW_AUTHENTICATE); + assertThat(result.getHeaders().headerNames()).doesNotContain(HttpHeaders.WWW_AUTHENTICATE); assertThat(result.getBody()).isInstanceOf(ProblemDetail.class); ProblemDetail problem = (ProblemDetail) result.getBody(); assertThat(problem.getType()).isEqualTo(type); @@ -571,7 +571,7 @@ void requestIncludesProxyKeyHeaderForBackendAuthentication() { HttpEntity capturedEntity = httpEntityCaptor.getValue(); HttpHeaders headers = capturedEntity.getHeaders(); - assertThat(headers.containsKey(PROXY_MIDDLEWARE_KEY)).isTrue(); + assertThat(headers.containsHeader(PROXY_MIDDLEWARE_KEY)).isTrue(); assertThat(headers.getFirst(PROXY_MIDDLEWARE_KEY)).isEqualTo(SECRET); assertThat(headers.getFirst(HttpHeaders.AUTHORIZATION)).isEqualTo("Bearer " + token); } @@ -618,6 +618,6 @@ void requestWithNullTokenOmitsAuthorizationHeader() { assertThat(requestDto.getTerId()).isEqualTo(terId); assertThat(requestDto.getType()).isEqualTo(type); assertThat(requestDto.getTypeId()).isEqualTo(typeId); - assertThat(capturedEntity.getHeaders().containsKey(HttpHeaders.AUTHORIZATION)).isFalse(); + assertThat(capturedEntity.getHeaders().containsHeader(HttpHeaders.AUTHORIZATION)).isFalse(); } }