Skip to content

Commit 7b7a11d

Browse files
committed
Merge pull request #45161 from nosan
* pr/45161: Add more tests for BootstrapExecutorConfiguration Closes gh-45161
2 parents 06cc550 + 409f74a commit 7b7a11d

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

+51-29
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;
@@ -381,42 +379,66 @@ void enableAsyncUsesAutoConfiguredOneByDefaultEvenThoughSchedulingIsConfigured()
381379
}
382380

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

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

408428
@Test
409-
void shouldNotAliasIfApplicationTaskExecutorIsMissing() {
410-
ExecutorService executor = Executors.newSingleThreadExecutor();
411-
try {
412-
this.contextRunner.withBean("customExecutor", Executor.class, () -> executor).run((context) -> {
413-
assertThat(context).doesNotHaveBean("applicationTaskExecutor");
414-
assertThat(context).doesNotHaveBean("bootstrapExecutor");
429+
void shouldNotAliasApplicationTaskExecutorWhenBootstrapExecutorAliasIsDefined() {
430+
Executor executor = Runnable::run;
431+
this.contextRunner.withBean("applicationTaskExecutor", Executor.class, () -> executor)
432+
.withBean("customExecutor", Executor.class, () -> createCustomAsyncExecutor("custom"))
433+
.withInitializer((context) -> context.getBeanFactory().registerAlias("customExecutor", "bootstrapExecutor"))
434+
.run((context) -> {
435+
assertThat(context.getBeansOfType(Executor.class)).hasSize(2);
436+
assertThat(context).hasBean("applicationTaskExecutor").hasBean("customExecutor");
437+
assertThat(context.getAliases("applicationTaskExecutor")).isEmpty();
438+
assertThat(context.getAliases("customExecutor")).contains("bootstrapExecutor");
439+
assertThat(context.getBean("bootstrapExecutor")).isNotSameAs(context.getBean("applicationTaskExecutor"))
440+
.isSameAs(context.getBean("customExecutor"));
415441
});
416-
}
417-
finally {
418-
executor.shutdownNow();
419-
}
420442
}
421443

422444
private Executor createCustomAsyncExecutor(String threadNamePrefix) {

0 commit comments

Comments
 (0)