Support pause/resume for consumer bindings with multiple destinations from BindingsLifecycleController
add test queryng a binding that not exists return empty list remove unnecessary formatting changes Resolves #2660 Resolves #2658
This commit is contained in:
committed by
Oleg Zhurakousky
parent
c875670b73
commit
807f51f175
@@ -32,6 +32,8 @@ import java.util.function.Supplier;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.ValueSource;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.core.publisher.Sinks;
|
||||
@@ -102,7 +104,7 @@ public class ImplicitFunctionBindingTests {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings({"rawtypes" })
|
||||
@SuppressWarnings({"rawtypes"})
|
||||
@Test
|
||||
void testDisableAutodetect() {
|
||||
try (ConfigurableApplicationContext context = new SpringApplicationBuilder(
|
||||
@@ -111,10 +113,10 @@ public class ImplicitFunctionBindingTests {
|
||||
.run("--spring.jmx.enabled=false", "--spring.cloud.stream.function.autodetect=false")) {
|
||||
|
||||
BindingsLifecycleController ctrl = context.getBean(BindingsLifecycleController.class);
|
||||
Binding input = ctrl.queryState("echo-in-0");
|
||||
Binding output = ctrl.queryState("echo-out-0");
|
||||
assertThat(input).isNull();
|
||||
assertThat(output).isNull();
|
||||
var input = ctrl.queryState("echo-in-0");
|
||||
var output = ctrl.queryState("echo-out-0");
|
||||
assertThat(input).isEmpty();
|
||||
assertThat(output).isEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,14 +130,55 @@ public class ImplicitFunctionBindingTests {
|
||||
.run("--spring.jmx.enabled=false")) {
|
||||
|
||||
BindingsLifecycleController ctrl = context.getBean(BindingsLifecycleController.class);
|
||||
Binding input = ctrl.queryState("echo-in-0");
|
||||
Binding input = ctrl.queryState("echo-in-0").get(0);
|
||||
assertThat(input.isRunning()).isTrue();
|
||||
ctrl.changeState("echo-in-0", State.STOPPED);
|
||||
assertThat(input.isRunning()).isFalse();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
@ParameterizedTest
|
||||
@ValueSource(strings = {"single-destination", "destination1,destination2,destination3"})
|
||||
void testGh2658_WithMultipleDestinations(String destination) {
|
||||
try (ConfigurableApplicationContext context = new SpringApplicationBuilder(
|
||||
TestChannelBinderConfiguration.getCompleteConfiguration(SingleConsumerWithMultipleDestinationConfiguration.class))
|
||||
.web(WebApplicationType.NONE)
|
||||
.run("--spring.jmx.enabled=false",
|
||||
"--spring.cloud.function.definition=consumerMultiple",
|
||||
"--spring.cloud.stream.bindings.consumerMultiple-in-0.group=group",
|
||||
"--spring.cloud.stream.bindings.consumerMultiple-in-0.destination=" + destination)) {
|
||||
|
||||
BindingsLifecycleController ctrl = context.getBean(BindingsLifecycleController.class);
|
||||
var multipleInput = ctrl.queryState("consumerMultiple-in-0");
|
||||
|
||||
assertThat(multipleInput).hasSize(destination.split(",").length);
|
||||
multipleInput.stream().forEach(binding -> assertThat(binding.isRunning()).isTrue());
|
||||
|
||||
ctrl.changeState("consumerMultiple-in-0", State.STOPPED);
|
||||
multipleInput.stream().forEach(binding -> assertThat(binding.isRunning()).isFalse());
|
||||
|
||||
ctrl.changeState("consumerMultiple-in-0", State.STARTED);
|
||||
multipleInput.stream().forEach(binding -> assertThat(binding.isRunning()).isTrue());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGh2658_queryBindingThatNotExists() {
|
||||
try (ConfigurableApplicationContext context = new SpringApplicationBuilder(
|
||||
TestChannelBinderConfiguration.getCompleteConfiguration(SingleConsumerWithMultipleDestinationConfiguration.class))
|
||||
.web(WebApplicationType.NONE)
|
||||
.run("--spring.jmx.enabled=false",
|
||||
"--spring.cloud.function.definition=consumerMultiple",
|
||||
"--spring.cloud.stream.bindings.consumerMultiple-in-0.group=group",
|
||||
"--spring.cloud.stream.bindings.consumerMultiple-in-0.destination=destination")) {
|
||||
|
||||
BindingsLifecycleController ctrl = context.getBean(BindingsLifecycleController.class);
|
||||
var inputBindingList = ctrl.queryState("bindingNotExist-in-0");
|
||||
assertThat(inputBindingList).isEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
@Test
|
||||
void dynamicBindingTestWithFunctionRegistrationAndExplicitDestination() {
|
||||
try (ConfigurableApplicationContext context = new SpringApplicationBuilder(
|
||||
@@ -1563,6 +1606,17 @@ public class ImplicitFunctionBindingTests {
|
||||
}
|
||||
}
|
||||
|
||||
@EnableAutoConfiguration
|
||||
public static class SingleConsumerWithMultipleDestinationConfiguration {
|
||||
|
||||
@Bean
|
||||
public Consumer<String> consumerMultiple() {
|
||||
return value -> {
|
||||
System.out.println(value);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public static class Person {
|
||||
private String name;
|
||||
private int id;
|
||||
|
||||
Reference in New Issue
Block a user