Skip to content

Commit f9d4b1d

Browse files
committed
Polishing.
Revise buffer release in tests to avoid resource leaks. [pgjdbc#458] Signed-off-by: Mark Paluch <[email protected]>
1 parent ca4dd62 commit f9d4b1d

File tree

3 files changed

+46
-4
lines changed

3 files changed

+46
-4
lines changed

src/test/java/io/r2dbc/postgresql/client/ReactorNettyClientIntegrationTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,9 @@ void concurrentConsumptionShouldComplete() {
113113

114114
this.client
115115
.exchange(Mono.just(new Query("SELECT value FROM test")))
116+
.doOnNext(ReferenceCountUtil::release)
116117
.limitRate(1)
117118
.publishOn(Schedulers.parallel())
118-
.doOnNext(ReferenceCountUtil::release)
119119
.as(StepVerifier::create)
120120
.thenConsumeWhile((t) -> true)
121121
.verifyComplete();

src/test/java/io/r2dbc/postgresql/message/backend/BackendMessageAssert.java

+32-1
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,14 @@
1717
package io.r2dbc.postgresql.message.backend;
1818

1919
import io.netty.buffer.ByteBuf;
20+
import io.netty.util.ReferenceCountUtil;
2021
import org.assertj.core.api.AbstractObjectAssert;
2122
import org.assertj.core.api.ObjectAssert;
2223
import org.springframework.util.ReflectionUtils;
2324

2425
import java.lang.reflect.Method;
26+
import java.util.ArrayList;
27+
import java.util.List;
2528
import java.util.Objects;
2629
import java.util.function.Function;
2730

@@ -32,6 +35,8 @@
3235
*/
3336
final class BackendMessageAssert extends AbstractObjectAssert<BackendMessageAssert, Class<? extends BackendMessage>> {
3437

38+
private Cleaner cleaner = new Cleaner();
39+
3540
private BackendMessageAssert(Class<? extends BackendMessage> actual) {
3641
super(actual, BackendMessageAssert.class);
3742
}
@@ -40,6 +45,11 @@ static BackendMessageAssert assertThat(Class<? extends BackendMessage> actual) {
4045
return new BackendMessageAssert(actual);
4146
}
4247

48+
BackendMessageAssert cleaner(Cleaner cleaner) {
49+
this.cleaner = cleaner;
50+
return this;
51+
}
52+
4353
@SuppressWarnings("unchecked")
4454
<T extends BackendMessage> ObjectAssert<T> decoded(Function<ByteBuf, ByteBuf> decoded) {
4555
Method method = ReflectionUtils.findMethod(this.actual, "decode", ByteBuf.class);
@@ -51,7 +61,28 @@ <T extends BackendMessage> ObjectAssert<T> decoded(Function<ByteBuf, ByteBuf> de
5161
ReflectionUtils.makeAccessible(method);
5262
T actual = (T) ReflectionUtils.invokeMethod(method, null, decoded.apply(TEST.buffer()));
5363

54-
return new ObjectAssert<>(actual);
64+
return new ObjectAssert<>(this.cleaner.capture(actual));
65+
}
66+
67+
public Cleaner cleaner() {
68+
return this.cleaner;
69+
}
70+
71+
static class Cleaner {
72+
73+
private final List<Object> objects = new ArrayList<>();
74+
75+
public void clean() {
76+
this.objects.forEach(ReferenceCountUtil::release);
77+
this.objects.clear();
78+
}
79+
80+
public <T> T capture(T object) {
81+
this.objects.add(object);
82+
83+
return object;
84+
}
85+
5586
}
5687

5788
}

src/test/java/io/r2dbc/postgresql/message/backend/DataRowUnitTests.java

+13-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
package io.r2dbc.postgresql.message.backend;
1818

1919
import io.netty.buffer.ByteBuf;
20+
import org.junit.jupiter.api.AfterEach;
2021
import org.junit.jupiter.api.Test;
2122

23+
import static io.r2dbc.postgresql.message.backend.BackendMessageAssert.Cleaner;
2224
import static io.r2dbc.postgresql.message.backend.BackendMessageAssert.assertThat;
2325
import static io.r2dbc.postgresql.util.TestByteBufAllocator.TEST;
2426
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
@@ -28,6 +30,13 @@
2830
*/
2931
final class DataRowUnitTests {
3032

33+
private final Cleaner cleaner = new Cleaner();
34+
35+
@AfterEach
36+
void tearDown() {
37+
this.cleaner.clean();
38+
}
39+
3140
@Test
3241
void constructorNoColumns() {
3342
assertThatIllegalArgumentException().isThrownBy(() -> new DataRow((ByteBuf[]) null))
@@ -37,20 +46,22 @@ void constructorNoColumns() {
3746
@Test
3847
void decode() {
3948
assertThat(DataRow.class)
49+
.cleaner(this.cleaner)
4050
.decoded(buffer -> buffer
4151
.writeShort(1)
4252
.writeInt(4)
4353
.writeInt(100))
44-
.isEqualTo(new DataRow(TEST.buffer(4).writeInt(100)));
54+
.isEqualTo(this.cleaner.capture(new DataRow(TEST.buffer(4).writeInt(100))));
4555
}
4656

4757
@Test
4858
void decodeNullColumn() {
4959
assertThat(DataRow.class)
60+
.cleaner(this.cleaner)
5061
.decoded(buffer -> buffer
5162
.writeShort(1)
5263
.writeInt(-1))
53-
.isEqualTo(new DataRow(new ByteBuf[]{null}));
64+
.isEqualTo(this.cleaner.capture(new DataRow(new ByteBuf[]{null})));
5465
}
5566

5667
}

0 commit comments

Comments
 (0)