From 35a5cde9814299038bcfe1eb1038316170eabb04 Mon Sep 17 00:00:00 2001 From: Roman Brazhnyk Date: Wed, 5 Mar 2025 16:44:44 +0800 Subject: [PATCH] test: add integration tests for java --- .../tdk/authProvider/AuthProvider.java | 4 - .../tdk/authProvider/helper/JwtUtil.java | 2 - .../tdk/authProvider/types/IotaJwtOutput.java | 3 - .../affinidi/tdk/common/EnvironmentUtil.java | 2 - .../com/affinidi/tdk/common/VaultUtil.java | 3 - tests/integration/java/pom.xml | 116 ++++++++++++++ tests/integration/java/reference/.env.example | 7 - tests/integration/java/reference/pom.xml | 114 -------------- .../com/affinidi/reference/TdkTestUtil.java | 116 -------------- .../src/test/java/TdkIntegrationTestIT.java | 142 ++++++++++++++++++ 10 files changed, 258 insertions(+), 251 deletions(-) create mode 100644 tests/integration/java/pom.xml delete mode 100644 tests/integration/java/reference/.env.example delete mode 100644 tests/integration/java/reference/pom.xml delete mode 100644 tests/integration/java/reference/src/main/java/com/affinidi/reference/TdkTestUtil.java create mode 100644 tests/integration/java/src/test/java/TdkIntegrationTestIT.java diff --git a/packages/java/auth.provider/src/main/java/com/affinidi/tdk/authProvider/AuthProvider.java b/packages/java/auth.provider/src/main/java/com/affinidi/tdk/authProvider/AuthProvider.java index cb5bf0707..5a32da9f7 100644 --- a/packages/java/auth.provider/src/main/java/com/affinidi/tdk/authProvider/AuthProvider.java +++ b/packages/java/auth.provider/src/main/java/com/affinidi/tdk/authProvider/AuthProvider.java @@ -28,10 +28,6 @@ /** * This class provides utility functions in order to generate projectScopeToken required to call Affinidi Services. - * - * - * @author Priyanka - * */ public class AuthProvider { diff --git a/packages/java/auth.provider/src/main/java/com/affinidi/tdk/authProvider/helper/JwtUtil.java b/packages/java/auth.provider/src/main/java/com/affinidi/tdk/authProvider/helper/JwtUtil.java index 53b86e0dd..540a989f8 100644 --- a/packages/java/auth.provider/src/main/java/com/affinidi/tdk/authProvider/helper/JwtUtil.java +++ b/packages/java/auth.provider/src/main/java/com/affinidi/tdk/authProvider/helper/JwtUtil.java @@ -43,8 +43,6 @@ /** * This class provides utility functions required by {@link AuthProvider} related for processing(creating, signing, * validation) of JWT. - * - * @author Priyanka */ public class JwtUtil { diff --git a/packages/java/auth.provider/src/main/java/com/affinidi/tdk/authProvider/types/IotaJwtOutput.java b/packages/java/auth.provider/src/main/java/com/affinidi/tdk/authProvider/types/IotaJwtOutput.java index 07c727628..4e1db09ab 100644 --- a/packages/java/auth.provider/src/main/java/com/affinidi/tdk/authProvider/types/IotaJwtOutput.java +++ b/packages/java/auth.provider/src/main/java/com/affinidi/tdk/authProvider/types/IotaJwtOutput.java @@ -2,9 +2,6 @@ /** * This class represents the output returned when {@link AuthProvider#signIotaJwt()} is invoked - * - * @author Priyanka - * */ public class IotaJwtOutput { diff --git a/packages/java/common/src/main/java/com/affinidi/tdk/common/EnvironmentUtil.java b/packages/java/common/src/main/java/com/affinidi/tdk/common/EnvironmentUtil.java index d791f8aac..271e89438 100644 --- a/packages/java/common/src/main/java/com/affinidi/tdk/common/EnvironmentUtil.java +++ b/packages/java/common/src/main/java/com/affinidi/tdk/common/EnvironmentUtil.java @@ -12,8 +12,6 @@ * This class provides utility functions required to access environment specific configurations. The environment can be * specified in the .env file at the project base using AFFINIDI_TDK_PROPERTY_NAME or * NEXT_PUBLIC_AFFINIDI_TDK_ENVIRONMENT as dev, local or prod. - * - * @author Priyanka */ public class EnvironmentUtil { diff --git a/packages/java/common/src/main/java/com/affinidi/tdk/common/VaultUtil.java b/packages/java/common/src/main/java/com/affinidi/tdk/common/VaultUtil.java index 5c1d9689c..3dfc9e610 100644 --- a/packages/java/common/src/main/java/com/affinidi/tdk/common/VaultUtil.java +++ b/packages/java/common/src/main/java/com/affinidi/tdk/common/VaultUtil.java @@ -9,9 +9,6 @@ /** * This class provides utility functions required to create vault specific links. Refer {@EnvironmentUtil} for more * information. - * - * - * @author Priyanka */ public final class VaultUtil { diff --git a/tests/integration/java/pom.xml b/tests/integration/java/pom.xml new file mode 100644 index 000000000..d6155c791 --- /dev/null +++ b/tests/integration/java/pom.xml @@ -0,0 +1,116 @@ + + 4.0.0 + + com.example + integration-tests + 1.0-SNAPSHOT + jar + + + 17 + 17 + UTF-8 + + + + + com.affinidi.tdk + common + 1.2.1 + compile + + + + com.affinidi.tdk + auth.provider + 1.2.1 + compile + + + com.affinidi.tdk + wallets.client + 1.2.1 + compile + + + com.affinidi.tdk + credential.issuance.client + 1.4.0 + compile + + + com.affinidi.tdk + credential.verification.client + 1.2.1 + compile + + + com.affinidi.tdk + iam.client + 1.2.1 + compile + + + com.affinidi.tdk + iota.client + 1.3.1 + compile + + + com.affinidi.tdk + login.configuration.client + 1.2.1 + compile + + + + + org.junit.jupiter + junit-jupiter-api + 5.10.0 + test + + + org.junit.jupiter + junit-jupiter-engine + 5.10.0 + test + + + + + io.github.cdimascio + dotenv-java + 3.0.0 + test + + + + + + + + org.apache.maven.plugins + maven-failsafe-plugin + 3.2.5 + + + integration-test + verify + + integration-test + verify + + + + **/*IT.java + + + + + + + + diff --git a/tests/integration/java/reference/.env.example b/tests/integration/java/reference/.env.example deleted file mode 100644 index b87060e4d..000000000 --- a/tests/integration/java/reference/.env.example +++ /dev/null @@ -1,7 +0,0 @@ -AFFINIDI_TDK_ENVIRONMENT=prod - -PROJECT_ID="" -KEY_ID= -TOKEN_ID="" -PASSPHRASE="" -PRIVATE_KEY="" \ No newline at end of file diff --git a/tests/integration/java/reference/pom.xml b/tests/integration/java/reference/pom.xml deleted file mode 100644 index 2e30b9a65..000000000 --- a/tests/integration/java/reference/pom.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - 4.0.0 - jar - com.affinidi.tdk - reference - 1.0 - reference - https://github.com/affinidi/affinidi-tdk - - - Apache-2.0 - https://github.com/affinidi/affinidi-tdk/blob/main/LICENSE - repo - - - - - - Affinidi - ... - Affinidi - https://affinidi.com - - - - - UTF-8 - 1.8 - ${java.version} - ${java.version} - 1.0 - 1.0 - - - - - - com.affinidi.tdk - common - ${affinidi-common-version} - - - com.affinidi.tdk - auth.provider - ${affinidi-auth-version} - - - com.affinidi.tdk - wallets.client - 1.0.0 - compile - - - com.affinidi.tdk - credential.issuance.client - 1.0.0 - compile - - - - - - - - - maven-clean-plugin - 3.1.0 - - - - maven-resources-plugin - 3.0.2 - - - maven-compiler-plugin - 3.8.0 - - - - org.apache.maven.plugins - maven-surefire-plugin - - - maven-failsafe-plugin - 3.5.0 - - - maven-jar-plugin - 3.0.2 - - - maven-install-plugin - 2.5.2 - - - maven-deploy-plugin - 2.8.2 - - - - maven-site-plugin - 3.7.1 - - - maven-project-info-reports-plugin - 3.0.0 - - - - - diff --git a/tests/integration/java/reference/src/main/java/com/affinidi/reference/TdkTestUtil.java b/tests/integration/java/reference/src/main/java/com/affinidi/reference/TdkTestUtil.java deleted file mode 100644 index 631606699..000000000 --- a/tests/integration/java/reference/src/main/java/com/affinidi/reference/TdkTestUtil.java +++ /dev/null @@ -1,116 +0,0 @@ - -package com.affinidi.reference; - - - - -import com.affinidi.tdk.authProvider.AuthProvider; - -import com.affinidi.tdk.credential.issuance.client.apis.IssuanceApi; - -import com.affinidi.tdk.wallets.client.ApiClient; -import com.affinidi.tdk.wallets.client.Configuration; -import com.affinidi.tdk.wallets.client.apis.WalletApi; -import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth; -import com.affinidi.tdk.wallets.client.models.WalletsListDto; - - -/** -* To execute this class, -1. Ensure that base package of the working directory contains a valid .env file with values for each property -as present in .env.example -2. Ensure that auth-provider and common package jar is present in either the central maven respository -3. Or you can go to the resective pakage and run mvn clean install : in order to deply these jars in local -maven respository -* -* @author Priyanka -* -*/ - -public class TdkTestUtil { - - public static void main(String arg[]){ - try{ - System.out.println("\n\n============================="); - System.out.println("01. Testing Wallet Client using TDK java packages"); - System.out.println("=============================\n\n"); - testWalletClient(); - System.out.println("\n\n============================="); - System.out.println("Wallet Client testing using TDK java packages completed"); - System.out.println("=============================\n\n"); - - - System.out.println("\n\n============================="); - System.out.println("02. Testing Issuance Client using TDK java packages"); - System.out.println("=============================\n\n"); - testIssuanceClient(); - System.out.println("\n\n============================="); - System.out.println("Issuance Client testing using TDK java packages completed"); - System.out.println("=============================\n\n"); - }catch(Exception exception){ - exception.printStackTrace(); - } - } - - public static void testWalletClient() throws Exception{ - - System.out.println("Getting projectScopenToken before calling wallet API"); - - AuthProvider authProvider = new AuthProvider.Configurations().buildWithEnv(); - String projectToken = authProvider.fetchProjectScopedToken(); - System.out.println("ProjectScopeToken > > > > > : "+projectToken); - - // Creating an API Client using the above token - ApiClient defaultClient = Configuration.getDefaultApiClient(); - ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth"); - ProjectTokenAuth.setApiKey(projectToken); - - WalletApi apiInstance = new WalletApi(defaultClient); - String didType = null; - - System.out.println("Calling listWallets "); - WalletsListDto response = apiInstance.listWallets(didType); - System.out.println("Total wallets : "+response.getWallets().size()); - - - System.out.println("Should AuthProvider refresh the token before any further call ? "+authProvider.shouldRefreshToken()); - } - - public static void testIssuanceClient() throws Exception{ - - System.out.println("Getting projectScopenToken before calling issuance API"); - AuthProvider authProvider = new AuthProvider.Configurations().buildWithEnv(); - String projectToken = authProvider.fetchProjectScopedToken(); - - // Creating an API Client using the above token - com.affinidi.tdk.credential.issuance.client.ApiClient issuanceClient = com.affinidi.tdk.credential.issuance.client.Configuration.getDefaultApiClient(); - com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth issueTokenAuth = (com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth) issuanceClient.getAuthentication("ProjectTokenAuth"); - issueTokenAuth.setApiKey(projectToken); - - IssuanceApi issuanceApi = new IssuanceApi(issuanceClient); - String projectIdForTesting = "084036a6-a775-478a-9a97-a1323738897f"; - System.out.println(issuanceApi.listIssuance(projectIdForTesting)); - - /* Uncomment to test startIssuance. Provide the relevant projectId and crdential data - StartIssuanceInput startIssuanceInput = new StartIssuanceInput(); - startIssuanceInput.setHolderDid("did:key:zQ3shNb7dEAa7z4LY8eAbPafNM4iSxppwuvndoHkTUUp8Hbt6"); - startIssuanceInput.setClaimMode(ClaimModeEnum.NORMAL); - - StartIssuanceInputDataInner innerData = new StartIssuanceInputDataInner(); - innerData.setCredentialTypeId("AlumniIdentityCard"); - List list = new ArrayList(); - list.add(innerData); - - startIssuanceInput.setData(list); - - System.out.println(issuanceApi.startIssuance("", startIssuanceInput)); - */ - - - - - } - - - -} diff --git a/tests/integration/java/src/test/java/TdkIntegrationTestIT.java b/tests/integration/java/src/test/java/TdkIntegrationTestIT.java new file mode 100644 index 000000000..eaea7a5c7 --- /dev/null +++ b/tests/integration/java/src/test/java/TdkIntegrationTestIT.java @@ -0,0 +1,142 @@ +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.BeforeEach; + +import com.affinidi.tdk.authProvider.AuthProvider; +import com.affinidi.tdk.authProvider.exception.PSTGenerationException; +import com.affinidi.tdk.wallets.client.apis.WalletApi; +import com.affinidi.tdk.wallets.client.models.WalletsListDto; +import com.affinidi.tdk.iam.client.apis.PoliciesApi; +import com.affinidi.tdk.iam.client.models.PolicyDto; +import com.affinidi.tdk.login.configuration.client.apis.ConfigurationApi; +import com.affinidi.tdk.login.configuration.client.models.ListLoginConfigurationOutput; +import com.affinidi.tdk.iota.client.apis.ConfigurationsApi; +import com.affinidi.tdk.iota.client.models.ListConfigurationOK; +import com.affinidi.tdk.credential.issuance.client.apis.IssuanceApi; +import com.affinidi.tdk.credential.issuance.client.models.ListIssuanceResponse; + +import io.github.cdimascio.dotenv.Dotenv; +import java.util.function.Supplier; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** +* NOTE: If your PAT has unencrypted private key, PASSPHRASE must be set (as empty string) +*/ +public class TdkIntegrationTestIT { + private Supplier tokenSupplier; // projectScopedTokenHook + private String tokenId; // PAT ID + private String projectId; // project ID + + // TODO: replace with BeforeAll (change related methods to static) + @BeforeEach + void setUp() { + tokenSupplier = projectScopedTokenSupplier(); + } + + + private AuthProvider createAuthProvider() { + try { + Dotenv dotenv = Dotenv.configure() + .directory("../../") + .filename(".env") + .load(); + + tokenId = dotenv.get("TOKEN_ID"); + projectId = dotenv.get("PROJECT_ID"); + + return new AuthProvider.Configurations() + .keyId(dotenv.get("KEY_ID")) + .privateKey(dotenv.get("PRIVATE_KEY")) + .projectId(dotenv.get("PROJECT_ID")) + .passphrase(dotenv.get("PASSPHRASE")) + .tokenId(tokenId) + .build(); + } catch (Exception e) { + throw new RuntimeException("Failed to init AuthProvider", e); + } + }; + + private Supplier projectScopedTokenSupplier() { + AuthProvider authProvider = createAuthProvider(); + + return () -> { + try { + return authProvider.fetchProjectScopedToken(); + } catch (Exception e) { + throw new RuntimeException("Failed to fetch project scoped token", e); + } + }; + } + + @Test + void testWalletClient() throws Exception { + com.affinidi.tdk.wallets.client.ApiClient defaultClient = com.affinidi.tdk.wallets.client.Configuration.getDefaultApiClient(); + com.affinidi.tdk.wallets.client.auth.ApiKeyAuth ProjectTokenAuth = (com.affinidi.tdk.wallets.client.auth.ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth"); + + ProjectTokenAuth.setApiKeySupplier(tokenSupplier); // Set projectScopedTokenHook + + WalletApi apiInstance = new WalletApi(defaultClient); + WalletsListDto response = apiInstance.listWallets(null); // didType = null + + // Expecting number of wallets > 0 + assertTrue(response.getWallets().size() > 0); + } + + @Test + void testIamClient() throws Exception { + com.affinidi.tdk.iam.client.ApiClient defaultClient = com.affinidi.tdk.iam.client.Configuration.getDefaultApiClient(); + com.affinidi.tdk.iam.client.auth.ApiKeyAuth ProjectTokenAuth = (com.affinidi.tdk.iam.client.auth.ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth"); + + ProjectTokenAuth.setApiKeySupplier(tokenSupplier); // Set projectScopedTokenHook + + PoliciesApi apiInstance = new PoliciesApi(defaultClient); + PolicyDto response = apiInstance.getPolicies(tokenId, "token"); + + // Expecting policy to exist for PAT + assertNotNull(response); + } + + @Test + void testLoginConfigurationClient() throws Exception { + com.affinidi.tdk.login.configuration.client.ApiClient defaultClient = com.affinidi.tdk.login.configuration.client.Configuration.getDefaultApiClient(); + com.affinidi.tdk.login.configuration.client.auth.ApiKeyAuth ProjectTokenAuth = (com.affinidi.tdk.login.configuration.client.auth.ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth"); + + ProjectTokenAuth.setApiKeySupplier(tokenSupplier); // Set projectScopedTokenHook + + ConfigurationApi apiInstance = new ConfigurationApi(defaultClient); + // NOTE: Values for optional parameter (Integer) limit and (String) exclusiveStartKey + // still have to be passed + ListLoginConfigurationOutput response = apiInstance.listLoginConfigurations(0, ""); + + // Expecting login configurations to exist + assertTrue(response.getConfigurations().size() > 0); + } + + @Test + void testIotaConfigurationsClient() throws Exception { + com.affinidi.tdk.iota.client.ApiClient defaultClient = com.affinidi.tdk.iota.client.Configuration.getDefaultApiClient(); + com.affinidi.tdk.iota.client.auth.ApiKeyAuth ProjectTokenAuth = (com.affinidi.tdk.iota.client.auth.ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth"); + + ProjectTokenAuth.setApiKeySupplier(tokenSupplier); // Set projectScopedTokenHook + + ConfigurationsApi apiInstance = new ConfigurationsApi(defaultClient); + ListConfigurationOK response = apiInstance.listIotaConfigurations(); + + // Expecting Iota configurations to exist + assertTrue(response.getConfigurations().size() > 0); + } + + @Test + void testIssuanceClient() throws Exception { + com.affinidi.tdk.credential.issuance.client.ApiClient defaultClient = com.affinidi.tdk.credential.issuance.client.Configuration.getDefaultApiClient(); + com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth ProjectTokenAuth = (com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth"); + + ProjectTokenAuth.setApiKeySupplier(tokenSupplier); // Set projectScopedTokenHook + + IssuanceApi apiInstance = new IssuanceApi(defaultClient); + ListIssuanceResponse response = apiInstance.listIssuance(projectId); + + assertNotNull(response); + } +}