|  | 
| 18 | 18 | 
 | 
| 19 | 19 | import java.nio.ByteBuffer; | 
| 20 | 20 | 
 | 
|  | 21 | +import org.eclipse.jetty.io.ArrayByteBufferPool; | 
| 21 | 22 | import org.eclipse.jetty.io.Content; | 
|  | 23 | +import org.eclipse.jetty.io.RetainableByteBuffer; | 
|  | 24 | +import org.junit.jupiter.api.AfterEach; | 
| 22 | 25 | import org.junit.jupiter.api.Test; | 
| 23 | 26 | 
 | 
| 24 | 27 | import static org.assertj.core.api.Assertions.assertThat; | 
| 25 | 28 | import static org.assertj.core.api.Assertions.assertThatIllegalStateException; | 
| 26 |  | -import static org.mockito.BDDMockito.given; | 
| 27 |  | -import static org.mockito.BDDMockito.then; | 
| 28 |  | -import static org.mockito.Mockito.mock; | 
| 29 |  | -import static org.mockito.Mockito.times; | 
| 30 | 29 | 
 | 
| 31 | 30 | /** | 
|  | 31 | + * Tests for {@link JettyDataBuffer} | 
| 32 | 32 |  * @author Arjen Poutsma | 
|  | 33 | + * @author Brian Clozel | 
| 33 | 34 |  */ | 
| 34 | 35 | public class JettyDataBufferTests { | 
| 35 | 36 | 
 | 
| 36 | 37 | 	private final JettyDataBufferFactory dataBufferFactory = new JettyDataBufferFactory(); | 
| 37 | 38 | 
 | 
|  | 39 | +	private ArrayByteBufferPool.Tracking byteBufferPool = new ArrayByteBufferPool.Tracking(); | 
|  | 40 | + | 
| 38 | 41 | 	@Test | 
| 39 | 42 | 	void releaseRetainChunk() { | 
| 40 |  | -		ByteBuffer buffer = ByteBuffer.allocate(3); | 
| 41 |  | -		Content.Chunk mockChunk = mock(); | 
| 42 |  | -		given(mockChunk.getByteBuffer()).willReturn(buffer); | 
| 43 |  | -		given(mockChunk.release()).willReturn(false, false, true); | 
| 44 |  | - | 
|  | 43 | +		RetainableByteBuffer retainableBuffer = byteBufferPool.acquire(3, false); | 
|  | 44 | +		ByteBuffer buffer = retainableBuffer.getByteBuffer(); | 
|  | 45 | +		buffer.position(0).limit(1); | 
|  | 46 | +		Content.Chunk chunk = Content.Chunk.asChunk(buffer, false, retainableBuffer); | 
| 45 | 47 | 
 | 
| 46 |  | - | 
| 47 |  | -		JettyDataBuffer dataBuffer = this.dataBufferFactory.wrap(mockChunk); | 
|  | 48 | +		JettyDataBuffer dataBuffer = this.dataBufferFactory.wrap(chunk); | 
| 48 | 49 | 		dataBuffer.retain(); | 
| 49 | 50 | 		dataBuffer.retain(); | 
| 50 | 51 | 		assertThat(dataBuffer.release()).isFalse(); | 
| 51 | 52 | 		assertThat(dataBuffer.release()).isFalse(); | 
| 52 | 53 | 		assertThat(dataBuffer.release()).isTrue(); | 
| 53 | 54 | 
 | 
| 54 | 55 | 		assertThatIllegalStateException().isThrownBy(dataBuffer::release); | 
|  | 56 | +		assertThat(retainableBuffer.isRetained()).isFalse(); | 
|  | 57 | +		assertThat(byteBufferPool.getLeaks()).isEmpty(); | 
|  | 58 | +	} | 
| 55 | 59 | 
 | 
| 56 |  | -		then(mockChunk).should(times(3)).retain(); | 
| 57 |  | -		then(mockChunk).should(times(3)).release(); | 
|  | 60 | +	@AfterEach | 
|  | 61 | +	public void tearDown() throws Exception { | 
|  | 62 | +		this.byteBufferPool.clear(); | 
| 58 | 63 | 	} | 
| 59 | 64 | } | 
0 commit comments