diff --git a/spring-core/src/test/java/org/springframework/core/codec/ResourceRegionEncoderTests.java b/spring-core/src/test/java/org/springframework/core/codec/ResourceRegionEncoderTests.java index 465780eb38..6412af9339 100644 --- a/spring-core/src/test/java/org/springframework/core/codec/ResourceRegionEncoderTests.java +++ b/spring-core/src/test/java/org/springframework/core/codec/ResourceRegionEncoderTests.java @@ -63,7 +63,7 @@ class ResourceRegionEncoderTests extends AbstractLeakCheckingTests { } @Test - void shouldEncodeResourceRegionFileResource() throws Exception { + void shouldEncodeResourceRegionFileResource() { ResourceRegion region = new ResourceRegion( new ClassPathResource("ResourceRegionEncoderTests.txt", getClass()), 0, 6); Flux result = this.encoder.encode(Mono.just(region), this.bufferFactory, diff --git a/spring-core/src/test/java/org/springframework/core/io/buffer/LeakAwareDataBufferFactoryTests.java b/spring-core/src/test/java/org/springframework/core/io/buffer/LeakAwareDataBufferFactoryTests.java index 64531c0865..9d482f6cc7 100644 --- a/spring-core/src/test/java/org/springframework/core/io/buffer/LeakAwareDataBufferFactoryTests.java +++ b/spring-core/src/test/java/org/springframework/core/io/buffer/LeakAwareDataBufferFactoryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2022 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. @@ -35,8 +35,7 @@ class LeakAwareDataBufferFactoryTests { void leak() { DataBuffer dataBuffer = this.bufferFactory.allocateBuffer(); try { - assertThatExceptionOfType(AssertionError.class).isThrownBy( - this.bufferFactory::checkForLeaks); + assertThatExceptionOfType(AssertionError.class).isThrownBy(this.bufferFactory::checkForLeaks); } finally { release(dataBuffer); diff --git a/spring-core/src/testFixtures/java/org/springframework/core/testfixture/io/buffer/AbstractLeakCheckingTests.java b/spring-core/src/testFixtures/java/org/springframework/core/testfixture/io/buffer/AbstractLeakCheckingTests.java index 061cad5f8e..348f5dbbec 100644 --- a/spring-core/src/testFixtures/java/org/springframework/core/testfixture/io/buffer/AbstractLeakCheckingTests.java +++ b/spring-core/src/testFixtures/java/org/springframework/core/testfixture/io/buffer/AbstractLeakCheckingTests.java @@ -16,6 +16,8 @@ package org.springframework.core.testfixture.io.buffer; +import java.time.Duration; + import org.junit.jupiter.api.AfterEach; import org.springframework.core.io.buffer.DataBufferFactory; @@ -42,7 +44,7 @@ public abstract class AbstractLeakCheckingTests { */ @AfterEach final void checkForLeaks() { - this.bufferFactory.checkForLeaks(); + this.bufferFactory.checkForLeaks(Duration.ofSeconds(1)); } } diff --git a/spring-core/src/testFixtures/java/org/springframework/core/testfixture/io/buffer/LeakAwareDataBufferFactory.java b/spring-core/src/testFixtures/java/org/springframework/core/testfixture/io/buffer/LeakAwareDataBufferFactory.java index 129821ccb5..9686aa95b0 100644 --- a/spring-core/src/testFixtures/java/org/springframework/core/testfixture/io/buffer/LeakAwareDataBufferFactory.java +++ b/spring-core/src/testFixtures/java/org/springframework/core/testfixture/io/buffer/LeakAwareDataBufferFactory.java @@ -81,13 +81,21 @@ public class LeakAwareDataBufferFactory implements DataBufferFactory { * method. */ public void checkForLeaks() { + checkForLeaks(Duration.ofSeconds(0)); + } + + /** + * Variant of {@link #checkForLeaks()} with the option to wait for buffer release. + * @param timeout how long to wait for buffers to be released; 0 for no waiting + */ + public void checkForLeaks(Duration timeout) { this.trackCreated.set(false); Instant start = Instant.now(); while (true) { if (this.created.stream().noneMatch(LeakAwareDataBuffer::isAllocated)) { return; } - if (Instant.now().isBefore(start.plus(Duration.ofSeconds(5)))) { + if (Instant.now().isBefore(start.plus(timeout))) { try { Thread.sleep(50); }