diff --git a/spring-context/src/test/java/org/springframework/scheduling/concurrent/AbstractSchedulingTaskExecutorTests.java b/spring-context/src/test/java/org/springframework/scheduling/concurrent/AbstractSchedulingTaskExecutorTests.java index e2bd98762ef..e47417743f6 100644 --- a/spring-context/src/test/java/org/springframework/scheduling/concurrent/AbstractSchedulingTaskExecutorTests.java +++ b/spring-context/src/test/java/org/springframework/scheduling/concurrent/AbstractSchedulingTaskExecutorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,7 +55,7 @@ abstract class AbstractSchedulingTaskExecutorTests { @BeforeEach - void setUp(TestInfo testInfo) { + void setup(TestInfo testInfo) { this.testName = testInfo.getTestMethod().get().getName(); this.threadNamePrefix = this.testName + "-"; this.executor = buildExecutor(); @@ -84,11 +84,11 @@ abstract class AbstractSchedulingTaskExecutorTests { TestTask task = new TestTask(this.testName, 0); executor.execute(task); Awaitility.await() - .dontCatchUncaughtExceptions() - .atMost(1, TimeUnit.SECONDS) - .pollInterval(10, TimeUnit.MILLISECONDS) - .until(() -> task.exception.get() != null && task.exception.get().getMessage().equals( - "TestTask failure for test 'executeFailingRunnable': expectedRunCount:<0>, actualRunCount:<1>")); + .dontCatchUncaughtExceptions() + .atMost(1, TimeUnit.SECONDS) + .pollInterval(10, TimeUnit.MILLISECONDS) + .until(() -> task.exception.get() != null && task.exception.get().getMessage().equals( + "TestTask failure for test 'executeFailingRunnable': expectedRunCount:<0>, actualRunCount:<1>")); } @Test @@ -101,7 +101,7 @@ abstract class AbstractSchedulingTaskExecutorTests { } @Test - void submitFailingRunnable() throws Exception { + void submitFailingRunnable() { TestTask task = new TestTask(this.testName, 0); Future future = executor.submit(task); assertThatExceptionOfType(ExecutionException.class).isThrownBy(() -> @@ -121,31 +121,31 @@ abstract class AbstractSchedulingTaskExecutorTests { } @Test - void submitListenableRunnable() throws Exception { + void submitListenableRunnable() { TestTask task = new TestTask(this.testName, 1); // Act ListenableFuture future = executor.submitListenable(task); future.addCallback(result -> outcome = result, ex -> outcome = ex); // Assert Awaitility.await() - .atMost(1, TimeUnit.SECONDS) - .pollInterval(10, TimeUnit.MILLISECONDS) - .until(future::isDone); + .atMost(1, TimeUnit.SECONDS) + .pollInterval(10, TimeUnit.MILLISECONDS) + .until(future::isDone); assertThat(outcome).isNull(); assertThreadNamePrefix(task); } @Test - void submitFailingListenableRunnable() throws Exception { + void submitFailingListenableRunnable() { TestTask task = new TestTask(this.testName, 0); ListenableFuture future = executor.submitListenable(task); future.addCallback(result -> outcome = result, ex -> outcome = ex); Awaitility.await() - .dontCatchUncaughtExceptions() - .atMost(1, TimeUnit.SECONDS) - .pollInterval(10, TimeUnit.MILLISECONDS) - .until(() -> future.isDone() && outcome != null); + .dontCatchUncaughtExceptions() + .atMost(1, TimeUnit.SECONDS) + .pollInterval(10, TimeUnit.MILLISECONDS) + .until(() -> future.isDone() && outcome != null); assertThat(outcome.getClass()).isSameAs(RuntimeException.class); } @@ -159,14 +159,13 @@ abstract class AbstractSchedulingTaskExecutorTests { future1.get(1000, TimeUnit.MILLISECONDS); } catch (Exception ex) { - /* ignore */ + // ignore } Awaitility.await() - .atMost(4, TimeUnit.SECONDS) - .pollInterval(10, TimeUnit.MILLISECONDS) - .untilAsserted(() -> - assertThatExceptionOfType(CancellationException.class).isThrownBy(() -> - future2.get(1000, TimeUnit.MILLISECONDS))); + .atMost(4, TimeUnit.SECONDS) + .pollInterval(10, TimeUnit.MILLISECONDS) + .untilAsserted(() -> assertThatExceptionOfType(CancellationException.class) + .isThrownBy(() -> future2.get(1000, TimeUnit.MILLISECONDS))); } @Test @@ -178,11 +177,11 @@ abstract class AbstractSchedulingTaskExecutorTests { } @Test - void submitFailingCallable() throws Exception { + void submitFailingCallable() { TestCallable task = new TestCallable(this.testName, 0); Future future = executor.submit(task); - assertThatExceptionOfType(ExecutionException.class).isThrownBy(() -> - future.get(1000, TimeUnit.MILLISECONDS)); + assertThatExceptionOfType(ExecutionException.class) + .isThrownBy(() -> future.get(1000, TimeUnit.MILLISECONDS)); assertThat(future.isDone()).isTrue(); } @@ -196,42 +195,41 @@ abstract class AbstractSchedulingTaskExecutorTests { future1.get(1000, TimeUnit.MILLISECONDS); } catch (Exception ex) { - /* ignore */ + // ignore } Awaitility.await() - .atMost(4, TimeUnit.SECONDS) - .pollInterval(10, TimeUnit.MILLISECONDS) - .untilAsserted(() -> - assertThatExceptionOfType(CancellationException.class).isThrownBy(() -> - future2.get(1000, TimeUnit.MILLISECONDS))); + .atMost(4, TimeUnit.SECONDS) + .pollInterval(10, TimeUnit.MILLISECONDS) + .untilAsserted(() -> assertThatExceptionOfType(CancellationException.class) + .isThrownBy(() -> future2.get(1000, TimeUnit.MILLISECONDS))); } @Test - void submitListenableCallable() throws Exception { + void submitListenableCallable() { TestCallable task = new TestCallable(this.testName, 1); // Act ListenableFuture future = executor.submitListenable(task); future.addCallback(result -> outcome = result, ex -> outcome = ex); // Assert Awaitility.await() - .atMost(1, TimeUnit.SECONDS) - .pollInterval(10, TimeUnit.MILLISECONDS) - .until(() -> future.isDone() && outcome != null); + .atMost(1, TimeUnit.SECONDS) + .pollInterval(10, TimeUnit.MILLISECONDS) + .until(() -> future.isDone() && outcome != null); assertThat(outcome.toString().substring(0, this.threadNamePrefix.length())).isEqualTo(this.threadNamePrefix); } @Test - void submitFailingListenableCallable() throws Exception { + void submitFailingListenableCallable() { TestCallable task = new TestCallable(this.testName, 0); // Act ListenableFuture future = executor.submitListenable(task); future.addCallback(result -> outcome = result, ex -> outcome = ex); // Assert Awaitility.await() - .dontCatchUncaughtExceptions() - .atMost(1, TimeUnit.SECONDS) - .pollInterval(10, TimeUnit.MILLISECONDS) - .until(() -> future.isDone() && outcome != null); + .dontCatchUncaughtExceptions() + .atMost(1, TimeUnit.SECONDS) + .pollInterval(10, TimeUnit.MILLISECONDS) + .until(() -> future.isDone() && outcome != null); assertThat(outcome.getClass()).isSameAs(RuntimeException.class); } @@ -296,8 +294,9 @@ abstract class AbstractSchedulingTaskExecutorTests { } if (expectedRunCount >= 0) { if (actualRunCount.incrementAndGet() > expectedRunCount) { - RuntimeException exception = new RuntimeException(String.format("%s failure for test '%s': expectedRunCount:<%d>, actualRunCount:<%d>", - getClass().getSimpleName(), this.testName, expectedRunCount, actualRunCount.get())); + RuntimeException exception = new RuntimeException(String.format( + "%s failure for test '%s': expectedRunCount:<%d>, actualRunCount:<%d>", + getClass().getSimpleName(), this.testName, expectedRunCount, actualRunCount.get())); this.exception.set(exception); throw exception; } @@ -329,8 +328,9 @@ abstract class AbstractSchedulingTaskExecutorTests { } if (expectedRunCount >= 0) { if (actualRunCount.incrementAndGet() > expectedRunCount) { - throw new RuntimeException(String.format("%s failure for test '%s': expectedRunCount:<%d>, actualRunCount:<%d>", - getClass().getSimpleName(), this.testName, expectedRunCount, actualRunCount.get())); + throw new RuntimeException(String.format( + "%s failure for test '%s': expectedRunCount:<%d>, actualRunCount:<%d>", + getClass().getSimpleName(), this.testName, expectedRunCount, actualRunCount.get())); } } return Thread.currentThread().getName(); diff --git a/spring-context/src/test/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutorTests.java b/spring-context/src/test/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutorTests.java index 69f2f66e655..9cc17d75657 100644 --- a/spring-context/src/test/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutorTests.java +++ b/spring-context/src/test/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutorTests.java @@ -89,19 +89,24 @@ class ConcurrentTaskExecutorTests extends AbstractSchedulingTaskExecutorTests { private static class DecoratedRunnable implements Runnable { + @Override public void run() { } } + private static class RunnableDecorator implements TaskDecorator { + @Override public Runnable decorate(Runnable runnable) { return new DecoratedRunnable(); } } + private static class DecoratedExecutor implements Executor { + @Override public void execute(Runnable command) { Assert.state(command instanceof DecoratedRunnable, "TaskDecorator not applied"); diff --git a/spring-context/src/test/java/org/springframework/scheduling/concurrent/ScheduledExecutorFactoryBeanTests.java b/spring-context/src/test/java/org/springframework/scheduling/concurrent/ScheduledExecutorFactoryBeanTests.java index 140fe6ebf1e..610fd595c43 100644 --- a/spring-context/src/test/java/org/springframework/scheduling/concurrent/ScheduledExecutorFactoryBeanTests.java +++ b/spring-context/src/test/java/org/springframework/scheduling/concurrent/ScheduledExecutorFactoryBeanTests.java @@ -41,14 +41,14 @@ import static org.springframework.core.testfixture.TestGroup.LONG_RUNNING; class ScheduledExecutorFactoryBeanTests { @Test - void throwsExceptionIfPoolSizeIsLessThanZero() throws Exception { + void throwsExceptionIfPoolSizeIsLessThanZero() { ScheduledExecutorFactoryBean factory = new ScheduledExecutorFactoryBean(); assertThatIllegalArgumentException().isThrownBy(() -> factory.setPoolSize(-1)); } @Test @SuppressWarnings("serial") - void shutdownNowIsPropagatedToTheExecutorOnDestroy() throws Exception { + void shutdownNowIsPropagatedToTheExecutorOnDestroy() { final ScheduledExecutorService executor = mock(ScheduledExecutorService.class); ScheduledExecutorFactoryBean factory = new ScheduledExecutorFactoryBean() { @@ -66,7 +66,7 @@ class ScheduledExecutorFactoryBeanTests { @Test @SuppressWarnings("serial") - void shutdownIsPropagatedToTheExecutorOnDestroy() throws Exception { + void shutdownIsPropagatedToTheExecutorOnDestroy() { final ScheduledExecutorService executor = mock(ScheduledExecutorService.class); ScheduledExecutorFactoryBean factory = new ScheduledExecutorFactoryBean() { @@ -85,7 +85,7 @@ class ScheduledExecutorFactoryBeanTests { @Test @EnabledForTestGroups(LONG_RUNNING) - void oneTimeExecutionIsSetUpAndFiresCorrectly() throws Exception { + void oneTimeExecutionIsSetUpAndFiresCorrectly() { Runnable runnable = mock(Runnable.class); ScheduledExecutorFactoryBean factory = new ScheduledExecutorFactoryBean(); @@ -99,7 +99,7 @@ class ScheduledExecutorFactoryBeanTests { @Test @EnabledForTestGroups(LONG_RUNNING) - void fixedRepeatedExecutionIsSetUpAndFiresCorrectly() throws Exception { + void fixedRepeatedExecutionIsSetUpAndFiresCorrectly() { Runnable runnable = mock(Runnable.class); ScheduledExecutorTask task = new ScheduledExecutorTask(runnable); @@ -117,7 +117,7 @@ class ScheduledExecutorFactoryBeanTests { @Test @EnabledForTestGroups(LONG_RUNNING) - void fixedRepeatedExecutionIsSetUpAndFiresCorrectlyAfterException() throws Exception { + void fixedRepeatedExecutionIsSetUpAndFiresCorrectlyAfterException() { Runnable runnable = mock(Runnable.class); willThrow(new IllegalStateException()).given(runnable).run(); @@ -137,7 +137,7 @@ class ScheduledExecutorFactoryBeanTests { @Test @EnabledForTestGroups(LONG_RUNNING) - void withInitialDelayRepeatedExecutionIsSetUpAndFiresCorrectly() throws Exception { + void withInitialDelayRepeatedExecutionIsSetUpAndFiresCorrectly() { Runnable runnable = mock(Runnable.class); ScheduledExecutorTask task = new ScheduledExecutorTask(runnable); @@ -157,7 +157,7 @@ class ScheduledExecutorFactoryBeanTests { @Test @EnabledForTestGroups(LONG_RUNNING) - void withInitialDelayRepeatedExecutionIsSetUpAndFiresCorrectlyAfterException() throws Exception { + void withInitialDelayRepeatedExecutionIsSetUpAndFiresCorrectlyAfterException() { Runnable runnable = mock(Runnable.class); willThrow(new IllegalStateException()).given(runnable).run(); @@ -179,7 +179,7 @@ class ScheduledExecutorFactoryBeanTests { @Test @SuppressWarnings("serial") - void settingThreadFactoryToNullForcesUseOfDefaultButIsOtherwiseCool() throws Exception { + void settingThreadFactoryToNullForcesUseOfDefaultButIsOtherwiseCool() { ScheduledExecutorFactoryBean factory = new ScheduledExecutorFactoryBean() { @Override protected ScheduledExecutorService createExecutor(int poolSize, ThreadFactory threadFactory, RejectedExecutionHandler rejectedExecutionHandler) { @@ -195,7 +195,7 @@ class ScheduledExecutorFactoryBeanTests { @Test @SuppressWarnings("serial") - void settingRejectedExecutionHandlerToNullForcesUseOfDefaultButIsOtherwiseCool() throws Exception { + void settingRejectedExecutionHandlerToNullForcesUseOfDefaultButIsOtherwiseCool() { ScheduledExecutorFactoryBean factory = new ScheduledExecutorFactoryBean() { @Override protected ScheduledExecutorService createExecutor(int poolSize, ThreadFactory threadFactory, RejectedExecutionHandler rejectedExecutionHandler) { @@ -210,7 +210,7 @@ class ScheduledExecutorFactoryBeanTests { } @Test - void objectTypeReportsCorrectType() throws Exception { + void objectTypeReportsCorrectType() { ScheduledExecutorFactoryBean factory = new ScheduledExecutorFactoryBean(); assertThat(factory.getObjectType()).isEqualTo(ScheduledExecutorService.class); } diff --git a/spring-context/src/test/java/org/springframework/scheduling/concurrent/ThreadPoolTaskExecutorTests.java b/spring-context/src/test/java/org/springframework/scheduling/concurrent/ThreadPoolTaskExecutorTests.java index 0723a27abf7..eada6603a02 100644 --- a/spring-context/src/test/java/org/springframework/scheduling/concurrent/ThreadPoolTaskExecutorTests.java +++ b/spring-context/src/test/java/org/springframework/scheduling/concurrent/ThreadPoolTaskExecutorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,8 +26,8 @@ import org.junit.jupiter.api.Test; import org.springframework.core.task.AsyncListenableTaskExecutor; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; import static org.assertj.core.api.Assertions.assertThatIllegalStateException; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.InstanceOfAssertFactories.type; /** @@ -67,8 +67,7 @@ class ThreadPoolTaskExecutorTests extends AbstractSchedulingTaskExecutorTests { assertThat(executor.getCorePoolSize()).isEqualTo(1); assertThat(executor.getThreadPoolExecutor().getCorePoolSize()).isEqualTo(1); - assertThatThrownBy(() -> executor.setCorePoolSize(-1)) - .isInstanceOf(IllegalArgumentException.class); + assertThatIllegalArgumentException().isThrownBy(() -> executor.setCorePoolSize(-1)); assertThat(executor.getCorePoolSize()).isEqualTo(1); assertThat(executor.getThreadPoolExecutor().getCorePoolSize()).isEqualTo(1); @@ -90,8 +89,7 @@ class ThreadPoolTaskExecutorTests extends AbstractSchedulingTaskExecutorTests { assertThat(executor.getMaxPoolSize()).isEqualTo(1); assertThat(executor.getThreadPoolExecutor().getMaximumPoolSize()).isEqualTo(1); - assertThatThrownBy(() -> executor.setMaxPoolSize(0)) - .isInstanceOf(IllegalArgumentException.class); + assertThatIllegalArgumentException().isThrownBy(() -> executor.setMaxPoolSize(0)); assertThat(executor.getMaxPoolSize()).isEqualTo(1); assertThat(executor.getThreadPoolExecutor().getMaximumPoolSize()).isEqualTo(1); @@ -113,8 +111,7 @@ class ThreadPoolTaskExecutorTests extends AbstractSchedulingTaskExecutorTests { assertThat(executor.getKeepAliveSeconds()).isEqualTo(60); assertThat(executor.getThreadPoolExecutor().getKeepAliveTime(TimeUnit.SECONDS)).isEqualTo(60); - assertThatThrownBy(() -> executor.setKeepAliveSeconds(-10)) - .isInstanceOf(IllegalArgumentException.class); + assertThatIllegalArgumentException().isThrownBy(() -> executor.setKeepAliveSeconds(-10)); assertThat(executor.getKeepAliveSeconds()).isEqualTo(60); assertThat(executor.getThreadPoolExecutor().getKeepAliveTime(TimeUnit.SECONDS)).isEqualTo(60); @@ -124,8 +121,8 @@ class ThreadPoolTaskExecutorTests extends AbstractSchedulingTaskExecutorTests { void queueCapacityDefault() { assertThat(executor.getQueueCapacity()).isEqualTo(Integer.MAX_VALUE); assertThat(executor.getThreadPoolExecutor().getQueue()) - .asInstanceOf(type(LinkedBlockingQueue.class)) - .extracting(BlockingQueue::remainingCapacity).isEqualTo(Integer.MAX_VALUE); + .asInstanceOf(type(LinkedBlockingQueue.class)) + .extracting(BlockingQueue::remainingCapacity).isEqualTo(Integer.MAX_VALUE); } @Test @@ -135,8 +132,8 @@ class ThreadPoolTaskExecutorTests extends AbstractSchedulingTaskExecutorTests { assertThat(executor.getQueueCapacity()).isZero(); assertThat(executor.getThreadPoolExecutor().getQueue()) - .asInstanceOf(type(SynchronousQueue.class)) - .extracting(BlockingQueue::remainingCapacity).isEqualTo(0); + .asInstanceOf(type(SynchronousQueue.class)) + .extracting(BlockingQueue::remainingCapacity).isEqualTo(0); } @Test