3232import  io .netty .handler .codec .http .HttpMethod ;
3333import  io .netty .handler .codec .http .HttpVersion ;
3434import  io .netty .handler .ssl .SslHandler ;
35+ import  io .opentelemetry .instrumentation .testing .internal .AutoCleanupExtension ;
3536import  io .opentelemetry .instrumentation .testing .junit .AgentInstrumentationExtension ;
3637import  io .opentelemetry .instrumentation .testing .junit .InstrumentationExtension ;
3738import  io .opentelemetry .instrumentation .testing .junit .http .HttpClientTestServer ;
4445import  java .util .concurrent .ExecutionException ;
4546import  java .util .concurrent .TimeUnit ;
4647import  java .util .concurrent .TimeoutException ;
47- import  java .util .concurrent .atomic .AtomicReference ;
4848import  javax .net .ssl .SSLContext ;
4949import  org .jetbrains .annotations .NotNull ;
5050import  org .junit .jupiter .api .AfterAll ;
@@ -57,6 +57,8 @@ class Netty40ClientSslTest {
5757  @ RegisterExtension 
5858  static  final  InstrumentationExtension  testing  = AgentInstrumentationExtension .create ();
5959
60+   @ RegisterExtension  static  final  AutoCleanupExtension  cleanup  = AutoCleanupExtension .create ();
61+ 
6062  private  static  HttpClientTestServer  server ;
6163  private  static  EventLoopGroup  eventLoopGroup ;
6264
@@ -116,25 +118,19 @@ public void shouldFailSslHandshake() {
116118
117119  private  static  Throwable  getThrowable (
118120      Bootstrap  bootstrap , URI  uri , DefaultFullHttpRequest  request ) {
119-     AtomicReference <Channel > channel  = new  AtomicReference <>();
120121    Throwable  thrown  =
121122        catchThrowable (
122123            () ->
123124                testing .runWithSpan (
124125                    "parent" ,
125126                    () -> {
126-                       try  {
127-                         channel .set (
128-                             bootstrap .connect (uri .getHost (), uri .getPort ()).sync ().channel ());
129-                         CompletableFuture <Integer > result  = new  CompletableFuture <>();
130-                         channel .get ().pipeline ().addLast (new  ClientHandler (result ));
131-                         channel .get ().writeAndFlush (request ).get (10 , TimeUnit .SECONDS );
132-                         result .get (10 , TimeUnit .SECONDS );
133-                       } finally  {
134-                         if  (channel .get () != null ) {
135-                           channel .get ().close ();
136-                         }
137-                       }
127+                       Channel  channel  =
128+                           bootstrap .connect (uri .getHost (), uri .getPort ()).sync ().channel ();
129+                       cleanup .deferCleanup (() -> channel .close ().sync ());
130+                       CompletableFuture <Integer > result  = new  CompletableFuture <>();
131+                       channel .pipeline ().addLast (new  ClientHandler (result ));
132+                       channel .writeAndFlush (request ).get (10 , TimeUnit .SECONDS );
133+                       result .get (10 , TimeUnit .SECONDS );
138134                    }));
139135
140136    // Then 
@@ -160,22 +156,16 @@ public void shouldSuccessfullyEstablishSslHandshake() throws Exception {
160156            HttpVersion .HTTP_1_1 , HttpMethod .GET , uri .getPath (), Unpooled .EMPTY_BUFFER );
161157    HttpHeaders .setHost (request , uri .getHost () + ":"  + uri .getPort ());
162158
163-     AtomicReference <Channel > channel  = new  AtomicReference <>();
164159    // when 
165160    testing .runWithSpan (
166161        "parent" ,
167162        () -> {
168-           try  {
169-             channel .set (bootstrap .connect (uri .getHost (), uri .getPort ()).sync ().channel ());
170-             CompletableFuture <Integer > result  = new  CompletableFuture <>();
171-             channel .get ().pipeline ().addLast (new  ClientHandler (result ));
172-             channel .get ().writeAndFlush (request ).get (10 , TimeUnit .SECONDS );
173-             result .get (10 , TimeUnit .SECONDS );
174-           } finally  {
175-             if  (channel .get () != null ) {
176-               channel .get ().close ();
177-             }
178-           }
163+           Channel  channel  = bootstrap .connect (uri .getHost (), uri .getPort ()).sync ().channel ();
164+           cleanup .deferCleanup (() -> channel .close ().sync ());
165+           CompletableFuture <Integer > result  = new  CompletableFuture <>();
166+           channel .pipeline ().addLast (new  ClientHandler (result ));
167+           channel .writeAndFlush (request ).get (10 , TimeUnit .SECONDS );
168+           result .get (10 , TimeUnit .SECONDS );
179169        });
180170
181171    // then 
@@ -207,10 +197,6 @@ public void shouldSuccessfullyEstablishSslHandshake() throws Exception {
207197                span  -> {
208198                  span .hasName ("test-http-server" ).hasKind (SERVER ).hasParent (trace .getSpan (3 ));
209199                }));
210- 
211-     if  (channel .get () != null ) {
212-       channel .get ().close ().sync ();
213-     }
214200  }
215201
216202  // list of default ciphers copied from netty's JdkSslContext 
0 commit comments