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:
Fernando Blanch
2023-02-28 22:04:11 +01:00
committed by Oleg Zhurakousky
parent c875670b73
commit 807f51f175
4 changed files with 76 additions and 22 deletions

View File

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