From aff871f9885dce170cb4f46f7569f53900214c9b Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Tue, 28 Oct 2025 15:38:59 +0200 Subject: [PATCH] Add cache for SoftwareModule, DistributionSet and Target types (#2784) Signed-off-by: Avgustin Marinov --- .../DistributionSetTypeDeletedEvent.java | 3 +- .../SoftwareModuleTypeDeletedEvent.java | 3 +- .../event/remote/TargetTypeDeletedEvent.java | 3 +- .../DistributionSetTypeCreatedEvent.java | 3 +- .../DistributionSetTypeUpdatedEvent.java | 3 +- .../SoftwareModuleTypeUpdatedEvent.java | 3 +- .../entity/SoftwareModuleUpdatedEvent.java | 3 +- .../remote/entity/TargetTypeCreatedEvent.java | 3 +- .../remote/entity/TargetTypeUpdatedEvent.java | 3 +- .../AbstractJpaRepositoryManagement.java | 34 +++++-------------- .../JpaDistributionSetTypeManagement.java | 7 ++++ .../JpaSoftwareModuleTypeManagement.java | 7 ++++ .../management/JpaTargetTypeManagement.java | 8 +++++ .../DistributionSetTypeManagementTest.java | 4 +-- .../SoftwareModuleTypeManagementTest.java | 4 --- .../management/TargetTypeManagementTest.java | 2 +- .../TenantConfigurationManagementTest.java | 2 -- .../hawkbit-test-defaults.properties | 8 ++++- 18 files changed, 59 insertions(+), 44 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/DistributionSetTypeDeletedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/DistributionSetTypeDeletedEvent.java index ca865fe1d..12f1f11dc 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/DistributionSetTypeDeletedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/DistributionSetTypeDeletedEvent.java @@ -15,12 +15,13 @@ import lombok.NoArgsConstructor; import org.eclipse.hawkbit.repository.event.entity.EntityDeletedEvent; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; +import org.eclipse.hawkbit.tenancy.TenantAwareCacheManager.CacheEvictEvent; /** * Defines the remote event of deleting a {@link DistributionSetType}. */ @NoArgsConstructor // for serialization libs like jackson -public class DistributionSetTypeDeletedEvent extends RemoteIdEvent implements EntityDeletedEvent { +public class DistributionSetTypeDeletedEvent extends RemoteIdEvent implements EntityDeletedEvent, CacheEvictEvent { @Serial private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/SoftwareModuleTypeDeletedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/SoftwareModuleTypeDeletedEvent.java index 8f574204d..5643330f8 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/SoftwareModuleTypeDeletedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/SoftwareModuleTypeDeletedEvent.java @@ -15,12 +15,13 @@ import lombok.NoArgsConstructor; import org.eclipse.hawkbit.repository.event.entity.EntityDeletedEvent; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; +import org.eclipse.hawkbit.tenancy.TenantAwareCacheManager.CacheEvictEvent; /** * Defines the remote event of deleting a {@link SoftwareModuleType}. */ @NoArgsConstructor // for serialization libs like jackson -public class SoftwareModuleTypeDeletedEvent extends RemoteIdEvent implements EntityDeletedEvent { +public class SoftwareModuleTypeDeletedEvent extends RemoteIdEvent implements EntityDeletedEvent, CacheEvictEvent { @Serial private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetTypeDeletedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetTypeDeletedEvent.java index 8d7e62de5..8c5fecc59 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetTypeDeletedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetTypeDeletedEvent.java @@ -15,12 +15,13 @@ import lombok.NoArgsConstructor; import org.eclipse.hawkbit.repository.event.entity.EntityDeletedEvent; import org.eclipse.hawkbit.repository.model.TargetType; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; +import org.eclipse.hawkbit.tenancy.TenantAwareCacheManager.CacheEvictEvent; /** * Defines the remote event of deleting a {@link TargetType}. */ @NoArgsConstructor // for serialization libs like jackson -public class TargetTypeDeletedEvent extends RemoteIdEvent implements EntityDeletedEvent { +public class TargetTypeDeletedEvent extends RemoteIdEvent implements EntityDeletedEvent, CacheEvictEvent { @Serial private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetTypeCreatedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetTypeCreatedEvent.java index 05478bfa6..e6e793a71 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetTypeCreatedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetTypeCreatedEvent.java @@ -14,12 +14,13 @@ import java.io.Serial; import lombok.NoArgsConstructor; import org.eclipse.hawkbit.repository.event.entity.EntityCreatedEvent; import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.tenancy.TenantAwareCacheManager.CacheEvictEvent; /** * Defines the remote event of creating a new {@link DistributionSetType}. */ @NoArgsConstructor // for serialization libs like jackson -public class DistributionSetTypeCreatedEvent extends RemoteEntityEvent implements EntityCreatedEvent { +public class DistributionSetTypeCreatedEvent extends RemoteEntityEvent implements EntityCreatedEvent, CacheEvictEvent { @Serial private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetTypeUpdatedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetTypeUpdatedEvent.java index 0204dc975..5cac1caf7 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetTypeUpdatedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetTypeUpdatedEvent.java @@ -15,12 +15,13 @@ import lombok.NoArgsConstructor; import org.eclipse.hawkbit.repository.event.entity.EntityUpdatedEvent; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.tenancy.TenantAwareCacheManager.CacheEvictEvent; /** * Defines the remote event for updating a {@link SoftwareModuleType}. */ @NoArgsConstructor // for serialization libs like jackson -public class DistributionSetTypeUpdatedEvent extends RemoteEntityEvent implements EntityUpdatedEvent { +public class DistributionSetTypeUpdatedEvent extends RemoteEntityEvent implements EntityUpdatedEvent, CacheEvictEvent { @Serial private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/SoftwareModuleTypeUpdatedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/SoftwareModuleTypeUpdatedEvent.java index 992624a65..2165492f8 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/SoftwareModuleTypeUpdatedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/SoftwareModuleTypeUpdatedEvent.java @@ -14,12 +14,13 @@ import java.io.Serial; import lombok.NoArgsConstructor; import org.eclipse.hawkbit.repository.event.entity.EntityUpdatedEvent; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.tenancy.TenantAwareCacheManager.CacheEvictEvent; /** * Defines the remote event for updating a {@link SoftwareModuleType}. */ @NoArgsConstructor // for serialization libs like jackson -public class SoftwareModuleTypeUpdatedEvent extends RemoteEntityEvent implements EntityUpdatedEvent { +public class SoftwareModuleTypeUpdatedEvent extends RemoteEntityEvent implements EntityUpdatedEvent, CacheEvictEvent { @Serial private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/SoftwareModuleUpdatedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/SoftwareModuleUpdatedEvent.java index 3eb603562..63c9fbf3a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/SoftwareModuleUpdatedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/SoftwareModuleUpdatedEvent.java @@ -14,12 +14,13 @@ import java.io.Serial; import lombok.NoArgsConstructor; import org.eclipse.hawkbit.repository.event.entity.EntityUpdatedEvent; import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.tenancy.TenantAwareCacheManager.CacheEvictEvent; /** * Defines the remote event for updating a {@link SoftwareModule}. */ @NoArgsConstructor // for serialization libs like jackson -public class SoftwareModuleUpdatedEvent extends RemoteEntityEvent implements EntityUpdatedEvent { +public class SoftwareModuleUpdatedEvent extends RemoteEntityEvent implements EntityUpdatedEvent, CacheEvictEvent { @Serial private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTypeCreatedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTypeCreatedEvent.java index 11240a8a9..da15b2820 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTypeCreatedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTypeCreatedEvent.java @@ -14,12 +14,13 @@ import java.io.Serial; import lombok.NoArgsConstructor; import org.eclipse.hawkbit.repository.event.entity.EntityCreatedEvent; import org.eclipse.hawkbit.repository.model.TargetType; +import org.eclipse.hawkbit.tenancy.TenantAwareCacheManager.CacheEvictEvent; /** * Defines the remote event of creating a new {@link TargetType}. */ @NoArgsConstructor // for serialization libs like jackson -public class TargetTypeCreatedEvent extends RemoteEntityEvent implements EntityCreatedEvent { +public class TargetTypeCreatedEvent extends RemoteEntityEvent implements EntityCreatedEvent, CacheEvictEvent { @Serial private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTypeUpdatedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTypeUpdatedEvent.java index 3f88dda31..92d3d8886 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTypeUpdatedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTypeUpdatedEvent.java @@ -14,12 +14,13 @@ import java.io.Serial; import lombok.NoArgsConstructor; import org.eclipse.hawkbit.repository.event.entity.EntityUpdatedEvent; import org.eclipse.hawkbit.repository.model.TargetType; +import org.eclipse.hawkbit.tenancy.TenantAwareCacheManager.CacheEvictEvent; /** * Defines the remote event for updating a {@link TargetType}. */ @NoArgsConstructor // for serialization libs like jackson -public class TargetTypeUpdatedEvent extends RemoteEntityEvent implements EntityUpdatedEvent { +public class TargetTypeUpdatedEvent extends RemoteEntityEvent implements EntityUpdatedEvent, CacheEvictEvent { @Serial private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/AbstractJpaRepositoryManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/AbstractJpaRepositoryManagement.java index ba97a518d..b15b007bf 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/AbstractJpaRepositoryManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/AbstractJpaRepositoryManagement.java @@ -134,7 +134,6 @@ abstract class AbstractJpaRepositoryManagement afterCommit(cache::clear)); return jpaRepository.save(AccessController.Operation.CREATE, jpaEntity(create)); } @@ -142,46 +141,35 @@ abstract class AbstractJpaRepositoryManagement create(final Collection create) { - getCache().ifPresent(cache -> afterCommit(cache::clear)); return jpaRepository.saveAll(AccessController.Operation.CREATE, create.stream().map(this::jpaEntity).toList()); } @Override - @SuppressWarnings("unchecked") public T get(final long id) { final Cache cache = getCache().orElse(null); if (cache == null) { return jpaRepository.getById(id); } else { - final T cached = (T) cache.get(id); - if (cached == null) { - final T entity = jpaRepository.getById(id); - if (entity != null) { // should not be null - but throw exception - but for sure check - cache.put(id, entity); + try { + return cache.get(id, () -> jpaRepository.getById(id)); + } catch (final Cache.ValueRetrievalException e) { + if (e.getCause() instanceof EntityNotFoundException enf) { + throw enf; + } else { + throw e; } - return entity; - } else { - return cached; } } } @Override - @SuppressWarnings("unchecked") public Optional find(final long id) { final Cache cache = getCache().orElse(null); if (cache == null) { return jpaRepository.findById(id); } else { - final T cached = (T) cache.get(id); - if (cached == null) { - final Optional entity = jpaRepository.findById(id); - // should not be null - but throw exception - but for sure check - entity.ifPresent(t -> cache.put(id, t)); - return entity; - } else { - return Optional.of(cached); - } + // we cache only value - not optionals + return Optional.ofNullable(cache.get(id, () -> jpaRepository.findById(id).orElse(null))); } } @@ -226,7 +214,6 @@ abstract class AbstractJpaRepositoryManagement afterCommit(() -> cache.evict(update.getId()))); final T entity = getValid(update.getId()); // update getId has no setter in target JPA entity but shall have getter and the value shall be the same // otherwise the Utils will throw an exception that there is no counterpart setter for getId @@ -264,7 +251,6 @@ abstract class AbstractJpaRepositoryManagement afterCommit(() -> toSave.forEach(updated -> cache.evict(updated.getId())))); final List savedEntities = jpaRepository.saveAll(toSave); final Map result = new HashMap<>(toUpdate); for (final T savedEntity : savedEntities) { @@ -278,7 +264,6 @@ abstract class AbstractJpaRepositoryManagement afterCommit(() -> cache.evict(id))); delete0(List.of(id)); } @@ -286,7 +271,6 @@ abstract class AbstractJpaRepositoryManagement ids) { - getCache().ifPresent(cache -> afterCommit(() -> ids.forEach(cache::evict))); delete0(ids); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetTypeManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetTypeManagement.java index 315ab4ab2..55872967f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetTypeManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetTypeManagement.java @@ -36,7 +36,9 @@ import org.eclipse.hawkbit.repository.jpa.specifications.DistributionSetTypeSpec import org.eclipse.hawkbit.repository.jpa.utils.QuotaHelper; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.tenancy.TenantAwareCacheManager; import org.springframework.boot.autoconfigure.condition.ConditionalOnBooleanProperty; +import org.springframework.cache.Cache; import org.springframework.dao.ConcurrencyFailureException; import org.springframework.retry.annotation.Backoff; import org.springframework.retry.annotation.Retryable; @@ -89,6 +91,11 @@ public class JpaDistributionSetTypeManagement super.delete0(ids); } + @Override + protected Optional getCache() { + return Optional.of(TenantAwareCacheManager.getInstance().getCache(JpaDistributionSetType.class.getSimpleName())); + } + @Override public Optional findByKey(final String key) { return jpaRepository.findOne(DistributionSetTypeSpecification.byKey(key)); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleTypeManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleTypeManagement.java index b279bd44e..1775b331a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleTypeManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleTypeManagement.java @@ -20,7 +20,9 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; import org.eclipse.hawkbit.repository.jpa.repository.DistributionSetTypeRepository; import org.eclipse.hawkbit.repository.jpa.repository.SoftwareModuleRepository; import org.eclipse.hawkbit.repository.jpa.repository.SoftwareModuleTypeRepository; +import org.eclipse.hawkbit.tenancy.TenantAwareCacheManager; import org.springframework.boot.autoconfigure.condition.ConditionalOnBooleanProperty; +import org.springframework.cache.Cache; import org.springframework.stereotype.Service; @Service @@ -42,6 +44,11 @@ public class JpaSoftwareModuleTypeManagement this.softwareModuleRepository = softwareModuleRepository; } + @Override + protected Optional getCache() { + return Optional.of(TenantAwareCacheManager.getInstance().getCache(JpaSoftwareModuleType.class.getSimpleName())); + } + @Override public Optional findByKey(final String key) { return jpaRepository.findByKey(key); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTypeManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTypeManagement.java index 74fb3647e..5eecb50d2 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTypeManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTypeManagement.java @@ -31,7 +31,9 @@ import org.eclipse.hawkbit.repository.jpa.specifications.TargetTypeSpecification import org.eclipse.hawkbit.repository.jpa.utils.QuotaHelper; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.TargetType; +import org.eclipse.hawkbit.tenancy.TenantAwareCacheManager; import org.springframework.boot.autoconfigure.condition.ConditionalOnBooleanProperty; +import org.springframework.cache.Cache; import org.springframework.cache.annotation.Cacheable; import org.springframework.dao.ConcurrencyFailureException; import org.springframework.retry.annotation.Backoff; @@ -78,6 +80,12 @@ public class JpaTargetTypeManagement super.delete0(ids); } + @Override + protected Optional getCache() { + return Optional.of(TenantAwareCacheManager.getInstance().getCache(JpaTargetType.class.getSimpleName())); + } + + @Override @Cacheable(value = CACHE_TARGET_TYPE_NAME, key = "#key") public Optional findByKey(final String key) { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/DistributionSetTypeManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/DistributionSetTypeManagementTest.java index fce1a6f61..dec2c5f9a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/DistributionSetTypeManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/DistributionSetTypeManagementTest.java @@ -36,7 +36,6 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.repository.model.NamedVersionedEntity; -import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.test.matcher.Expect; import org.eclipse.hawkbit.repository.test.matcher.ExpectEvents; import org.junit.jupiter.api.Test; @@ -72,7 +71,8 @@ class DistributionSetTypeManagementTest extends AbstractRepositoryManagementTest // remove OS distributionSetTypeManagement.unassignSoftwareModuleType(updatableType.getId(), osType.getId()); - assertThat(distributionSetTypeManagement.findByKey(USED_BY_DS_TYPE_KEY).orElseThrow().getMandatoryModuleTypes()).containsOnly(runtimeType); + assertThat(distributionSetTypeManagement.findByKey(USED_BY_DS_TYPE_KEY).orElseThrow().getMandatoryModuleTypes()).containsOnly( + runtimeType); } /** diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareModuleTypeManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareModuleTypeManagementTest.java index b7bc693de..96f1bda63 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareModuleTypeManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareModuleTypeManagementTest.java @@ -12,16 +12,12 @@ package org.eclipse.hawkbit.repository.jpa.management; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import java.util.List; - import jakarta.validation.ConstraintViolationException; import org.assertj.core.api.Assertions; import org.eclipse.hawkbit.repository.SoftwareModuleManagement; -import org.eclipse.hawkbit.repository.SoftwareModuleTypeManagement; import org.eclipse.hawkbit.repository.SoftwareModuleTypeManagement.Create; import org.eclipse.hawkbit.repository.SoftwareModuleTypeManagement.Update; -import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.junit.jupiter.api.Test; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTypeManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTypeManagementTest.java index 2d3d2657b..e537fed43 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTypeManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTypeManagementTest.java @@ -74,7 +74,7 @@ class TargetTypeManagementTest extends AbstractRepositoryManagementTest targetTypeManagement.delete(NOT_EXIST_IDL), "TargetType"); - verifyThrownExceptionBy(() -> targetTypeManagement.update(Update.builder().id(NOT_EXIST_IDL).build()),"TargetType"); + verifyThrownExceptionBy(() -> targetTypeManagement.update(Update.builder().id(NOT_EXIST_IDL).build()), "TargetType"); } /** diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TenantConfigurationManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TenantConfigurationManagementTest.java index f4eb2141c..b10c4a2e2 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TenantConfigurationManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TenantConfigurationManagementTest.java @@ -27,13 +27,11 @@ import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationProperties.T import org.junit.jupiter.api.Test; import org.springframework.context.EnvironmentAware; import org.springframework.core.env.Environment; -import org.springframework.test.context.TestPropertySource; /** * Feature: Component Tests - Repository
* Story: Tenant Configuration Management */ -@TestPropertySource(properties = {"hawkbit.cache.JpaTenantConfiguration.spec=maximumSize=0"}) // disable cache, its async processed class TenantConfigurationManagementTest extends AbstractJpaIntegrationTest implements EnvironmentAware { private Environment env; diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/resources/hawkbit-test-defaults.properties b/hawkbit-repository/hawkbit-repository-test/src/main/resources/hawkbit-test-defaults.properties index cd3833167..cec67aedd 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/resources/hawkbit-test-defaults.properties +++ b/hawkbit-repository/hawkbit-repository-test/src/main/resources/hawkbit-test-defaults.properties @@ -23,7 +23,13 @@ spring.jpa.properties.eclipselink.logging.parameters=true # Enforce persistence of target polls for test predictability. hawkbit.server.repository.eagerPollPersistence=true -# disables Rollout and RoulloutGroup status cache for tests +# disables tenant config cache for tests +hawkbit.cache.JpaTenantConfiguration.spec=maximumSize=0 +# disables type cache for tests +hawkbit.cache.JpaSoftwareModuleType.spec=maximumSize=0 +hawkbit.cache.JpaDistributionSetType.spec=maximumSize=0 +hawkbit.cache.JpaTargetType.spec=maximumSize=0 +# disables Rollout and RolloutGroup status cache for tests hawkbit.cache.RolloutStatus.spec=maximumSize=0 hawkbit.cache.RolloutGroupStatus.spec=maximumSize=0