GH-444 Fixed support for default function lookup

Given that function can be looked up with no definition, the fallback alternative should be 'spring.cloud.function.definition' property

Resolves #444
This commit is contained in:
Oleg Zhurakousky
2020-01-28 15:50:42 +01:00
parent 35d3c45959
commit d334ed609c
3 changed files with 32 additions and 1 deletions

View File

@@ -125,6 +125,9 @@ public class BeanFactoryAwareFunctionRegistry
@Override
@SuppressWarnings("unchecked")
public <T> 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;
}

View File

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

View File

@@ -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<String, String>`
* Main/Start class present, no Spring configuration