@@ -69,7 +69,7 @@ public class PooledConnectionSecurityExceptionTest {
6969 @ Test
7070 public void testFailedConnectThenSucceeds () throws JMSException {
7171 try (final Connection connection1 = pooledConnFact .createConnection ("invalid" , "credentials" )) {
72- assertSecurityExceptionOnStart ( connection1 );
72+ assertThrows ( JMSSecurityException . class , connection1 :: start );
7373
7474 try (final Connection connection2 = pooledConnFact .createConnection ("system" , "manager" )) {
7575 connection2 .start ();
@@ -93,7 +93,7 @@ public void onException(JMSException exception) {
9393 onExceptionCalled .countDown ();
9494 }
9595 });
96- assertSecurityExceptionOnStart ( connection1 );
96+ assertThrows ( JMSSecurityException . class , connection1 :: start );
9797
9898 try (final Connection connection2 = pooledConnFact .createConnection ("system" , "manager" )) {
9999 connection2 .start ();
@@ -118,7 +118,7 @@ public void testFailureGetsNewConnectionOnRetry() throws Exception {
118118 pooledConnFact .setMaxConnections (1 );
119119
120120 try (final Connection connection1 = pooledConnFact .createConnection ("invalid" , "credentials" )) {
121- assertSecurityExceptionOnStart ( connection1 );
121+ assertThrows ( JMSSecurityException . class , connection1 :: start );
122122
123123 // The pool should process the async error
124124 // we should eventually get a different connection instance from the pool regardless of the underlying connection
@@ -145,9 +145,9 @@ public void testFailureGetsNewConnectionOnRetryBigPool() throws JMSException {
145145 pooledConnFact .setMaxConnections (10 );
146146
147147 try (final Connection connection1 = pooledConnFact .createConnection ("invalid" , "credentials" )) {
148- assertSecurityExceptionOnStart ( connection1 );
148+ assertThrows ( JMSSecurityException . class , connection1 :: start );
149149 try (final Connection connection2 = pooledConnFact .createConnection ("invalid" , "credentials" )) {
150- assertSecurityExceptionOnStart ( connection2 );
150+ assertThrows ( JMSSecurityException . class , connection2 :: start );
151151 assertNotSame (connection1 , connection2 );
152152 }
153153 }
@@ -165,7 +165,7 @@ public void testFailoverWithInvalidCredentialsCanConnect() throws JMSException {
165165 pooledConnFact .setMaxConnections (1 );
166166
167167 try (final Connection connection = pooledConnFact .createConnection ("invalid" , "credentials" )) {
168- assertSecurityExceptionOnStart ( connection );
168+ assertThrows ( JMSSecurityException . class , connection :: start );
169169
170170 try (final Connection connection2 = pooledConnFact .createConnection ("system" , "manager" )) {
171171 connection2 .start ();
@@ -185,7 +185,7 @@ public void testFailoverWithInvalidCredentials() throws Exception {
185185 pooledConnFact .setMaxConnections (1 );
186186
187187 try (final PooledConnection connection1 = (PooledConnection ) pooledConnFact .createConnection ("invalid" , "credentials" )) {
188- assertSecurityExceptionOnStart ( connection1 );
188+ assertThrows ( JMSSecurityException . class , connection1 :: start );
189189
190190 // The pool should process the async error
191191 assertTrue ("Should get new connection" , Wait .waitFor (new Wait .Condition () {
@@ -202,7 +202,7 @@ public boolean isSatisified() throws Exception {
202202
203203 try (final PooledConnection connection2 = (PooledConnection ) pooledConnFact .createConnection ("invalid" , "credentials" )) {
204204 assertNotSame (connection1 .pool , connection2 .pool );
205- assertSecurityExceptionOnStart ( connection2 );
205+ assertThrows ( JMSSecurityException . class , connection2 :: start );
206206 }
207207 }
208208 }
@@ -230,55 +230,6 @@ public String getName() {
230230 return name .getMethodName ();
231231 }
232232
233- /**
234- * Helper method to assert that a connection start fails with security exception.
235- * On different test environments, the connection may be disposed asynchronously
236- * before the security exception is fully propagated, resulting in either JMSSecurityException
237- * or generic JMSException with "Disposed" message. Both indicate authentication failure.
238- *
239- * This method uses an ExceptionListener to detect when async disposal completes, providing
240- * more reliable detection of security failures across different Java versions and environments.
241- *
242- * @param connection the connection to start
243- * @throws AssertionError if no exception is thrown or the exception doesn't indicate auth failure
244- */
245- private void assertSecurityExceptionOnStart (final Connection connection ) {
246- try {
247- final ExceptionListener listener = connection .getExceptionListener ();
248- if (listener == null ) { // some tests already leverage the exception listener
249- final CountDownLatch exceptionLatch = new CountDownLatch (1 );
250-
251- // Install listener to capture async exception propagation
252- connection .setExceptionListener (new ExceptionListener () {
253- @ Override
254- public void onException (final JMSException exception ) {
255- LOG .info ("Connection received exception: {}" , exception .getMessage ());
256- assertTrue (exception instanceof JMSSecurityException );
257- exceptionLatch .countDown ();
258- }
259- });
260- connection .start (); // should trigger the security exception reliably and asynchronously
261- exceptionLatch .await (1 , java .util .concurrent .TimeUnit .SECONDS );
262-
263- } else {
264-
265- // Attempt to start and capture the synchronous exception.
266- final JMSException thrownException = assertThrows (JMSException .class , connection ::start );
267- assertTrue ("Should be JMSSecurityException or disposed due to security exception" ,
268- thrownException instanceof JMSSecurityException ||
269- thrownException .getMessage ().contains ("Disposed" ));
270- }
271-
272-
273- } catch (final JMSException e ) {
274- // Ignore
275-
276- } catch (final InterruptedException e ) {
277- throw new RuntimeException (e );
278- }
279-
280- }
281-
282233 @ Before
283234 public void setUp () throws Exception {
284235 LOG .info ("========== start " + getName () + " ==========" );
0 commit comments