Enable leak detection in Netty 5 tests

See gh-29310
This commit is contained in:
Violeta Georgieva
2022-10-12 16:17:32 +03:00
committed by rstoyanchev
parent 57bbc09fca
commit 997d1b3d7e
7 changed files with 45 additions and 11 deletions

View File

@@ -21,6 +21,7 @@ import java.nio.charset.StandardCharsets;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.core.io.buffer.Netty5DataBufferFactory;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
@@ -128,8 +129,15 @@ public class WebSocketMessage {
* @see DataBufferUtils#retain(DataBuffer)
*/
public WebSocketMessage retain() {
DataBufferUtils.retain(this.payload);
return this;
if (!(this.nativeMessage instanceof io.netty5.handler.codec.http.websocketx.WebSocketFrame frame) ) {
DataBufferUtils.retain(this.payload);
return this;
}
else {
io.netty5.handler.codec.http.websocketx.WebSocketFrame newFrame = frame.send().receive();
DataBuffer newPayload = ((Netty5DataBufferFactory) this.payload.factory()).wrap(newFrame.binaryData());
return new WebSocketMessage(this.type, newPayload, newFrame);
}
}
/**

View File

@@ -75,9 +75,8 @@ public abstract class Netty5WebSocketSessionSupport<T> extends AbstractWebSocket
protected WebSocketMessage toMessage(WebSocketFrame frame) {
WebSocketFrame newFrame = frame.send().receive();
DataBuffer payload = bufferFactory().wrap(newFrame.binaryData());
return new WebSocketMessage(messageTypes.get(newFrame.getClass()), payload, newFrame);
DataBuffer payload = bufferFactory().wrap(frame.binaryData());
return new WebSocketMessage(messageTypes.get(frame.getClass()), payload, frame);
}
protected WebSocketFrame toFrame(WebSocketMessage message) {

View File

@@ -220,7 +220,7 @@ class WebSocketIntegrationTests extends AbstractWebSocketIntegrationTests {
return Mono.deferContextual(contextView -> {
String key = ServerWebExchangeContextFilter.EXCHANGE_CONTEXT_ATTRIBUTE;
assertThat(contextView.getOrEmpty(key).orElse(null)).isNotNull();
return session.send(session.receive().doOnNext(WebSocketMessage::retain));
return session.send(session.receive().map(WebSocketMessage::retain));
});
}
}