From 4837efdcca1c35b1cc7fb57db387307ca3608eec Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Thu, 8 Apr 2021 17:10:17 +0200 Subject: [PATCH] Add test for FunctionAroundWrapper --- .../catalog/SimpleFunctionRegistry.java | 4 +- .../context/catalog/MarcinSleuthTests.java | 86 +++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/MarcinSleuthTests.java diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java index 433f105e1..b436782dc 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java @@ -188,7 +188,9 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect logger.debug("Function '" + functionDefinition + "' is not found in cache"); } - function = this.wrapInAroundAviceIfNecessary(function); + if (function != null) { + function = this.wrapInAroundAviceIfNecessary(function); + } return (T) function; } diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/MarcinSleuthTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/MarcinSleuthTests.java new file mode 100644 index 000000000..59a07004c --- /dev/null +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/MarcinSleuthTests.java @@ -0,0 +1,86 @@ +/* + * Copyright 2021-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.function.context.catalog; + +import java.util.function.Function; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.cloud.function.context.FunctionCatalog; +import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry.FunctionInvocationWrapper; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.Message; +import org.springframework.messaging.support.MessageBuilder; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Oleg Zhurakousky + */ +public class MarcinSleuthTests { + + private ApplicationContext context; + + private FunctionCatalog configureCatalog(Class... configClass) { + this.context = new SpringApplicationBuilder(configClass) + .run("--logging.level.org.springframework.cloud.function=DEBUG", + "--spring.main.lazy-initialization=true"); + FunctionCatalog catalog = context.getBean(FunctionCatalog.class); + return catalog; + } + + @BeforeEach + public void before() { + System.clearProperty("spring.cloud.function.definition"); + } + + @Test + public void testMarcinHeaderInjection() { + FunctionCatalog catalog = this.configureCatalog(SampleFunctionConfiguration.class); + + FunctionInvocationWrapper function = catalog.lookup("echo", "application/json"); + Message result = (Message) function.apply(MessageBuilder.withPayload("hello").build()); + assertThat(result.getHeaders().get("his-name")).isEqualTo("marcin"); + } + + @EnableAutoConfiguration + @Configuration + protected static class SampleFunctionConfiguration { + + @Bean + public Function, Message> echo() { + return m -> m; + } + + @Bean + public FunctionAroundWrapper aroundWrapper() { + return new FunctionAroundWrapper() { + + @Override + protected Object doApply(Message input, + FunctionInvocationWrapper targetFunction) { + return targetFunction.apply(MessageBuilder.fromMessage(input).setHeader("his-name", "marcin").build()); + } + }; + } + } +}