From 3595f06ddd7a1cbb3af1ad6bf0cc33525fc3b1cd Mon Sep 17 00:00:00 2001 From: Matthias Kuhr Date: Thu, 16 Jul 2026 11:38:54 +0200 Subject: [PATCH 1/2] Add test for tenant subdomain logic --- .../tenant/DefaultTenantFacadeXsuaaTest.java | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/cloudplatform/tenant/src/test/java/com/sap/cloud/sdk/cloudplatform/tenant/DefaultTenantFacadeXsuaaTest.java b/cloudplatform/tenant/src/test/java/com/sap/cloud/sdk/cloudplatform/tenant/DefaultTenantFacadeXsuaaTest.java index c9056a4a8b..ae0ac68370 100644 --- a/cloudplatform/tenant/src/test/java/com/sap/cloud/sdk/cloudplatform/tenant/DefaultTenantFacadeXsuaaTest.java +++ b/cloudplatform/tenant/src/test/java/com/sap/cloud/sdk/cloudplatform/tenant/DefaultTenantFacadeXsuaaTest.java @@ -6,6 +6,7 @@ import org.assertj.vavr.api.VavrAssertions; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import com.auth0.jwt.JWT; @@ -45,6 +46,25 @@ void givenNoUserTokenAndXsuaaTenantThenExceptionIsReturned() VavrAssertions.assertThat(tenantTry).isFailure().failBecauseOf(TenantAccessException.class); } + @Test + @DisplayName("Subdomains don't resolve from issuers without an http prefix") + void givenIssuerWithoutSchemeThenExceptionIsReturned() + { + final String userTenant = "someUserTenant"; + final String issuerWithoutScheme = "foo.accounts.sap.com"; + final AuthToken jwtWithTenant = createJwtWithTenantAndIssuer(userTenant, issuerWithoutScheme); + + final DefaultAuthTokenFacade mockedFacade = mock(DefaultAuthTokenFacade.class); + when(mockedFacade.tryGetCurrentToken()).thenReturn(Try.success(jwtWithTenant)); + AuthTokenAccessor.setAuthTokenFacade(mockedFacade); + + final Try tenantTry = new DefaultTenantFacade().tryGetCurrentTenant(); + + VavrAssertions.assertThat(tenantTry) + .describedAs("issuers without an https:// prefix should lead to a failure") + .isFailure().failBecauseOf(TenantAccessException.class); + } + private DefaultAuthTokenFacade mockCurrentTenant( final String userTenant ) { final AuthToken jwtWithTenant = createJwtWithTenant(userTenant); @@ -57,13 +77,14 @@ private DefaultAuthTokenFacade mockCurrentTenant( final String userTenant ) } private AuthToken createJwtWithTenant( final String tenantId ) + { + return createJwtWithTenantAndIssuer(tenantId, "https://sudomain-of-" + tenantId + ".localhost:8080"); + } + + private AuthToken createJwtWithTenantAndIssuer( final String tenantId, final String issuer ) { final String encodedJwt = - JWT - .create() - .withClaim("zid", tenantId) - .withClaim("iss", "https://sudomain-of-" + tenantId + ".localhost:8080") - .sign(Algorithm.none()); + JWT.create().withClaim("zid", tenantId).withClaim("iss", issuer).sign(Algorithm.none()); final DecodedJWT decodedJwt = JWT.decode(encodedJwt); return new AuthToken(decodedJwt); } From 57ce44e98b9ab0cf30396ce8d17d31530ce9991e Mon Sep 17 00:00:00 2001 From: Jonas Israel Date: Thu, 16 Jul 2026 12:39:24 +0200 Subject: [PATCH 2/2] codestyle --- .../tenant/DefaultTenantFacadeXsuaaTest.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cloudplatform/tenant/src/test/java/com/sap/cloud/sdk/cloudplatform/tenant/DefaultTenantFacadeXsuaaTest.java b/cloudplatform/tenant/src/test/java/com/sap/cloud/sdk/cloudplatform/tenant/DefaultTenantFacadeXsuaaTest.java index ae0ac68370..d35aa463f3 100644 --- a/cloudplatform/tenant/src/test/java/com/sap/cloud/sdk/cloudplatform/tenant/DefaultTenantFacadeXsuaaTest.java +++ b/cloudplatform/tenant/src/test/java/com/sap/cloud/sdk/cloudplatform/tenant/DefaultTenantFacadeXsuaaTest.java @@ -47,7 +47,7 @@ void givenNoUserTokenAndXsuaaTenantThenExceptionIsReturned() } @Test - @DisplayName("Subdomains don't resolve from issuers without an http prefix") + @DisplayName( "Subdomains don't resolve from issuers without an http prefix" ) void givenIssuerWithoutSchemeThenExceptionIsReturned() { final String userTenant = "someUserTenant"; @@ -60,9 +60,11 @@ void givenIssuerWithoutSchemeThenExceptionIsReturned() final Try tenantTry = new DefaultTenantFacade().tryGetCurrentTenant(); - VavrAssertions.assertThat(tenantTry) - .describedAs("issuers without an https:// prefix should lead to a failure") - .isFailure().failBecauseOf(TenantAccessException.class); + VavrAssertions + .assertThat(tenantTry) + .describedAs("issuers without an https:// prefix should lead to a failure") + .isFailure() + .failBecauseOf(TenantAccessException.class); } private DefaultAuthTokenFacade mockCurrentTenant( final String userTenant )