From 3ec7350624af5f3d5424b626510cc67c9077e079 Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Wed, 25 Feb 2026 14:11:31 +0200 Subject: [PATCH] Add Multi-Tenancy delete methods (#2937) Signed-off-by: Avgustin Marinov --- .../jpa/tenancy/MultiTenancyEntityTest.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/tenancy/MultiTenancyEntityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/tenancy/MultiTenancyEntityTest.java index 93847562c..9d1c83340 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/tenancy/MultiTenancyEntityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/tenancy/MultiTenancyEntityTest.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository.jpa.tenancy; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.assertj.core.api.Assertions.fail; import static org.eclipse.hawkbit.context.AccessContext.asSystem; @@ -18,7 +19,9 @@ import java.util.Collection; import java.util.List; import java.util.concurrent.Callable; +import org.eclipse.hawkbit.auth.SpRole; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.exception.InsufficientPermissionException; import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; @@ -86,6 +89,35 @@ class MultiTenancyEntityTest extends AbstractJpaIntegrationTest { assertThat(findTargetsForTenant).hasSize(1); } + /** + * Ensures that tenant with proper permissions can read and delete other tenants. + */ + @Test + @WithUser(tenantId = "mytenant", allSpPermissions = true) + void deleteAnotherTenantNotPossibleWithTenantPermissions() throws Exception { + // create target for another tenant + final String anotherTenant = "anotherTenant"; + final String controllerAnotherTenant = "anotherController"; + createTargetForTenant(controllerAnotherTenant, anotherTenant); + + assertThat(listTenants()).as("Expected number if tenants before deletion is").hasSize(3); + assertThatExceptionOfType(InsufficientPermissionException.class).isThrownBy(() -> systemManagement.deleteTenant(anotherTenant)); + assertThat(listTenants()).as("Expected number if tenants after deletion is").hasSize(3); + } + + @Test + @WithUser(tenantId = "mytenant", authorities = { SpRole.SYSTEM_ROLE }) + void deleteAnotherTenantPossibleWithSystemRole() throws Exception { + // create target for another tenant + final String anotherTenant = "anotherTenant"; + final String controllerAnotherTenant = "anotherController"; + createTargetForTenant(controllerAnotherTenant, anotherTenant); + + assertThat(listTenants()).as("Expected number if tenants before deletion is").hasSize(3); + systemManagement.deleteTenant(anotherTenant); + assertThat(listTenants()).as("Expected number if tenants after deletion is").hasSize(2); + } + /** * Ensures that tenant metadata is retrieved for the current tenant. */