diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java index 6bb5e7262..bec7213ba 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java @@ -125,6 +125,9 @@ public class BeanFactoryAwareFunctionRegistry @Override @SuppressWarnings("unchecked") public T lookup(String definition, String... acceptedOutputTypes) { + if (!StringUtils.hasText(definition)) { + definition = this.applicationContext.getEnvironment().getProperty("spring.cloud.function.definition"); + } Object function = this.proxyInvokerIfNecessary((FunctionInvocationWrapper) this.compose(null, definition, acceptedOutputTypes)); return (T) function; } diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java index 431b5a6c4..8e897fff2 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java @@ -69,6 +69,27 @@ public class BeanFactoryAwareFunctionRegistryTests { return catalog; } + @Test + public void testDefaultLookup() throws Exception { + FunctionCatalog catalog = this.configureCatalog(); + Object function = catalog.lookup(""); + assertThat(function).isNull(); + //== + System.setProperty("spring.cloud.function.definition", "uppercase"); + function = catalog.lookup(""); + assertThat(function).isNotNull(); + Field field = ReflectionUtils.findField(FunctionInvocationWrapper.class, "composed"); + field.setAccessible(true); + assertThat(((boolean) field.get(function))).isFalse(); + //== + System.setProperty("spring.cloud.function.definition", "uppercase|uppercaseFlux"); + function = catalog.lookup(""); + assertThat(function).isNotNull(); + field = ReflectionUtils.findField(FunctionInvocationWrapper.class, "composed"); + field.setAccessible(true); + assertThat(((boolean) field.get(function))).isTrue(); + } + @Test public void testImperativeFunction() { FunctionCatalog catalog = this.configureCatalog(); @@ -530,6 +551,7 @@ public class BeanFactoryAwareFunctionRegistryTests { public void setId(int id) { this.id = id; } + @Override public String toString() { return "Person: " + name + "/" + id; } diff --git a/spring-cloud-function-deployer/src/test/java/org/springframework/cloud/function/deployer/FunctionDeployerTests.java b/spring-cloud-function-deployer/src/test/java/org/springframework/cloud/function/deployer/FunctionDeployerTests.java index 6a0000a05..d73d04840 100644 --- a/spring-cloud-function-deployer/src/test/java/org/springframework/cloud/function/deployer/FunctionDeployerTests.java +++ b/spring-cloud-function-deployer/src/test/java/org/springframework/cloud/function/deployer/FunctionDeployerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2020 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. @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Function; +import org.junit.Before; import org.junit.Test; import reactor.core.publisher.Flux; import reactor.util.function.Tuple2; @@ -42,6 +43,11 @@ import static org.assertj.core.api.Assertions.assertThat; */ public class FunctionDeployerTests { + @Before + public void before() { + System.clearProperty("spring.cloud.function.definition"); + } + /* * Target function `class UpperCaseFunction implements Function` * Main/Start class present, no Spring configuration