Fix un-ignored test - content-length should not be propagated

This commit is contained in:
Dave Syer
2018-07-23 14:08:59 +01:00
parent 60edebedcd
commit 41520c4ce4
3 changed files with 36 additions and 10 deletions

View File

@@ -96,8 +96,8 @@ public class FunctionController {
if (logger.isDebugEnabled()) {
logger.debug("Handled POST with function");
}
return ResponseEntity.ok().body(
debug ? result.log() : response(request, function, single, result));
return ResponseEntity.ok()
.body(response(request, function, single, result));
}
if (consumer != null) {
@@ -157,7 +157,7 @@ public class FunctionController {
@GetMapping(path = "/**")
@ResponseBody
public Publisher<?> get(WebRequest request) {
public ResponseEntity<Publisher<?>> get(WebRequest request) {
@SuppressWarnings("unchecked")
Function<Publisher<?>, Publisher<?>> function = (Function<Publisher<?>, Publisher<?>>) request
.getAttribute(WebRequestConstants.FUNCTION, WebRequest.SCOPE_REQUEST);
@@ -167,10 +167,19 @@ public class FunctionController {
String argument = (String) request.getAttribute(WebRequestConstants.ARGUMENT,
WebRequest.SCOPE_REQUEST);
Publisher<?> result;
if (function != null) {
return value(function, argument);
result = value(function, argument);
}
return response(request, supplier, true, supplier(supplier));
else {
result = response(request, supplier, true, supplier(supplier));
}
if (inspector.isMessage(function)) {
if (inspector.isMessage(function)) {
result = Flux.from(result).map(message -> MessageUtils.unpack(function, message));
}
}
return ResponseEntity.ok().body(result);
}
private Publisher<?> supplier(Supplier<Publisher<?>> supplier) {

View File

@@ -17,8 +17,10 @@ package org.springframework.cloud.function.web.util;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import org.springframework.http.HttpHeaders;
import org.springframework.messaging.MessageHeaders;
@@ -29,12 +31,19 @@ import org.springframework.messaging.MessageHeaders;
*/
public class HeaderUtils {
private static HttpHeaders IGNORED = new HttpHeaders();
static {
IGNORED.add(MessageHeaders.ID, "");
IGNORED.add(HttpHeaders.CONTENT_LENGTH, "0");
}
public static HttpHeaders fromMessage(MessageHeaders headers, HttpHeaders request) {
HttpHeaders result = new HttpHeaders();
for (String name : headers.keySet()) {
Object value = headers.get(name);
name = name.toLowerCase();
if (!MessageHeaders.ID.equals(name)) {
if (!IGNORED.containsKey(name)) {
Collection<?> values = multi(value);
for (Object object : values) {
result.set(name, object.toString());

View File

@@ -35,6 +35,7 @@ import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
@@ -262,7 +263,7 @@ public class RestApplicationTests {
}
@Test
@Ignore("FIXME")
// @Ignore("FIXME")
public void messages() throws Exception {
ResponseEntity<String> result = rest.exchange(RequestEntity
.post(new URI("/messages")).contentType(MediaType.APPLICATION_JSON)
@@ -349,9 +350,11 @@ public class RestApplicationTests {
@Test
public void singleValuedText() throws Exception {
ResponseEntity<String> result = rest.exchange(RequestEntity
.post(new URI("/bareUppercase")).contentType(MediaType.TEXT_PLAIN)
.body("foo"), String.class);
ResponseEntity<String> result = rest
.exchange(
RequestEntity.post(new URI("/bareUppercase"))
.contentType(MediaType.TEXT_PLAIN).body("foo"),
String.class);
assertThat(result.getBody()).isEqualTo("(FOO)");
}
@@ -471,6 +474,11 @@ public class RestApplicationTests {
private List<String> list = new ArrayList<>();
public static void main(String[] args) throws Exception {
SpringApplication.run(RestApplicationTests.ApplicationConfiguration.class,
args);
}
@Bean({ "uppercase", "transform", "post/more" })
public Function<Flux<String>, Flux<String>> uppercase() {
return flux -> flux.log()