From 9e2cbf49dd39a4394f2f5848835813ad5695440c Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Mon, 22 Oct 2018 18:34:49 +0200 Subject: [PATCH] Added POJO test for 'lite' server scenario polishing --- .../cloud/function/web/RequestProcessor.java | 2 +- .../function/FunctionEndpointInitializer.java | 6 +-- .../web/flux/HeadersToMessageTests.java | 44 ++++++++++++++++++- 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/RequestProcessor.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/RequestProcessor.java index e8bf0d38c..58a34fc1e 100644 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/RequestProcessor.java +++ b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/RequestProcessor.java @@ -252,7 +252,7 @@ public class RequestProcessor { private final Supplier> supplier; - private MultiValueMap params = new LinkedMultiValueMap<>(); + private final MultiValueMap params = new LinkedMultiValueMap<>(); private HttpHeaders headers = new HttpHeaders(); diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/function/FunctionEndpointInitializer.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/function/FunctionEndpointInitializer.java index 2324248fa..309ce854f 100644 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/function/FunctionEndpointInitializer.java +++ b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/function/FunctionEndpointInitializer.java @@ -47,6 +47,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.http.codec.ServerCodecConfigurer; import org.springframework.http.server.reactive.HttpHandler; import org.springframework.http.server.reactive.ReactorHttpHandlerAdapter; +import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.web.reactive.function.server.HandlerStrategies; import org.springframework.web.reactive.function.server.RouterFunction; @@ -179,6 +180,7 @@ class FunctionEndpointInitializer System.err.println("JVM running for " + uptime + "ms"); } catch (Throwable e) { + // ignore } } @@ -218,9 +220,7 @@ class FunctionEndpointFactory { logger.info("Found functions: " + names); if (handler != null) { logger.info("Configured function: " + handler); - if (!names.contains(handler)) { - throw new IllegalStateException("Cannot locate function: " + handler); - } + Assert.isTrue(names.contains(handler), "Cannot locate function: " + handler); return catalog.lookup(Function.class, handler); } return catalog.lookup(Function.class, names.iterator().next()); diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HeadersToMessageTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HeadersToMessageTests.java index dab837e4b..6a3e29c30 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HeadersToMessageTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HeadersToMessageTests.java @@ -40,6 +40,7 @@ import static org.junit.Assert.assertTrue; /** * + * @author Dave Syer * @author Oleg Zhurakousky * */ @@ -55,6 +56,7 @@ public class HeadersToMessageTests { @Test public void testBodyAndCustomHeaderFromMessagePropagation() throws Exception { + // test POJO paylod ResponseEntity postForEntity = rest.postForEntity( new URI("/functions/employee"), "{\"name\":\"Bob\",\"age\":25}", String.class); @@ -63,13 +65,23 @@ public class HeadersToMessageTests { assertEquals("application/xml", postForEntity.getHeaders().get("x-content-type").get(0)); assertEquals("bar", postForEntity.getHeaders().get("foo").get(0)); + + // test simple type payload + postForEntity = rest.postForEntity( + new URI("/functions/string"), "{\"name\":\"Bob\",\"age\":25}", + String.class); + assertEquals("{\"name\":\"Bob\",\"age\":25}", postForEntity.getBody()); + assertTrue(postForEntity.getHeaders().containsKey("x-content-type")); + assertEquals("application/xml", + postForEntity.getHeaders().get("x-content-type").get(0)); + assertEquals("bar", postForEntity.getHeaders().get("foo").get(0)); } @EnableAutoConfiguration @org.springframework.boot.test.context.TestConfiguration protected static class TestConfiguration { - @Bean({ "employee" }) - public Function, Message> function() { + @Bean({ "string" }) + public Function, Message> functiono() { return request -> { Message message = MessageBuilder.withPayload(request.getPayload()) .setHeader("X-Content-Type", "application/xml") @@ -77,5 +89,33 @@ public class HeadersToMessageTests { return message; }; } + + @Bean({ "employee" }) + public Function, Message> function1() { + return request -> { + Message message = MessageBuilder.withPayload(request.getPayload()) + .setHeader("X-Content-Type", "application/xml") + .setHeader("foo", "bar").build(); + return message; + }; + } + } + @SuppressWarnings("unused") // used by json converter + private static class Employee { + private String name; + private int age; + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public int getAge() { + return age; + } + public void setAge(int age) { + this.age = age; + } } }