Fix leak in SniClientJava8TestUtil (#8326)

Motivation:

4d1458604a did fix some leaks in SniClientTest but missed the ones in SniClientJava8TestUtil.

Modifications:

Correctly release SslContext.

Result:

No more leaks in SNI tests.
This commit is contained in:
Norman Maurer 2018-09-27 09:32:41 +02:00 committed by GitHub
parent 9acd9273c1
commit 652650e127
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -30,6 +30,7 @@ import io.netty.channel.local.LocalServerChannel;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory; import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import io.netty.handler.ssl.util.SelfSignedCertificate; import io.netty.handler.ssl.util.SelfSignedCertificate;
import io.netty.handler.ssl.util.SimpleTrustManagerFactory; import io.netty.handler.ssl.util.SimpleTrustManagerFactory;
import io.netty.util.ReferenceCountUtil;
import io.netty.util.concurrent.Promise; import io.netty.util.concurrent.Promise;
import io.netty.util.internal.EmptyArrays; import io.netty.util.internal.EmptyArrays;
import io.netty.util.internal.ThrowableUtil; import io.netty.util.internal.ThrowableUtil;
@ -76,20 +77,25 @@ final class SniClientJava8TestUtil {
static void testSniClient(SslProvider sslClientProvider, SslProvider sslServerProvider, final boolean match) static void testSniClient(SslProvider sslClientProvider, SslProvider sslServerProvider, final boolean match)
throws Exception { throws Exception {
final String sniHost = "sni.netty.io"; final String sniHost = "sni.netty.io";
SelfSignedCertificate cert = new SelfSignedCertificate();
LocalAddress address = new LocalAddress("test"); LocalAddress address = new LocalAddress("test");
EventLoopGroup group = new DefaultEventLoopGroup(1); EventLoopGroup group = new DefaultEventLoopGroup(1);
SslContext sslServerContext = null;
SslContext sslClientContext = null;
Channel sc = null; Channel sc = null;
Channel cc = null; Channel cc = null;
try { try {
SelfSignedCertificate cert = new SelfSignedCertificate(); sslServerContext = SslContextBuilder.forServer(cert.key(), cert.cert())
final SslContext sslServerContext = SslContextBuilder.forServer(cert.key(), cert.cert())
.sslProvider(sslServerProvider).build(); .sslProvider(sslServerProvider).build();
final Promise<Void> promise = group.next().newPromise(); final Promise<Void> promise = group.next().newPromise();
ServerBootstrap sb = new ServerBootstrap(); ServerBootstrap sb = new ServerBootstrap();
final SslContext finalContext = sslServerContext;
sc = sb.group(group).channel(LocalServerChannel.class).childHandler(new ChannelInitializer<Channel>() { sc = sb.group(group).channel(LocalServerChannel.class).childHandler(new ChannelInitializer<Channel>() {
@Override @Override
protected void initChannel(Channel ch) throws Exception { protected void initChannel(Channel ch) throws Exception {
SslHandler handler = sslServerContext.newHandler(ch.alloc()); SslHandler handler = finalContext.newHandler(ch.alloc());
SSLParameters parameters = handler.engine().getSSLParameters(); SSLParameters parameters = handler.engine().getSSLParameters();
SNIMatcher matcher = new SNIMatcher(0) { SNIMatcher matcher = new SNIMatcher(0) {
@Override @Override
@ -132,11 +138,11 @@ final class SniClientJava8TestUtil {
} }
}).bind(address).syncUninterruptibly().channel(); }).bind(address).syncUninterruptibly().channel();
SslContext sslContext = SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE) sslClientContext = SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE)
.sslProvider(sslClientProvider).build(); .sslProvider(sslClientProvider).build();
SslHandler sslHandler = new SslHandler( SslHandler sslHandler = new SslHandler(
sslContext.newEngine(ByteBufAllocator.DEFAULT, sniHost, -1)); sslClientContext.newEngine(ByteBufAllocator.DEFAULT, sniHost, -1));
Bootstrap cb = new Bootstrap(); Bootstrap cb = new Bootstrap();
cc = cb.group(group).channel(LocalChannel.class).handler(sslHandler) cc = cb.group(group).channel(LocalChannel.class).handler(sslHandler)
.connect(address).syncUninterruptibly().channel(); .connect(address).syncUninterruptibly().channel();
@ -150,6 +156,12 @@ final class SniClientJava8TestUtil {
if (sc != null) { if (sc != null) {
sc.close().syncUninterruptibly(); sc.close().syncUninterruptibly();
} }
ReferenceCountUtil.release(sslServerContext);
ReferenceCountUtil.release(sslClientContext);
cert.delete();
group.shutdownGracefully(); group.shutdownGracefully();
} }
} }