Add more tests for BootstrapExecutorConfiguration
See gh-45161 Signed-off-by: Dmytro Nosan <dimanosan@gmail.com>
This commit is contained in:
		
							parent
							
								
									06cc550524
								
							
						
					
					
						commit
						409f74acc6
					
				| 
						 | 
					@ -19,8 +19,6 @@ package org.springframework.boot.autoconfigure.task;
 | 
				
			||||||
import java.util.concurrent.CompletableFuture;
 | 
					import java.util.concurrent.CompletableFuture;
 | 
				
			||||||
import java.util.concurrent.CountDownLatch;
 | 
					import java.util.concurrent.CountDownLatch;
 | 
				
			||||||
import java.util.concurrent.Executor;
 | 
					import java.util.concurrent.Executor;
 | 
				
			||||||
import java.util.concurrent.ExecutorService;
 | 
					 | 
				
			||||||
import java.util.concurrent.Executors;
 | 
					 | 
				
			||||||
import java.util.concurrent.Future;
 | 
					import java.util.concurrent.Future;
 | 
				
			||||||
import java.util.concurrent.TimeUnit;
 | 
					import java.util.concurrent.TimeUnit;
 | 
				
			||||||
import java.util.concurrent.atomic.AtomicReference;
 | 
					import java.util.concurrent.atomic.AtomicReference;
 | 
				
			||||||
