Multipart file tests reliably pass on Windows as well
Issue: SPR-14546
This commit is contained in:
parent
817e80c56b
commit
b709c77329
|
|
@ -39,23 +39,17 @@ import org.springframework.mock.http.server.reactive.test.MockServerHttpRequest;
|
||||||
import org.springframework.util.LinkedMultiValueMap;
|
import org.springframework.util.LinkedMultiValueMap;
|
||||||
import org.springframework.util.MultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
||||||
|
|
||||||
import static java.util.Collections.emptyMap;
|
import static java.util.Collections.*;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.*;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.springframework.http.HttpHeaders.*;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.springframework.http.MediaType.*;
|
||||||
import static org.springframework.core.ResolvableType.forClassWithGenerics;
|
|
||||||
import static org.springframework.http.HttpHeaders.CONTENT_LENGTH;
|
|
||||||
import static org.springframework.http.HttpHeaders.CONTENT_TYPE;
|
|
||||||
import static org.springframework.http.MediaType.MULTIPART_FORM_DATA;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Sebastien Deleuze
|
* @author Sebastien Deleuze
|
||||||
*/
|
*/
|
||||||
public class SynchronossMultipartHttpMessageReaderTests {
|
public class SynchronossMultipartHttpMessageReaderTests {
|
||||||
|
|
||||||
private final HttpMessageReader<MultiValueMap<String, Part>> reader =
|
private final HttpMessageReader<MultiValueMap<String, Part>> reader = new SynchronossMultipartHttpMessageReader();
|
||||||
new SynchronossMultipartHttpMessageReader();
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -84,7 +78,7 @@ public class SynchronossMultipartHttpMessageReaderTests {
|
||||||
@Test
|
@Test
|
||||||
public void resolveParts() throws IOException {
|
public void resolveParts() throws IOException {
|
||||||
ServerHttpRequest request = generateMultipartRequest();
|
ServerHttpRequest request = generateMultipartRequest();
|
||||||
ResolvableType elementType = forClassWithGenerics(MultiValueMap.class, String.class, Part.class);
|
ResolvableType elementType = ResolvableType.forClassWithGenerics(MultiValueMap.class, String.class, Part.class);
|
||||||
MultiValueMap<String, Part> parts = this.reader.readMono(elementType, request, emptyMap()).block();
|
MultiValueMap<String, Part> parts = this.reader.readMono(elementType, request, emptyMap()).block();
|
||||||
assertEquals(2, parts.size());
|
assertEquals(2, parts.size());
|
||||||
|
|
||||||
|
|
@ -98,7 +92,7 @@ public class SynchronossMultipartHttpMessageReaderTests {
|
||||||
assertEquals(12, buffer.readableByteCount());
|
assertEquals(12, buffer.readableByteCount());
|
||||||
byte[] byteContent = new byte[12];
|
byte[] byteContent = new byte[12];
|
||||||
buffer.read(byteContent);
|
buffer.read(byteContent);
|
||||||
assertEquals("Lorem\nIpsum\n", new String(byteContent));
|
assertEquals("Lorem Ipsum.", new String(byteContent));
|
||||||
|
|
||||||
assertTrue(parts.containsKey("barPart"));
|
assertTrue(parts.containsKey("barPart"));
|
||||||
part = parts.getFirst("barPart");
|
part = parts.getFirst("barPart");
|
||||||
|
|
@ -111,10 +105,11 @@ public class SynchronossMultipartHttpMessageReaderTests {
|
||||||
@Test
|
@Test
|
||||||
public void bodyError() {
|
public void bodyError() {
|
||||||
ServerHttpRequest request = generateErrorMultipartRequest();
|
ServerHttpRequest request = generateErrorMultipartRequest();
|
||||||
ResolvableType elementType = forClassWithGenerics(MultiValueMap.class, String.class, Part.class);
|
ResolvableType elementType = ResolvableType.forClassWithGenerics(MultiValueMap.class, String.class, Part.class);
|
||||||
StepVerifier.create(this.reader.readMono(elementType, request, emptyMap())).verifyError();
|
StepVerifier.create(this.reader.readMono(elementType, request, emptyMap())).verifyError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private ServerHttpRequest generateMultipartRequest() throws IOException {
|
private ServerHttpRequest generateMultipartRequest() throws IOException {
|
||||||
HttpHeaders fooHeaders = new HttpHeaders();
|
HttpHeaders fooHeaders = new HttpHeaders();
|
||||||
fooHeaders.setContentType(MediaType.TEXT_PLAIN);
|
fooHeaders.setContentType(MediaType.TEXT_PLAIN);
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ package org.springframework.http.server.reactive;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
|
@ -31,20 +30,24 @@ import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.RequestEntity;
|
import org.springframework.http.RequestEntity;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.http.codec.multipart.Part;
|
||||||
import org.springframework.util.LinkedMultiValueMap;
|
import org.springframework.util.LinkedMultiValueMap;
|
||||||
import org.springframework.util.MultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
import org.springframework.http.codec.multipart.Part;
|
|
||||||
import org.springframework.web.server.ServerWebExchange;
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
import org.springframework.web.server.WebHandler;
|
import org.springframework.web.server.WebHandler;
|
||||||
import org.springframework.web.server.adapter.HttpWebHandlerAdapter;
|
import org.springframework.web.server.adapter.HttpWebHandlerAdapter;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sebastien Deleuze
|
||||||
|
*/
|
||||||
public class MultipartIntegrationTests extends AbstractHttpHandlerIntegrationTests {
|
public class MultipartIntegrationTests extends AbstractHttpHandlerIntegrationTests {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected HttpHandler createHttpHandler() {
|
protected HttpHandler createHttpHandler() {
|
||||||
HttpWebHandlerAdapter handler = new HttpWebHandlerAdapter(new CheckRequestHandler());
|
return new HttpWebHandlerAdapter(new CheckRequestHandler());
|
||||||
return handler;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -70,11 +73,11 @@ public class MultipartIntegrationTests extends AbstractHttpHandlerIntegrationTes
|
||||||
return parts;
|
return parts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class CheckRequestHandler implements WebHandler {
|
public static class CheckRequestHandler implements WebHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<Void> handle(ServerWebExchange exchange) {
|
public Mono<Void> handle(ServerWebExchange exchange) {
|
||||||
|
|
||||||
if (exchange.getRequest().getURI().getPath().equals("/form-parts")) {
|
if (exchange.getRequest().getURI().getPath().equals("/form-parts")) {
|
||||||
return assertGetFormParts(exchange);
|
return assertGetFormParts(exchange);
|
||||||
}
|
}
|
||||||
|
|
@ -106,7 +109,7 @@ public class MultipartIntegrationTests extends AbstractHttpHandlerIntegrationTes
|
||||||
assertEquals(12, buffer.readableByteCount());
|
assertEquals(12, buffer.readableByteCount());
|
||||||
byte[] byteContent = new byte[12];
|
byte[] byteContent = new byte[12];
|
||||||
buffer.read(byteContent);
|
buffer.read(byteContent);
|
||||||
assertEquals("Lorem\nIpsum\n", new String(byteContent));
|
assertEquals("Lorem Ipsum.", new String(byteContent));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertBarPart(Part part) {
|
private void assertBarPart(Part part) {
|
||||||
|
|
@ -117,4 +120,4 @@ public class MultipartIntegrationTests extends AbstractHttpHandlerIntegrationTes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1 @@
|
||||||
Lorem
|
Lorem Ipsum.
|
||||||
Ipsum
|
|
||||||
Loading…
Reference in New Issue