Skip to content

Commit 1bbe980

Browse files
committed
Add more tests for BootstrapExecutorConfiguration
Signed-off-by: Dmytro Nosan <[email protected]>
1 parent 10b15e3 commit 1bbe980

File tree

1 file changed

+51
-29
lines changed

1 file changed

+51
-29
lines changed

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfigurationTests.java

Lines changed: 51 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
import java.util.concurrent.CompletableFuture;
2020
import java.util.concurrent.CountDownLatch;
2121
import java.util.concurrent.Executor;
22-
import java.util.concurrent.ExecutorService;
23-
import java.util.concurrent.Executors;
2422
import java.util.concurrent.Future;
2523
import java.util.concurrent.TimeUnit;
2624
import java.util.concurrent.atomic.AtomicReference;
@@ -379,42 +377,66 @@ void enableAsyncUsesAutoConfiguredOneByDefaultEvenThoughSchedulingIsConfigured()
379377
}
380378

381379
@Test
382-
void shouldAliasApplicationExecutorToBootstrapExecutor() {
380+
void shouldAliasApplicationTaskExecutorToBootstrapExecutor() {
383381
this.contextRunner.run((context) -> {
384-
String[] aliases = context.getAliases("applicationTaskExecutor");
385-
assertThat(aliases).containsExactly("bootstrapExecutor");
382+
assertThat(context).hasSingleBean(Executor.class)
383+
.hasBean("applicationTaskExecutor")
384+
.hasBean("bootstrapExecutor");
385+
assertThat(context.getAliases("applicationTaskExecutor")).containsExactly("bootstrapExecutor");
386+
assertThat(context.getBean("bootstrapExecutor")).isSameAs(context.getBean("applicationTaskExecutor"));
386387
});
387388
}
388389

389390
@Test
390-
void shouldNotAliasIfBootstrapExecutorIsDefined() {
391-
ExecutorService executor = Executors.newSingleThreadExecutor();
392-
try {
393-
this.contextRunner.withBean("applicationTaskExecutor", Executor.class, () -> executor)
394-
.withBean("bootstrapExecutor", Executor.class, () -> executor)
395-
.run((context) -> {
396-
assertThat(context).hasBean("applicationTaskExecutor");
397-
String[] aliases = context.getAliases("applicationTaskExecutor");
398-
assertThat(aliases).isEmpty();
399-
});
400-
}
401-
finally {
402-
executor.shutdownNow();
403-
}
391+
void shouldNotAliasApplicationTaskExecutorWhenBootstrapExecutorIsDefined() {
392+
this.contextRunner.withBean("applicationTaskExecutor", Executor.class, () -> createCustomAsyncExecutor("app-"))
393+
.withBean("bootstrapExecutor", Executor.class, () -> createCustomAsyncExecutor("bootstrap-"))
394+
.run((context) -> {
395+
assertThat(context.getBeansOfType(Executor.class)).hasSize(2);
396+
assertThat(context).hasBean("applicationTaskExecutor").hasBean("bootstrapExecutor");
397+
assertThat(context.getAliases("applicationTaskExecutor")).isEmpty();
398+
assertThat(context.getBean("bootstrapExecutor"))
399+
.isNotSameAs(context.getBean("applicationTaskExecutor"));
400+
});
401+
}
402+
403+
@Test
404+
void shouldNotAliasApplicationTaskExecutorWhenApplicationTaskExecutorIsMissing() {
405+
this.contextRunner.withBean("customExecutor", Executor.class, () -> createCustomAsyncExecutor("custom-"))
406+
.run((context) -> assertThat(context).hasSingleBean(Executor.class)
407+
.hasBean("customExecutor")
408+
.doesNotHaveBean("applicationTaskExecutor")
409+
.doesNotHaveBean("bootstrapExecutor"));
410+
}
411+
412+
@Test
413+
void shouldNotAliasApplicationTaskExecutorWhenBootstrapExecutorRegisteredAsSingleton() {
414+
this.contextRunner.withBean("applicationTaskExecutor", Executor.class, () -> createCustomAsyncExecutor("app-"))
415+
.withInitializer((context) -> context.getBeanFactory()
416+
.registerSingleton("bootstrapExecutor", createCustomAsyncExecutor("bootstrap-")))
417+
.run((context) -> {
418+
assertThat(context.getBeansOfType(Executor.class)).hasSize(2);
419+
assertThat(context).hasBean("applicationTaskExecutor").hasBean("bootstrapExecutor");
420+
assertThat(context.getAliases("applicationTaskExecutor")).isEmpty();
421+
assertThat(context.getBean("bootstrapExecutor"))
422+
.isNotSameAs(context.getBean("applicationTaskExecutor"));
423+
});
404424
}
405425

406426
@Test
407-
void shouldNotAliasIfApplicationTaskExecutorIsMissing() {
408-
ExecutorService executor = Executors.newSingleThreadExecutor();
409-
try {
410-
this.contextRunner.withBean("customExecutor", Executor.class, () -> executor).run((context) -> {
411-
assertThat(context).doesNotHaveBean("applicationTaskExecutor");
412-
assertThat(context).doesNotHaveBean("bootstrapExecutor");
427+
void shouldNotAliasApplicationTaskExecutorWhenBootstrapExecutorAliasIsDefined() {
428+
Executor executor = Runnable::run;
429+
this.contextRunner.withBean("applicationTaskExecutor", Executor.class, () -> executor)
430+
.withBean("customExecutor", Executor.class, () -> createCustomAsyncExecutor("custom"))
431+
.withInitializer((context) -> context.getBeanFactory().registerAlias("customExecutor", "bootstrapExecutor"))
432+
.run((context) -> {
433+
assertThat(context.getBeansOfType(Executor.class)).hasSize(2);
434+
assertThat(context).hasBean("applicationTaskExecutor").hasBean("customExecutor");
435+
assertThat(context.getAliases("applicationTaskExecutor")).isEmpty();
436+
assertThat(context.getAliases("customExecutor")).contains("bootstrapExecutor");
437+
assertThat(context.getBean("bootstrapExecutor")).isNotSameAs(context.getBean("applicationTaskExecutor"))
438+
.isSameAs(context.getBean("customExecutor"));
413439
});
414-
}
415-
finally {
416-
executor.shutdownNow();
417-
}
418440
}
419441

420442
private Executor createCustomAsyncExecutor(String threadNamePrefix) {

0 commit comments

Comments
 (0)