| 
						 | 
					@ -381,42 +379,66 @@ class TaskExecutionAutoConfigurationTests {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	void shouldAliasApplicationExecutorToBootstrapExecutor() {
 | 
						void shouldAliasApplicationTaskExecutorToBootstrapExecutor() {
 | 
				
			||||||
		this.contextRunner.run((context) -> {
 | 
							this.contextRunner.run((context) -> {
 | 
				
			||||||
			String[] aliases = context.getAliases("applicationTaskExecutor");
 | 
								assertThat(context).hasSingleBean(Executor.class)
 | 
				
			||||||
			assertThat(aliases).containsExactly("bootstrapExecutor");
 | 
									.hasBean("applicationTaskExecutor")
 | 
				
			||||||
 | 
									.hasBean("bootstrapExecutor");
 | 
				
			||||||
 | 
								assertThat(context.getAliases("applicationTaskExecutor")).containsExactly("bootstrapExecutor");
 | 
				
			||||||
 | 
								assertThat(context.getBean("bootstrapExecutor")).isSameAs(context.getBean("applicationTaskExecutor"));
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	void shouldNotAliasIfBootstrapExecutorIsDefined() {
 | 
						void shouldNotAliasApplicationTaskExecutorWhenBootstrapExecutorIsDefined() {
 | 
				
			||||||
		ExecutorService executor = Executors.newSingleThreadExecutor();
 | 
							this.contextRunner.withBean("applicationTaskExecutor", Executor.class, () -> createCustomAsyncExecutor("app-"))
 | 
				
			||||||
		try {
 | 
								.withBean("bootstrapExecutor", Executor.class, () -> createCustomAsyncExecutor("bootstrap-"))
 | 
				
			||||||
			this.contextRunner.withBean("applicationTaskExecutor", Executor.class, () -> executor)
 | 
								.run((context) -> {
 | 
				
			||||||
				.withBean("bootstrapExecutor", Executor.class, () -> executor)
 | 
									assertThat(context.getBeansOfType(Executor.class)).hasSize(2);
 | 
				
			||||||
				.run((context) -> {
 | 
									assertThat(context).hasBean("applicationTaskExecutor").hasBean("bootstrapExecutor");
 | 
				
			||||||
					assertThat(context).hasBean("applicationTaskExecutor");
 | 
									assertThat(context.getAliases("applicationTaskExecutor")).isEmpty();
 | 
				
			||||||
					String[] aliases = context.getAliases("applicationTaskExecutor");
 | 
									assertThat(context.getBean("bootstrapExecutor"))
 | 
				
			||||||
					assertThat(aliases).isEmpty();
 | 
										.isNotSameAs(context.getBean("applicationTaskExecutor"));
 | 
				
			||||||
				});
 | 
								});
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		finally {
 | 
					 | 
				
			||||||
			executor.shutdownNow();
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	void shouldNotAliasIfApplicationTaskExecutorIsMissing() {
 | 
						void shouldNotAliasApplicationTaskExecutorWhenApplicationTaskExecutorIsMissing() {
 | 
				
			||||||
		ExecutorService executor = Executors.newSingleThreadExecutor();
 | 
							this.contextRunner.withBean("customExecutor", Executor.class, () -> createCustomAsyncExecutor("custom-"))
 | 
				
			||||||
		try {
 | 
								.run((context) -> assertThat(context).hasSingleBean(Executor.class)
 | 
				
			||||||
			this.contextRunner.withBean("customExecutor", Executor.class, () -> executor).run((context) -> {
 | 
									.hasBean("customExecutor")
 | 
				
			||||||
				assertThat(context).doesNotHaveBean("applicationTaskExecutor");
 | 
									.doesNotHaveBean("applicationTaskExecutor")
 | 
				
			||||||
				assertThat(context).doesNotHaveBean("bootstrapExecutor");
 | 
									.doesNotHaveBean("bootstrapExecutor"));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						void shouldNotAliasApplicationTaskExecutorWhenBootstrapExecutorRegisteredAsSingleton() {
 | 
				
			||||||
 | 
							this.contextRunner.withBean("applicationTaskExecutor", Executor.class, () -> createCustomAsyncExecutor("app-"))
 | 
				
			||||||
 | 
								.withInitializer((context) -> context.getBeanFactory()
 | 
				
			||||||
 | 
									.registerSingleton("bootstrapExecutor", createCustomAsyncExecutor("bootstrap-")))
 | 
				
			||||||
 | 
								.run((context) -> {
 | 
				
			||||||
 | 
									assertThat(context.getBeansOfType(Executor.class)).hasSize(2);
 | 
				
			||||||
 | 
									assertThat(context).hasBean("applicationTaskExecutor").hasBean("bootstrapExecutor");
 | 
				
			||||||
 | 
									assertThat(context.getAliases("applicationTaskExecutor")).isEmpty();
 | 
				
			||||||
 | 
									assertThat(context.getBean("bootstrapExecutor"))
 | 
				
			||||||
 | 
										.isNotSameAs(context.getBean("applicationTaskExecutor"));
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						void shouldNotAliasApplicationTaskExecutorWhenBootstrapExecutorAliasIsDefined() {
 | 
				
			||||||
 | 
							Executor executor = Runnable::run;
 | 
				
			||||||
 | 
							this.contextRunner.withBean("applicationTaskExecutor", Executor.class, () -> executor)
 | 
				
			||||||
 | 
								.withBean("customExecutor", Executor.class, () -> createCustomAsyncExecutor("custom"))
 | 
				
			||||||
 | 
								.withInitializer((context) -> context.getBeanFactory().registerAlias("customExecutor", "bootstrapExecutor"))
 | 
				
			||||||
 | 
								.run((context) -> {
 | 
				
			||||||
 | 
									assertThat(context.getBeansOfType(Executor.class)).hasSize(2);
 | 
				
			||||||
 | 
									assertThat(context).hasBean("applicationTaskExecutor").hasBean("customExecutor");
 | 
				
			||||||
 | 
									assertThat(context.getAliases("applicationTaskExecutor")).isEmpty();
 | 
				
			||||||
 | 
									assertThat(context.getAliases("customExecutor")).contains("bootstrapExecutor");
 | 
				
			||||||
 | 
									assertThat(context.getBean("bootstrapExecutor")).isNotSameAs(context.getBean("applicationTaskExecutor"))
 | 
				
			||||||
 | 
										.isSameAs(context.getBean("customExecutor"));
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		finally {
 | 
					 | 
				
			||||||
			executor.shutdownNow();
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private Executor createCustomAsyncExecutor(String threadNamePrefix) {
 | 
						private Executor createCustomAsyncExecutor(String threadNamePrefix) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue