Multipart file tests reliably pass on Windows as well

Issue: SPR-14546
This commit is contained in:
Juergen Hoeller 2017-05-02 21:26:31 +02:00
parent 817e80c56b
commit b709c77329
3 changed files with 20 additions and 23 deletions

View File

@ -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);

View File

@ -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
} }
} }
} }

View File

@ -1,2 +1 @@
Lorem Lorem Ipsum.
Ipsum