diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/DefaultMvcResult.java b/spring-test/src/main/java/org/springframework/test/web/servlet/DefaultMvcResult.java index f39a6fe0127f..72917180f03e 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/DefaultMvcResult.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/DefaultMvcResult.java @@ -153,6 +153,7 @@ private boolean awaitAsyncDispatch(long timeout) { return this.asyncDispatchLatch.await(timeout, TimeUnit.MILLISECONDS); } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); return false; } } diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/DefaultMvcResultTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/DefaultMvcResultTests.java index 5fae7806a683..28c4c86d8295 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/DefaultMvcResultTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/DefaultMvcResultTests.java @@ -22,6 +22,7 @@ import org.springframework.mock.web.MockHttpServletRequest; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalStateException; /** @@ -46,4 +47,19 @@ void getAsyncResultFailure() { this.mvcResult.getAsyncResult(0)); } + @Test + void getAsyncResultRestoresInterruptStatusWhenInterrupted() { + this.mvcResult.setAsyncDispatchLatch(new CountDownLatch(1)); + Thread.currentThread().interrupt(); + try { + assertThatIllegalStateException().isThrownBy(() -> + this.mvcResult.getAsyncResult(1000)); + assertThat(Thread.currentThread().isInterrupted()).isTrue(); + } + finally { + // Clear the interrupt status so it does not leak to other tests. + Thread.interrupted(); + } + } + }