|
24 | 24 | import java.net.ServerSocket; |
25 | 25 | import java.net.SocketException; |
26 | 26 | import java.nio.ByteBuffer; |
| 27 | +import java.security.KeyManagementException; |
| 28 | +import java.security.NoSuchAlgorithmException; |
| 29 | +import java.util.Arrays; |
| 30 | +import java.util.List; |
27 | 31 | import java.util.concurrent.CountDownLatch; |
28 | 32 | import java.util.concurrent.ExecutorService; |
29 | 33 | import java.util.concurrent.Executors; |
30 | 34 | import java.util.concurrent.TimeUnit; |
31 | 35 | import java.util.concurrent.atomic.AtomicReference; |
32 | | - |
33 | 36 | import javax.net.ServerSocketFactory; |
34 | 37 | import javax.net.ssl.HostnameVerifier; |
| 38 | +import javax.net.ssl.SSLContext; |
35 | 39 | import javax.net.ssl.SSLException; |
36 | 40 | import javax.net.ssl.SSLServerSocket; |
37 | 41 | import javax.net.ssl.SSLServerSocketFactory; |
38 | 42 | import javax.net.ssl.SSLSession; |
39 | 43 | import javax.net.ssl.SSLSocket; |
40 | | - |
41 | 44 | import org.glassfish.jersey.SslConfigurator; |
42 | 45 | import org.junit.jupiter.api.Test; |
| 46 | +import org.junit.jupiter.api.extension.ConditionEvaluationResult; |
| 47 | +import org.junit.jupiter.api.extension.ExecutionCondition; |
| 48 | +import org.junit.jupiter.api.extension.ExtendWith; |
| 49 | +import org.junit.jupiter.api.extension.ExtensionContext; |
43 | 50 |
|
44 | 51 | import static org.junit.jupiter.api.Assertions.assertEquals; |
45 | 52 | import static org.junit.jupiter.api.Assertions.assertTrue; |
|
48 | 55 | /** |
49 | 56 | * @author Petr Janouch |
50 | 57 | */ |
| 58 | +@ExtendWith(SslFilterTest.DeprecatedTLSCondition.class) |
51 | 59 | public abstract class SslFilterTest { |
52 | 60 |
|
53 | 61 | private static final int PORT = 8321; |
@@ -531,4 +539,32 @@ void rehandshake() throws IOException { |
531 | 539 | socket.startHandshake(); |
532 | 540 | } |
533 | 541 | } |
| 542 | + |
| 543 | + public static class DeprecatedTLSCondition implements ExecutionCondition { |
| 544 | + |
| 545 | + @Override |
| 546 | + public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) { |
| 547 | + Class<?> test = context.getTestClass().get(); |
| 548 | + String required = null; |
| 549 | + if (test == SslFilterTLS1Test.class) { |
| 550 | + required = "TLSv1"; |
| 551 | + } else if (test == SslFilterTLS11Test.class) { |
| 552 | + required = "TLSv1.1"; |
| 553 | + } |
| 554 | + if (required != null) { |
| 555 | + try { |
| 556 | + SSLContext context1 = SSLContext.getInstance("TLS"); |
| 557 | + context1.init(null, null, null); |
| 558 | + List<String> supportedProtocols = Arrays.asList(context1.getDefaultSSLParameters().getProtocols()); |
| 559 | + if (!supportedProtocols.contains(required)) { |
| 560 | + return ConditionEvaluationResult.disabled("JDK does not support " + required); |
| 561 | + } |
| 562 | + } catch (KeyManagementException | NoSuchAlgorithmException e) { |
| 563 | + return ConditionEvaluationResult.disabled("JDK does not support TLS: " + e.getMessage()); |
| 564 | + } |
| 565 | + } |
| 566 | + return ConditionEvaluationResult.enabled("JDK is valid to run " + test.getCanonicalName()); |
| 567 | + } |
| 568 | + |
| 569 | + } |
534 | 570 | } |
0 commit comments