From 6a2c9e09918d3695f3f47be1dfad705eb1b8d99f Mon Sep 17 00:00:00 2001 From: Mohit-Rajbhar100698 Date: Thu, 14 May 2026 13:30:58 +0530 Subject: [PATCH] Refactor JUnit 5 Tests for BaseTestDSASignatureInterop Replace multiple test classes extending BaseTestDSASignatureInterop with a single JUnit 5 parameterized test class Signed-off-by: Mohit Rajbhar --- .../ibm/jceplus/junit/TestMultithread.java | 1 - .../jceplus/junit/TestMultithreadFIPS.java | 1 - .../jceplus/junit/openjceplus/TestAll.java | 1 - .../TestDSASignatureInteropSUN.java | 25 -------- .../TestDSASignatureInteropSUN.java | 26 -------- .../TestDSASignatureInteropSUN.java | 25 -------- .../TestDSASignatureInteropSUN.java | 26 -------- .../ibm/jceplus/junit/tests/BaseTest.java | 10 ++- .../jceplus/junit/tests/BaseTestInterop.java | 61 +++++++++++++++++++ .../junit/tests/BaseTestSignatureInterop.java | 39 ++++++++++++ .../jceplus/junit/tests/TestArguments.java | 29 ++++++++- .../TestDSASignatureInterop.java} | 30 ++++++++- 12 files changed, 164 insertions(+), 110 deletions(-) delete mode 100644 src/test/java/ibm/jceplus/junit/openjceplus/TestDSASignatureInteropSUN.java delete mode 100644 src/test/java/ibm/jceplus/junit/openjceplus/multithread/TestDSASignatureInteropSUN.java delete mode 100644 src/test/java/ibm/jceplus/junit/openjceplusfips/TestDSASignatureInteropSUN.java delete mode 100644 src/test/java/ibm/jceplus/junit/openjceplusfips/multithread/TestDSASignatureInteropSUN.java create mode 100644 src/test/java/ibm/jceplus/junit/tests/BaseTestInterop.java create mode 100644 src/test/java/ibm/jceplus/junit/tests/BaseTestSignatureInterop.java rename src/test/java/ibm/jceplus/junit/{base/BaseTestDSASignatureInterop.java => tests/TestDSASignatureInterop.java} (88%) diff --git a/src/test/java/ibm/jceplus/junit/TestMultithread.java b/src/test/java/ibm/jceplus/junit/TestMultithread.java index eddeb1174..058e98612 100644 --- a/src/test/java/ibm/jceplus/junit/TestMultithread.java +++ b/src/test/java/ibm/jceplus/junit/TestMultithread.java @@ -35,7 +35,6 @@ public class TestMultithread { "ibm.jceplus.junit.openjceplus.multithread.TestAliases", "ibm.jceplus.junit.openjceplus.multithread.TestDH", "ibm.jceplus.junit.openjceplus.multithread.TestDSAKey", - "ibm.jceplus.junit.openjceplus.multithread.TestDSASignatureInteropSUN", "ibm.jceplus.junit.openjceplus.multithread.TestECDH", "ibm.jceplus.junit.openjceplus.multithread.TestECDHInteropSunEC", "ibm.jceplus.junit.openjceplus.multithread.TestEdDSASignature", diff --git a/src/test/java/ibm/jceplus/junit/TestMultithreadFIPS.java b/src/test/java/ibm/jceplus/junit/TestMultithreadFIPS.java index ff34db07a..11c97add7 100644 --- a/src/test/java/ibm/jceplus/junit/TestMultithreadFIPS.java +++ b/src/test/java/ibm/jceplus/junit/TestMultithreadFIPS.java @@ -35,7 +35,6 @@ public class TestMultithreadFIPS { "ibm.jceplus.junit.openjceplusfips.multithread.TestAliases", "ibm.jceplus.junit.openjceplusfips.multithread.TestDH", "ibm.jceplus.junit.openjceplusfips.multithread.TestDSAKey", - "ibm.jceplus.junit.openjceplusfips.multithread.TestDSASignatureInteropSUN", "ibm.jceplus.junit.openjceplusfips.multithread.TestECDH", "ibm.jceplus.junit.openjceplusfips.multithread.TestECDHInteropSunEC", "ibm.jceplus.junit.openjceplusfips.multithread.TestHKDF", diff --git a/src/test/java/ibm/jceplus/junit/openjceplus/TestAll.java b/src/test/java/ibm/jceplus/junit/openjceplus/TestAll.java index 83119b573..212c32f53 100644 --- a/src/test/java/ibm/jceplus/junit/openjceplus/TestAll.java +++ b/src/test/java/ibm/jceplus/junit/openjceplus/TestAll.java @@ -39,7 +39,6 @@ TestDSAKey.class, TestDSASignature.class, TestDSASignatureInteropBC.class, - TestDSASignatureInteropSUN.class, TestECDH.class, TestECDHInteropBC.class, TestECDHInteropSunEC.class, diff --git a/src/test/java/ibm/jceplus/junit/openjceplus/TestDSASignatureInteropSUN.java b/src/test/java/ibm/jceplus/junit/openjceplus/TestDSASignatureInteropSUN.java deleted file mode 100644 index c7039b2d4..000000000 --- a/src/test/java/ibm/jceplus/junit/openjceplus/TestDSASignatureInteropSUN.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright IBM Corp. 2023, 2024 - * - * This code is free software; you can redistribute it and/or modify it - * under the terms provided by IBM in the LICENSE file that accompanied - * this code, including the "Classpath" Exception described therein. - */ - -package ibm.jceplus.junit.openjceplus; - -import ibm.jceplus.junit.base.BaseTestDSASignatureInterop; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.TestInstance; -import org.junit.jupiter.api.TestInstance.Lifecycle; - -@TestInstance(Lifecycle.PER_CLASS) -public class TestDSASignatureInteropSUN extends BaseTestDSASignatureInterop { - - @BeforeAll - public void beforeAll() { - Utils.loadProviderTestSuite(); - setProviderName(Utils.TEST_SUITE_PROVIDER_NAME); - setInteropProviderName(Utils.PROVIDER_SUN); - } -} diff --git a/src/test/java/ibm/jceplus/junit/openjceplus/multithread/TestDSASignatureInteropSUN.java b/src/test/java/ibm/jceplus/junit/openjceplus/multithread/TestDSASignatureInteropSUN.java deleted file mode 100644 index 001f7b2b8..000000000 --- a/src/test/java/ibm/jceplus/junit/openjceplus/multithread/TestDSASignatureInteropSUN.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright IBM Corp. 2023, 2024 - * - * This code is free software; you can redistribute it and/or modify it - * under the terms provided by IBM in the LICENSE file that accompanied - * this code, including the "Classpath" Exception described therein. - */ - -package ibm.jceplus.junit.openjceplus.multithread; - -import ibm.jceplus.junit.base.BaseTestDSASignatureInterop; -import ibm.jceplus.junit.openjceplus.Utils; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.TestInstance; -import org.junit.jupiter.api.TestInstance.Lifecycle; - -@TestInstance(Lifecycle.PER_CLASS) -public class TestDSASignatureInteropSUN extends BaseTestDSASignatureInterop { - - @BeforeAll - public void beforeAll() { - Utils.loadProviderTestSuite(); - setProviderName(Utils.TEST_SUITE_PROVIDER_NAME); - setInteropProviderName(Utils.PROVIDER_SUN); - } -} diff --git a/src/test/java/ibm/jceplus/junit/openjceplusfips/TestDSASignatureInteropSUN.java b/src/test/java/ibm/jceplus/junit/openjceplusfips/TestDSASignatureInteropSUN.java deleted file mode 100644 index fcb457f37..000000000 --- a/src/test/java/ibm/jceplus/junit/openjceplusfips/TestDSASignatureInteropSUN.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright IBM Corp. 2023, 2024 - * - * This code is free software; you can redistribute it and/or modify it - * under the terms provided by IBM in the LICENSE file that accompanied - * this code, including the "Classpath" Exception described therein. - */ - -package ibm.jceplus.junit.openjceplusfips; - -import ibm.jceplus.junit.base.BaseTestDSASignatureInterop; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.TestInstance; -import org.junit.jupiter.api.TestInstance.Lifecycle; - -@TestInstance(Lifecycle.PER_CLASS) -public class TestDSASignatureInteropSUN extends BaseTestDSASignatureInterop { - - @BeforeAll - public void beforeAll() { - Utils.loadProviderTestSuite(); - setProviderName(Utils.TEST_SUITE_PROVIDER_NAME); - setInteropProviderName(Utils.PROVIDER_SUN); - } -} diff --git a/src/test/java/ibm/jceplus/junit/openjceplusfips/multithread/TestDSASignatureInteropSUN.java b/src/test/java/ibm/jceplus/junit/openjceplusfips/multithread/TestDSASignatureInteropSUN.java deleted file mode 100644 index 6a75ceed5..000000000 --- a/src/test/java/ibm/jceplus/junit/openjceplusfips/multithread/TestDSASignatureInteropSUN.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright IBM Corp. 2023, 2024 - * - * This code is free software; you can redistribute it and/or modify it - * under the terms provided by IBM in the LICENSE file that accompanied - * this code, including the "Classpath" Exception described therein. - */ - -package ibm.jceplus.junit.openjceplusfips.multithread; - -import ibm.jceplus.junit.base.BaseTestDSASignatureInterop; -import ibm.jceplus.junit.openjceplusfips.Utils; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.TestInstance; -import org.junit.jupiter.api.TestInstance.Lifecycle; - -@TestInstance(Lifecycle.PER_CLASS) -public class TestDSASignatureInteropSUN extends BaseTestDSASignatureInterop { - - @BeforeAll - public void beforeAll() { - Utils.loadProviderTestSuite(); - setProviderName(Utils.TEST_SUITE_PROVIDER_NAME); - setInteropProviderName(Utils.PROVIDER_SUN); - } -} diff --git a/src/test/java/ibm/jceplus/junit/tests/BaseTest.java b/src/test/java/ibm/jceplus/junit/tests/BaseTest.java index 53ab36e8b..50d84d8fb 100644 --- a/src/test/java/ibm/jceplus/junit/tests/BaseTest.java +++ b/src/test/java/ibm/jceplus/junit/tests/BaseTest.java @@ -1,5 +1,5 @@ /* - * Copyright IBM Corp. 2025 + * Copyright IBM Corp. 2025, 2026 * * This code is free software; you can redistribute it and/or modify it * under the terms provided by IBM in the LICENSE file that accompanied @@ -29,6 +29,14 @@ public void setProviderName(String providerName) { public void setAndInsertProvider(TestProvider provider) throws Exception { this.providerName = provider.getProviderName(); + loadSupportedProvider(provider); + } + + public void setAndInsertInteropProvider(TestProvider interopProvider) throws Exception { + loadSupportedProvider(interopProvider); + } + + protected void loadSupportedProvider(TestProvider provider) throws Exception { switch (provider) { case BC: loadProvider(TestProvider.BC); diff --git a/src/test/java/ibm/jceplus/junit/tests/BaseTestInterop.java b/src/test/java/ibm/jceplus/junit/tests/BaseTestInterop.java new file mode 100644 index 000000000..69004378b --- /dev/null +++ b/src/test/java/ibm/jceplus/junit/tests/BaseTestInterop.java @@ -0,0 +1,61 @@ +/* + * Copyright IBM Corp. 2023, 2026 + * + * This code is free software; you can redistribute it and/or modify it + * under the terms provided by IBM in the LICENSE file that accompanied + * this code, including the "Classpath" Exception described therein. + */ + +package ibm.jceplus.junit.tests; + +public class BaseTestInterop extends BaseTest { + + public String interopProviderName; + public String interopProviderName2; + + /** + * Sets the provider name to interop with. + * + * @param providerName the provider name associated with this test case for use. + */ + public void setInteropProviderName(String providerName) { + this.interopProviderName = providerName; + } + + /** + * Sets the interop provider name and loads the provider. + * + * @param interopProvider the provider to be used for interop. + */ + public void setAndInsertInteropProvider(TestProvider interopProvider) throws Exception { + this.interopProviderName = interopProvider.getProviderName(); + loadSupportedProvider(interopProvider); + } + + /** + * Gets the provider name that is to be used for interop. + * + * @return The provider name associated with the interop provider name. + */ + public String getInteropProviderName() { + return this.interopProviderName; + } + + /** + * Sets the provider name to interop with. + * + * @param providerName the provider name associated with this test case for use. + */ + public void setInteropProviderName2(String providerName) { + this.interopProviderName2 = providerName; + } + + /** + * Gets the provider name that is to be used for interop. + * + * @return The provider name associated with the interop provider name. + */ + public String getInteropProviderName2() { + return this.interopProviderName2; + } +} diff --git a/src/test/java/ibm/jceplus/junit/tests/BaseTestSignatureInterop.java b/src/test/java/ibm/jceplus/junit/tests/BaseTestSignatureInterop.java new file mode 100644 index 000000000..4c8d0b417 --- /dev/null +++ b/src/test/java/ibm/jceplus/junit/tests/BaseTestSignatureInterop.java @@ -0,0 +1,39 @@ +/* + * Copyright IBM Corp. 2023, 2026 + * + * This code is free software; you can redistribute it and/or modify it + * under the terms provided by IBM in the LICENSE file that accompanied + * this code, including the "Classpath" Exception described therein. + */ + +package ibm.jceplus.junit.tests; + +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.Signature; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class BaseTestSignatureInterop extends BaseTestInterop { + + protected void doSignVerify(String sigAlgo, byte[] message, PrivateKey privateKey, + PublicKey publicKey) throws Exception { + doSignVerify(sigAlgo, message, privateKey, publicKey, getProviderName(), getInteropProviderName()); + doSignVerify(sigAlgo, message, privateKey, publicKey, getInteropProviderName(), getProviderName()); + } + + + protected static void doSignVerify(String sigAlgo, byte[] message, PrivateKey privateKey, + PublicKey publicKey, String signProvider, String verifyProvider) throws Exception { + Signature signing = Signature.getInstance(sigAlgo, signProvider); + signing.initSign(privateKey); + signing.update(message); + byte[] signedBytes = signing.sign(); + + Signature verifying = Signature.getInstance(sigAlgo, verifyProvider); + verifying.initVerify(publicKey); + verifying.update(message); + + assertTrue(verifying.verify(signedBytes), "Signature verification failed"); + } +} + diff --git a/src/test/java/ibm/jceplus/junit/tests/TestArguments.java b/src/test/java/ibm/jceplus/junit/tests/TestArguments.java index 775297786..0c8fd4683 100644 --- a/src/test/java/ibm/jceplus/junit/tests/TestArguments.java +++ b/src/test/java/ibm/jceplus/junit/tests/TestArguments.java @@ -48,6 +48,15 @@ public static Stream rsaMultithreadKeySizesAndProviders() { return keySizesAndJCEPlusProviders(rsaKeySizes); } + /** + * Generates combinations of OpenJCEPlus* providers with the SUN provider for interoperability testing. + * + * @return Stream of Arguments containing (JCEProviders, SUN) pairs + */ + public static Stream getOpenJCEPlusWithSUNInteropProvider() { + return getOpenJCEPlusWithInteropProviders(TestProvider.SUN); + } + /** * Generates combinations of all key sizes and OpenJCEPlus* providers under test. * @@ -101,5 +110,23 @@ protected static Stream getEnabledProviders() { } } return enabledProviders.stream(); - } + } + + /** + * Generates combinations of OpenJCEPlus* providers with a specified interoperability provider for testing. + * + * @param interopProvider The interoperability provider to combine with OpenJCEPlus* providers + * @return Stream of Arguments containing (JCEProviders, interopProvider) pairs + */ + protected static Stream getOpenJCEPlusWithInteropProviders(TestProvider interopProvider) { + List enabledProviders = getEnabledProviders().toList(); + + List arguments = new ArrayList<>(); + for (TestProvider jceProvider : enabledProviders) { + arguments.add(Arguments.of(jceProvider, interopProvider)); + } + + return arguments.stream(); + } + } diff --git a/src/test/java/ibm/jceplus/junit/base/BaseTestDSASignatureInterop.java b/src/test/java/ibm/jceplus/junit/tests/TestDSASignatureInterop.java similarity index 88% rename from src/test/java/ibm/jceplus/junit/base/BaseTestDSASignatureInterop.java rename to src/test/java/ibm/jceplus/junit/tests/TestDSASignatureInterop.java index baff8978a..35abcb6d7 100644 --- a/src/test/java/ibm/jceplus/junit/base/BaseTestDSASignatureInterop.java +++ b/src/test/java/ibm/jceplus/junit/tests/TestDSASignatureInterop.java @@ -1,12 +1,12 @@ /* - * Copyright IBM Corp. 2023, 2024 + * Copyright IBM Corp. 2023, 2026 * * This code is free software; you can redistribute it and/or modify it * under the terms provided by IBM in the LICENSE file that accompanied * this code, including the "Classpath" Exception described therein. */ -package ibm.jceplus.junit.base; +package ibm.jceplus.junit.tests; import java.security.InvalidKeyException; import java.security.InvalidParameterException; @@ -21,16 +21,40 @@ import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Arrays; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.params.Parameter; +import org.junit.jupiter.params.ParameterizedClass; +import org.junit.jupiter.params.provider.MethodSource; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; -public class BaseTestDSASignatureInterop extends BaseTestSignatureInterop { +@Tag(Tags.OPENJCEPLUS_NAME) +@Tag(Tags.OPENJCEPLUS_FIPS_NAME) +@Tag(Tags.OPENJCEPLUS_MULTITHREAD_NAME) +@Tag(Tags.OPENJCEPLUS_FIPS_MULTITHREAD_NAME) +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +@ParameterizedClass +@MethodSource("ibm.jceplus.junit.tests.TestArguments#getOpenJCEPlusWithSUNInteropProvider") +public class TestDSASignatureInterop extends BaseTestSignatureInterop { + @Parameter(0) + TestProvider provider; + + @Parameter(1) + TestProvider interopProvider; static final byte[] origMsg = "this is the original message to be signed".getBytes(); + @BeforeEach + public void setUp() throws Exception { + setAndInsertProvider(provider); + setAndInsertInteropProvider(interopProvider); + } + @Test public void testSHA1withDSA_1024() throws Exception { KeyPair keyPair = null;