From c3787e7999793eebc035afb9829f80cc0fa3878e Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sun, 2 Aug 2026 08:45:44 -0400 Subject: [PATCH 1/3] Convert TestTlsCiphers to use @ParameterizedTest Normalize test method names --- .../hc/core5/http/ssl/TestTlsCiphers.java | 129 +++++++++--------- 1 file changed, 65 insertions(+), 64 deletions(-) diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsCiphers.java b/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsCiphers.java index 082294bcde..5190b29e00 100644 --- a/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsCiphers.java +++ b/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsCiphers.java @@ -29,71 +29,29 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; /** * Unit tests for {@link TlsCiphers}. */ class TestTlsCiphers { - @Test - void testStrongCipherSuites() { - final String[] strongCipherSuites = { - "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", - "TLS_RSA_WITH_AES_256_CBC_SHA256", - "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", - "TLS_RSA_WITH_AES_128_CBC_SHA", - "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", - "TLS_RSA_WITH_AES_256_GCM_SHA384" - }; - for (final String cipherSuite : strongCipherSuites) { - Assertions.assertFalse(TlsCiphers.isWeak(cipherSuite)); - } - } + static String[] testExcludeH2Blacklisted() { + final String[] mixCipherSuites = { + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", + "TLS_RSA_WITH_AES_256_CBC_SHA256", + "AES_SHA_US", + "TLS_RSA_WITH_AES_128_CBC_SHA", + "NULL_SHA", + "TLS_RSA_WITH_AES_256_GCM_SHA384" + }; + return TlsCiphers.excludeH2Blacklisted(mixCipherSuites); + } - @Test - void testWeakCiphersDisabledByDefault() { - final String[] weakCiphersSuites = { - "SSL_RSA_WITH_RC4_128_SHA", - "SSL_RSA_WITH_3DES_EDE_CBC_SHA", - "TLS_DH_anon_WITH_AES_128_CBC_SHA", - "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", - "SSL_RSA_WITH_NULL_SHA", - "SSL_RSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", - "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", - "TLS_DH_anon_WITH_AES_256_GCM_SHA384", - "TLS_ECDH_anon_WITH_AES_256_CBC_SHA", - "TLS_RSA_WITH_NULL_SHA256", - "SSL_RSA_EXPORT_WITH_RC4_40_MD5", - "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", - "TLS_KRB5_EXPORT_WITH_RC4_40_SHA", - "SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5" - }; - for (final String cipherSuite : weakCiphersSuites) { - Assertions.assertTrue(TlsCiphers.isWeak(cipherSuite)); - } - } - - @Test - void excludeH2Blacklisted () { - final String[] mixCipherSuites = { - "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", - "TLS_RSA_WITH_AES_256_CBC_SHA256", - "AES_SHA_US", - "TLS_RSA_WITH_AES_128_CBC_SHA", - "NULL_SHA", - "TLS_RSA_WITH_AES_256_GCM_SHA384" - }; - - final String[] strongCipherSuites = TlsCiphers.excludeH2Blacklisted(mixCipherSuites); - for (final String cipherSuite : strongCipherSuites) { - Assertions.assertFalse(TlsCiphers.isWeak(cipherSuite)); - } - } - - @Test - void excludeWeak () { - final String[] weakCiphersSuites = { + static String[] testExcludeWeak() { + final String[] weakCiphersSuites = { "SSL_RSA_WITH_RC4_128_SHA", "SSL_RSA_WITH_3DES_EDE_CBC_SHA", "TLS_DH_anon_WITH_AES_128_CBC_SHA", @@ -116,16 +74,59 @@ void excludeWeak () { "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", "TLS_RSA_WITH_AES_256_GCM_SHA384" }; + return TlsCiphers.excludeWeak(weakCiphersSuites); + } + + @ParameterizedTest + @MethodSource + void testExcludeH2Blacklisted(final String strongCipherSuite) { + Assertions.assertFalse(TlsCiphers.isWeak(strongCipherSuite)); + } - final String[] strongCipherSuites = TlsCiphers.excludeWeak(weakCiphersSuites); - for (final String cipherSuite : strongCipherSuites) { - Assertions.assertFalse(TlsCiphers.isWeak(cipherSuite)); - } + @ParameterizedTest + @MethodSource + void testExcludeWeak(final String strongCipherSuite) { + Assertions.assertFalse(TlsCiphers.isWeak(strongCipherSuite)); } - @Test - void excludeWeakNull() { + @Test + void testExcludeWeakNull() { Assertions.assertNull(TlsCiphers.excludeWeak((String[]) null)); } + @ParameterizedTest + @ValueSource(strings = { + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", + "TLS_RSA_WITH_AES_256_CBC_SHA256", + "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", + "TLS_RSA_WITH_AES_128_CBC_SHA", + "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", + "TLS_RSA_WITH_AES_256_GCM_SHA384" + }) + void testStrongCipherSuites(final String strongCipherSuite) { + Assertions.assertFalse(TlsCiphers.isWeak(strongCipherSuite)); + } + + @ParameterizedTest + @ValueSource(strings = { + "SSL_RSA_WITH_RC4_128_SHA", + "SSL_RSA_WITH_3DES_EDE_CBC_SHA", + "TLS_DH_anon_WITH_AES_128_CBC_SHA", + "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", + "SSL_RSA_WITH_NULL_SHA", + "SSL_RSA_WITH_3DES_EDE_CBC_SHA", + "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", + "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", + "TLS_DH_anon_WITH_AES_256_GCM_SHA384", + "TLS_ECDH_anon_WITH_AES_256_CBC_SHA", + "TLS_RSA_WITH_NULL_SHA256", + "SSL_RSA_EXPORT_WITH_RC4_40_MD5", + "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", + "TLS_KRB5_EXPORT_WITH_RC4_40_SHA", + "SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5" + }) + void testWeakCiphersDisabledByDefault(final String weakCiphersSuite) { + Assertions.assertTrue(TlsCiphers.isWeak(weakCiphersSuite)); + } + } From 5230fc1122aa58b28e526064c018b041ce3bc3d2 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sun, 2 Aug 2026 08:51:03 -0400 Subject: [PATCH 2/3] Tabs -> spaces (was not picked up by a local default Maven build). --- .../hc/core5/http/ssl/TestTlsCiphers.java | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsCiphers.java b/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsCiphers.java index 5190b29e00..f2c192910c 100644 --- a/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsCiphers.java +++ b/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsCiphers.java @@ -39,19 +39,19 @@ class TestTlsCiphers { static String[] testExcludeH2Blacklisted() { - final String[] mixCipherSuites = { - "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", - "TLS_RSA_WITH_AES_256_CBC_SHA256", - "AES_SHA_US", - "TLS_RSA_WITH_AES_128_CBC_SHA", - "NULL_SHA", - "TLS_RSA_WITH_AES_256_GCM_SHA384" - }; - return TlsCiphers.excludeH2Blacklisted(mixCipherSuites); - } + final String[] mixCipherSuites = { + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", + "TLS_RSA_WITH_AES_256_CBC_SHA256", + "AES_SHA_US", + "TLS_RSA_WITH_AES_128_CBC_SHA", + "NULL_SHA", + "TLS_RSA_WITH_AES_256_GCM_SHA384" + }; + return TlsCiphers.excludeH2Blacklisted(mixCipherSuites); + } static String[] testExcludeWeak() { - final String[] weakCiphersSuites = { + final String[] weakCiphersSuites = { "SSL_RSA_WITH_RC4_128_SHA", "SSL_RSA_WITH_3DES_EDE_CBC_SHA", "TLS_DH_anon_WITH_AES_128_CBC_SHA", @@ -75,7 +75,7 @@ static String[] testExcludeWeak() { "TLS_RSA_WITH_AES_256_GCM_SHA384" }; return TlsCiphers.excludeWeak(weakCiphersSuites); - } + } @ParameterizedTest @MethodSource @@ -83,18 +83,18 @@ void testExcludeH2Blacklisted(final String strongCipherSuite) { Assertions.assertFalse(TlsCiphers.isWeak(strongCipherSuite)); } - @ParameterizedTest + @ParameterizedTest @MethodSource void testExcludeWeak(final String strongCipherSuite) { Assertions.assertFalse(TlsCiphers.isWeak(strongCipherSuite)); } - @Test + @Test void testExcludeWeakNull() { Assertions.assertNull(TlsCiphers.excludeWeak((String[]) null)); } - @ParameterizedTest + @ParameterizedTest @ValueSource(strings = { "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", "TLS_RSA_WITH_AES_256_CBC_SHA256", @@ -124,9 +124,9 @@ void testStrongCipherSuites(final String strongCipherSuite) { "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", "TLS_KRB5_EXPORT_WITH_RC4_40_SHA", "SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5" - }) - void testWeakCiphersDisabledByDefault(final String weakCiphersSuite) { - Assertions.assertTrue(TlsCiphers.isWeak(weakCiphersSuite)); - } + }) + void testWeakCiphersDisabledByDefault(final String weakCiphersSuite) { + Assertions.assertTrue(TlsCiphers.isWeak(weakCiphersSuite)); + } } From 67d1a1198939e497d9d7dafac73277815dd1b6e2 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sun, 2 Aug 2026 08:54:02 -0400 Subject: [PATCH 3/3] Add Java 25 (LTS) to GH CI builds. --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index d9d86e0f20..ff02aff9fa 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -35,7 +35,7 @@ jobs: # windows-latest is not used due to intermittent network failures os: [ubuntu-latest, macos-latest] # All LTS versions plus the current version - java: [ 11, 17, 21 ] + java: [ 11, 17, 21, 25 ] include: - java: 8 os: ubuntu-latest