Commit 16edf72f authored by Andy Wilkinson's avatar Andy Wilkinson

Test support for HTTP range requests to endpoints returning a Resource

Closes gh-9978
parent 2e01d906
......@@ -447,7 +447,7 @@ public abstract class AbstractWebEndpointIntegrationTests<T extends Configurable
@Configuration
@Import(BaseConfiguration.class)
static class ResourceEndpointConfiguration {
protected static class ResourceEndpointConfiguration {
@Bean
public ResourceEndpoint resourceEndpoint() {
......
......@@ -31,12 +31,15 @@ import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.HttpHandler;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.reactive.config.EnableWebFlux;
import org.springframework.web.server.adapter.WebHttpHandlerBuilder;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Integration tests for web endpoints exposed using WebFlux.
*
......@@ -63,6 +66,18 @@ public class WebFluxEndpointIntegrationTests
.valueEquals("Access-Control-Allow-Methods", "GET,POST"));
}
@Test
public void readOperationsThatReturnAResourceSupportRangeRequests() {
load(ResourceEndpointConfiguration.class, (client) -> {
byte[] responseBody = client.get().uri("/resource")
.header("Range", "bytes=0-3").exchange().expectStatus()
.isEqualTo(HttpStatus.PARTIAL_CONTENT).expectHeader()
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.returnResult(byte[].class).getResponseBodyContent();
assertThat(responseBody).containsExactly(0, 1, 2, 3);
});
}
@Override
protected ReactiveWebServerApplicationContext createApplicationContext(
Class<?>... config) {
......
......@@ -28,11 +28,14 @@ import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebSe
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Integration tests for web endpoints exposed using Spring MVC.
*
......@@ -59,6 +62,18 @@ public class MvcWebEndpointIntegrationTests extends
.valueEquals("Access-Control-Allow-Methods", "GET,POST"));
}
@Test
public void readOperationsThatReturnAResourceSupportRangeRequests() {
load(ResourceEndpointConfiguration.class, (client) -> {
byte[] responseBody = client.get().uri("/resource")
.header("Range", "bytes=0-3").exchange().expectStatus()
.isEqualTo(HttpStatus.PARTIAL_CONTENT).expectHeader()
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.returnResult(byte[].class).getResponseBodyContent();
assertThat(responseBody).containsExactly(0, 1, 2, 3);
});
}
@Override
protected AnnotationConfigServletWebServerApplicationContext createApplicationContext(
Class<?>... config) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment